参考博客:
矩阵求导、几种重要的矩阵及常用的矩阵求导公式
闲话矩阵求导
矩阵的求导是有布局的概念的,布局主要分为分子布局和分母布局,在我看来,分子布局就是被积项是一个行向量,分母布局被积项使列向量,而我们大部分情况都是默认一个向量为列向量,所以我们一般的求导都是分母布局,而本文所有的公式都是依照分母布局
依我所见,矩阵求导只不过是矩阵的各部分对各个变量分开求导,然后又将分开求导的结果写成矩阵形式
规定 x \mathbf{x} x为列向量:
x = ( x 1 , x 2 , ⋯   , x n ) T \mathbf{x} = (x_1,x_2,\cdots,x_n)^T x=(x1,x2,⋯,xn)T
也就是分别对每个元素求导
∂ y ∂ x = [ ∂ y ∂ x 1 ∂ y ∂ x 2 ⋮ ∂ y ∂ x n ] \frac{\partial y}{\partial \mathbf{x}}= \left[ \begin{matrix} \frac{\partial y}{\partial x_1} \\ \\ \frac{\partial y}{\partial x_2} \\ \\ \vdots \\ \\ \frac{\partial y}{\partial x_n} \\ \end{matrix} \right] ∂x∂y=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡∂x1∂y∂x2∂y⋮∂xn∂y⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
规定列向量 y \mathbf{y} y为
y = ( y 1 , y 2 , . . . , y n ) T \mathbf{y} = (y_1,y_2,...,y_n)^T y=(y1,y2,...,yn)T
那么此时
∂ y ∂ x = [ ∂ y 1 ∂ x ∂ y 2 ∂ x ⋯ ∂ y n ∂ x ] = [ ∂ y 1 ∂ x 1 ∂ y 2 ∂ x 1 ⋯ ∂ y n ∂ x 1 ∂ y 1 ∂ x 2 ∂ y 2 ∂ x 2 ⋯ ∂ y n ∂ x 2 ⋮ ⋮ ⋱ ⋮ ∂ y 1 ∂ x n ∂ y 2 ∂ x n ⋯ ∂ y n ∂ x n ] \frac{\partial \mathbf{y}}{\partial \mathbf{x}}= \left[ \begin{matrix} \frac{\partial y_1}{\partial \mathbf{x}} & \frac{\partial y_2}{\partial \mathbf{x}} & \cdots & \frac{\partial y_n}{\partial \mathbf{x}} \end{matrix} \right]= \left[ \begin{matrix} \frac{\partial y_1}{\partial x_1} & \frac{\partial y_2}{\partial x_1} & \cdots & \frac{\partial y_n}{\partial x_1} \\ \\ \frac{\partial y_1}{\partial x_2} & \frac{\partial y_2}{\partial x_2} & \cdots & \frac{\partial y_n}{\partial x_2} \\ \\ \vdots & \vdots & \ddots & \vdots \\ \\ \frac{\partial y_1}{\partial x_n} & \frac{\partial y_2}{\partial x_n} & \cdots & \frac{\partial y_n}{\partial x_n} \\ \end{matrix} \right] ∂x∂y=[∂x∂y1∂x∂y2⋯∂x∂yn]=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡∂x1∂y1∂x2∂y1⋮∂xn∂y1∂x1∂y2∂x2∂y2⋮∂xn∂y2⋯⋯⋱⋯∂x1∂yn∂x2∂yn⋮∂xn∂yn⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
假如 y \mathbf{y} y为行向量,也是同样的结果
可以看到分母布局,所以矩阵每一行的被积元素对应着分母的每一个元素
这里没有设计到矩阵的求导,因为我们可以吧矩阵考虑为一个向量再去分析
对任意行向量 w \mathbf{w} w
w = ( w 1 , w 2 , ⋯   , w n ) \mathbf{w}=(w_1,w_2,\cdots,w_n) w=(w1,w2,⋯,wn)
都有
∂ ( w x ) ∂ x = [ ∂ ( w x ) x 1 ∂ ( w x ) x 2 ⋮ ∂ ( w x ) x n ] = [ ∂ ( w 1 x 1 + w 2 x 2 + ⋯ + w n x n ) x 1 ∂ ( w 1 x 1 + w 2 x 2 + ⋯ + w n x n ) x 2 ⋮ ∂ ( w 1 x 1 + w 2 x 2 + ⋯ + w n x n ) x n ] = [ w 1 w 2 ⋮ w n ] = w T \frac{\partial \mathbf{(wx)}}{\partial \mathbf{x}}=\\ \left[ \begin{matrix} \frac{\partial \mathbf{(wx)}}{x_1} \\ \\ \frac{\partial \mathbf{(wx)}}{x_2} \\ \\ \vdots\\ \\ \frac{\partial \mathbf{(wx)}}{x_n} \\ \end{matrix} \right]= \left[ \begin{matrix} \frac{\partial (w_1x_1+w_2x_2+\cdots+w_nx_n)}{x_1} \\ \\ \frac{\partial (w_1x_1+w_2x_2+\cdots+w_nx_n)}{x_2} \\ \\ \vdots \\ \\ \frac{\partial (w_1x_1+w_2x_2+\cdots+w_nx_n)}{x_n} \\ \end{matrix} \right]= \left[ \begin{matrix} w_1 \\ \\ w_2 \\ \\ \vdots \\ \\ w_n \end{matrix} \right]= \mathbf{w}^T ∂x∂(wx)=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡x1∂(wx)x2∂(wx)⋮xn∂(wx)⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡x1∂(w1x1+w2x2+⋯+wnxn)x2∂(w1x1+w2x2+⋯+wnxn)⋮xn∂(w1x1+w2x2+⋯+wnxn)⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡w1w2⋮wn⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤=wT
同时注意,如果 w \mathbf{w} w表示一个列向量,则
∂ ( x T w ) ∂ x = w \frac{\partial \mathbf{(x^Tw)}}{\partial \mathbf{x}}=\mathbf{w} ∂x∂(xTw)=w
(这个可以自己推导)
A \mathbf{A} A表示一个矩阵,其中 a 1 , a 2 , ⋯   , a n \mathbf{a_1,a_2,\cdots,a_n} a1,a2,⋯,an表示行向量
A = ( a 1 , a 2 , ⋯   , a n ) T \mathbf{A} = (\mathbf{a_1},\mathbf{a_2},\cdots,\mathbf{a_n})^T A=(a1,a2,⋯,an)T
都有
∂ ( A x ) ∂ x = ∂ ( a 1 x , a 2 x , ⋯   , a n x ) T ∂ x = ( a 1 T , a 2 T , ⋯   , a n T ) = A T \frac{\partial (\mathbf{Ax})}{\partial \mathbf{x}}= \frac{\partial (\mathbf{a_1x} , \mathbf{a_2x} , \cdots ,\mathbf{a_nx} )^T}{\partial \mathbf{x}}=(\mathbf{a_1}^T,\mathbf{a_2}^T,\cdots,\mathbf{a_n}^T)=\mathbf{A}^T ∂x∂(Ax)=∂x∂(a1x,a2x,⋯,anx)T=(a1T,a2T,⋯,anT)=AT
(这里用到了上面的3.1的公式)
B \mathbf{B} B表示一个矩阵,其中 b 1 , b 2 , ⋯   , b n \mathbf{b_1,b_2,\cdots,b_n} b1,b2,⋯,bn表示列向量(注意这个和刚才不同,这里表示列向量)
B = ( b 1 ; b 2 ; ⋯   ; b n ) \mathbf{B} = (\mathbf{b_1};\mathbf{b_2};\cdots;\mathbf{b_n}) B=(b1;b2;⋯;bn)
都有
∂ ( x T B ) ∂ x = ∂ ( x T b 1 , x T b 2 , ⋯   , x T b n ) T ∂ x = ( b 1 , b 2 , ⋯   , b n ) = B \frac{\partial (\mathbf{x^TB})}{\partial \mathbf{x}}= \frac{\partial (\mathbf{x^Tb_1} , \mathbf{x^Tb_2} , \cdots ,\mathbf{x^Tb_n} )^T}{\partial \mathbf{x}}=(\mathbf{b_1},\mathbf{b_2},\cdots,\mathbf{b_n})=\mathbf{B} ∂x∂(xTB)=∂x∂(xTb1,xTb2,⋯,xTbn)T=(b1,b2,⋯,bn)=B
∂ ( x T x ) ∂ x = [ ∂ x T x x 1 ∂ x T x x 2 ⋮ ∂ x T x x n ] = [ ∂ ( x 1 2 + x 2 2 + ⋯ + x n 2 ) x 1 ∂ ( x 1 2 + x 2 2 + ⋯ + x n 2 ) x 2 ⋮ ∂ ( x 1 2 + x 2 2 + ⋯ + x n 2 ) x n ] = [ 2 x 1 2 x 2 ⋮ 2 x n ] = 2 x \frac{\partial \mathbf{(x^Tx)}}{\partial \mathbf{x}}=\\ \left[ \begin{matrix} \frac{\partial \mathbf{x^Tx}}{x_1} \\ \\ \frac{\partial \mathbf{x^Tx}}{x_2} \\ \\ \vdots\\ \\ \frac{\partial \mathbf{x^Tx}}{x_n} \\ \end{matrix} \right]= \left[ \begin{matrix} \frac{\partial (x_1^2+x_2^2+\cdots+x_n^2)}{x_1} \\ \\ \frac{\partial (x_1^2+x_2^2+\cdots+x_n^2)}{x_2} \\ \\ \vdots \\ \\ \frac{\partial (x_1^2+x_2^2+\cdots+x_n^2)}{x_n} \\ \end{matrix} \right]= \left[ \begin{matrix} 2x_1 \\ \\ 2x_2 \\ \\ \vdots \\ \\ 2x_n \end{matrix} \right]= 2\mathbf{x} ∂x∂(xTx)=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡x1∂xTxx2∂xTx⋮xn∂xTx⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡x1∂(x12+x22+⋯+xn2)x2∂(x12+x22+⋯+xn2)⋮xn∂(x12+x22+⋯+xn2)⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡2x12x2⋮2xn⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤=2x
还有些较为复杂的推导,这里不再做推导,例如:
∂ ( x T A x ) ∂ x = ( A + A T ) x \frac{\partial \mathbf{(x^TAx)}}{\partial \mathbf{x}}=\mathbf{(A+A^T)x} ∂x∂(xTAx)=(A+AT)x
∂ ( a T x x T b ) ∂ x = ( a b T + a T b ) x \frac{\partial \mathbf{(a^Txx^Tb)}}{\partial \mathbf{x}}=\mathbf{(ab^T+a^Tb)x} ∂x∂(aTxxTb)=(abT+aTb)x
⋯ \cdots ⋯
更多求导的示例结果可以参考这里
同时还要注意,矩阵求导是满足链式法则的,就是要注意相乘的时候位置,如果原来在自变量的左边依然在左边,原来在自变量的右边依然在右边
考虑一个简单的线性回归的例子,我们有 X \mathbf{X} X,它是一个nxm的矩阵,也就是有n个实例,每个实例有m个特征,这里我们假定n>m
它的标签是 y \mathbf{y} y,那么就是一个nx1的列向量
我们需要调整的参数就是 w \mathbf{w} w,它是一个mx1的列向量
那么我们预测的结果就是
y ^ = X w \mathbf{\widehat{y}}=\mathbf{Xw} y =Xw
相应的损失函数就是
E w = ( y − X w ) T ( y − X w ) \mathbf{E_w={(y-Xw)^T(y-Xw)}} Ew=(y−Xw)T(y−Xw)
然后我们计算梯度
这个式子类似于 ∂ x T x ∂ x \frac{\partial \mathbf{x^Tx}}{\partial \mathbf{x}} ∂x∂xTx,先把 y − X w \mathbf{y-Xw} y−Xw看成整体,得到 2 ( y − X w ) 2\mathbf{(y-Xw)} 2(y−Xw)
然后计算 y − X w \mathbf{y-Xw} y−Xw对 w \mathbf{w} w的导数,其中 y \mathbf{y} y里面没有包含 w \mathbf{w} w,结果为0,然后 − w X \mathbf{-wX} −wX对 w \mathbf{w} w的导数得到 − X T \mathbf{-X^T} −XT,最终结果就是
∂ E w ∂ w = 2 X T ( X w − y ) \mathbf{\frac{\partial E_w}{\partial w}=2X^T(Xw-y)} ∂w∂Ew=2XT(Xw−y)
E w = ( y − X w ) T ( y − X w ) = ( y T − w T X ) ( y − X w ) = y T y − y T X w − w T X T y + w T x T x w \mathbf{E_w={(y-Xw)^T(y-Xw)}}\\ =\mathbf{{(y^T-w^TX)(y-Xw)}}\\ =\mathbf{y^Ty-y^TXw-w^TX^Ty+w^Tx^Txw} Ew=(y−Xw)T(y−Xw)=(yT−wTX)(y−Xw)=yTy−yTXw−wTXTy+wTxTxw
注意 y y T \mathbf{yy^T} yyT中不含 w \mathbf{w} w,求个导就没了,然后依次对每项求导结果如下
∂ E w ∂ w = − X T y − X T y + 2 X T X w = 2 X T ( X w − y ) \mathbf{\frac{\partial E_w}{\partial w}=-X^Ty-X^Ty+2X^TXw=2X^T(Xw-y)} \\ ∂w∂Ew=−XTy−XTy+2XTXw=2XT(Xw−y)
此时零导数等于0,得到结果
w = ( X T X ) − 1 X T y \mathbf{w=(X^TX)^{-1}X^Ty} w=(XTX)−1XTy