导航

  • LSTM原理
  • GRU原理
  • Seq2Seq架构
    • 编码信息损失
  • 参考资料

LSTM原理

一般RNN中仅有一个隐藏状态单元hth_tht​,且不同时刻的隐藏状态单元的参数是共享的,这种结构导致了RNN存在长期依赖问题,只能对短期输入敏感.
LSTM在普通RNN上加入了元胞状态单元ctc_tct​,在不同的时刻有着可变的连接权重,ctc_tct​通过对hth_tht​的调节形成长短期记忆.

LSTM引入了门控单元,对于每个时刻ttt,LSTM有输入门iti_tit​,遗忘门ftf_tft​和输出门oto_tot​等3个门控单元,每个门控单元的输入包括当前时刻的序列信息xtx_txt​和上一时刻的隐藏状态单元ht−1h_{t-1}ht−1​,计算方程为
{it=σ(Wixt+Uiht−1+bi)ft=σ(Wfxt+Ufht−1+bf)ot=σ(W0xt+Uoht−1+b0)\left\{ \begin{aligned} &i_t=\sigma(W_ix_t+U_ih_{t-1}+b_i)\\ &f_t=\sigma(W_fx_t+U_fh_{t-1}+b_f)\\ &o_t=\sigma(W_0x_t+U_oh_{t-1}+b_0) \end{aligned} \right. ⎩⎪⎨⎪⎧​​it​=σ(Wi​xt​+Ui​ht−1​+bi​)ft​=σ(Wf​xt​+Uf​ht−1​+bf​)ot​=σ(W0​xt​+Uo​ht−1​+b0​)​
3个门控单元的计算方式均为全连接层,区别仅在于权重矩阵和偏置,激活函数σ(⋅)\sigma(\cdot)σ(⋅)一般使用sigmoid函数,取值范围为[0,1][0, 1][0,1],将门控单元与信号数据做逐元素相乘,可以控制信号通过门控后要保留的信息量,可以设置当门控单元状态为0时,信号被全部丢弃;当状态为1时,信号被全部保留;而当状态在[0,1][0, 1][0,1]时,部分信号被保留.

从示意图中可以看出,元胞状态单元从上一时刻的ct−1c_{t-1}ct−1​到当前时刻的ctc_tct​转移是由输入门和遗忘门共同控制的,输入门决定了当前时刻输入信息c~(t)\tilde{c}(t)c~(t)有多少被吸收,遗忘门决定了上一时刻元胞状态单元ct−1c_{t-1}ct−1​有多少未被遗忘,最终的元胞状态单元ctc_tct​由两个门控处理后的信号综合产生.
c~t=tanh⁡(Wcxt+Ucht−1+bc)ct=ft⊙ct−1+it⊙c~t\begin{aligned} &\tilde{c}_t=\tanh(W_cx_t+U_ch_{t-1}+b_c)\\ &c_t=f_t\odot c_{t-1}+i_t\odot\tilde{c}_t \end{aligned} ​c~t​=tanh(Wc​xt​+Uc​ht−1​+bc​)ct​=ft​⊙ct−1​+it​⊙c~t​​
其中,⊙\odot⊙表示逐元素点乘操作,LSTM的隐藏状态单元hth_tht​则由输出门和ctc_tct​共同决定
ht=ot⊙tanh⁡(ct)h_t=o_t\odot\tanh(c_t) ht​=ot​⊙tanh(ct​)
可以看出,在LSTM中,不仅隐藏单元ht−1h_{t-1}ht−1​和hth_tht​之间存在连接,ct−1c_{t-1}ct−1​和ctc_tct​之间也存在线性自循环的关系,这种线性自循环是一种滑动处理信息的机制,当门控单元开启时,记住过去的信息;当门控单元关闭时,丢弃过去的信息,这种线性自循环的机制使得LSTM可以解决RNN中长期依赖的问题.

GRU原理

考虑设计一种仅有两个门控单元的RNN,其中一个门控单元控制短期记忆,另一个门控单元控制长期记忆,Kyunghyun Cho等提出的GRU模型使用更少的参数实现了LSTM的功能.

LSTM有两个状态单元hth_tht​和ctc_tct​,GRU使用了一个状态单元hth_tht​,两个门控单元,重置门rtr_trt​和更新门ztz_tzt​,每个门控单元的输入包括当前时刻的序列信息xtx_txt​和上一时刻的隐藏状态单元ht−1h_{t-1}ht−1​,计算方程为
rt=σ(Wrxt+Urht−1)zt=σ(Wzxt+Uzht−1)\begin{aligned} &r_t=\sigma(W_rx_t+U_rh_{t-1})\\ &z_t=\sigma(W_zx_t+U_zh_{t-1}) \end{aligned} ​rt​=σ(Wr​xt​+Ur​ht−1​)zt​=σ(Wz​xt​+Uz​ht−1​)​
在GRU中,重置门决定之前的隐藏状态单元是否被忽略,更新门则控制当前隐藏状态单元是否被新的隐藏状态更新.
h~t=tanh⁡(Whxt+Uh(rt⊙ht−1))ht=(1−zt)ht−1⏟上一时刻保留信息+zth~t⏟当前时刻记忆下的信息\begin{aligned} &\tilde{h}_t=\tanh(W_hx_t+U_h(r_t\odot h_{t-1}))\\ &h_t=\underbrace{(1-z_t)h_{t-1}}_{\text{上一时刻保留信息}}+\underbrace{z_t\tilde{h}_t}_{\text{当前时刻记忆下的信息}} \end{aligned} ​h~t​=tanh(Wh​xt​+Uh​(rt​⊙ht−1​))ht​=上一时刻保留信息(1−zt​)ht−1​​​+当前时刻记忆下的信息zt​h~t​​​​
可以发现,遗忘和记忆的权重设定为互补关系.

Seq2Seq架构

在Seq2Seq中,由于输入序列与输出序列不是等长的,所以对整个序列的处理分为理解(编码)和翻译(解码)两个步骤,并且编码器和解码器可以在两个不同的RNN上并行实现.

Seq2Seq采用一个固定尺寸的状态向量CCC作为编码器与解码器之间的桥梁,编码器可以是一个简单的RNN,输入序列为X=(x1,x2,…,xT)X=(x_1, x_2, \dots, x_T)X=(x1​,x2​,…,xT​),其隐藏状态hth_tht​的计算公式为
ht=f(ht−1,xt)h_t=f(h_{t-1}, x_t) ht​=f(ht−1​,xt​)
其中f(⋅)f(\cdot)f(⋅)是非线性激活函数,将最后时刻的隐藏状态hTh_ThT​作为状态向量输入到解码器.
解码器根据状态向量CCC生成长度可变的解码序列Y=(y1,y2,…,yT′)Y=(y_1, y_2, \dots, y_{T'})Y=(y1​,y2​,…,yT′​),解码器同样可以使用一个简单的RNN实现,其隐藏状态hth_tht​计算公式为
ht=f(ht−1,yt−1,C)h_t=f(h_{t-1}, y_{t-1},C) ht​=f(ht−1​,yt−1​,C)
其中,yt−1y_{t-1}yt−1​是上一时刻的输出,f(⋅)f(\cdot)f(⋅)是非线性激活函数,解码器的输出由如下公式确定
P(yt∣yt−1,yt−2,…,yt,C)=g(ht,yt−1,C)P(y_t\mid y_{t-1}, y_{t-2}, \dots, y_t, C)=g(h_t, y_{t-1}, C) P(yt​∣yt−1​,yt−2​,…,yt​,C)=g(ht​,yt−1​,C)
其中g(⋅)g(\cdot)g(⋅)会产生一个概率分布,解码器工作流程如图所示

或者使用一种更加简单的方式实现解码器,仅在初始时刻需要状态向量CCC,其他时刻仅接受隐藏状态和上一时刻的输出信息
P(yt)=g(ht,yt−1)P(y_t)=g(h_t, y_{t-1}) P(yt​)=g(ht​,yt−1​)

在训练阶段,需要让模型输出的解码序列尽可能正确,可以通过MLE方法配合贪心算法实现
max⁡θ1N∑n=1Nlog⁡pθ(Yn∣Xn)\max_\theta\frac{1}{N}\sum_{n=1}^N\log p_\theta(Y_n\mid X_n) θmax​N1​n=1∑N​logpθ​(Yn​∣Xn​)
解码器每次根据当前状态和已解码序列,选择出最佳解码结果,直到算法收到终止信号.

编码信息损失

由于Seq2Seq中只用固定大小的状态向量连接编码模块和解码模块,这就要求编码器将整个输入序列的信息压缩到状态向量中,这个过程存在编码损失,一般的解决方案有序列翻转法.
Bahdanau(2014)提出了注意力机制模型,将状态向量CCC设置为动态,即
P(yt)=g(ct,yt,…,yt−1)P(y_t)=g(c_t, y_t, \dots, y_{t-1}) P(yt​)=g(ct​,yt​,…,yt−1​)
其中,ctc_tct​是专门针对ttt时刻的状态向量.

参考资料

Understanding LSTM Networks
百面深度学习 中国工信出版集团 葫芦娃
LSTM和GRU讲解
Seq2Seq学习笔记

【DL】长短期记忆网络(LSTM)相关推荐

  1. 1014长短期记忆网络(LSTM)

    长短期记忆网络(LSTM) 长期以来,隐变量模型存在着长期信息保存和短期输入缺失的问题,解决这个问题最早的方法之一就是 LSTM 发明于90年代 使用的效果和 GRU 相差不大,但是使用的东西更加复杂 ...

  2. 简单介绍长短期记忆网络 - LSTM

    文章目录 一.引言 1.1 什么是LSTM 二.循环神经网络RNN 2.1 为什么需要RNN 三.长短时记忆神经网络LSTM 3.1 为什么需要LSTM 3.2 LSTM结构分析 3.3 LSTM背后 ...

  3. MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测 股价预测 matlab实战 数据分析 数据可视化 时序数据预测 变种RNN 股票预测

    MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测 股价预测 matlab实战 数据分析 数据可视化 时序数据预测 变种RNN 股票预测 摘要 近些年,随着计算机技术的不断发展,神 ...

  4. 『NLP学习笔记』长短期记忆网络LSTM介绍

    长短期记忆网络LSTM介绍 文章目录 一. 循环神经网络 二. 长期依赖问题 三. LSTM 网络 四. LSTM 背后的核心理念 4.1 忘记门 4.2 输入门 4.3 输出门 五. LSTM总结( ...

  5. 基于长短期记忆网络(LSTM)对股票价格的涨跌幅度进行预测

    完整代码:https://download.csdn.net/download/qq_38735017/87536579 为对股票价格的涨跌幅度进行预测,本文使用了基于长短期记忆网络(LSTM)的方法 ...

  6. 长短期记忆网络(LSTM)学习笔记

    文章目录 0 前言 1 LSTM与RNN的异同 2 LSTM结构细节 2.1 细胞状态 2.2 遗忘门 2.3 输入门 2.4 输出门 3 总结 4 LSTM的变体 4.1 Adding " ...

  7. 长短期记忆网络LSTM

    1. LSTM是循环神经网络的一个变体可以有效的解决简单循环神经网络的梯度消失和梯度爆炸的问题. 2. 改进方面: 新的内部状态 Ct专门进行线性的循环信息传递,同时(非线性的)输出信息给隐藏层的外部 ...

  8. 长短期记忆网络 LSTM

    这里写目录标题 1. LSTM介绍 1.1 什么是LSTM 1.2 LSTM相较于RNN的优势 1.3 LSTM的结构图 1.3.1 LSTM的核心思想 1.3.2 LSTM的遗忘门 1.3.3 LS ...

  9. keras实现简单lstm_四十二.长短期记忆网络(LSTM)过程和keras实现股票预测

    一.概述 传统循环网络RNN可以通过记忆体实现短期记忆进行连续数据的预测,但是,当连续数据的序列边长时,会使展开时间步过长,在反向传播更新参数的过程中,梯度要按时间步连续相乘,会导致梯度消失或者梯度爆 ...

  10. 白话机器学习-长短期记忆网络LSTM

    一 背景 既然有了RNN,为何又需要LSTM呢? 循环神经网络RNN的网络结构使得它可以使用历史信息来帮助当前的决策.例如使用之前出现的单词来加强对当前文字的理解.可以解决传统神经网络模型不能充分利用 ...

最新文章

  1. Neural-RGBD: 从单目视频序列中估计深度及其不确定度
  2. python3.x下 smtp发送html邮件和附件
  3. 优化方法的基本认识 overview
  4. 20160626001 O2O Website
  5. bash/shell编程学习(2)
  6. C++中4种方式把字符串和数字连接起来(转载)
  7. 应用时间序列分析第四章课后习题(R语言实现)
  8. centos php ioncube_如何在CentOS 7云服务器上安装ionCube?
  9. 100~200以内素数
  10. css水波纹-雷达扩散效果
  11. matlab 矩阵 三维矩阵相乘,将三维矩阵与二维矩阵相乘
  12. linux 服务器共享文件客户端查看,在Linux下查看共享文件夹
  13. 智能汽车HMI“火了”
  14. Google网页加速器的工作原理
  15. A example of Maximum A Posteriori (MAP) estimation
  16. 对计算机辅助英语的看法,浅谈利用计算机辅助英语语言测试
  17. 随身WiFi加风扇,永久读自己的卡上网,多图详细教程
  18. 推荐几款App跨平台开发工具
  19. Ubuntu 15.10 搜狗搜狗输入法崩溃解决方法
  20. Axure 使用心得分享

热门文章

  1. Oracle选择填空题中英文,oracle中英文分开排序
  2. BugkuCTF 游戏过关
  3. 如何使用字体图标——icomoon使用详细介绍
  4. VUE监听页面刷新和关闭事件
  5. java计算器rmi_用RMI计算Pi
  6. 山顶应试流V1.0——中国应试教育备考方法
  7. iOS 全屏侧滑手势/UIScrollView/UISlider间滑动手势冲突
  8. aws lambda_Google Cloud Run与AWS Lambda
  9. 小程序从申请到发布的步骤
  10. Arduino融资3200万美元,进军企业市场