1.Introduction
线性代数在机器学习以及深度学习中扮演着重要的角色,涉及到向量的运算,矩阵的运算,特征值特征向量的求解等.在这里对于这些基础知识不再赘述,本文的重点在于矩阵的求导.本文主要参考吴恩达CS229课程的补充材料.
2.Gradient
假设存在函数 f : R m×n → R 以一个m×n的矩阵作为输入,以实数值作为函数的输出,那么这个函数的关于矩阵A的梯度可以表示为
也可以表示成下面这种形式
可以很容易看出,梯度的维度是和被求导矩阵的维度是一致的.因此,针对向量的特殊情况,就有如下表达式:
需要注意的一点是,上述性质只试用于函数是实值函数的情况,如果函数的值是向量或者矩阵,则不存在上述的性质.
此外,矩阵的梯度仍然具有下列两个性质:
现在,我们需要讨论一个在出现矩阵梯度时不可避免的问题:符号的歧义.理论上讲,梯度只是多元函数在求偏导数的一个很自然的扩展应用.然而,在实际操作时我们经常会遇到符号歧义的情况.举例来说,矩阵A ∈ R m×n 是一个固定系数的矩阵,向量b∈ Rm是一个固定系数的向量,函数 f : Rm → R 是一个输入为m维向量的实值函数.f的具体定义为: f (z) = zTz, 所以对应的梯度是∇ z f (z) = 2z.至此都没有什么问题,但是考虑如下表达式:
我们该怎样理解这样一个表达式,最起码可以有两种理解方式:
1.参考前文所写,输入是向量,结果是实值,梯度是∇ z f (z) = 2z,则有
2.如果把这个函数看做是x的函数,那么梯度求导就应是针对x的求导,A应该看作是常数,梯度结果就应该是
我们能够看出,问题主要在于针对谁在求梯度,所以在表示梯度的时候最好使用下表对梯度的求导对象进行标注.
3.Hessian
假设函数 f : Rn → R 是输入为n维的向量,输出为实值的函数,那么关于向量x的Hessian矩阵可以写作,∇ 2x f (x) 或者简单的表示为H,具体的形式如下
matrix of partial derivatives,
Hessian可以看做是二阶导,Gradient可以看做是一阶导数.
4.Useful deductions
1.Linear Algebra Properties
2.Matrix Derivatives
5 矩阵求导术
本部分主要参考这篇博客,写的可以说是非常棒啦.核心思想是下面这个公式
所有的矩阵求导的计算都可以利用这样一个公式和微分建立起联系,这个公式直观上也是很好理解的,即全微分等于偏微分之和,然后使用矩阵的迹的方法改写形式(迹具有很多可以利用的属性,改写成这种形式有助于后面的计算).包括连式法则,也都是凑出这个形式之后可以对应的写出偏导数的形式.
下面给出一些常用的公式:
1.加减法
2.乘法
3.转置
4.迹
5.逆
6.行列式(第二个公式仅可逆时成立)
7.逐元素相乘
8.逐元素函数
9.迹套给常数
10.转置
11.线性
12.乘法交换
13.矩阵乘法/逐元素乘法交换
6 examples
看到这里需要多说两句,本文的存在就是因为在计算softmax权重矩阵时遇到了障碍,才对矩阵求导进行了更为深入的理解;甚至在学习了这种方法之后还是没能够给出正确的答案.错误点在于,我的解法是严格按照连式法则,一步一步的求导;而答案的解法则是先带入中间表达式,化简形式之后再求导;这本来是一样的,只不过是计算难度上的差距.却在计算的过程中给我造成了很大的困扰.关键的的错误点在于,softmax函数并不是一个逐元素函数(仔细看分母),不能应用逐元素函数求微分的法则.