https://zhuanlan.zhihu.com/p/137702347
这篇文章讲得不错
好像下面这篇文章也写得不错,之后有空再看
https://zhuanlan.zhihu.com/p/24709748
虽然说学过微积分理论上就能推导出矩阵求导的法则,但是矩阵求导的确是很麻烦,先不提张量相关,简单的来组合一下就很多可能:
向量对标量求导 (Vector-by-scalar)
向量 ,对标量 求导,一般写为:
常见例子是位移对时间求导, 速度对时间求导。
标量对向量求导(Scalar-by-vector)
标量 y 对 向量 求导写作:
这里可能会让人疑惑,为什么上面是列向量而这里则是行向量。
这是矩阵求导可能会比较麻烦的第二个地方,可能有不同的布局方式:
- 分子布局(Numerator Layout):分子不变,分母转置
- 分母布局(Denominator Layout):分母不变,分子转置
当然还有混合布局。
用分子布局因为 wikipedia 里就是这样做的,而且有些只能有分子布局表示。
这里可能会分子布局可能会有点让人不习惯,因为比如梯度,我们很经常会把它看成列向量:
但实质上有些地方也把梯度看成/写成行向量,重要的是比如你在使用的时候根据自己所默认的认为是行向量还是列向量的不同在做不同的操作的时候稍加注意就ok了,比如下面这个式子列向量无所谓,因为是点乘,但是如果看成矩阵之间的乘法当然我们就需要转置作为列向量的梯度了:
向量对向量求导(Vector-by-vector)
向量 对向量 求导,同样分子布局:
正好是雅克比矩阵:
这是使用分子布局的好处,否则就是雅克比的转置了。
这样的好处是写下这个式子也很自然:
矩阵对标量求导 (Matrix-by-scalar)
标量对矩阵求导(Scalar-by-matrix)
例子
之所以说矩阵求导本质上还是对单个变量求导,来看一个例子,比如:
先来计算 :
, 利用上面的向量对向量求导,使用雅克比矩阵:
同时也可以尝试使用分母布局,求出来对应为
计算
wikipedia 上的表格可以用来速查。除此之外还有一个网站可以用来计算矩阵求导:
Matrix Calculuswww.matrixcalculus.org
试一下:
还可以导出为 Python code 或者 Latex , cool,再试一个:
增加条件, 为对称矩阵:
looks good, cool!
原创文章,作者:Carrie001128,如若转载,请注明出处:https://blog.ytso.com/245462.html