我是靠谱客的博主 安静鱼,最近开发中收集的这篇文章主要介绍循环神经网络模型系列总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、RNN

1.1 模型结构:

1.2 多层RNN

通过num_layers设置循环神经网络隐含层的层数,例如2。

对于一个多层循环神经网络,当前时刻隐含层的输入来自同一时刻输入层(如果有)或上一层隐含层的输出。每一层的隐含状态只沿着同一层传递。把单层循环神经网络中隐含层的每个单元当做一个函数f,这个函数在t时刻的输入是Xt, Ht-1,输出是Ht:

Ht = f(Xt, Ht-1)

加入输入为第0层,输出为第L+1层,在一共L个隐含层的循环神经网络中,上式可以拓展成以下的函数:

如下图所示:

1.3 双向RNN

 

 

二、LSTM

遗忘门:   

更新门:

输出门:

候选记忆细胞:

记忆细胞:

隐藏层:

遗忘门:决定我们要扔掉哪些信息

更新们:决定我们要增加哪些新的信息

输出门:哪些信息需要被输出

候选记忆细胞:

记忆细胞:选择那些信息需要被遗忘,哪些信息需要被记住(遗忘过去,捕捉当前)

隐藏层:用来传递信息

门的激活函数都是用sigmoid,取值范围是[0,1]

其它的激活函数都是tanh,取值范围是[-1,1],它有中心化数据的作用

 

2.2 双向BLSM

三、GRU

重置门(reset gate):重置门有助于捕捉时间序列里短期的依赖关系;

更新门(update gate):更新门有助于捕捉时间序列里长期的依赖关系;

ht^ :候选隐藏层

ht:隐藏层

四、ELMO

å¨è¿éæå¥å¾çæè¿°

五、seq2seq

      

环境向量C:C = q(h1,....,hT),编码了输入变量X(x1,x2,..xn)的信息

两个RNN模型,第一个RNN没有输出,只会把信息都编码至C;第二个RNN的输入都是C,T时刻的输入包括C,和y(t-1),H(t-1)

5.1 编码器:

编码器的设计可以多种多样,如下是一个双向的RNN模型,正向获得的隐藏层为h(f),反向的隐藏层为h(b),则最终的ht = concat(hf,hb)

5.2 解码器:

隐藏层:St = g(yt-1, c, St-1),由环境变量C,上一时刻的隐藏层和上一时刻的输出决定;模型g如何设计呢?

原始GRU公式如下:

在解码器中,我们可以对GRU的设计稍作修改,从而变换t'-1的输出yt'-1、隐藏状态St'-1,和背景变量Ct'。解码器在时间t'的隐藏状态为:

5.3 模型当中的tricks

1)既然生成的是不定长的sequence,那么什么时候停止生长呢?

编码器和解码器是分别对应输入序列和输出序列的两个循环神经网络。我们通常会在输入序列和输出序列后面分别附上一个特殊字符'<eos>'(end of sequence)表示序列的终止。在测试模型时,一旦输出'<eos>'就终止当前的输出序列;

2)decoder层第0层的输入y0设置为'<bos>'(beginning of sentence)

3) decoder层第0层的隐藏层S0 设置为 tanh(W* h1(b)), h1(b)是encoder第一层的反向隐藏层信息。这种设计是考虑到,对于翻译模型,它希望翻译出来的第一个单词,要参考源语言的第一个单词,这里用h1(b)来代表源语言的第一个单词信息

 

六、Attention机制

上面的模型有什么问题

对于输出序列每一时刻的C是一样的,例翻译系统为例,(I like home)->(我喜欢家),我们希望,在翻译'我‘的时候,I被分配更多的注意力,翻译'喜欢'的时候,like被分配更多的注意力。就是说,对于decoder阶段不同时刻的输出,分配的C应该不同。

解决思路和设计原理

环境向量C:C = q(h1,....,hT),给输入的隐藏层hT赋予不同的权重,使得C在输入到decoder的时候,根据权重赋予不同时刻,不同的值

设计模型

对(h1,...,ht)进行加权平均(softmax),再赋值给C

uploading-image-905958.png

编码器在t的隐藏状态为ht,且总时间不长为T。那么decoder在时间t'的背景变量为所有encoder隐藏状态的加权平均:

权重at't的值是一个概率分布。为了得到概率分布,我们可以使用一个softmax运算:

T是编码器的时间序列长度;

现在,我们需要定义如何计算et't。由于et't同时取决于decoder的时间t'和编码器的时间t,我们不妨以decoder的t'-1的隐藏状态st'-1和encoder在时刻t的隐藏状态ht为输入,并通过函数a计算:

这里函数a有多种选择,如果两个输入向量长度相同,一个简单的选择是计算他们的内积a(s,h) = sT*h。而最早提出注意力机制的论文是将输入连接后通过单隐藏层变换的(类似于全连接):

     

————————————————————————————————————————

 

 

 

 

 

最后

以上就是安静鱼为你收集整理的循环神经网络模型系列总结的全部内容,希望文章能够帮你解决循环神经网络模型系列总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部