Attention机制和transformer模型

本文介绍了Transformer模型和Attention机制在自然语言处理中的应用。首先,概述了seq2seq模型的功能、结构、运行过程及其局限性。接着,详细讨论了Attention机制的作用、结构和运行流程,特别是如何解决seq2seq模型的局限。最后,详细阐述了Transformer模型,包括Encoder的Self-Attention和多头注意力机制,以及Decoder的工作原理,展示了Transformer如何通过并行计算提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 引言

自然语言处理(Natural Language Processing, NLP)是一种重要的人工智能(Artificial Intelligence, AI)技术,可以完成文本分类、序列标注、自动问答、机器翻译和摘要生成等任务,促进了搜索引擎、智能客服和推荐系统等应用的产生和发展,影响着生活的方方面面,值得我们去学习和研究。

最近几年,基于深度学习(Deep Learning, DL)的NLP技术在各项任务中取得了很好的效果,这些基于深度学习模型的NLP任务解决方案通常不使用传统的、特定任务的特征工程而是仅仅使用一个端到端(end-to-end)的神经网络模型就可以获得很好的效果。其中,Transformer是目前最前沿的深度学习模型结构,与之相关的概念有目前很火的attention(注意力)机制和BERT等。

在飞速发展的计算机领域,紧跟技术前沿是非常重要的,因此我们很有必要去学习目前最流行也是最有潜力的transformer模型架构及其相关知识。首先,本文将介绍之前比较流行的NLP处理技术seq2seq模型及其局限性。然后,本文将引出可解决seq2seq模型局限性的attention机制的思想和具体原理。最后,本文将介绍基本能够取代RNN的包括attention机制的transformer模型架构。

2. seq2seq模型

2.1 功能

seq2seq模型是RNN最重要的一个变种,可以处理非等长的输入和输出序列。
在这里插入图片描述
例如,在机器翻译中,输入一连串的单词,可以输出一连串其他语言的单词。

在这里插入图片描述

2.2 结构

seq2seq 模型是由编码器(Encoder)和解码器(Decoder)组成的。其中,编码器会处理输入序列中的每个元素,把这些信息转换为一个向量(称为上下文(context))。当我们处理完整个输入序列后,编码器把上下文(context)发送给解码器,解码器开始逐项生成输出序列中的元素。

在这里插入图片描述

得到 context 有多种方式,最简单的方法就是把 Encoder 的最后一个隐状态赋值给 context,还可以对最后的隐状态做一个变换得到 context,也可以对所有的隐状态做变换。其中,编码器和解码器一般都使用 RNN 结构。

2.3 运行

在机器翻译任务中,上下文(context)是一个向量(基本上是一个数字数组)。

在这里插入图片描述

你可以在编写seq2seq模型的时候设置上下文向量的长度。这个长度是基于编码器 RNN 的隐藏层神经元的数量。上图展示了长度为 4 的向量,但在实际应用中,上下文向量的长度可能是 256,512 或者 1024。

我们在处理单词之前,需要把他们转换为向量。这个转换是使用 word embedding 算法来完成的。

在这里插入图片描述

模型的主要模块是 RNN,其机制如下图所示:

在这里插入图片描述

Seq2seq 在机器翻译等应用中,呈现出序列计算的特点,如下所示:

在这里插入图片描述

2.4 局限

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

3. Attention机制

3.1 功能

在 Bahdanau等2014发布的Neural Machine Translation by Jointly Learning to Align and Translate 和 Luong等2015年发布的Effective Approaches to Attention-based Neural Machine Translation
两篇论文中,提出并改进了一种叫做注意力 Attention 的技术,它极大地提高了机器翻译的质量。注意力机制可以使模型根据需要,个性化地在每个输出时间步使用不同的 context 来解决单一 context 存储信息受限的问题。

在这里插入图片描述

3.2 结构

注意力模型不同于经典的序列到序列(seq2seq)模型,主要体现在 2 个方面:

首先,编码器会把更多的数据传递给解码器。编码器把所有时间步的 hidden state(隐藏层状态)传递给解码器,而不是只传递最后一个 hidden state(隐藏层状态):

在这里插入图片描述

第二,注意力模型的解码器在产生输出之前,做了一个额外的处理。为了把注意力集中在与该时间步相关的输入部分。解码器做了如下的处理:

  1. 查看所有接收到的编码器的 hidden state(隐藏层状态)。其中,编码器中每个 hidden state(隐藏层状态)都对应到输入句子中一个单词。
  2. 给每个 hidden state(隐藏层状态)一个分数(我们先忽略这个分数的计算过程)。
  3. 将每个 hidden state(隐藏层状态)乘以经过 softmax 的对应的分数,从而,高分对应的 hidden state(隐藏层状态)会被放大,而低分对应的 hidden state(隐藏层状态)会被缩小。
  4. 对所有 hidden state进行加权求和,得到个性化的 context 用于解码。

在这里插入图片描述

3.3 运行

注意力模型的整个过程:

  1. 注意力模型的解码器 RNN 的输入包括:一个embedding 向量,和一个初始化好的解码器 hidden state(隐藏层状态)。
  2. RNN 处理上述的 2 个输入,产生一个输出和一个新的 hidden state(隐藏层状态 h4 向量),其中输出会被忽略。
  3. 注意力的步骤:我们使用编码器的 hidden state(隐藏层状态)和 h4 向量来计算这个时间步的上下文向量(C4)。
  4. 我们把 h4 和 C4 拼接起来,得到一个向量。
  5. 我们把这个向量输入一个前馈神经网络(这个网络是和整个模型一起训练的)。
  6. 前馈神经网络的输出表示这个时间步输出的单词。
  7. 在下一个时间步重复这个步骤。
    在这里插入图片描述

请注意,注意力模型不是无意识地把输出的第一个单词对应到输入的第一个单词。实际上,它从训练阶段学习到了如何在两种语言中对应单词的关系(在我们的例子中,是法语和英语)。

3.4 注意力分数的计算

为了便于说明,我们以 RNN 作为具体模型的 Encoder-Decoder 框架为例。

在这里插入图片描述

其中,EOS 表示 End Of Sentence,在这里作为一句话的开始,也即上一句话的结束。

下图可以较为便捷地说明注意力分配概率分布值的通用计算过程。

在这里插入图片描述

对于采用 R N N RNN RNN D e c o d e

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值