0. convex optimization
Convex Optimization1. Introductory Lectures on Convex Optimization
Introductory Lectures on Convex Optimization2. Convex Optimization: Algorithms and Complexity
http://arxiv.org/abs/1405.49803. nonlinear programming
http://www.amazon.com/Nonlinear-Programming-Dimitri-P-Bertsekas/dp/1886529000我稍微归纳总结一下:
优化方面经典的三本优化著作,可根据自身情况选读
若是深度学习方面的优化问题话
Optimization是机器学习中非常非常重要的问题,基本上机器学习问题最后都会规约成一个目标函数去求解,optimization便是求解目标函数中参数的重要工具,建议学习时循序渐进,每遇到一个模型,其对应的优化算法搞懂,慢慢将知识串起来!日积月累,便了然于胸了!
个人理解,有误之处,欢迎指正!
(这是张动图,戳链接查看: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机器学习科学家马永宁。
前言--正本清源:优化理论(运筹学),研究的是如何求解目标函数在约束条件下的最优解。机器学习、人工智能中的绝大部分问题,到最后基本都会归结为求解优化问题,因此学习优化理论是非常有必要的。
机器学习中用到的优化,只是整个运筹学(最优化理论)中的一瞥。基本只需一门Numerical Optimization(数值优化)或Convex Optimization(凸优化)即可。还有更简单粗暴的,书名直接叫做CONVEX OPTIMIZATION IN ENGINEERING(工程中的凸优化)--机器学习中用到的优化和运筹学相比确实挺“工程”的。
下面是三本书目和下载链接(当然是英文原版的,还是免费的):
1,Numerical Optimization,西北大学和美国阿贡实验室著(他引2w次)
http://www.bioinfo.org.cn/~wangchao/maa/Numerical_Optimization.pdf
2,Convex Optimization,斯坦福和UCLA教授著
https://web.stanford.edu/~boyd/cvxbook/bv_cvxbook.pdf
3,CONVEX OPTIMIZATION IN ENGINEERING Modeling Analysis Algorithms,以色列理工教授著
http://www.st.ewi.tudelft.nl/~roos/courses/WI4218/tud00r.pdf
不喜欢看书的小伙伴,推荐Youtube(油管)搜索相关课程(当然你要自学怎么翻墙咯),很多世界名校的教授都非常无私地把自己上课视频上传油管。例如:
斯坦福大学 Stephen Boyd教授在电子工程系(Electrical Engineering )开的Convex Optimization课程(EE 364A,感谢评论区,该课为研究生课程):
https://www.youtube.com/watch?v=McLq1hEq3UY
说实话,运筹学出生的楼主,看到机器学习中的优化理论基本都是直接跳过的,因为实在太基础了。(喷子莫喷,学完运筹学下绝大部分优化课程再喷也不迟)
运筹学作为专门研究优化理论的学科,其下分支是极为庞大的,那么机器学习中优化理论只需一门convex optimization的原因在于,机器学习处理数据之庞大,因此基本假设便目标方程和约束空间是convex和continuous。这样导致运筹学的另外半壁江山nonconvex和integer optimization(NP难问题)在机器学习的领域没有什么用武之地。
当然随着计算机运算效率的提高,也开始有学者把nonconvex和integer optimization应用于机器学习,比如楼主,还有楼主最近一篇paper的合作者之一,机器学习领域的法国国立应用科学学院(INSA)及诺曼底大学的Stephane Canu教授,就是这股潮流其中之二--我们利用混合整数规划模型直接求解L0范式的优化问题(通常的策略是求解L1或Lp范式--转化成convex 和continuous)。
因此如果你纯粹做机器学习的应用,那么学convex optimization就行,并且不用太在意理论性的东西,这是运筹学的研究者去研究的;如果搞科研,建议学完convex后可以跟进nonconvex和integer programming,因为以前没人用,把没有用过的理论应用过来,效果好就是一个新发现和好paper--欢迎入坑。
如果你想入门机器学习、人工智能,除了优化还有很多其他许多基础课程,下面给你由浅入深一一列举:
如果对运筹学感兴趣,可以看看楼主在下面的回答:
也欢迎收听我2017.6.11号举办的“运筹学综述”知乎live,探讨关于运筹学、优化、AI的相关话题:
大数据人工智能时代的运筹学最后,编程当然是实现一切优化算法的基础
而人工智能大数据时代,Python因其丰富的机器学习、数据分析和优化算法工具包,则是入门编程的最佳选择!
如果你是运筹学/人工智能硕博或在读,敬请关注 @运筹OR帷幄 ,了解优化理论的本源--运筹学:
『运筹OR帷幄』大数据人工智能时代的运筹学最后是 @留德华叫兽 通往大洋彼岸高薪博士职位,以及人工智能数据科学家的传送门:
欧洲、北美、全球留学及人工智能、数据科学深度私人咨询,从此DIY - 知乎专栏
Basic convex optimization:
1. Lecture notes by Nemirovskii on his website.
2. Introductory Lectures on Convex Optimization by Nesterov.
3. Nonlinear Programming by Bertsekas
4. Convex Optimization: Algorithms and Complexity by Bubeck
Then you may need some serious convex analysis:
5. Convex Analysis by Rockafellar
6. Convex Analysis and Monotone Operator Theory in Hilbert Spaces by Bauschke and Combettes
7. Variational Convergence for Functions and Operators by Attouch
While in modern machine learning, many popular algorithms are stochastic or online, such as SGD, AdaGrad, etc., I don't find any good, up-to-date book or monograph. I would suggest directly read the papers.