RNN基础知识简介

目录:
RNN是怎么来的?
RNN的网络结构与原理
RNN的改进
RNN如何训练?
RNN与CNN的结合应用:看图说话

1.RNN是怎么来的?
传统的CNN(如人工神经网络与卷积神经网络)的特点是,CNN假设每个节点相互独立没有关联(输入与输出也相互独立),但是实际上,每个元素之间有关联。
CNN的网络结构,同一层的网络节点相互独立
假如一个人说“我喜欢旅游,最喜欢的地方是云南,以后有机会我一定要去一次_”,根据前面的内容推断横线上的内容,那么根据上下文信息可推断出横线上写的应该是云南。
正是由于这种情况的存在,RNN中的每个节点都有关联。

2.RNN的网络结构与原理
RNN网络结构,几点之间有关联
Xt表示t时刻的输入,Ot是t时刻对应的输出, St是t时刻的存储记忆。对于RNN中的每个单元,输入分为两个部分:1)当前时刻的真正的输入Xt;2)前一时刻的存储记忆St-1。这里的额外输入St-1的目的就是将当前时刻的输出与前一时刻相联系起来。其中,
在这里插入图片描述
f表示激活函数,加入激活函数的目的是只保留有用信息,摒弃无用信息。(例如,“刚刚天气还很晴朗,但是突然电闪雷鸣,下午的活动取消”。这里的“刚刚天气还很晴朗”就是无用信息,在推断最终结果时起不到作用,使用激活函数将其摒弃。)
因此当前时刻的输出既和当前输入有关,也和上一时刻的记忆有关。
这里的每一个圆圈代表一个单元,并且每一个单元做的事情都是一样的。因此,简单来讲,RNN就是单元结构重复使用。将右图折叠起来就形成了左图。
最终预测结果是,我只需要当前时刻的记忆,比如预测“我是中国”的下一个词,那么很容易想到利用softmax函数来预测每个词出现的概率,表现形式如下:
在这里插入图片描述
这里St前面加上V的意义是(我觉得是归一化处理,这样就能保证最终的概率和为1.)
2.1 RNN中的结构细节:
1).可以把St看作隐含层的结果,是一种隐状态,捕捉之前时间点上的信息。但是St并不能保留之前时间点的所有信息。
2). Ot由当前时间和之前的存储记忆得到。
3).和卷积神经网络一样,每一个单元Cell共享一组参数(U、W、V),极大地降低了计算量。
4).很多情况下,Ot(中间结果)并不存在,因为很多任务,如文本情感分析等都只关注最后的结果,而不注重中间过程。
3.RNN的改进
3.1 改进1:双向RNN

当从之前的时间点信息无法推出当前的输出时,需要从之后的时间点信息去预测。
(如电视剧中一个角色在第三集出现,让你预测他在第三集中的名字时,从第一第二集中无法得到任何这个角色的信息,这时候需要利用第四第五集的信息预测这个角色的姓名,因此就出现了双向的RNN)
双向RNN结构如下图:(先看实线部分,是前向RNN,再看虚线部分,是后向RNN)
在这里插入图片描述
3.2 改进2:深层双向RNN
不论是单向RNN还是双向RNN,他们仅有一个隐含层的结果S_t,深层双向RNN在双向RNN的基础上进行改进,增加了隐含层的数量。(如图共三个隐含层)
在这里插入图片描述
用公式来表示是这样的:
在这里插入图片描述
然后再利用最后一层来进行分类,分类公式如下:
在这里插入图片描述
类似的还有Pyramidal RNN
在这里插入图片描述
现在有一个很长的输入序列,可以看到这是一个双向的RNN,上图是谷歌的W.Chan做的一个测试,它原先要做的是语音识别,他要用序列到序列的模型做语音识别,序列到序列就是说,输入一个序列然后就输出一个序列。
由图我们发现,上一层的两个输出,作为当前层的输入,如果是非常长的序列的话,这样做的话,每一层的序列都比上一层要短,但当前层的输入f(x)也会随之增多,貌似看一起相互抵消,运算量并没有什么改进。
但我们知道,对于一层来说,它是从前往后转的,比如要预测一个股市的变化,以天为单位,假如要预测明天的股市变化,你就要用今天,以及今天之前的所有数据,我们暂时无法只用昨天的数据,不用今天的数据,预测明天的数据,也即是说,预测必须具有连续性。
但每一层的f运算是可以并行的,从这个角度来看,运算量还是可以接受的,特别是在原始输入序列较短的时候还是有优势的。
4. RNN的训练-BPTT
如前面我们讲的,如果要预测t时刻的输出,我们必须先利用上一时刻(t-1)的记忆和当前时刻的输入,得到t时刻的记忆:
在这里插入图片描述
然后利用当前时刻的记忆,通过softmax分类器输出每个词出现的概率:
在这里插入图片描述
为了找出模型最好的参数,U,W,V,我们就要知道当前参数得到的结果怎么样,因此就要定义我们的损失函数,用交叉熵损失函数:
t时刻的损失:
在这里插入图片描述
其中 t时刻的标准答案,是一个只有一个是1,其他都是0的向量; 是我们预测出来的结果,与 的维度一样,但它是一个概率向量,里面是每个词出现的概率。因为对结果的影响,肯定不止一个时刻,因此需要把所有时刻的造成的损失都加起来:
在这里插入图片描述
在这里插入图片描述
如图所示,你会发现每个cell都会有一个损失,我们已经定义好了损失函数,接下来就是熟悉的一步了,那就是根据损失函数利用SGD来求解最优参数,在CNN中使用反向传播BP算法来求解最优参数,但在RNN就要用到BPTT,它和BP算法的本质区别,也是CNN和RNN的本质区别:CNN没有记忆功能,它的输出仅依赖与输入,但RNN有记忆功能,它的输出不仅依赖与当前输入,还依赖与当前的记忆。这个记忆是序列到序列的,也就是当前时刻收到上一时刻的影响,比如股市的变化。
因此,在对参数求偏导的时候,对当前时刻求偏导,一定会涉及前一时刻,我们用例子看一下:
在这里插入图片描述

假设我们对E3的W求偏导:它的损失首先来源于预测的输出 ,预测的输出又是来源于当前时刻的记忆s3,当前的记忆又是来源于当前的输出和截止到上一时刻的记忆:
在这里插入图片描述
因此,根据链式法则可以有:
在这里插入图片描述
但是,你会发现, ,也就是s2里面的函数还包含了W,因此,这个链式法则还没到底,就像图上画的那样,所以真正的链式法则是这样的:
在这里插入图片描述
我们要把当前时刻造成的损失,和以往每个时刻造成的损失加起来,因为我们每一个时刻都用到了权重参数W。和以往的网络不同,一般的网络,比如人工神经网络,参数是不同享的,但在循环神经网络,和CNN一样,设立了参数共享机制,来降低模型的计算量。
5.RNN与CNN的结合应用:看图说话
在图像处理中,目前做的最好的是CNN,而自然语言处理中,表现比较好的是RNN,因此,我们能否把他们结合起来,一起用呢?那就是看图说话了,这个原理也比较简单,举个小栗子:假设我们有CNN的模型训练了一个网络结构,比如是这个
在这里插入图片描述
最后我们不是要分类嘛,那在分类前,是不是已经拿到了图像的特征呀,那我们能不能把图像的特征拿出来,放到RNN的输入里,让他学习呢?
之前的RNN是这样的:
在这里插入图片描述
我们把图像的特征加在里面,可以得到:
在这里插入图片描述
其中的X就是图像的特征。如果用的是上面的CNN网络,X应该是一个4096X1的向量。
注:这个公式只在第一步做,后面每次更新就没有V了,因为给RNN数据只在第一次迭代的时候给。

https://blog.csdn.net/qq_39422642/article/details/78676567

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值