矩阵及向量常用操作
矩阵求导
矩阵求导的本质
矩阵A对矩阵B求导: 矩阵A中的每一个元素分别对矩阵B中的每个元素进行求导。
A
1
×
1
A_{1\times1}
A1×1,
B
1
×
1
B_{1\times1}
B1×1:
d
A
d
B
\frac{dA}{dB}
dBdA 一个导数
A
m
×
1
A_{m\times1}
Am×1,
B
1
×
1
B_{1\times1}
B1×1:
d
A
d
B
\frac{dA}{dB}
dBdA m个导数
A
m
×
1
A_{m\times1}
Am×1,
B
p
×
1
B_{p\times1}
Bp×1:
d
A
d
B
\frac{dA}{dB}
dBdA
m
×
p
{m\times{p}}
m×p个导数
A
m
×
n
A_{m\times{n}}
Am×n,
B
p
×
q
B_{p\times{q}}
Bp×q:
d
A
d
B
\frac{dA}{dB}
dBdA
m
×
n
×
p
×
q
{m\times{n}\times{p}\times{q}}
m×n×p×q个导数
求导的本质只是把标量求导的结果排列起来,至于是按行排列还是按列排列都是可以的。但是如果行向量或者列向量随便写,那么结果就不唯一,乱套了。
为了解决矩阵向量求导的结果不唯一,我们引入求导布局。最基本的求导布局有两个:分子布局(numerator layout)和分母布局(denominator layout )。
以分母布局进行求导
对于分母布局来说,求导结果的维度以分母为主
∂
f
<
=
=
分
子
∂
x
<
=
=
分
母
\frac{\partial{f}<==分子}{\partial{x}<==分母}
∂x<==分母∂f<==分子
标量对向量求导
f为标量函数:
f
(
x
1
,
x
2
…
…
x
p
)
f(x_1,x_2……x_p)
f(x1,x2……xp)
如果x为列向量:
x
=
[
x
1
x
2
⋮
x
p
]
p
×
1
x= \left[ \begin{matrix} x_1 \\ x_2 \\ \vdots \\ x_p \end{matrix}\right] _{p\times1}
x=⎣⎢⎢⎢⎡x1x2⋮xp⎦⎥⎥⎥⎤p×1
那么定义导数为:
∂
f
∂
x
=
[
∂
f
∂
x
1
∂
f
∂
x
2
⋮
∂
f
∂
x
p
]
p
×
1
\frac{\partial{f}}{\partial{x}}= \left[ \begin{matrix} \frac{\partial{f}}{\partial{x_1}} \\ \frac{\partial{f}}{\partial{x_2}}\\ \vdots \\ \frac{\partial{f}}{\partial{x_p}} \end{matrix}\right] _{p\times1}
∂x∂f=⎣⎢⎢⎢⎢⎡∂x1∂f∂x2∂f⋮∂xp∂f⎦⎥⎥⎥⎥⎤p×1
如果x为行向量
x
=
[
x
1
x
2
⋯
x
p
]
1
×
p
x= \left[ \begin{matrix} x_1& x_2 & \cdots & x_p \end{matrix}\right] _{1\times{p}}
x=[x1x2⋯xp]1×p
那么
∂
f
∂
x
=
[
∂
f
∂
x
1
∂
f
∂
x
2
⋯
∂
f
∂
x
p
]
1
×
p
\frac{\partial{f}}{\partial{x}}= \left[ \begin{matrix} \frac{\partial{f}}{\partial{x_1}} & \frac{\partial{f}}{\partial{x_2}}& \cdots& \frac{\partial{f}}{\partial{x_p}} \end{matrix}\right] _{1\times{p}}
∂x∂f=[∂x1∂f∂x2∂f⋯∂xp∂f]1×p
向量对标量求导
设f为列向量
f
=
[
f
1
(
x
)
f
2
(
x
)
⋮
f
m
(
x
)
]
m
×
1
f= \left[ \begin{matrix} f_1(x) \\ f_2(x) \\ \vdots \\ f_m(x) \end{matrix}\right] _{m\times1}
f=⎣⎢⎢⎢⎡f1(x)f2(x)⋮fm(x)⎦⎥⎥⎥⎤m×1
分母x为标量
那么导数定义为:
∂
f
m
×
1
∂
x
=
[
∂
f
1
(
x
)
∂
x
,
∂
f
2
(
x
)
∂
x
,
⋯
,
∂
f
m
(
x
)
∂
x
]
1
×
m
=
∂
f
T
∂
x
\frac{\partial{f}_{m\times1}}{\partial{x}}=[\frac{\partial{f_1(x)}}{\partial{x}},\frac{\partial{f_2(x)}}{\partial{x}},\cdots,\frac{\partial{f_m(x)}}{\partial{x}}]_{1\times{m}}=\frac{\partial{f^T}}{\partial{x}}
∂x∂fm×1=[∂x∂f1(x),∂x∂f2(x),⋯,∂x∂fm(x)]1×m=∂x∂fT
向量对向量求导
函数f为列向量
f
=
[
f
1
(
x
)
f
2
(
x
)
⋮
f
m
(
x
)
]
m
×
1
f= \left[ \begin{matrix} f_1(x) \\ f_2(x) \\ \vdots \\ f_m(x) \end{matrix}\right] _{m\times1}
f=⎣⎢⎢⎢⎡f1(x)f2(x)⋮fm(x)⎦⎥⎥⎥⎤m×1
分母为列向量
x
=
[
x
1
x
2
⋮
x
p
]
p
×
1
x= \left[ \begin{matrix} x_1 \\ x_2 \\ \vdots \\ x_p \end{matrix}\right] _{p\times1}
x=⎣⎢⎢⎢⎡x1x2⋮xp⎦⎥⎥⎥⎤p×1
首先推出
∂
f
∂
x
=
[
∂
f
∂
x
1
∂
f
∂
x
2
⋮
∂
f
∂
x
p
]
p
×
1
\frac{\partial{f}}{\partial{x}}= \left[ \begin{matrix} \frac{\partial{f}}{\partial{x_1}} \\ \frac{\partial{f}}{\partial{x_2}}\\ \vdots \\ \frac{\partial{f}}{\partial{x_p}} \end{matrix}\right] _{p\times1}
∂x∂f=⎣⎢⎢⎢⎢⎡∂x1∂f∂x2∂f⋮∂xp∂f⎦⎥⎥⎥⎥⎤p×1
之后由向量对标量的求导原则可以推出
∂ f ∂ x = [ ∂ f 1 ∂ x 1 ∂ f 2 ∂ x 1 ⋯ ∂ f m ∂ x 1 ∂ f 1 ∂ x 2 ∂ f 2 ∂ x 2 ⋯ ∂ f m ∂ x 2 ⋮ ⋮ ⋱ ⋮ ∂ f 1 ∂ x p ∂ f 2 ∂ x p ⋯ ∂ f m ∂ x p ] p × m \frac{\partial{f}}{\partial{x}}= \left[ \begin{matrix} \frac{\partial{f_1}}{\partial{x_1}} & \frac{\partial{f_2}}{\partial{x_1}}&\cdots& \frac{\partial{f_m}}{\partial{x_1}}\\ \frac{\partial{f_1}}{\partial{x_2}} & \frac{\partial{f_2}}{\partial{x_2}}&\cdots& \frac{\partial{f_m}}{\partial{x_2}}\\ \vdots& \vdots&\ddots&\vdots\\ \frac{\partial{f_1}}{\partial{x_p}} & \frac{\partial{f_2}}{\partial{x_p}}&\cdots& \frac{\partial{f_m}}{\partial{x_p}} \end{matrix}\right] _{p\times{m}} ∂x∂f=⎣⎢⎢⎢⎢⎡∂x1∂f1∂x2∂f1⋮∂xp∂f1∂x1∂f2∂x2∂f2⋮∂xp∂f2⋯⋯⋱⋯∂x1∂fm∂x2∂fm⋮∂xp∂fm⎦⎥⎥⎥⎥⎤p×m
以分子布局进行求导
对于分子布局来说,我们求导结果的维度以分子为主,比如对于我们上面对标量求导的例子,结果的维度和分子的维度是一致的。也就是说,如果向量f 是一个m维的列向量,那么求导结果
∂
f
∂
x
\frac{\partial{f}}{\partial{x}}
∂x∂f
也是一个m维列向量。如果如果向量f 是一个m维的行向量,那么求导结果
∂
f
∂
x
\frac{\partial{f}}{\partial{x}}
∂x∂f 也是一个m维行向量。可见,对于分子布局和分母布局的结果来说,两者相差一个转置。
但是在机器学习算法原理的资料推导里,我们并没有看到说正在使用什么布局,也就是说布局被隐含了,这就需要自己去推演,比较麻烦。但是一般来说我们会使用一种叫混合布局的思路,即如果是向量或者矩阵对标量求导,则使用分子布局为准,如果是标量对向量或者矩阵求导,则以分母布局为准。对于向量对对向量求导,有些分歧以分子布局的雅克比矩阵为主。
常用矩阵求导公式
向量对向量求导
标量对向量求导
向量对标量求导
几种重要的求导矩阵
梯度
雅可比矩阵
下边这个按分子布局的向量对向量求导的结果矩阵,我们一般叫做雅克比 (Jacobian)矩阵。有的资料上会使用
∂
f
(
x
)
∂
x
T
\frac{\partial{f(x)}}{\partial{x}^T}
∂xT∂f(x)来定义雅克比矩阵,意义是一样
海森矩阵