首页 » python机器学习 » python机器学习全文在线阅读

《python机器学习》12.6 神经网络的收敛性

关灯直达底部

在训练识别手写数字的神经网络过程中,没有使用传统梯度下降,而是用小批次学习来替代,读者对此可能会感到困惑。请回忆一下在线学习中曾经使用过的随机梯度下降。我们每次仅使用一个训练样本(k=1)更新权重进行。虽然这是一种随机的方法,但与传统梯度下降相比,它通常能够得到精度极高的训练结果,并且收敛速度更快。子批次学习是随机梯度下降的一个特例:从包含n个样本的训练数据集中随机抽取样本数量为k的子集用于训练,其中1<k<n。相较于在线学习,子批次学习的优势在于它能够以向量的方式进行实现,并且能够提高计算效率。然而,仍旧能比传统梯度下降更快地完成权重更新。更直观地说,你可以把小批次学习看作是在一个具有代表性的人口子集上,预测总统选举的投票人数,而不是基于所有的人口进行预测。

此外,我们还额外增加了一些超参,如下降常数以及用于自适应学习速率的参数。原因在于,与简单的算法(如Adaline、逻辑斯谛回归以及支持向量机)相比,神经网络的训练难度更大。在多层神经网络中,通常包含成百上千,甚至能多达10亿个待优化的权重。让人头痛的是,输出函数的曲线并不平滑,而且容易陷入局部最优值,如下图所示:

请注意,上面是一个简化后的示意图,通常情况下神经网络的维度极高,其输出函数曲线的粗糙程度已经超出了人眼识别的范围。在这里,我们展示了在x轴上只包含一个权重的代价函数曲线。这里想传达的信息是,我们不希望算法陷入局部最优解。通过加大学习速率,我们可以轻松地跳出局部最优解。但是,如果学习速率过大,则算法可能会越过全局最优点。由于权重的初始值是随机的,意味着我们要给出一个优化方案解决一个完全错误的问题。通过前面定义的下降常数,我们可以在最初的优化阶段就快速达到目标代价的位置,而自适应学习速率则能帮助我们更好地实现全局最优点。