深度学习 RNN基础

深度学习 RNN基础

目录

1、定义

2、有了CNN,为什么需要RNN?

3、RNN的主要应用领域有哪些呢?

4、RNN的计算过程

5、标准RNN前向输出流程

6、RNN的建模方式

7、CNN和RNN的异同点

8、RNN中为什么会出现梯度消失?如何解决?

9、如何理解RNN的注意力机制

1、定义

循环神经网络(Recurrent Neural Network, RNN)是一类以序列(sequence)数据为输入,在序列的演进方向进行递归(recursion)且所有节点(循环单元)按链式连接的递归神经网络(recursive neural network) 。

对循环神经网络的研究始于二十世纪80-90年代,并在二十一世纪初发展为深度学习(deep learning)算法之一 ,其中双向循环神经网络(Bidirectional RNN, Bi-RNN)和长短期记忆网络(Long Short-Term Memory networks,LSTM)是常见的循环神经网络 。

2、有了CNN,为什么需要RNN?

在CNN网络中的训练样本的数据为IID数据(独立同分布数据),所解决的问题也是分类问题或者回归问题或者是特征表达问题。但更多的数据是不满足IID的,如语言翻译,自动文本生成。它们是一个序列问题,包括时间序列和空间序列。比如时间序列数据,这类数据是在不同时间点上收集到的数据,反映了某一事物、现象等随时间的变化状态或程度。一般的神经网络,在训练数据足够、算法模型优越的情况下,给定特定的x,就能得到期望y。其一般处理单个的输入,前一个输入和后一个输入完全无关,但实际应用中,某些任务需要能够更好的处理序列的信息,即前面的输入和后面的输入是有关系的,这时就要用到RNN网络。

序列样本一般分为:一对多(生成图片描述),多对一(视频解说,文本归类),多对多(语言翻译)。RNN不仅能够处理序列输入,也能够得到序列输出,这里的序列指的是向量的序列。RNN学习来的是一个程序,也可以说是一个状态机,不是一个函数。

3、RNN的主要应用领域有哪些呢?

RNN的应用领域有很多, 可以说只要考虑时间先后顺序的问题都可以使用RNN来解决.这里主要说一下几个常见的应用领域:

① 自然语言处理(NLP): 主要有视频处理, 文本生成, 语言模型, 图像处理

② 机器翻译, 机器写文章

③ 语音识别

④ 图像描述生成

⑤ 文本相似度计算

⑥ 推荐系统。例如:音乐推荐、网易考拉商品推荐、Youtube视频推荐等新的应用领域。

4、RNN的计算过程

在进一步了解RNN之前,先给出最基本的单层网络结构,输入是x,经过变换Wx+b和激活函数f得到输出y:

Y<--x

y=f(w x+b)

y=f(x)

在实际应用中,我们还会遇到很多序列形的数据,如:

  • 自然语言处理问题。x1可以看做是第一个单词,x2可以看做是第二个单词,依次类推。
  • 语音处理。此时,x1、x2、x3……是每帧的声音信号。
  • 时间序列问题。例如每天的股票价格等等。

前面介绍了诸如此类的序列数据用原始的神经网络难以建模,基于此,RNN引入了隐状态h(hidden state),h可对序列数据提取特征,接着再转换为输出。

为了便于理解,先计算h_1:

h 1=f(U x 1+W h 0+b)

RNN中,每个步骤使用的参数U,W,b相同,h_2的计算方式和h_1类似,其计算结果如下:

h 2=f(U x 2+W h 1+b)

接下来,计算RNN的输出y_1,采用Softmax作为激活函数,根据y_n=f(Wx+b),得y_1:

y 1=\operatorname{Softmax}(V h 1+C)

使用和y_1相同的参数V,c,得到y_1,y_2,y_3,y_4的输出结构:

h0---->h1--->h2---->h3---->h4

y1<---h1<----x1

y2<---h2<----x2

y3<---h3<----x3

y4<---h4<----x4

以上即为最经典的RNN结构,其输入为x_1,x_2,x_3,x_4,输出为y_1,y_2,y_3,y_4,当然实际中最大值为y_n,这里为了便于理解和展示,只计算4个输入和输出。从以上结构可看出,RNN结构的输入和输出等长。

5、标准RNN前向输出流程

以x表示输入,h是隐层单元,o是输出,L为损失函数,y为训练集标签。t表示t时刻的状态,V,U,W是权值,同一类型的连接权值相同。

对于t时刻:

h(t)=\operatorname{lvarrho} U x(t)+w h(t-1)+b) \

其中\varrho为激活函数,一般会选择tanh函数,b为偏置。

t时刻的输出为:

\varrho(t)=V h(t)+C

模型的预测输出为:

\left.y^{(} t\right)= \varrho(o(t))

其中 \varrho为激活函数,通常RNN用于分类,故这里一般用softmax函数。

6、RNN的建模方式

序列样本一般分为:一对多(生成图片描述),多对一(视频解说,文本归类),多对多(语言翻译),针对不同的序列建模方式也不一样。

(1)一对多(vector-to-sequence )

 输入是一个单独的值,输出是一个序列。此时,有两种主要建模方式:

方式一:可只在其中的某一个序列进行计算,比如序列第一个进行输入计算,其建模方式如下:

  y1<-----h1<-----y2<----h2-----y3<------h3<---y4<--------h4----x

方式二:把输入信息X作为每个阶段的输入,其建模方式如下:

h0--->h1----->h2----->h3----->h4----x

应用场景:

一是从图像生成文字,输入为图像的特征,输出为一段句子。

二是根据图像生成语音或音乐,输入为图像特征,输出为一段语音或音乐。

(2)多对一(sequence-to-vector )

输入是一个序列,输出是一个单独的值,此时通常在最后的一个序列上进行输出变换,其建模如下所示:

y1<-----h1<-----y2<----h2-----y3<------h3<---y4<--------h4----x

h0--->h1----->h2----->h3----->h4----x

Y=Softmax(Vh4+C)

应用场景:

输出一段文字,判断其所属类别 2、输入一个句子,判断其情感倾向 3、输入一段视频,判断其所属类别

(3)多对多(Encoder-Decoder )

建模步骤如下:

步骤一:将输入数据编码成一个上下文向量c,这部分称为Encoder,得到c有多种方式,最简单的方法就是把Encoder的最后一个隐状态赋值给c,还可以对最后的隐状态做一个变换得到c,也可以对所有的隐状态做变换。其示意如下所示:

(1) C=h4

(2) C=q(h4)

(3)C=q(h1,h2,h3,h4)

h0--->h1---->h2----->h3---->h4------>C

h1-->x1---->h2---->x2----h3---->x3----->h4---->x4------->C

步骤二:用另一个RNN网络(我们将其称为Decoder)对其进行编码

方法一是将步骤一中的c作为初始状态输入到Decoder,示意图如下所示:

                                                                                  y1          y2            y3

h0--->h1---->h2----->h3---->h4------>C------>h1'---->h2'------>h3'

image
    x1          x2            x3          x4

方法二是将c作为Decoder的每一步输入,示意图如下所示:

                                                                                                           y1                 y2             y3

h0----->h1---->h2------->h3------>h4-------->C----------->h1'------->h2'<------h3'

           x1       x2                 x3              x4

1、机器翻译,输入一种语言文本序列,输出另外一种语言的文本序列

2、文本摘要,输入文本序列,输出这段文本序列摘要

3、阅读理解,输入文章,输出问题答案

4、语音识别,输入语音序列信息,输出文字序列

7、CNN和RNN的异同点

类别 特点描述
相同点 1、传统神经网络的扩展。 2、前向计算产生结果,反向计算模型更新。3、每层神经网络横向可以多个神经元共存,纵向可以有多层神经网络连接
不同点 1、CNN空间扩展,神经元与特征卷积;RNN时间扩展,神经元与多个时间输出计算 2、RNN可以用于描述时间上连续状态的输出,有记忆功能,CNN用于静态输出

8、RNN中为什么会出现梯度消失?如何解决?

梯度消失的原因:sigmoid函数的导数范围是(0,0.25],tanh函数的导数范围是(0,1],他们的导数最大都不大于1,如果取tanh或sigmoid函数作为激活函数嵌套到RNN中,那么必然是一堆小数在做乘法,结果就是越乘越小。随着时间序列的不断深入,小数的累乘就会导致梯度越来越小直到接近于0,这就是“梯度消失“现象。

实际使用中,会优先选择tanh函数,原因是tanh函数相对于sigmoid函数来说梯度较大,收敛速度更快且引起梯度消失更慢。

解决RNN中的梯度消失方法主要有:

1、选取更好的激活函数,如Relu激活函数。ReLU函数的左侧导数为0,右侧导数恒为1,这就避免了“梯度消失“的发生。但恒为1的导数容易导致“梯度爆炸“,但设定合适的阈值可以解决这个问题。

2、加入BN层,其优点包括可加速收敛、控制过拟合,可以少用或不用Dropout和正则、降低网络对初始化权重不敏感,且能允许使用较大的学习率等。

2、改变传播结构,选择更高级的模型,例如:LSTM结构可以有效解决这个问题

9、如何理解RNN的注意力机制

在上述的Encoder-Decoder结构中,Encoder把所有的输入序列都编码成一个统一的语义特征c再解码,因此,c中必须包含原始序列中的所有信息,它的长度就成了限制模型性能的瓶颈。如机器翻译问题,当要翻译的句子较长时,一个c可能存不下那么多信息,就会造成翻译精度的下降。Attention机制通过在每个时间输入不同的c来解决此问题。

引入了Attention机制的Decoder中,有不同的c,每个c会自动选择与当前输出最匹配的上下文信息,其示意图如下所示

          y1         y2          y3

h0'---->h1'---->h2'---->h3'

          c1         c2         c3

举例,比如输入序列是“我爱中国”,要将此输入翻译成英文:

假如用a{ij}衡量Encoder中第j阶段的h_j和解码时第i阶段的相关性,a{ij}从模型中学习得到,和Decoder的第i-1阶段的隐状态、Encoder 第j个阶段的隐状态有关,

最终Decoder中第i阶段的输入的上下文信息 c_i来自于所有h_j对a_{ij}的加权和。

其示意图如下图所示:

image

在Encoder中,h_1,h_2,h_3,h_4分别代表“我”,“爱”,“中”,“国”所代表信息。翻译的过程中,c_1会选择和“我”最相关的上下午信息,如上图所示,会优先选择a{11},以此类推,c_2会优先选择相关性较大的a{22},c_3会优先选择相关性较大的a{33},a{34},这就是attention机制。

RNN虽然理论上可以很漂亮的解决序列数据的训练,但是它也像DNN一样有梯度消失时的问题,当序列很长的时候问题尤其严重。因此,RNN模型一般不能直接用于应用领域。在语音识别,手写书别以及机器翻译等NLP领域实际应用比较广泛的是基于RNN模型的一个特例LSTM。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,874评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,102评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,676评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,911评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,937评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,935评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,860评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,660评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,113评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,363评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,506评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,238评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,861评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,486评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,674评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,513评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,426评论 2 352

推荐阅读更多精彩内容