Pytorch学习笔记10----LSTM循环神经网络原理
1.RNN的构造过程
RNN是一种特殊的神经网路结构,其本身是包含循环的网络,允许信息在神经元之间传递,如下图所示:
图示是一个RNN结构示意图,图中的 表示神经网络模型,
表示模型的输入信号,
表示模型的输出信号,如果没有
的输出信号传递到
的那个箭头, 这个网络模型与普通的神经网络结构无异。那么这个箭头做了什么事情呢?它允许
将信息传递给
,神经网络将自己的输出作为输入了!
关键在于输入信号是一个时间序列,跟时间 有关。也就是说,在
时刻,输入信号
作为神经网络
的输入,
的输出分流为两部分,一部分输出给
,一部分作为一个隐藏的信号流被输入到
中,在下一次时刻输入信号
时,这部分隐藏的信号流也作为输入信号输入到了
中。此时神经网络
就同时接收了
时刻和
时刻的信号输入了,此时的输出信号又将被传递到下一时刻的
中。如果我们把上面那个图根据时间
展开来看,就是:
循环神经网络的记忆性:
普通的神经网络:当我们输入一张卡比兽被喷水的图片时,神经网络会认出卡比兽和水,推断出卡比兽有60%的概率在洗澡,30%的概率在喝水,10%的概率被攻击。
循环神经网络:在隐藏状态(Hidden State)为“战斗场景开始”的情况下输入神奇宝贝喷水进攻图,RNN能够根据“嘴中喷水”的场景推测图一神奇宝贝是在进攻的概率为85%。之后我们在记忆为“在战斗、敌人在攻击和敌人是水性攻击”三个条件下输入图片二,RNN就会分析出“卡比兽被攻击”是概率最大的情况。
2.长短时间记忆网络LSTM概述
长短期记忆(Long Short Term Memory,LSTM)网络是一种特殊的RNN模型,其特殊的结构设计使得它可以避免长期依赖问题,记住很早时刻的信息是LSTM的默认行为,而不需要专门为此付出很大代价。
粗看起来,这个结构有点复杂,不过不用担心,接下来我们会慢慢解释。在解释这个神经网络层时我们先来认识一些基本的模块表示方法。图中的模块分为以下几种:
- 黄色方块:表示一个神经网络层(Neural Network Layer);
- 粉色圆圈:表示按位操作或逐点操作(pointwise operation),例如向量加和、向量乘积等;
- 单箭头:表示信号传递(向量传递);
- 合流箭头:表示两个信号的连接(向量拼接);
- 分流箭头:表示信号被复制后传递到2个不同的地方。
3.LSTM的基本思想
LSTM的关键是细胞状态(直译:cell state),表示为 ,用来保存当前LSTM的状态信息并传递到下一时刻的LSTM中,也就是RNN中那根“自循环”的箭头。当前的LSTM接收来自上一个时刻的细胞状态
,并与当前LSTM接收的信号输入
共同作用产生当前LSTM的细胞状态
,具体的作用方式下面将详细介绍。
在LSTM中,采用专门设计的“门”来引入或者去除细胞状态 中的信息。门是一种让信息选择性通过的方法。有的门跟信号处理中的滤波器有点类似,允许信号部分通过或者通过时被门加工了;有的门也跟数字电路中的逻辑门类似,允许信号通过或者不通过。这里所采用的门包含一个
神经网络层和一个按位的乘法操作,如下图所示:
其中黄色方块表示神经网络层,粉色圆圈表示按位乘法操作。
神经网络层可以将输入信号转换为
到
之间的数值,用来描述有多少量的输入信号可以通过。
表示“不允许任何量通过”,
表示“允许所有量通过”。
神经网络层起到类似下图的
函数所示的作用:
其中,横轴表示输入信号,纵轴表示经过sigmod函数以后的输出信号。
LSTM主要包括三个不同的门结构:遗忘门、记忆门和输出门。这三个门用来控制LSTM的信息保留和传递,最终反映到细胞状态 和输出信号
。如下图所示:
图中标示了LSTM中各个门的构成情况和相互之间的关系,其中:
- 遗忘门由一个
神经网络层和一个按位乘操作构成;
- 记忆门由输入门(input gate)与tanh神经网络层和一个按位乘操作构成;
- 输出门(output gate)与
函数(注意:这里不是
神经网络层)以及按位乘操作共同作用将细胞状态和输入信号传递到输出端。
4.LSTM门讲解
(1)遗忘门
顾名思义,遗忘门的作用就是用来“忘记”信息的。在LSTM的使用过程中,有一些信息不是必要的,因此遗忘门的作用就是用来选择这些信息并“忘记”它们。遗忘门决定了细胞状态 中的哪些信息将被遗忘。那么遗忘门的工作原理是什么呢?看下面这张图。
左边高亮的结构就是遗忘门了,包含一个神经网络层(黄色方框,神经网络参数为
),接收
时刻的输入信号
和
时刻LSTM的上一个输出信号
,这两个信号进行拼接以后共同输入到
神经网络层中,然后输出信号
,
是一个
到
之间的数值,并与
相乘来决定
中的哪些信息将被保留,哪些信息将被舍弃。
(2)记忆门
记忆门的作用与遗忘门相反,它将决定新输入的信息 和
中哪些信息将被保留。
如图所示,记忆门包含2个部分。第一个是包含神经网络层(输入门,神经网络网络参数为
)和一个
神经网络层(神经网络参数为
)。
神经网络层的作用很明显,跟遗忘门一样,它接收
和
作为输入,然后输出一个
到
之间的数值
来决定哪些信息需要被更新;
- Tanh神经网络层的作用是将输入的
和
整合,然后通过一个
神经网络层来创建一个新的状态候选向量
,
的值范围在
到
之间。
记忆门的输出由上述两个神经网络层的输出决定, 与
相乘来选择哪些信息将被新加入到
时刻的细胞状态
中。
(3)更新细胞状态
有了遗忘门和记忆门,我们就可以更新细胞状态 了。
这里将遗忘门的输出 与上一时刻的细胞状态
相乘来选择遗忘和保留一些信息,将记忆门的输出与从遗忘门选择后的信息加和得到新的细胞状态
。这就表示
时刻的细胞状态
已经包含了此时需要丢弃的
时刻传递的信息和
时刻从输入信号获取的需要新加入的信息
。
将继续传递到
时刻的LSTM网络中,作为新的细胞状态传递下去。
(4)输出门
前面已经讲了LSTM如何来更新细胞状态 , 那么在
时刻我们输入信号
以后,对应的输出信号该如何计算呢?
如上面左图所示,输出门就是将时刻传递过来并经过了前面遗忘门与记忆门选择后的细胞状态
, 与
时刻的输出信号
和
时刻的输入信号
整合到一起作为当前时刻的输出信号。整合的过程如上图所示,
和
经过一个
神经网络层(神经网络参数为
)输出一个
到
之间的数值
。
经过一个
函数(注意:这里不是
神经网络层)到一个在
到
之间的数值,并与
相乘得到输出信号
,同时
也作为下一个时刻的输入信号传递到下一阶段。
其中,函数是激活函数的一种,函数图像为:
参考文献:
https://zhuanlan.zhihu.com/p/27345523
https://zhuanlan.zhihu.com/p/104475016
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2019-08-01 黑科技软件使用01-喜马拉雅 FM 已购付费音频下载