RNN学习笔记(一):长短时记忆网络(LSTM)
一、前言
在图像处理领域,卷积神经网络(Convolution Nerual Network,CNN)凭借其强大的性能取得了广泛的应用。作为一种前馈网络,CNN中各输入之间是相互独立的,每层神经元的信号只能向下一层传播,同一卷积层对不同通道信息的提取是独立的。因此,CNN擅长于提取图像中包含的空间特征,但却不能够有效处理时间序列数据(语音、文本等)。
时序数据往往包含以下特性:
- 输入的序列数据长度是不固定(如机器翻译,句子长度不固定)
- 不同时刻的数据存在相互影响(如前一时刻的事实会影响后续时刻的推断)
拿到一个小球,我们并不知道它下一步会往哪一个方向运动,到当我们获取了小球前几个时刻的位置,我们就能推断出小球下一步的运动方向。前一时刻的信息影响了后续时刻的推测,不同时刻下小球的位置信息就是时间序列数据的一种。
二、循环神经网络
与前馈网络不同,循环神经网络(Recurrent Nerual Network,RNN)在隐藏层中带有自反馈的神经元对前面的信息进行记忆并应用于当前输出的计算中,即神经元在接收当前数据输入的同时,也接收了上一个隐藏层的输出结果,一直循环直到所有数据全部输入。RNN能够利用历史信息来辅助当前的决策,它也可以根据任务的不同,灵活地改变输出的个数。
- one to one:一个输入对应一个输出;
- one to many:一个输入对应许多输出,比如图像理解,输入一张图像,让机器试着描述图像内容;
- many to one:语句情感分析,输入句子,对语句中所包含的情感进行分类;
- many to many:机器翻译。
在RNN中,隐藏层状态(Hidden State)通俗的理解就是隐藏层神经元将输入计算后的输出值,这一输出值不仅是当前时刻神经元的输出,也是后一时刻神经元的输入。
其中,ht 为t时刻的隐藏层状态,Xt 为时间序列数据,φ为激活函数(如双曲正切函数、sigmoid函数等),U和W分别为在前一个时刻隐藏层和在当前时刻输入的系数矩阵。
整个RNN的计算图如下图所示:
参数共享和循环反馈的设计机制,使得 RNN 模型理论上能够处理任意长度的时间序列,因此RNN非常适用于时间序列数据的分析应用中。理论上,RNN可以无限拓展他的隐藏层,去学习更长序列数据。但是过多的层数不仅会使模型训练速度变慢,而且也会带来“梯度消失”或“梯度爆炸”的问题,造成 RNN 无法获取长时间依赖信息,从而丧失了利用长距离历史信息的能力。
三、长期依赖(Long-Term Dependencies)的问题
对于间隔较长的时间序列数据,在实际应用中RNN往往在学习长距离历史信息表现欠佳。
以下面这个例子来说,“The clouds are in the ”最后我们要模型去输出这个词,历史信息告诉模型前面出现了“clouds”,那么模型就可以根据历史信息来推断出要输出“sky”。因为这里的相关信息和预测词的位置之间只有非常小的间隔,如下图所示:
但是在现实应用不仅仅有这种简单的预测任务,还存在大量复杂的时间序列数据,这些数据需要模型去记忆更早的历史信息去完成推断。比如“I grew up in France,...and I speak fluent ”,要去推测这个词,模型需要记忆“France”这一历史信息,但它与输出位置间隔太远,由于“梯度消失”的问题,这么远的历史信息很难被有效传递。
因此,随着间隔的增大,传统RNN在面对这样时间序列数据的建模效果往往差强人意。目前,存在一定方法能够缓解“梯度消失”来解决长期依赖问题,如
- 用RELU函数替换sigmoid函数作为激活函数
- 权重初始化(权重系数矩阵初始化为单位矩阵,偏置系数矩阵初始化为0)
- 使用带有门控(gate)的更复杂循环单元去记录长期历史信息(如LSTM,GRU等)
四、长短时记忆网络(Long Short-Term Memory Network)
LSTM就是为了解决间隔较远的历史信息无法有效传递这一问题,它是利用门控单元(Gated Cell)来控制长期历史信息的传递过程。
门控(Gate)这一概念是指控制循环单元内信息的增加或删除的一种结构,它选择性地让信息通过,例如下图,一个简单的sigmoid函数加哈达玛积即可实现这样一个控制信息传递的过程,sigmoid输出为0表示完全舍弃,输出为1表示完全通过。
LSTM就是靠着sigmoid函数来控制信息的传递过程,LSTM循环单元中一般包含三个门控单元,即遗忘门、输入门和输出门。
不同于传统RNN,LSTM在每个循环单元中添加了单元状态(Cell State)来选择性地记忆过去传递的信息。一个循环单元不仅要接收上一次时间步骤传递出的Hidden State,也要接收传递出的Cell State。通俗的理解,Hidden State是到目前为止我们所看到的总体信息,而Cell State是历史信息的选择性记忆。
LSTM的工作方式可以抽象地分为以下四步:
- 遗忘(Forget)
- 存储(Store)
- 更新(Update)
- 输出(Output)
1、遗忘(Forget)
接收上一时间步骤的Hidden State ht-1 和当前输入数据Xt,将他们计算后的值通过sigmoid激活函数,计算遗忘门的信息,来确定需要遗忘的信息。
2、存储(Store)
计算输入门的值 it 并将其与整体信息 St 计算哈达玛积。在这一步,之所以要在输入门的值再与整体信息 St 计算哈达玛积的原因是,门控结构(Gate)输出的介于0-1之间的数字,相当于图像的掩膜(mask),与整体信息结合在一起才能确定输入的信息。
3、更新(Update)
单元状态(Cell State)表示的是到t时刻,循环单元选择性记忆的信息。对它进行更新就需要遗忘 t-1时刻的单元状态Ct-1,并加上当前时刻输入信息,这样更新Cell State。
4、输出(output)
到了输出这一步,循环单元计算输出门的值,并将当前时刻下已经选择性记忆的信息 Ct 拿出来做“掩膜”,来得到输出的Hidden State Ht
四、小结
学习LSTM的关键在于理解单元状态(Cell State)的意义。传统RNN中的Hidden state保留的是到当前时刻为止所积攒的所有信息,而Cell State保留的是经历过遗忘和输入的信息。LSTM有效地解决了 RNN 模型训练时出现的梯度“爆炸”和梯度“消失”问题在很多应用中都取得了不错的效果。
参考资料
https://www.quora.com/How-is-the-hidden-state-h-different-from-the-memory-c-in-an-LSTM-cell
MIT.Introduction to Deep Learning:Deep Sequence Modeling,2020
RNN学习笔记(一):长短时记忆网络(LSTM)的更多相关文章
- (转)零基础入门深度学习(6) - 长短时记忆网络(LSTM)
无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的技术,会不会感觉马上就o ...
- 长短时记忆网络(LSTM)
长短时记忆网络 循环神经网络很难训练的原因导致它的实际应用中很处理长距离的依赖.本文将介绍改进后的循环神经网络:长短时记忆网络(Long Short Term Memory Network, LSTM ...
- 零基础入门深度学习(6) - 长短时记忆网络(LSTM)
代码: def forward(self, x): ''' 根据式1-式6进行前向计算 ''' self.times += 1 # 遗忘门 fg = self.calc_gate(x, self.Wf ...
- 长短时记忆网络LSTM和条件随机场crf
LSTM 原理 CRF 原理 给定一组输入随机变量条件下另一组输出随机变量的条件概率分布模型.假设输出随机变量构成马尔科夫随机场(概率无向图模型)在标注问题应用中,简化成线性链条件随机场,对数线性判别 ...
- 机器学习与Tensorflow(5)——循环神经网络、长短时记忆网络
1.循环神经网络的标准模型 前馈神经网络能够用来建立数据之间的映射关系,但是不能用来分析过去信号的时间依赖关系,而且要求输入样本的长度固定 循环神经网络是一种在前馈神经网络中增加了分亏链接的神经网络, ...
- LSTM——长短时记忆网络
LSTM(Long Short-term Memory),长短时记忆网络是1997年Hochreiter和Schmidhuber为了解决预测位置与相关信息之间的间隔增大或者复杂语言场景中,有用信息间隔 ...
- javaSE学习笔记(16)---网络编程
javaSE学习笔记(16)---网络编程 基本概念 如今,计算机已经成为人们学习.工作.生活必不可少的工具.我们利用计算机可以和亲朋好友网上聊天,也可以玩网游.发邮件等等,这些功能实现都离不开计算机 ...
- 大数据学习笔记——Java篇之网络编程基础
Java网络编程学习笔记 1. 网络编程基础知识 1.1 网络分层图 网络分层分为两种模型:OSI模型以及TCP/IP网络模型,前者模型分为7层,是一个理论的,参考的模型:后者为实际应用的模型,具体对 ...
- 学习笔记CB010:递归神经网络、LSTM、自动抓取字幕
递归神经网络可存储记忆神经网络,LSTM是其中一种,在NLP领域应用效果不错. 递归神经网络(RNN),时间递归神经网络(recurrent neural network),结构递归神经网络(recu ...
随机推荐
- logback日志大量写磁盘导致微服务不能正常响应的解决方案
最近几天,遇到一个莫名其妙的问题,每天几乎同一时段微服务自己跑着跑着就假死了,过几个小时就又自动恢复了. 通过对定时任务.网卡.内存.磁盘.业务日志的排查分析,只有磁盘的IO在假死前一段时间偏高,经查 ...
- PolarDB阿里初赛问题记录 PolarDB 阿里 中间件 比赛 性能 工程手册
Contents 这篇纯碎是碎碎念记录. 每个value都是4KB,总共最多会写6400W个value,算下来就是64 * 1000 * 1000 * 4 * 1024 Bytes ≈ 256G. 每 ...
- 四剑客(sed)
一. sed sed简介: 用Linux环境中的编辑器程序来编辑文本文件.这些编辑器可以让你用简单命令或鼠标单击来轻松地处理文本文件中的文本.但有时候,你会发现需要自动处理文本文件,可你又不想动用全副 ...
- Android7.0 USBCamera设备/dev/video0无读权限
Android7.0的系统,具备root权限,执行 # adb shell # su # chmod 777 /dev/video0 在5.0的系统中可以预览图像,7.0返回无读权限 File fil ...
- 疯狂收集个人信息的谷歌,为何不像Facebook那样让人毛骨悚然?
自从Facebook信息泄露丑闻事件发生后,互联网上的个人隐私及安全成为大众的"心病".而大众最讨厌的,是互联网企业收集自己的信息,因此都在积极讨伐这种行为.但他们却忘了,收集用户 ...
- AUTO Uninstaller 常见问题
小伙伴是不是遇到 CAD/3dmax/maya/Revit/Inventor 安装失败或者安装不了的问题了呢?AUTODESK系列软件着实令人头疼,CAD/3dmax/maya/Revit/Inven ...
- HTML name、id、class 的区别
转载: 在一个页面中,有许多的控件(元素或标签).为了更方便的操作这些标签,就需要给这些标签标识一个身份牌. 目录 1. name :指定标签的名称. 2. id :指定标签的唯一标识. 3. cla ...
- Linux Ubuntu 常见的压缩命令
小知识: Linux上常见的压缩命令就是gzip与bzip2,compress已经不再流行.gzip是有GNU计划所开发出来的压缩命令,该命令已经替换了compress命令.后来GNU又开发出bzip ...
- Monkey命令参数介绍
1) 参数: -p 参数-p用于约束限制,用此参数指定一个或多个包(Package,即App).指定 包之后,Monkey将只允许系统启动指定的APP.如果不指定包,Monkey将允许系统启动 ...
- CSAPC08台湾邀请赛_T1_skyline
题目链接:CSAPC08台湾邀请赛_T1_skyline 题目描述 一座山的山稜线由许多片段的45度斜坡构成,每一个片段不是上坡就是下坡. / / * / / * / // / // / 在我 ...