趋近智
循环神经网络 (neural network) (RNN)的训练与标准前馈网络相比,情况特殊。主要难点在于循环连接:一个时间步的输出会作为下一个时间步的输入反馈到网络中。这在计算图中形成了循环,而标准的反向传播 (backpropagation)无法直接处理。那么,当网络在时间 的状态依赖于时间 的状态,而 又依赖于 ,以此类推时,我们如何计算梯度呢?
解决方案是一种称为“时间反向传播”(BPTT)的技术。为了理解并实现BPTT,我们首先需要以不同的方式来呈现计算流程。我们通过在时间维度上展开网络来做到这一点。
想象一下,将RNN单元的紧凑表示(带循环)沿着序列长度展开。对于长度为 的序列,我们创建 个单元的副本,每个时间步一个。从时间 的单元到时间 的单元的循环连接,现在表示为副本 和副本 之间的有向连接。
这是一个展开了三个时间步的RNN。输入 和前一个隐藏状态 用于计算当前隐藏状态 。相同的权重 (weight)矩阵(、、)应用于每个时间步。
这种展开的网络非常类似于一个深度前馈网络。每个时间步都可以看作是一个层,接收来自前一层(即前一个时间步的隐藏状态)和该特定时间步的外部输入。这种转换是纯粹的(概念上的);我们并没有在内存中实际创建权重的多个副本。这是一种表示梯度计算所需依赖关系的方法。
网络展开后,我们现在可以应用反向传播 (backpropagation)的原理。BPTT包括在展开的网络中执行前向传播,计算输出和损失(通常在序列末尾,或根据任务在每个时间步),然后执行后向传播以计算梯度。
在后向传播期间:
例如,损失 对权重矩阵 的梯度通过汇总其在所有使用它的时间步上的影响来计算:
其中 表示损失中依赖于时间步 计算的部分。这个求和反映了相同的 影响每个时间步的隐藏状态计算。
展开网络使得训练的计算流程更清晰,但也凸显了一些实际考量:
本质上,展开是一种方法,它使我们能够将源自标准反向传播的基于梯度的优化技术应用于RNN的循环结构。它将时间循环转换为一系列操作,使得通过BPTT计算共享参数 (parameter)的梯度成为可能。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造