当前位置:   article > 正文

深度学习笔记 9 循环神经网络(RNN、LSTM)_rnn循环神经网络+时间序列lstm深度学习模型学习笔记

rnn循环神经网络+时间序列lstm深度学习模型学习笔记

目录

1.循环神经网络概述

2. RNN 多结构详解

2.1 one-to-one

2.2 n-to-n

2.3 one-to-n

2.4  n-to-one

2.5 Encoder-Decoder (n-to-m)

3. RNN前向传播

4. RNN反向传播

5. LSTM 长程依赖问题

5.1 为什么提出LSTM

5.2 LSTM 概念与计算过程

5.3  LSTM网络详解(简书博主)

 6. 门控循环单元(GRU)网络

7.  深层循环神经网络

 8. 双向循环神经网络


1.循环神经网络概述

为什么提出循环神经网络?

有一类问题DNN和CNN不好解决,就是训练样本输入是连续的序列,且序列的长短不一,比如基于时间的序列:一段段连续的语音,一段段连续的手写文字。这些序列比较长,且长度不一,比较难直接的拆分成一个个独立的样本来通过DNN/CNN进行训练。

全连接神经网络和卷积神经网络都属于前向反馈网络,模型的最终的输出和模型本身没有关联。而循环神经网络模型的前一刻时刻最终输出可以作为下一个时刻的输入从而学习到前面时刻的信息,因此循环神经网络可以很好的学习到时间序列数据中的序列关系,从而在处理时间序列数据的时候往往有很好的效果。

RNN概念

循环神经网络(Recurrent Neural Network,RNN)是一类具有短期记忆能力的神经网络,在循环神经网络中,神经元不但可以接受其他神经元的信息,也可以接受自身的信息,形成具有环路的网络结构。 RNN是一种特殊的神经网络结构, 它是根据"人的认知是基于过往的经验和记忆"这一观点提出的  ,可以专门用来处理时间序列数据

循环神经网络是一种共享参数的网络:参数在每个时间点上共享。传统的前馈神经网络在每个时间点上分配一个独立的参数,因此网络需要学习每个时间点上的权重。而循环神经网络在每个时间点上共享相同的权重。

 RNN的主要应用领域

自然语言处理(NLP),主要有视频处理, 文本生成, 语言模型, 图像处理;语音识别;图像描述生成 ;文本相似度计算。

2. RNN 多结构详解

完全图解RNN、RNN变体、Seq2Seq、Attention机制 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/28054589

2.1 one-to-one

最基本的单层网络输入是x,经过变换Wx+b和激活函数f得到输出y

2.2 n-to-n

经典的RNN结构,输入、输出都是等长的序列数据。

  • 自然语言处理问题。x1可以看做是第一个单词,x2可以看做是第二个单词,依次类推。
  • 语音处理。此时,x1、x2、x3……是每帧的声音信号。
  • 时间序列问题。例如每天的股票价格等等

令向量x_{(t)}表示在时刻t 时网络的输入,h_{(t)}表示隐藏层状态(即 隐藏层神经元活性值),则h_{(t)} 不仅和当前时刻的输入x_{(t)} 相关,也和上一个时刻的 隐藏层状态h_{(t-1)}相关。

每一步使用的参数U、W、b都是一样的,参数在每个时间点上共享

2.3 one-to-n

单输入多输出,是把输入信息X作为每个阶段的输入

  • 从图像生成文字(image caption),此时输入的X就是图像的特征,而输出的y序列就是一段句子
  • 从类别生成语音或音乐等

2.4  n-to-one

要处理的问题输入是一个序列,输出是一个单独的值而不是序列,只在最后一个h上进行输出变换

这种结构通常用来处理序列分类问题。如输入一段文字判别它所属的类别,输入一个句子判断其情感倾向,输入一段视频并判断它的类别等等。

2.5 Encoder-Decoder (n-to-m)

输入、输出为不等长的序列。这种结构是Encoder-Decoder,也叫Seq2Seq,是RNN的一个重要变种。原始的n-to-n的RNN要求序列等长,然而我们遇到的大部分问题序列都是不等长的,如机器翻译中,源语言和目标语言的句子往往并没有相同的长度。为此,Encoder-Decoder结构先将输入数据编码成一个上下文语义向量c

语义向量c可以有多种表达方式,最简单的方法就是把Encoder的最后一个隐状态赋值给c,还可以对最后的隐状态做一个变换得到c,也可以对所有的隐状态做变换。

拿到c之后,就用另一个RNN网络对其进行解码,这部分RNN网络被称为Decoder。Decoder的RNN可以与Encoder的一样,也可以不一样。具体做法就是将c当做之前的初始状态h0输入到Decoder中

 还有一种做法是将c当做每一步的输入:

由于这种Encoder-Decoder结构不限制输入和输出的序列长度,因此应用的范围非常广泛,比如:

  • 机器翻译。Encoder-Decoder的最经典应用,事实上这一结构就是在机器翻译领域最先提出的
  • 文本摘要。输入是一段文本序列,输出是这段文本序列的摘要序列。
  • 阅读理解。将输入的文章和问题分别编码,再对其进行解码得到问题的答案。
  • 语音识别。输入是语音信号序列,输出是文字序列。

3. RNN前向传播

(1)x^{(t)}代表在序列索引号t时训练样本的输入,同样的,x^{(t-1)}x^{(t+1)}代表在序列索引号t−1和t+1时训练样本的输入。

(2)h^{(t)}代表在序列索引号t时模型的隐藏状态,h^{(t)}由x(t)和h^{(t-1)}共同决定。

(3)o^{(t)}代表在序列索引号t时模型的输出,o^{(t)}只由模型当前的隐藏状态h^{(t)}决定。

(4)L^{(t)}代表在序列索引号t时模型的损失函数。

(5)y^{(t)}代表在序列索引号t时训练样本序列的真实输出。

对于任意一个序列索引号t,我们隐藏状态h^{(t)} 

 h^{(t)} = \sigma(z^{(t)}) = \sigma(Ux^{(t)} + Wh^{(t-1)} +b ) 

σ为RNN的激活函数,一般为tanh,b为线性关系的偏置项。 

序列索引号t时模型的输出o^{(t)}的表达式比较简单 :o^{(t)} = Vh^{(t)} +c

在最终在序列索引号t时我们的预测输出为:\hat{y}^{(t)} = \sigma(o^{(t)})

通常由于RNN是识别类的分类模型,所以上面这个激活函数一般是softmax。

过损失函数L^{(t)},比如对数似然损失函数,我们可以量化模型在当前位置的损失,即\hat{y}^{(t)}{y}^{(t)}的差距。

4. RNN反向传播

RNN反向传播算法通过梯度下降法一轮轮的迭代,得到合适的RNN模型参数U,W,V,b,c。由于我们是基于时间反向传播,所以RNN的反向传播有时也叫做BPTT(back-propagation through time)。

所有的U,W,V,b,c在序列的各个位置是共享的,反向传播时更新相同的参数。

BPTT算法将循环神经网络看作一个展开的多层前馈网络,其中“每一层”对应循环网络中的“每个时刻”。循环神经网络就可以按照前馈网络中的反向传播算法计算参数梯度,在“展开”的前馈网络中,所有层的参数是共享的,因此参数的真实梯度是所有“展开层”的参数梯度之和

关于 RNN 循环神经网络的反向传播求导及Pytorch验证

关于 RNN 循环神经网络的反向传播求导 - 极客锋行 - 博客园 (cnblogs.com)https://www.cnblogs.com/geekfx/p/14264180.html

5. LSTM 长程依赖问题

5.1 为什么提出LSTM

由于RNN模型如果需要实现长期记忆的话需要将当前的隐含态的计算与前n次的计算挂钩

计算量会呈指数式增长,导致模型训练的时间大幅增加。在神经网络参数更新的时候容易出现梯度消失或者梯度爆炸的情况,这样会导致神经网络不能很好的学习较长序列中的信息,因此RNN神经网络只具有短时的记忆。

相当长的相关信息和位置间隔 

5.2 LSTM 概念与计算过程

长短期记忆网络(Long Short-Term Memory Network,LSTM)是循环神经网络的一个变体,可以有效地解决简单循环神经网络的梯度爆炸或消失问题.

新的内部状态。LSTM网络引入一个新的内部状态(internal state)\bgwhite\fncmct 专 门进行线性的循环信息传递,同时(非线性地)输出信息给隐藏层的外部状态 \bgwhite\fncmht

LSTM 网络引入门控机制(Gating Mechanism)来控制信息传递的路径。 三个“门”分别为输入it 门、遗忘门ft和输出门ot

(1) 遗忘门控制上一个时刻的内部状态\bgwhite\fncmct1需要遗忘多少信息

(2) 输入门控制当前时刻的候选状态

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/412178?site
推荐阅读
相关标签