RNN:基础内容介绍

之前介绍的神经网络(CNN等)所处理的问题,如分类,回归或特征表达等问题的数据都是IID(独立同分布)的,而在现实中更多的数据不满足IID,比如序列分析,序列的生成(如语言翻译,自动文本生成等),内容提取(如图像描述等)。而今天介绍的RNN(Recurrent Neural Network)就是处理序列数据问题的网络,RNN不仅仅能够处理序列的输入,也能够获得序列的输出(注:这里所说的序列是指向量的序列)。

1 序列样本

序列样本一般分为下面几种,分别是:一对一,一对多,多对一,多对多,其中多对多分为两种。

1.1 序列样本的典型应用:

1.1.1 一对一
一对一问题,比如函数的关系问题等,一般又不会称为序列样本,是一种一一映射的关系。
1.1.2 一对多
一对多的典型应用是图像的文本描述。输入一张图片,输出文本的序列。
1.1.3 多对一
多对一的应用有,输入一段视频或一个文本,对其进行分类等操作,即文本的分类问题,视频的检测问题等。
1.1.4 多对多
多对多的典型的应用是语言翻译,视频的解说等。

1.2 序列预测

1.2.1 简单的引入

序列的预测问题可以看做是生成模型,可以实现如音乐的生成,代码的生成等等。
序列的预测输入的是随时间变化的向量序列:
在 t 时刻通过模型来估计 t+1 时刻:

而在实际中对于估计函数 f 对内部状态和长时间的context难以建模和观察,所以引入内部隐含状态的变量Z来过渡,以便于更好的建模和观察状态,原估计就会变为:

1.2.2序列预测模型

通过上面的分析,得出需要隐含变量来对序列进行建模,在下面简单的模型中该预测模型的时间隐含变量用h表示,上标t表示时间,h就可以表示网络模型的隐藏层:

输入的离散型序列为:
在 t 时刻的更新计算公式为:
                 
                

预测计算公式为:
               
上面的这些公式和CNN中相应的公式都很相像,只是这里的输入是时间型离散序列。这里介绍的是最简单的序列模型,其他复杂的模型是在这个模型的基础上进行扩展的,如LSTM,等。
下面来看稍微复杂一点的模型:

通过上图和之前的介绍可知,(1)当进行前向计算时,随着 t 的增加W矩阵需要相乘很多次,如从t-1到t+1时,W需要相乘两次;(2)当为t时刻是的输入x时的输出y,受t时刻之前的t-1,t-2等时的输入的影响;(3)在进行后向计算时,相同的矩阵同样会乘以很多次。
是不是对这样的模型都无所适从?下面将针对这样的复杂模型进行前向(forward)和后向(back-propagation)训练分析,也就是著名的BPTT算法。

2 BPTT算法

BPTT算法是RNN中比较基础重要的算法,BPTT是Back-Propagation Through Time 的简写。
通过上面的介绍可知,当对t+1时刻的输出y进行分析时,会受到前面t,t-1,,,时刻的影响,所以需要对t+1时刻进行展开分析,即将t+1分成t,t-1,,,以此类推。下面进行分析。

RNN的前向计算公式为:
   (1)
这里的h和y与之前介绍的相同:

下面是后向计算:
从上图已知,最后的损失函数是t-1,t,t+1时刻的输出y的之和,即需要把所有的时间间隔加起来,以此来计算W的偏导:
    
E是损失,由CNN中的back-propagation可知,损失函数需要对权重w求偏导。
将上式应用链式规则进行展开为:
          (2)
上式中,求和后面的第一项E已知的话可以求得,第二项由上面的公式(1)也可以求得,最后一项由之前的介绍公式也可以求得;最难求解的是第三项,因为k从时刻1到t包含了之前所有的时刻,需要对其进行展开,下面对第三项进行分析。
已知(1)式和(2)式,根据求导的链式规则下面得:

由上式可知,最后的求导公式中,会有w相乘很多次,在这里应该会想到CNN中的梯度消失和膨胀现象。是的,当w很小或很大的时候会出现梯度的vanishing/exploding现象,因为,根据||XY|| <= ||X|| ||Y|| 可以知道:

其中beta表示上限值,所以:

当上式两个beta很小或很大时,就会有趋于0或趋于无穷大。
针对这个现象的解决方法有:
(1)Clipping,对最后的求导值加一个限制,到求导值小于某个阈值时将其设为固定的值,这样最后的值就不会很小,梯度就不会消失:

(2)将w初始化为1,使用Relu替换Tanh函数等。

上面方法是可以避免梯度vanishing/exploding现象的,但还有其他著名的算法来解决这个问题。针对这个问题出现了一个经典的算法:LSTM。

3 LSTM

LSTM:Long Short Time Memory。LSTM是目前应用最为广泛和成功的RNN。

3.1 介绍

直接上张图:


下面来看看上图的内部构造:

 图 1
这次详细一点了,从上面可以看出,LSTM是在输入层和隐藏层之间加入了一层A:“记忆层”,这里称为cell state。LSTM可以长期保存某个状态,cell state 值通过forget gate控制实现保留多少原来的状态。这里的神经网络层可以理解为把输入的维度X变换成输出的维度h,因为输出和输入一般在维度上是不同的,只有经过这些layer 将其转换成相同的维度。这里的gate就是图中的结点操作符。为什么称为forget gate,怎么做到forget的?下面会讲解。

这张图是上张图其中的一个“A”,从图中可以看出,最后输出有三个,2个ht和一个Ct,Ct是由原来的Ct-1 和当前t时刻的输入Xt变换之后再在gate中进行“x”和“+”操作得到的,可以看到Ct有由一部分“老”的加一部分“新”的状态组成。这也是Long和Short的由来。后面会进行详细分析。
下面提几个概念:
(1)forget unit:forget单元;
(2)input unit :输入单元;
(3)output unit:输出单元。

3.2 forget unit和input unit

下面对图1中神经网络层进行分析:


上图中的,注意输入与输出的维度,xt和ht-1的维度是不一样的,公式中的ft和 w的维度和ht,ht-1相同,方括号是进行维度的变换。σ是sigmoid 函数,sigmoid 函数的输出值在0~1之间。



上图中σ是sigmoid 函数,输出值范围在0~1之间,tanh函数的输出值范围在-1~1之间。

3.3 输出Ct



由前面的分析可知,Ct的公式中,ft~(0,1),it~(0,1),~ C t~(-1,1)。ft控制的是Ct-1,即ft是保留之前状态的百分比,当ft接近于0或1时就体现出long memory(~1)还是short memory(~0),这就是forget的由来。Ct-1是“老”的状态,~Ct是当前新的状态,所以ft是保留原来状态的程度,it是保留新的状态的程度,即需要多少更新,需要多少遗忘,这就是forget和input的概念。

3.4 output unit : ht

对比于3.1中的图1,结合3.2和3.3可以看出只有ht没有介绍,下面开始。

图中,Ot~(0,1),由上面知Ct~(-1,1),所以tanh(Ct)~(-0.761,0.761),所以ht~(-0.761,0.761),ht有两个输出,各有各的用处,见图示标注。

3.5 综合

LSTM主要有三个单元构成:input unit,forget unit和output unit。


使用到的公式为:


为什么LSTM不会出现梯度vanishing/exploding现象?因为,LSTM中有forget gate和其他的gate,就相当于在W与W之间引入了一个矩阵(gate输出相关的),当gate输出为0时,W与W之间很多的相乘中出现了0就会打破相乘,gate输出为1时才进行相乘,这类似于CNN中的DropOut,这样通过一些gate就可以阻断一些求导的路径,就会避免梯度vanishing/exploding现象。由前面分析可知,LSTM不仅仅可以避免梯度vanishing/exploding现象,而且具有记忆功能。

3.6 LSTM的其他变形

LSTM出现后也出现了一些LSTM的变形,也是利用了gate等概念,和LSTM很像,这里就不详细介绍了。
贴张图:



3.7 实际中应用的LSTM

这小节来看一下LSTM在实际应用中的使用 。 看图:



至此,RNN相关的基本内容已介绍完毕,其他内容有时间会继续学习继续介绍。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bixiwen_liu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值