使用神经网络(MLP)进行估计

时间:2017-08-27 19:11:38

标签: neural-network artificial-intelligence perceptron

我是NN新手,我有这个问题:

我有一个包含300行和33列的数据集。每行还有3列结果。

我试图使用MLP来训练模型,这样当我有一个新行时,它估计这3个结果列。

我可以轻松地将训练期间的错误减少到0.001,但是当我使用交叉验证时,它的估算非常差。

如果我使用它用于训练的相同条目,它会正确估计,但如果我使用其他未用于训练结果的值则非常错误

我使用两个隐藏层,每层有20个神经元,所以我的架构是[33 20 20 3]

对于使用biporlarsigmoid功能的激活功能。

你们有什么建议我可以尝试改变以改善这一点吗?

1 个答案:

答案 0 :(得分:1)

过拟合

正如评论中所提到的,这完美地描述了过度拟合。 我强烈建议阅读维基百科关于过度拟合的文章,因为它很好地描述了原因,但我将在这里总结一些关键点。

模型复杂性

当你的模型对于问题来说是不必要的复杂时,经常会发生过度拟合。我对你的数据集一无所知,但我猜测[33 20 20 3]的参数比预测所需的参数多。

再次尝试运行交叉验证方法,这次使用更少的层或每层更少的节点。现在你使用33 * 20 + 20 * 20 + 20 * 3 = 1120参数(权重)进行预测,这是必要的吗?

正则化

过度拟合的常见解决方案是正规化。驾驶原则是KISS(保持简单,愚蠢)。

通过对您的体重应用L1正则化器,您可以优先选择最小数量的体重来解决您的问题。网络会将许多权重拉到0,因为它们不需要。

通过对权重应用L2正则化器,您可以优先选择较低等级的解决方案来解决您的问题。这意味着您的网络将更喜欢跨越较低维度的权重矩阵。实际上,这意味着您的权重将是较小的数字,并且不太可能“记住”数据。

什么是L1和L2?这些是矢量规范的类型。 L1是权重绝对值的总和。 L2是权重平方和的sqrt。 (L3是权重立方体之和的立方根,L4 ......)。

扭曲

另一种常用技术是使用训练样本的扭曲版本来增加训练数据。这仅适用于某些类型的数据。例如,图像可以旋转,缩放,移位,添加高斯噪声等,而不会显着改变图像的内容。

通过添加扭曲,您的网络将不再记住您的数据,但也会在事情看起来与您的数据类似时学习。旋转2度的数字1仍然看起来像1,因此网络应该能够从这两者中学习。

只有您知道自己的数据。如果这可以用你的数据完成(甚至只是为每个特征添加一点高斯噪声),​​那么这可能值得研究。但是,如果不考虑它可能对您的数据集产生的影响,请不要盲目使用它。

仔细分析数据

我把它放在最后,因为它是对过度拟合问题的间接反应。在通过黑盒算法(如神经网络)泵送数据之前检查您的数据。如果您的网络不起作用,以下是一些值得回答的问题:

  1. 我的任何功能是否彼此密切相关?
  2. 基线算法如何执行? (线性回归,逻辑回归等)
  3. 我的训练样本如何在课堂之间分配?我有一个班级的298个样本和其他两个样本的1个样本吗?
  4. 课堂上的样本有多相似?也许我有100个这个类的样本,但它们都是相同的(或几乎相同)。