首页 文章

一个简单的神经网络可以学习应用于四个数的总和的sin函数吗?

提问于
浏览
0

我有一个简单的多层感知器,在隐藏层和输出层中有一个隐藏层和tanh激活 . 作为作业的一部分,我创建了一个包含1000个示例的数据集 . 每个输入( x_i )是一个由-1.0和1.0之间的四个随机数组成的数组 . 每个标签( y_i )生成为 sin(x_i[0] - x_i[1] + x_i[2] - x_i[3]) . 我的MLP将 x_i 的4个元素中的每一个作为输入,并产生单个输出 . 这个隐藏的分层MLP是否有可能学会产生四个输入的总和,然后应用sin函数?

我使用前80%的数据集训练MLP,并在每1000个时期的最后20%测试它,最多50,000 . 使用MSE损失函数,列车和测试损失总是相对相似,但在50,000个训练时期内不会减少很多,并且上下跳跃相当多 . 训练和测试的最后时期的损失值分别为0.01505和0.01504 .

在这50,000个训练时期之后,我创建了一个相同格式的数据集,新的随机数介于-1.0和1.0之间 . 然后我按 y 值对这些数据进行排序,并根据训练好的MLP对每个数据进行预测 . 这导致以下情节:

enter image description here

很明显,MLP学习了总体趋势,但确切的值非常不稳定 . 有没有解释为什么它不能更好地学习这个功能?从10,000个时期到50,000个似乎没有太大的改进 . 是因为只有一个隐藏层吗?

1 回答

  • 2

    如果尽管有大量的数据样本,您的训练损失在训练期间达到峰值,您可以(几乎)确定您的模型缺乏解决问题所必需的 capacity . 通过增加隐藏层的宽度,增加网络深度或者从密集层切换到具有相同数量参数的循环或卷积层,可以改善表示能力 . 为了确保容量不足确实是您的问题,请生成更多数据并查看峰值性能是否发生变化 . 如果没有,请尝试上述任一技术,并检查您的模型是否可以更好地遵循该模式 .


    Edit :发布一些我用几种不同架构得到的示例结果 . 在1500个时期的1000个样本的训练之后的所有测试数据的结果 .

    形状100的一个隐藏层:
    Single hidden

    形状20的一个简单的复发层:
    Single recurrent layer

    两个密集的隐藏形状层(50,20):
    Two hidden layers

    四个隐藏的形状层(32,32,16,16):
    enter image description here

相关问题