第 4 章 扩展 扩展
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
在上一章中,我们花了两章的时间从第一原理出发,推理了什么是深度学习模型以及它们应该如何工作,最终建立了第一个深度学习模型,并对其进行了训练,以解决一个相对简单的问题,即根据房屋的数字特征预测房价。然而,在大多数现实世界的问题上,成功训练深度学习模型并不那么容易:虽然可以想象,这些模型可以为任何可以被框定为监督学习问题的问题找到一个最优解,但在实践中,它们往往会失败,事实上,理论上很少有人能保证给定的模型架构事实上会为给定的问题找到一个好的解决方案。不过,还是有一些广为人知的技术能让神经网络训练更有可能取得成功;这些技术将是本章的重点。
我们将从 开始,回顾神经网络在数学上的 "尝试":找到函数的最小值。然后,我将展示一系列可以帮助网络实现这一目标的技术,并在经典的手写数字 MNIST 数据集上演示其有效性。我们将从深度学习中贯穿分类问题的一个损失函数开始,展示它能显著加快学习速度(本书迄今为止我们只涉及回归问题,因为我们还没有引入这个损失函数,因此还不能很好地处理分类问题)。同样,我们还将介绍除 sigmoid 之外的其他激活函数,并说明为什么它们也能加速学习,同时讨论一般激活函数所涉及的权衡问题。接下来,我们将介绍动量,它是我们迄今为止一直在使用的随机梯度下降优化技术最重要(也是最直接)的扩展,同时还将简要讨论更高级的优化器可以做些什么。最后,我们将介绍三种互不相关但都至关重要的技术:学习率衰减、权重初始化和辍学。我们将看到,每种技术都将帮助我们的神经网络连续找到更多最优解。
在第一章中,我们按照 "图表-数学-代码 "的模式介绍了每个概念。在本章中,每种技术都没有明显的图表,因此我们将从每种技术的 "直觉 "开始,然后是数学(通常比第一章简单得多),最后是代码,这实际上需要将技术融入我们构建的框架,从而精确描述它如何与我们在上一章中形式化的构建模块进行交互。本着这种精神,我们将在本章开头介绍一些 "整体 "直觉,说明神经网络想要做什么:找到函数的最小值。
关于神经网络的一些直觉
正如我们已经看到的 ,神经网络包含一堆权重;给定这些权重,再加上一些输入数据X 和y ,我们就可以计算出结果 "损失"。图 4-1展示了神经网络这种极为高层次(但仍然正确)的视图。
图 4-1. 带权重的神经网络的简单思路
实际上,每个权重都与特征X 、目标y 、其他权重以及最终的损失L 存在某种复杂的非线性关系。如果我们将其绘制成图,改变权重值,同时保持其他权重、X 和y 的值不变,并绘制出损失的结果值L ,我们就可以看到类似图 4-2 所示的结果。
图 4-2. 神经网络的权重与其损耗的关系
当我们开始训练神经网络时,我们会将每个权重初始化为图 4-2 中 x 轴上的某个值。然后,利用我们在反向传播过程中计算出的梯度,我们反复更新权重,第一次更新基于我们偶然选择的初始值的曲线斜率。1图 4-3展示了这种几何解释,即根据梯度和 ...