前言
线性代数相关知识的学习笔记,仅供自己备忘及网友学习交流使用。
1.1 梯度
假设
f
:
R
m
×
n
→
R
f \colon \mathbb{R}^{m \times n} \rightarrow \mathbb{R}
f:Rm×n→R 是将维度为
m
×
n
m \times n
m×n 的矩阵作为输入并返回实数值的函数。 然后
f
f
f 的梯度(相对于
A
∈
R
m
×
n
A \in \mathbb{R}^{m \times n}
A∈Rm×n )是偏导数矩阵,定义如下:
∇
A
f
(
A
)
∈
R
m
×
n
=
[
∂
f
(
A
)
∂
A
11
∂
f
(
A
)
∂
A
12
⋯
∂
f
(
A
)
∂
A
1
n
∂
f
(
A
)
∂
A
21
∂
f
(
A
)
∂
A
22
⋯
∂
f
(
A
)
∂
A
2
n
⋮
⋮
⋱
⋮
∂
f
(
A
)
∂
A
m
1
∂
f
(
A
)
∂
A
m
2
⋯
∂
f
(
A
)
∂
A
m
n
]
\nabla_{A} f(A) \in \mathbb{R}^{m \times n} = \begin{bmatrix} \frac{\partial{f(A)}}{\partial{A_{11}}} & \frac{\partial{f(A)}}{\partial{A_{12}}} & \cdots & \frac{\partial{f(A)}}{\partial{A_{1n}}} \\ \frac{\partial{f(A)}}{\partial{A_{21}}} & \frac{\partial{f(A)}}{\partial{A_{22}}} & \cdots & \frac{\partial{f(A)}}{\partial{A_{2n}}} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial{f(A)}}{\partial{A_{m1}}} & \frac{\partial{f(A)}}{\partial{A_{m2}}} & \cdots & \frac{\partial{f(A)}}{\partial{A_{mn}}} \end{bmatrix}
∇Af(A)∈Rm×n=⎣⎢⎢⎢⎢⎡∂A11∂f(A)∂A21∂f(A)⋮∂Am1∂f(A)∂A12∂f(A)∂A22∂f(A)⋮∂Am2∂f(A)⋯⋯⋱⋯∂A1n∂f(A)∂A2n∂f(A)⋮∂Amn∂f(A)⎦⎥⎥⎥⎥⎤
即
m
×
n
m \times n
m×n 矩阵:
(
∇
A
f
(
A
)
)
i
j
=
∂
f
(
A
)
∂
A
i
j
(\nabla_{A} f(A))_{ij} = \frac{\partial{f(A)}}{\partial{A_{ij}}}
(∇Af(A))ij=∂Aij∂f(A)
请注意,
∇
A
f
(
A
)
\nabla_{A} f(A)
∇Af(A) 的维度始终与
A
A
A 的维度相同。特殊情况,如果
A
A
A 只是向量
A
∈
R
n
A \in \mathbb{R}^n
A∈Rn ,则:
∇
x
f
(
x
)
=
[
∂
f
(
x
)
∂
x
1
∂
f
(
x
)
∂
x
2
⋮
∂
f
(
x
)
∂
x
n
]
\nabla_{x} f(x) = \begin{bmatrix} \frac{\partial{f(x)}}{\partial{x_{1}}} \\ \frac{\partial{f(x)}}{\partial{x_{2}}} \\ \vdots \\ \frac{\partial{f(x)}}{\partial{x_{n}}} \end{bmatrix}
∇xf(x)=⎣⎢⎢⎢⎢⎡∂x1∂f(x)∂x2∂f(x)⋮∂xn∂f(x)⎦⎥⎥⎥⎥⎤
重要的是要记住,只有当函数是实值时,即如果函数返回标量值,才定义函数的梯度。例如 A ∈ R m × n A \in \mathbb{R}^{m \times n} A∈Rm×n ,相对于 x x x ,我们不能取 A x Ax Ax 的梯度,因为这个量是向量值。 它直接从偏导数的等价性质得出:
- ∇ x ( f ( x ) + g ( x ) ) = ∇ x f ( x ) + ∇ x g ( x ) \nabla_{x} (f(x) + g(x)) = \nabla_{x} f(x) + \nabla_{x} g(x) ∇x(f(x)+g(x))=∇xf(x)+∇xg(x)
- 对于 t ∈ R t \in \mathbb{R} t∈R, ∇ x ( t f ( x ) ) = t ∇ x f ( x ) \nabla_{x} (tf(x)) = t\nabla_{x} f(x) ∇x(tf(x))=t∇xf(x)
原则上,梯度是偏导数对多变量函数的自然延伸。然而,在实践中,由于符号的原因,使用梯度有时是很困难的。例如,假设
A
∈
R
m
×
n
A \in \mathbb{R}^{m \times n}
A∈Rm×n 是一个固定系数矩阵,假设
b
∈
R
m
b \in \mathbb{R}^m
b∈Rm 是一个固定系数向量。设
f
:
R
m
×
n
→
R
f \colon \mathbb{R}^{m \times n} \rightarrow \mathbb{R}
f:Rm×n→R 为
f
(
z
)
=
z
T
z
f(z) = z^Tz
f(z)=zTz 定义的函数,因此
∇
z
f
(
z
)
=
2
z
\nabla_{z} f(z) = 2z
∇zf(z)=2z 。但现在考虑表达式:
∇
f
(
A
x
)
\nabla f(Ax)
∇f(Ax)
该表达式应该如何解释? 至少有两种可能性:
- 在第一个解释中,回想起
∇
z
f
(
z
)
=
2
z
\nabla_{z} f(z) = 2z
∇zf(z)=2z 。 在这里,我们将
∇
f
(
A
x
)
\nabla f(Ax)
∇f(Ax) 解释为评估点
A
x
Ax
Ax 处的梯度,因此:
∇ f ( A x ) = 2 ( A x ) = 2 A x ∈ R m \nabla f(Ax) = 2(Ax) = 2Ax \in \mathbb{R}^m ∇f(Ax)=2(Ax)=2Ax∈Rm - 在第二种解释中,我们将数量
f
(
A
x
)
f(Ax)
f(Ax) 视为输入变量
x
x
x 的函数。 更正式地说,设
g
(
x
)
=
f
(
A
x
)
g(x) = f(Ax)
g(x)=f(Ax) 。 然后在这个解释中:
∇ f ( A x ) = ∇ x g ( x ) ∈ R n \nabla f(Ax) = \nabla_{x} g(x) \in \mathbb{R}^n ∇f(Ax)=∇xg(x)∈Rn
在这里,我们可以看到这两种解释确实不同。 一种解释产生 m m m 维向量作为结果,而另一种解释产生 n n n 维向量作为结果! 我们怎么解决这个问题?
这里,关键是要明确我们要区分的变量(即是对标量求导还是对向量求导)。 在第一种情况下,我们将函数 f f f 与其参数 z z z 进行区分,然后替换参数 A x Ax Ax 。 在第二种情况下,我们将复合函数 g ( x ) = f ( A x ) g(x) = f(Ax) g(x)=f(Ax) 直接与 x x x 进行微分。
我们将第一种情况表示为
∇
z
f
(
A
x
)
\nabla_{z} f(Ax)
∇zf(Ax) ,第二种情况表示为
∇
x
f
(
A
x
)
\nabla_{x} f(Ax)
∇xf(Ax) 。
保持符号清晰是非常重要的,在以后练习推导的过程中你就会发现。
1.2 黑塞矩阵
假设
f
:
R
n
→
R
f \colon \mathbb{R}^{n} \rightarrow \mathbb{R}
f:Rn→R 是一个函数,它接受
R
n
\mathbb{R}^{n}
Rn 中的向量并返回实数。那么关于
x
x
x 的黑塞矩阵(也有翻译作海森矩阵),写做:
H
=
∇
x
2
f
(
A
x
)
H = \nabla_{x}^2 f(Ax)
H=∇x2f(Ax) ,或者简单地说,
H
H
H 是
n
×
n
n \times n
n×n 矩阵的偏导数:
∇
x
2
f
(
A
x
)
∈
R
n
×
n
=
[
∂
2
f
(
x
)
(
∂
x
1
)
2
∂
2
f
(
x
)
∂
x
1
∂
x
2
⋯
∂
2
f
(
x
)
∂
x
1
∂
x
n
∂
2
f
(
x
)
∂
x
2
∂
x
1
∂
2
f
(
x
)
(
∂
x
2
)
2
⋯
∂
2
f
(
x
)
∂
x
2
∂
x
n
⋮
⋮
⋱
⋮
∂
2
f
(
x
)
∂
x
n
∂
x
1
∂
2
f
(
x
)
∂
x
n
∂
x
2
⋯
∂
2
f
(
x
)
(
∂
x
n
)
2
]
\nabla_{x}^2 f(Ax) \in \mathbb{R}^{n \times n} = \begin{bmatrix} \frac{\partial^2 f(x)}{(\partial x_1)^2} & \frac{\partial^2 f(x)}{\partial x_1 \partial x_2} & \cdots & \frac{\partial^2 f(x)}{\partial x_1 \partial x_n} \\ \frac{\partial^2 f(x)}{\partial x_2 \partial x_1} & \frac{\partial^2 f(x)}{(\partial x_2)^2} & \cdots & \frac{\partial^2 f(x)}{\partial x_2 \partial x_n} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial^2 f(x)}{\partial x_n \partial x_1} & \frac{\partial^2 f(x)}{\partial x_n \partial x_2} & \cdots & \frac{\partial^2 f(x)}{(\partial x_n)^2} \end{bmatrix}
∇x2f(Ax)∈Rn×n=⎣⎢⎢⎢⎢⎢⎡(∂x1)2∂2f(x)∂x2∂x1∂2f(x)⋮∂xn∂x1∂2f(x)∂x1∂x2∂2f(x)(∂x2)2∂2f(x)⋮∂xn∂x2∂2f(x)⋯⋯⋱⋯∂x1∂xn∂2f(x)∂x2∂xn∂2f(x)⋮(∂xn)2∂2f(x)⎦⎥⎥⎥⎥⎥⎤
换句话说,
∇
x
2
f
(
A
x
)
∈
R
n
×
n
\nabla_{x}^2 f(Ax) \in \mathbb{R}^{n \times n}
∇x2f(Ax)∈Rn×n ,其:
(
∇
x
2
f
(
A
x
)
)
i
j
=
∂
2
f
(
x
)
∂
x
i
∂
x
j
(\nabla_{x}^2 f(Ax))_{ij} = \frac{\partial^2 f(x)}{\partial x_i \partial x_j}
(∇x2f(Ax))ij=∂xi∂xj∂2f(x)
注意:黑塞矩阵通常是对称阵:
∂
2
f
(
x
)
∂
x
i
∂
x
j
=
∂
2
f
(
x
)
∂
x
j
∂
x
i
\frac{\partial^2 f(x)}{\partial x_i \partial x_j} = \frac{\partial^2 f(x)}{\partial x_j \partial x_i}
∂xi∂xj∂2f(x)=∂xj∂xi∂2f(x)
与梯度相似,只有当 f ( x ) f(x) f(x) 为实值时才定义黑塞矩阵。
很自然地认为梯度与向量函数的一阶导数的相似,而黑塞矩阵与二阶导数的相似(我们使用的符号也暗示了这种关系)。 这种直觉通常是正确的,但需要记住以下几个注意事项。 首先,对于一个变量
f
:
R
→
R
f \colon \mathbb{R} \rightarrow \mathbb{R}
f:R→R 的实值函数,它的基本定义:二阶导数是一阶导数的导数,即:
∂
2
f
(
x
)
∂
x
2
=
∂
∂
x
∂
∂
x
f
(
x
)
\frac{\partial^2 f(x)}{\partial x^2} = \frac{\partial}{\partial{x}} \frac{\partial}{\partial x} f(x)
∂x2∂2f(x)=∂x∂∂x∂f(x)
然而,对于向量的函数,函数的梯度是一个向量,我们不能取向量的梯度,即:
∇
x
∇
x
f
(
x
)
=
∇
x
[
∂
f
(
x
)
∂
x
1
∂
f
(
x
)
∂
x
2
⋮
∂
f
(
x
)
∂
x
n
]
\nabla_{x} \nabla_{x} f(x) = \nabla_{x} \begin{bmatrix} \frac{\partial{f(x)}}{\partial{x_{1}}} \\ \frac{\partial{f(x)}}{\partial{x_{2}}} \\ \vdots \\ \frac{\partial{f(x)}}{\partial{x_{n}}} \end{bmatrix}
∇x∇xf(x)=∇x⎣⎢⎢⎢⎢⎡∂x1∂f(x)∂x2∂f(x)⋮∂xn∂f(x)⎦⎥⎥⎥⎥⎤
上面这个表达式没有意义。 因此,黑塞矩阵不是梯度的梯度。 然而,下面这种情况却几乎是正确的:如果我们看一下梯度
∇
x
f
(
x
)
\nabla_{x} f(x)
∇xf(x) 的第
i
i
i 个元素
(
∇
x
f
(
x
)
)
i
=
∂
f
(
x
)
∂
x
i
(\nabla_{x} f(x))_i = \frac{\partial f(x)}{\partial{x_i}}
(∇xf(x))i=∂xi∂f(x) ,并取关于
x
x
x 的梯度我们得到:
∇
x
∂
f
(
x
)
∂
x
i
=
[
∂
2
f
(
x
)
∂
x
i
∂
x
1
∂
2
f
(
x
)
∂
x
i
∂
x
2
⋮
∂
2
f
(
x
)
∂
x
i
∂
x
n
]
\nabla_{x} \frac{\partial f(x)}{\partial{x_i}} = \begin{bmatrix} \frac{\partial^2{f(x)}}{\partial{x_{i}} \partial{x_{1}}} \\ \frac{\partial^2{f(x)}}{\partial{x_{i}} \partial{x_{2}}} \\ \vdots \\ \frac{\partial^2{f(x)}}{\partial{x_{i}} \partial{x_{n}}} \end{bmatrix}
∇x∂xi∂f(x)=⎣⎢⎢⎢⎢⎢⎡∂xi∂x1∂2f(x)∂xi∂x2∂2f(x)⋮∂xi∂xn∂2f(x)⎦⎥⎥⎥⎥⎥⎤
这是黑塞矩阵第
i
i
i 行(列),所以:
∇
x
2
f
(
x
)
=
[
∇
x
(
∇
x
f
(
x
)
)
1
∇
x
(
∇
x
f
(
x
)
)
2
⋯
∇
x
(
∇
x
f
(
x
)
)
n
]
\nabla_{x}^2 f(x) = \begin{bmatrix} \nabla_{x} (\nabla_{x} f(x))_1 & \nabla_{x} (\nabla_{x} f(x))_2 & \cdots & \nabla_{x} (\nabla_{x} f(x))_n \end{bmatrix}
∇x2f(x)=[∇x(∇xf(x))1∇x(∇xf(x))2⋯∇x(∇xf(x))n]
简单地说:我们可以说由于:
∇
x
2
f
(
x
)
=
∇
x
(
∇
x
f
(
x
)
)
T
\nabla_{x}^2 f(x) = \nabla_{x} (\nabla_{x} f(x))^T
∇x2f(x)=∇x(∇xf(x))T ,只要我们理解,这实际上是取的每个元素的梯度,而不是整个向量的梯度。
最后,请注意,虽然我们可以对矩阵 A ∈ R n A \in \mathbb{R}^{n} A∈Rn 取梯度,但是在这个地方,我们只考虑对向量 x ∈ R n x \in \mathbb{R}^{n} x∈Rn 取黑塞矩阵。 这会方便很多(事实上,我们所做的任何计算都不要求我们找到关于矩阵的黑森方程),因为关于矩阵的黑森方程就必须对矩阵所有元素求偏导数 ∂ 2 f ( A ) ∂ A i j ∂ A k l \frac{\partial^2{f(A)}}{\partial{A_{ij}\partial{A_{kl}}}} ∂Aij∂Akl∂2f(A) ,将其表示为矩阵相当麻烦。
1.3 二次函数和线性函数的梯度和黑塞矩阵
对于
x
∈
R
n
x \in \mathbb{R}^{n}
x∈Rn , 设
f
(
x
)
=
b
T
x
f(x) = b^Tx
f(x)=bTx 的某些已知向量
b
∈
R
n
b \in \mathbb{R}^{n}
b∈Rn ,则:
f
(
x
)
=
∑
i
=
1
n
b
i
x
i
f(x) = \sum_{i=1}^n b_i x_i
f(x)=i=1∑nbixi
所以:
∂
f
(
x
)
∂
x
k
=
∂
∂
x
k
∑
i
=
1
n
b
i
x
i
=
b
k
\frac{\partial{f(x)}}{\partial{x_k}} = \frac{\partial}{\partial{x_k}} \sum_{i=1}^n b_i x_i = b_k
∂xk∂f(x)=∂xk∂i=1∑nbixi=bk
由此我们可以很容易地看出
∇
x
b
T
x
=
b
\nabla_x b^Tx = b
∇xbTx=b 。 这应该与单变量微积分中的类似情况进行比较,其中
∂
∂
x
a
x
=
a
\frac{\partial}{\partial{x}} ax = a
∂x∂ax=a 。 现在考虑
A
∈
S
n
A \in \mathbb{S}^n
A∈Sn 的二次函数
f
(
x
)
=
x
T
A
x
f(x) = x^TAx
f(x)=xTAx 。 记住这一点:
f
(
x
)
=
∑
i
=
1
n
∑
j
=
1
n
A
i
j
x
i
x
j
f(x) = \sum_{i=1}^n \sum_{j=1}^n A_{ij}x_i x_j
f(x)=i=1∑nj=1∑nAijxixj
为了取偏导数,我们将分别考虑包括
x
k
x_k
xk 和
x
k
2
x_k^2
xk2 因子的项:
∂
f
(
x
)
∂
x
k
=
∂
∂
x
k
∑
i
=
1
n
∑
j
=
1
n
A
i
j
x
i
x
j
\frac{\partial{f(x)}}{\partial{x_k}} = \frac{\partial}{\partial{x_k}} \sum_{i=1}^n \sum_{j=1}^n A_{ij}x_i x_j
∂xk∂f(x)=∂xk∂i=1∑nj=1∑nAijxixj
=
∂
∂
x
k
[
∑
i
≠
k
∑
j
≠
k
A
i
j
x
i
x
j
+
∑
i
≠
k
A
i
k
x
i
x
k
∑
j
≠
k
A
j
k
x
j
x
k
+
A
k
k
x
k
2
]
= \frac{\partial}{\partial{x_k}} \bigg[ \sum_{i \ne k} \sum_{j \ne k} A_{ij}x_i x_j + \sum_{i \ne k} A_{ik}x_i x_k \sum_{j \ne k} A_{jk}x_j x_k + A_{kk}x_k^2\bigg]
=∂xk∂[i=k∑j=k∑Aijxixj+i=k∑Aikxixkj=k∑Ajkxjxk+Akkxk2]
=
∑
i
≠
k
A
i
k
x
i
+
∑
j
≠
k
A
j
k
x
j
+
2
A
k
k
x
k
= \sum_{i \ne k} A_{ik}x_i + \sum_{j \ne k} A_{jk}x_j + 2A_{kk}x_k
=i=k∑Aikxi+j=k∑Ajkxj+2Akkxk
=
∑
i
=
1
n
A
i
k
x
i
+
∑
j
=
1
n
A
j
k
x
j
= \sum_{i=1}^n A_{ik}x_i + \sum_{j=1}^n A_{jk}x_j
=i=1∑nAikxi+j=1∑nAjkxj
=
2
∑
i
=
1
n
A
k
i
x
i
= 2\sum_{i=1}^n A_{ki}x_i
=2i=1∑nAkixi
$$
最后一个等式,是因为
A
A
A 是对称的(我们可以安全地假设,因为它以二次形式出现)。 注意,
∇
x
f
(
x
)
\nabla_{x} f(x)
∇xf(x) 的第
k
k
k 个元素是
A
A
A 和
x
x
x 的第
k
k
k 行的内积。 因此,
∇
x
x
T
A
x
=
2
A
x
\nabla_{x} x^TAx = 2Ax
∇xxTAx=2Ax 。 同样,这应该提醒你单变量微积分中的类似事实,即
∂
∂
x
a
x
2
=
2
a
x
\frac{\partial}{\partial{x}} ax^2 = 2ax
∂x∂ax2=2ax 。
最后,让我们来看看二次函数
f
(
x
)
=
x
T
A
x
f(x) = x^TAx
f(x)=xTAx 的黑塞矩阵(显然,线性函数
b
T
x
b^Tx
bTx 的黑塞矩阵为零)。在这种情况下:
∂
2
f
(
x
)
∂
x
k
∂
x
l
=
∂
∂
x
k
[
∂
f
(
x
)
∂
x
l
]
=
∂
∂
x
k
[
2
∑
i
=
1
n
A
l
i
x
i
]
=
2
A
l
k
=
2
A
k
l
\frac{\partial^2{f(x)}}{\partial{x_k} \partial{x_l}} = \frac{\partial}{\partial{x_k}} \bigg[\frac{\partial{f(x)}}{\partial{x_l}} \bigg] = \frac{\partial}{\partial{x_k}} \bigg[2\sum_{i=1}^n A_{li}x_i \bigg] = 2A_{lk} = 2A_{kl}
∂xk∂xl∂2f(x)=∂xk∂[∂xl∂f(x)]=∂xk∂[2i=1∑nAlixi]=2Alk=2Akl
因此,应该很清楚
∇
x
2
x
T
A
x
=
2
A
\nabla_{x}^2 x^TAx = 2A
∇x2xTAx=2A ,这应该是完全可以理解的(同样类似于
∂
2
∂
x
2
a
x
2
=
2
a
\frac{\partial^2}{\partial{x^2}} ax^2 = 2a
∂x2∂2ax2=2a 的单变量事实)。
简要概括起来:
- ∇ x b T x = b \nabla_{x} b^Tx = b ∇xbTx=b ;
- ∇ x x T A x = 2 A x \nabla_{x} x^TAx = 2Ax ∇xxTAx=2Ax ,(如果 A A A 是对称阵);
- ∇ x 2 x T A x = 2 A \nabla_{x}^2 x^TAx = 2A ∇x2xTAx=2A ,(如果 A A A 是对称阵)。
1.4 最小二乘法
让我们应用上一节中得到的方程来推导最小二乘方程。假设我们得到矩阵 A ∈ R m × n A \in \mathbb{R}^{m \times n} A∈Rm×n (为了简单起见,我们假设 A A A 是满秩)和向量 b ∈ R m b \in \mathbb{R}^m b∈Rm ,从而使 b ∉ R ( A ) b \notin \mathcal{R} (A) b∈/R(A) 。在这种情况下,我们将无法找到向量 x ∈ R n x \in \mathbb{R}^n x∈Rn ,由于 A x = b Ax = b Ax=b ,因此我们想要找到一个向量 x x x ,使得 A x Ax Ax 尽可能接近 b b b ,用欧几里德范数的平方 ∣ A x − b ∣ 2 2 |Ax - b|_2^2 ∣Ax−b∣22 来衡量。
使用公式
∣
∣
x
∣
∣
2
=
x
T
x
||x||^2 = x^Tx
∣∣x∣∣2=xTx ,我们可以得到:
∣
A
x
−
b
∣
2
2
=
(
A
x
−
b
)
T
(
A
x
−
b
)
|Ax - b|_2^2 = (Ax - b)^T (Ax - b)
∣Ax−b∣22=(Ax−b)T(Ax−b)
=
x
T
A
T
A
x
−
x
T
A
T
b
−
b
T
A
x
+
b
T
b
= x^TA^TAx - x^TA^Tb - b^TAx + b^Tb
=xTATAx−xTATb−bTAx+bTb
=
x
T
A
T
A
x
−
2
b
T
A
x
+
b
T
b
= x^TA^TAx - 2b^TAx + b^Tb
=xTATAx−2bTAx+bTb
根据
x
x
x 的梯度,并利用上一节中推导的性质:
∇
x
(
x
T
A
T
A
x
−
2
b
T
A
x
+
b
T
b
)
\nabla_{x} (x^TA^TAx - 2b^TAx + b^Tb)
∇x(xTATAx−2bTAx+bTb)
=
∇
x
x
T
A
T
A
x
−
2
∇
x
b
T
A
x
+
∇
x
b
T
b
= \nabla_{x} x^TA^TAx -2\nabla_{x} b^TAx + \nabla_{x} b^Tb
=∇xxTATAx−2∇xbTAx+∇xbTb
=
2
A
T
A
x
−
2
A
T
b
= 2A^TAx - 2A^Tb
=2ATAx−2ATb
将最后一个表达式设置为零,然后解出
x
x
x ,得到了正规方程:
x
=
(
A
T
A
)
−
1
A
T
b
x = (A^TA)^{-1}A^Tb
x=(ATA)−1ATb
这和我们在线性回归求解方程的最优解中得到的相同。
1.5 行列式的梯度
现在让我们考虑一种情况,我们找到一个函数相对于矩阵的梯度,也就是说,对于
A
∈
R
n
A \in \mathbb{R}^n
A∈Rn ,我们要找到
∇
A
∣
A
∣
\nabla_{A} |A|
∇A∣A∣ 。回想一下我们对行列式的讨论:
∣
A
∣
=
∑
i
=
1
n
(
−
1
)
i
+
j
A
i
j
∣
A
∼
i
,
∼
j
∣
(for any
j
∈
1
,
2
,
.
.
.
,
n
)
|A| = \sum_{i=1}^n (-1)^{i+j} A_{ij} |A_{\sim i, \sim j}| \quad \text{(for any $j \in 1, 2, ..., n$)}
∣A∣=i=1∑n(−1)i+jAij∣A∼i,∼j∣(for any j∈1,2,...,n)
所以:
∂
∂
A
k
l
∣
A
∣
=
∂
∂
A
k
l
∑
i
=
1
n
(
−
1
)
i
+
j
A
i
j
∣
A
∼
i
,
∼
j
∣
\frac{\partial}{\partial{A_{kl}}} |A| = \frac{\partial}{\partial{A_{kl}}} \sum_{i=1}^n (-1)^{i+j} A_{ij} |A_{\sim i, \sim j}|
∂Akl∂∣A∣=∂Akl∂i=1∑n(−1)i+jAij∣A∼i,∼j∣
=
(
−
1
)
k
+
l
∣
A
∼
k
,
∼
l
∣
=
(
a
d
j
(
A
)
)
l
k
= (-1)^{k+l} |A_{\sim k, \sim l}| = (adj(A))_{lk}
=(−1)k+l∣A∼k,∼l∣=(adj(A))lk
从这里可以知道,它直接从伴随矩阵的性质得出:
∇
A
∣
A
∣
=
(
a
d
j
(
A
)
)
T
=
∣
A
∣
A
−
T
\nabla_{A} |A| = (adj(A))^T = |A|A^{-T}
∇A∣A∣=(adj(A))T=∣A∣A−T
现在我们来考虑函数
f
:
S
+
+
n
→
R
f \colon \mathbb{S}_{++}^n \rightarrow \mathbb{R}
f:S++n→R ,
f
(
A
)
=
l
o
g
∣
A
∣
f(A) = log |A|
f(A)=log∣A∣ 。注意,我们必须将
f
f
f 的域限制为正定矩阵,因为这确保了
∣
A
∣
>
0
|A| \gt 0
∣A∣>0 ,因此
∣
A
∣
|A|
∣A∣ 的对数(这里一般指以 e
为底的自然对数)是实数。在这种情况下,我们可以使用链式法则(没什么奇怪的,只是单变量演算中的普通链式法则)来看看:
∂
l
o
g
∣
A
∣
∂
A
i
j
=
∂
l
o
g
∣
A
∣
∂
∣
A
∣
∂
∣
A
∣
∂
A
i
j
=
1
∣
A
∣
∂
∣
A
∣
∂
A
i
j
\frac{\partial{log |A|}}{\partial{A_{ij}}} = \frac{\partial{log |A|}}{\partial{|A|}} \frac{\partial{|A|}}{\partial{A_{ij}}} = \frac{1}{|A|} \frac{\partial{|A|}}{\partial{A_{ij}}}
∂Aij∂log∣A∣=∂∣A∣∂log∣A∣∂Aij∂∣A∣=∣A∣1∂Aij∂∣A∣
从这一点我们可以明显看出:
∇
A
l
o
g
∣
A
∣
=
1
∣
A
∣
∇
A
∣
A
∣
=
A
−
1
\nabla_{A} log |A| = \frac{1}{|A|} \nabla_{A} |A| = A^{-1}
∇Alog∣A∣=∣A∣1∇A∣A∣=A−1
我们可以在最后一个表达式中删除转置,因为
A
A
A 是对称的。注意与单值情况的相似性,其中
∂
∂
x
l
o
g
x
=
1
/
x
\frac{\partial}{\partial{x}} log x = 1/x
∂x∂logx=1/x 。
1.6 特征值优化
最后,我们使用矩阵来演算,并以直接导致特征值/特征向量分析的方式求解优化问题。 考虑如下等式约束优化问题:
max
x
∈
R
x
T
A
x
subject to
∣
∣
x
∣
∣
2
2
=
1
\max_{x \in \mathbb{R}} x^TAx \quad \text{subject to $||x||_2^2 = 1$}
x∈RmaxxTAxsubject to ∣∣x∣∣22=1
对于对称矩阵
A
∈
S
n
A \in \mathbb{S}^n
A∈Sn 。求解等式约束优化问题的标准方法是采用拉格朗日形式,一种包含等式约束的目标函数,在这种情况下,拉格朗日函数可由以下公式给出:
L
(
x
,
λ
)
=
x
T
A
x
−
λ
x
T
x
\mathcal{L} (x, \lambda) = x^TAx - \lambda x^Tx
L(x,λ)=xTAx−λxTx
其中,
λ
\lambda
λ 被称为与等式约束关联的拉格朗日乘子。可以确定,要使
x
∗
x^{*}
x∗ 成为问题的最佳点,拉格朗日的梯度必须在
x
∗
x^{*}
x∗ 处为零(这不是唯一的条件,但它是必需的)。也就是说:
∇
x
L
(
x
,
λ
)
=
∇
x
(
x
T
A
x
−
λ
x
T
x
)
\nabla_{x} \mathcal{L} (x, \lambda) = \nabla_{x} (x^TAx - \lambda x^Tx)
∇xL(x,λ)=∇x(xTAx−λxTx)
=
2
A
x
−
2
λ
x
=
0
= 2Ax - 2\lambda x = 0
=2Ax−2λx=0
请注意,这只是线性方程
A
x
=
λ
x
Ax = \lambda x
Ax=λx 。 这表明在约束条件
x
T
x
=
1
x^Tx = 1
xTx=1 下,可能最大化(或最小化)
x
T
A
x
x^TAx
xTAx 的唯一点是
A
A
A 的特征向量。
1.7 常用矩阵求导公式
因为在机器学习中常见的是标量函数
y
y
y 对向量
x
x
x 的求导(Scalar-by-vector_identities),所以这里只给大家贴出这种情况下的求导公式:
更多情况下的求导公式,详见维基百科:
https://en.wikipedia.org/wiki/Matrix_calculus
1.8 伴随矩阵
在线性代数中,一个方形矩阵的伴随矩阵是一个类似于逆矩阵的概念。如果二维矩阵可逆,那么它的逆矩阵和它的伴随矩阵之间只差一个系数,对多维矩阵也存在这个规律。然而,伴随矩阵对不可逆的矩阵也有定义,并且计算伴随矩阵不需要用到除法。
伴随矩阵的定义如下:
设矩阵 A = ( a i j ) n × n ∈ R n × n A = (a_{ij})_{n \times n} \in \mathbb{R}^{n \times n} A=(aij)n×n∈Rn×n ,将矩阵 A A A 的元素 a i j a_{ij} aij 所在的第 i i i 行和第 j j j 列元素划去后,剩余的各元素按原来的排列顺序组成的 n − 1 n-1 n−1 阶矩阵所确定的行列式称为元素 a i j a_{ij} aij 的余子式,记为 M i j M_{ij} Mij ,称 A i j = ( − 1 ) i + j M i j A_{ij} = (-1)^{i+j}M_{ij} Aij=(−1)i+jMij 为元素 a i j a_{ij} aij 的代数余子式。
方阵
A
=
(
a
i
j
)
n
×
n
∈
R
n
×
n
A = (a_{ij})_{n \times n} \in \mathbb{R}^{n \times n}
A=(aij)n×n∈Rn×n 的各元素的代数余子式
A
i
j
A_{ij}
Aij 所构成的如下矩阵
A
∗
A^{*}
A∗ :
A
∗
=
[
A
11
A
21
⋯
A
n
1
A
12
A
22
⋯
A
n
2
⋮
⋮
⋱
⋮
A
1
n
A
2
n
⋯
A
n
n
]
A^{*} = \begin{bmatrix} A_{11} & A_{21} & \cdots & A_{n1} \\ A_{12} & A_{22} & \cdots & A_{n2} \\ \vdots & \vdots & \ddots & \vdots \\ A_{1n} & A_{2n} & \cdots & A_{nn} \end{bmatrix}
A∗=⎣⎢⎢⎢⎡A11A12⋮A1nA21A22⋮A2n⋯⋯⋱⋯An1An2⋮Ann⎦⎥⎥⎥⎤
该矩阵
A
∗
A^{*}
A∗ 则称为矩阵
A
A
A 的伴随矩阵。
伴随矩阵具有如下性质:
- 若
A
A
A 可逆,则有:
A ∗ = ∣ A ∣ A − 1 , ( A ∗ ) ∗ = 1 ∣ A ∣ A A^{*} = |A| A^{-1}, \quad (A^{*})^{*} = \frac{1}{|A|} A A∗=∣A∣A−1,(A∗)∗=∣A∣1A
( A ∗ ) − 1 = ( A − 1 ) ∗ (A^{*})^{-1} = (A^{-1})^{*} (A∗)−1=(A−1)∗ - A ∗ A = A A ∗ = ∣ A ∣ E , ( A ∗ ) T = ( A T ) ∗ A^{*}A = AA^{*} = |A|E, \quad (A^{*})^{T} = (A^{T})^{*} A∗A=AA∗=∣A∣E,(A∗)T=(AT)∗
- 若
A
A
A 为
n
n
n 阶方阵,则有:
r a n k ( A ∗ ) = { n , if r a n k ( A ) = n 1 , if r a n k ( A ) = n − 1 0 , if r a n k ( A ) < n − 1 rank(A^{*}) = \begin{cases} n, & \text{if $rank(A) = n$} \\ 1, & \text{if $rank(A) = n - 1$} \\ 0, & \text{if $rank(A) \lt n - 1$} \end{cases} rank(A∗)=⎩⎪⎨⎪⎧n,1,0,if rank(A)=nif rank(A)=n−1if rank(A)<n−1 - ∣ A ∗ ∣ = ∣ A ∣ n − 1 ( n ≥ 2 ) , ( k A ) ∗ = k n − 1 A ∗ , ( A ∗ ) ∗ = ∣ A ∣ n − 2 A ( n ≥ 3 ) |A^{*}| = |A|^{n - 1} (n \geq 2), \quad (kA)^{*} = k^{n-1} A^{*}, \quad (A^{*})^{*} = |A|^{n-2} A (n \geq 3) ∣A∗∣=∣A∣n−1(n≥2),(kA)∗=kn−1A∗,(A∗)∗=∣A∣n−2A(n≥3)