《深度学习》 第4章 数值计算
数值计算通过迭代过程更新解的估计值来解决数学问题,而不是通过解析过程推导出公式来提供正确解。
常见的操作有优化和线性方程组的求解
上溢和下溢
必须对上溢和下溢进行数值稳定的一个例子是softmax函数。可通过计算softmax( z = x − max i x i z=x-\max_ix_i z=x−maxixi)同时解决softmax函数分母的上溢和下溢问题。使用单独的logsoftmax函数来解决softmax函数分子的下溢问题。
病态条件
条件数表征函数相对于输入的微小变化而变化的快慢程度,即最大和最小特征值的模之比:
max
i
,
j
∣
λ
i
λ
j
∣
\max \limits_ {i,j}\left|\frac{\lambda_i}{\lambda_j}\right|
i,jmax∣∣∣∣λjλi∣∣∣∣
基于梯度的优化方法
x ∗ = arg min f ( x ) x^* = \arg\min f(x) x∗=argminf(x)
微积分和优化的联系。
梯度之上:Jacobian和Hessian矩阵
函数 f : R m → R n f:\mathbb R^m \to \mathbb R^n f:Rm→Rn,其Jacobian矩阵 J ∈ R n × m J \in \mathbb R^{n\times m} J∈Rn×m定义为 J i , j = ∂ ∂ x j f ( x ) i J_{i,j} = \frac{\partial}{\partial x_j}f(x)_i Ji,j=∂xj∂f(x)i
函数 f : R m → R f:\mathbb R^m \to \mathbb R f:Rm→R, f f f的一阶导数(关于 x j x_j xj)关于 x j x_j xj的导数记为 ∂ 2 ∂ x i ∂ x j f \frac{\partial^2}{\partial x_i \partial x_j}f ∂xi∂xj∂2f
Hessian矩阵$H(f)(x)定义为:
H
(
f
)
(
x
)
x
,
j
=
∂
2
∂
x
i
∂
x
j
f
(
x
)
H(f)(x)_{x,j} = \frac{\partial^2}{\partial x_i \partial x_j} f(x)
H(f)(x)x,j=∂xi∂xj∂2f(x)
因为Hessian矩阵是实对称的,可将其分解为一组实特征值和一组特征向量的正交基。在特定方向 d d d上的二阶导数可以写成 d ⊤ H d d^⊤Hd d⊤Hd当 d d d是 H H H的一个特征向量时,这个方向的二阶导 数就是对应的特征值。对于其他的方向 d d d,方向二阶导数是所有特征值的加权平均, 权重在 0 0 0和 1 1 1之间,且与 d d d夹角越小的特征向量的权重越大。最大特征值确定最大二阶导数,最小特征值确定最小二阶导数。
f ( x ) ≈ f ( x ( 0 ) + ( x − x ( 0 ) ) ⊤ g + 1 2 ( x − x ( 0 ) ) ⊤ H ( x − x ( 0 ) ) ) f(x) \approx f(x^{(0)} + (x-x^{(0)})^\top g+\frac 12(x-x^{(0)})^\top H(x-x^{(0)})) f(x)≈f(x(0)+(x−x(0))⊤g+21(x−x(0))⊤H(x−x(0)))
使用学习率
ϵ
\epsilon
ϵ,新点将是
x
(
0
)
−
ϵ
g
x^{(0)}-\epsilon g
x(0)−ϵg:
f
(
x
(
0
)
−
ϵ
g
)
≈
f
(
x
(
0
)
−
ϵ
g
⊤
g
+
1
2
ϵ
2
g
⊤
H
g
)
f(x^{(0)}-\epsilon g) \approx f(x^{(0)} - \epsilon g^\top g+\frac 12 \epsilon^2 g^\top H g)
f(x(0)−ϵg)≈f(x(0)−ϵg⊤g+21ϵ2g⊤Hg)
当
g
⊤
H
g
g^\top Hg
g⊤Hg为零或负时,近似的泰勒级数表明增加
ϵ
\epsilon
ϵ将永远使
f
f
f下降。当
g
⊤
H
g
g^\top Hg
g⊤Hg为正时,通 过计算可得,使近似泰勒级数下降最多的最优步长为
ϵ
∗
=
g
⊤
g
g
⊤
H
g
\epsilon^* = \frac{g\top g}{g \top H g}
ϵ∗=g⊤Hgg⊤g
最坏的情况下, g g g与 H H H最大特征值 λ max \lambda_{\max} λmax对应的特征向量对齐,则最优步长是 1 λ max \frac{1}{\lambda_{\max}} λmax1
单纯使用梯度下降会在优化形如长峡谷的函数时浪费太多时间在峡谷壁下降上
牛顿法:
牛顿法原用于迭代求解函数的零点,因函数取极值的点处的导数值为0,故可用牛顿法求解优化问题。
函数临界点:
x
∗
=
x
(
0
)
−
H
(
f
)
(
x
(
0
)
)
−
1
∇
x
f
(
x
(
0
)
)
x^* = x^{(0)} - H(f)(x^{(0)})^{-1}\nabla_xf(x^{(0)})
x∗=x(0)−H(f)(x(0))−1∇xf(x(0))
约束优化
Karush-Kuhn-Tucker(KKT)方法(加入不等式的拉格朗日乘数法)是针对约束优化非常通用的解决方案
L
(
x
,
λ
,
α
)
=
f
(
x
)
+
∑
i
λ
i
g
(
i
)
(
x
)
+
∑
j
α
j
h
(
j
)
(
x
)
L(x,\lambda,\alpha) = f(x) + \sum_i\lambda_i g^{(i)}(x) + \sum_j \alpha_jh^{(j)}(x)
L(x,λ,α)=f(x)+i∑λig(i)(x)+j∑αjh(j)(x)
求解
min
x
max
λ
max
α
,
α
≥
0
L
(
x
,
λ
,
α
)
\min_x\max_\lambda\max_{\alpha,\alpha \geq 0}L(x,\lambda,\alpha)
xminλmaxα,α≥0maxL(x,λ,α)
实例:线性最小二乘
找到最小化下式的
x
x
x值:
f
(
x
)
=
1
2
∣
∣
A
x
−
b
∣
∣
2
2
f(x) = \frac 12 ||Ax-b||^2_2
f(x)=21∣∣Ax−b∣∣22
- 梯度下降
- 牛顿法
- KKT
- Moore-Penrose伪逆