这里似乎是算法的超级通用格式:
1. 输入 2. 获取输出 3. 计算误差 4. 计算权重变化 5. 重复步骤3和4,直到达到输入层
但是问题在于:权重需要在某个时刻进行更新。然而,因为我们正在进行反向传播,所以在计算接近输入层的层的误差时,我们需要使用前面层(靠近输出层的层)的权重。但是我们已经计算出了更靠近输出层的层的权重变化!那么,在使用这些权重计算接近输入层的层的误差时,我们使用它们的旧值还是“更新后的值”?
换句话说,如果我们将更新权重的步骤放入我的超级通用算法中,它会是:
(立即更新权重)
1. 输入 2. 获取输出 3. 计算误差 4. 计算权重变化 5. 更新这些权重 6. 重复步骤3,4,5直到达到输入层
还是
(使用权重的“旧”值)
1. 输入 2. 获取输出 3. 计算误差 4. 计算权重变化 5. 重复步骤3和4,直到达到输入层
- 输入数据
- 获取输出结果
- 计算误差
- 计算权重的变化量
- 将这些变化量存储在矩阵中,但不要立即更改这些权重
- 重复步骤3、4、5,直到达到输入层
- 使用我们存储的值一次性更新权重
在我读的这篇论文中,在两个抽象的例子(基于图3.3和3.4)中,他们说要使用旧值,而不是立即更新值。然而,在他们的“示例3.1”中,他们使用新值(尽管他们所说的是使用旧值)来计算隐藏层的误差。
此外,在我的书《Ethem Alpaydin机器学习导论》中,虽然有很多我还不理解的抽象内容,但他说“请注意,第一层权重delta-w_hj的变化利用了第二层权重v_h。因此,我们应该计算两层的变化并更新第一层的权重,利用第二层权重的旧值,然后再更新第二层的权重。”
老实说,看起来他们只是犯了一个错误,在最后同时更新了所有的权重,但我想要确定。我的人工神经网络给我带来了奇怪的结果,我想确定这不是原因。
有人知道吗?
谢谢!