0


神经网络之lstm

文章目录

1. LSTM简介

1.1 定义与起源

长短期记忆网络(Long Short-Term Memory, LSTM)是一种特殊类型的循环神经网络(RNN),由 Hochreiter 和 Schmidhuber 于 1997 年提出。LSTM 旨在解决传统 RNN 在处理长序列数据时遇到的梯度消失或梯度爆炸问题。

LSTM 网络的核心是三个门的机制:遗忘门(forget gate)、输入门(input gate)、输出门(output gate)。这些门通过自适应的方式控制信息的流动,从而实现对长期依赖信息的捕捉。

1.2 与传统RNN的比较

与标准 RNN 相比,LSTM 引入了更为复杂的结构来维护和更新内部状态,即细胞状态(cell state)。标准 RNN 的更新公式为:

      h 
     
    
      t 
     
    
   
     = 
    
   
     tanh 
    
   
     ⁡ 
    
   
     ( 
    
    
    
      W 
     
     
     
       h 
      
     
       h 
      
     
    
    
    
      h 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     + 
    
    
    
      W 
     
     
     
       x 
      
     
       h 
      
     
    
    
    
      x 
     
    
      t 
     
    
   
     + 
    
    
    
      b 
     
    
      h 
     
    
   
     ) 
    
   
  
    h_t = \tanh(W_{hh} h_{t-1} + W_{xh} x_t + b_h) 
   
  
ht​=tanh(Whh​ht−1​+Wxh​xt​+bh​)

其中,$ h_t$ 是当前时间步的隐藏状态,

      x 
     
    
      t 
     
    
   
  
    x_t 
   
  
xt​ 是输入, 
 
  
   
   
     W 
    
   
  
    W 
   
  
W 和  
 
  
   
   
     b 
    
   
  
    b 
   
  
b 分别是权重和偏置。

LSTM 则通过以下公式更新其细胞状态

      C 
     
    
      t 
     
    
   
  
    C_t 
   
  
Ct​ 和隐藏状态  
 
  
   
    
    
      h 
     
    
      t 
     
    
   
  
    h_t 
   
  
ht​:

 
  
   
    
    
      f 
     
    
      t 
     
    
   
     = 
    
   
     σ 
    
   
     ( 
    
    
    
      W 
     
     
     
       h 
      
     
       f 
      
     
    
    
    
      x 
     
    
      t 
     
    
   
     + 
    
    
    
      W 
     
     
     
       h 
      
     
       f 
      
     
    
    
    
      h 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     + 
    
    
    
      b 
     
    
      f 
     
    
   
     ) 
    
   
  
    f_t = \sigma(W_{hf} x_t + W_{hf} h_{t-1} + b_f) 
   
  
ft​=σ(Whf​xt​+Whf​ht−1​+bf​)

 
  
   
    
    
      i 
     
    
      t 
     
    
   
     = 
    
   
     σ 
    
   
     ( 
    
    
    
      W 
     
     
     
       h 
      
     
       i 
      
     
    
    
    
      x 
     
    
      t 
     
    
   
     + 
    
    
    
      W 
     
     
     
       h 
      
     
       i 
      
     
    
    
    
      h 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     + 
    
    
    
      b 
     
    
      i 
     
    
   
     ) 
    
   
  
    i_t = \sigma(W_{hi} x_t + W_{hi} h_{t-1} + b_i) 
   
  
it​=σ(Whi​xt​+Whi​ht−1​+bi​)

 
  
   
    
     
     
       C 
      
     
       ~ 
      
     
    
      t 
     
    
   
     = 
    
   
     tanh 
    
   
     ⁡ 
    
   
     ( 
    
    
    
      W 
     
     
     
       h 
      
     
       c 
      
     
    
    
    
      x 
     
    
      t 
     
    
   
     + 
    
    
    
      W 
     
     
     
       h 
      
     
       c 
      
     
    
    
    
      h 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     + 
    
    
    
      b 
     
    
      c 
     
    
   
     ) 
    
   
  
    \tilde{C}_t = \tanh(W_{hc} x_t + W_{hc} h_{t-1} + b_c) 
   
  
C~t​=tanh(Whc​xt​+Whc​ht−1​+bc​)

 
  
   
    
    
      C 
     
    
      t 
     
    
   
     = 
    
    
    
      f 
     
    
      t 
     
    
   
     ∗ 
    
    
    
      C 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     + 
    
    
    
      i 
     
    
      t 
     
    
   
     ∗ 
    
    
     
     
       C 
      
     
       ~ 
      
     
    
      t 
     
    
   
  
    C_t = f_t * C_{t-1} + i_t * \tilde{C}_t 
   
  
Ct​=ft​∗Ct−1​+it​∗C~t​

 
  
   
    
    
      h 
     
    
      t 
     
    
   
     = 
    
   
     tanh 
    
   
     ⁡ 
    
   
     ( 
    
    
    
      C 
     
    
      t 
     
    
   
     ) 
    
   
  
    h_t = \tanh(C_t) 
   
  
ht​=tanh(Ct​)

 
  
   
    
    
      o 
     
    
      t 
     
    
   
     = 
    
   
     σ 
    
   
     ( 
    
    
    
      W 
     
     
     
       h 
      
     
       o 
      
     
    
    
    
      x 
     
    
      t 
     
    
   
     + 
    
    
    
      W 
     
     
     
       h 
      
     
       o 
      
     
    
    
    
      h 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     + 
    
    
    
      b 
     
    
      o 
     
    
   
     ) 
    
   
  
    o_t = \sigma(W_{ho} x_t + W_{ho} h_{t-1} + b_o) 
   
  
ot​=σ(Who​xt​+Who​ht−1​+bo​)

 
  
   
    
    
      h 
     
    
      t 
     
    
   
     = 
    
    
    
      o 
     
    
      t 
     
    
   
     ∗ 
    
   
     tanh 
    
   
     ⁡ 
    
   
     ( 
    
    
    
      C 
     
    
      t 
     
    
   
     ) 
    
   
  
    h_t = o_t * \tanh(C_t) 
   
  
ht​=ot​∗tanh(Ct​)

其中,

      f 
     
    
      t 
     
    
   
  
    f_t 
   
  
ft​、 
 
  
   
    
    
      i 
     
    
      t 
     
    
   
  
    i_t 
   
  
it​ 、 
 
  
   
    
    
      o 
     
    
      t 
     
    
   
  
    o_t 
   
  
ot​ 分别是遗忘门、输入门和输出门的激活值, 
 
  
   
    
     
     
       C 
      
     
       ~ 
      
     
    
      t 
     
    
   
  
    \tilde{C}_t 
   
  
C~t​ 是候选记忆细胞, 
 
  
   
   
     σ 
    
   
  
    \sigma 
   
  
σ 是 sigmoid 激活函数,* 表示逐元素乘法。

LSTM 的这种设计显著提高了网络在处理长序列数据时的性能,使其成为许多序列建模任务的首选模型。

2. LSTM的结构与工作原理

2.1 记忆单元(Memory Cell)

记忆单元是LSTM网络的核心,负责在整个序列处理过程中保持和更新长期依赖信息。记忆单元的结构相对简单,主要由一个或多个神经元组成,其状态通过时间步传递,仅通过线性方式更新。

2.2 遗忘门(Forget Gate)

遗忘门的目的是决定在每个时间步中,哪些信息应该从记忆单元中被遗忘或保留。它通过以下公式进行计算:

      f 
     
    
      t 
     
    
   
     = 
    
   
     σ 
    
   
     ( 
    
    
    
      W 
     
    
      f 
     
    
   
     ⋅ 
    
   
     [ 
    
    
    
      h 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     , 
    
    
    
      x 
     
    
      t 
     
    
   
     ] 
    
   
     + 
    
    
    
      b 
     
    
      f 
     
    
   
     ) 
    
   
  
    f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f) 
   
  
ft​=σ(Wf​⋅[ht−1​,xt​]+bf​)

其中,

     σ 
    
   
  
    \sigma 
   
  
σ 是逻辑激活函数, 
 
  
   
    
    
      W 
     
    
      f 
     
    
   
  
    W_f 
   
  
Wf​ 和  
 
  
   
    
    
      b 
     
    
      f 
     
    
   
  
    b_f 
   
  
bf​ 分别是遗忘门的权重矩阵和偏置项, 
 
  
   
   
     [ 
    
    
    
      h 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     , 
    
    
    
      x 
     
    
      t 
     
    
   
     ] 
    
   
  
    [h_{t-1}, x_t] 
   
  
[ht−1​,xt​] 是前一时间步的隐藏状态和当前时间步的输入。

2.3 输入门(Input Gate)

输入门由两部分组成:一个sigmoid层决定哪些值将要更新,一个tanh层创建一个新的候选值向量,该向量将被加入到状态中。输入门的公式如下:

      i 
     
    
      t 
     
    
   
     = 
    
   
     σ 
    
   
     ( 
    
    
    
      W 
     
    
      i 
     
    
   
     ⋅ 
    
   
     [ 
    
    
    
      h 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     , 
    
    
    
      x 
     
    
      t 
     
    
   
     ] 
    
   
     + 
    
    
    
      b 
     
    
      i 
     
    
   
     ) 
    
   
  
    i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i) 
   
  
it​=σ(Wi​⋅[ht−1​,xt​]+bi​)

 
  
   
    
     
     
       C 
      
     
       ~ 
      
     
    
      t 
     
    
   
     = 
    
   
     tanh 
    
   
     ⁡ 
    
   
     ( 
    
    
    
      W 
     
    
      C 
     
    
   
     ⋅ 
    
   
     [ 
    
    
    
      h 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     , 
    
    
    
      x 
     
    
      t 
     
    
   
     ] 
    
   
     + 
    
    
    
      b 
     
    
      C 
     
    
   
  
    \tilde{C}_t = \tanh(W_C \cdot [h_{t-1}, x_t] + b_C 
   
  
C~t​=tanh(WC​⋅[ht−1​,xt​]+bC​

这里,

      i 
     
    
      t 
     
    
   
  
    i_t 
   
  
it​ 是输入门的输出, 
 
  
   
    
     
     
       C 
      
     
       ~ 
      
     
    
      t 
     
    
   
  
    \tilde{C}_t 
   
  
C~t​ 是候选记忆单元状态, 
 
  
   
    
    
      W 
     
    
      i 
     
    
   
     , 
    
    
    
      W 
     
    
      C 
     
    
   
  
    W_i, W_C 
   
  
Wi​,WC​ 和  
 
  
   
    
    
      b 
     
    
      i 
     
    
   
     , 
    
    
    
      b 
     
    
      C 
     
    
   
  
    b_i, b_C 
   
  
bi​,bC​ 分别是相关权重和偏置。

2.4 输出门(Output Gate)

输出门负责决定记忆单元状态的哪一部分将被输出到隐藏状态,同时通过以下公式计算:

      o 
     
    
      t 
     
    
   
     = 
    
   
     σ 
    
   
     ( 
    
    
    
      W 
     
    
      o 
     
    
   
     ⋅ 
    
   
     [ 
    
    
    
      h 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     , 
    
    
    
      x 
     
    
      t 
     
    
   
     ] 
    
   
     + 
    
    
    
      b 
     
    
      o 
     
    
   
     ) 
    
   
  
    o_t = \sigma(W_o \cdot [h_{t-1}, x_t] + b_o) 
   
  
ot​=σ(Wo​⋅[ht−1​,xt​]+bo​)

 
  
   
    
    
      h 
     
    
      t 
     
    
   
     = 
    
    
    
      o 
     
    
      t 
     
    
   
     ∗ 
    
   
     tanh 
    
   
     ⁡ 
    
   
     ( 
    
    
    
      C 
     
    
      t 
     
    
   
     ) 
    
   
  
    h_t = o_t * \tanh(C_t) 
   
  
ht​=ot​∗tanh(Ct​)

其中,

      o 
     
    
      t 
     
    
   
  
    o_t 
   
  
ot​ 是输出门的sigmoid函数的输出, 
 
  
   
    
    
      C 
     
    
      t 
     
    
   
  
    C_t 
   
  
Ct​ 是更新后的记忆单元状态, 
 
  
   
    
    
      h 
     
    
      t 
     
    
   
  
    h_t 
   
  
ht​ 是最终的隐藏状态输出。

在这里插入图片描述

上图展示了LSTM网络在时间步

     t 
    
   
  
    t 
   
  
t 的结构,其中各个门的交互和记忆单元状态的更新清晰可见。通过遗忘门、输入门和输出门的协同工作,LSTM能够有效地处理序列数据中的长期依赖问题。

3. LSTM的数学模型

3.1 公式描述

长短期记忆网络(LSTM)是一种特殊类型的循环神经网络(RNN),它能够学习到长期依赖关系。LSTM的核心思想是通过引入三个门来控制信息的流动:遗忘门(forget gate)、输入门(input gate)和输出门(output gate)。

遗忘门决定从单元状态中丢弃哪些信息,其公式如下:

      f 
     
    
      t 
     
    
   
     = 
    
   
     σ 
    
   
     ( 
    
    
    
      W 
     
    
      f 
     
    
   
     ⋅ 
    
   
     [ 
    
    
    
      h 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     , 
    
    
    
      x 
     
    
      t 
     
    
   
     ] 
    
   
     + 
    
    
    
      b 
     
    
      f 
     
    
   
     ) 
    
   
  
    f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f) 
   
  
ft​=σ(Wf​⋅[ht−1​,xt​]+bf​)

输入门由两部分组成:一个sigmoid层决定哪些值将被更新,一个tanh层创建一个新的候选值向量,公式如下:

      i 
     
    
      t 
     
    
   
     = 
    
   
     σ 
    
   
     ( 
    
    
    
      W 
     
    
      i 
     
    
   
     ⋅ 
    
   
     [ 
    
    
    
      h 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     , 
    
    
    
      x 
     
    
      t 
     
    
   
     ] 
    
   
     + 
    
    
    
      b 
     
    
      i 
     
    
   
     ) 
    
   
  
    i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i) 
   
  
it​=σ(Wi​⋅[ht−1​,xt​]+bi​)

 
  
   
    
     
     
       C 
      
     
       ~ 
      
     
    
      t 
     
    
   
     = 
    
   
     tanh 
    
   
     ⁡ 
    
   
     ( 
    
    
    
      W 
     
    
      C 
     
    
   
     ⋅ 
    
   
     [ 
    
    
    
      h 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     , 
    
    
    
      x 
     
    
      t 
     
    
   
     ] 
    
   
     + 
    
    
    
      b 
     
    
      C 
     
    
   
     ) 
    
   
  
    \tilde{C}_t = \tanh(W_C \cdot [h_{t-1}, x_t] + b_C) 
   
  
C~t​=tanh(WC​⋅[ht−1​,xt​]+bC​)

单元状态的更新结合了遗忘门和输入门的信息:

      C 
     
    
      t 
     
    
   
     = 
    
    
    
      f 
     
    
      t 
     
    
   
     ∗ 
    
    
    
      C 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     + 
    
    
    
      i 
     
    
      t 
     
    
   
     ∗ 
    
    
     
     
       C 
      
     
       ~ 
      
     
    
      t 
     
    
   
  
    C_t = f_t * C_{t-1} + i_t * \tilde{C}_t 
   
  
Ct​=ft​∗Ct−1​+it​∗C~t​

输出门决定输出哪些信息,同时输出的值会通过tanh函数进行缩放:

      o 
     
    
      t 
     
    
   
     = 
    
   
     σ 
    
   
     ( 
    
    
    
      W 
     
    
      o 
     
    
   
     ⋅ 
    
   
     [ 
    
    
    
      h 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     , 
    
    
    
      x 
     
    
      t 
     
    
   
     ] 
    
   
     + 
    
    
    
      b 
     
    
      o 
     
    
   
     ) 
    
   
  
    o_t = \sigma(W_o \cdot [h_{t-1}, x_t] + b_o) 
   
  
ot​=σ(Wo​⋅[ht−1​,xt​]+bo​)

 
  
   
    
    
      h 
     
    
      t 
     
    
   
     = 
    
    
    
      o 
     
    
      t 
     
    
   
     ∗ 
    
   
     tanh 
    
   
     ⁡ 
    
   
     ( 
    
    
    
      C 
     
    
      t 
     
    
   
     ) 
    
   
  
    h_t = o_t * \tanh(C_t) 
   
  
ht​=ot​∗tanh(Ct​)

其中,

     σ 
    
   
  
    \sigma 
   
  
σ表示sigmoid函数, 
 
  
   
   
     ⋅ 
    
   
  
    \cdot 
   
  
⋅表示向量或矩阵的点积, 
 
  
   
    
    
      x 
     
    
      t 
     
    
   
  
    x_t 
   
  
xt​是t时刻的输入, 
 
  
   
    
    
      h 
     
    
      t 
     
    
   
  
    h_t 
   
  
ht​是t时刻的隐藏状态, 
 
  
   
    
    
      C 
     
    
      t 
     
    
   
  
    C_t 
   
  
Ct​是t时刻的单元状态, 
 
  
   
   
     W 
    
   
  
    W 
   
  
W和 
 
  
   
   
     b 
    
   
  
    b 
   
  
b分别是权重和偏置。

3.2 激活函数的选择

在LSTM中,激活函数的选择对网络性能有重要影响。常见的激活函数包括:

  1. Sigmoid函数:用于遗忘门、输入门和输出门的门控机制,其公式为: σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+e−x1​ Sigmoid函数能够输出0到1之间的值,适合用作门控机制的激活函数。
  2. Tanh函数:用于候选记忆细胞的激活,其公式为: tanh ⁡ ( x ) = e x − e − x e x + e − x \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} tanh(x)=ex+e−xex−e−x​ Tanh函数输出-1到1之间的值,能够提供零中心化的激活,有助于数据的处理。
  3. ReLU函数:虽然在标准的LSTM中不常用,但在某些变体中,如Leaky ReLU,可以用于加速训练过程: Leaky ReLU ( x ) = max ⁡ ( 0.01 x , x ) \text{Leaky ReLU}(x) = \max(0.01x, x) Leaky ReLU(x)=max(0.01x,x)

选择激活函数时,需要考虑函数的导数、计算效率、梯度消失或爆炸问题等因素。例如,Sigmoid函数虽然在梯度上容易饱和,但其平滑的导数有助于反向传播;而Tanh函数的零中心化特性则有助于减少学习过程中的偏移。

4. LSTM的应用领域

4.1 语言模型与文本生成

LSTM在语言模型和文本生成领域的应用是其最为显著的成就之一。通过学习语言的长期依赖关系,LSTM能够有效地捕捉文本中的语义信息,从而生成连贯且符合语境的文本。

  • LSTM通过记忆单元来维持长期依赖关系,其核心公式如下: f t = σ ( W f ⋅ [ h t − 1 , x t ] + b f ) i t = σ ( W i ⋅ [ h t − 1 , x t ] + b i ) C ~ t = tanh ⁡ ( W C ⋅ x t + b C ) C t = f t ∗ C t − 1 + i t ∗ C ~ t o t = σ ( W o ⋅ [ h t − 1 , x t ] + b o ) h t = o t ∗ tanh ⁡ ( C t ) \begin{aligned} \mathbf{f}_t &= \sigma(\mathbf{W}f \cdot [\mathbf{h}{t-1}, \mathbf{x}_t] + \mathbf{b}_f) \ \mathbf{i}_t &= \sigma(\mathbf{W}i \cdot [\mathbf{h}{t-1}, \mathbf{x}_t] + \mathbf{b}_i) \ \tilde{\mathbf{C}}_t &= \tanh(\mathbf{W}_C \cdot \mathbf{x}_t + \mathbf{b}_C) \ \mathbf{C}_t &= \mathbf{f}t * \mathbf{C}{t-1} + \mathbf{i}_t * \tilde{\mathbf{C}}_t \ \mathbf{o}_t &= \sigma(\mathbf{W}o \cdot [\mathbf{h}{t-1}, \mathbf{x}_t] + \mathbf{b}_o) \ \mathbf{h}_t &= \mathbf{o}_t * \tanh(\mathbf{C}_t) \end{aligned} ft​it​Ct​Ct​ot​ht​​=σ(Wf​⋅[ht−1​,xt​]+bf​)=σ(Wi​⋅[ht−1​,xt​]+bi​)=tanh(WC​⋅xt​+bC​)=ft​∗Ct−1​+it​∗Ct​=σ(Wo​⋅[ht−1​,xt​]+bo​)=ot​∗tanh(Ct​)​ 其中, f t \mathbf{f}_t ft​, i t \mathbf{i}_t it​, o t \mathbf{o}_t ot​ 分别代表在时间步 t t t 的遗忘门、输入门和输出门的激活值, C t \mathbf{C}_t Ct​ 是在时间步 t t t 的细胞状态, h t \mathbf{h}_t ht​ 是隐藏状态。
  • 在文本生成中,LSTM可以根据给定的初始文本序列生成新的文本序列。例如,给定一个故事的开头,LSTM能够续写故事,生成一个连贯且符合原文风格的结尾。

4.2 机器翻译

LSTM在机器翻译领域的应用也是其重要成就之一。LSTM能够处理长距离依赖问题,使得翻译结果更加准确和自然。

  • 机器翻译中的LSTM模型通常采用编码器-解码器架构,其中编码器将源语言文本转换为固定长度的向量,解码器再将该向量转换为目标语言文本。
  • 以下是一个简化的序列到序列(Sequence to Sequence, Seq2Seq)模型的示意图:

#mermaid-svg-x1PFzWl1lErz1TZT {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-x1PFzWl1lErz1TZT .error-icon{fill:#552222;}#mermaid-svg-x1PFzWl1lErz1TZT .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-x1PFzWl1lErz1TZT .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-x1PFzWl1lErz1TZT .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-x1PFzWl1lErz1TZT .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-x1PFzWl1lErz1TZT .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-x1PFzWl1lErz1TZT .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-x1PFzWl1lErz1TZT .marker{fill:#333333;stroke:#333333;}#mermaid-svg-x1PFzWl1lErz1TZT .marker.cross{stroke:#333333;}#mermaid-svg-x1PFzWl1lErz1TZT svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-x1PFzWl1lErz1TZT .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-x1PFzWl1lErz1TZT .cluster-label text{fill:#333;}#mermaid-svg-x1PFzWl1lErz1TZT .cluster-label span{color:#333;}#mermaid-svg-x1PFzWl1lErz1TZT .label text,#mermaid-svg-x1PFzWl1lErz1TZT span{fill:#333;color:#333;}#mermaid-svg-x1PFzWl1lErz1TZT .node rect,#mermaid-svg-x1PFzWl1lErz1TZT .node circle,#mermaid-svg-x1PFzWl1lErz1TZT .node ellipse,#mermaid-svg-x1PFzWl1lErz1TZT .node polygon,#mermaid-svg-x1PFzWl1lErz1TZT .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-x1PFzWl1lErz1TZT .node .label{text-align:center;}#mermaid-svg-x1PFzWl1lErz1TZT .node.clickable{cursor:pointer;}#mermaid-svg-x1PFzWl1lErz1TZT .arrowheadPath{fill:#333333;}#mermaid-svg-x1PFzWl1lErz1TZT .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-x1PFzWl1lErz1TZT .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-x1PFzWl1lErz1TZT .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-x1PFzWl1lErz1TZT .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-x1PFzWl1lErz1TZT .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-x1PFzWl1lErz1TZT .cluster text{fill:#333;}#mermaid-svg-x1PFzWl1lErz1TZT .cluster span{color:#333;}#mermaid-svg-x1PFzWl1lErz1TZT div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-x1PFzWl1lErz1TZT :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}
编码

初始化

生成

生成

       输入序列 
     

       编码器 
     

       上下文向量 
     

       解码器 
     

       输出序列1 
     

       输出序列2 
     

       输出序列... 
     

       结束标记 
     
  • LSTM在机器翻译中的关键优势在于其能够捕捉长距离依赖关系,这使得翻译结果能够更好地保留原文的语义信息。

4.3 时间序列预测

LSTM在时间序列预测方面表现出色,特别是在金融市场预测、气象预测等领域。

  • 时间序列预测模型通常需要处理大量具有时间依赖性的数据点。LSTM通过其内部的细胞状态来记忆长期的信息,从而能够预测未来的数据点。
  • 一个简单的时间序列预测模型可以表示为: y ^ t = f ( h t − 1 , x t ) \hat{y}t = f(\mathbf{h}{t-1}, \mathbf{x}_t) y^​t​=f(ht−1​,xt​) 其中, y ^ t \hat{y}t y^​t​ 是在时间步 t t t 的预测值, h t − 1 \mathbf{h}{t-1} ht−1​ 是前一时间步的隐藏状态, x t \mathbf{x}_t xt​ 是当前时间步的输入。
  • LSTM在时间序列预测中的关键优势在于其能够自动学习数据中的模式和趋势,而无需手动特征工程。
  • 下图展示了一个LSTM网络在时间序列预测中的结构:LSTM for Time Series

5. LSTM的变体

5.1 带孔LSTM(Peephole LSTM)

带孔LSTM(Peephole LSTM)是在标准LSTM的基础上增加了一种机制,允许门控单元观察到细胞状态。这种机制通过在遗忘门、输入门和输出门中增加对细胞状态的反馈连接,从而提高了LSTM的记忆能力。

在标准的LSTM中,遗忘门

      f 
     
    
      t 
     
    
   
  
    f_t 
   
  
ft​、输入门 
 
  
   
    
    
      i 
     
    
      t 
     
    
   
  
    i_t 
   
  
it​和输出门 
 
  
   
    
    
      o 
     
    
      t 
     
    
   
  
    o_t 
   
  
ot​的计算公式如下:

 
  
   
    
    
      f 
     
    
      t 
     
    
   
     = 
    
   
     σ 
    
   
     ( 
    
    
    
      W 
     
    
      f 
     
    
   
     ⋅ 
    
   
     [ 
    
    
    
      h 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     , 
    
    
    
      x 
     
    
      t 
     
    
   
     ] 
    
   
     + 
    
    
    
      b 
     
    
      f 
     
    
   
     ) 
    
   
  
    f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f) 
   
  
ft​=σ(Wf​⋅[ht−1​,xt​]+bf​)

 
  
   
    
    
      i 
     
    
      t 
     
    
   
     = 
    
   
     σ 
    
   
     ( 
    
    
    
      W 
     
    
      i 
     
    
   
     ⋅ 
    
   
     [ 
    
    
    
      h 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     , 
    
    
    
      x 
     
    
      t 
     
    
   
     ] 
    
   
     + 
    
    
    
      b 
     
    
      i 
     
    
   
     ) 
    
   
  
    i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i) 
   
  
it​=σ(Wi​⋅[ht−1​,xt​]+bi​)

 
  
   
    
    
      o 
     
    
      t 
     
    
   
     = 
    
   
     σ 
    
   
     ( 
    
    
    
      W 
     
    
      o 
     
    
   
     ⋅ 
    
   
     [ 
    
    
    
      h 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     , 
    
    
    
      x 
     
    
      t 
     
    
   
     ] 
    
   
     + 
    
    
    
      b 
     
    
      o 
     
    
   
     ) 
    
   
  
    o_t = \sigma(W_o \cdot [h_{t-1}, x_t] + b_o) 
   
  
ot​=σ(Wo​⋅[ht−1​,xt​]+bo​)

而在带孔LSTM中,这些门的计算会考虑细胞状态

      C 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
  
    C_{t-1} 
   
  
Ct−1​:

 
  
   
    
    
      f 
     
    
      t 
     
    
   
     = 
    
   
     σ 
    
   
     ( 
    
    
    
      W 
     
    
      f 
     
    
   
     ⋅ 
    
   
     [ 
    
    
    
      h 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     , 
    
    
    
      x 
     
    
      t 
     
    
   
     ] 
    
   
     + 
    
    
    
      U 
     
    
      f 
     
    
   
     ⋅ 
    
    
    
      C 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     + 
    
    
    
      b 
     
    
      f 
     
    
   
     ) 
    
   
  
    f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + U_f \cdot C_{t-1} + b_f) 
   
  
ft​=σ(Wf​⋅[ht−1​,xt​]+Uf​⋅Ct−1​+bf​)

 
  
   
    
    
      i 
     
    
      t 
     
    
   
     = 
    
   
     σ 
    
   
     ( 
    
    
    
      W 
     
    
      i 
     
    
   
     ⋅ 
    
   
     [ 
    
    
    
      h 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     , 
    
    
    
      x 
     
    
      t 
     
    
   
     ] 
    
   
     + 
    
    
    
      U 
     
    
      i 
     
    
   
     ⋅ 
    
    
    
      C 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     + 
    
    
    
      b 
     
    
      i 
     
    
   
     ) 
    
   
  
    i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + U_i \cdot C_{t-1} + b_i) 
   
  
it​=σ(Wi​⋅[ht−1​,xt​]+Ui​⋅Ct−1​+bi​)

 
  
   
    
    
      o 
     
    
      t 
     
    
   
     = 
    
   
     σ 
    
   
     ( 
    
    
    
      W 
     
    
      o 
     
    
   
     ⋅ 
    
   
     [ 
    
    
    
      h 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     , 
    
    
    
      x 
     
    
      t 
     
    
   
     ] 
    
   
     + 
    
    
    
      U 
     
    
      o 
     
    
   
     ⋅ 
    
    
    
      C 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     + 
    
    
    
      b 
     
    
      o 
     
    
   
     ) 
    
   
  
    o_t = \sigma(W_o \cdot [h_{t-1}, x_t] + U_o \cdot C_{t-1} + b_o) 
   
  
ot​=σ(Wo​⋅[ht−1​,xt​]+Uo​⋅Ct−1​+bo​)

其中,

      U 
     
    
      f 
     
    
   
  
    U_f 
   
  
Uf​, 
 
  
   
    
    
      U 
     
    
      i 
     
    
   
  
    U_i 
   
  
Ui​,和  
 
  
   
    
    
      U 
     
    
      o 
     
    
   
  
    U_o 
   
  
Uo​ 是额外的权重矩阵,用于细胞状态的反馈。

5.2 门控循环单元(GRU)

门控循环单元(Gated Recurrent Unit,GRU)是LSTM的一个变体,由Cho等人在2014年提出。GRU简化了LSTM的结构,将遗忘门和输入门合并为一个单一的“更新门”,并且合并了细胞状态和隐藏状态。

GRU的核心思想是减少模型参数,同时保持对长短期依赖的记忆能力。GRU的更新门

      z 
     
    
      t 
     
    
   
  
    z_t 
   
  
zt​和重置门 
 
  
   
    
    
      r 
     
    
      t 
     
    
   
  
    r_t 
   
  
rt​的计算公式如下:

 
  
   
    
    
      z 
     
    
      t 
     
    
   
     = 
    
   
     σ 
    
   
     ( 
    
    
    
      W 
     
    
      z 
     
    
   
     ⋅ 
    
   
     [ 
    
    
    
      h 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     , 
    
    
    
      x 
     
    
      t 
     
    
   
     ] 
    
   
     + 
    
    
    
      b 
     
    
      z 
     
    
   
     ) 
    
   
  
    z_t = \sigma(W_z \cdot [h_{t-1}, x_t] + b_z) 
   
  
zt​=σ(Wz​⋅[ht−1​,xt​]+bz​)

 
  
   
    
    
      r 
     
    
      t 
     
    
   
     = 
    
   
     σ 
    
   
     ( 
    
    
    
      W 
     
    
      r 
     
    
   
     ⋅ 
    
   
     [ 
    
    
    
      h 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     , 
    
    
    
      x 
     
    
      t 
     
    
   
     ] 
    
   
     + 
    
    
    
      b 
     
    
      r 
     
    
   
     ) 
    
   
  
    r_t = \sigma(W_r \cdot [h_{t-1}, x_t] + b_r) 
   
  
rt​=σ(Wr​⋅[ht−1​,xt​]+br​)

更新门控制信息的流动,而重置门则决定了之前的记忆有多少应该被保留。新的候选记忆

       h 
      
     
       ~ 
      
     
    
      t 
     
    
   
  
    \tilde{h}_t 
   
  
h~t​和更新后的隐藏状态 
 
  
   
    
    
      h 
     
    
      t 
     
    
   
  
    h_t 
   
  
ht​的计算如下:

 
  
   
    
     
     
       h 
      
     
       ~ 
      
     
    
      t 
     
    
   
     = 
    
   
     tanh 
    
   
     ⁡ 
    
   
     ( 
    
   
     W 
    
   
     ⋅ 
    
   
     [ 
    
    
    
      r 
     
    
      t 
     
    
   
     ∗ 
    
    
    
      h 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     , 
    
    
    
      x 
     
    
      t 
     
    
   
     ] 
    
   
     + 
    
   
     b 
    
   
     ) 
    
   
  
    \tilde{h}_t = \tanh(W \cdot [r_t * h_{t-1}, x_t] + b) 
   
  
h~t​=tanh(W⋅[rt​∗ht−1​,xt​]+b)

 
  
   
    
    
      h 
     
    
      t 
     
    
   
     = 
    
   
     ( 
    
   
     1 
    
   
     − 
    
    
    
      z 
     
    
      t 
     
    
   
     ) 
    
   
     ∗ 
    
    
    
      h 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     + 
    
    
    
      z 
     
    
      t 
     
    
   
     ∗ 
    
    
     
     
       h 
      
     
       ~ 
      
     
    
      t 
     
    
   
  
    h_t = (1 - z_t) * h_{t-1} + z_t * \tilde{h}_t 
   
  
ht​=(1−zt​)∗ht−1​+zt​∗h~t​

GRU通过这种方式,实现了对信息的动态过滤和更新,同时减少了模型的复杂性。由于其结构的简化,GRU在某些任务上能够更快地训练,并且在某些情况下能够与LSTM相媲美或甚至更优。

6. LSTM的实现与优化

6.1 编码实现

LSTM(Long Short-Term Memory)是一种特殊类型的循环神经网络(RNN),它能够学习到长期依赖关系。LSTM的结构由以下三个主要部分组成:遗忘门(Forget Gate)、输入门(Input Gate)和输出门(Output Gate)。

遗忘门的目的是决定从单元状态中丢弃哪些信息。遗忘门的公式如下:

      f 
     
    
      t 
     
    
   
     = 
    
   
     σ 
    
   
     ( 
    
    
    
      W 
     
    
      f 
     
    
   
     ⋅ 
    
   
     [ 
    
    
    
      h 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     , 
    
    
    
      x 
     
    
      t 
     
    
   
     ] 
    
   
     + 
    
    
    
      b 
     
    
      f 
     
    
   
     ) 
    
   
  
    f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f) 
   
  
ft​=σ(Wf​⋅[ht−1​,xt​]+bf​)

其中,

     σ 
    
   
  
    \sigma 
   
  
σ是逻辑函数, 
 
  
   
    
    
      W 
     
    
      f 
     
    
   
  
    W_f 
   
  
Wf​ 是权重矩阵, 
 
  
   
   
     [ 
    
    
    
      h 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     , 
    
    
    
      x 
     
    
      t 
     
    
   
     ] 
    
   
  
    [h_{t-1}, x_t] 
   
  
[ht−1​,xt​] 是前一个时间步的隐藏状态和当前时间步的输入, 
 
  
   
    
    
      b 
     
    
      f 
     
    
   
  
    b_f 
   
  
bf​ 是偏置项。

接着是输入门,它由两部分组成:更新候选值的sigmoid层和更新状态的tanh层:

      i 
     
    
      t 
     
    
   
     = 
    
   
     σ 
    
   
     ( 
    
    
    
      W 
     
    
      i 
     
    
   
     ⋅ 
    
   
     [ 
    
    
    
      h 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     , 
    
    
    
      x 
     
    
      t 
     
    
   
     ] 
    
   
     + 
    
    
    
      b 
     
    
      i 
     
    
   
     ) 
    
   
  
    i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i) 
   
  
it​=σ(Wi​⋅[ht−1​,xt​]+bi​)

 
  
   
    
     
     
       C 
      
     
       ~ 
      
     
    
      t 
     
    
   
     = 
    
   
     tanh 
    
   
     ⁡ 
    
   
     ( 
    
    
    
      W 
     
    
      C 
     
    
   
     ⋅ 
    
   
     [ 
    
    
    
      h 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     , 
    
    
    
      x 
     
    
      t 
     
    
   
     ] 
    
   
     + 
    
    
    
      b 
     
    
      C 
     
    
   
     ) 
    
   
  
    \tilde{C}_t = \tanh(W_C \cdot [h_{t-1}, x_t] + b_C) 
   
  
C~t​=tanh(WC​⋅[ht−1​,xt​]+bC​)

然后,我们将遗忘门和输入门的结果结合起来更新单元状态:

      C 
     
    
      t 
     
    
   
     = 
    
    
    
      f 
     
    
      t 
     
    
   
     ∗ 
    
    
    
      C 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     + 
    
    
    
      i 
     
    
      t 
     
    
   
     ∗ 
    
    
     
     
       C 
      
     
       ~ 
      
     
    
      t 
     
    
   
  
    C_t = f_t * C_{t-1} + i_t * \tilde{C}_t 
   
  
Ct​=ft​∗Ct−1​+it​∗C~t​

最后是输出门,它决定了输出的隐藏状态:

      o 
     
    
      t 
     
    
   
     = 
    
   
     σ 
    
   
     ( 
    
    
    
      W 
     
    
      o 
     
    
   
     ⋅ 
    
   
     [ 
    
    
    
      h 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     , 
    
    
    
      x 
     
    
      t 
     
    
   
     ] 
    
   
     + 
    
    
    
      b 
     
    
      o 
     
    
   
     ) 
    
   
  
    o_t = \sigma(W_o \cdot [h_{t-1}, x_t] + b_o) 
   
  
ot​=σ(Wo​⋅[ht−1​,xt​]+bo​)

 
  
   
    
    
      h 
     
    
      t 
     
    
   
     = 
    
    
    
      o 
     
    
      t 
     
    
   
     ∗ 
    
   
     tanh 
    
   
     ⁡ 
    
   
     ( 
    
    
    
      C 
     
    
      t 
     
    
   
     ) 
    
   
  
    h_t = o_t * \tanh(C_t) 
   
  
ht​=ot​∗tanh(Ct​)

6.2 梯度消失与爆炸问题

在标准的RNN中,梯度消失或爆炸问题是一个常见的问题,这会导致网络难以学习长期依赖关系。LSTM通过引入门控机制来解决这个问题。

梯度消失意味着随着时间的推移,梯度值逐渐减小,导致网络权重更新非常缓慢。梯度爆炸则是指梯度值随着时间的推移而变得非常大,导致权重更新过于剧烈,从而影响学习过程。

LSTM通过以下方式缓解这些问题:

  • 遗忘门允许网络有选择性地保留或遗忘信息,这有助于防止无关信息的积累。
  • 输入门允许网络更新单元状态,但仅当新输入与单元状态相关时。
  • 通过这种方式,LSTM可以维持梯度在一个合理的范围内,避免消失或爆炸。

此外,现代的优化算法,如Adam或RMSprop,也可以有效缓解这些问题,它们通过调整学习率来适应每个参数的更新需求。
在这里插入图片描述

上图展示了LSTM的基本结构图,其中包含了遗忘门、单元状态和输出门的交互。通过这种方式,LSTM能够有效地处理序列数据,并在各种序列建模任务中取得优异的性能。

7. 总结与展望

LSTM(Long Short-Term Memory)网络作为一种特殊类型的循环神经网络(RNN),自1997年由Hochreiter和Schmidhuber提出以来,已经在处理序列数据方面取得了显著的成就。LSTM通过引入三个关键的门控机制——遗忘门、输入门和输出门,有效解决了传统RNN在处理长序列数据时的梯度消失或梯度爆炸问题。

7.1 技术优势与应用领域

LSTM的核心技术优势在于其能够学习长期依赖关系,这一点在自然语言处理(NLP)、语音识别、时间序列预测等多个领域得到了广泛应用。例如,在语言模型中,LSTM能够捕捉到文本中的语法和语义信息,为机器翻译、文本摘要等任务提供了强大的支持。

7.2 研究进展与挑战

近年来,LSTM的研究不断深入,出现了多种变体,如Peephole LSTM、Coupled Input-Forget Gate LSTM等,这些变体在不同的应用场景下展现出了各自的优势。然而,LSTM模型也面临着一些挑战,如模型参数众多导致的计算复杂性,以及在某些任务上对超参数敏感等问题。

7.3 未来发展方向

展望未来,LSTM及其变体的研究方向可能包括但不限于以下几个方面:

  • 模型优化:进一步简化LSTM的结构,减少参数数量,提高模型的运行效率。
  • 学习机制:探索更有效的门控机制,以提高LSTM对长短期信息的捕捉能力。
  • 与其他模型的融合:结合注意力机制等其他深度学习技术,以增强模型的表达能力和泛化能力。
  • 应用创新:开发更多基于LSTM的创新应用,如在医疗健康、金融风控等领域的深入应用。

7.4 结论

LSTM作为一种强大的时间序列预测模型,在多个领域内展现出了其独特的价值和潜力。随着研究的不断深入和技术的持续进步,LSTM有望在未来解决更多的实际问题,推动人工智能技术的发展。


本文转载自: https://blog.csdn.net/qq_57143062/article/details/141095546
版权归原作者 零 度° 所有, 如有侵权,请联系我们删除。

“神经网络之lstm”的评论:

还没有评论