CS224学习笔记补充-矩阵求导

  矩阵求导

Posted by 王难 on May 6, 2018

1.Introduction

 线性代数在机器学习以及深度学习中扮演着重要的角色,涉及到向量的运算,矩阵的运算,特征值特征向量的求解等.在这里对于这些基础知识不再赘述,本文的重点在于矩阵的求导.本文主要参考吴恩达CS229课程的补充材料.

2.Gradient

 假设存在函数 f : R m×n → R 以一个m×n的矩阵作为输入,以实数值作为函数的输出,那么这个函数的关于矩阵A的梯度可以表示为 image.png  也可以表示成下面这种形式 image.png  可以很容易看出,梯度的维度是和被求导矩阵的维度是一致的.因此,针对向量的特殊情况,就有如下表达式: image.png  需要注意的一点是,上述性质只试用于函数是实值函数的情况,如果函数的值是向量或者矩阵,则不存在上述的性质.  此外,矩阵的梯度仍然具有下列两个性质: image.png ————  现在,我们需要讨论一个在出现矩阵梯度时不可避免的问题:符号的歧义.理论上讲,梯度只是多元函数在求偏导数的一个很自然的扩展应用.然而,在实际操作时我们经常会遇到符号歧义的情况.举例来说,矩阵A ∈ R m×n 是一个固定系数的矩阵,向量b∈ Rm是一个固定系数的向量,函数 f : Rm → R 是一个输入为m维向量的实值函数.f的具体定义为: f (z) = zTz, 所以对应的梯度是∇ z f (z) = 2z.至此都没有什么问题,但是考虑如下表达式: image.png  我们该怎样理解这样一个表达式,最起码可以有两种理解方式:  1.参考前文所写,输入是向量,结果是实值,梯度是∇ z f (z) = 2z,则有 image.png  2.如果把这个函数看做是x的函数,那么梯度求导就应是针对x的求导,A应该看作是常数,梯度结果就应该是 image.png  我们能够看出,问题主要在于针对谁在求梯度,所以在表示梯度的时候最好使用下表对梯度的求导对象进行标注.

3.Hessian

假设函数 f : Rn → R 是输入为n维的向量,输出为实值的函数,那么关于向量x的Hessian矩阵可以写作,∇ 2x f (x) 或者简单的表示为H,具体的形式如下 matrix of partial derivatives, image.png  Hessian可以看做是二阶导,Gradient可以看做是一阶导数.

4.Useful deductions

1.Linear Algebra Properties

image.png image.png

2.Matrix Derivatives

image.png image.png image.png image.png image.png image.png

5 矩阵求导术

  本部分主要参考这篇博客,写的可以说是非常棒啦.核心思想是下面这个公式 image.png   所有的矩阵求导的计算都可以利用这样一个公式和微分建立起联系,这个公式直观上也是很好理解的,即全微分等于偏微分之和,然后使用矩阵的迹的方法改写形式(迹具有很多可以利用的属性,改写成这种形式有助于后面的计算).包括连式法则,也都是凑出这个形式之后可以对应的写出偏导数的形式.   下面给出一些常用的公式:   1.加减法 image.png   2.乘法 image.png   3.转置 image.png   4.迹 image.png   5.逆 image.png   6.行列式(第二个公式仅可逆时成立) image.png image.png   7.逐元素相乘 image.png   8.逐元素函数 image.png   9.迹套给常数 image.png   10.转置 image.png

  11.线性 image.png

  12.乘法交换 image.png

  13.矩阵乘法/逐元素乘法交换 image.png

6 examples

image.png image.png image.png   看到这里需要多说两句,本文的存在就是因为在计算softmax权重矩阵时遇到了障碍,才对矩阵求导进行了更为深入的理解;甚至在学习了这种方法之后还是没能够给出正确的答案.错误点在于,我的解法是严格按照连式法则,一步一步的求导;而答案的解法则是先带入中间表达式,化简形式之后再求导;这本来是一样的,只不过是计算难度上的差距.却在计算的过程中给我造成了很大的困扰.关键的的错误点在于,softmax函数并不是一个逐元素函数(仔细看分母),不能应用逐元素函数求微分的法则. image.png image.png