LSTM_长短期记忆网络_总结学习

目录

    • 1、什么是LSTM
    • 2、LSTM的结构
    • 3、遗忘门 Forget gate
    • 4、输入门 Input gate
      • (1)、sigmoid层(输入门层):从当前输入判断哪些信息比较重要
      • (2)、tanh层:对提取的有效信息做出筛选
      • (3)、更新记忆单元状态 Cell state
    • 5、输出门 Output gate
      • (1)、sigmoid层(输出门层):决定哪些信息可以通过输出门
      • (2)、tanh层:获得最终的输出
    • 6、LSTM的更直观的结构图
    • 补充知识:
      • (1)、tanh函数
      • (2)、sigmoid函数

1、什么是LSTM

  • LSTM(Long short-term memory)是一种在深度学习中广泛使用的RNN结构,擅长捕捉长期的依赖关系,适合序列预测。(为什么能捕捉长期依赖关系?)
  • 和传统的神经网络不同,LSTM包含反馈连接,(带来的好处是)能够处理全部的数据序列,而不是单个的数据点,使得在时间序列、文本、话音等序列数据中有较强的性能。

2、LSTM的结构

  • LSTM可以解决RNN反向传播中的梯度消失问题(什么是梯度消失问题?为什么RNN有梯度消失问题?为什么LSTM可以解决?)
  • 下面是LSTM网络的内部结构,包含三个部分:
    LSTM_长短期记忆网络_总结学习_第1张图片
  • 第一部分:选择决定前一个时间戳的信息是记还是不记(遗忘门 the forget gate
  • 第二部分:将新的信息选择性的记录到记忆单元中(输入门 the input gate
  • 第三部分:传递从当前时间戳学习到的新的信息给下一个时间戳(输出门 the output gate
    这三个门控制了lstm cell或者memory cell的信息进出,一个LSTM unit(包括这三个门和一个lstm cell)可以被视为传统的前馈神经网络的一层神经元,每一个神经元都有一个隐藏层和一个当前状态。(什么是lstm cell?)
    LSTM_长短期记忆网络_总结学习_第2张图片
    和RNN一样,LSTM需要前一个时间戳的隐藏层状态 H ( t − 1 ) H(t-1) H(t1),用来得到当前时间戳的隐藏层状态 H ( t ) H(t) H(t),RNN的公式就是: H ( t ) = f ( U ∗ X ( t ) + W ∗ H ( t − 1 ) ) H(t)=f(U\ast X(t)+W \ast H(t-1)) H(t)=f(UX(t)+WH(t1))(短期记忆 short term memery)

和RNN的区别,LSTM引入了一个记忆单元,携带了所有时间戳的所有信息,用 C ( t − 1 ) C(t-1) C(t1) C ( t ) C(t) C(t)表示。(长期记忆 long term memery)
LSTM_长短期记忆网络_总结学习_第3张图片
更细节的结构:
LSTM_长短期记忆网络_总结学习_第4张图片

3、遗忘门 Forget gate

“Bob is a nice person. Dan, on the Other hand, is evil.
对于使用句号分开的两个句子,很明显,在第一句中,我们谈论的是Bob,一遇到句号(.),我们就开始谈论Dan。
当我们从第一句话转到第二句话时,我们的网络应该意识到我们不再谈论Bob。现在我们的主题是Dan。
在这里,LSTM网络的遗忘门会忘记Bob。

功能:选择决定前一个时间戳的信息是记还是不记
LSTM_长短期记忆网络_总结学习_第5张图片

遗忘门的公式:
f t = σ ( x t ⋅ U f + H t − 1 ⋅ W f ) f t = σ ( W f ⋅ [ h t − 1 , x t ] + b f ) f_t =\sigma(x_t \cdot U_f+H_{t-1} \cdot W_f)\\ f_t =\sigma(W_f \cdot [h_{t-1},x_t]+b_f)\\ ft=σ(xtUf+Ht1Wf)ft=σ(Wf[ht1,xt]+bf)
其中:

  • x t x_t xt:当前时间戳的输入
  • U f U_f Uf:权重矩阵
  • H t − 1 H_{t-1} Ht1:前一个时间戳的隐藏层状态
  • W f W_f Wf:权重矩阵
  • σ \sigma σ:限制 f t f_t ft在0到1之间
  • f t f_t ft之后会元素乘上 C t − 1 C_{t-1} Ct1,如果 f t = 1 f_t=1 ft=1,那么说明过去的记忆(上一个时间戳)要保留,否则删除。
    C t − 1 ∗ f t = 0 (忘记全部) C t − 1 ∗ f t = C t − 1 (记住全部) C_{t-1} \ast f_t=0 (忘记全部)\\ C_{t-1} \ast f_t=C_{t-1}(记住全部) Ct1ft=0(忘记全部)Ct1ft=Ct1(记住全部)
    • ∗ \ast 或者 ⊙ \odot :元素乘,哈达玛积(Hadamard product)哈达玛积首先保证矩阵的结构相同,把对应位置的数值相乘。
      • LSTM_长短期记忆网络_总结学习_第6张图片

4、输入门 Input gate

“Bob knows swimming. He told me over the phone that he had served the navy for four long years.”
这两句话谈论的都是Bob,但是谈论的内容是不同的。第一句我们知道了Bob会游泳,第二句我们知道了他是用电话告知他在海军服役四年。
对于第一句我们知道了Bob会游泳的这个内容,在第二句中的两个信息“使用电话告知”和“在海军服役四年”中,他是否使用电话或任何其他通信媒介来传递信息并不重要。他在海军服役的事实是重要的信息,这是我们希望我们的模型在未来的计算中记住的。这是输入门的任务。

功能:量化输入所携带的新信息的重要性,选择性的记录到记忆单元中
LSTM_长短期记忆网络_总结学习_第7张图片

包含两个部分:

(1)、sigmoid层(输入门层):从当前输入判断哪些信息比较重要

i t = σ ( x t ⋅ U i + H t − 1 ⋅ W i ) (或者) i t = σ ( W i ⋅ [ H t − 1 , x t ] + b i ) i_t=\sigma(x_t \cdot U_i+H_{t-1} \cdot W_i)(或者)\\ i_t=\sigma(W_i\cdot [H_{t-1},x_t]+b_i) it=σ(xtUi+Ht1Wi)(或者)it=σ(Wi[Ht1,xt]+bi)
其中:

  • x t x_t xt:当前时间戳的输入
  • U i U_i Ui:权重矩阵
  • H t − 1 H_{t-1} Ht1:前一个时间戳的隐藏层状态
  • W i W_i Wi:权重矩阵
  • σ \sigma σ:限制 i t i_t it在0到1之间,0就代表信息很重要,1就代表信息不重要

(2)、tanh层:对提取的有效信息做出筛选

创建一个候选者向量 C ~ t \tilde C_t C~t
C ~ t = t a n h ( x t ⋅ U c + H t − 1 ⋅ W c ) (或者) C ~ t = t a n h ( W c ⋅ [ h t − 1 , x t ] + b c ) \tilde C_t=tanh(x_t \cdot U_c +H_{t-1} \cdot W_c)(或者)\\ \tilde C_t=tanh(W_c \cdot [h_{t-1},x_t]+b_c) C~t=tanh(xtUc+Ht1Wc)(或者)C~t=tanh(Wc[ht1,xt]+bc)
其中:

  • x t x_t xt:当前时间戳的输入
  • U c U_c Uc:权重矩阵
  • H t − 1 H_{t-1} Ht1:前一个时间戳的隐藏层状态
  • W c W_c Wc:权重矩阵
  • t a n h tanh tanh:限制 C ~ t \tilde C_t C~t在-1到1之间,如果 C ~ t < 0 \tilde C_t <0 C~t<0,那么将把信息从记忆单元中删掉,反之则加上这个信息。

(3)、更新记忆单元状态 Cell state

LSTM_长短期记忆网络_总结学习_第8张图片

  • f t f_t ft元素乘上上一个时间戳的记忆单元 C t − 1 C_{t-1} Ct1,如果值为0,那么记忆单元的值就要被丢弃。
  • i t i_t it元素乘上候选值 C ~ t \tilde C_t C~t,​如果值为0,代表记忆单元的值不大重要,就被丢弃掉
  • 最后将上面两个输出结果元素加,更新记忆单元状态 C t C_t Ct
    C t = f t ∗ C t − 1 + i t ∗ C ~ t C_t=f_t \ast C_{t-1}+i_t \ast \tilde C_t Ct=ftCt1+itC~t

f t f_t ft表示忘记上一次的信息 C t − 1 C_{t-1} Ct1的程度
i t i_t it表示要将候选值 C ~ t \tilde C_t C~t​加入的程度
这一步我们真正实现了移除哪些旧的信息(比如上一句的主语),增加哪些新信息(海军),最后得到了记忆单元的状态 C t C_t Ct

5、输出门 Output gate

Bob single-handedly fought the enemy and died for his country. For his contributions, brave______.”
在这项任务中,我们必须完成第二句话。现在,当我们看到brave这个词的那一刻,我们就知道我们在谈论一个人。在句子中,只有Bob是brave的,我们不能说enemy是勇敢的或country是勇敢的。因此,基于目前的推测,我们必须给出一个相关的词来填补空白。

功能:确定下一个隐藏状态的值
LSTM_长短期记忆网络_总结学习_第9张图片

(1)、sigmoid层(输出门层):决定哪些信息可以通过输出门

o t = σ ( x t ⋅ U o + H t − 1 ⋅ W o ) (或者) o t = σ ( W t ⋅ [ H t − 1 , x t ] + b t ) o_t=\sigma(x_t \cdot U_o+H_{t-1} \cdot W_o)(或者)\\ o_t=\sigma(W_t \cdot [H_{t-1},x_t]+b_t) ot=σ(xtUo+Ht1Wo)(或者)ot=σ(Wt[Ht1,xt]+bt)
其中:

  • x t x_t xt:当前时间戳的输入
  • U o U_o Uo:权重矩阵
  • H t − 1 H_{t-1} Ht1:前一个时间戳的隐藏层状态
  • W o W_o Wo:权重矩阵
  • σ \sigma σ:限制 o t o_t ot在0到1之间

(2)、tanh层:获得最终的输出

h t = o t ∗ t a n h ( C t ) h_t=o_t \ast tanh(C_t) ht=ottanh(Ct)

最后,新的记忆单元状态和新的隐藏层状态被转移到下一个时间戳。

6、LSTM的更直观的结构图

各个变量的关系图:
LSTM_长短期记忆网络_总结学习_第10张图片LSTM_长短期记忆网络_总结学习_第11张图片

补充知识:

(1)、tanh函数

LSTM_长短期记忆网络_总结学习_第12张图片

  • 非线性函数
  • 值在-1到1之间

(2)、sigmoid函数

LSTM_长短期记忆网络_总结学习_第13张图片

  • 非线性函数
  • 值在0到1之间
  • 它有助于网络更新或忘记数据。如果相乘结果为0,则认为该信息已被遗忘。类似地,如果值为1,则信息保持不变。

参考链接:
1、元素乘法
2、LSTM结构讲解
3、Introduction to LSTM Units in RNN
4、What is LSTM? Introduction to Long Short-Term Memory

你可能感兴趣的:(pytorch深度学习,lstm,学习,人工智能)