优化一直是机器学习中的重要组成部分,有些人甚至会说机器学习就是优化。诚然大多数机器学习问题最后都会化归到一个目标函数然后进行优化,但是说机器学习就是优化就好比说机器学习就是统计或者说机器学习就是数学或者一切理工科都是数学一样。我的理解是,优化理论和算法是机器学习用于处理问题的重要工具,但是机器学习有自己独特的看待问题的视角,并且其中也有很多和 Optimization 并不直接相关的部分,反过来 Machine Learning 也对 Optimization 产生影响。

例如 Interior Point Method 的发明被认为是 Optimization 中的重要里程碑,这一类的方法能够保证在多项式次迭代内收敛。但是在机器学习中,特别是现在的所谓“大数据”的趋势下,这类算法却没法工作,一方面由于机器学习中所处理的数据通常维度非常高,从而相应的优化问题的变量个数变得很巨大,传统的方法虽然保证多项式迭代收敛,但是其中每一步迭代的计算代价却是随着变量个数的平方甚至三次方增长,结果是连算法的一次迭代都无法在可接受的时间内完成。于是(机器学习方面的)人们逐渐将注意力集中到主要基于 first-order oracle 的单次迭代计算量非常小的算法上。另一方面,数据点的个数的爆炸性增长也使得 stochastic 类的算法受到更多的关注——同样是降低单次迭代的计算复杂度。此外,最小化目标函数并不是机器学习的最终目标。机器学习的最终目标是 generalization,比如优化过程中在还没有达到收敛就停止的所谓 early stopping 有被证明是等价于对模型做 regularization,还有其他挺多有趣的工作也讨论了 optimization 和 machine learning 之间的 trade-off 问题,例如 Optimization for Machine Learning 一书(虽然更确切地说更像一个论文集)中的第 13 章 The Tradeoffs of Large-Scale Learning,以及 Alekh Agarwal 的博士论文 Computational Trade-offs in Statistical Learning 等。

我自己最初接触机器学习是从流形学习开始,其中最主要的一些问题的目标函数要么可以通过 Rayleigh Quotient 化为 eigenvalue 问题求解,要么是 quadratic 可以通过解线性方程组的方式来直接求解,所以对于复杂函数的优化问题一直接触不是很多,虽然多次都想更多地了解一些,零零碎碎地看了一些东西但是也没有能建立起系统的知识体系以让自己可以真正地用到这方面的理论和算法去解决具体问题。所以写这一个系列的一个主要 motivation 实际上也是督促自己学习并通过整理、记录并结合具体的机器学习模型和问题做相应实现的方式来加深自己的印象,当然也希望能对其他正在学习这方面知识的同学有一些帮助。

本文配套的示例会用 julia 写成并发布在 github/MLOpt.jl 上。由于整个代码库可能会在后续逐渐改进和发展,所以我会在系列的每篇 blog 文章发布的时候在 github 上打上对应的 tag,以方便 reproduce 以前的结果和图表。当然目前我自己最担心的是这个系列会不会在写完第一篇之后就立马夭折了?^_^bb 想来应该不会…………吧?虽然寒假马上就又要结束了。