logologo

双向循环神经网络

Jul 12

核心概念

双向循环神经网络(Bidirectional RNN)通过同时使用前向和后向的信息流来增强序列建模能力,使得每个时间步的隐状态都能够获得完整序列的上下文信息。

架构特点

  • 双向信息流:同时包含前向和后向的隐藏层
  • 完整上下文:每个时间步都能获得过去和未来的信息
  • 状态融合:将前向和后向的隐状态连接起来
  • 增强表达:提升序列理解和特征提取能力

数学公式

前向和后向隐状态计算

对于任意时间步t,双向 RNN 包含两个独立的隐藏层:

前向隐状态

Ht=ϕ(XtWxh(f)+Ht1Whh(f)+bh(f))

后向隐状态

Ht=ϕ(XtWxh(b)+Ht+1Whh(b)+bh(b))

其中:

  • HtRn×h:前向隐状态
  • HtRn×h:后向隐状态
  • Wxh(f),Wxh(b)Rd×h:输入到隐藏层的权重矩阵
  • Whh(f),Whh(b)Rh×h:隐藏层到隐藏层的权重矩阵
  • bh(f),bh(b)R1×h:偏置向量

状态连接和输出

将前向和后向隐状态连接:

Ht=[Ht;Ht]Rn×2h

输出层计算:

Ot=HtWhq+bq

其中:

  • WhqR2h×q:输出层权重矩阵
  • bqR1×q:输出层偏置

网络结构

双向 RNN 架构图

双向RNN结构

信息流动图

graph TD
    subgraph A ["时间步 t-1"]
        X1["X<sub>t-1</sub>"]
        HF1["H<sub>t-1</sub><sup>→</sup>"]
        HB1["H<sub>t-1</sub><sup>←</sup>"]
        C1["[H<sub>t-1</sub><sup>→</sup>; H<sub>t-1</sub><sup>←</sup>]"]

        X1 --> HF1
        X1 --> HB1
        HF1 --> C1
        HB1 --> C1
    end

    subgraph B ["时间步 t"]
        X2["X<sub>t</sub>"]
        HF2["H<sub>t</sub><sup>→</sup>"]
        HB2["H<sub>t</sub><sup>←</sup>"]
        C2["[H<sub>t</sub><sup>→</sup>; H<sub>t</sub><sup>←</sup>]"]
        O2["O<sub>t</sub>"]

        X2 --> HF2
        X2 --> HB2
        HF2 --> C2
        HB2 --> C2
        C2 --> O2
    end

    subgraph C ["时间步 t+1"]
        X3["X<sub>t+1</sub>"]
        HF3["H<sub>t+1</sub><sup>→</sup>"]
        HB3["H<sub>t+1</sub><sup>←</sup>"]
        C3["[H<sub>t+1</sub><sup>→</sup>; H<sub>t+1</sub><sup>←</sup>]"]

        X3 --> HF3
        X3 --> HB3
        HF3 --> C3
        HB3 --> C3
    end

    %% 前向连接
    HF1 -->|前向传播| HF2
    HF2 -->|前向传播| HF3

    %% 后向连接
    HB3 -->|后向传播| HB2
    HB2 -->|后向传播| HB1

    %% 强烈的颜色样式定义
    classDef input fill:#FF6B35,stroke:#B8860B,stroke-width:4px,color:#FFFFFF
    classDef forward fill:#7209B7,stroke:#4A0E4E,stroke-width:4px,color:#FFFFFF
    classDef backward fill:#2E8B57,stroke:#006400,stroke-width:4px,color:#FFFFFF
    classDef concat fill:#DC143C,stroke:#8B0000,stroke-width:4px,color:#FFFFFF
    classDef output fill:#FF1493,stroke:#8B008B,stroke-width:4px,color:#FFFFFF
    classDef subgraphStyle fill:#F0F8FF,stroke:#4169E1,stroke-width:3px

    %% 应用样式
    class X1,X2,X3 input
    class HF1,HF2,HF3 forward
    class HB1,HB2,HB3 backward
    class C1,C2,C3 concat
    class O2 output

    %% 子图样式
    class A,B,C subgraphStyle

双向 RNN 与单向 RNN 对比

特征单向 RNN双向 RNN
信息方向单向(前向)双向(前向+后向)
上下文信息仅过去信息过去+未来信息
参数量O(h2)O(2h2)
计算复杂度较低较高
训练速度
适用场景实时预测序列标注、编码
隐状态维度h2h

总结

  • 双向循环神经网络通过反向更新的隐藏层来利用方向时间信息,从而提高序列建模能力。
  • 通常用来对序列抽取特征、填空,而不是预测未来(推理)。
浙ICP备2021022773号    2022-PRESENT © ZhengKe