(这是张动图,戳链接查看:http://www.myexception.cn/img/2016/01/17/122257498.gif)
各位前面已经总结了一些经典的优化方面的教科书——经典的线性规划到凸优化这些是必修的,也是理解从最小二乘到SVM到贝叶斯推断这些经典算法的基础,当然是必读的,这里不再赘述。
我们特别提一提基于梯度下降的方法,或者说,训练神经网络的方法。
• 首先是这篇Overview: An overview of gradient descent optimization algorithms(https://arxiv.org/pdf/1609.04747.pdf 或者http://sebastianruder.com/optimizing-gradient-descent/index.html),这篇文章介绍了现代神经网络训练的主要方法:Gradient Descent, Stochastic Gradient Descent, Mini-batch; SGD+Momentum; SGD+ Nesterov Momentum; Adagrad; Adadelta; RMSprop; Adam. 看完以后应该可以在调参过程中选择优化方法的时候多一些信心。
• 深度神经网络倾向于使用梯度下降的方法的一个重要原因在于可以比较好的应用于反向传播。而反向传播是整个深度学习的基石。在这个方面,最经典的莫过于Hinton在Nature上的这篇Learning representations by back-propagating errors: https://www.iro.umontreal.ca/~vincentp/ift3395/lectures/backprop_old.pdf
• 说到详细分析反向传播的文章,就要数LeCun杨立昆老师的这篇Efficient Backprop了:http://yann.lecun.com/exdb/publis/pdf/lecun-98b.pdf ,这篇文章详尽地介绍了Backprop的一些tricks,并分析了采用梯度下降(一阶方法)和二阶方法(Hessian-based)的收敛性质。这篇文章被Neural Networks- Tricks of the Trade一书收录。
• Bengio的Practical Recommendations for Gradient-Based Training of Deep Architectures (https://arxiv.org/pdf/1206.5533.pdf) 是一篇更加现代的介绍基于梯度的神经网络训练(炼丹)方法(Tricks)的文章,同样被收录进Neural Networks- Tricks of the Trade。
• CNN的反向传播推导(当然,在现代的深度学习平台上因为自动梯度的存在,你基本上不需要知道这些——但是偶尔手动推导一下也不坏,是吧)——还是看杨立昆老师的这篇:Backpropagation applied to handwritten zip code recognition (http://yann.lecun.org/exdb/publis/pdf/lecun-89e.pdf)
• LSTM的反向传播推导:这个不推荐看Hochreiter/Jurgen Schmidhuber 1997的那一篇了,因为这一篇当中的LSTM没有forget gate!比较好的一篇介绍在:LSTM: A Search Space Odyssey (https://arxiv.org/pdf/1503.04069.pdf)
• RNN的训练:基本上,RNN的训练是非常困难的,问题主要在于梯度消失/梯度爆炸,这个问题可以看Bengio的这篇分析:Learning Long-Term Dependencies with Gradient Descent is Difficult. (http://www-dsi.ing.unifi.it/~paolo/ps/tnn-94-gradient.pdf)。比较有意思的是(可能训练RNN确实太难),Bengio在2012年带着Mikolov又做了一篇On the difficulty of training Recurrent Neural Networks (https://arxiv.org/pdf/1211.5063.pdf)
好了,读到这里相信你最少对于神经网络的优化方法有了一个初步的理解——不过在这里特别提醒,基于梯度下降的方法绝对不是唯一的训练方法,对于非凸优化咱们虽然很难有效地寻找全局最优点,但还是有些别的办法的,比如说,基因算法。这个坑就留着等大家来填吧。
本回答来自Emotibot机器学习科学家马永宁。