An overview of gradient descent optimization algorithms and Weight initialization methods.
神经网络重要的一点就是调参炼丹,这里复习一下网络的初始化方法及优化方法。
然而知道这些并没有什么用, 平时多实验才是王道
1 网络优化方法
这里主要说明一些关于梯度下降的方法,梯度下降顾名思义就是按照梯度来更新参数
优化方法有很多,caffe中支持下面几种:
- SGD stochastic gradient descent
- AdaDelta
- Adam
- Nesterov
- RMSProp
这里我们会结合其他课程或者博客比如 cs231n或者 https://arxiv.org/pdf/1609.04747.pdf
1.1 SGD
梯度下降的方法有很多
其中用全部数据来进行梯度下降的称为Batch Gradient Descent,这种方法的缺点是更新慢而且内存需求大
其优化方式可以看为:
params = params - learning_rate * params_grad
显然上面的数据使用方法不适合大数据的使用,于是可以每次只取一个或者一部分样本进行训练,现在我们常用是Mini Batch Gradient Descent 但是下文仍然称为SGD,SGD有些时候是用来描述每次只取一个样本的方法,Mini Batch Gradient Descent 比起每次随机取一个样本的方法 训练波动更小,更加稳定,更加高效,这基本上是最常用的一种优化方法,虽然没有很多技巧但是比较稳定
1.2 Momentum
其更新公式如下:
sgd的公式可以看为
可以看出momentum考虑了之前一次更新,如果每次更新方向一致,那么其更新的速度会越来越快,如果方向改变,则会降低更新速度,eta可以看成摩擦因子一样的因子,相比sgd,理论上momentum可以减少动荡,加快收敛
1.3 Nesterov
Nesterov 认为我们更新的时候应该考虑前面的位置
与moment的区别可以视为:

momentum首先计算一个梯度(短的蓝色向量),然后在加速更新梯度的方向进行一个大的跳跃(长的蓝色向量),nesterov项首先在之前加速的梯度方向进行一个大的跳跃(棕色向量),计算梯度然后进行校正(绿色梯向量)
1.4 Adagrad
之前每次更新所有参数的学习率都是一样的,Adagrad是用不同的学习率更新不同的参数
\epsilon 常取1e-8等数用来避免分母为0
G_t 是一个对角矩阵,对应\theta_i梯度的平方和
可以看出式中分母是不断增加的,随着梯度的增多学习率逐渐减少
1.5 Adadelta
adadelta将adagred分母中的平方累加替换为了权重均值