设计和训练神经网络与使用梯度下降训练其他任何机器学习模型并没有太大不同。 在5.10中,我们描述了如何通过指定一个优化过程、代价函数和一个模型族来构建一个机器学习算法。
我们到目前为止看到的线性模型和神经网络的最大区别,在于神经网络的非线性导致大多数我们感兴趣的代价函数都变得非凸。 这意味着神经网络的训练通常使用迭代的、基于梯度的优化,仅仅使得代价函数达到一个非常小的值;而不是像用于训练线性回归模型的线性方程求解器,或者用于训练逻辑回归或SVM的凸优化算法那样保证全局收敛。
[success] 线性模型和神经网络的区别:
- 线性网络可以使用闭解形式求解,NN只能使用迭代求解
- 练逻辑回归或SVM等凸优化算法保证全局收敛,NN是非凸
- (同样是因为非凸)NN对参数的初始值敏感,通常w使用小的随机值,b使用小的正值。
凸优化从任何一种初始参数出发都会收敛(理论上如此——在实践中也很鲁棒但可能会遇到数值问题)。 用于非凸损失函数的随机梯度下降没有这种收敛性保证,并且对参数的初始值很敏感。 对于前馈神经网络,将所有的权重值初始化为小随机数是很重要的。 偏置可以初始化为零或者小的正值。 这种用于训练前馈神经网络以及几乎所有深度模型的迭代的基于梯度的优化算法会在\chap?详细介绍,参数初始化会在\sec?中具体说明。 就目前而言,只需要懂得,训练算法几乎总是基于使用梯度来使得代价函数下降的各种方法即可。 一些特别的算法是对梯度下降思想的改进和提纯(在\sec?中介绍)还有一些更特别的,大多数是对随机梯度下降算法的改进(在\sec?中介绍)。
我们当然也可以用梯度下降来训练诸如线性回归和支持向量机之类的模型,并且事实上当训练集相当大时这是很常用的。 从这点来看,训练神经网络和训练其他任何模型并没有太大区别。 计算梯度对于神经网络会略微复杂一些,但仍然可以很高效而精确地实现。 \sec?将会介绍如何用反向传播算法以及它的现代扩展算法来求得梯度。
和其他的机器学习模型一样,为了使用基于梯度的学习方法我们必须选择一个代价函数,并且我们必须选择如何表示模型的输出。 现在,我们重温这些设计上的考虑,并且特别强调神经网络的情景。
[success]
在非凸函数中,梯度下降法的结果与初始化值有关,关于参数的初始化见第8章。
梯度下降法及其改进见4.5。
随机梯度下降法见5.9。
使用反向传播算法快速计算神经网络的梯度,见6.5。