神经网络学习笔记(三)——长短期记忆网络LSTM

本文详细介绍了LSTM(长短期记忆网络),一种为解决RNN长期依赖问题而设计的特殊RNN结构。LSTM通过门控机制控制信息的流动,包括输入门、遗忘门和输出门,有效地解决了传统RNN的梯度消失问题。文章阐述了LSTM的模型结构、前向传播过程、反向传播算法,并探讨了Peephole Connection和Coupled LSTM的变体。LSTM在处理时间序列数据,如文本分类任务中表现出色,经过多轮训练,模型准确率可达到90%以上。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

长短期记忆网络 LSTM

一、概述

  长短期记忆网络——通常被称为LSTM,是一种特殊的RNN,能够学习长期依赖性。由Hochreiter和Schmidhuber(1997)提出,并且在接下来的工作中被许多人改进和推广。LSTM 在各种各样的问题上表现非常出色,现在被广泛使用。LSTM被明确设计用来避免长期依赖性问题。LSTM单元由单元,输入门,输出门和忘记门组成。该单元记住任意时间间隔内的值,并且三个门控制进出单元的信息流。

  LSTM网络非常适合基于时间序列数据进行分类,处理和预测,因为在时间序列中的重要事件之间可能存在未知持续时间的滞后。开发LSTM是为了处理在训练传统RNN时可能遇到的爆炸和消失的梯度问题。对于间隙长度的相对不敏感性是LSTM相对于RNN,隐马尔可夫模型和其他序列学习方法在许多应用中的优势。

二、背景

  传统RNN的关键点之一就是他们可以用来连接先前的信息到当前的任务上,例如使用过去的视频段来推测对当前段的理解。但是会有一些复杂的场景。上下文距离预测词较远,即相关信息和当前预测位置之间的间隔相当的大,在这个间隔不断增大时,传统RNN会丧失学习到连接如此远的信息的能力。

  循环神经网络中的LSTM可以解决这种问题,即长短期记忆网络。LSTM引入了门(gate)机制用于控制特征的流通和损失,其中输入门用来接受近期有用的信息,遗忘门用来对久远的、无用的信息选择性的遗忘,输出门的输出为根据当前状态决定的输出。可以解决RNN无法处理长距离的依赖的问题。

三、LSTM原理

3.1 模型结构

  原始RNN的隐藏层只有一个状态h,对于短期的输入非常敏感。LSTM再增加一个状态c,用来保存长期的状态,称为单元状态(cell state)。
在这里插入图片描述

  在 t t t时刻,LSTM的输入有三个:

  • 当前时刻网络的输入值 x t x_t xt
  • 上一时刻LSTM的输出值 h t − 1 h_{t-1} ht1
  • 上一时刻的单元状态 c t − 1 c_{t-1} ct1

  LSTM的输出有两个:

  • 当前时刻LSTM输出值 h t h_t ht
  • 当前时刻的单元状态 c t c_t ct

  在LSTM模型结构中,采用门(gate)来控制长期状态,在一层模型里有三个门,分别作用为:

  • 负责控制继续保存长期状态 c c c
  • 负责控制把即时状态输入到长期状态 c c c
  • 负责控制是否把长期状态 c c c作为当前的LSTM的输出

  gate实际上就是一层全连接层,输入是一个向量,输出是一个0到1之间的实数向量。公式为: g ( x ) = σ ( W x + b ) g(x) = \sigma(Wx+b) g(x)=σ(Wx+b)

3.2 前向传播

  LSTM每个模块中的具体结构如下:
在这里插入图片描述

  遗忘门(forget gate):决定了上一时刻的单元状态 c t − 1 c_{t-1} ct1如何保留到当前时刻 c t c_t ct
在这里插入图片描述

  遗忘阶段是对上一个节点传进来的输入进行选择性忘记。简单来说就是会 “忘记不重要的,记住重要的”。

  具体来说是通过计算得到的 f t f_t ft(f表示forget)来作为遗忘门控,来控制上一个状态的 c t − 1 c_{t-1} ct1的忘记的概率。
f t = σ ( W f ⋅ [ h t − 1 , x t ] + b f ) f_t = \sigma(W_f·[h_{t-1},x_t]+b_f) ft=σ(Wf[ht1,xt]+bf)

  输入门(input gate):决定了当前时刻网络的输入 x t x_t xt如何保存到单元状态 c t c_t ct
在这里插入图片描述

  这个阶段确定什么样的新信息被存放在细胞状态中。这里包含两个部分:1)sigmoid层为 “输入门层” ,主要对输入 x t x_t xt进行选择记忆。2)tanh层创建一个新的候选值向量 C ~ t \tilde{C}_t C~t,加入到状态中。
i t = σ ( W i ⋅ [ h t − 1 , x t ] + b i ) i_t = \sigma(W_i·[h_{t-1},x_t]+b_i) it=σ(Wi[ht1,xt]+bi)

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

  细胞更新(Update Cell):决定了如何计算当前序列下的细胞值 C t C_t Ct
在这里插入图片描述

  新的细胞状态由两部分组成,1)旧细胞 C t − 1 C_{t-1} Ct1 f t f_t ft相乘,丢弃掉之前序列的信息;2)新的候选值 C ~ t \tilde{C}_t C~t与比例系数 i t i_t it的积,保留当前的输入信息。
C t = f t ⊙ C t − 1 + i t ⊙ C ~ t C_t = f_t \odot C_{t-1} + i_t \odot \tilde{C}_t Ct=ftCt1+itC~t
  其中, ⊙ \odot 为Hadamard积

  输出门(output gate):控制单元状态 C t C_t Ct有多少输出到LSTM的当前输出值 h t h_t ht
在这里插入图片描述

  隐藏状态 h t h_t ht的更新由两部分组成:1) o t o_t ot, 它由上一序列的隐藏状态 h t − 1 h_{t−1} ht1和输入数据 x t x_t xt构成,通过激活函数sigmoid进行过滤;2)由隐藏状态 C t C_t Ct和tanh函数构成,tanh将 C t C_t Ct处理得到一个在 ( − 1 , 1 ) (-1,1) (1,1)之间的值,然后将其与sigmoid门相乘得到 h t h_t ht
o t = σ ( W o ⋅ [ h t − 1 , x t ] + b o ) o_t = \sigma(W_o·[h_{t-1},x_t]+b_o) ot=σ(Wo[ht1,xt]+bo)

h t = o t ⊙ tanh ⁡ ( C t ) h_t = o_t \odot \tanh(C_t) ht=ottanh(C

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值