前言
我今年大四即将毕业,毕设是深度学习相关,在进行理论学习时,一度对矩阵微分感到困惑,本科学习期间没接触过这个(软件工程专业。。。),网上资料也很零散,在《神经网络与深度学习》的数学基础篇章有相对详细的介绍(但是也少的可怜),下面是东拼西凑又求朋问友得到的个人理解,因为本人接触深度学习较晚,又非数学专业,所以可能有理解错误的地方,希望能和大家讨论。
矩阵微分
为了书写方便,常把单个函数对多个变量或者多元函数对单个变量的偏导数写成向量或者矩阵的形式,使其可以当做一个整体处理。矩阵微积分是多元微积分的一种表达方式,即可以使用矩阵和向量来表示因变量每个成分关于自变量每个成分的偏导数。 ——《神经网络与深度学习》
对这句话的理解:
-
矩阵微分是多元函数求导的一种书写行书,它的结果是各个偏导数的按照某一规定的布局。
-
矩阵微分的结果是一个矩阵或者向量,它内部一定包含 因变量里每一个成分关于自变量里每一个分量的偏导数 ,即
∂XXX∂YYY=⎣⎡∂xj∂yi⎦⎤yi∈YYY,xj∈XXX
-
这里的 ∂xj∂yi 是一个代表元素, 下标 i 和 j 也可以理解为在分母布局下的第 i 行、第 j 列 ; 在分子布局下的第 i 列、第 j 行,关于分子布局分母布局见下面。
矩阵微积分的表示通常有两种符号约定: 分子布局( Numerator Layout)和分母布局 ( Denominator Layout)。两者的区别是一个标量关于一个向量的导数是写成列向量还是行向量 。
例:
分子布局下
XXX=[x1,...,xn]∂XXX∂y=[∂x1∂y,∂x2∂y,...,∂xn∂y]
分母布局下
XXX=[x1,...,xn]∂XXX∂y=⎣⎢⎢⎢⎢⎢⎢⎢⎡∂x1∂y∂x2∂y...∂xn∂y⎦⎥⎥⎥⎥⎥⎥⎥⎤
我的理解:
- 既然矩阵微分是对偏导数的布局,那么布局就不能随便布局,就得按照一定规律和顺序把它们排布在结果矩阵上,要么结果矩阵中,对于每一行内的所有元素自变量都相同,因变量按下标顺序从头写按到尾,要么对于每一行内的所有元素因变量都相同,自变量按下标顺序从头写按到尾
- 如果每一行内的所有元素自变量都相同,因为自变量在分母,所以叫分母布局
- 如果每一行内的所有元素因变量都相同,因为因变量在分子,所以叫分子布局
- 如上面的分子布局中,分子只有一个,所以结果只有一行,分子保持不变,分母有n个,所以结果有n列;分母布局中,分母有n个,所以有n行,分子只有一个,所以只有一列
- 分母布局和分子布局是转置关系,看结果中的每一行每一列是分子不变还是分母不变就知道是啥布局了
更多例子:


矩阵与标量、标量与矩阵
矩阵参与求导运算,其实就把矩阵拆分成向量组,最后还是再算向量的微分,然后将结果拼在一起。
标量对矩阵求导
∂X∂y=⎣⎢⎢⎢⎢⎡∂x11∂y∂x21∂y⋮∂xp1∂y∂x12∂y∂x22∂y⋮∂xp2∂y⋯⋯⋱⋯∂x1q∂y∂x2q∂y⋮∂xpq∂y⎦⎥⎥⎥⎥⎤
矩阵对标量求导
∂x∂Y=⎣⎢⎢⎢⎡∂x∂y11∂x∂y12⋮∂x∂y1n∂x∂y21∂x∂y22⋮∂x∂y2n⋯⋯⋱⋯∂x∂ym1∂x∂ym2⋮∂x∂ymn⎦⎥⎥⎥⎤
矩阵对矩阵求导
将矩阵视为向量组,每个向量组对向量组求导。
矩阵求导运算思路与运算法则
运算思路:代表元素法
因为无论是矩阵求导,还是向量求导,本质都是每个元素对元素的求导,所以在分析求导问题的时候,可以从结果矩阵中,选取第 i 行 j 列为代表元素,因为代表元素一定是标量的求导,这时可以用熟悉的标量求导法则来推证。
代表元素法证明矩阵求导的加减法则
∂XXX∂(YYY+ZZZ)=∂XXX∂(YYY)+∂XXX∂(ZZZ)
假设
ZZZ=(z1,...,zn)YYY=(y1,...,yn)XXX=(x1,...,xn)
由矩阵加法得:
∂XXX∂(YYY+ZZZ)=⎣⎡∂xj∂(yi+zi)⎦⎤(yi+zi)∈YYY+ZZZ,xj∈XXX=⎣⎡∂xj∂(yi)+∂xj∂(zi)⎦⎤yi∈YYY,zi∈ZZZ,xj∈XXX
因为下标 i 和 下标 j 是独立的,所以一定能取遍 X,Y,Z 中所有的分量,故
⎣⎡∂xj∂(yi)+∂xj∂(zi)⎦⎤=⎣⎡∂xj∂(yi)⎦⎤+⎣⎡∂xj∂(zi)⎦⎤yi∈YYY,zi∈ZZZ,xj∈XXX=∂XXX∂(YYY)+∂XXX∂(ZZZ)
代表元素法证明乘法法则
∂XXX∂(YYY⋅ZZZ)=∂XXX∂(YYY)ZZZ+∂XXX∂(ZZZ)YYY
证明:
假设 X,Y,Z 为n维列向量,则
YYY⋅ZZZ=YYYTZZZ=i=1∑nyizi∂XXX∂YYY⋅ZZZ=⎣⎢⎡∂xj∂(∑i=1nyizi)⎦⎥⎤xj∈XXX
事实上由标量导数的性质和矩阵加法可得, ∑i=1nyizi 的累加符号可以提出去
⎣⎢⎡∂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⎣⎡∂xj∂(yk)zk⎦⎤=⎣⎡∑k=1n∂xj∂(yk)zk⎦⎤xj∈XXX
方框内的是代表元素,在分母布局下,xj 的下标 j 表示第 j 行 , 所以该矩阵全貌是
⎣⎡∑k=1n∂xj∂(yk)zk⎦⎤=⎣⎢⎢⎢⎢⎢⎢⎢⎡∑k=1n∂x1∂(yk)zk∑k=1n∂x2∂(yk)zk...∑k=1n∂xn∂(yk)zk⎦⎥⎥⎥⎥⎥⎥⎥⎤
由
i=1∑naibi=[a1,...,an]⎣⎢⎢⎢⎢⎡b1...bn⎦⎥⎥⎥⎥⎤
很容易判断出
⎣⎢⎢⎢⎢⎢⎢⎢⎡∑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⎣⎡∂xj∂(zk)yk⎦⎤=∂XXX∂(ZZZ)YYY
此时原式得证
∂XXX∂(YYY⋅ZZZ)=∂XXX∂(YYY)ZZZ+∂XXX∂(ZZZ)YYY
矩阵求导运算法则
其他乘法法则和链式法则也可以用类似的证明思路得到,这里略

