矩阵求导

参考博客:
矩阵求导、几种重要的矩阵及常用的矩阵求导公式
闲话矩阵求导

1.布局

矩阵的求导是有布局的概念的,布局主要分为分子布局分母布局,在我看来,分子布局就是被积项是一个行向量,分母布局被积项使列向量,而我们大部分情况都是默认一个向量为列向量,所以我们一般的求导都是分母布局,而本文所有的公式都是依照分母布局

2.基本公式

依我所见,矩阵求导只不过是矩阵的各部分对各个变量分开求导,然后又将分开求导的结果写成矩阵形式

规定 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

2.1标量对向量求导

也就是分别对每个元素求导

∂ 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] xy=x1yx2yxny

2.2 向量对向量求导

规定列向量 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] xy=[xy1xy2xyn]=x1y1x2y1xny1x1y2x2y2xny2x1ynx2ynxnyn
假如 y \mathbf{y} y为行向量,也是同样的结果

可以看到分母布局,所以矩阵每一行的被积元素对应着分母的每一个元素

这里没有设计到矩阵的求导,因为我们可以吧矩阵考虑为一个向量再去分析

3.推导公式

3.1

对任意行向量 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)=w1w2wn=wT
同时注意,如果 w \mathbf{w} w表示一个列向量,则
∂ ( x T w ) ∂ x = w \frac{\partial \mathbf{(x^Tw)}}{\partial \mathbf{x}}=\mathbf{w} x(xTw)=w
(这个可以自己推导)

3.2第二

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

3.3

∂ ( 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)=x1xTxx2xTxxnxTx=x1(x12+x22++xn2)x2(x12+x22++xn2)xn(x12+x22++xn2)=2x12x22xn=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
更多求导的示例结果可以参考这里

同时还要注意,矩阵求导是满足链式法则的,就是要注意相乘的时候位置,如果原来在自变量的左边依然在左边,原来在自变量的右边依然在右边

4.线性回归

考虑一个简单的线性回归的例子,我们有 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=(yXw)T(yXw)
然后我们计算梯度

可以通过链式法则

这个式子类似于 ∂ x T x ∂ x \frac{\partial \mathbf{x^Tx}}{\partial \mathbf{x}} xxTx,先把 y − X w \mathbf{y-Xw} yXw看成整体,得到 2 ( y − X w ) 2\mathbf{(y-Xw)} 2(yXw)
然后计算 y − X w \mathbf{y-Xw} yXw 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)} wEw=2XT(Xwy)

可以将式子拆开然后每个项求导

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=(yXw)T(yXw)=(yTwTX)(yXw)=yTyyTXwwTXTy+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)} \\ wEw=XTyXTy+2XTXw=2XT(Xwy)
此时零导数等于0,得到结果
w = ( X T X ) − 1 X T y \mathbf{w=(X^TX)^{-1}X^Ty} w=(XTX)1XTy

你可能感兴趣的:(机器学习,线性代数,矩阵,矩阵求导,机器学习,深度学习)