我今年大四即将毕业,毕设是深度学习相关,在进行理论学习时,一度对矩阵微分感到困惑,本科学习期间没接触过这个(软件工程专业。。。),网上资料也很零散,在《神经网络与深度学习》的数学基础篇章有相对详细的介绍(但是也少的可怜),下面是东拼西凑又求朋问友得到的个人理解,因为本人接触深度学习较晚,又非数学专业,所以可能有理解错误的地方,希望能和大家讨论。
为了书写方便,常把单个函数对多个变量或者多元函数对单个变量的偏导数写成向量或者矩阵的形式,使其可以当做一个整体处理。矩阵微积分是多元微积分的一种表达方式,即可以使用矩阵和向量来表示因变量每个成分关于自变量每个成分的偏导数。 ——《神经网络与深度学习》
对这句话的理解:
矩阵微分是多元函数求导的一种书写行书,它的结果是各个偏导数的按照某一规定的布局。
矩阵微分的结果是一个矩阵或者向量,它内部一定包含 因变量里每一个成分关于自变量里每一个分量的偏导数 ,即
∂ Y ∂ X = [ ∂ y i ∂ x j ] y i ∈ Y , x j ∈ X \frac{\partial{\pmb{Y}}}{\partial{\pmb{X}}}= \left[ \begin{matrix} & & \\ & \frac{\partial y_i}{\partial x_j} & \\ & & \end{matrix} \right]\\ y_i\in\pmb{Y},x_j\in\pmb{X} ∂XXX∂YYY=⎣⎡∂xj∂yi⎦⎤yi∈YYY,xj∈XXX
这里的 ∂ y i ∂ x j \frac{\partial y_i}{\partial x_j} ∂xj∂yi 是一个代表元素, 下标 i i i 和 j j j 也可以理解为在分母布局下的第 i i i 行、第 j j j 列 ; 在分子布局下的第 i i i 列、第 j j j 行,关于分子布局分母布局见下面。
矩阵微积分的表示通常有两种符号约定: 分子布局( Numerator Layout)和分母布局 ( Denominator Layout)。两者的区别是一个标量关于一个向量的导数是写成列向量还是行向量 。
例:
分子布局下
X = [ x 1 , . . . , x n ] ∂ y ∂ X = [ ∂ y ∂ x 1 , ∂ y ∂ x 2 , . . . , ∂ y ∂ x n ] \pmb{X}=[x_1,...,x_n]\\ \frac{\partial{y}}{\partial{\pmb{X}}}=[ \begin{matrix} \frac{\partial{y}}{\partial{}x_1}, \frac{\partial{y}}{\partial{}x_2}, ..., \frac{\partial{y}}{\partial{}x_n} \end{matrix}] XXX=[x1,...,xn]∂XXX∂y=[∂x1∂y,∂x2∂y,...,∂xn∂y]
分母布局下
X = [ x 1 , . . . , x n ] ∂ y ∂ X = [ ∂ y ∂ x 1 ∂ y ∂ x 2 . . . ∂ y ∂ x n ] \pmb{X}=[x_1,...,x_n]\\ \frac{\partial{y}}{\partial{\pmb{X}}}=\left[ \begin{matrix} \frac{\partial{y}}{\partial{}x_1}\\ \frac{\partial{y}}{\partial{}x_2}\\ .\\ .\\ .\\ \frac{\partial{y}}{\partial{}x_n}\\ \end{matrix}\right] XXX=[x1,...,xn]∂XXX∂y=⎣⎢⎢⎢⎢⎢⎢⎢⎡∂x1∂y∂x2∂y...∂xn∂y⎦⎥⎥⎥⎥⎥⎥⎥⎤
我的理解:
更多例子:
矩阵参与求导运算,其实就把矩阵拆分成向量组,最后还是再算向量的微分,然后将结果拼在一起。
∂ y ∂ X = [ ∂ y ∂ x 11 ∂ y ∂ x 12 ⋯ ∂ y ∂ x 1 q ∂ y ∂ x 21 ∂ y ∂ x 22 ⋯ ∂ y ∂ x 2 q ⋮ ⋮ ⋱ ⋮ ∂ y ∂ x p 1 ∂ y ∂ x p 2 ⋯ ∂ y ∂ x p q ] \frac{\partial y}{\partial\mathbf{X}}=\begin{bmatrix}\frac{\partial y}{\partial x_{11}} & \frac{\partial y}{\partial x_{12}} & \cdots & \frac{\partial y}{\partial x_{1q}}\\ \frac{\partial y}{\partial x_{21}} & \frac{\partial y}{\partial x_{22}} & \cdots & \frac{\partial y}{\partial x_{2q}}\\ \vdots & \vdots & \ddots & \vdots\\ \frac{\partial y}{\partial x_{p1}} & \frac{\partial y}{\partial x_{p2}} & \cdots & \frac{\partial y}{\partial x_{pq}} \end{bmatrix} ∂X∂y=⎣⎢⎢⎢⎢⎡∂x11∂y∂x21∂y⋮∂xp1∂y∂x12∂y∂x22∂y⋮∂xp2∂y⋯⋯⋱⋯∂x1q∂y∂x2q∂y⋮∂xpq∂y⎦⎥⎥⎥⎥⎤
∂ Y ∂ x = [ ∂ y 11 ∂ x ∂ y 21 ∂ x ⋯ ∂ y m 1 ∂ x ∂ y 12 ∂ x ∂ y 22 ∂ x ⋯ ∂ y m 2 ∂ x ⋮ ⋮ ⋱ ⋮ ∂ y 1 n ∂ x ∂ y 2 n ∂ x ⋯ ∂ y m n ∂ x ] \frac{\partial\mathbf{Y}}{\partial x}=\begin{bmatrix}\frac{\partial y_{11}}{\partial x} & \frac{\partial y_{21}}{\partial x} & \cdots & \frac{\partial y_{m1}}{\partial x}\\ \frac{\partial y_{12}}{\partial x} & \frac{\partial y_{22}}{\partial x} & \cdots & \frac{\partial y_{m2}}{\partial x}\\ \vdots & \vdots & \ddots & \vdots\\ \frac{\partial y_{1n}}{\partial x} & \frac{\partial y_{2n}}{\partial x} & \cdots & \frac{\partial y_{mn}}{\partial x} \end{bmatrix} ∂x∂Y=⎣⎢⎢⎢⎡∂x∂y11∂x∂y12⋮∂x∂y1n∂x∂y21∂x∂y22⋮∂x∂y2n⋯⋯⋱⋯∂x∂ym1∂x∂ym2⋮∂x∂ymn⎦⎥⎥⎥⎤
将矩阵视为向量组,每个向量组对向量组求导。
因为无论是矩阵求导,还是向量求导,本质都是每个元素对元素的求导,所以在分析求导问题的时候,可以从结果矩阵中,选取第 i i i 行 j j j 列为代表元素,因为代表元素一定是标量的求导,这时可以用熟悉的标量求导法则来推证。
∂ ( Y + Z ) ∂ X = ∂ ( Y ) ∂ X + ∂ ( Z ) ∂ X \frac{\partial(\pmb Y+\pmb Z)}{\partial \pmb X}= \frac{\partial(\pmb Y)}{\partial \pmb X} + \frac{\partial(\pmb Z)}{\partial \pmb X} ∂XXX∂(YYY+ZZZ)=∂XXX∂(YYY)+∂XXX∂(ZZZ)
假设
Z = ( z 1 , . . . , z n ) Y = ( y 1 , . . . , y n ) X = ( x 1 , . . . , x n ) \pmb{Z}=(z_1,...,z_n)\\ \pmb{Y}=(y_1,...,y_n)\\ \pmb{X}=(x_1,...,x_n) ZZZ=(z1,...,zn)YYY=(y1,...,yn)XXX=(x1,...,xn)
由矩阵加法得:
∂ ( Y + Z ) ∂ X = [ ∂ ( y i + z i ) ∂ x j ] ( y i + z i ) ∈ Y + Z , x j ∈ X = [ ∂ ( y i ) ∂ x j + ∂ ( z i ) ∂ x j ] y i ∈ Y , z i ∈ Z , x j ∈ X \frac{\partial(\pmb Y+\pmb Z)}{\partial \pmb X}= \left[ \begin{matrix} & & \\ & \frac{\partial( y_i + z_i)}{\partial x_j} & \\ & & \end{matrix} \right]\\ ( y_i + z_i)\in\pmb{Y}+\pmb{Z},x_j\in\pmb{X}\\ = \left[ \begin{matrix} & & \\ & \frac{\partial( y_i)}{\partial x_j}+\frac{\partial( z_i)}{\partial x_j} & \\ & & \end{matrix} \right]\\ y_i\in\pmb{Y},z_i\in\pmb{Z},x_j\in\pmb{X}\\ ∂XXX∂(YYY+ZZZ)=⎣⎡∂xj∂(yi+zi)⎦⎤(yi+zi)∈YYY+ZZZ,xj∈XXX=⎣⎡∂xj∂(yi)+∂xj∂(zi)⎦⎤yi∈YYY,zi∈ZZZ,xj∈XXX
因为下标 i i i 和 下标 j j j 是独立的,所以一定能取遍 X , Y , Z X,Y,Z X,Y,Z 中所有的分量,故
[ ∂ ( y i ) ∂ x j + ∂ ( z i ) ∂ x j ] = [ ∂ ( y i ) ∂ x j ] + [ ∂ ( z i ) ∂ x j ] y i ∈ Y , z i ∈ Z , x j ∈ X = ∂ ( Y ) ∂ X + ∂ ( Z ) ∂ X \left[ \begin{matrix} & & \\ & \frac{\partial( y_i)}{\partial x_j}+\frac{\partial( z_i)}{\partial x_j} & \\ & & \end{matrix} \right] =\left[ \begin{matrix} & & \\ & \frac{\partial( y_i)}{\partial x_j} & \\ & & \end{matrix} \right]+\left[ \begin{matrix} & & \\ & \frac{\partial( z_i)}{\partial x_j} & \\ & & \end{matrix} \right]\\ y_i\in\pmb{Y},z_i\in\pmb{Z},x_j\in\pmb{X}\\ =\frac{\partial(\pmb Y)}{\partial \pmb X} + \frac{\partial(\pmb Z)}{\partial \pmb X} ⎣⎡∂xj∂(yi)+∂xj∂(zi)⎦⎤=⎣⎡∂xj∂(yi)⎦⎤+⎣⎡∂xj∂(zi)⎦⎤yi∈YYY,zi∈ZZZ,xj∈XXX=∂XXX∂(YYY)+∂XXX∂(ZZZ)
∂ ( Y ⋅ Z ) ∂ X = ∂ ( Y ) ∂ X Z + ∂ ( Z ) ∂ X Y \frac{\partial(\pmb Y\cdot\pmb Z)}{\partial \pmb X}= \frac{\partial(\pmb Y)}{\partial \pmb X}\pmb Z + \frac{\partial(\pmb Z)}{\partial \pmb X}\pmb Y ∂XXX∂(YYY⋅ZZZ)=∂XXX∂(YYY)ZZZ+∂XXX∂(ZZZ)YYY
证明:
假设 X , Y , Z X,Y,Z X,Y,Z 为n维列向量,则
Y ⋅ Z = Y T Z = ∑ i = 1 n y i z i ∂ Y ⋅ Z ∂ X = [ ∂ ( ∑ i = 1 n y i z i ) ∂ x j ] x j ∈ X \pmb Y \cdot \pmb Z=\pmb Y^T \pmb Z=\sum_{i=1}^{n}y_iz_i\\ \frac{\partial\pmb Y\cdot\pmb Z}{\partial \pmb X}=\left[ \begin{matrix} & & \\ & \frac{\partial(\sum_{i=1}^{n}y_iz_i)}{\partial x_j} & \\ & & \end{matrix} \right]\\ x_j\in\pmb{X} YYY⋅ZZZ=YYYTZZZ=i=1∑nyizi∂XXX∂YYY⋅ZZZ=⎣⎢⎡∂xj∂(∑i=1nyizi)⎦⎥⎤xj∈XXX
事实上由标量导数的性质和矩阵加法可得, ∑ i = 1 n y i z i \sum_{i=1}^{n}y_iz_i ∑i=1nyizi 的累加符号可以提出去
[ ∂ ( ∑ i = 1 n y i z i ) ∂ x j ] = ∑ k = 1 n [ ∂ ( y k z k ) ∂ x j ] = ∑ k = 1 n [ ∂ ( y k ) ∂ x j z k + ∂ ( z k ) ∂ x j y k ] = ∑ k = 1 n [ ∂ ( y k ) ∂ x j z k ] + ∑ k = 1 n [ ∂ ( z k ) ∂ x j y k ] x j ∈ X \left[ \begin{matrix} & & \\ & \frac{\partial(\sum_{i=1}^{n}y_iz_i)}{\partial x_j} & \\ & & \end{matrix} \right] = \sum_{k=1}^{n} \left[ \begin{matrix} & & \\ & \frac{\partial(y_kz_k)}{\partial x_j} & \\ & & \end{matrix} \right] = \sum_{k=1}^{n} \left[ \begin{matrix} & & \\ & \frac{\partial(y_k)}{\partial x_j}z_k+\frac{\partial(z_k)}{\partial x_j}y_k & \\ & & \end{matrix} \right]\\ =\sum_{k=1}^{n} \left[ \begin{matrix} & & \\ & \frac{\partial(y_k)}{\partial x_j}z_k & \\ & & \end{matrix} \right] + \sum_{k=1}^{n} \left[ \begin{matrix} & & \\ & \frac{\partial(z_k)}{\partial x_j}y_k & \\ & & \end{matrix} \right]\\ x_j\in\pmb{X}\\ ⎣⎢⎡∂xj∂(∑i=1nyizi)⎦⎥⎤=k=1∑n⎣⎡∂xj∂(ykzk)⎦⎤=k=1∑n⎣⎡∂xj∂(yk)zk+∂xj∂(zk)yk⎦⎤=k=1∑n⎣⎡∂xj∂(yk)zk⎦⎤+k=1∑n⎣⎡∂xj∂(zk)yk⎦⎤xj∈XXX
考察第一项,由矩阵加法可得:
∑ k = 1 n [ ∂ ( y k ) ∂ x j z k ] = [ ∑ k = 1 n ∂ ( y k ) ∂ x j z k ] x j ∈ X \sum_{k=1}^{n} \left[ \begin{matrix} & & \\ & \frac{\partial(y_k)}{\partial x_j}z_k & \\ & & \end{matrix} \right] =\left[ \begin{matrix} & & \\ & \sum_{k=1}^{n}\frac{\partial(y_k)}{\partial x_j}z_k & \\ & & \end{matrix} \right] \\ x_j\in\pmb{X}\\ k=1∑n⎣⎡∂xj∂(yk)zk⎦⎤=⎣⎡∑k=1n∂xj∂(yk)zk⎦⎤xj∈XXX
方框内的是代表元素,在分母布局下, x j x_j xj 的下标 j j j 表示第 j j j 行 , 所以该矩阵全貌是
[ ∑ k = 1 n ∂ ( y k ) ∂ x j z k ] = [ ∑ k = 1 n ∂ ( y k ) ∂ x 1 z k ∑ k = 1 n ∂ ( y k ) ∂ x 2 z k . . . ∑ k = 1 n ∂ ( y k ) ∂ x n z k ] \left[ \begin{matrix} & & \\ & \sum_{k=1}^{n}\frac{\partial(y_k)}{\partial x_j}z_k & \\ & & \end{matrix} \right]= \left[ \begin{matrix} \sum_{k=1}^{n}\frac{\partial(y_k)}{\partial x_1}z_k \\ \sum_{k=1}^{n}\frac{\partial(y_k)}{\partial x_2}z_k \\ .\\ .\\ .\\ \sum_{k=1}^{n}\frac{\partial(y_k)}{\partial x_n}z_k \end{matrix} \right] \\ ⎣⎡∑k=1n∂xj∂(yk)zk⎦⎤=⎣⎢⎢⎢⎢⎢⎢⎢⎡∑k=1n∂x1∂(yk)zk∑k=1n∂x2∂(yk)zk...∑k=1n∂xn∂(yk)zk⎦⎥⎥⎥⎥⎥⎥⎥⎤
由
∑ i = 1 n a i b i = [ a 1 , . . . , a n ] [ b 1 . . . b n ] \sum_{i=1}^n a_ib_i =[a_1,...,a_n] \left[ \begin{matrix} b_1 \\ .\\ .\\ .\\ b_n \end{matrix} \right] i=1∑naibi=[a1,...,an]⎣⎢⎢⎢⎢⎡b1...bn⎦⎥⎥⎥⎥⎤
很容易判断出
[ ∑ k = 1 n ∂ ( y k ) ∂ x 1 z k ∑ k = 1 n ∂ ( y k ) ∂ x 2 z k . . . ∑ k = 1 n ∂ ( y k ) ∂ x n z k ] = [ ∂ ( y 1 ) ∂ x 1 . . . ∂ ( y n ) ∂ x 1 . . . . . . ∂ ( y 1 ) ∂ x n . . . ∂ ( y n ) ∂ x x ] [ z 1 . . . z n ] = ∂ ( Y ) ∂ X Z \left[ \begin{matrix} \sum_{k=1}^{n}\frac{\partial(y_k)}{\partial x_1}z_k \\ \sum_{k=1}^{n}\frac{\partial(y_k)}{\partial x_2}z_k \\ .\\ .\\ .\\ \sum_{k=1}^{n}\frac{\partial(y_k)}{\partial x_n}z_k \end{matrix} \right] = \left[ \begin{matrix} \frac{\partial(y_1)}{\partial x_1}&...& \frac{\partial(y_n)}{\partial x_1} \\ . & & .\\ . & & .\\ . & & .\\ \frac{\partial(y_1)}{\partial x_n}&...& \frac{\partial(y_n)}{\partial x_x} \end{matrix} \right] \left[ \begin{matrix} z_1 \\ .\\ .\\ .\\ z_n \end{matrix} \right] = \frac{\partial(\pmb Y)}{\partial \pmb X}\pmb Z ⎣⎢⎢⎢⎢⎢⎢⎢⎡∑k=1n∂x1∂(yk)zk∑k=1n∂x2∂(yk)zk...∑k=1n∂xn∂(yk)zk⎦⎥⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎡∂x1∂(y1)...∂xn∂(y1)......∂x1∂(yn)...∂xx∂(yn)⎦⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎡z1...zn⎦⎥⎥⎥⎥⎤=∂XXX∂(YYY)ZZZ
同理可证,第二项:
∑ k = 1 n [ ∂ ( z k ) ∂ x j y k ] = ∂ ( Z ) ∂ X Y \sum_{k=1}^{n} \left[ \begin{matrix} & & \\ & \frac{\partial(z_k)}{\partial x_j}y_k & \\ & & \end{matrix} \right]=\frac{\partial(\pmb Z)}{\partial \pmb X}\pmb Y\\ k=1∑n⎣⎡∂xj∂(zk)yk⎦⎤=∂XXX∂(ZZZ)YYY
此时原式得证
∂ ( Y ⋅ Z ) ∂ X = ∂ ( Y ) ∂ X Z + ∂ ( Z ) ∂ X Y \frac{\partial(\pmb Y\cdot\pmb Z)}{\partial \pmb X}= \frac{\partial(\pmb Y)}{\partial \pmb X}\pmb Z + \frac{\partial(\pmb Z)}{\partial \pmb X}\pmb Y ∂XXX∂(YYY⋅ZZZ)=∂XXX∂(YYY)ZZZ+∂XXX∂(ZZZ)YYY
其他乘法法则和链式法则也可以用类似的证明思路得到,这里略