引入LSTM

尽管RNN被设计成可以利用历史的信息来辅助当前的决策,但是由于在上节提到的梯度消失或者梯度爆炸问题,RNN主要还是学习短期的依赖关系。所以RNN新的技术挑战就是-长期依赖。
长短时记忆网络(Long Short Term Memory Network, LSTM),是一种改进之后的循环神经网络,可以解决RNN无法处理长距离的依赖的问题.
LSTM在一个整体的循环网络结构中除了外部的RNN大循环,还要考虑自身单元“细胞”的自循环。

传统RNN每个模块内只是一个简单的tanh层,LSTM每个循环的模块内又有4层结构:3个sigmoid层,1个tanh层
其中图标

粉色的圆圈表示一个二目运算。两个箭头汇合成一个箭头表示2个向量首尾相连拼接在一起。一个箭头分叉成2个箭头表示一个数据被复制成2份,分发到不同的地方去。

LSTM内部结构

LSTM的关键是细胞状态CCC,一条水平线贯穿于图形的上方,这条线上只有些少量的线性操作,信息在上面流传很容易保持。如下图

CCC控制参数,决定什么样的信息要保留,什么样的信息需要遗忘。–需要一直维护更新
怎么样进行决策呢,就需要用到门:Gate
门:Gate:是一个使用sigmoid激活函数对输入信息进行控制的结构。使用门可以对通过这个结构的输入信息进行控制,使用激活函数后,全连神经网络输出一个0-1之间的数值。当sigmoid激活函数输出为1时,门完全打开,全部信息可以通过;sigmoid激活函数输出为0时,门完全闭合,任何信息无法通过。
第一层:遗忘门
根据当前的输入、上一时刻的输出和门的偏置项共同决定哪一部分记忆需要被遗忘。

ft=σ(Wf⋅[ht−1,xt]+bf)f_t=\sigma(W_f\cdot[h_{t-1},x_t]+b_f)ft​=σ(Wf​⋅[ht−1​,xt​]+bf​)
Ct−1⨀ftC_{t-1}\bigodot f_t \quad \quadCt−1​⨀ft​ 决定需要遗忘哪些信息

第二层:记忆门
为了使循环神经网络更有效的保存长期记忆,除了遗忘门,输入门也发挥至关重要的作用。不仅需要忘记部分之前的记忆,还需要补充新的记忆,就需要输入门来控制。

一个tanh层用来产生更新值的候选项CtC_tCt​,tanh的输出在[-1,1]上,说明细胞状态在某些维度上需要加强,在某些维度上需要减弱;还有一个sigmoid层(输入门层),它的输出值要乘到tanh层的输出上,起到一个缩放的作用,极端情况下sigmoid输出0说明相应维度上的细胞状态不需要更新。
it=σ(Wi⋅[ht−1,xt]+bi)i_t=\sigma(W_i\cdot[h_{t-1},x_t]+b_i)it​=σ(Wi​⋅[ht−1​,xt​]+bi​)
Ct~=tanh(WC⋅[[ht−1,xt]+bC)\tilde{C_t}=tanh(W_C\cdot[[h_{t-1},x_t]+b_C)Ct​~​=tanh(WC​⋅[[ht−1​,xt​]+bC​)

生成新的细胞状态
让旧的细胞状态Ct−1与ftC_{t-1}与f_tCt−1​与ft​(f是forget忘记门的意思)相乘来丢弃一部分信息,然后再加个需要更新的部分it∗Ct~i_t * \tilde{C_t}it​∗Ct​~​(i是input输入门的意思),这就生成了新的细胞状态CtC_tCt​。

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

输出层
输出值跟细胞状态有关,把CtC_tCt​输给一个tanh函数得到输出值的候选项。候选项中的哪些部分最终会被输出由一个sigmoid层来决定

ot=σ(Wo[ht−1,xt],+bo)o_t=\sigma(W_o[h_{t-1},x_t],+b_o)ot​=σ(Wo​[ht−1​,xt​],+bo​)
ht=ot∗tanh(Ct)h_t=o_t*tanh(C_t)ht​=ot​∗tanh(Ct​)

总结
\qquad\;\;输入门:it=σ(Wi⋅[ht−1,xt]+bi)i_t=\sigma(W_i\cdot[h_{t-1},x_t]+b_i)it​=σ(Wi​⋅[ht−1​,xt​]+bi​)
\quad\quad\;\;遗忘门:ft=σ(Wf⋅[ht−1,xt]+bf)f_t=\sigma(W_f\cdot[h_{t-1},x_t]+b_f)ft​=σ(Wf​⋅[ht−1​,xt​]+bf​)
\quad\quad\;\;输出门:ot=σ(Wo[ht−1,xt],+bo)o_t=\sigma(W_o[h_{t-1},x_t],+b_o)ot​=σ(Wo​[ht−1​,xt​],+bo​)

\;\;\;新记忆参数:Ct~=tanh(WC⋅[[ht−1,xt]+bC)\tilde{C_t}=tanh(W_C\cdot[[h_{t-1},x_t]+b_C)Ct​~​=tanh(WC​⋅[[ht−1​,xt​]+bC​)

最后记忆参数:Ct=ft∗Ct−1+it∗Ct~C_t=f_t*C_{t-1}+i_t*\tilde{C_t}Ct​=ft​∗Ct−1​+it​∗Ct​~​

最终输出状态:ht=ot∗tanh(Ct)h_t=o_t*tanh(C_t)ht​=ot​∗tanh(Ct​)

梯度消失问题

RNN 通过hth_tht​来保存和传递信息,之前分析了如果时间间隔较大容易产生梯度消失的问题。
LSTM 则通过记忆单元CtC_tCt​ 来传递信息,通过iti_tit​和ftf_tft​ 的调控,CtC_tCt​ 可以在 t 时刻捕捉到某个关键信息,并有能力将此关键信息保存一定的时间间隔。
如果没有遗忘门,Ct=Ct−1+it⨀Ct~C_t=C_{t-1}+i_t\bigodot\tilde{C_t}Ct​=Ct−1​+it​⨀Ct​~​,这样的话∂Ct∂Ct−1\frac{\partial C_t}{\partial C_{t-1}}∂Ct−1​∂Ct​​恒为1,这样CtC_tCt​会不断增大,容易饱和,从而降低模型的性能。引入遗忘门后,∂Ct∂Ct−1=ft\frac{\partial C_t}{\partial C_{t-1}}=f_t∂Ct−1​∂Ct​​=ft​,当然如果多个ftf_tft​连乘同样会导致梯度消失(ft∈[0,1]f_t\in[0,1]ft​∈[0,1])。但是LSTM的技巧就是将遗忘门的bias设置为正数,(例如 1 或者 5,如 tensorflow 中的默认值就是 1.0),这样一来模型刚开始训练时 forget gate 的值都接近 1,不会发生梯度消失 (反之若 forget gate 的初始值过小则意味着前一时刻的大部分信息都丢失了,这样很难捕捉到长距离依赖关系)。 随着训练过程的进行,forget gate 就不再恒为 1 了。不过,一个训好的模型里各个 gate 值往往不是在 [0, 1] 这个区间里,而是要么 0 要么 1,很少有类似 0.5 这样的中间值,其实相当于一个二元的开关。

假如在某个序列里,forget gate 全是 1,那么梯度不会消失;某一个 forget gate 是 0,模型选择遗忘上一时刻的信息。

参考:
https://www.cnblogs.com/zhangchaoyang/articles/6684906.html
https://zhuanlan.zhihu.com/p/60915302

RNN学习笔记3-LSTM相关推荐

  1. RNN学习笔记(一)-简介及BPTT RTRL及Hybrid(FP/BPTT)算法

    RNN学习笔记(一)-简介及BPTT RTRL及Hybrid(FP/BPTT)算法 本文假设读者已经熟悉了常规的神经网络,并且了解了BP算法,如果还不了解的,参见UFIDL的教程. - 1.RNN结构 ...

  2. 深度学习笔记:LSTM

    Recurrent Neural Networks 人类并不是每时每刻都从一片空白的大脑开始他们的思考.在你阅读这篇文章时候,你都是基于自己已经拥有的对先前所见词的理解来推断当前词的真实含义.我们不会 ...

  3. 神经网络学习笔记3——LSTM长短期记忆网络

    目录 1.循环神经网络 1.1循环神经网络大致结构 1.2延时神经网络(Time Delay Neural Network,TDNN) 1.3按时间展开 1.4反向传播 1.5 梯度消失,梯度爆炸 2 ...

  4. 深度学习笔记之lSTM网络

    解决梯度爆炸问题可以利用LSTM网络 也可以用clip gradients 算法https://blog.csdn.net/jiachen0212/article/details/80285648 相 ...

  5. 学习笔记CB012: LSTM 简单实现、完整实现、torch、小说训练word2vec lstm机器人

    摘要: 真正掌握一种算法,最实际的方法,完全手写出来. LSTM(Long Short Tem Memory)特殊递归神经网络,神经元保存历史记忆,解决自然语言处理统计方法只能考虑最近n个词语而忽略更 ...

  6. 【学习笔记】LSTM 李弘毅

    1. LSTM简介 x 输入顺序不同,得到的结果不同 核心:memory 2. LSTM training 3. LSTM和RNN的比较(为什么说LSTM可以解决RNN中的梯度消失问题?) RNN在每 ...

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

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

  8. 深度学习笔记——循环神经网络RNN/LSTM

    原文来自知乎专栏NLP进阶之路,作者韦伟. 以下文章是摘录了原文部分内容的学习笔记,侵删. 循环神经网络(Rerrent Neural Network) RNN是神经网络的一种,RNN对具有序列特性的 ...

  9. 深度学习与智能故障诊断学习笔记(三)——RNN与LSTM推导详解

    1.RNN 1.1网络结构 标准神经网络的输入输出在不同例子中可能有不同的长度,在学习中并不共享从不同位置上学到的特征.因为标准神经网络的训练集是稳定的,即所有的特征域表达的内容是同一性质的,一旦交换 ...

最新文章

  1. Kotlin极简教程:第7章 面向对象编程
  2. number类型的数组
  3. Flickr 的开发者的 Web 应用优化技巧(转)
  4. ACM_逆序数(归并排序)
  5. 在 ASP.NET Core 中执行租户服务
  6. JAVA中动态编译的简单使用
  7. excel转txt工具
  8. conv2d 公式_Pytorch 从0开始学(6)——Conv2d 详解
  9. json标签批量转为xml标签(VOC数据集制作)
  10. 输入一个整数,计算它各位上数字的和。(注意:是任意位的整数)
  11. Silvaco TCAD介绍
  12. ITIL工具系列之Tivoli
  13. java word 水印_Java 添加水印(文本水印、图片水印)到Word文档
  14. 超级实用案例,Python 提取 PDF 指定内容生成新PDF
  15. 台式电脑如何设置此计算机,台式电脑怎么设置无线网络
  16. 2020-10-18大二第七周
  17. VScode 配置豆沙绿背景色(source insight同款背景色)
  18. linux对4T硬盘进行分区
  19. PIC单片机之I/O控制
  20. 高级会计师评审需要职称计算机哪种考试级别,会计高级职称考哪些科目 评审条件是什么...

热门文章

  1. 【构建】react打造你的第一个Bilibili首页开发项目
  2. Window git 命令设置alias快捷
  3. 中国银行 CA 密码无法输入(红叉)
  4. mywallop、orkut、gmail的邀请
  5. html css好看的渐变颜色
  6. 对话驴评网CEO崔继蓉:在线旅游的前途在移动端
  7. 2022年9月青少年软件编程(图形化)等级考试试卷--三级--数星星
  8. 算法表示法之大O表示法
  9. 告别windows、拥抱linux,ThinkPad E485安装XUbuntu实录
  10. 《剑来》语句摘录(三)