RNN循环神经网络之原理详解

一、为什么要提出RNN

      在进行CNN、DNN等神经网络训练时,训练数据都默认为是“独立同分布”的。但是有些数据,如一段话、股票数据等,是有先后顺序的。因此,数据规律除了与数据分布相关外,也与数据之间的先后关系有关。为此,就提出了RNN循环神经网络,在传统DNN网络的基础上,加入了学习数据先后关系的能力。

二、什么是RNN

       RNN与DNN最大的区别在于隐藏层:DNN的隐藏层的输入是由输入层经过线性变换(矩阵相乘),然后再经过一个激活函数(如sigmoid,ReLu)变换后的结果。而RNN的隐藏层除了接收输入层的数据外,还得叠加一个隐藏层的自输入(隐藏层节点进行矩阵相乘),然后再加一个激活函数(如sigmoid,ReLu)变换后的结果。

       由于隐藏层需要自输入,因此,引入了一个问题:隐藏层的节点需要有初始值(初始化),还得根据接收的输入数据进行更新。如何进行更新呢?详见下文2.1。

2.1、RNN前向传播

       假设我们输入的数据是一段文字,例如:“我爱北京天安门”。由于神经网络无法处理文字,需要我们将文字转换为数字,可以有one-hot方法或embedding。这里以embedding为例,假设经过训练后,“我”的词向量为[0.1,0.2,0.3,0.18,0.11],“爱”的词向量为[0.2,0.1,0.4,0.55,0.18],“北京”的词向量为[-0.1,0.3,0.12,0.55,0.51],“天安门”的词向量为[0.33,0.44,0.55,0.66,0.77]。那么,输入数据X为:

如果是DNN,那么可以将这些数据一次性输入进去,DNN是无法分析出“我”、“爱”、“北京”、“天安门”这几次词之间的先后顺序的。对DNN来说,数据的先后输入顺序是不影响结果的,甚至还得在输入前将数据打乱shuffle。

如果是RNN,那么需要先输入“我”对应的词向量,然后再输入“爱”对应的词向量,以此类推......因此,RNN存在一个弊端就是无法并行计算

       回到上文遗留的问题,由于隐藏层需要自输入,就涉及到隐藏层的初始化值及更新方式。假定隐藏层的神经元个数为3,隐藏层的初始化值假设为h0=[A1,A2,A3]=[0,0,0],输出为2分类问题,网络结构如下:

      用矩阵U表示输入层与隐藏层之间的权重矩阵;W表示隐藏层自输入权重矩阵,V表示隐藏层与输出层之间的矩阵。

2.1.1 输入“我”对应的词向量时

隐藏层节点A1的值由两部分组成:

  • 一部分是来自于输入层的数据:

  • 另一部分是来自于隐藏层自输入:

  • 因此,

  • A1用矩阵乘法表示为:

同理,隐藏层节点A2的值用矩阵乘法计算为:

隐藏层节点A3的值用矩阵乘法计算为:

那么A1、A2、A3的值更新,用矩阵乘法表示为:

再加上激活函数,用矩阵乘法表示为:

其中,f为激活函数。h1为输入“我”后隐藏层对应的输出值。

输出层Y1的值为:,用矩阵乘法表示为:

同理,输出层Y2的值用矩阵表示为:

输出层Y1、Y2可以直接进行输出,也可先经过激活函数(如softmax)后输出。

2.1.2输入“爱”对应的词向量时:

A1、A2、A3的值更新,用矩阵乘法表示为:

2.2 RNN前向传播公式总结

对于时刻t,输入数据为Xt,那么RNN的前向传播公式为:

f和g均为激活函数

2.3、RNN反向传播

       还是以“我爱北京天安门”为例,由于有4个词,那么会有4个时刻的输出(当然也不是绝对的,因场景而异,例如我们去判断这句话的情感是正向的还是负向的,那只有最后一个时刻进行输出)。反向传播是将偏差往回传播,因此会有4个时刻的偏差,那么总偏差就是这四个时刻的偏差总和。以MSE为例,loss值为:为预测输出值,为真实值

以t=1时刻为例,

根据2.2 RNN前向传播公式,需要更新的参数有:U、W和V(为了简便,省略了偏置项)

2.3.1 对参数V进行更新

......

总偏差为

采用梯度下降法进行更新

2.3.2 对参数U进行更新

1、E1对U求偏导:

2、E2对U求偏导,由于U在h2中,h2中又有h1,h1中也有U,因此需要往前回溯:

3、E3对U求偏导,同样需要往前回溯:

4、归纳总结,Et对U求偏导:

其中,

采用梯度下降法进行更新

2.3.3 对参数W进行更新

1、E1对W求偏导:

2、E2对W求偏导,由于W在h2中,h2中又有h1,h1中也有W,因此需要往前回溯:

3、E3对W求偏导,同样需要往前回溯:

......

4、归纳总结,Et对W求偏导:

其中,

采用梯度下降法进行更新

2.4 RNN中的梯度爆炸与梯度消失问题

根据对W和U求偏导的公式,我们可以进一步写成:

根据对W和U求偏导的公式中有一个连乘:,如果的话,那么连乘的结果可能会快速增长,导致梯度爆炸。

如果的话,连乘的结果会衰减到零,导致梯度消失。

如果的话,我们来求解,由于

如果f为sigmoid含税,其导数的取值范围在0-0.25之间。sigmoi函数的导数表达式为:

,其中f(x)的取范围在0-1之间。因此的最大值为0.25,在x=0.5时取得。

所以说:

  • 如果,那么连乘很多次后,导致梯度消失;
  • 如果,那么连乘很多次后,导致梯度爆炸。

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值