为什么 Spark 库在 MultilayerPerceptron 中使用 outputs(i+1) 进行之前的 Delta 计算
Why is spark library using outputs(i+1) in MultilayerPerceptron for previous Delta Calculations
查看this代码
for (i <- (L - 2) to (0, -1)) {
layerModels(i + 1).computePrevDelta(deltas(i + 1), outputs(i + 1), deltas(i))
}
我想了解为什么我们在上面的代码片段中传递 outputs(i+1)
而不是 outputs(i)
。据我了解,这仅适用于导数为 f'(x) = f(x) * (1-f(x)) = outputs(i) * (1-outputs(i))
的 sigmoid 激活层
这意味着为了找到 prevDelta 我们应该使用 outputs(i)
.
我明白为什么会这样了。如果有像我这样偶然发现这里的人,我会在这里回答。
你必须注意到我们正在计算层 i 的增量,它只取决于下一个 (i+1) 层的增量和梯度。您必须注意我们根据需要使用 layerModels(i + 1)
而不是 layerModels(i)
查看this代码
for (i <- (L - 2) to (0, -1)) {
layerModels(i + 1).computePrevDelta(deltas(i + 1), outputs(i + 1), deltas(i))
}
我想了解为什么我们在上面的代码片段中传递 outputs(i+1)
而不是 outputs(i)
。据我了解,这仅适用于导数为 f'(x) = f(x) * (1-f(x)) = outputs(i) * (1-outputs(i))
这意味着为了找到 prevDelta 我们应该使用 outputs(i)
.
我明白为什么会这样了。如果有像我这样偶然发现这里的人,我会在这里回答。
你必须注意到我们正在计算层 i 的增量,它只取决于下一个 (i+1) 层的增量和梯度。您必须注意我们根据需要使用 layerModels(i + 1)
而不是 layerModels(i)