模型的学习
了解模型的学习过程,以及如何区分神经网络的损失(loss)和准确率(accuracy)。
神经网络回顾
-
目前,我们已经熟悉了梯度下降(Gradient Descent)。本章将介绍一种增强版的梯度下降方法,称为小批量梯度下降(mini-batch gradient descent)。
-
小批量梯度下降比标准的梯度下降稍微复杂一些,但正如我们将要看到的,它通常收敛得更快。简单来说,小批量梯度下降能更快地接近最小损失值,从而加速神经网络的训练过程。此外,它占用更少的内存,有时甚至能找到比标准梯度下降更优的损失值。事实上,从本章之后,我们可能再也不需要使用标准梯度下降了!
-
有人可能会问:既然还有更紧迫的问题,为什么我们要关注训练速度?特别是,我们的神经网络准确率仍然不尽如人意——虽然比感知机好,但在 MNIST 数据集上的表现仍远低于我们设定的 99% 目标。难道我们不应该先提升网络的准确性,再考虑提速吗?毕竟,正如 Donald Knuth 所说:“过早优化是万恶之源”。
-
然而,立即提升训练速度是有原因的。在接下来的几章中,我们将通过反复调整网络来逐步逼近 99% 的目标。我们会调整超参数、训练网络,然后重复这一过程,直到获得理想结果。每一次迭代都可能耗时数小时。如果我们能找到办法加快每次训练的速度,就能更快地迭代;否则整个调参过程可能需要数天时间。
-
也有人会问:为什么不优化现有的算法,而是要去寻找新的替代方案?答案是:很快我们将不再手动编写反向传播代码,而是转向高度优化的机器学习库。与其花精力优化那些即将被抛弃的代码,不如专注于掌握一些即使切换到成熟库后依然适用的技术。
小批量梯度下降正是这样一种长期有效的技术。接下来我们就来看看它的原理。不过在此之前,让我们先回顾一下神经网络训练的过程。
可视化学习过程
为了加速训练,我们需要深入理解其工作原理。让我们更仔细地观察神经网络在训练过程中损失(loss)和准确率(accuracy)的变化情况。
我们知道,在训练过程中损失会下降,准确率会上升。但仅仅盯着这些数值并不能揭示全部真相。为了更好地可视化损失和准确率的变化,我们可以对神经网络稍作修改,使其返回两个列表:分别记录每次迭代中的损失和准确率的历史数据。收集完这些历史信息后,我们可以将其绘制成图表,如下图所示:
这些图表显示:随着训练进行,损失逐渐降低,准确率逐步上升。然而,仅凭这些图还难以判断网络的实际表现。例如,经过 30 次迭代后,准确率仍低于 60%。这是失败的早期征兆,还是成功的第一步?只有继续训练才能知道答案。
这次,我们让系统训练 1,000 次迭代。
结果如下:
这些图表比之前的更具信息量。可以看出,损失呈现出渐近特性:最初几次迭代中迅速下降,随后逐渐趋近于某个理想的最小值,但永远不会完全达到。网络的准确率变化趋势与此类似,只是方向向上。
进一步观察可以发现,无论我们训练多久,这个网络的准确率始终无法达到梦寐以求的 99%。事实上,在之前章节中,我们曾将网络训练了 10,000 次迭代,最终准确率也只是稳定在 93% 左右。从上述图表中,我们其实早在前一千次迭代结束后就能预见到这一结果。
为了实现那难以企及的 99% 准确率,我们必须调整网络的超参数——而这正是本章开头提到的困境所在:
- 一方面,我们必须训练一段时间,才能评估网络的表现;
- 另一方面,为了调参,我们必须多次重复训练。
如果网络能在更早阶段就给出明确反馈就好了——这样我们就能快速判断准确率的发展趋势,并在发现无望提升时及时终止训练。
损失 vs. 准确率
如果我们仔细观察神经网络训练过程中的损失和准确率,可能会注意到一个细节:损失是严格递减的,即每一步迭代都会比上一步更低。相比之下,准确率总体呈上升趋势,但并非每一步都必然提高——有时保持不变,甚至偶尔还会下降。原因如下:
损失在每一步都下降,是因为这正是梯度下降的本质:沿着损失函数的梯度方向向下移动,每一步都寻找更低的损失值。下一章我们会看到,某些错误配置可能导致梯度下降反而跳到了更高的损失点,但这属于相对罕见的特殊情况。一般而言,一旦发现损失上升,我们就应立即调整网络的超参数或检查梯度下降代码是否存在 bug。
与连续变化的损失不同,网络的准确率是离散的,因为它取决于有多少测试样本被正确分类。在训练初期,网络可能会长时间微调权重以争取多正确分类一个样本,此时准确率可能长时间停滞不前。甚至有时准确率会短暂下降,比如当网络用某个样本的误差增大换取多个其他样本误差减小时。正因如此,尽管长期来看准确率呈上升趋势,但在短期内可能出现平台期或小幅波动。
总结一下:在标准梯度下降中,损失通常在每一步都会下降;而准确率整体上升,但不一定每一步都上升。
需要注意的是,这些规律仅适用于标准梯度下降,未必适用于我们即将讨论的梯度下降变体。特别是,我们即将放弃“损失必须每步递减”这一假设。