参考博客:
矩阵求导、几种重要的矩阵及常用的矩阵求导公式
闲话矩阵求导
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] ∂x∂y=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡∂x1∂y∂x2∂y⋮∂xn∂y⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
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]
∂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为行向量,也是同样的结果
可以看到分母布局,所以矩阵每一行的被积元素对应着分母的每一个元素
这里没有设计到矩阵的求导,因为我们可以吧矩阵考虑为一个向量再去分析
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)⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡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
(这个可以自己推导)
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)=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡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
⋯
更多求导的示例结果可以参考这里
同时还要注意,矩阵求导是满足链式法则的,就是要注意相乘的时候位置,如果原来在自变量的左边依然在左边,原来在自变量的右边依然在右边
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=(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