Classx-优化算法进阶
Momentum(动量)
目标函数
f
(
x
)
f(x)
f(x)关于自变量
x
x
x的梯度
∂
f
(
x
)
∂
x
∣
x
=
x
0
\frac{\partial f(x)}{\partial x} |_{x=x_{0}}
∂x∂f(x)∣x=x0,代表了
f
(
x
)
f(x)
f(x)在
x
=
x
0
x=x_{0}
x=x0的下降最快的方向,因此,梯度下降也叫作最速下降(steepest descent)。
然而,考虑到观测的噪声等问题,最速下降的收敛可能出现问题。因此谨慎的选取学习率和batch size
B
t
B_{t}
Bt, 来控制梯度方差和收敛的结果。
欠定情况
c
o
n
d
H
=
λ
m
a
x
λ
m
i
n
cond_{H}=\frac{\lambda_{max}}{\lambda_{min}}
condH=λminλmax
其中,
λ
m
a
x
\lambda_{max}
λmax,
λ
m
i
n
\lambda_{min}
λmin分别为Hessian阵最大和最小的特征值。
条件数
c
o
n
d
H
cond_{H}
condH越大,越容易出现欠定问题。
最大学习率 Maximum Learning Rate
对于一个凸函数 f ( x ) f(x) f(x),根据凸优化结论,为了保证收敛性,我们需要设定步长大小 η \eta η。
预处理
在二阶优化中,
Δ
x
=
H
−
1
g
\Delta x=H^{-1}g
Δx=H−1g的做法成为预处理(precondition),其中
H
H
H为函数Hessian阵的逆,
g
g
g为原始函数的导数。
上述过程意义为:将原始的
H
H
H映射为一个单位矩阵,该矩阵拥有分布均匀的频谱(Spectrum),我们去优化的等价标函数的
H
H
H为良好的identity matrix。这种预处理操作在二阶优化问题中十分常见。
对于欠定问题的求解
a. 对梯度向量的预处理:Adam, RMSProp, AdaGrad, Adelta, KFC, Natural gradient 等二阶优化算法
b. 平均历史梯度:momentum(允许大学习率来加速收敛); applied in Adam, RMSProp, SGD momentum.
Momentum Algorithm(动量法)
为了解决梯度下降的上述问题,动量法加入动量变量
m
t
m_{t}
mt和动量超参数
β
∈
[
0
,
1
)
\beta \in [0,1)
β∈[0,1),
m
t
m_{t}
mt保存当前梯度和历史梯度的信息,
β
\beta
β 同时控制下降方向和步长,具体公式表达如下:
或
上式中,
t
t
t时刻学习率为
η
t
\eta_{t}
ηt,
t
t
t时刻函数梯度为
g
t
g_{t}
gt。当
β
=
0
\beta=0
β=0时候,该算法等同于随机梯度下降。
增加动量信息
m
t
m_{t}
mt,
β
\beta
β保留了历史梯度信息,即使
η
t
\eta_{t}
ηt比较大也不影响收敛(??为啥)
Exponential Moving Average(指数加权移动平均)
动量法的表达式有:
y
t
=
β
y
t
−
1
+
(
1
−
β
)
x
t
y_{t}=\beta y_{t-1}+(1-\beta)x_{t}
yt=βyt−1+(1−β)xt
将上式展开即有 (
y
t
−
1
=
β
y
t
−
2
+
(
1
−
β
)
x
t
−
1
y_{t-1}=\beta y_{t-2}+(1-\beta)x_{t-1}
yt−1=βyt−2+(1−β)xt−1…):
上述化简之后,我们可以看到
y
t
y_{t}
yt其实为一组
x
t
−
i
x_{t-i}
xt−i的加权平均,其权重值为:
(
1
−
β
)
β
i
(1-\beta)\beta^{i}
(1−β)βi。
我们来分析下该式子,其权重和为:
(
1
−
β
)
∑
i
=
0
t
β
i
=
(
1
−
β
t
)
(1-\beta)\sum_{i=0}^{t}\beta^{i}=(1-\beta^t)
(1−β)∑i=0tβi=(1−βt)
可以看到,权重求和不为1,因此加权求和结果不是原始式子的无偏估计,加权求和会引起均值的变化。
对于超参数
β
\beta
β,
y
t
=
(
1
−
β
)
∑
i
=
0
t
β
i
x
t
−
i
y_{t}=(1-\beta)\sum_{i=0}^{t}\beta^{i}x_{t-i}
yt=(1−β)∑i=0tβixt−i可以进行不同程度的近似。
结论为,我们可以忽略比
β
1
/
(
1
−
β
)
\beta^{1/(1-\beta)}
β1/(1−β)高阶的项(包括该项)。同时,我们可以看出,距离当前时间
t
t
t越接近,权重值更大,即当前更新方向,更加接近于距离
t
t
t接近的时间步梯度,更远的部分可以忽略。
由指数加权移动平均理解动量法
AdaGrad(梯度平方)
动量法学习率在多维自变量上每一维度是一致的,它依赖指数加权移动平均使得自变量的更新方向更加一致,从而降低发散的可能。
AdaGrad算法根据自变量在每个维度的梯度值的大小来调整各个维度上的学习率,从而避免统一的学习率难以适应所有维度的问题 [1]。
需要强调的是,小批量随机梯度按元素平方的累加变量 st 出现在学习率的分母项中。因此,如果目标函数有关自变量中某个元素的偏导数一直都较大,那么该元素的学习率将下降较快;反之,如果目标函数有关自变量中某个元素的偏导数一直都较小,那么该元素的学习率将下降较慢。然而,由于 st 一直在累加按元素平方的梯度,自变量中每个元素的学习率在迭代过程中一直在降低(或不变)。所以,当学习率在迭代早期降得较快且当前解依然不佳时,AdaGrad算法在迭代后期由于学习率过小,可能较难找到一个有用的解。
RMSProp
为了解决AdaGrad后期收敛过于慢的情况,RMSProp算法对AdaGrad算法做了修改。
如此,当
g
t
g_{t}
gt比较小时候,学习率通过
v
t
v_{t}
vt会变得比较大,从而解决AdGrad的问题。
AdaDelta
除了RMSProp算法以外,另一个常用优化算法AdaDelta算法也针对AdaGrad算法在迭代后期可能较难找到有用解的问题做了改进 [1]。AdaDelta算法没有学习率这一超参数。
Adam
注意,上述过程中,
m
t
m_{t}
mt和
v
t
v_{t}
vt分别是该函数导数的一阶无偏估计和二阶无偏估计,下面的分母为补全该无偏估计的值