机器学习中矩阵求导规则

求导布局:

分子布局(numerator layout):

m维列向量对标量求导结果为m维列向量,标量对m*n维矩阵求导结果为n*m维,m维列向量对n维列向量求导结果为m*n维(雅克比矩阵)

分母布局(denominator layout):

m维列向量对标量求导结果为m维行向量,标量对m*n维矩阵求导结果为m*n维,m维列向量对n维列向量求导结果为n*m维(梯度矩阵)

一般规则:

向量或矩阵对标量求导一般为分子布局,标量对向量或矩阵求导一般为分母布局,向量对向量求导看具体情况。

定义法求导

标量对向量的求导

sample 1



其中x为n维列向量,则y对x的导数为:

sample 2


则导数为:


其中,

标量对矩阵的求导


其中,a为m维行向量,X为m*n矩阵,b为n维行向量。
则:



向量对向量的求导

设A为m*n矩阵,x为n维向量,y为m维向量,y对x的求导结果为m*n矩阵

微分法求导

标量对矩阵的微分


标量对向量的微分也如上式。因为偏导使用分母布局,故需转置后乘以dX。

矩阵微分性质

加减法:d(X\pm Y)=dX\pm dY\\ 乘法:d(XY)=XdY+YdX\\ 转置:d(X^T)=(dX)^T\\ 微分的迹:d(tr(X))=tr(dX)\\ 哈达马乘积的微分:d(X\odot Y)=X\odot dY+dX\odot Y (哈达马乘积:相同维度矩阵对应位置元素相乘)\\ 逐元素求导:d\sigma(X)=\sigma'(X)\odot dX\\ 逆矩阵微分:dX^{-1}=-X^{-1}dXX^{-1}\\ 行列式微分:d|X|=|X|tr(X^{-1}dX)

迹的性质

标量的迹等于自己:tr(x)=x\\ 转置不变:tr(A)=tr(A^T)\\ 交换律(A,B^T同维度):tr(AB)=tr(BA)\\ 加减法:tr(X\pm Y)=tr(X)\pm tr(Y)\\ 矩阵乘法和迹交换(A,B,C同维度):tr((A\odot B)^TC)=tr(A^T(B\odot C))
使用微分法求导上例:
y=a^TXb\\ dy=(da^T)Xb+a^T(dX)b+a^TXdb=a^T(dX)b\\ dy=tr(dy)=tr(a^TdXb)=tr(ba^TdX)\\ 参考标量对矩阵微分式子,得:\\ (\frac {\partial y} {\partial X})^T=(ba^T)\implies \frac {\partial y} {\partial X}=ab^T
例2,

迹函数对向量矩阵的求导

由定义方法可知:
\frac {\partial tr(AB)} {\partial A}=B^T\\ \frac {\partial tr(AB)} {\partial B}=A^T\\ 如求\frac {\partial tr(W^TAW)} {\partial W}:\\ d(tr(W^TAW)=tr(dW^TAW+W^TAdW)=tr((dW)^TAW)+tr(W^TAdW)\\ =tr(W^TA^TdW)+tr(W^TAdW)(转置后迹不变)=tr(W^T(A+A^T)dW)\\ \implies \frac {\partial tr(W^TAW)} {\partial W}=(A+A^T)W\\ 同理可求:\\ \frac {\partial tr(B^TX^TCXB)} {\partial X}=(C+C^T)XBB^T

链式求导法则

向量对向量

标量对多个向量链式求导

直接用链式法则会碰到维度不相容的情况,可以求其转置
假设想,x,y分别为m,n维向量:
\frac {\partial z} {\partial x}=\frac {\partial z} {\partial y}\frac {\partial y} {\partial x} \\ 上式左边为m*1维,右边第一项为n*1维,第二项为n*m维,无法相乘\\ (\frac {\partial z} {\partial x})^T=(\frac {\partial z} {\partial y})^T\frac {\partial y} {\partial x}\\ \implies \frac {\partial z} {\partial x}=(\frac {\partial y} {\partial x})^T\frac {\partial z} {\partial y}\\ 对于多个中间向量y_1\to y_2\to...\to z,有:\\ \frac {\partial z} {\partial y_1}=(\frac {\partial y_n} {\partial y_{n-1}}\frac {\partial y_{n-1}} {\partial y_{n-2}}\dots \frac {\partial y_2} {\partial y_1})^T\frac {\partial z} {\partial y_n}\\ 假设损失函数为:\\ l=(X\theta-y)^T(X\theta-y),z=X\theta-y\\ \frac {\partial l}{\partial \theta}=(\frac {\partial z}{\partial \theta})^T\frac {\partial l}{\partial z}=X^T2z=2X^T(X\theta-y)

标量对多个矩阵链式求导

假设依赖关系X\to Y\to z\\ \frac {\partial z}{\partial X_{ij}}=\sum_{k,l}\frac {\partial z}{\partial Y_{kl}}\frac {\partial Y_{kl}}{\partial X_{ij}}\\ 假设Y=AX+B\\ \frac {\partial Y_{kl}}{\partial X_{ij}}=\frac {\partial\sum_{s}A_{ks}X_{sl}}{\partial X_{ij}}=A_{ki}\delta_{lj}\\ 所以,\\ \frac {\partial z}{\partial X_{ij}}=\sum_{k}\frac {\partial z}{\partial Y_{kj}}A_{ki}\\ \implies\frac {\partial z}{\partial X}=A^T\frac {\partial z}{\partial Y}\\ 如果Y=XA+B,同理\\ \frac {\partial z}{\partial X}=\frac {\partial z}{\partial Y}A^T

矩阵对矩阵求导

一般先对矩阵向量化(列向量),使用向量对向量的求导,即

矩阵向量化的运算法则

vec(A+B)=vec(A)+vec(B)\\ vec(AXB)=(B^T\otimes A)vec(X) vec(A^T)=K_{mn}vec(A),K_{mn}是mn*mn的交换矩阵,用于列向量和行向量之间的转换。\\ vec(A\odot X)=diag(A)vec(X),其中diag(A)是mn*mn的对角矩阵

克罗内克积的运算法则

如果A是mn矩阵,B是pq矩阵,则克罗内克积为np*nq矩阵\\ A\otimes B=\begin{bmatrix} a_{11}B &\cdots & a_{1n}B\\ \vdots & \ddots &\vdots\\ a_{n1}B & \cdots & a_{nn}B \end{bmatrix}\\ (A\otimes B)^T=A^T\otimes B^T \\ vec(ab^T)=b\otimes a\\ (A\otimes B)(C\otimes D)=AC\otimes BD\\ K_{mn}=K_{nm}^T,K_{mn}K_{nm}=I
例如,
求\frac {\partial AXB}{\partial X}\\ dF=AdXB\\ vec(dF)=vec(AdXB)=(B^T\otimes A)vec(dX)\\ 因此,\frac {\partial AXB}{\partial X}=(B^T\otimes A)^T=B\otimes A^T\\ 同理,可得\\ \frac {\partial AX}{\partial X}=I_n\otimes A^T\\ \frac {\partial XB}{\partial X}=B\otimes I_m\\ \frac {\partial A\exp(BXC)D}{\partial X}=(C\otimes B^T)diag(\exp(BXC))(D\otimes A^T)

你可能感兴趣的:(机器学习中矩阵求导规则)