神经网络–在所有输入向量上的训练进度显著不均

我正在实现一个使用反向传播进行训练的前馈神经网络。当我输出每个测试案例后的错误率时,我注意到经过若干轮次后,网络开始很好地学习某些测试案例,但对其他案例的学习效果却非常差。即某些测试案例的错误率非常低,而其他案例的错误率却非常高。

基本上,经过几轮训练后,我注意到均方误差(MSE)停滞在以下模式(每行代表单个测试案例后的MSE)。

0.66666666574964510.66666666575142611.5039854423139616E-101.4871467103001578E-101.5192940136144856E-101.4951558809679557E-100.66665217197151951.514803547256445E-101.5231135866323182E-100.66666666575074511.539071732985272E-10

这可能有什么原因吗?

最初我认为这些导致高错误率的案例可能是异常值——但从模式来看,这样的案例太多了。可能是我的学习器已经达到了局部最小值,需要一些动量来摆脱它吗?


回答:

我的回答是针对您分类器训练进度不均的问题可能的解决方案。至于您观察到这种行为的“原因”,我暂不讨论。特别是,我不愿意尝试将我中途观察到的现象归因于某些原因——即,是数据问题?还是多层感知器(MLP)的实现问题?还是我选择的可调配置问题?事实上,是您的分类器与数据的交互导致了这一观察结果,而不是其中任何一个的固有特征。

分类器能够很好且很快地学习某些输入向量的情况并不少见——即,[观察值 – 预测值]^2在经过少量循环/轮次后变得非常小——而同一个分类器在其他输入向量上可能会反复失败(并且无法改进)。

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

不过,在继续之前,您的配置/设置中可能存在的小错误也可能解释您观察到的行为。

特别是,请检查您的配置中的以下项目:

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

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

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

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

经过若干轮次后,检查结果(如您所做的那样)。*那些分类器未能学习的数据向量将被分配一个加权因子以增加错误*(某个大于1的数);同样,那些分类器学得很好的数据向量也被分配一个加权因子,但这里的值小于1,因此训练错误的重要性降低了。

例如,假设在第一轮(遍历所有构成训练数据集的数据向量)结束时,您的总错误为100;换句话说,训练集中所有数据向量的平方误差(观察值 – 预测值)的总和。

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

0.667        # 学习效果差的输入向量 => 分配错误乘数 > 1 1.5e-10      # 学习效果好的输入向量 => 分配错误乘数 < 1  

在Boosting中,您将找到对应这两个错误测量值的输入向量,并为每个向量分配一个错误权重;在第一种情况下,这个权重将大于1,而在第二种情况下将小于1。假设您分别分配了1.3和0.7的错误权重。进一步假设在下一轮次中,您的分类器在学习这两个输入向量中的第一个方面没有改进——即,它返回了与上一轮次相同的预测值。然而,对于这一轮次/轮次,该输入向量的总错误贡献不是0.67,而是1.3 x 0.67,大约是0.87。

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

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

您可以想象,每个这些数据向量都有一个隐含的错误权重1.0。Boosting只是增加了那些分类器无法学习的向量的错误权重,并减少了那些它学得很好的向量的权重。

我刚刚描述的是一种称为AdaBoost的特定实现,这可能是Boosting最著名的实现。对于指导和甚至特定语言的实现代码,请查看boosting.com]1(真的)。虽然这个网站不再维护,但这里有几个我依赖并强烈推荐的优秀资源。第一个是一个学术网站,以注释书目形式呈现(包括网站上讨论的论文的链接)。该网站上列出的第一篇论文(带有pdf链接),提升方法在机器学习中的应用:概述,是一个很好的概述,并且是获取这类技术工作知识的有效来源。

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

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注