训练 RNN

为了训练一个 RNN,诀窍是在时间上展开(就像我们刚刚做的那样),然后简单地使用常规反向传播(见图 14-5)。 这个策略被称为时间上的反向传播(BPTT)。

训练 RNN - 图1

就像在正常的反向传播中一样,展开的网络(用虚线箭头表示)有第一个正向传递。然后使用损失函数评估输出序列 训练 RNN - 图2(其中 t_{min}t_{max} 是第一个和最后一个输出时间步长,不计算忽略的输出),并且该损失函数的梯度通过展开的网络向后传播(实线箭头);最后使用在 BPTT 期间计算的梯度来更新模型参数。 请注意,梯度在损失函数所使用的所有输出中反向流动,而不仅仅通过最终输出(例如,在图 14-5 中,损失函数使用网络的最后三个输出 Y^{(2)}Y^{(3)}Y^{(4)},所以梯度流经这三个输出,但不通过 Y^{(0)}Y^{(1)})。 而且,由于在每个时间步骤使用相同的参数Wb,所以反向传播将做正确的事情并且总结所有时间步骤。