本文介绍常见的一阶数值优化算法,这些方法在现代神经网络框架(tensorflow, caffe, torch)中已经是标准配置。
问题
设系统参数为 ω \omega ω。对于样本 i i i,其代价函数为 Q i ( ω ) Q_i(\omega) Qi(ω)。在n个样本组成的训练集上,其整体代价函数为:
Q ( ω ) = ∑ i = 1 n Q i ( ω ) Q(\omega)=\sum_{i=1}^nQ_i(\omega) Q(ω)=i=1∑nQi(ω)
要求 ω \omega ω使得上式最小,由于没有闭式解,需要通过近似迭代逐步逼近。
基础一阶优化
GD
GD
(Gradient Descent)以 η \eta η为学习率,在每次迭代中用一阶泰勒展开近似:
ω t + 1 = ω t − η ∇ Q ( ω ) \omega_{t+1}=\omega_t - \eta\nabla Q(\omega) ωt+1=ωt−η∇Q(ω)
将求和与梯度互换。GD方法的增量来源于对所有样本同时求梯度之和:
ω t + 1 = ω t − η ∑ i = 1 n ∇ Q i ( ω ) \omega_{t+1}=\omega_t - \eta\sum_{i=1}^n\nabla Q_i(\omega) ωt+1=ωt−ηi=1∑n∇Qi(ω)
设 ω \omega ω的维度为D,代价函数 Q Q Q是个标量,减号后的梯度也是一个D维向量。
SGD
SGD
(Stochastic Gradient Descent)在每次迭代中,顺次使用每个样本的梯度,更新参数:
for i=1 to n
ω t + 1 = ω t − η ∇ Q i ( ω ) \omega_{t+1}=\omega_t - \eta \nabla Q_i(\omega) ωt+1=ωt−η∇Qi(ω)
一种折衷的方法是,把m个样本组成一个mini-batch,使用mini-batch的总梯度更新参数:
for i=1 to n/m
ω t + 1 = ω t − η ∑ j = 1 m ∇ Q i j ( ω ) \omega_{t+1}=\omega_t - \eta \sum_{j=1}^m \nabla Q_{ij}(\omega) ωt+1=ωt−ηj=1∑m∇Qij(ω)
其中 Q i j ( ω ) Q_{ij}(\omega) Qij(ω)为第i个minibatch中第j个样本的代价。
为书写简便,以下说明中不再出现样本序号i。 ∇ Q ( ω ) \nabla Q(\omega) ∇Q(ω)可以指一个样本、一个mini-batch或者全部样本的梯度只和。
更快的一阶优化
这些方法都以GD
为基础,但收敛速度更快,换句话说 ϵ t \epsilon_t ϵt