从RNN到Attention

上次我们讲到,传统神经网络无法获取时序信息,但时序信息在自然语言处理任务中非常重要!

例如 “我吃了一个苹果”这一句话,“苹果” 的词性和意思,取决于前面词的信息,如果没有 “我吃了一个” 这些词,“苹果”也可以翻译为乔布斯的“Apple”。

然而,RNN 的出现,让处理时序信息变为可能。


1. 传统神经网络

传统神经网络的结构比较简单:输入层 – 隐藏层 – 输出层。如下图所示:
输入是x,经过线性变换Wx+b激活函数f得到输出y。相信大家对这个已经非常熟悉了。

传统神经网络
但在实际应用中,我们还会遇到很多序列形的数据:
例如:

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

2. RNN(循环神经网络)

2.1 RNN基本结构单元(N vs N)

RNN 跟传统神经网络最大的区别在于每次都会将前一次的输出结果,带到下一次的隐藏层中,一起训练。如下图所示:
在这里插入图片描述
将 RNN 按时序展开则如下图所示:

在这里插入图片描述

  • 上图左边部分称作 RNN 的一个 timestep,在这个 timestep 中可以看到,在 t 时刻,输入变量 xt,通过 RNN的一个基础模块 A,输出变量 ht,而 t 时刻的信息,将会传递到下一个时刻 t+1。
  • 上图右边部分所示,模块按照时序展开,由此可以看到 RNN 为多个基础模块 A 的互连,每一个模块都会把当前信息传递给下一个模块。

过程如下图所示:

RNN

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

剩下的输出类似进行(使用和y1同样的参数V和c):

在这里插入图片描述

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

2.2 RNN_(N vs 1)

有的时候,我们要处理的问题输入是一个序列,输出是一个单独的值而不是序列,应该怎样建模呢?实际上,我们只在最后一个h上进行输出变换即可:

N vs 1

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

2.3 RNN_(1 vs N)

输入不是序列而输出为序列的情况怎么处理?
我们可以只在序列开始进行输入计算:
1vsN
1vsN
这种1 VS N的结构可以处理的问题有:

  • 从图像生成文字(image caption),此时输入的 X 就是图像的特征,而输出的 Y 序列就是一段句子
  • 从类别生成语音或音乐等

2.4 RNN_(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的最经典应用,事实上这一结构就是在机器翻译领域最先提出的
  • 文本摘要:输入是一段文本序列,输出是这段文本序列的摘要序列。 阅读理解。将输入的文章和问题分别编码,再对其进行解码得到问题的答案。
  • 语音识别:输入是语音信号序列,输出是文字序列。
  • …………

总而言之,RNN 解决了时序依赖问题,但这里的时序一般指的是短距离的,首先我们先介绍下短距离依赖长距离依赖的区别:

  • 短距离依赖:对于这个填空题 “我想看一场篮球____”,我们很容易就判断出 “篮球” 后面跟的是 “比赛”,这种短距离依赖问题非常适合 RNN。
  • 长距离依赖:对于这个填空题“我出生在中国的瓷都景德镇,小学和中学离家都很近,……,我的母语是____”,对于短距离依赖,“我的母语是” 后面可以紧跟着“汉语”、“英语”、“法语”,但是如果我们想精确答案,则必须回到上文中很长距离之前的表述 “我出生在中国的瓷都景德镇”,进而判断答案为“汉语”,而 RNN 是很难学习到这些信息的。

2.5 RNN 的梯度消失问题

RNN 为什么不适合长距离依赖问题?

在这里插入图片描述

RNN 应用举例:
RNN

  1. 假如需要判断用户的说话意图(问天气、问时间、设置闹钟…),用户说了一句“what time is it?”我们需要先对这句话进行分词。
  2. 然后按照顺序输入 RNN ,我们先将 “what”作为 RNN 的输入,得到输出“01” 然后,我们按照顺序,将“time”输入到RNN 网络,得到输出“02”。
  3. 这个过程中,输入 “time” 的时候,前面 “what”的输出也产生了影响(隐藏层中有一半是黑色的)。
  4. 以此类推,前面所有的输入都对未来的输出产生了影响,大家可以看到圆形隐藏层中包含了前面所有的颜色。
  5. 当我们判断意图的时候,只需要最后一层的输出“05”。

RNN 的缺点也非常明显

缺点

通过上面的例子,我们已经发现,短期的记忆影响较大(如橙色区域),但是长期的记忆影响就很小(如黑色和绿色区域),这就是 RNN存在的短期记忆问题。

  1. RNN 有短期记忆问题,无法处理很长的输入序列
  2. 训练 RNN 需要投入极大的成本

由于这些缺点,我们引出了Attention机制!

3. RNN+Attention

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

Attention机制通过在每个时间输入不同的 c 来解决这个问题,下图是带有Attention机制的Decoder:

在这里插入图片描述

每一个 c 会自动去选取与当前所要输出的 y 最合适的上下文信息。具体来说,我们用 aij 衡量Encoder中第 j 阶段的 hj 和解码时第i阶段的相关性,最终Decoder中第 i 阶段的输入的上下文信息Ci 就来自于所有 hj 对 aij 的加权和。

以机器翻译为例(将中文翻译成英文):

在这里插入图片描述

输入的序列是“我爱中国”,因此,Encoder中的h1、h2、h3、h4就可以分别看做是“我”、“爱”、“中”、“国”所代表的信息。在翻译成英语时,第一个上下文 c1 应该和 “我” 这个字最相关,因此对应的 a11 就比较大,而相应的 a12,a13,a14就比较小。c2应该和“爱”最相关,因此对应的 a22 就比较大。最后的c3和h3、h4最相关,因此a33,a34的值就比较大。

至此,关于Attention模型,我们就只剩最后一个问题了,那就是:
这些权重是怎么来的?

事实上, aij 同样是从模型中学出的,它实际和Decoder的第 i-1阶段的隐状态、Encoder第 j 个阶段的隐状态有关。

a1j 的计算:
在这里插入图片描述
a2j 的计算:
在这里插入图片描述
a3j 的计算:
在这里插入图片描述
以上就是带有Attention的Encoder-Decoder模型计算的全过程。


  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RNN(Recurrent Neural Network) 是一种递归神经网络,它能够处理序列数据,并具有记忆能力,适用于自然语言处理和时间序列数据的建模等任务。而Attention机制是一种特殊的机制,能够在RNN中关注与当前任务更相关的部分,提升模型性能。 RNNAttention机制的引入,可以使模型在处理长序列数据时,更加关注与当前任务相关的信息。它通过计算每个输入和输出的注意力权重,将关注点放在对当前输出更有倾向的输入上。这样,就能够在翻译任务中,对于较长的句子主要关注其中最重要的单词,提高翻译质量;或在语音识别任务中,对于长音频序列更注重关键的语音片段,提高识别准确率。 CTC(Connectionist Temporal Classification)是一种用于序列分类的方法,常用于语音识别中。CTC的特点是无需对齐标签和输入,只需要输入和输出序列之间的对应关系。通过将输出序列与输入序列对齐的所有可能对应关系进行求和,最终得到最可能的输出序列。这种方法不仅可以处理单个输入序列与输出序列的对齐问题,还能够应对多对一、多对多等复杂情况。 RNN Attention CTC的结合应用在语音识别任务中。首先,RNN作为基础模型,对输入音频序列进行特征提取和语音信息的建模。其次,Attention机制用于根据当前输出的建议,选择与其最相关的输入部分进行关注。最后,CTC用于将该输出序列的所有对齐与输入的可能对应关系进行求和,得到最可能的输出序列。通过Attention机制的引入,模型可以更加关注与当前输入相关的部分,提高语音识别的准确率。 总结来说,RNN Attention CTC是一种在语音识别中常用的方法,它充分利用了RNN的记忆能力,结合Attention机制进行关注,再通过CTC进行序列分类。这种方法在序列数据处理中具有很好的效果,提高了模型的性能和准确率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值