Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
矩阵乘向量对矩阵求导_向量对矩阵求导 ,希望能够帮助你!!!。
文章目录
矩阵,向量求导(Matrix calculus)
0.约定
1.目标
2.完整的求导表格
完整表格
1.布局说明
分子布局(Numerator-layout)
分母布局(Denominator-layout)
注意:可以各选择一种布局来求导,但是对于某一种求导类型,不能同时使用分子布局和分母布局求导
2.举个例子
3.表格细化
1.Vector-by-vector
2.Scalar-by-vector
3.Vector-by-scalar
4.Scalar-by-matrix
5.Matrix-by-scalar
6.Scalar-by-scalar
3.实际操作
矩阵向量求导的链式法则
总结
矩阵,向量求导(Matrix calculus)
Not to be confused with geometric calculus or vector calculus.
0.约定
标量用 x , y x,y x , y 小写字母表示。
向量用 x , y \mathbf{x},\mathbf{y} x , y 小写粗体字母表示。(默认为列向量 x [ n ∗ 1 ] \mathbf{x}_{[n*1]} x [ n ∗ 1 ] , n n n 维; y [ m ∗ 1 ] \mathbf{y}_{[m*1]} y [ m ∗ 1 ] , m m m 维)。
矩阵用 X , Y , A \mathbf{X},\mathbf{Y},\mathbf{A} X , Y , A 大写粗体字母表示。可能表示 m ∗ n m*n m ∗ n 维,也可能是 n ∗ m n*m n ∗ m 维,也可能是 p ∗ q p*q p ∗ q 维度。
1.目标
理清标量,向量和矩阵之间的求导关系。
2.完整的求导表格
完整表格
表格中的向量均表示列向量!
1.布局说明
前提说明:若 x x x 为向量,则默认 x x x 为列向量, x T x^T x T 为行向量。
分子布局(Numerator-layout)
分子布局: 分子列向量 y y y ,分母为行向量 x T x^T x T (即,分子为列向量或者分母为行向量)。
分母布局(Denominator-layout)
分母布局: 分子为行向量 y T y^T y T ,分母为 列向量 x x x (即,分子为行向量或者分母为列向量)。
注意:可以各选择一种布局来求导,但是对于某一种求导类型,不能同时使用分子布局和分母布局求导
2.举个例子
分子布局例子
说明:上述公式依次表示在分子布局下, 标 量 向 量 , 向 量 标 量 , 向 量 向 量 , 标 量 矩 阵 , 矩 阵 标 量 \frac{标量}{向量},\frac{向量}{标量},\frac{向量}{向量},\frac{标量}{矩阵},\frac{矩阵}{标量} 向 量 标 量 , 标 量 向 量 , 向 量 向 量 , 矩 阵 标 量 , 标 量 矩 阵 。
其中 y \mathbf{y} y 是列向量( n ∗ 1 n*1 n ∗ 1 ), x \mathbf{x} x 是列向量( m ∗ 1 m*1 m ∗ 1 ), X \mathbf{X} X 是矩阵( p ∗ q p*q p ∗ q ), Y Y Y 是矩阵( m ∗ n m*n m ∗ n )。
标量/向量(分母是向量,且是分子布局,则把分母的向量按照行向量铺开)
向量/标量:(分子是向量,且是分子布局,则把分子按照列向量铺开)
向量/向量:(分子分母都是向量,且是分子布局,则分子向量按照列向量铺开,分母向量按照行向量铺开)【雅克比式】
标量/矩阵(分子布局下, X \mathbf{X} X 矩阵是转置后铺开的)
矩阵/标量(分子布局下, Y \mathbf{Y} Y 矩阵是原型铺开)
分母布局例子
说明:上述公式依次表示在分母布局下, 标 量 向 量 , 向 量 标 量 , 向 量 向 量 , 标 量 矩 阵 \frac{标量}{向量},\frac{向量}{标量},\frac{向量}{向量},\frac{标量}{矩阵} 向 量 标 量 , 标 量 向 量 , 向 量 向 量 , 矩 阵 标 量 。
其中 y \mathbf{y} y 是列向量( n ∗ 1 n*1 n ∗ 1 ), x \mathbf{x} x 是列向量( m ∗ 1 m*1 m ∗ 1 ), X \mathbf{X} X 是矩阵( p ∗ q p*q p ∗ q )
分母中没有 矩 阵 标 量 \frac{矩阵}{标量} 标 量 矩 阵 。
标量/向量(分母是向量,且是分母布局,则把分母的向量按照列向量铺开)
向量/标量:(分子是向量,且是分母布局,则把分子按照行向量铺开)
向量/向量:(分子分母都是向量,且是分母布局,则分子向量按照行向量铺开,分母向量按照列向量铺开)【梯度矩阵】
标量/矩阵(分母布局下,X矩阵无需转置,就是原始矩阵)
3.表格细化
1.Vector-by-vector
2.Scalar-by-vector
3.Vector-by-scalar
4.Scalar-by-matrix
直接维基https://en.wikipedia.org/wiki/Matrix_calculus
5.Matrix-by-scalar
直接维基https://en.wikipedia.org/wiki/Matrix_calculus
6.Scalar-by-scalar
直接维基https://en.wikipedia.org/wiki/Matrix_calculus
3.实际操作
参考自:https://blog.csdn.net/nomadlx53/article/details/
举一个线性模型的例子
∂ ( y − X w ) T ( y − X w ) ∂ w \frac{\partial(y-Xw)^{T}(y-Xw)}{\partial w} ∂ w ∂ ( y − X w ) T ( y − X w )
w , y w,y w , y 均为列向量, w w w 为 ( n ∗ 1 ) (n*1) ( n ∗ 1 ) , y y y 为 ( m ∗ 1 ) (m*1) ( m ∗ 1 ) ; X X X 为矩阵,为 ( m ∗ n ) (m*n) ( m ∗ n ) .
分析:该式属于 标 量 向 量 \frac{标量}{向量} 向 量 标 量 ,目标是得出结果为列向量,所以更加上述的总表,整体采用分母布局。
展开 ∂ ∂ w ( y T − w T X T ) ( y − X w ) = ∂ ∂ w ( y T y − y T X w − w T X T y + w T X T X w ) = ∂ ∂ w ( y T y ) − ∂ ∂ w ( y T X w ) − ∂ ∂ w ( w T X T y ) + ∂ ∂ w ( w T X T X w ) \frac{\partial}{\partial w}(y^T-w^TX^T)(y-Xw)=\frac{\partial}{\partial w}(y^Ty-y^TXw-w^TX^Ty+w^TX^TXw)\\=\frac{\partial}{\partial w}(y^Ty)-\frac{\partial}{\partial w}(y^TXw)-\frac{\partial}{\partial w}(w^TX^Ty)+\frac{\partial}{\partial w}(w^TX^TXw) ∂ w ∂ ( y T − w T X T ) ( y − X w ) = ∂ w ∂ ( y T y − y T X w − w T X T y + w T X T X w ) = ∂ w ∂ ( y T y ) − ∂ w ∂ ( y T X w ) − ∂ w ∂ ( w T X T y ) + ∂ w ∂ ( w T X T X w )
∂ ∂ w ( y T y ) \frac{\partial}{\partial w}(y^Ty) ∂ w ∂ ( y T y )
查上述的Scalar-by-vector identities,在表格中匹配形式到第1行的位置,因为分母为列向量,因此为分母布局,对应的求导结果就是 0 0 0 。
∂ ∂ w ( y T X w ) \frac{\partial}{\partial w}(y^TXw) ∂ w ∂ ( y T X w )
查上述的Scalar-by-vector identities表格,在表格中匹配形式到第11行的位置,对应的求导结果是 X T y X^Ty X T y 。
∂ ∂ w ( w T X T y ) \frac{\partial}{\partial w}(w^TX^Ty) ∂ w ∂ ( w T X T y )
查上述的Scalar-by-vector identities表格,在表格中匹配形式到第10行的位置,对应的求导结果是 X T y X^Ty X T y 。
∂ ∂ w ( w T X T X w ) \frac{\partial}{\partial w}(w^TX^TXw) ∂ w ∂ ( w T X T X w )
查上述的Scalar-by-vector identities表格,在表格中匹配形式到第13行的位置,对应的结果为 2 X T X w 2X^TXw 2 X T X w 。
合并: ∂ ( y − X w ) T ( y − X w ) ∂ w = 0 − X T y − X T y + 2 X T X w = − 2 X T ( y − X w ) = 2 X T ( X w − y ) \frac{\partial(y-Xw)^{T}(y-Xw)}{\partial w}=0-X^Ty-X^Ty+2X^TXw=-2X^T(y-Xw)=2X^T(Xw-y) ∂ w ∂ ( y − X w ) T ( y − X w ) = 0 − X T y − X T y + 2 X T X w = − 2 X T ( y − X w ) = 2 X T ( X w − y )
4.习惯上使用混合布局
向量均以列向量表示。
标 量 向 量 , 标 量 矩 阵 \frac{标量}{向量},\frac{标量}{矩阵} 向 量 标 量 , 矩 阵 标 量 使用分母布局,保证求导完之后结果是列向量。
向 量 标 量 , 矩 阵 标 量 \frac{向量}{标量},\frac{矩阵}{标量} 标 量 向 量 , 标 量 矩 阵 使用分子布局,保证求导完之后结果是列向量。
向 量 向 量 \frac{向量}{向量} 向 量 向 量 使用雅克比式(Jaocibian)。
总结
矢量(向量或矩阵)在分子上,标量在分母上,采用分子布局
矢量(向量或矩阵)在分母上,标量在分子上,采用分母布局
向量在分子上,也在分母上使用雅克比式(Jaocibian)。
说明, y \mathbf{y} y 是(m*1)的列向量, x \mathbf{x} x 是(n*1)的列向量, y x \frac{\mathbf{y}}{\mathbf{x}} x y 的结果是(m*n)大小的矩阵。
详细参见:https://www.cnblogs.com/pinard/p/10750718.html
矩阵向量求导的链式法则
1. 一般步骤
按照标量的链式法则写出链式关系。(预想布局方式(采用一种))
对于前后导数相乘的行列上的不匹配,进行调整。(不是分子上加转置,就是分母上加转置),矩阵前后可以相乘。
对于求导的每一项,简单的可以直接写出,不能直接写出的,进行查表。
2.深入了解和推导
总结
1.个人操作
首先掌握布局方式
能根据表(不一定都记住),写出求导结果
链式法则,可能会修改前后关系,调整符号表示
想一步步推导出来,参见刘建平大佬https://www.cnblogs.com/pinard/p/10750718.html
2.其他
网上关于这方面的教材有:
张贤达《矩阵分析与应用》
《matrix vector derivatives for machine learning》
《The Matrix Cookbook》
https://www.zhihu.com/question/【知乎上关于矩阵求导教材的讨论】
http://psi.toronto.edu/
知乎:https://pan.百度.com/s/1jGFBSNk#list/path=%2F【来自知乎的一个分享,把百度换成baidu即可】
参考:
https://en.wikipedia.org/wiki/Matrix_calculus
https://www.cnblogs.com/pinard/p/10750718.html【合辑】
https://blog.csdn.net/lcczzu/article/details/
https://www.pianshen.com/article//
https://blog.csdn.net/nomadlx53/article/details/
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。