BP神经网络的过拟合现象观察

摘要:本文以MATLAB的神经网络曲线拟合应用为工具,简要探究和演示了单隐含层BP网络中的过拟合现象。我们将讨论不同输入函数和隐含层神经元数量对过拟合现象的影响,并考察有噪声数据集下的拟合效果,以使读者对神经网络训练中的过拟合现象建立直观的认识。

产生测试数据集

首先使用MATLAB编程,根据以下公式产生数据集。为了方便作图演示,输入输出都只包含一个变量。

y = x^2 + sin(5x)

num_of_points = 100;
x = 1-2*rand(1,num_of_points);
y = zeros(1,num_of_points);
for i = 1:num_of_points
    y(i) = nonlinear_fcn(x(i));
end
function [m] = nonlinear_fcn(x)
    m = x^2+sin(5*x);
end

作出随机生成的点集,如右图所示。红色曲线即是我们要拟合的曲线。在以下所有训练中,我们均随机选取70%的样本为训练集,15%为测试集,15%为验证集。

过拟合与样本点数

下面我们使用MATLAB中的Neural Fitting工具尝试对此曲线进行拟合。在此工具中,隐含层激活函数是双曲正切函数,而输出层是线性函数。在观察过拟合与样本点数的关系时,我们(武断地)选取隐含层神经元的数量为100个。

训练过程中,我们采用Levenberg-Marquardt算法调整连接权重。这是一种变步长的梯度下降法,训练所需时间比较短。

这次训练仅仅经过了12轮迭代就结束了,原因是因为测试集和验证集的数据误差没有任何缩小(如右图中的红色和蓝色曲线),但是,训练集(蓝色曲线)的最终误差却在不断缩小。这种训练集误差远小于测试集的现象即称为过拟合。左图黑色曲线是训练后神经网络拟合的曲线(即输入输出关系)。蓝色加号为训练集输入对应的拟合输出。在训练集样本没有覆盖到的地方,曲形状不受约束,与真实曲线偏差极大。

神经网络的拟合结果
训练过程的误差变化

现在,将样本数量增大到500,再次训练。此次训练这次从左侧曲线拟合来看,已经没有明显不符的区间。不过在右侧图形中,可以发现蓝色曲线的训练集误差还是明显小于测试集,BP网络仍然存在过拟合现象。另外,在左图下方的误差直方图中,可注意到某一输入下的误差值与这一点上的曲线斜率有关。

500个样本的曲线拟合
500个样本的误差变化

增加样本点数至5000个,再次训练。此次训练轮次达设置上限,即1000轮。训练集和测试集误差不断减小,没有出现明显的过拟合现象。

因此,我们可以得到结论:选取较大的数据集有利于减少网络的过拟合现象。

神经网络的复杂程度与过拟合现象

神经网络的复杂程度也会极大影响过拟合现象的严重程度。事实上,作为一个高度复杂的非线性系统,神经网络的泛化能力(即抗过拟合能力)相较于回归分析等方法是很差的,这一点在前文中100个样本时的拟合曲线中已经有相当明显的体现。这被称作结构风险理论。对于单隐含层的BP网络而言,其复杂程度就是由隐含层神经元的数目所决定的了。下面我们将观察BP神经网络的隐含层神经元数目与过拟合现象之间的关系。

仍旧使用100个数据样本,但是这次我们只使用10个隐含层神经元。尽管过拟合现象仍然存在,但是前文中100个隐含层神经元时的大误差已经消失,即使实在缺少样本点的区间上也产生了平滑的良好拟合效果。

10个隐含层神经元的拟合结果
10个隐含层神经元的误差变化

将隐含层神经元个数进一步降低至3个。过拟合现象进一步消除,不过由此导致误差也显著增大了。(经验证,3个隐含层神经元是此处拟合出大致曲线形状所需的最少隐含层神经元进行数量)

3个隐含层神经元神经元拟合结果

3个隐含层神经元的误差变化

BP网络性能与被拟合函数的关系

在前面的讨论中我们已经注意到,在被拟合曲线斜率较大处,无论是训练集还是测试集都有较大的误差(500个样本的曲线拟合)。这是否意味着斜率越大(或者频谱高次分量越大)的函数,同一个神经网络的拟合能力就越差呢?我们修改被拟合曲线为如右图所示,再次测试。

使用5个隐含层神经元的BP网络进行训练。100个样本点的训练结果如左图所示。可以观察到有的样本被错误地“分类”了。增加样本数目和隐含层神经元数目是十分自然的思路。右图是20000个样本+100隐含层神经元的训练结果,其并没有解决靠近“边界”处的样本误差过大的问题。但是,其图形极类似移除了高频分量之后的方波——这可以在一定程度上显示,BP网络越复杂,越能拟合变化剧烈的曲线(或者频域高频分量)

5隐含层神经元+100样本


100隐含层神经元+20000样本

有噪声作用时的函数拟合

现在,让我们回到先前的函数拟合问题。在实际应用中采集到的数据,必然包含有一定的噪声。那么,上面讨论的BP网络模型是否能够正确地从有噪声数据中提取出原来的函数关系?这是这一部分将要回答的问题。我们为每个样本点增加5%的噪声,如下式所示

y=rand(0.95,1.05)*[x^2+sin(5x)]

于是,获得了如右图所示的训练数据集,共计100个样本。

下面一组结果是使用100个样本,10隐含层个神经元训练得到的。可以注意到已经出现过拟合问题,因为部分区域(左上角)的曲线不再是原来的平滑曲线,受噪声影响出现了变形。这便是另一种形式的过拟合,也是在神经网络的实际应用中最常见的过拟合:对噪声过拟合。即这样一个泛化能力不足的模型把随机的噪声也视作了规律进行拟合。

下面一组结果来自3个隐含层神经元的网络的拟合结果。可以发现过拟合现象得到了明显的改善。如何解释这种现象呢?我们在前文已经讨论过,更多的隐含层神经元、更复杂的网络结构将导致系统具备对频域的高频段进行拟合的能力。然而,随机噪声恰好具有较高的频率特性(即变化快,导数大),也正会被我们的复杂网络拟合至结果中。因此,我们得到一个重要的结论:即使拥有充分的算力,神经网络的结构也不是越复杂越好

阶段性结论与延伸讨论

经由以上讨论,我们(并不严密地)给出如下结论:神经网络对非线性关系的拟合能力(即训练集误差)和泛化能力(即抗过拟合能力)互为矛盾。当下常用的各种深度学习技术,其网络深度可达几十至几百层,若不针对过拟合问题进行处理,必然导致极差的泛化能力。尽管在深度学习领域中发展出了众多增强泛化能力的方法,但是我们仍不能避免神经网络方法的这一本质问题。这也是如今的人工智能需要巨量的数据进行训练的重要原因。让机器学会做一件事所需的训练量远超人类,其本质可以认为是在用不断增长的数据与过拟合问题做对抗。

为什么很难用人工智能做金融价格预测

用神经网络做预测,往往也就是一个对抗过拟合的过程。例如,如果我们把股票价格视为某种确定规律和随机波动的组合,那么我们是否能用神经网络方法把其中的规律提取出来呢?十分困难。我们上述的例子所加的随机噪声模拟了工程测量中的高频噪声——而这一“高频”前提在金融领域可能是不成立的。市场情绪导致的波动,特殊消息发布导致的价格起伏完全可以和“规律”具有相同的周期。结果就是,不融入人类的推理能力和统计学知识构成决策系统,单纯依靠神经网络很难解决此类问题。

神经网络本质是基于统计的,没有逻辑推理的能力。把往期彩票中奖号码列成表格,一名具有统计学知识的数据分析师容易发现这些数据是随机而无规律的。但是一个足够复杂的神经网络完全可以拟合出一条曲线,它完美地连接每一期的中奖号码。这个神经网络显然不可能预测任何今后的彩票号码——它所做的,全部都是过拟合。我们能制造出一个人工智能系统,在不向它提供先验知识的情况下让它自己得出“数据没有规律”的结论吗?这种推理能力,正是下一个时代的人工智能需要解决的核心问题之一。

发表评论

电子邮件地址不会被公开。 必填项已用*标注