深度学习-nlp-NLP之多种RNN总结--73

参考链接:完全图解RNN、RNN变体、Seq2Seq、Attention机制

1. 最基本的单层网络


输入是x,经过变换Wx+b和激活函数f得到输出y。

经典的RNN结构(N vs N)
序列形的数据就不太好用原始的神经网络处理了。为了建模序列问题,RNN引入了隐状态h(hidden state)的概念,h可以对序列形的数据提取特征,接着再转换为输出。

注意:
圆圈或方块表示的是向量
一个箭头就表示对该向量做一次变换
(在很多论文中也会出现类似的记号,初学的时候很容易搞乱,但只要把握住以上两点,就可以比较轻松地理解图示背后的含义。)
h2的计算和h1类似,每一步使用的参数U、W、b都是一样的。

依次计算剩下来的(使用相同的参数U、W、b):

这里为了方便起见,只画出序列长度为4的情况,实际上,这个计算过程可以无限地持续下去。
目前的RNN还没有输出,得到输出值的方法就是直接通过h进行计算:

一个箭头就表示对对应的向量做一次类似于f(Wx+b)的变换,这里的这个箭头就表示对h1进行一次变换,得到输出y1

剩下的输出类似进行:

这就是最经典的RNN结构,我们像搭积木一样把它搭好了。它的输入是x1, x2, .....xn,输出为y1, y2, ...yn,也就是说,输入和输出序列必须要是等长的

经典RNN的适用范围比较小,但也有一些问题适合用经典的RNN结构建模,如:
输入为字符,输出为下一个字符的概率。这就是著名的Char RNN,(链接 The Unreasonable Effectiveness of Recurrent Neural Networks Char RNN可以用来生成文章,诗歌,甚至是代码)

2. N VS 1

要处理的问题输入是一个序列,输出是一个单独的值而不是序列,实际上,我们只在最后一个h上进行输出变换就可以了

这种结构通常用来处理序列分类问题。如输入一段文字判别它所属的类别,输入一个句子判断其情感倾向,输入一段视频并判断它的类别等等。

3. 1 VS N

输入不是序列而输出为序列的情况

还有一种结构是把输入信息X作为每个阶段的输入

等价表示:

1 VS N的结构可以处理的问题:
从图像生成文字(image caption),此时输入的X就是图像的特征,而输出的y序列就是一段句子

4. N vs M

介绍RNN最重要的一个变种:N vs M
这种结构又叫Encoder-Decoder模型,也可以称之为Seq2Seq模型。
原始的N vs N RNN要求序列等长,然而我们遇到的大部分问题序列都是不等长的,如机器翻译中,源语言和目标语言的句子往往并没有相同的长度。

Encoder-Decoder结构先将输入数据编码成一个上下文向量c:

得到c有多种方式,最简单的方法就是把Encoder的最后一个隐状态赋值给c,还可以对最后的隐状态做一个变换得到c,也可以对所有的隐状态做变换。

拿到c之后,就用另一个RNN网络对其进行解码,这部分RNN网络被称为Decoder。具体做法就是将c当做之前的初始状态h0输入到Decoder中

还有一种做法是将c当做每一步的输入

于这种Encoder-Decoder结构不限制输入和输出的序列长度,因此应用的范围非常广泛
机器翻译。Encoder-Decoder的最经典应用,事实上这一结构就是在机器翻译领域最先提出的
文本摘要。输入是一段文本序列,输出是这段文本序列的摘要序列
阅读理解。将输入的文章和问题分别编码,再对其进行解码得到问题的答案。
语音识别。输入是语音信号序列,输出是文字序列

5. Attention机制

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

例如:

第一个上下文c1应该和“我”这个字最相关,因此对应的a11就比较大,
c2应该和“爱”最相关,因此对应的a22就比较大
最后的c3和h3、h4最相关,a33 a34就比较大

这些权重是怎么计算的?参考:https://www.cnblogs.com/cavalier-chen/p/18132036

posted @ 2024-04-15 15:57  jack-chen666  阅读(1)  评论(0编辑  收藏  举报