高能效类脑智能:算法与体系架构
上QQ阅读APP看书,第一时间看更新

2.2.1 监督学习

监督学习是使用神经网络的最成熟的机器学习方法。监督学习最受欢迎的应用之一是分类。在监督学习任务中,目标是学习某种基于可用数据的输入-输出映射。例如,在一个分类任务中,我们希望将图像分类为不同的类别,输入数据应该包含两部分:图像和标签。每个图像都有一个相关的标签,有助于对图像进行分类。标签可以由专家生成。监督学习的目的是,在学习之后,神经网络应该能够将正确的标签与所呈现的图像联系起来。

在监督学习中,损失函数的一个主流定义是:

其中x0为包含神经网络输出的列向量,t为期望或目标输出向量。“监督学习”这个名称来自这样一个事实,即在学习阶段明确地提供了一个监督信号t。标签的存在使分类问题属于这一类。然而,在实践中可能无法为我们感兴趣的许多问题提供明确的监督信号。在这种情况下,我们不得不求助于其他学习方法。值得注意的是,式(2.7)中所示的除二运算并不重要,这是许多研究人员使用的一种惯例。在计算梯度时引入1/2的系数可以使计算结果更加清晰。

在式(2.7)中,x0可以显式表示为x0(w,xi),其中xi为输入向量。从学习的角度来看,神经网络本质上是一个关于可调参数w和固定参数xi的函数。学习过程是将参数w设置为一个适当的值,使神经网络的输出与给定数据在神经网络输入时的监督信号相匹配。实现上述目标的工具是2.1.2节中描述的梯度下降学习方法。

显然,仅仅记住正确答案并不总是很有用。在监督学习中,我们希望通过看到几个有正确答案的例子,新的神经网络可以对以前没有看到过的数据做出正确的推断。这样的期望似乎是合理的,尽管在实践中实现它可能并非易事。在数学上,监督学习中的神经网络试图学习一个映射函数,它可以将给定的输入映射到正确的输出。通过提供标记数据,我们实质上是提供了输入到输出映射关系的神经网络样本,这可以通过图2.7来说明。图中样本用圆圈表示,期望神经网络通过最小化输出与样本数据的差值来找出正确的函数映射。显然,当网络没有足够的自由参数时,或者换句话说,网络没有足够的容量时,它就不能正确地拟合数据。这种情况对应于图2.7所示的欠拟合情况。另一种极端是过拟合,这种情况通常发生在神经网络自由度过大而训练数据不足的情况下。一个有助于理解欠拟合和过拟合概念的类比是:假设我们有一组方程,在一种极端情况下,未知数可能比方程的数量还少。因此,很可能无法完全解出这组方程,我们能做的最好的事情是得到一个近似解,使得到的误差最小化。这对应于欠拟合的情况。在另一个极端情况中,未知数的数量明显比方程数量多,在这种情况下,我们有无数个解,但我们不知道哪一个解是正确的。这对应于过拟合的情况,一个区分欠拟合和过拟合的好方法是观察测试误差和训练误差。通常,一个欠拟合的新神经网络在训练数据和测试数据上表现得都很差。另一方面,过拟合网络通常在训练数据上表现良好,但在不可见的测试数据上表现不佳。

图2.7 合适的拟合、欠拟合与过拟合图示

显然,可以通过简单地增加网络容量来避免欠拟合,例如,可以通过增加网络的大小来实现。另一方面,过拟合可以通过在学习中设置更多的约束来避免。许多研究人员经常使用的一个避免过拟合和欠拟合的好方法是从一个小的网络开始,然后逐渐增加网络的大小。在此过程中,可以通过监控学习性能来选择合理的网络大小。除了调整网络大小之外,一个非常流行的方法是通过正则化来解决过拟合的问题。正则化方法背后的直觉是,过拟合的原因是我们在训练过程中有太多的自由变量,我们可以对神经网络的参数设置更多的约束,以减少自由度。在数学上,正则化的损失函数可以写成:

通过比较式(2.7)与式(2.8),我们发现增添了项λR(w),这一项被称为正则化项,λ被称为正则化系数。原则上,R(w)函数可以是任何形式,只要它对w有一定的合理约束。在实践中,L2正则化最常见,L1正则化也很流行。有时,L0正则化也被用来增加网络的稀疏性。从数学上讲,这三种正则化中的R(w)可以分别写成‖w‖2、‖w‖1和‖w‖0。简单地说,L2范数是所有突触权重的平方和,L1范数是所有突触权重的绝对值之和,L0范数是非零突触权重的个数。

λ是正则化项新引入的超参数。在简单模型中使用过大的λ值可能导致欠拟合,而另一方面过小的λ则会使得对正则化的强调不够而表现出过拟合。λ的选择在神经网络的训练中是非常重要的,一种常见的做法是通过调整正则化项和监控学习过程来选择正确的正则化系数。

一般来说,训练一个神经网络来适当地适应手头的问题是很重要的。监督学习的典型过程如下:

1)通过收集标记数据来准备数据集。

2)对数据进行预处理,如数据归一化等。

3)将数据分为训练集和测试集,通常还包括验证集。

4)利用训练数据对神经网络模型进行训练,训练数据通常会多次出现在神经网络中,因此打乱训练数据的顺序通常是有利的。

5)使用验证集调整超参数,如学习率、正则化系数和层数。

6)将训练好的神经网络应用于测试数据集,测试神经网络的性能。

在学习过程中,数据集被分为三个部分,各有不同的用途。

训练集:这组数据用于训练模型。

验证集:这组数据是用一组特定的超参数的神经网络来评价神经网络的性能。

测试集:这组数据用于评估训练后的神经网络的最终性能。所测得的性能可以用来估计训练后的神经网络对未知数据的处理效果。

值得注意的是,一个常见的陷阱是使用测试集进行超参数调优。问题是当测试集同时用于测试和验证时会存在偏差。得到的测试精度是有偏差的,因为在测试集中表现最好的模型已经被挑选出来了。换句话说,模型可能会被测试集数据过拟合。因此,尽管所获得的模型在测试集中表现良好,但这并不意味着所选择的模型实际上在其他数据上有好的效果。