1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 循环神经网络(recurrent neural network)(RNN)

循环神经网络(recurrent neural network)(RNN)

时间:2020-11-26 18:02:13

相关推荐

循环神经网络(recurrent neural network)(RNN)

RNN

架构图

话不多说,直接上网络架构

PS:你如果斜着看就和你通常看到的RNN网络架构是一样的了,不过这不影响什么。

剖析

要点如下:

输入:依次输入(x1,x2,…xt)参数:U,V,W,h0。输出:依次输出(o1,o2,…ot)

问题:

能不能同时输入而不是依次输入(x1,x2,…xt)?可以,但是没有必要,因为根据架构图RNN会先处理x1,得到h1,有了h1才能处理x2。能不能同时输出而不是依次输出(o1,o2,…ot)?可以,若现在处于训练阶段则此方式可以认为是一个批量更新参数U,V,W,但是这种方式你需要保存(h1,h2,…ht),然后激活后乘以V得到(o1,o2,…ot),同时输出。若现在处于测试阶段,则只需要依次保存h1,h2,…ht,然后乘以V即可。架构图中所有的U,V,W是一样的吗?是的,权值共享。h0如何设置?随机初始化即可,同样是参数,要进行训练。

数据流

三步要牢记。

h1=Ux1+Wh0h_1=Ux_1+Wh_0h1​=Ux1​+Wh0​

h1′=f(h1)h_1^{'}=f(h_1)h1′​=f(h1​),其中fff是激活函数

o1=Vh1′o_1=Vh_1^{'}o1​=Vh1′​

上面只列举了前3步计算,然后h1h_1h1​作为“历史信息”继续传递下去和W相乘,可以看网络架构图。

实际应用

背景:基于RNN的语言模型,我们希望这个网络做到:

输入x1=bush的时候,o1输出held。即这个网络可以根据以前的历史信息,猜测下一个词我想要输入的是什么,这不就是你手机的输入法吗?同理,输入x4=talk,希望输出o4=with。

已知:图中输入的那些向量,比如向量(0.2,0.2)代表Bush。

初始化:

U,V,W。

PS:这里的V有个小技巧,可以用输入的那6个向量来构成,那么也是2*6的矩阵。不过我这里随机的。

h0

正向传播

然后套公式( 此处省略)。

h1′=f(h1)h_1^{'}=f(h_1)h1′​=f(h1​)

o1=Vh1′o_1=Vh_1^{'}o1​=Vh1′​

可以得到(6,1)的向量o1,假设结果是下面这样(我懒得算)

这不正好对应着我们的6个词吗?

发现第二个维度(对应held)是所有6个数里面最大的,那么说明RNN成功预测了held。

但是如果不是最大的,假设是这样

那么RNN认为Bush后面应该接Bush,预测错误,那么应该使用惩罚函数梯度回传,调整参数U,V,W,h0。因为预测错误,罪魁祸首就是U,V,W,h0。

读完了x1,接着使用x2和h1进入下一轮训练。

优点

RNN的优秀思想是:

可以使得网络的输入神经元可以无限多,试想FNN前馈神经网络就不行,因为输入层的神经元个数是固定的。后面的输出需要依赖ht−1h_{t-1}ht−1​,这个ht−1h_{t-1}ht−1​包含了历史信息,因为得到ht−1h_{t-1}ht−1​需要h0,h1,....h_0,h_1,....h0​,h1​,....。而历史信息在很多问题中是非常重要的。

RNN或基于RNN的网络是处理含时间序列和有上下文问题的小能手。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。