「Deep Learning」Optimizers/Solvers

Sina Weibo:小锋子Shawn
Tencent E-mail:[email protected]
http://blog.csdn.net/dgyuanshaofeng/article/details/68955573

    在面试的时候,面试官问起凸优化有哪一些优化算法?只能回答个牛顿法、梯度下降法。其实还有很多,参考Stephen Boyd和Lieven Vandenberghe的教材吧。我记得书里面一直提,如果可以将一些问题或者一类问题转化为凸优化问题,那么这一类问题就被解决了。如何“转化”是一个非常难的问题了。另外一直也提,很多非凸问题可以尝试用凸优化算法去“解决”——找个不错的局部解。神经网络/深度学习被证明是一个非凸问题,但是不妨碍我们去寻找局部解,并且这些局部解可以碾压传统的机器学习方法。
    在微博上,我看到王威廉分享了一篇arxiv文章以及这篇文章对应的博文,作者希望讲解深度学习里面优化器/求解器背后的思想。我看完之后,觉得挺有用,所以记录一下。这个知识点应该是比较重要的一个,好比针对什么任务选择什么样的机器学习算法,针对什么数据可以选择什么样的优化算法求解神经网络。
    
    资料:
    1、文章:An Overview of Gradient Descent Optimization Algorithms, Sebastian RuderLink
    2、博文:the same name of the above, Link
    3、Keras文档,Link
    4、Caffe教程,Link
    5、cs231n optimization, Link
    6、cs231n neurak networks, Link
    7、RMSprop, Link
    8、Early stopping, Link
    9、新智元的翻译,Link

    内容(翻译自资料1):
    1、梯度下降法的变体。
     根据计算目标函数的梯度所使用的数据量,梯度下降法可以分成3种,或影响参数更新的准确度(识别率的波动),或影响更新时间(训练时间)。通常情况下,训练神经网络采用C,即mini-batchGD。
    A 批量梯度下降(batch GD)使用整个训练集计算梯度。
    B 随机梯度下降(SGD)使用每一训练样本计算梯度。Loss波动很大。SGD也叫在线GD。
    C 小批量梯度下降(mini-batch GD)使用随机洗牌训练集中的某一些样本计算梯度。batchsize一般为50到256,其实还可以有很多情况。我喜欢取2的整数次方,比如1、2、4、8、16、32、64、128、256。流行的优化算法就是这种,后面的SGD就是这种MGD。A和B目前用的人比较少。
    2、梯度下降优化算法。
    A Momentum(mini-batch SGD with Momentum)
    SGD通过沟壑/深谷的时候容易被困,但是局部最小值可能就在这些沟壑附近。其表现为在这些沟壑振荡。Momentum可以帮助SGD在这个方向(陡峭方向)加速通过从而逃离沟壑,抑制振荡。参数更新公式见论文。通常momentu项的gamma值取0.9。结果为,快速收敛减少振荡

    待续。。。

你可能感兴趣的:(「Deep Learning」Optimizers/Solvers)