3

我正在实现一个使用反向传播进行训练的前馈神经网络。当我在它学习的每个测试用例之后输出错误率时 - 我注意到在多个时期之后它开始很好地学习某些测试用例,但其他测试用例非常糟糕。即某些测试用例的错误非常低,但其他测试用例的错误非常高。

本质上,在几个时期之后,我注意到均方误差停滞在以下模式 - (每条线代表单个测试用例之后的 MSE)。

0.6666666657496451
0.6666666657514261
1.5039854423139616E-10
1.4871467103001578E-10
1.5192940136144856E-10
1.4951558809679557E-10
0.6666521719715195
1.514803547256445E-10
1.5231135866323182E-10
0.6666666657507451
1.539071732985272E-10

发生这种情况是否有任何可能的原因?

最初我认为这些导致高错误率的案例可能只是异常值 - 但正如模式所暗示的那样,它们太多了。会不会是我的学习者刚刚达到了局部最小值,需要一些动力才能摆脱它?

4

2 回答 2

4

我的回答是针对训练分类器的“不均匀”进展的可能解决方案。关于“为什么”你会看到这种行为,我推迟了。特别是,我不愿意尝试将原因归因于我在训练中观察到的伪影——即,它是数据吗?还是 MLP 实现?还是我选择的可调配置?事实是,是您的分类器与导致此观察的数据的交互,而不是任何一个中的某些固有特征。

分类器能够很好且很快地学习某些输入向量的情况并不少见——即,[观察到的 - 预测的]^2仅在少数周期/时期后变得非常小——并且相同的分类器无法在其他输入向量上反复失败(并且未能改进)。

为了成功完成分类器的训练,Boosting是您问题中描述的问题的教科书答案。

不过,在继续之前,您的配置/设置中的一个小错误也可能是您观察到的行为的原因。

特别是,也许在您的配置中验证这些项目:

  • 您的输入向量是否正确编码 - 例如,它们的范围是 [-1, 1]?

  • 您是否正确编码了响应变量(即1-of-C 编码)?

  • 你是否选择了一个合理的初始学习率和动量项?您是否尝试过在初始学习率的任一侧调整学习率值进行训练?吨

无论如何,假设这些配置和设置问题没问题,以下是有关 Boosting(严格来说,是一种组合多个分类器的技术)的相关实现细节,如下所示:

经过一些时期后,检查结果(就像你一直在做的那样)。*那些分类器未能学习到的数据向量被分配一个加权因子以增加错误*r(一些大于1的数字);类似地,分类器学习好的那些数据向量也被分配了一个权重因子,但这里的值小于一个,从而降低了训练误差的重要性。

因此,例如,假设在第一个 epoch 结束时(迭代包含您的训练数据集的所有数据向量)您的总误差为 100;换句话说,平方误差(观察值 - 预测值)对训练集中的所有数据向量求和。

这些是您的问题中列出的两个 MSE 值

0.667        # poorly learned input vector => assign error multiplier > 1 
1.5e-10      # well-learned input vector => assign error multiplier < 1  

在 Boosting 中,您会找到与这两个误差测量相对应的输入向量,并将每个向量关联一个误差权重;在第一种情况下,此权重将大于 1,在第二种情况下将小于 1。假设您分别分配了 1.3 和 0.7 的误差权重。进一步假设,在下一个 epoch 之后,您的分类器在学习这两个输入向量中的第一个方面没有改进——即,它返回与上一个 epoch 相同的预测值。然而,对于这个迭代/时期,输入向量对总误差的贡献不是 0.67,而是 1.3 x 0.67,或大约。.87.

这种增加的误差对训练进度有什么影响?

更大的误差意味着更陡峭的梯度,因此对于下一次迭代,对包含权重矩阵的适当权重进行更大的调整——换句话说,更快速的训练集中在这个特定的输入向量上。

您可能会想象这些数据向量中的每一个都具有 1.0 的隐式误差权重。Boosting 只是增加了错误权重(对于分类器无法学习的向量),并降低了它学习好的向量的权重。

我刚刚描述的是一个名为AdaBoost的特定实现,它可能是最知名的 Boosting 实现。有关特定语言实现的指导甚至代码,请查看 boosting.com] 1(认真)。不过,此站点已不再维护,因此这里有一些我所依赖并可以高度推荐的优秀资源。第一个是带注释书目形式的学术站点(包括指向该站点上讨论的论文的链接)。本网站上列出的第一篇论文(带有 pdf 链接),机器学习的增强方法:概述,是一个很好的概述,也是获取这一系列技术的工作知识的有效来源。

videolectures.net上还有一个关于 Boosting 和 AdaBoost 的优秀视频教程

于 2012-03-21T04:35:14.877 回答
0

您的神经网络是否可能过于简单而无法正确分类数据?如果您的神经元太少和/或层太少,则可能没有网络学习分类的权重配置。

于 2012-03-21T10:24:58.817 回答