论文解读:Attention Is All You Need

本文介绍了一种新的网络结构Transformer,它摒弃了循环神经网络和卷积神经网络,仅使用注意力机制。该模型在机器翻译任务中表现出色,尤其在并行运算方面具有优势。通过多头注意力机制和位置表征等技术,Transformer有效地提升了模型性能。

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

论文解读:Attention Is All You Need

  在深度学习领域,绝大多数是以神经网络为主要结构,神经网络(前馈神经网络、卷积神经网络、循环神经网络、图神经网络、生成网络等)以其通过线性于非线性运算的结合能够很好的对各种结构数据进行特征提取。
  谷歌公司团队提出一种基于自注意力机制的Transfomer模型,可以很好的替代神经网络,并在机器翻译领域获得不错的效果。

全文摘要译文

  目前主要的序列转换模型主要以复杂的循环神经网络或卷积神经网络为主,其包含编码器和解码器。较好的模型也可以通过注意力机制实现连接编码器和解码器。我们提出了一个新的简单的网络结构Transformer,它摒弃了循环神经网络和卷积神经网络,而仅基于注意力机制。在两个机器翻译任务数据集上实验显示这些模型更容易实现并行运算,且花费更少时间去训练。我们的模型在WMT 2014 E-G(英语翻译为德文)的任务数据局上的BLEU值为28.4,比像集成模型等现有的最优结果BLEU值高2。在这个数据集(WMT 2014 E-G)上,通过在8个GPU上训练3.5天,我们的模型获得了最好的结果,BLEU值为41.8,在文献训练上训练损失很小。结果表明,该Transformer能够很好地推广到其他任务,并成功地将其应用于具有大量和有限训练数据的英国选民分析。

二、简要信息

序号属性
1模型名称Transformer
2所属领域自然语言处理
3研究内容机器翻译
4核心内容位置表征/自注意力机制/
5GitHub源码原文提供:Tensor2Tensor
复现程序:A TensorFlow Implementation of the Transformer: Attention Is All You Need
6论文PDFhttps://arxiv.org/pdf/1706.03762.pdf

三、算法模型详解

3.1 注意力机制

  Transformer模型完全以注意力机制为主,因此首先介绍其注意力机制的实现方法。注意力模型的输入主要包括三个参数Q、K、V,Q表示输入的原始数据query(或序列),K和V为一对,表示键值对(key-value)。这三个参数默认为矩阵。其次通过计算下列式求得加权后的值:
A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}})V Attention(Q,K,V)=softmax(dk QKT)V

其中 Q K T d k \frac{QK^T}{\sqrt{d_k}} dk QKT 是Q于K的线性运算,分母 d k \sqrt{d_k} dk 作用是防止乘积值过大影响后面归一化的结果。softmax是归一化操作,生成概率矩阵,最后再与 V V V 加权求和。
图1 多头注意力

图1 多头注意力

  Transformer模型采用上面的注意力机制,提出一种多头自注意力机制模型。即输入层有多组(K,Q,V)组成。如图1所示。多组(K,Q,V)输入模型后分别进行线性运算,且每组均有有K=Q=V,其次计算Attention(K,Q,V)。最后将所有值拼接起来。

h e a d i = A t t e n t i o n ( Q W i Q , K W i K , V W i V ) head_i = Attention(QW_{i}^{Q},KW_{i}^{K},VW_{i}^{V}) headi=Attention(QWiQ,KWiK,VWiV)

M u l t i H e a d ( Q , K , V ) = C o n c a t ( h e a d 1 , h e a d 2 , . . . , h e a d i , . . . ) W o MultiHead(Q,K,V) = Concat(head_1,head_2,...,head_i,...)W^o MultiHead(Q,K,V)=Concat(head1,head2,...,headi,...)Wo

其中 Q W i Q QW_{i}^{Q} QWiQ K W i K KW_{i}^{K} KWiK V W i V VW_{i}^{V} VWiV 维度相同。

3.2 Position-wise Feed-Forward Networks

该部分本质上就是维度为1的卷积核。主要是对多头注意力模型输出进行线性处理。公式如下:
F F N ( x ) = m a x ( 0 , x W 1 + b 1 ) W 2 + b 2 FFN(x)=max(0,xW_1+b_1)W_2+b_2 FFN(x)=max(0,xW1+b1)W2+b2
可知,max(0,·)函数其实是ReLU激活函数。

3.3 位置表征

  注意力机制不像循环神经网络可以对序列的位置进行表征,因此模型在输入部分额外添加了位置表征。设序列某个字符的位置为 p o s pos pos ,表征向量的第 i i i 个元素可表示为:
P E ( p o s , 2 i ) = s i n ( p o s / 1000 0 2 i / d m o d e l ) PE(pos,2i)=sin(pos/10000^{2i/d_{model}}) PE(pos,2i)=sin(pos/100002i/dmodel)

P E ( p o s , 2 i + 1 ) = c o s ( p o s / 1000 0 2 i / d m o d e l ) PE(pos,2i+1)=cos(pos/10000^{2i/d_{model}}) PE(pos,2i+1)=cos(pos/100002i/dmodel)

其中 d m o d e l d_{model} dmodel 为输入表征向量的长度。
  文章指出,通过模型训练得到的位置表征与通过公式得到的效果相近,因此考虑模型的复杂度问题,采用公式是明智的选择。

3.4 Transformer

图2 Transformer

图2 Transformer
  Transformer模型主要由多头注意力、FFN和位置表征组成,如图2所示。编码器部分,模型的输入是一段sequence序列(机器翻译中的原始句子),通过预训练词向量与位置表征形成input embeddings。然后通过多次循环执行多头注意力和FFN操作。每次执行注意力机制和FFN操作后均采用残差网络($LayerNorm(x+Sublayer(x))$)和正则化。   解码器部分,输出部分的序列在机器翻译中为目标句子,其也通过预训练词向量和位置表征作为input embedding。病循环多次执行多头注意力和FFN操作,另外不同于输入部分,其添加了对解码器的输出执行多头注意力。解码器最终输出对目标句子每个位置预测的概率。
### 解读 'Attention is All You Need' 论文 #### 关键思想 《Attention is All You Need》这篇论文提出了一个新的神经网络架构——Transformer,该架构完全依赖于自注意力机制来处理序列数据。传统上,在自然语言处理领域中使用的RNN及其变体(LSTM, GRU),由于其固有的顺序计算特性,难以并行化训练,并且对于长距离依赖关系的学习效果不佳。 为了克服这些问题,研究者引入了一种全新的方法论,即通过多头自注意力建模输入序列中的不同表示子空间[^1]。这种方法不仅能够有效捕捉到句子内部词语之间的关联性,而且极大地提高了模型的表达能力与泛化性能。 #### Transformer 架构 Transformer 的核心组件包括编码器(encoder) 和解码器(decoder),两者均由多个相同的层堆叠而成。每一层主要由两个子模块构成: - **Multi-head Self-Attention Layer**: 这一层允许模型在同一时间关注来自不同位置的不同表征特征,从而增强了对上下文的理解。 - **Feed Forward Neural Network (FFN)**: FFN是一个简单的全连接前馈网络,应用于每个位置上的独立操作,不涉及任何跨位置交互。 此外,还存在残差连接(residual connection)围绕着这两个子模块,并在其后接一个Layer Normalization 层以稳定梯度传播过程。 ```python class TransformerBlock(nn.Module): def __init__(self, d_model, num_heads, dropout=0.1): super().__init__() self.self_attn = MultiHeadedSelfAttention(d_model=d_model, h=num_heads) self.feed_forward = PositionwiseFeedForward(d_model=d_model) self.norm_1 = nn.LayerNorm(d_model) self.norm_2 = nn.LayerNorm(d_model) self.dropout_1 = nn.Dropout(dropout) self.dropout_2 = nn.Dropout(dropout) def forward(self, x): attn_output = self.self_attn(x) out = self.norm_1(x + self.dropout_1(attn_output)) ff_output = self.feed_forward(out) output = self.norm_2(out + self.dropout_2(ff_output)) return output ``` #### 引入自注意力机制的意义 自注意力机制使得模型能够在无需考虑固定长度窗口的情况下动态调整权重分配给不同的词或字符片段。相比于传统的循环结构,这种方式显著减少了计算复杂度,并促进了更高效的并行运算实现方式。更重要的是,它提供了一个灵活而强大的工具来建模复杂的句法和语义模式,这对于提高机器翻译、文本摘要等多种下游任务的表现至关重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华师数据学院·王嘉宁

$感谢支持$

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值