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

RNN

架构图

话不多说,直接上网络架构
在这里插入图片描述
PS:你如果斜着看就和你通常看到的RNN网络架构是一样的了,不过这不影响什么。

剖析

要点如下:

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

问题:

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

三步要牢记。

h 1 = U x 1 + W h 0 h_1=Ux_1+Wh_0 h1=Ux1+Wh0
h 1 ′ = f ( h 1 ) h_1^{'}=f(h_1) h1=f(h1),其中 f f f是激活函数
o 1 = V h 1 ′ o_1=Vh_1^{'} o1=Vh1

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

实际应用

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

输入x1=bush的时候,o1输出held。即这个网络可以根据以前的历史信息,猜测下一个词我想要输入的是什么,这不就是你手机的输入法吗?同理,输入x4=talk,希望输出o4=with。
在这里插入图片描述
已知:图中输入的那些向量,比如向量(0.2,0.2)代表Bush。
初始化:
U,V,W。
在这里插入图片描述
在这里插入图片描述
PS:这里的V有个小技巧,可以用输入的那6个向量来构成,那么也是2*6的矩阵。不过我这里随机的。

h0
在这里插入图片描述
正向传播
在这里插入图片描述

然后套公式( 此处省略)。
h 1 ′ = f ( h 1 ) h_1^{'}=f(h_1) h1=f(h1)
o 1 = V h 1 ′ 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的优秀思想是:

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

音程

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

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

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

打赏作者

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

抵扣说明:

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

余额充值