趋近智
循环神经网络(RNN)一步步处理序列,并使用其隐藏状态传递信息。那么网络是怎样学习的呢?就像前馈网络一样,RNN通过根据其产生的误差调整权重来进行学习。对此的标准算法是反向传播。然而,RNN中的循环连接和共享权重需要进行修改:沿时间的反向传播(BPTT)。
设想您向RNN输入一个长度为T的序列。如前所述,网络在每一步执行相同的计算,使用相同的权重集合(Whh,Wxh,Why,bh,by)。为训练网络,我们首先需要计算一个损失,它衡量网络预测值(y1,y2,...,yT)与该序列真实目标值之间的距离。此损失通常在整个序列上计算,常为每个时间步损失的总和或平均值。
BPTT的主要思路是应用微积分的链式法则,与标准反向传播一样,但要跨时间操作序列进行。为形象地说明这一点,可以想象将RNN针对特定输入序列进行“展开”。这会形成一个大型的、类似前馈的网络,其中每个时间步对应一个层。重要的一点是,权重在这些“层”之间是共享的。
让我们考虑梯度计算。最终时间步T的误差直接取决于隐藏状态hT以及权重Why和by。时间步T−1的误差取决于hT−1,并可能通过循环连接(hT取决于hT−1)影响时间步T的误差。BPTT通过计算总损失相对于每个时间步的输出和隐藏状态的梯度来运行,从最后一步T开始,并向后移动到第一步t=1。
损失L相对于时间t隐藏状态的梯度,表示为∂ht∂L,依赖于两点:
第二点是“沿时间”的部分。梯度信号通过循环权重矩阵Whh从ht+1向后流向ht。在数学上,这涉及到如下项:
∂ht∂ht+1=∂ht∂f(Whhht+Wxhxt+1+bh)
这种传播一步步向后进行。
BPTT的反向传播过程。梯度(虚线红色)从每个时间步的损失流回,通过网络输出(yt)和隐藏状态(ht)。重要的是,梯度也通过循环连接(通过Whh)向后流动,影响早期时间步的梯度计算。相对于共享权重(紫色线)的梯度在所有时间步累积。
BPTT的一个重要方面源于共享权重。由于在每个时间步都使用相同的权重矩阵(Whh,Wxh,Why)和偏置向量(bh,by),因此为特定权重计算的梯度需要考虑其在整个序列中的作用。因此,共享参数(例如Whh)的最终梯度是相对于其在每个时间步t=1,...,T的使用所计算的梯度之和。
∂Whh∂L=∑t=1T∂ht∂L∂Whh∂ht(在反向传播过程中计算)
Wxh、Why、bh和by的计算方式类似。一旦这些总梯度计算完毕,就会执行标准的梯度下降更新(或其变体之一,如Adam或RMSprop)来调整网络参数。
W←W−η∂W∂L
这里W代表任何共享参数,而η是学习率。
尽管BPTT允许我们训练RNN,但这种在可能很长的序列上传播梯度的过程并非没有困难。随着梯度信号在许多时间步中向后传播,它可能呈指数级缩小至零(梯度消失)或呈指数级增大(梯度爆炸)。我们将在第4章检验这些训练上的难题及其影响。目前,主要观点是BPTT扩展了反向传播,以处理循环架构中固有的时间依赖性和共享参数。下一节将更仔细地讨论展开网络以促进此过程的实际方法。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造