在训练开始时,偏差会在多大程度上降低网络的性能?

数据挖掘 回归 偏见
2022-02-27 17:57:18

我正在编写一个自定义框架,并在其中尝试训练一个简单的网络来预测加法功能。

网络:

  • 3 个神经元的 1 个隐藏层
  • 1个输出层
  • 使用的成本函数是平方误差,(不是 MSE 以避免精度问题)
  • 身份转移功能,一开始就让事情变得简单
  • 没有特殊的更新程序,只有步长
  • 没有学习率衰减
  • 没有正则化

训练集:

  • 约 500 个样本
  • 输入:[n1][n2]; 标签:[n1 + n2]
  • 每个元素都介于 0 和 1 之间。例如: [0.5][0.3] => [0.8]

我用来优化的算法:

  • 一个 epoch 采样 64 个元素
  • 对于每个样本:它评估错误
    • 然后将错误传播回去
    • 然后根据误差值计算梯度
    • 每个元素的梯度被加到一个向量中,然后通过除以评估的样本数进行归一化
  • 在计算梯度之后,使用 1e-2 的步长来修改权重。
  • 当 500 个数据元素的错误总和低于 1e-2 时,训练停止

我还没有测试数据集,因为首先我想过度拟合训练集,看看它是否能做到这一点。在没有偏差的情况下,训练会在大约 4k epoch 内收敛到最佳状态。

当我将偏差调整纳入训练时,它的性能似乎要差得多,网络没有收敛到最佳状态,而是偏差和权重彼此相邻振荡。

这是引入偏见的正常影响吗?

这是整个训练过程中权重值的图表: 在此处输入图像描述

2个回答

偏差会处理潜在的变量,即您没有将其包含在训练集中。

所以你试图在训练集上过拟合,但现在你引入了干扰。当然它的性能会更差。

它不应该严重降低性能(如问题所示)。偏见有助于概括和学习,它增加了训练的复杂性,但在这个例子中并没有增加太多。

这里的问题在于实施。在上面流口水〜几周后,我终于开始使用古老的方法(笔+纸)来验证渐变,其中我发现了成本函数中的一个错误:

一些网络输出与错误的标签值进行了比较,因此梯度计算错误。

修复错误后,网络现在按应有的方式收敛:

在此处输入图像描述