在这个问题中,RNN: 当仅在最终时间步获取输出时的时间反向传播,我看到如果我在最终时间步T只有一个输出,即y(T),那么早期时间步的误差是不需要的。
那么,损失函数项E是否应该是E = E(T)的值,而不是E = sum(E(t)),其中T是从开始到最终时间步的时间扫描?
回答:
我将尝试澄清一些混淆。这是标准的展开RNN:
假设o[t+1]
是最后一步。
当网络实际使用所有输出时,误差将通过所有垂直边反向传播:从o[t+1]
到s[t+1]
,从o[t]
到s[t]
,…,从o[0]
到s[0]
。此外,除了最后一个单元外,所有单元都会从后续单元接收误差:从s[t+1]
到s[t]
,从s[t]
到s[t-1]
,等等。
很容易注意到所有单元s[0]
… s[t]
接收到两个误差消息,并且它们会被加起来(因此是求和)。
现在,Denny Britz讨论的情况是网络仅使用o[t+1]
,而忽略所有其他输出。这相当于从o[t]
、o[t-1]
、…、o[0]
流出的梯度为零。技术上,s[i]
接收到的总梯度仍然是一个和,但它是一个元素的和(和一个零)。实际上,误差将这样反向传播:
o[t+1] -> s[t+1] -> s[t] -> s[t-1] -> ... -> s[0]
其他几点说明:
那么,损失函数项E是否应该是E = E(T)的值,而不是E = sum(E(t))
在这个例子中,我没有触及损失函数。损失位于上面,它比较输出和标签,并启动第一个反向消息。在两种情况下都是相同的。区别仅在于误差消息是通过所有o[i]
流动,还是仅通过o[t+1]
流动。