循环神经网络与序列建模:理论与实践
1. 展开计算图
在讨论循环神经网络(RNNs)和递归网络之前,我们首先需要理解计算图的概念。计算图是一种形式化表示计算结构的方法,它将计算过程中的输入、参数、输出和损失映射成图的形式。对于递归或循环计算,计算图可以通过展开重复结构来表示。这种展开后的图会导致参数在深度网络结构中共享。
例如,考虑一个动力系统:
[ s(t) = f(s(t-1); \theta) ]
其中 ( s(t) ) 是系统的状态。该方程是递归的,因为在时间 ( t ) 的状态依赖于时间 ( t-1 ) 的状态。对于有限的时间步数 ( \tau ),可以通过应用定义 ( \tau - 1 ) 次来展开图。例如,若 ( \tau = 3 ),则有:
[ s(3) = f(s(2); \theta) = f(f(s(1); \theta); \theta) ]
通过这种方式,我们可以将递归表达式转换为不涉及递归的表达式,并用传统的有向无环计算图表示。
图10.1:经典动力系统的计算图展开
graph TD;
s(t-1) -->|f| s(t);
s(t) -->|f| s(t+1);
s(t-1) -->|f| s(t+1);
style s(t-1) fill:#f96,stroke:#333,stroke-width:4px;
style s(t) fill:#69c,stroke:#333,stroke-width:4px;
style s(t+1) fill:#f