1.上溢和下溢
连续数学在数字计算机上的根本困难:我们需要通过有限数量的位模式来表示无限多的实数。计算机在表示实数时总会引入一些近似误差,这些舍入误差会导致上溢和下溢问题。
举例:softmax函数:
s
o
f
t
m
a
x
(
x
)
i
=
e
x
i
∑
j
n
(
e
x
j
)
softmax(x)_{i} = \frac{e^{x_{i}}}{\sum_{j}^{n}(e^{x_{j}})}
softmax(x)i=∑jn(exj)exi
当
x
i
x_i
xi非常大时会导致
e
x
i
e^{x_i}
exi上溢,同理,当
x
i
x_i
xi非常小时会导致
e
x
i
e^{x_i}
exi下溢,可以通过下面公式解决该问题(其中D为
x
i
x_i
xi中的最大值):
S
i
=
e
v
i
−
D
∑
i
=
0
C
e
v
i
−
D
S_{i}= \frac{e^{v_{i}-D}}{\sum_{i=0}^{C}e^{v_{i}-D}}
Si=∑i=0Cevi−Devi−D
2.基于梯度的优化方法
基础
- 当导数等于0时,导数无法提供往哪个方向移动的信息。
- 驻点有三种:局部极小点,局部极大点、鞍点。
- 梯度向量 ∇ x f ( x ) \nabla_{x}f(x) ∇xf(x)指向上坡,负梯度向量指向下坡,我们在负梯度方向上移动可以减少 f f f,这被称为最速下降法(method of steepest descent)或梯度下降法(gradient descent),更新公式: x ‘ = x − α ∇ x f ( x ) x^` = x - \alpha\nabla_{x}f(x) x‘=x−α∇xf(x)
Jacobian和Hessian矩阵
- Jacobian矩阵(由函数一阶导数组成的矩阵)
如果我们有一个函数: f : R m → R n f:R^m \rightarrow R^n f:Rm→Rn,则雅各比矩阵 j ∈ R n × m j\in R^{n\times m} j∈Rn×m,其中 J i , j = ∂ ∂ x j f ( x ) J_{i,j} = \frac{\partial}{\partial x_j}f(x) Ji,j=∂xj∂f(x) - Hessian矩阵(由函数二阶导数组成的矩阵)
- 定义:如果我们有一个函数: f : R m → R f:R^m \rightarrow R f:Rm→R,则海森矩阵 h ∈ R m × m h\in R^{m\times m} h∈Rm×m,其中 H i , j = ∂ 2 ∂ x i x j f H_{i,j} = \frac{\partial^2}{\partial x_i x_j}f Hi,j=∂xixj∂2f
- 二阶导数是对曲率的衡量,它告诉我们一阶导数如何随着输入的变化而改变。
- 曲率为零 ⟹ \Longrightarrow ⟹一阶导数是常数 ⟹ \Longrightarrow ⟹函数f是一条平坦的线 ⟹ \Longrightarrow ⟹代价函数下降的速度与步长 α \alpha α相等
- 曲率为负时(即二阶导数为负)函数向下凹陷,为正向上凹陷
- Hessian矩阵是实对称矩阵,因此我们可以将其分解成一组是特征值和一组特征向量的正交基,最大的特征值确定最大的二阶导数,最小的特征值确定最小的二阶导数
- 某个特定方向d上的二阶导数为 d T H d d^THd dTHd,当d是H的一个特征向量时,此方向上的二阶导数就是对应的特征值,对于其他方向d,方向的二阶导数是所有特征值的加权平均,权重在0和1之间,且与d的夹角越小的特征向量权重越大。
- 二阶导数可以用来确定最优步长, α ∗ = g T g g t H g \alpha^* = \frac{g^Tg}{g^tHg} α∗=gtHggTg,其中g是梯度,最坏情况下梯度g与H最大特征值 λ m a x \lambda_{max} λmax对应的特征向量对齐,此时 α ∗ = 1 λ m a x \alpha^* = \frac{1}{\lambda_{max}} α∗=λmax1
- 二阶导数可以用来确定一个临界点是否是局部极大值、局部极小值或鞍点。当Hessian矩阵正定时,为局部极小点、反之,负定时为局部极大值;当Hessian既有正特征值也有负特征值时,此临界点很可能是鞍点;当包含零特征值,且非零特征值是同号时,无法确定。
- 一阶优化算法,如梯度下降法,只使用了函数的一阶信息,并没有利用Hessian矩阵中的曲率信息,当Hessian矩阵条件数很差时,会导致梯度下降法表现很差,可以通过对数据进行标准化处理来解决该问题。(另外,梯度下降法不会被卡在鞍点,但牛顿法,可能会)
- 二阶优化算法,如牛顿法, 会使用到Hessian矩阵的信息。
约束问题
假设我们希望在x的某些集合S中找f(x)的最大值或最小值,一般使用拉格朗日乘子法。
假设
S
=
{
x
∣
∀
i
,
g
(
i
)
=
0
a
n
d
∀
j
,
h
(
j
)
≤
0
}
S = \{x| \forall i, g^{(i) = 0 }\ and\ \forall j, h^{(j)} \leq 0\}
S={x∣∀i,g(i)=0 and ∀j,h(j)≤0}
第一步:我们设拉格朗日函数为:
L
(
x
,
λ
,
α
)
=
f
(
x
)
+
∑
i
λ
i
g
(
i
)
(
x
)
+
∑
j
α
j
h
(
j
)
(
x
)
L(x, \lambda, \alpha) = f(x) + \sum_i\lambda_ig^{(i)}(x) + \sum_j\alpha_jh^{(j)}(x)
L(x,λ,α)=f(x)+i∑λig(i)(x)+j∑αjh(j)(x)
第二步:优化
m
i
n
x
m
a
x
λ
m
a
x
α
,
α
≥
0
L
(
x
,
λ
,
α
)
min_x\ max_{\lambda}\ max_{\alpha, \alpha \geq0}\ L(x,\lambda, \alpha)
minx maxλ maxα,α≥0 L(x,λ,α)
第三步:使用KKT条件来寻找最优点,KKT条件是必要条件,不一定是充分条件;
- 使拉格朗日函数梯度为零;
- 所有关于x和KKT乘子的约束都满足;
- 不等式约束显示的“互补松弛性”: α ⨀ h ( x ) = 0 \alpha \bigodot h(x) = 0 α⨀h(x)=0