深度学习算法在许多情况下都涉及优化。例如,模型中进行推断(如PCA)涉及求解优化问题。我们经常使用解析优化去证明或设计算法。在深度学习涉及的诸多优化问题中,最难的是神经网络训练。甚至是用几百台机器投入几天到几个月来解决单个神经网络训练问题,也是很常见的。因为这其中的优化问题很重要,代价也很高,因此研究者们开发了一组专门为此设计的优化技术。本章会介绍神经网络训练中的这些优化技术。

本章主要关注这一类特定的优化问题:寻找神经网络上的一组参数\(\theta\),它能显著地降低代价函数\(J(\theta)\),该代价函数通常包括整个训练集上的性能评估和额外的正则化项。

首先,我们会介绍在机器学习任务中作为训练算法使用的优化与纯优化有哪些不同。其次,我们会介绍导致神经网络优化困难的几个具体挑战。再次,我们会介绍几个实用算法,包括优化算法本身和初始化参数的策略。更高级的算法能够在训练中自适应调整学习率,或者使用代价函数二阶导数包含的信息。最后,我们会介绍几个简单优化算法结合高级过程的优化策略,以此作为总结。

学习和纯优化有什么不同

用于深度模型训练的优化算法与传统的优化算法在几个方面有所不同。机器学习通常是间接作用的。在大多数机器学习问题中,我们关注某些性能度量P,其定义于测试集上并且可能是不可解的。因此,我们只是间接地优化P。我们希望通过降低代价函数\(J(\theta)\)来提高P。这一点与纯优化不同,纯优化最小化目标J本身。训练深度模型的优化算法通常也会包括一些针对机器学习目标函数的特定结构进行的特化。