初识Transformer之Attention is all you need

本文深入探讨Transformer模型,介绍了自注意力机制、多头注意力、位置编码等核心概念,揭示了Transformer如何处理序列数据并实现并行化训练,提高翻译质量和效率。此外,还对比了Transformer与RNN、CNN的区别,强调了self-attention在学习长距离依赖关系上的优势。

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


前言

本篇是自己开始认识Transformer写的第一篇学习笔记


一、初识ransformer

李宏毅老师讲的transformer非常好,让Attention is all you need 秒懂Transformer

Transformer由论文《Attention is All You Need》提出Transformer 是 Google 团队在 2017 年提出的一种 NLP 经典模型,现在比较火热的 Bert 也是基于 Transformer。Transformer 模型核心是 Self-Attention 机制,不采用RNN顺序结构,使得模型可以并行化训练,而且能够拥有全局信息,CNN的核心模块是conv。

1.transformer在分类上的应用:VIT,An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale
在这里插入图片描述
把图像分成固定大小的patchs,把patchs看成words送入transformer的encoder,中间没有任何卷积操作,增加一个class token来预测分类类别。

2.transformer在检测上的应用DETR:End-to-End Object Detection with Transformers
在这里插入图片描述
先用CNN提取特征,然后把最后特征图的每个点看成word,这样特征图就变成了a sequence words,而检测的输出恰好是a set objects,所以transformer正好适合这个任务。

3.transformer在分割上的应用SETR:Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective with Transformers
在这里插入图片描述
用ViT作为的图像的encoder,然后加一个CNN的decoder来完成语义图的预测。
参考:如何看待transformer在CV上的应用

在《Attention is All You Need》中,经过Transformer模块,输入一种语言,输出另一种语言完成机器翻译任务。
在这里插入图片描述
Transformer板块是由编码组件、解码组件和它们之间的连接组成。
在这里插入图片描述
编码组件部分由一堆编码器(encoder)构成(论文中是将6个编码器叠在一起——数字6没有什么神奇之处,你也可以尝试其他数字)。解码组件部分也是由相同数量(与编码器对应)的解码器(decoder)组成的。
在这里插入图片描述
所有的编码器在结构上都是相同的,但它们没有共享参数。每个解码器都可以分解成两个子层。
在这里插入图片描述
从编码器输入的句子首先会经过一个自注意力(self-attention)层,这层帮助编码器在对每个单词编码时关注输入句子的其他单词。自注意力层的输出会传递到前馈(feed-forward)神经网络中。每个位置的单词对应的前馈神经网络都完全一样。
解码器中也有编码器的自注意力(self-attention)层和前馈(feed-forward)层。除此之外,这两个层之间还有一个注意力层,用来关注输入句子的相关部分(和seq2seq模型的注意力作用相似)。
在这里插入图片描述
我们已经了解了模型的主要部分,接下来我们看一下各种向量或张量(译注:张量概念是矢量概念的推广,可以简单理解矢量是一阶张量、矩阵是二阶张量。)是怎样在模型的不同部分中,将输入转化为输出的。
像大部分NLP应用一样,我们首先将每个输入单词通过词嵌入算法转换为词向量。
在这里插入图片描述
每个单词都被嵌入为512维的向量,我们用这些简单的方框来表示这些向量。

词嵌入过程只发生在最底层的编码器中。所有的编码器都有一个相同的特点,即它们接收一个向量列表,列表中的每个向量大小为512维。在底层(最开始)编码器中它就是词向量,但是在其他编码器中,它就是下一层编码器的输出(也是一个向量列表)。向量列表大小是我们可以设置的超参数——一般是我们训练集中最长句子的长度。

将输入序列进行词嵌入之后,每个单词都会流经编码器中的两个子层。
在这里插入图片描述
接下来我们看看Transformer的一个核心特性,在这里输入序列中每个位置的单词都有自己独特的路径流入编码器。在自注意力层中,这些路径之间存在依赖关系。而前馈(feed-forward)层没有这些依赖关系。因此在前馈(feed-forward)层时可以并行执行各种路径。
然后我们将以一个更短的句子为例,看看编码器的每个子层中发生了什么。

如上述已经提到的,一个编码器接收向量列表作为输入,接着将向量列表中的向量传递到自注意力层进行处理,然后传递到前馈神经网络层中,将输出结果传递到下一个编码器中。
在这里插入图片描述
输入序列的每个单词都经过自编码过程。然后,他们各自通过前向传播神经网络——完全相同的网络,而每个向量都分别通过它。

从宏观视角看自注意力机制

例如,下列句子是我们想要翻译的输入句子:
The animal didn’t cross the street because it was too tired

这个“it”在这个句子是指什么呢?它指的是street还是这个animal呢?这对于人类来说是一个简单的问题,但是对于算法则不是。

当模型处理这个单词“it”的时候,自注意力机制会允许“it”与“animal”建立联系。

随着模型处理输入序列的每个单词,自注意力会关注整个输入序列的所有单词,帮助模型对本单词更好地进行编码。如果你熟悉RNN(循环神经网络),回忆一下它是如何维持隐藏层的。RNN会将它已经处理过的前面的所有单词/向量的表示与它正在处理的当前单词/向量结合起来。而自注意力机制会将所有相关单词的理解融入到我们正在处理的单词中。

在这里插入图片描述
当我们在编码器#5(栈中最上层编码器)中编码“it”这个单词的时,注意力机制的部分会去关注“The Animal”,将它的表示的一部分编入“it”的编码中。

从微观视角看自注意力机制

首先我们了解一下如何使用向量来计算自注意力,然后来看它是怎样用矩阵来实现。

计算自注意力的第一步就是从每个编码器的输入向量(每个单词的词向量)中生成三个向量。也就是说对于每个单词,我们创造一个查询向量、一个键向量和一个值向量。这三个向量是通过词嵌入与三个权重矩阵后相乘创建的。

可以发现这些新向量在维度上比词嵌入向量更低。他们的维度是64,而词嵌入和编码器的输入/输出向量的维度是512. 但实际上不强求维度更小,这只是一种基于架构上的选择,它可以使多头注意力(mul

### 关于Transformer模型中的'Attention is All You Need' 在探讨Transformer架构时,核心理念在于注意力机制的重要性被提升到了前所未有的高度[^1]。传统序列处理依赖循环神经网络(RNN),而Transformer摒弃了RNN结构,完全依靠自注意力(self-attention)机制实现输入到输出的映射。 #### 自注意力机制 自注意力允许模型关注同一序列的不同位置,从而捕捉更丰富的上下文关系。具体来说,在每一层中,对于给定的位置i,计算其与其他所有位置j之间的关联度得分,并据此调整权重分布。这种设计使得远距离依赖能够得到更好的建模[^2]。 #### 编码器-解码器框架下的多头注意力 为了增强表达能力,Transformer采用了多头注意力(multi-head attention)方案。每个头部负责学习不同子空间内的特征表示,最终将多个头部的结果拼接起来作为该层的输出。这样的设置不仅提高了并行化程度,还赋予了模型更强的信息提取能力[^3]。 ```python import torch.nn as nn class MultiHeadedAttention(nn.Module): def __init__(self, h, d_model, dropout=0.1): super(MultiHeadedAttention, self).__init__() assert d_model % h == 0 # We assume d_v always equals d_k self.d_k = d_model // h self.h = h self.linears = clones(nn.Linear(d_model, d_model), 4) self.attn = None self.dropout = nn.Dropout(p=dropout) def forward(self, query, key, value, mask=None): ... ``` #### 前馈神经网络与残差连接 除了独特的注意力模块外,标准的Transformer还包括基于位置的全连接前馈网络(position-wise feed-forward networks)[^5]。这些组件通常会配合跳跃连接(skip connections)一起工作,形成残差网络(residual network),有助于缓解深层网络训练过程中的梯度消失问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值