赞
踩
目录
为什么提出循环神经网络?
有一类问题DNN和CNN不好解决,就是训练样本输入是连续的序列,且序列的长短不一,比如基于时间的序列:一段段连续的语音,一段段连续的手写文字。这些序列比较长,且长度不一,比较难直接的拆分成一个个独立的样本来通过DNN/CNN进行训练。
全连接神经网络和卷积神经网络都属于前向反馈网络,模型的最终的输出和模型本身没有关联。而循环神经网络模型的前一刻时刻最终输出可以作为下一个时刻的输入从而学习到前面时刻的信息,因此循环神经网络可以很好的学习到时间序列数据中的序列关系,从而在处理时间序列数据的时候往往有很好的效果。
RNN概念
循环神经网络(Recurrent Neural Network,RNN)是一类具有短期记忆能力的神经网络,在循环神经网络中,神经元不但可以接受其他神经元的信息,也可以接受自身的信息,形成具有环路的网络结构。 RNN是一种特殊的神经网络结构, 它是根据"人的认知是基于过往的经验和记忆"这一观点提出的 ,可以专门用来处理时间序列数据。
循环神经网络是一种共享参数的网络:参数在每个时间点上共享。传统的前馈神经网络在每个时间点上分配一个独立的参数,因此网络需要学习每个时间点上的权重。而循环神经网络在每个时间点上共享相同的权重。
RNN的主要应用领域
自然语言处理(NLP),主要有视频处理, 文本生成, 语言模型, 图像处理;语音识别;图像描述生成 ;文本相似度计算。
完全图解RNN、RNN变体、Seq2Seq、Attention机制 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/28054589
最基本的单层网络,输入是x,经过变换Wx+b和激活函数f得到输出y
经典的RNN结构,输入、输出都是等长的序列数据。
令向量表示在时刻t 时网络的输入,表示隐藏层状态(即 隐藏层神经元活性值),则 不仅和当前时刻的输入 相关,也和上一个时刻的 隐藏层状态相关。
每一步使用的参数U、W、b都是一样的,参数在每个时间点上共享
单输入多输出,是把输入信息X作为每个阶段的输入
要处理的问题输入是一个序列,输出是一个单独的值而不是序列,只在最后一个h上进行输出变换
这种结构通常用来处理序列分类问题。如输入一段文字判别它所属的类别,输入一个句子判断其情感倾向,输入一段视频并判断它的类别等等。
输入、输出为不等长的序列。这种结构是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结构不限制输入和输出的序列长度,因此应用的范围非常广泛,比如:
(1)代表在序列索引号t时训练样本的输入,同样的,和代表在序列索引号t−1和t+1时训练样本的输入。
(2)代表在序列索引号t时模型的隐藏状态,由x(t)和共同决定。
(3)代表在序列索引号t时模型的输出,只由模型当前的隐藏状态决定。
(4)代表在序列索引号t时模型的损失函数。
(5)代表在序列索引号t时训练样本序列的真实输出。
对于任意一个序列索引号t,我们隐藏状态
σ为RNN的激活函数,一般为tanh,b为线性关系的偏置项。
序列索引号t时模型的输出的表达式比较简单 :
在最终在序列索引号t时我们的预测输出为:
通常由于RNN是识别类的分类模型,所以上面这个激活函数一般是softmax。
过损失函数,比如对数似然损失函数,我们可以量化模型在当前位置的损失,即和的差距。
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
由于RNN模型如果需要实现长期记忆的话需要将当前的隐含态的计算与前n次的计算挂钩
计算量会呈指数式增长,导致模型训练的时间大幅增加。在神经网络参数更新的时候容易出现梯度消失或者梯度爆炸的情况,这样会导致神经网络不能很好的学习较长序列中的信息,因此RNN神经网络只具有短时的记忆。
相当长的相关信息和位置间隔
长短期记忆网络(Long Short-Term Memory Network,LSTM)是循环神经网络的一个变体,可以有效地解决简单循环神经网络的梯度爆炸或消失问题.
新的内部状态。LSTM网络引入一个新的内部状态(internal state)
LSTM 网络引入门控机制(Gating Mechanism)来控制信息传递的路径。 三个“门”分别为输入
(1) 遗忘门控制上一个时刻的内部状态
(2) 输入门控制当前时刻的候选状态
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。