1、求导的一些基本规则:
通常来说,标量、向量以及矩阵之间的求导,可以理解维每个分量分别对分量进行求导然后进行排列。可以行排列也可以列排列,当然两者都可以。分别称之为分子布局和分母布局。
于分子布局来说,我们求导结果的维度以分子为主,求导结果的维度和分子的维度是一致的。也就是说,如果向量y是一个m维的列向量,那么求导结果 ∂ y ∂ x \frac{∂y}{∂x} ∂x∂y也是一个m维列向量,即维数为m×1。如果如果向量y是一个m维的行向量,那么求导结果 ∂ y ∂ x \frac{∂y}{∂x} ∂x∂y也是一个m维行向量,即1×m。
对于分母布局来说,我们求导结果的维度以分母为主,求导结果的维度和分子的结果是一致的,也就是说,如果向量y是一个m维的列向量,那么求导结果 ∂ y ∂ x \frac{∂y}{∂x} ∂x∂y是一个1×m维行向量。如果如果向量y是一个m维的行向量,那么求导结 ∂ y ∂ x \frac{∂y}{∂x} ∂x∂y是一个m×1维的列向量。
可见,对于分子布局和分母布局的结果来说,两者相差一个转置。一般来说在机器学习的书中,我们会使用一种叫混合布局的思路,即如果是向量或者矩阵对标量求导,则使用分子布局为准,如果是标量对向量或者矩阵求导,则以分母布局为准。而在最优化的书中,则采用的方法恰恰相反,当然这两者都是正确的,以解决问题的便捷为好。而向量和矩阵之间的求导则依据分子布局雅可比矩阵的求导规则。以下例子均使用最优化中的方法。
总结一下:关于标量、向量以及矩阵之间求导的基本布局原理。
2、几个常见推导运算
-
∂
A
x
∂
x
=
A
\frac{\partial\mathbf{Ax}}{\partial\mathbf{x}}=A
∂x∂Ax=A
其中:
A = [ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋱ ⋮ a m 1 a m 2 ⋯ a m n ] x = [ x 1 x 2 ⋮ x n ] A=\left[\begin{array}{cc} a_{11} & a_{12} \cdots a_{1 n} \\ a_{21} & a_{22} \cdots a_{2 n} \\ \vdots & \vdots \ddots \vdots \\ a_{m 1} & a_{m 2} \cdots a_{m n} \end{array}\right] \mathbf{x}=\begin{bmatrix}x_{1}\\ x_{2}\\ \vdots\\ x_{n} \end{bmatrix} A=⎣⎢⎢⎢⎡a11a21⋮am1a12⋯a1na22⋯a2n⋮⋱⋮am2⋯amn⎦⎥⎥⎥⎤x=⎣⎢⎢⎢⎡x1x2⋮xn⎦⎥⎥⎥⎤
∂ ( A x ) ∂ x = [ ∂ ( A x ) 1 ∂ x 1 ∂ ( A x ) 1 ∂ x 2 ⋯ ∂ ( A x ) 1 ∂ x m ∂ ( A x ) 2 ∂ x 1 ∂ ( A x ) 2 ∂ x 2 ⋯ ∂ ( A x ) 2 ∂ x m ⋮ ⋮ ⋱ ⋮ ∂ ( A x ) n ∂ x 1 ∂ ( A x ) n ∂ x 2 ⋯ ∂ ( A x ) n ∂ x m ] = [ a 11 a 12 ⋯ a 1 m a 21 a 22 ⋯ a 2 m ⋮ ⋮ ⋱ a n 1 a n 2 ⋯ a n m ] = A \frac{\partial(\mathbf{A} \mathbf{x})}{\partial \mathbf{x}}=\left[\begin{array}{cccc} \frac{\partial(\mathbf{A} \mathbf{x})_{1}}{\partial x_{1}} & \frac{\partial(\mathbf{A} \mathbf{x})_{1}}{\partial x_{2}} & \cdots & \frac{\partial(\mathbf{A} \mathbf{x})_{1}}{\partial x_{m}} \\ \frac{\partial(\mathbf{A} \mathbf{x})_{2}}{\partial x_{1}} & \frac{\partial(\mathbf{A} \mathbf{x})_{2}}{\partial x_{2}} & \cdots & \frac{\partial(\mathbf{A} \mathbf{x})_{2}}{\partial x_{m}} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial(\mathbf{A} \mathbf{x})_{n}}{\partial x_{1}} & \frac{\partial(\mathbf{A} \mathbf{x})_{n}}{\partial x_{2}} & \cdots & \frac{\partial(\mathbf{A} \mathbf{x})_{n}}{\partial x_{m}} \end{array}\right]=\left[\begin{array}{cc} a_{11} & a_{12} \cdots a_{1m} \\ a_{21} & a_{22} \cdots a_{2m} \\ \vdots & \vdots \ddots \\ a_{n1} & a_{n2} \cdots a_{nm} \end{array}\right]=\mathbf{A} ∂x∂(Ax)=⎣⎢⎢⎢⎢⎡∂x1∂(Ax)1∂x1∂(Ax)2⋮∂x1∂(Ax)n∂x2∂(Ax)1∂x2∂(Ax)2⋮∂x2∂(Ax)n⋯⋯⋱⋯∂xm∂(Ax)1∂xm∂(Ax)2⋮∂xm∂(Ax)n⎦⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎡a11a21⋮an1a12⋯a1ma22⋯a2m⋮⋱an2⋯anm⎦⎥⎥⎥⎤=A
( A x ) i = a i 1 x 1 + a i 2 x 2 + ⋯ + a i n x n (\mathbf{A} \mathbf{x})_{i}=a_{i 1} x_{1}+a_{i 2} x_{2}+\cdots+a_{i n} x_{n} (Ax)i=ai1x1+ai2x2+⋯+ainxn
总结,对于 A , m × n A,m×n A,m×n维向量, x 为 n × 1 x为n×1 x为n×1维向量,直接提取 A A A。 -
∂
(
y
⊤
A
x
)
x
=
y
⊤
A
\frac{\partial\left(\boldsymbol{y}^{\top} \boldsymbol{A} \boldsymbol{x}\right)}{x}=\boldsymbol{y}^{\top} \boldsymbol{A}
x∂(y⊤Ax)=y⊤A
将 y T A x y^\mathbf{T}Ax yTAx分成 y T A y^\mathbf{T}A yTA与 x x x分开,例1得到结果。 -
∂
(
x
⊤
x
)
=
2
x
⊤
\partial\left(\boldsymbol{x}^{\top} \boldsymbol{x}\right)=2 \boldsymbol{x}^{\top}
∂(x⊤x)=2x⊤
运用定义法对其推导,设 x x x为n×1维的矩阵,则 x T x^\mathbf{T} xT为一个常向量,分别对 x x x进行求导,即得到结果。以下均可按照此证明。 -
∂
(
x
⊤
Q
x
)
=
2
x
⊤
Q
\partial\left(\boldsymbol{x}^{\top} \boldsymbol{Q} \boldsymbol{x}\right)=2 \boldsymbol{x}^{\top} \boldsymbol{Q}
∂(x⊤Qx)=2x⊤Q
Q Q Q是对称矩阵
3、向量求导的链式规则
在标量的求导中,常有链式规则
∂
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,下面论证在向量求导中应用链式规则。
3.1、
(
∂
z
∂
x
)
T
=
(
∂
z
∂
y
)
T
∂
y
∂
x
\left(\frac{\partial z}{\partial \mathbf{x}}\right)^{T}=\left(\frac{\partial z}{\partial \mathbf{y}}\right)^{T} \frac{\partial \mathbf{y}}{\partial \mathbf{x}}
(∂x∂z)T=(∂y∂z)T∂x∂y
其中z为标量,x,y为向量
3.2、
∂
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,均为向量
对维度进行分析,知两边维度相容,另外根据定义法,即基本规则可证明上述规则成立。
4、更一般的形式
另外,对于更一般的形式,可以运用求导规则中的一般规则
∂
a
u
∂
x
=
a
∂
u
∂
x
+
∂
a
∂
x
u
T
\frac{\partial a \mathbf{u}}{\partial \mathbf{x}}=a \frac{\partial \mathbf{u}}{\partial \mathbf{x}}+\frac{\partial a}{\partial \mathbf{x}} \mathbf{u}^{\mathrm{T}}
∂x∂au=a∂x∂u+∂x∂auT
其中,
A
∈
R
m
×
n
,
u
∈
R
n
×
1
,
x
∈
R
p
×
1
\mathbf{A} \in \mathbb{R}^{m \times n}, \mathbf{u} \in \mathbb{R}^{n \times 1}, \mathbf{x} \in \mathbb{R}^{p \times 1}
A∈Rm×n,u∈Rn×1,x∈Rp×1
举例:
∂
(
x
T
A
)
y
∂
x
\frac{\partial\left(\mathbf{x}^{\mathrm{T}} \mathbf{A}\right) \mathbf{y}}{\partial \mathbf{x}}
∂x∂(xTA)y
∂
y
∂
x
∈
R
m
×
n
∂
x
T
A
∂
x
=
A
∈
R
m
×
n
\begin{aligned}\frac{\partial \mathbf{y}}{\partial \mathbf{x}} \in \mathbb{R}^{m \times n} &\frac{\partial \mathbf{x}^{\mathrm{T}} \mathbf{A}}{\partial \mathbf{x}}=\mathbf{A} \in \mathbb{R}^{m \times n}\end{aligned}
∂x∂y∈Rm×n∂x∂xTA=A∈Rm×n
∂
(
x
T
A
)
y
∂
x
=
∂
y
∂
x
A
T
x
+
A
y
\frac{\partial\left(\mathbf{x}^{\mathrm{T}} \mathbf{A}\right) \mathbf{y}}{\partial \mathbf{x}}=\frac{\partial \mathbf{y}}{\partial \mathbf{x}} \mathbf{A}^{\mathrm{T}} \mathbf{x}+\mathbf{A} \mathbf{y}
∂x∂(xTA)y=∂x∂yATx+Ay
5、导数和梯度以及Hessian矩阵关系
函数
f
(
x
)
f(x)
f(x)的导数
f
′
(
x
)
=
[
∂
f
(
x
)
x
1
,
∂
f
(
x
)
x
2
,
.
.
.
,
∂
f
(
x
)
x
n
]
f'(x)=[\frac{\partial f(x)}{x_1},\frac{\partial f(x)}{x_2},...,\frac{\partial f(x)}{x_n}]
f′(x)=[x1∂f(x),x2∂f(x),...,xn∂f(x)]
而梯度函数
∇
f
(
x
)
=
(
f
′
(
x
)
)
T
\nabla f(x)=(f'(x))^T
∇f(x)=(f′(x))T.
f
′
′
(
x
)
=
F
(
x
)
=
f''(x)=F(x)=
f′′(x)=F(x)=
D
2
f
=
[
∂
2
f
∂
x
1
2
∂
2
f
∂
x
2
∂
x
1
⋯
∂
2
f
∂
x
n
∂
x
1
∂
2
f
∂
x
1
∂
x
2
∂
2
f
∂
x
2
2
⋯
∂
2
f
∂
x
n
∂
x
2
⋮
⋮
⋱
⋮
∂
2
f
∂
x
1
∂
x
n
∂
2
f
∂
x
2
∂
x
n
⋯
∂
2
f
∂
x
n
2
]
D^{2} f=\left[\begin{array}{cccc} \frac{\partial^{2} f}{\partial x_{1}^{2}} & \frac{\partial^{2} f}{\partial x_{2} \partial x_{1}} & \cdots & \frac{\partial^{2} f}{\partial x_{n} \partial x_{1}} \\ \frac{\partial^{2} f}{\partial x_{1} \partial x_{2}} & \frac{\partial^{2} f}{\partial x_{2}^{2}} & \cdots & \frac{\partial^{2} f}{\partial x_{n} \partial x_{2}} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial^{2} f}{\partial x_{1} \partial x_{n}} & \frac{\partial^{2} f}{\partial x_{2} \partial x_{n}} & \cdots & \frac{\partial^{2} f}{\partial x_{n}^{2}} \end{array}\right]
D2f=⎣⎢⎢⎢⎢⎢⎡∂x12∂2f∂x1∂x2∂2f⋮∂x1∂xn∂2f∂x2∂x1∂2f∂x22∂2f⋮∂x2∂xn∂2f⋯⋯⋱⋯∂xn∂x1∂2f∂xn∂x2∂2f⋮∂xn2∂2f⎦⎥⎥⎥⎥⎥⎤$$
参考:
1、https://www.cnblogs.com/pinard/p/10825264.html
2、https://www.jianshu.com/p/4128e5b31fb4