循环神经网络和LSTM
回顾一下我们已知的传统神经网络模型,可以发现训练和预测阶段都以静态的方式运行:对于每一个输入,给出一个输出,而不考虑其序列间的关系。不同于我们之前的预测模型,循环神经网络不仅依赖于当前的输入,而且依赖于先前的输入。
本笔记包括如下内容:
理解循环神经网络运行原理,掌握构建循环神经网络的操作类型。
解释更高级递归神经网络模型(如LSTM)的思想
应用 TensorFlow中的LSTM模型预测能耗周期
学习巴赫谱曲
1.循环神经网络
知识不能凭空出现。很多新的点子来自于旧知识的重新组合,这很值得机器学习模仿。但是,传统的神经网络模型不会将之前的知识传递到当前的状态我们可以通过循环神经网络(RNN)来实现这个想法。循环神经网络是一种序列化的神经网络,它可以将已有的信息重复利用。RNN中一个主要假设就是当前的信息依赖于先前的信息。在图1中,我们可以看到一个RNN基本元素,元胞(Cell)的示意图
一个元胞包含3个主要元素,输入(xt)、状态和输出(h)。但是正如我们之前所说,元胞并非个独立的状态,它保留状态信息,传递给下个元胞,图2展示了一个展开的RNN元胞。该图解释了信息怎样从初始状态,经过一系列中间状态,转移到最终状态hn
![7c12d11e0fe4adde16cddecc4f0d61c5.png](https://img-blog.csdnimg.cn/img_convert/7c12d11e0fe4adde16cddecc4f0d61c5.png)
示
![55084f31615f5c4e88ac6c35c4847e1d.png](https://img-blog.csdnimg.cn/img_convert/55084f31615f5c4e88ac6c35c4847e1d.png)
![952863e4f8766894d2482ebff3da9b98.png](https://img-blog.csdnimg.cn/img_convert/952863e4f8766894d2482ebff3da9b98.png)
在定文了元胞间的流动方式之后,我们要做的就是研究每一个RNN的元胞本身的运行方式。最基本的标准RNN中,只有一个简单的神经网络层,该层的输入除了原本的输入还有前一个样本的状态。将两者拼接后,通过tanh操作,输出新的状态h(t+1),如图3所示。
理论上,经过多次的数据选代,这样的结构就能够提取出序列间的依赖信息。但是序列的操作长度使得上下文之间的关联变得困难,下面我们以“设计师懂得如何设计漂亮的建筑”为例:这句结构看上去很简单,但是要关联设计师和建筑这两个概念,则需要非常多的训练实例,这个问题就属于梯度的爆炸和消失。
1.1梯度爆炸和梯度消失
事实上,循环神经网络在做反向传播的时候,会遇到跟深度神经网络类似的问题,不同的是深度网络引发的原因是层数多,而循环神经网络是因为步长太长。这种级联的梯度计算,在传递到最后的阶段,容易造成两种后果,要么梯度弱小到一个没有意义的非常小的值,要么弥散到超出参数的边界。这也是LSTM结构出现的原因.
1.2LSTM神经网络
长短期记忆网络( Long-Short Term Memory,LSTM)是RNN的一个特例,它特殊的结构使得它能够拥有更长的依赖能力。也就是说,它比一般的RNN能够记住更长时间周期上的信息模式。
1.2.1基本组件——门操作——信息的滤波器
为了更好地理解LSTM元胞的运作方式,我们首先介绍LSTM中的主要操作块:门操作。这种操作一般都是多变量输入,我们只让其中一部分输入通过,拦住其他部分。我们可以把它理新成一个信息的滤波器,作用就是获取井记住需要的信息元素。
为了实现这个功能,我们使用多变量控制向量(用箭头标注),与神经网络通过 Sigmoid函数相连,如图4所示,通过使用控制向量和 Sigmoid函数,我们将会得到一个类二值向量。
![57f17619f652a0192fde392a3d316ff6.png](https://img-blog.csdnimg.cn/img_convert/57f17619f652a0192fde392a3d316ff6.png)
我们通过多个开关符号来表示这个功能。
定义完这个二值向量后,我们通过将输入乘上该向量,使得输入中的一部分能够通过。该使用一个三角符号表示,箭头指向信息通往的方向,如图5所示。
![1191e49e7c83c229a32b43a83cb3c349.png](https://img-blog.csdnimg.cn/img_convert/1191e49e7c83c229a32b43a83cb3c349.png)
图6就是一个常见的LSTM元胞结构。它包含了3个门操作,来保护和控制元胞状态。该操作既能够丢弃低(希望是没用的)状态数据,又能够向状态中加入(希望是有用的)新数据。
图6解释了LSTM元胞中所有操作的概念。
对于输入:
●由于优化了权重,所以通过训练,元胞的状态将能够记住吏长期的信息。
●短期的信息h(t)也会被直接结合进输入。由于它没有经过加权,所以对最终结果的影响会更大。
输出可以看出集成了使用门操作的应用。
![a9ebc4e7e443b8bc36b120f1f6b0179b.png](https://img-blog.csdnimg.cn/img_convert/a9ebc4e7e443b8bc36b120f1f6b0179b.png)
1.2.2操作步骤
1)遗忘数据(输入门)
![f44031e89e9d8f99901e3cda3414b4c8.png](https://img-blog.csdnimg.cn/img_convert/f44031e89e9d8f99901e3cda3414b4c8.png)
2)保持、更新状态数据
![4f7f27abb1ce59e8cc59c922cf8acd75.png](https://img-blog.csdnimg.cn/img_convert/4f7f27abb1ce59e8cc59c922cf8acd75.png)
3)输出滤波后元胞状态