我已经用 Java 编写了一个神经网络,现在正在研究反向传播算法。
我读过权重的批量更新将导致更稳定的梯度搜索,而不是在线权重更新。
作为测试,我创建了一个 100 点的时间序列函数,例如x = [0..99]
和y = f(x)
。我创建了一个具有一个输入和一个输出的神经网络以及 2 个具有 10 个神经元的隐藏层用于测试。我正在努力解决这个问题时反向传播算法的学习率。
我有 100 个输入点,所以当我计算dw_{ij}
每个节点的权重变化时,它实际上是一个总和:
dw_{ij} = dw_{ij,1} + dw_{ij,2} + ... + dw_{ij,p}
在p = 100
这种情况下。
现在权重更新变得非常大,因此我的错误E
会反弹,以至于很难找到最小值。我得到一些正确行为的唯一方法是将学习率设置y
为0.7 / p^2
.
是否有一些基于样本量设置学习率的一般规则?