| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 简单介绍长短期记忆网络 - LSTM -> 正文阅读 |
|
[人工智能]简单介绍长短期记忆网络 - LSTM |
文章目录一、引言1.1 什么是LSTM首先看看百科的解释。 为了更好地理解长短期记忆网络 - LSTM(下文简称LSTM),可以先了解循环神经网络-RNN(下文简称RNN)的相关知识,这里有一些相关的文章。LSTM只是RNN的一个变种,LSTM是为了解决RNN中的梯度消失的问题而提出的。 二、循环神经网络RNN2.1 为什么需要RNN人的思想是有记忆延续性。比如当你在阅读这篇文章,你会根据你曾经对每个字的理解来理解这篇文章的字,而不是每次都要思考一个字在这篇文章的语境下到底如何理解(从一个字或词的多种解释来选择一个符合当下语境的解释)。 举个例子:要识别这么一个句子: 假设对其中的单词从左到右一个一个地处理,前面已经cat的识别结果是一个单数名词,到后边()里的内容,到底是填were 还是 was,那么就需要根据前边cat的识别结果进行判断。这就是RNN需要做的。 使用神经网络来预测句子中下一个字的解释。传统的神经网络在模型训练好了以后,在输入层给定一个x,通过网络之后就能在输出层得到特定的y。利用这个模型可以通过训练拟合任意函数,但是只能单独的取处理一个个的输入,前一个输出和后一个输出是完全没有关系的。 神经网络的结构如下: RNN神经网络示意图:
再给出一个更具体的图,给出各层元素的对应关系
S
t
=
f
(
U
?
X
t
+
W
?
S
t
?
1
)
S_t = f(U·X_t + W ·S_{t-1})
St?=f(U?Xt?+W?St?1?) 这样,就可以做到的在一个序列中根据前面的输出来影响后面的输出。 三、长短时记忆神经网络LSTM3.1 为什么需要LSTM回到我们的例子: 这个例子与之前的例子稍微有一些不同,这里的cat 和()之间已经相隔了较长的一段距离,这时候用RNN来处理这样的长期信息就不太合适。 因为RNN在反向传播阶段有梯度消失等问题不能处理长依赖问题,这里的梯度消失是由于RNN在计算过程中使用链式法则。 具体来说,RNN使用覆盖的方式来计算状态: S t = f ( S t ? 1 , x t ) S_t = f(S_{t-1},x_t) St?=f(St?1?,xt?),这类似于复合函数,根据链式求导的法则,复合函数求导:设 f f f 和 g g g 为 x x x 的可导函数,则 ( f ° g ) ′ ( x ) = f ′ ( g ( x ) ) g ′ ( x ) (f \circ g)'(x) = f'(g(x))g'(x) (f°g)′(x)=f′(g(x))g′(x),这是一种连乘的方式,如果导数小于或大于1,会发生梯度下降以及梯度爆炸。梯度爆炸可以通过剪枝算法解决,但是梯度消失却没办法解决。 梯度消失可能不太好理解,可以简单理解为RNN中后边输入的数据影响越大,前面的数据的影响小,因此不能处理长期信息。后来,有学者在一篇论文Long Short-Term Memory 4 提出了LSTM,LSTM通过选择性地保留信息,有效地缓解了梯度消失以及梯度下降的问题,可以说LSTM正是为了适合学习长期依赖而产生的。 3.2 LSTM结构分析回顾一下RNN的模型构造:
LSTM模型构造: 先来解释一下图中符号含义:
LSTM结构(图右)和普通RNN的主要输入输出区别如下所示: 3.3 LSTM背后的核心思想LSTM的核心思想,LSTM的关键是细胞状态(cell state),即下图中上边的水平线。cell state像是一条传送带,它贯穿整条链,其中只发生一些小的线性作用。信息流过这条线而不改变是非常容易的。5 改变cell state需要三个门的相互配合。 如下图所示: 3.4 LSTM的运行机制第一步,需要决定从cell state中丢弃什么样的信息,这个由“遗忘门”的sigmoid层决定。根据输入 h t ? 1 h_{t-1} ht?1? 和 x t x_t xt?,得到的输出是0和1之间的数。0 代表“完全保留这个值”,1代表“完全丢弃这个值”。 回到开始的例子,原来的主语是"cat",之后遇到了一个新的主语"cats"。这时需要把之前的"cat"给忘掉,以便确定接下来是要使用"were",而不是"was"。如下图: 在例子中,这里对应于把新的"cats"加入到"cell state"中,以替代需要遗忘的"cat"。如下图: 3.5 LSTM如何避免梯度下降上边提到了RNN中的梯度下降以及梯度爆炸问题,是是因为在计算过程中使用链式法则,使用了乘积。而在LSTM中,状态是通过累加的方式来计算, S t = ∑ τ = 1 t Δ S τ S_t = \sum_{\tau =1}^t \Delta S_{\tau} St?=∑τ=1t?ΔSτ?。这样的计算,就不是复合函数的形式,它的导数也就不是乘积的形式,就不会发生梯度消失的情况。 四、入门例子下面给出LSTM的一个入门实例-根据前9年的数据预测后3年的客流6,感谢原作者的代码,完整的代码见GithubYonv1943。这里简单说一下这个代码实例的结果,需要了解更加详细的代码细节可以看看原作者的原文详解。 考虑有一组某机场1949年~1960年12年共144个月的客流量数据。使用这个数据中的前9年的客流量来预测后3年的客流量,再和实际的数据进行比对,可以看出LSTM的对这类具有时序关系的拟合效果。 结果图:
可以看到在这个LSTM对这个数据集的拟合效果是比较好的,在这样的实际场景中,可以利用LSTM这样的工具来对客流量做一个预测,以便对客运高峰等情况做好预备方案。 五、总结
六、参考资料 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 22:37:41- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |