我可以看到在 RNN中使用合成梯度的两个动机:
- 为了加快训练,通过立即用预测梯度校正每一层
- 能够学习更长的序列
我看到他们两个都有问题。请注意,我真的很喜欢 Synthetic Gradients 并希望实现它们。但我需要了解我的想法在哪里不正确。
我现在将说明为什么第 1 点和第 2 点似乎没有好处,如果它们实际上是有益的,我需要你纠正我:
第 1 点:
Synthetic Gradients 告诉我们,我们可以依靠另一个“mini-helper-network”(称为 DNI)来告知我们当前层什么梯度将从上方到达,即使在 fwd prop 期间也是如此。
然而,这样的梯度只会在之后的几个操作中出现。与没有 DNI 的情况下,必须完成相同数量的 Backprop,除了现在我们还需要训练 DNI。
添加此异步性不应使层的训练速度比传统的“锁定”完整 fwdprop -> 完整后退 prop 序列更快,因为设备必须完成相同数量的计算。只是计算会及时滑动
这让我认为第 1 点)行不通。简单地在每一层之间添加 SG 不应该提高训练速度。
第 2 点:
好的,仅在最后一层添加 SG以预测“未来的梯度”如何,并且仅当它是 forward prop 期间的最后一个时间步时。
这样,即使我们的 LSTM 必须停止预测并且必须反向传播,它仍然可以预测它将收到的未来梯度(在最后一个时间步的 DNI 的帮助下)。
考虑几个培训课程(课程 A、课程 B):
fwdprop timestep_1A ---> fwdprop timestep_2A ---> fwdprop timestep_3A ----> 停止和 bkprop!
fwdprop timestep_1B ---> fwdprop timestep_2B ---> fwdprop timestep_3B ----> 停止和 bkprop!
我们刚刚强制我们的网络将 6 个时间步“解析”为两半:3 个时间步,然后再次剩余 3 个时间步。
请注意,我们的 DNI 位于“会话 A”的最后,并预测“从会话 B的开始(从未来)我会得到什么梯度”。因此,timestep_3A 将配备“可能来自 timestep_1B”的梯度,因此实际上,在 A 期间进行的校正将更加可靠。
但是,嘿!这些预测的“合成梯度”无论如何都会非常小(可以忽略不计)——毕竟,这就是我们开始新的反向传播会话 B的原因。它们不是太小,我们只需在一个长的 bkprop“会话 A”中解析所有 6 个时间步。
因此,我认为第 2 点)也不应该带来好处。在 fwdprop 的最后一个时间步上添加 SG 可以有效地训练更长的序列,但消失的梯度并没有去任何地方。
行。也许我们可以在不同的机器上训练“会话 A”、“会话 B” 等获得好处?但是,这与简单地使用通常的 minibatch 并行训练有什么不同呢?请记住,在第 2 点中提到:sessionA预测无论如何都会消失的梯度会使事情变得更糟。
问题:请帮助我了解合成渐变的好处,因为上面的 2 点似乎没有好处