我可以看到在RNN中使用合成梯度的两个动机:
我觉得他们俩都有问题。请注意,我真的很喜欢合成梯度,并希望实现它们。但我需要弄清楚我的想法是不正确的。
现在我将说明为什么第1点和第2点似乎没有好处,如果它们实际上是有益的,我需要你纠正我:
综合梯度告诉我们,我们可以依赖另一个“迷你助手网络”(称为DNI)来建议我们当前的层,什么梯度将从上面到达,甚至在fwd道具中。
然而,这样的梯度只会在几个操作之后出现。同样数量的后盾将不得不做没有DNI,除了现在我们也需要训练我们的DNI。
增加这种同步性不应该使层的训练速度比传统的“锁定”的fwdprop ->全靠背支撑序列更快,因为设备必须完成相同数量的计算。只是计算结果会随着时间的推移
这使我认为第一点是行不通的。简单地在每一层之间添加SG并不能提高训练速度。
好的,如果只在最后一层添加SG来预测“未来的梯度”,并且只有当这是前向支撑的最后一步的时候,怎么样?
这样,即使我们的LSTM必须停止预测并且必须反向传播,它仍然可以预测它将收到的未来梯度(在DNI的帮助下,在最后一步)。
考虑举办若干培训班( A、B期会议):
timestep_1A -!timestep_1B -!我们刚刚迫使我们的网络将6个时间步骤分成两半“解析”:3个时间步骤,然后又是3个剩余的时间步骤。
注意,我们的DNI坐在“会话A”的末尾,并预测“从B会话开始(从将来)开始,我会得到什么样的梯度”。因此,timestep_3A将配备“来自timestep_1B的渐变”,因此,在A期间所做的修正将更加可靠。
但是嘿!这些预测的“合成梯度”无论如何都会非常小(可以忽略不计)--毕竟,这就是为什么我们要启动一个新的反向支持会话B。如果它们不是太小的话,我们只需要在一个长的“会话A”中解析所有的6个时间步骤。
因此,我认为第二点也不应该带来好处。在fwdprop的最后一步添加SG可以有效地训练更长的序列,但是消失的梯度不会去任何地方。
好的。也许我们可以在不同的机器上获得“A”、“B”等培训的好处?但是,与普通的小型分批并行训练有什么不同呢?请记住,在第2点中提到过:由于sessionA预测的梯度正在消失,情况变得更加糟糕。
问:请帮助我理解合成梯度的好处,因为上面的两点似乎没有好处。
发布于 2018-05-31 01:01:28
但是嘿!这些预测的“合成梯度”无论如何都会非常小(可以忽略不计)--毕竟,这就是为什么我们要启动一个新的反向支持会话B。如果它们不是太小的话,我们只需要在一个长的“会话A”中解析所有的6个时间步骤。
-这不一定是正确的。由于硬件限制,例如内存或计算速度,我们通常会截断并启动一个新的后端。消失-梯度可以通过其他方法得到改善,例如梯度归一化-放大梯度向量如果它变得太小,超过一定的层,或缩小,如果它即将爆炸。甚至使用批归一化
了解如何更新任何DNI模块是很重要的。为了澄清问题,请考虑一个具有多个层和3个DNI模块的网络示例:
input
|
V
Layer_0 & DNI_0
Layer_1
Layer_2
Layer_3 & DNI_3
Layer_4
Layer_5 & DNI_5
Layer_6
Layer_7
|
V
outputDNI_0总是通过一个从DNI_3 (当然是通过Layer_2和Layer_1 )到达的合成梯度进行训练,并在几个层次上进行进一步的定位。同样,DNI_3总是使用从DNI_5 DNI_0到达的合成梯度进行训练,否则DNI_3将永远无法看到真正的梯度,因为真正的梯度只提供给DNI_5,而不是更早的。对于仍在努力理解它们的人,请阅读这个很棒的博客,第3部分。
早期的层必须满足于合成梯度,因为他们或他们的DNI将永远不会看到“真正的梯度”。
关于与小型批次并行的培训,而不是通过合成梯度并行化:
较长的序列比小型批次更精确,然而,小型批次增加正则化效果。但是,考虑到一些防止梯度爆炸或消失的技术,训练较长的序列可以更好地洞察问题的背景。这是因为网络在考虑了较长的输入序列之后才会推断出输出,所以结果更加合理。
为了比较SG提供的好处,请参考图表文件第6页,主要是能够解决较长的序列,我认为这是最有益的(无论如何,我们可以通过mainly批处理并行,因此SG不应该在同一台机器上执行时加快进程--即使我们确实只传播到下一个DNI)。
然而,我们拥有的DNI模块越多,信号就应该越吵。因此,这可能是值得的--尽管所有的层和DNI都是由遗留的备份来训练的,而且只有在一些时代过去之后,我们才开始使用上面讨论过的DNI引导。
这样的话,最早的DNI将会在训练开始的时候至少获得一些关于期望的感觉。这是因为当训练开始时,下面的DNI本身并不确定真正的梯度是什么样子,所以一开始,他们会向比他们更早坐着的人建议“垃圾”梯度。
不要忘记,作者也尝试预测每一层的实际输入。
如果您的层有昂贵的后端(可能您有批处理规范化或一些奇特的激活函数),那么使用DNI进行校正可能要便宜得多,一旦它经过了足够好的训练。请记住,DNI并不是免费的,它需要矩阵乘法,并且可能不会在一个简单的密集层上提供太多的速度。
小批给我们加速比(通过并行),也给我们正则化。合成梯度使我们可以通过处理较长的序列和(潜在的)成本较低的梯度来更好地推断。总之,这是一个非常强大的系统。
发布于 2018-05-24 07:01:36
综合梯度使训练速度更快,不是通过减少所需的历次,也不是通过加速梯度下降的收敛,而是通过使每个时期更快地计算出来。综合梯度的计算速度快于实际梯度(计算合成梯度的速度快于反向传播),因此梯度下降的每一次迭代都可以得到更快的计算。
https://datascience.stackexchange.com/questions/32072
复制相似问题