摘自:https://www.cnblogs.com/pinard/p/10825264.html,并加入了自己的一丢丢想法。
解决 标 量 向 量 \frac{标量}{向量} 向量标量。
标量对向量的求导,其实就是标量对向量里的每个分量分别求导,最后把求导的结果排列在一起,按一个向量表示而已。那么我们可以将实值函数对向量的每一个分量来求导,最后找到规律,得到求导的结果向量
y = a T x \mathbf{y}=\mathbf{a}^T\mathbf{x} y=aTx,求解 ∂ y ∂ x \frac{\partial \mathbf{y}}{\partial \mathbf{x}} ∂x∂y。
∂ y ∂ x i = ∂ a T x x i = ∂ ∑ j = 1 n a j x j ∂ x i = a i \frac{\partial \mathbf{y}}{\partial x_i} =\frac{\partial \mathbf{a}^T\mathbf{x}}{x_i} =\frac{\partial \sum_{j=1}^{n} a_j x_j}{\partial x_i} =a_i ∂xi∂y=xi∂aTx=∂xi∂∑j=1najxj=ai
因为采用分母布局,结果应该和分母(列向量)同型,所以
∂ a T x ∂ x = a \frac{\partial \mathbf{a}^T\mathbf{x}}{\partial \mathbf{x}}=\mathbf{a} ∂x∂aTx=a
同理,采用分母布局计算 ∂ x T a ∂ x \frac{\partial \mathbf{x}^T\mathbf{a}}{\partial \mathbf{x}} ∂x∂xTa:
∂ x T a ∂ x = a \frac{\partial \mathbf{x}^T\mathbf{a}}{\partial \mathbf{x}}=\mathbf{a} ∂x∂xTa=a
y = x T x \mathbf{y}=\mathbf{x}^T\mathbf{x} y=xTx,求解 ∂ y ∂ x \frac{\partial \mathbf{y}}{\partial \mathbf{x}} ∂x∂y。
将标量(分子)完全展开
∂ y ∂ x i = ∂ x T x x i = ∂ ∑ j = 1 n x j x j ∂ x i = 2 x j \frac{\partial \mathbf{y}}{\partial x_i} =\frac{\partial \mathbf{x}^T\mathbf{x}}{x_i} =\frac{\partial \displaystyle\sum_{j=1}^{n} x_j x_j}{\partial x_i} =2x_j ∂xi∂y=xi∂xTx=∂xi∂j=1∑nxjxj=2xj
因为采用分母布局,结果应该和分母(列向量)同型,所以
∂ a T x ∂ x = 2 x \frac{\partial \mathbf{a}^T\mathbf{x}}{\partial \mathbf{x}}=2\mathbf{x} ∂x∂aTx=2x
y = x T A x \mathbf{y}=\mathbf{x}^T A\mathbf{x} y=xTAx,求解 ∂ y ∂ x \frac{\partial \mathbf{y}}{\partial \mathbf{x}} ∂x∂y。
将标量(分子)完全展开
∂ x T A x ∂ x k = ∂ ∑ i = 1 n ∑ j = 1 n x i A i j x j ∂ x k = ∑ i = 1 n A i k x k + ∑ i = j n A j k x k = A T x + A x \frac{\partial \mathbf{x}^T A\mathbf{x}}{\partial x_k} =\frac{\partial \displaystyle \sum_{i=1}^{n}\sum_{j=1}^{n} {x_i A_{ij} x_j}}{\partial x_k} =\sum_{i=1}^{n}A_{ik}x_k+\sum_{i=j}^{n}A_{jk}x_k =A^T\mathbf{x}+A\mathbf{x} ∂xk∂xTAx=∂xk∂i=1∑nj=1∑nxiAijxj=i=1∑nAikxk+i=j∑nAjkxk=ATx+Ax
可以发现,这个最后写成矩阵表达形式不像上面那么简单。
定义法求导对于简单的实值函数是很容易的,但是复杂的实值函数就算求出了任意一个分量的导数,要排列出最终的求导结果还挺麻烦的,因此我们需要找到其他的简便一些的方法来整体求导,而不是每次都先去针对任意一个分量,再进行排列。
y = a T X b \mathbf{y}=\mathbf{a}^TX\mathbf{b} y=aTXb,求解 ∂ a T X b ∂ X \frac{\partial \mathbf{a}^TX\mathbf{b}}{\partial X} ∂X∂aTXb。 X m ∗ n , a m ∗ 1 , b n ∗ 1 X_{m*n},\mathbf{a}_{m*1},\mathbf{b}_{n*1} Xm∗n,am∗1,bn∗1
将标量(分子)完全展开
∂ a T X b ∂ X = ∂ ∑ p = 1 m ∑ q = 1 n a p X p a b q ∂ X i j = ∂ a i X i j b j ∂ X i j = a i b j \frac{\partial \mathbf{a}^TX\mathbf{b}}{\partial X} =\frac{\partial \displaystyle \sum_{p=1}^{m}\sum_{q=1}^{n} a_p X_{pa} b_q}{\partial X_{ij}} =\frac{\partial a_i X_{ij} b_j}{\partial X_{ij}} =a_ib_j ∂X∂aTXb=∂Xij∂p=1∑mq=1∑napXpabq=∂Xij∂aiXijbj=aibj
采用分母布局,最终结果为 m ∗ n m*n m∗n的矩阵。所以有
∂ a T X b ∂ X = a b T \frac{\partial \mathbf{a}^TX\mathbf{b}}{\partial X} =\mathbf{a}\mathbf{b}^T ∂X∂aTXb=abT
y = A x \mathbf{y}=A\mathbf{x} y=Ax,求解 ∂ A x ∂ x \frac{\partial A\mathbf{x}}{\partial\mathbf{x}} ∂x∂Ax。 A m ∗ n , x n ∗ 1 , y m ∗ 1 A_{m*n},\mathbf{x}_{n*1},\mathbf{y}_{m*1} Am∗n,xn∗1,ym∗1。
根据向量对向量的求导的结果应该为 m ∗ n m*n m∗n维的矩阵。
先求矩阵的第 i i i行和向量的内积对向量的第 j j j分量求导,用定义法求解过程如下:
∂ A i x ∂ x j = ∂ ∑ k = 1 n A i k x k ∂ x j = A i j \frac{\partial A_i \mathbf{x}}{\partial x_{j}} =\frac{\partial \displaystyle \sum_{k=1}^{n}A_{ik}x_k}{\partial x_j} =A_{ij} ∂xj∂Aix=∂xj∂k=1∑nAikxk=Aij
矩阵 A A A的第 i i i行和向量的内积对向量的第 j j j分量求导的结果就是矩阵 A A A的 ( i , j ) (i,j) (i,j)位置的值。
因为采用了分子布局,所以求导结果为 A A A;而不是采用分母布局后的 A T A^T AT。
==使用定义法虽然已经求出一些简单的向量矩阵求导的结果,但是对于复杂的求导式子,则中间运算会很复杂,=同时求导出的结果排列也是很麻烦。==所以需要引入微分法。
解决 标 量 标 量 \frac{标量}{标量} 标量标量,这里不做探讨。
单变量的微分和导入关系如下:
d f = f ′ ( x ) d x df=f'(x)dx df=f′(x)dx
解决 标 量 向 量 \frac{标量}{向量} 向量标量
多元变量下的微分和导数的关系如下:
d f = ∑ i = 1 n ∂ f ∂ x i d x i = ( ∂ f ∂ x ) T d x df=\sum_{i=1}^{n}\frac{\partial f}{\partial x_i} dx_i=(\frac{\partial f}{\partial \mathbf{x}})^T d \mathbf{x} df=i=1∑n∂xi∂fdxi=(∂x∂f)Tdx
解决 标 量 矩 阵 \frac{标量}{矩阵} 矩阵标量
矩阵下的微分和导数的关系如下:
d f = ∑ i = 1 m ∑ j = 1 n ∂ f ∂ X i j d X i j = t r ( ( ∂ f X ) T d X ) df=\displaystyle \sum_{i=1}^{m}\sum_{j=1}^{n}\frac{\partial f}{\partial X_{ij}}dX_{ij}=tr((\frac{\partial f}{X})^TdX) df=i=1∑mj=1∑n∂Xij∂fdXij=tr((X∂f)TdX)
∑ i = 1 m ∑ j = 1 n A i j B j i = t r ( A T B ) \displaystyle \sum_{i=1}^{m} \sum_{j=1}^{n}A_{ij}B_{ji}=tr(A^TB) i=1∑mj=1∑nAijBji=tr(ATB)
其中 A , B A,B A,B同型。
举个例子:
X = ( x 11 x 12 x 21 x 22 x 31 x 31 ) d X = ( d x 11 d x 12 d x 21 d x 22 d x 31 d x 31 ) ∴ d f = ∂ f ∂ x 11 d x 11 + ∂ f ∂ x 21 d x 21 + ∂ f ∂ x 31 d x 31 + ∂ f ∂ x 12 d x 12 + ∂ f ∂ x 22 d x 22 + ∂ f ∂ x 32 d x 32 X= \begin{pmatrix} x_{11}& x_{12}\\ x_{21}& x_{22}\\ x_{31}& x_{31} \end{pmatrix}\\ dX= \begin{pmatrix} dx_{11}& dx_{12}\\ dx_{21}& dx_{22}\\ dx_{31}& dx_{31} \end{pmatrix}\\ \therefore df = \frac{\partial f}{\partial x_{11}}dx_{11}+\frac{\partial f}{\partial x_{21}}dx_{21}+\frac{\partial f}{\partial x_{31}}dx_{31} +\frac{\partial f}{\partial x_{12}}dx_{12}+\frac{\partial f}{\partial x_{22}}dx_{22}+\frac{\partial f}{\partial x_{32}}dx_{32} X=⎝⎛x11x21x31x12x22x31⎠⎞dX=⎝⎛dx11dx21dx31dx12dx22dx31⎠⎞∴df=∂x11∂fdx11+∂x21∂fdx21+∂x31∂fdx31+∂x12∂fdx12+∂x22∂fdx22+∂x32∂fdx32
∴ d f = t r ( ( ∂ f ∂ x 11 ∂ f ∂ x 12 ∂ f ∂ x 21 ∂ f ∂ x 22 ∂ f ∂ x 31 ∂ f ∂ x 23 ) T ( d x 11 d x 12 d x 21 d x 22 d x 31 d x 31 ) ) \therefore df= tr( \begin{pmatrix} \frac{\partial f}{\partial x_{11}}& \frac{\partial f}{\partial x_{12}}\\ \frac{\partial f}{\partial x_{21}}& \frac{\partial f}{\partial x_{22}}\\ \frac{\partial f}{\partial x_{31}}& \frac{\partial f}{\partial x_{23}} \end{pmatrix}^T \begin{pmatrix} dx_{11}& dx_{12}\\ dx_{21}& dx_{22}\\ dx_{31}& dx_{31} \end{pmatrix}) ∴df=tr(⎝⎜⎛∂x11∂f∂x21∂f∂x31∂f∂x12∂f∂x22∂f∂x23∂f⎠⎟⎞T⎝⎛dx11dx21dx31dx12dx22dx31⎠⎞)
其中:
( ∂ f ∂ x 11 ∂ f ∂ x 12 ∂ f ∂ x 21 ∂ f ∂ x 22 ∂ f ∂ x 31 ∂ f ∂ x 23 ) T ( d x 11 d x 12 d x 21 d x 22 d x 31 d x 31 ) = ( ∂ f ∂ x 11 d x 11 + ∂ f ∂ x 21 d x 21 + ∂ f ∂ x 31 d x 31 ∗ ∗ ∂ f ∂ x 12 d x 12 + ∂ f ∂ 22 d x 22 + ∂ f ∂ x 32 d x 32 ) \begin{pmatrix} \frac{\partial f}{\partial x_{11}}& \frac{\partial f}{\partial x_{12}}\\ \frac{\partial f}{\partial x_{21}}& \frac{\partial f}{\partial x_{22}}\\ \frac{\partial f}{\partial x_{31}}& \frac{\partial f}{\partial x_{23}}\end{pmatrix}^T\begin{pmatrix} dx_{11}& dx_{12}\\ dx_{21}& dx_{22}\\ dx_{31}& dx_{31}\end{pmatrix}=\begin{pmatrix} \frac{\partial f}{\partial x_{11}}dx_{11}+\frac{\partial f}{\partial x_{21}}dx_{21}+\frac{\partial f}{\partial x_{31}}dx_{31}& *\\ *& \frac{\partial f}{\partial x_{12}}dx_{12}+\frac{\partial f}{\partial 22}dx_{22}+\frac{\partial f}{\partial x_{32}}dx_{32}\\ \end{pmatrix} ⎝⎜⎛∂x11∂f∂x21∂f∂x31∂f∂x12∂f∂x22∂f∂x23∂f⎠⎟⎞T⎝⎛dx11dx21dx31dx12dx22dx31⎠⎞=(∂x11∂fdx11+∂x21∂fdx21+∂x31∂fdx31∗∗∂x12∂fdx12+∂22∂fdx22+∂x32∂fdx32)
所以:
d f = t r ( ( ∂ f X ) T d X ) df=tr((\frac{\partial f}{X})^TdX) df=tr((X∂f)TdX)
说明:
若标量函数 f f f是矩阵 X X X经加减乘法、逆、行列式、逐元素函数等运算构成。
y = a T X b y=a^TXb y=aTXb,求 ∂ y ∂ X \frac{\partial y}{\partial X} ∂X∂y。 a m ∗ 1 , X m ∗ n , b n ∗ 1 , y 1 ∗ 1 a_{m*1},X_{m*n},b_{n*1},y_{1*1} am∗1,Xm∗n,bn∗1,y1∗1。类型 标 量 矩 阵 \frac{标量}{矩阵} 矩阵标量, y y y是一个标量, d y dy dy也是一个标量。
求解步骤:
使用微分法的乘法对 f f f求微分。
d y = d ( a T ) X b + a T d ( X ) b + a T X d ( b ) = a T d ( X ) b dy=d(a^T)Xb+a^Td(X)b+a^TXd(b)=a^Td(X)b dy=d(aT)Xb+aTd(X)b+aTXd(b)=aTd(X)b
等式两边进行取迹( t r tr tr)操作。
d y = t r ( d y ) = t r ( a T d ( X ) b ) = t r ( b a T d ( X ) ) dy=tr(dy)=tr(a^Td(X)b)=tr(ba^Td(X)) dy=tr(dy)=tr(aTd(X)b)=tr(baTd(X))
已经将 d X dX dX放在迹内的最右侧了,那么其前面的部分加上转置就是求导后的结果。
∂ f ∂ X = ( b a T ) T = a b T \frac{\partial f}{\partial X}=(ba^T)^T=ab^T ∂X∂f=(baT)T=abT
查表Scalar-by-matrix identities的第8行,结果一致。采用分母布局。
y = a T e x p ( X b ) y=a^Texp(Xb) y=aTexp(Xb),求 ∂ y ∂ X \frac{\partial y}{\partial X} ∂X∂y。 a m ∗ 1 , X m ∗ n , b n ∗ 1 , y 1 ∗ 1 a_{m*1},X_{m*n},b_{n*1},y_{1*1} am∗1,Xm∗n,bn∗1,y1∗1。类型 标 量 矩 阵 \frac{标量}{矩阵} 矩阵标量, y y y是一个标量, d y dy dy也是一个标量。
d y = d ( a ) e x p ( X b ) + a T d ( e x p ( X b ) ) = a T d ( e x p ( X b ) ) = a T e x p ( X b ) ⊙ d ( X b ) = a T e x p ( X b ) ⊙ ( d ( X ) b ) dy=d(a)exp(Xb)+a^Td(exp(Xb))\\ =a^Td(exp(Xb))\\ =a^Texp(Xb)\odot d(Xb)\\ =a^Texp(Xb)\odot (d(X)b)\\ dy=d(a)exp(Xb)+aTd(exp(Xb))=aTd(exp(Xb))=aTexp(Xb)⊙d(Xb)=aTexp(Xb)⊙(d(X)b)
d y = t r ( d y ) = t r ( a T e x p ( X b ) ⊙ ( d ( X ) b ) ) = t r ( ( a ⊙ e x p ( X b ) ) T ( d ( X ) b ) ) = t r ( ( a ⊙ e x p ( X b ) ) T d X b ) = t r ( b ( a ⊙ e x p ( X b ) ) T d X ) dy=tr(dy)=tr(a^Texp(Xb)\odot (d(X)b))\\ =tr((a \odot exp(Xb))^T(d(X)b))\\ =tr((a \odot exp(Xb))^TdXb)\\ =tr(b(a \odot exp(Xb))^TdX) dy=tr(dy)=tr(aTexp(Xb)⊙(d(X)b))=tr((a⊙exp(Xb))T(d(X)b))=tr((a⊙exp(Xb))TdXb)=tr(b(a⊙exp(Xb))TdX)
所以最终结论为:
∂ y ∂ X = ( b ( a ⊙ e x p ( X b ) ) T ) T = ( a ⊙ e x p ( X b ) ) b T \frac{\partial y}{\partial X}=(b(a \odot exp(Xb))^T)^T=(a\odot exp(Xb))b^T ∂X∂y=(b(a⊙exp(Xb))T)T=(a⊙exp(Xb))bT
∂ t r ( A B ) ∂ A \frac{\partial tr(AB)}{\partial A} ∂A∂tr(AB),其中 A m ∗ n , B n ∗ m A_{m*n},B_{n*m} Am∗n,Bn∗m。 t r ( A B ) ( 1 ∗ 1 ) tr(AB)_{(1*1)} tr(AB)(1∗1)是个标量。类型 标 量 矩 阵 \frac{标量}{矩阵} 矩阵标量。
展开
d ( t r ( A B ) ) = t r ( d ( A B ) ) = t r ( d ( A ) B + A d B ) = t r ( d ( A ) B ) = t r ( B d A ) d(tr(AB))=tr(d(AB))=tr(d(A)B+AdB)=tr(d(A)B)=tr(BdA) d(tr(AB))=tr(d(AB))=tr(d(A)B+AdB)=tr(d(A)B)=tr(BdA)
结果,加个转置
∂ t r ( A B ) ∂ A = B T \frac{\partial tr(AB)}{\partial A}=B^T ∂A∂tr(AB)=BT
∂ t r ( A B ) ∂ B \frac{\partial tr(AB)}{\partial B} ∂B∂tr(AB),其中 A m ∗ n , B n ∗ m A_{m*n},B_{n*m} Am∗n,Bn∗m。 t r ( A B ) ( 1 ∗ 1 ) tr(AB)_{(1*1)} tr(AB)(1∗1)是个标量。
∂ t r ( W T A W ) ∂ W = ∂ ( W T A W ) ∂ W \frac{\partial tr(W^TAW)}{\partial W}=\frac{\partial (W^TAW)}{\partial W} ∂W∂tr(WTAW)=∂W∂(WTAW)。 W n ∗ 1 , A n ∗ n W_{n*1},A_{n*n} Wn∗1,An∗n, W T A W ( 1 ∗ 1 ) W^TAW_{(1*1)} WTAW(1∗1)是一个标量。类型 标 量 向 量 \frac{标量}{向量} 向量标量
d ( t r ( W T A W ) ) = t r ( d ( W T A W ) ) = t r ( d ( W T ) A W + W T A d ( W ) ) = t r ( ( d ( W ) T A W + W T A d ( W ) ) = t r ( ( d ( W ) ) T A W ) + t r ( W T A d ( W ) ) = t r ( ( A W ) T d ( W ) ) + t r ( W T A d ( W ) ) d(tr(W^TAW))=tr(d(W^TAW))\\ =tr(d(W^T)AW+W^TAd(W))\\ =tr((d(W)^TAW+W^TAd(W))\\ =tr((d(W))^TAW)+tr(W^TAd(W))\\ =tr((AW)^Td(W))+tr(W^TAd(W)) d(tr(WTAW))=tr(d(WTAW))=tr(d(WT)AW+WTAd(W))=tr((d(W)TAW+WTAd(W))=tr((d(W))TAW)+tr(WTAd(W))=tr((AW)Td(W))+tr(WTAd(W))
所以,
∂ t r ( W T A W ) ∂ W = ( ( A W ) T ) T + ( W T A ) T = A W + A T W = ( A + A T ) W \frac{\partial tr(W^TAW)}{\partial W}=((AW)^T)^T+(W^TA)^T=AW+A^TW=(A+A^T)W ∂W∂tr(WTAW)=((AW)T)T+(WTA)T=AW+ATW=(A+AT)W
求导的自变量和因变量直接有复杂的多层链式求导的关系,此时微分法使用起来也有些麻烦。使用矩阵向量求导链式法则,快速求出导数结果。
假设存在多个向量的依赖关系,如 x → y → z \mathbf{x}\rightarrow \mathbf{y} \rightarrow \mathbf{z} x→y→z。其中 x p ∗ 1 , y m ∗ 1 , z n ∗ 1 \mathbf{x}_{p*1},\mathbf{y}_{m*1},\mathbf{z}_{n*1} xp∗1,ym∗1,zn∗1。
∂ z ∂ x \frac{\partial \mathbf{z}}{\partial \mathbf{x}} ∂x∂z应该是 ( n ∗ p ) (n*p) (n∗p)维。采用分子布局,雅克比式。
所以有:
∂ z ∂ x = ∂ z ∂ y ∂ y ∂ x \frac{\partial \mathbf{z}}{\partial \mathbf{x}}=\frac{\partial \mathbf{z}}{\partial \mathbf{y}}\frac{\partial \mathbf{y}}{\partial \mathbf{x}} ∂x∂z=∂y∂z∂x∂y
注意:这个写法只在全是向量的依存关系时,才是对的。
拓展: x → y 1 ⋯ → y n → z \mathbf{x}\rightarrow \mathbf{y_1} \cdots\rightarrow \mathbf{y_n}\rightarrow \mathbf{z} x→y1⋯→yn→z。
∂ z ∂ x = ∂ z ∂ y n ∂ y n ∂ y n − 1 ⋯ ∂ y ∂ x \frac{\partial \mathbf{z}}{\partial \mathbf{x}}= \frac{\partial \mathbf{z}}{\partial \mathbf{y_n}} \frac{\partial \mathbf{y_n}}{\partial \mathbf{y_{n-1}}} \cdots \frac{\partial \mathbf{y}}{\partial \mathbf{x}} ∂x∂z=∂yn∂z∂yn−1∂yn⋯∂x∂y
在机器学习算法中,最终要优化的一般是一个标量损失函数,因此最后求导的目标是标量。所以这个更常用一点。
假设存在多个向量的依赖关系,如 x → y → z \mathbf{x}\rightarrow \mathbf{y} \rightarrow z x→y→z。其中 x p ∗ 1 , y m ∗ 1 , z 1 ∗ 1 \mathbf{x}_{p*1},\mathbf{y}_{m*1},\mathbf{z}_{1*1} xp∗1,ym∗1,z1∗1。 z z z是标量。
∂ z ∂ x \frac{\partial z}{\partial \mathbf{x}} ∂x∂z应该是 ( p ∗ 1 ) (p*1) (p∗1)维。采用分母布局。
∂ z ∂ y \frac{\partial z}{\partial \mathbf{y}} ∂y∂z是 ( m ∗ 1 ) (m*1) (m∗1)维,采用分母布局。 ∂ y ∂ x \frac{\partial \mathbf{y}}{\partial \mathbf{x}} ∂x∂y是 ( m ∗ p ) (m*p) (m∗p)维。
要使上述的链式求导时维度可以相容,即
维 度 p ∗ 1 = 维 度 p ∗ m ∗ 维 度 m ∗ 1 维度_{p*1}=维度_{p*m}*维度_{m*1} 维度p∗1=维度p∗m∗维度m∗1
∂ z ∂ x = ( ∂ y ∂ x ) T ∂ z ∂ y \frac{\partial z}{\partial \mathbf{x}}=(\frac{\partial \mathbf{y}}{\partial \mathbf{x}})^T\frac{\partial z}{\partial \mathbf{y}} ∂x∂z=(∂x∂y)T∂y∂z
推论: x → y 1 ⋯ → y n → z \mathbf{x}\rightarrow \mathbf{y_1} \cdots\rightarrow \mathbf{y_n}\rightarrow z x→y1⋯→yn→z。
∂ z ∂ x = ( ∂ y n ∂ y n − 1 ∂ y n − 1 ∂ y n − 2 ⋯ ∂ y 1 ∂ x ) T ∂ z ∂ y n \frac{\partial \mathbf{z}}{\partial \mathbf{x}}= ( \frac{\partial \mathbf{y_n}}{\partial \mathbf{y_{n-1}}} \frac{\partial \mathbf{y_{n-1}}}{\partial \mathbf{y_{n-2}}} \cdots \frac{\partial \mathbf{y_{1}}}{\partial \mathbf{x}} )^T \frac{\partial z}{\partial \mathbf{y_n}} ∂x∂z=(∂yn−1∂yn∂yn−2∂yn−1⋯∂x∂y1)T∂yn∂z
设有列向量 θ \theta θ,列向量 z = X θ − y \mathbf{z}=X\theta-\mathbf{y} z=Xθ−y,标量 l = z T z l=z^Tz l=zTz。 θ n ∗ 1 , X m ∗ n , y m ∗ 1 , l 1 ∗ 1 \theta_{n*1},X_{m*n},\mathbf{y}_{m*1},l_{1*1} θn∗1,Xm∗n,ym∗1,l1∗1。
构成: θ → z → l \theta \rightarrow \mathbf{z} \rightarrow l θ→z→l,求 ∂ l ∂ θ \frac{\partial l}{\partial \theta} ∂θ∂l
∂ l ∂ θ = ( ∂ z ∂ θ ) T ∂ l ∂ z \frac{\partial l}{\partial \theta}=(\frac{\partial \mathbf{z}}{\partial \theta})^T\frac{\partial l}{\partial \mathbf{z}} ∂θ∂l=(∂θ∂z)T∂z∂l
∂ z ∂ θ = ∂ ( X θ − y ) ∂ θ = ∂ ( X θ ) ∂ θ = 向 量 向 量 = X \frac{\partial \mathbf{z}}{\partial \theta}=\frac{\partial (X\theta-\mathbf{y})}{\partial \theta}=\frac{\partial (X\theta)}{\partial \theta}=\frac{向量}{向量}=X ∂θ∂z=∂θ∂(Xθ−y)=∂θ∂(Xθ)=向量向量=X
∂ l ∂ z = ∂ z T z ∂ z = 标 量 向 量 = 2 z \frac{\partial l}{\partial \mathbf{z}}=\frac{\partial z^Tz}{\partial z}=\frac{标量}{向量}=2z ∂z∂l=∂z∂zTz=向量标量=2z
∂ l ∂ θ = ( ∂ z ∂ θ ) T ∂ l ∂ z = X T ( 2 z ) = 2 X T ( X θ − y ) \frac{\partial l}{\partial \theta}=(\frac{\partial \mathbf{z}}{\partial \theta})^T\frac{\partial l}{\partial \mathbf{z}}=X^T(2\mathbf{z})=2X^T(X\theta - \mathbf{y}) ∂θ∂l=(∂θ∂z)T∂z∂l=XT(2z)=2XT(Xθ−y)
假设有 X → Y → z X \rightarrow Y \rightarrow z X→Y→z。其中 X p ∗ q , Y m ∗ n , z 1 ∗ 1 X_{p*q},Y_{m*n},z_{1*1} Xp∗q,Ym∗n,z1∗1。 X , Y X,Y X,Y是矩阵,$z是标量。求网络的参数。
矩阵对矩阵的求导是比较复杂的定义,不给出基于矩阵整体的链式求导法则。参考
给出对矩阵中一个标量的链式求导方法。
虽然我们没有全局的标量对矩阵的链式求导法则,但是对于一些线性关系的链式求导,还是可以得到一些有用的结论的。
∂ z ∂ x i j = ∑ k , l ∂ z ∂ Y k l ∂ Y k l ∂ x i j = t r ( ( ∂ z ∂ Y ) T ∂ Y ∂ x i j ) \frac{\partial z}{\partial x_{ij}}=\sum_{k,l}\frac{\partial z}{\partial Y_{kl}}\frac{\partial Y_{kl}}{\partial x_{ij}}=tr((\frac{\partial z}{\partial Y})^T \frac{\partial Y}{\partial x_{ij}}) ∂xij∂z=k,l∑∂Ykl∂z∂xij∂Ykl=tr((∂Y∂z)T∂xij∂Y)
设 A , X , B , Y A,X,B,Y A,X,B,Y都是矩阵, z z z是标量,其中 z = f ( Y ) , Y = A X + B z=f(Y),Y=AX+B z=f(Y),Y=AX+B。求 ∂ z ∂ X \frac{\partial z}{\partial X} ∂X∂z就是经典的机器学习中问题。 A A A是参数矩阵, X X X是数据集构成的矩阵。其中 X m ∗ n , A p ∗ m , Y p ∗ n , z 1 ∗ 1 , B p ∗ n X_{m*n},A_{p*m},Y_{p*n},z_{1*1},B_{p*n} Xm∗n,Ap∗m,Yp∗n,z1∗1,Bp∗n。
标量的链式求导法则求 ∂ z ∂ x i j \frac{\partial z}{\partial x_{ij}} ∂xij∂z。
∂ z ∂ x i j = ∑ k , l ∂ z ∂ Y k l ∂ Y k l ∂ x i j \frac{\partial z}{\partial x_{ij}}=\sum_{k,l}\frac{\partial z}{\partial Y_{kl}}\frac{\partial Y_{kl}}{\partial x_{ij}} ∂xij∂z=k,l∑∂Ykl∂z∂xij∂Ykl
对于 ∂ Y k l ∂ x i j \frac{\partial Y_{kl}}{\partial x_{ij}} ∂xij∂Ykl。
∂ Y k l ∂ x i j = ∂ ∑ s ( A k s x s l ) ∂ x i j = ∂ ( A k i x i l ) ∂ x i j = { A k i , l = j 0 , l ≠ j = A k i δ l j . 当 l = j 时 , δ l j = 1 ; 当 l ≠ j 时 , δ l j = 0. \frac{\partial Y_{kl}}{\partial x_{ij}}=\frac{\partial \displaystyle \sum_{s}(A_{ks}x_{sl})}{\partial x_{ij}}=\frac{\partial (A_{ki}x_{il})}{\partial x_{ij}}=\begin{cases}A_{ki},l=j \\0,l\neq j\end{cases}=A_{ki}\delta_{lj}.\\当l=j时,\delta_{lj}=1;当l \neq j时,\delta_{lj}=0. ∂xij∂Ykl=∂xij∂s∑(Aksxsl)=∂xij∂(Akixil)={Aki,l=j0,l=j=Akiδlj.当l=j时,δlj=1;当l=j时,δlj=0.
所以
∂ z ∂ x i j = ∑ k , l ∂ z ∂ Y k l ∂ Y k l ∂ x i j = ∑ k ∂ z ∂ Y k j A k i δ l j = ∑ k ∂ z ∂ Y k j A k \frac{\partial z}{\partial x_{ij}}=\sum_{k,l}\frac{\partial z}{\partial Y_{kl}}\frac{\partial Y_{kl}}{\partial x_{ij}}=\sum_{k}\frac{\partial z}{\partial Y_{kj}}A_{ki}\delta_{lj}=\sum_{k}\frac{\partial z}{\partial Y_{kj}}A_{k} ∂xij∂z=k,l∑∂Ykl∂z∂xij∂Ykl=k∑∂Ykj∂zAkiδlj=k∑∂Ykj∂zAk
对于 ∑ k ∂ z ∂ Y k j A k i \sum_{k}\frac{\partial z}{\partial Y_{kj}}A_{ki} ∑k∂Ykj∂zAki。
这个可以写成矩阵的表达形式。
以为是对 k k k进行遍历求和,而给出的只有 ( k ∗ i ) (k*i) (k∗i)和 ( k ∗ l ) (k*l) (k∗l)。通过矩阵相乘的概念, k k k应该出现在矩阵相乘维度相容的中间,即 ( i ∗ k ) 和 ( k ∗ l ) (i*k)和(k*l) (i∗k)和(k∗l)或 ( l ∗ k ) 和 ∗ ( k ∗ i ) (l*k)和*(k*i) (l∗k)和∗(k∗i)。
若采用 ( i ∗ k ) 和 ( k ∗ l ) (i*k)和(k*l) (i∗k)和(k∗l),矩阵 A T A^T AT的第 i i i行和 ∂ z ∂ Y \frac{\partial z}{\partial Y} ∂Y∂z的第 j j j列的内积。
∂ z ∂ X = A T ∂ z ∂ Y \frac{\partial z}{\partial X}=A^T\frac{\partial z}{\partial Y} ∂X∂z=AT∂Y∂z
若采用 ( l ∗ k ) 和 ( k ∗ i ) (l*k)和(k*i) (l∗k)和(k∗i),矩阵 ( ∂ z ∂ Y ) T (\frac{\partial z}{\partial Y})^T (∂Y∂z)T的第 l l l行和 A A A的第 i i i列的内积。
∂ z ∂ X = ( ∂ z ∂ Y ) T A \frac{\partial z}{\partial X}=(\frac{\partial z}{\partial Y})^TA ∂X∂z=(∂Y∂z)TA
z = f ( Y ) , Y = A X + B z=f(Y),Y=AX+B z=f(Y),Y=AX+B
则
∂ z ∂ X = A T ∂ z ∂ Y \frac{\partial z}{\partial X}=A^T\frac{\partial z}{\partial Y} ∂X∂z=AT∂Y∂z
2. 设 A A A都是矩阵, x , y , b \mathbf{x},\mathbf{y},b x,y,b是向量, z z z是标量,其中 z = f ( Y ) , Y = A x + b z=f(Y),Y=A\mathbf{x}+b z=f(Y),Y=Ax+b。求 ∂ z ∂ x \frac{\partial z}{\partial \mathbf{x}} ∂x∂z。
z = f ( Y ) , Y = A x + b z=f(Y),Y=A\mathbf{x}+b z=f(Y),Y=Ax+b
∂ z ∂ x = A T ∂ z ∂ y \frac{\partial z}{\partial \mathbf{x}}=A^T\frac{\partial z}{\partial \mathbf{y}} ∂x∂z=AT∂y∂z
设 A , X , B , Y A,X,B,Y A,X,B,Y都是矩阵, z z z是标量,其中 z = f ( Y ) , Y = X A + B z=f(Y),Y=XA+B z=f(Y),Y=XA+B。求 ∂ z ∂ X \frac{\partial z}{\partial X} ∂X∂z。
z = f ( Y ) , Y = X A + B z=f(Y),Y=XA+B z=f(Y),Y=XA+B
∂ z ∂ X = ∂ z ∂ Y A T \frac{\partial z}{\partial X}=\frac{\partial z}{\partial Y}A^T ∂X∂z=∂Y∂zAT
设 X X X是矩阵, a , y , b \mathbf{a},\mathbf{y},b a,y,b是向量, z z z是标量,其中 z = f ( Y ) , Y = X a + b z=f(Y),Y=X\mathbf{a}+b z=f(Y),Y=Xa+b。求 ∂ z ∂ x \frac{\partial z}{\partial \mathbf{x}} ∂x∂z。
z = f ( Y ) , Y = X a + b z=f(Y),Y=X\mathbf{a}+b z=f(Y),Y=Xa+b
∂ z ∂ X = ∂ z ∂ y a T \frac{\partial z}{\partial X}=\frac{\partial z}{\partial \mathbf{y}}\mathbf{a}^T ∂X∂z=∂y∂zaT
这个是真的大佬!