矩阵/向量求导
文章目录
前言
最近在看机器学习及神经网络等领域相关文章时,总是难以手撕矩阵求导类的公式,因此做个系统的与矩阵求导相关的总结与学习。
一、向量/矩阵
1.观前提醒
本篇中,所有使用的小写未加粗字母均为标量,例如 x x x;所有小写加粗字母为(列)向量,例如x;所有大写字母均表示为矩阵,例如X。
2.矩阵求导
矩阵求导细分可分为3类,分别是标量对向量求导,向量对标量求导和向量对向量求导。
2.0矩阵求导的布局
- 分子布局.
对于分子布局来说,求导结果的维度的行数以分子为主。 - 分母布局.
对于分母布局来说,求导结果的维度的行数以分母为主。
-
分母布局和分子布局相差一个转置
-
但是在机器学习算法原理的资料推导里,我们并没有看到说正在使用什么布局,也就是说布局被隐含了,这就需要自己去推演,比较麻烦。但是一般来说我们会使用一种叫混合布局的思路,即如果是向量或者矩阵对标量求导,则使用分子布局为准,如果是标量对向量或者矩阵求导,则以分母布局为准。对于向量对对向量求导,有些分歧。[1]
具体向量对标量,还是标量对向量的定义,在汉语里好像读多了有点难理解。以英文的为主。
2.1标量对向量求导(分母布局)Scalar-by-vertor
- 标量 y y y是向量x的函数,及 y y y= y y y(x)
- 分母x的维度为
n
∗
1
n*1
n∗1,则求导后维度跟随分母。
2.2向量对标量求导(分子布局)Vector-by-scalar
- 函数y是标量 x x x的函数,及y=y( x x x)
- 函数y维度为 m ∗ 1 m*1 m∗1,遵循分子布局,求导后跟随分母。
在分母布局下,则为如下形式
2.3向量对向量求导vector-by-vector
-
函数y是 m ∗ 1 m*1 m∗1维度,向量x是 n ∗ 1 n*1 n∗1维度
-
若遵循分子求导,则矩阵为 m ∗ n m*n m∗n维度,及Jacobi矩阵。如下所示:
-
有的资料上会使用 ∂ y ∂ x T \frac{{\partial {\bf{y}}}}{{\partial {{\bf{x}}^T}}} ∂xT∂y来定义雅克比(Jacobi)矩阵,意义是一样的。
-
若遵循分母布局求导,则分母布局是分子布局的转置。维度为 n ∗ m n*m n∗m,如下所示:
-
我们一般对按分母布局的矩阵称之为梯度矩阵,有的资料会用 ∂ y T ∂ x \frac{{\partial {\bf{y}^T}}}{{\partial {{\bf{x}}}}} ∂x∂yT来定义梯度矩阵,意义一样。
注: 默认形式一般用分母布局来表示
2.4小结
然而在日常机器学习领域推导过程中,很少对矩阵或向量进行逐元素求导,一般进行整体运算,在观感与理解上更加简洁与方便。下面将从矩阵整体方向讲一讲矩阵的运算法则。
二、 求导速查表[3]
向量对向量求导 vector-by-vector
默认会采用分母布局,即为右侧Denominator layout
标量对向量求导 Scalar-by-vertor
虚线上方为基础。默认会采用分母布局,即为右侧Denominator layout
向量对标量的求导 Vertor-by-scalar
默认会采用分子布局,即为左侧Numerator layout
后续可拓展
矩阵的迹方向还未用到,也暂未看。后续用到会看和及时跟进。
可参考
[1]矩阵求导:比我的Blog要详细的多,建议看此篇。
[2]matrix calculus :一个对矩阵计算的网站,非常好用。可导出为Latex格式,还可导出为python代码。
[3]维基百科:矩阵求导速查表:一个汇总的矩阵计算公式的网站。需要梯子。
[4]矩阵求导术:还未认真看,后续有需求可以仔细看。
[5]矩阵求导中为何会有转置:针对矩阵中为什么有求导后出现转置这个情况,这篇blog讲的很清楚,可以参考。
http://www.latexlive.com/##