优化算法

优化算法

对目标函数求梯度 $\nabla_{\theta} J(\theta)$

批量梯度下降

利用所有训练数据,计算目标函数梯度,$\eta$是学习率(learning rate)

缺点:一次参数更新需要计算整体数据的梯度,内存消耗大,不支持模型在线更新

随机梯度下降

训练中,利用一个样本$x^{(i)}$ 和标签 $y^{(i)}$进行一次参数更新

优点:

  • 速度快,支持在线学习

缺点:

  • 高方差,目标函数值剧烈波动
  • 随机波动,容易陷入局部极小值

mini-batch 随机下降

结合前两种,在训练中,利用一个 batch 样本$x^{(i)}$ 和标签 $y^{(i)}$进行一次参数更新

优点:

  • 减小参数更新的方程,收敛更平稳
  • 可以根据内存来控制输入

Momentum

帮助SGD在相关方向上加速并抑制震荡,当前向量 的更新考虑了上一个时刻向量 的作用

Nesterov accelerated gradient(NAG)

给momentum term引入先验

AdaGrad

之前的方法对所有参数$\theta$都用了相同的学习率$\eta$,AdaGrad在时刻$t$对每个参数$\theta_i$采用了不同的学习速率$\eta$
$\theta_i$在$t$时刻的梯度:

SGD对在$t$时刻的参数$\theta_i$更新,

AdaGrad在$t$时刻的参数$\theta_i$更新,

其中,$G_{t} \in \mathbb{R}^{d \times d}$是一个对角矩阵,对角元素$i$是每个参数$\theta_i$到t时刻为止,所有时刻梯度的平方之和,$\epsilon$为避免分母为0。
进一步,写成element-wise matrix-vector multiplication形式,

优点

  • 不用人工调整学习率,默认0.01

缺点

  • 在分母中累积梯度的平方,在训练过程中导致学习率一直在减小
  • 需要手动设置一个全局初始学习率
  • 更新$\theta_t$时,左右两边的单位不一致

Adadelta

为缓解AdaGrad学习率单调递减问题做出的扩展。不对过去所以时刻梯度平方累积,将累积时刻限制在窗口大小为$w$的区间
递归使得定义为过去所有时刻梯度平方的decaying average(?)。时刻$t$的running average $E[g^2]_t$仅仅依赖于之前average和当前的梯度
$\gamma$是一个衰减系数,随着时间指数衰减,因此与当前时刻比较近的$g_t$对梯度计算更起作用

将对角矩阵$G_t$替换为过去$t$时刻梯度平方的dacaying average $E[g^2]_t$

RMSprop

和Adadelta原理相似???

Adam

Adaptvie Moment Estimation (Adam) 自适应学习速率计算方法。保存过去梯度平方和+momentum。

其中,$m_t$和$v_t$分别是梯度的一阶矩(均值)和二阶矩(偏方差)的估计
为消除估计值的偏差,计算bias-corrected

更新规则,

默认设置,$\beta_1 = 0.9,\beta_2=0.999,\epsilon=10^{-8}$


各优化算法对比-投影面
【各优化算法对比-投影面】

各优化算法对比-马鞍面