我正在尝试使我的第一个神经网络工作。我设计它以便我可以自由选择层数和每层的节点数。我在尝试实现反向传播时遇到了困难,但我认为我已经递归地完成了它,即使它的性能不如它所能达到的那样。我使用 sigmoid 作为所有节点(甚至输入节点和输出节点)的激活。
我的网络在输出层有一个输出节点,应该预测一个变量(零或一)。
我的问题是我应该如何训练我的网络?我注意到当我使用以下算法时:
对于我在 [1:100000]
- 将相同的记录提供给我的神经网络
- 向前传球
- 使用差的平方作为当前权重的该记录的损失函数来计算误差
- 使用反向传播更新权重
它收敛到正确的结果(当记录标记为 0 时,输出节点值收敛到 0,当记录标记为 1 时收敛到 1)。但是,当我在每次迭代算法中向网络提供不同的记录时,网络就会完全发散。
假设我想处理一小批 N 条记录,这意味着我必须在每次 N 条记录中的一条作为网络输入时进行 N 次前向传递,计算误差,取 N 条记录的平均值记录,但是,当我想在反向传播算法中使用平均误差时,我应该使用什么输入记录?因为,据我所知,输入层也用于计算它与第一个隐藏层之间的权重。然后我应该使用 N 条记录中的最后一条作为输入吗?还是第一个?甚至有关系吗?我在这里有点困惑,我在互联网上找不到任何东西可以回答这个特定的问题。
此致。