本文围绕循环神经网络(RNN)的基本结构展开,通过图解形式详细解析经典RNN结构、Vector-to-Sequence、Sequence-to-Vector、Encoder-Decoder等典型变体,以及注意机制的引入原理,帮助读者理解RNN处理序列数据的核心逻辑与结构设计。
关键词:循环神经网络 RNN结构 注意机制
1. 图解RNN基本结构
循环神经网络(Recurrent Neural Network,RNN)是处理序列数据的核心框架。本节通过图解形式,从基础单层网络出发,逐步解析经典RNN结构、典型变体及注意机制,帮助读者直观理解RNN的核心设计。
2. 基本的单层网络结构
在理解RNN前,先回顾最基本的单层网络结构(如图1所示)。输入向量 x x x经过线性变换 W x + b Wx + b Wx+b和激活函数 f f f处理后,输出结果 y y y。
3. 图解经典RNN结构
传统神经网络无法处理序列数据的前后依赖关系(如自然语言中的上下文关联),因此RNN引入了 隐状态 h h h(Hidden State),通过记忆历史信息来建模序列关系。
3.1 隐状态计算逻辑
RNN的隐状态
h
t
h_t
ht由当前输入
x
t
x_t
xt和前一时刻隐状态
h
t
−
1
h_{t - 1}
ht−1共同决定,计算公式为:
h
t
=
f
(
U
x
t
+
W
h
t
−
1
+
b
)
h_t = f(Ux_t + Wh_{t - 1} + b)
ht=f(Uxt+Wht−1+b)
其中,
U
U
U、
W
W
W、
b
b
b为共享参数,
f
f
f为激活函数(如 tanh)。
图2展示了单个序列数据示例(如自然语言中的单词序列、语音帧等),
图3为第1个隐状态
h
1
h_1
h1的计算过程,
图4为完整RNN隐含层计算示意图(假设序列长度
n
=
4
n = 4
n=4)。
3.2 输出计算
部分RNN版本需要额外计算输出
y
t
y_t
yt,例如通过 softmax 函数将隐状态转换为概率分布:
y
t
=
softmax
(
V
h
t
+
c
)
y_t = \text{softmax}(Vh_t + c)
yt=softmax(Vht+c)
其中,
V
V
V、
c
c
c为输出层参数。图5为RNN输出计算示意图。
经典RNN的输入与输出长度相等(如输入
x
1
,
x
2
,
x
3
,
x
4
x_1,x_2,x_3,x_4
x1,x2,x3,x4,输出
y
1
,
y
2
,
y
3
,
y
4
y_1,y_2,y_3,y_4
y1,y2,y3,y4),适用于等长序列任务(如逐词翻译)。
4. Vector - to - Sequence结构
当输入为单个向量,输出为序列时,采用Vector - to - Sequence结构。主要有两种建模方式:
-
单阶段输入:仅在第一个时间步输入向量 X X X,后续时间步依赖隐状态传递(如图6所示)。
-
多阶段输入:将向量 X X X作为每个时间步的输入(如图7所示)。
5. Sequence - to - Vector结构
输入为序列,输出为单个向量时,采用Sequence - to - Vector结构。通常取最后一个时间步的隐状态作为输出向量(如图8所示),适用于情感分析(将文本序列转换为情感评分)等任务。
6. Encoder - Decoder结构
原始RNN要求输入输出等长,难以处理机器翻译等不等长序列任务。Encoder - Decoder结构通过“编码 - 解码”两步解决此问题:
6.1 编码(Encoder)
将输入序列编码为上下文向量 c c c。简单方法是取Encoder最后一个隐状态 h n h_n hn作为 c c c,也可对所有隐状态变换得到(如图9所示)。
6.2 解码(Decoder)
用另一个RNN(Decoder)将
c
c
c解码为目标序列。
c
c
c可以作为Decoder的初始状态(如图10所示),
或每个时间步的输入(如图11所示)。
7. 3种基本结构的应用场景
不同RNN结构适用于不同任务,具体对比如表1所示:
结构类型 | 输入形式 | 输出形式 | 典型应用 |
---|---|---|---|
Vector - to - Sequence | 单个向量 | 序列 | 图像描述生成(输入图像向量,输出描述文本) |
Sequence - to - Vector | 序列 | 单个向量 | 情感分析(输入文本序列,输出情感评分) |
Encoder - Decoder | 序列 | 序列(不等长) | 机器翻译(输入源语言序列,输出目标语言序列) |
8. 图解RNN中的注意机制
传统Encoder - Decoder将输入序列压缩为单一上下文向量 c c c,长序列任务中易丢失信息(如长句翻译精度下降)。注意机制通过动态选择上下文信息解决此问题。
8.1 核心思想
在Decoder的每个时间步
i
i
i,计算输入序列各隐状态
h
j
h_j
hj与当前隐状态
h
i
−
1
h_{i - 1}
hi−1的相关性
a
i
j
a_{ij}
aij,并加权求和得到上下文向量
c
i
c_i
ci:
c
i
=
∑
j
a
i
j
h
j
c_i = \sum_j a_{ij} h_j
ci=j∑aijhj
其中, a i j a_{ij} aij由 h i − 1 h_{i - 1} hi−1和 h j h_j hj的相似度决定(如点积、MLP等)。
在引入了注意机制的Decoder中,有不同的 c ,每个 c 会自动选择与当前输出最匹配的上下文信息,图12为注意机制示意图,
假如用
a
i
j
a_{ij}
aij 衡量Encoder中第 j 阶段的
h
j
h_j
hj 和Decoder中第 i 阶段的相关性,
a
i
j
a_{ij}
aij与Decoder的第 i -1阶段的隐状态和Encoder第 j 个阶段的隐状态有关。图13展示其计算过程。
最终Decoder中第 i 阶段输入的上下文信息
c
i
c_i
ci 来自所有
h
j
h_j
hj 对
a
i
j
a_{ij}
aij 的加权和。以“我爱中国”翻译为例,
c
1
c_1
c1会优先选择“我”的相关信息,
c
2
c_2
c2会优先选择“爱”的相关信息,以此类推(如图14所示)。
总结
RNN通过隐状态建模序列依赖,其基本结构(如经典RNN)、变体(Vector - to - Sequence等)及注意机制扩展,为自然语言处理、语音识别等序列任务提供了核心解决方案。理解这些结构是掌握RNN应用与改进的关键。