论文
Attention Is All You Need
https://arxiv.org/abs/1706.03762
Transformer论文,即《Attention Is All You Need》,是一篇在深度学习领域具有里程碑意义的论文,它提出了一种全新的网络结构——Transformer,这一结构完全基于注意力机制,摒弃了传统序列建模中常用的循环神经网络(RNN)和卷积神经网络(CNN)的架构。以下是对该论文的详细解读:
一、论文背景与贡献
在提出Transformer之前,LSTM和GRU等RNN变体以及CNN在处理序列数据方面取得了显著成效,但它们各自存在局限性。RNN由于其递归结构,难以并行处理长序列数据;而CNN虽然可以并行处理,但在捕捉长距离依赖关系时效果有限。Transformer的提出,旨在解决这些问题,通过完全依赖注意力机制来捕捉输入和输出之间的全局依赖关系。
二、Transformer模型架构
Transformer采用了encoder-decoder的结构,其中encoder负责将输入序列映射为一系列隐藏状态,而decoder则根据这些隐藏状态生成输出序列。具体来说,encoder和decoder都包含多个堆叠的block,每个block内部包含多个子层。
Encoder:encoder由多个相同的block堆叠而成,每个block包含两个子层,分别是自注意力层(self-attention layer)和前馈神经网络层(feed-forward neural network layer)。此外,每个子层之后都接有一个残差连接(residual connection)和层归一化(layer normalization)。
Decoder:decoder的结构与encoder类似,但增加了一个额外的子层——编码-解码注意力层(encoder-decoder attention layer),该层允许decoder在生成每个输出时都关注到encoder的所有输出。
三、注意力机制
Transformer的核心是注意力机制,特别是自注意力机制(self-attention)。自注意力机制允许模型在处理每个位置时都考虑到序列中的其他所有位置,从而捕捉到长距离的依赖关系。具体来说,自注意力机制通过计算输入序列中所有位置之间的点积注意力(scaled dot-product attention)来实现。
此外,为了进一步提高模型的并行化能力和表达能力,Transformer还引入了多头注意力机制(multi-head attention)。多头注意力机制将输入序列分割成多个头(head),每个头分别执行自注意力计算,然后将所有头的输出拼接起来并经过一个线性变换得到最终的输出。
四、位置编码
由于Transformer模型没有使用递归或卷积结构来捕捉序列的顺序信息,因此需要一种额外的方式来编码序列中各个位置的信息。Transformer通过向输入嵌入(embeddings)中添加位置编码(positional encoding)来实现这一点。位置编码可以是可学习的,也可以是固定的(如正弦和余弦函数生成的)。
五、实验结果与应用
Transformer在多个机器翻译任务上取得了当时最优的性能,并且显著减少了训练时间。此外,由于其强大的序列建模能力,Transformer已经被广泛应用于自然语言处理(NLP)领域的多个任务中,如文本分类、命名实体识别、情感分析等。同时,Transformer也被引入到计算机视觉(CV)和其他领域的研究中,展示了其广泛的适用性和潜力。
六、总结
Transformer论文的发表标志着深度学习领域的一次重要突破,它提出了一种全新的网络结构来处理序列数据,并展示了其卓越的性能和应用前景。随着研究的不断深入和技术的不断发展,相信Transformer将在更多领域发挥更大的作用。
史上最小白之Attention详解_target attention-CSDN博客
深入理解transformer原理
Transformer模型是由Vaswani等人在2017年的论文《Attention is All You Need》中提出的,它在自然语言处理(NLP)领域取得了突破性的进展,并在图像处理、音乐生成等其他领域也得到了广泛的应用。Transformer模型摒弃了传统的循环神经网络(RNN)和卷积神经网络(CNN)的结构,完全基于自注意力(Self-Attention)机制来处理序列数据,极大地提高了处理效率和效果。
Transformer的基本原理
Transformer模型主要包括两部分:编码器(Encoder)和解码器(Decoder)。每个部分由多个相同的层堆叠而成,每个层则包括两个子层:一个自注意力(Self-Attention)机制层和一个前馈神经网络(Feed Forward Neural Network)层。此外,在编码器和解码器的每个子层后都加入了残差连接(Residual Connection)和层归一化(Layer Normalization)。
1. 编码器(Encoder)
编码器由多个编码器层堆叠而成,每个编码器层都包括:
- 自注意力层(Self-Attention Layer):这是Transformer模型的核心部分,用于捕捉输入序列中单词之间的关系。每个单词都与序列中的其他单词进行“交互”,并根据它们之间的相关性(通过计算注意力分数)来更新其表示。
- 前馈神经网络层(Feed Forward Neural Network Layer):经过自注意力层处理后,每个单词的表示会被送入一个简单的前馈神经网络中,以进一步转换和提取特征。
2. 解码器(Decoder)
解码器也由多个解码器层堆叠而成,但解码器层与编码器层在结构上有所不同,主要在于解码器包含三个子层:
- 自注意力层(Self-Attention Layer):与编码器中的自注意力层类似,但这里是掩码自注意力(Masked Self-Attention),用于保证解码过程是从左到右进行的,即模型在生成某个位置的输出时,只能看到当前位置及之前的输出。
- 编码器-解码器注意力层(Encoder-Decoder Attention Layer):这一层允许解码器中的每个位置都“注意”到编码器输出中的所有位置,这有助于解码器根据编码器的输出(即输入序列的深层表示)来生成相应的输出序列。
- 前馈神经网络层(Feed Forward Neural Network Layer):与编码器中的前馈神经网络层相同。
自注意力机制(Self-Attention Mechanism)
自注意力机制是Transformer模型的核心,它通过计算序列中不同位置之间的相似度分数(即注意力分数),来捕捉序列中的上下文信息。具体来说,它首先将输入序列映射到三个不同的空间(查询空间Q、键空间K和值空间V),然后计算查询空间中的每个元素与键空间中所有元素的相似度分数,这些分数随后被用于加权求和值空间中的元素,从而得到新的表示。
总的来说,Transformer模型通过自注意力机制和编码器-解码器结构,实现了对序列数据的高效和并行处理,从而在多种任务上取得了优异的性能。
encoder
self-attention
每个词和其他词之间的权重关系
以机器翻译例子"Tom chase Jerry" - "汤姆追逐杰瑞"来说明:
当我们在翻译"杰瑞"的时候,为了体现出输入序列中英文单词对于翻译当前中文单词不同的影响程度,比如给出类似下面一个概率分布值:
(Tom,0.3)(Chase,0.2)(Jerry,0.5)
每个英文单词的概率代表了翻译当前单词“杰瑞”时,注意力分配模型分配给不同英文单词的注意力大小。这对于正确翻译目标语单词肯定是有帮助的,因为引入了新的信息。同理,目标句子中的每个单词都应该学会其对应的源语句子中单词的注意力分配概率信息。这意味着在生成每个单词Yi的时候,原先都是相同的中间语义表示C会替换成根据当前生成单词而不断变化的Ci。理解AM模型的关键就是这里,即由固定的中间语义表示C换成了根据当前输出单词来调整成加入注意力模型的变化的Ci。
f2(“Tom”),f2(“Chase”),f2(“Jerry”)就是对应的隐藏层的值h(“Tom”),h(“Chase”),h(“Jerry”)。g函数就是加权求和。αi表示权值分布。因此Ci的公式就可以写成:
那么现在的问题就只剩下,怎么知道attention模型所需要的输入句子单词注意力分配概率分布值呢?也就是αij?
如何计算权重?
思考两点:
1 计算方法?
2 更新方法:一般来说都是通过loss梯度下降,优化器进行更新
对于q k v 的理解?
想要计算两个词向量x1 x2 之间的关系,就是计算x1*x2内积的值。
如何计算呢?这里采用的并不是直接计算,可以这么考虑:如果直接计算,那么两个词向量计算出来的结果肯定是个固定的值,那么就无法通过训练来更新了。
那么就考虑借助辅助的矩阵来计算。
这里就提出了query key这两个概念:可以把x1 x2看做主从关系,此时q就是主 k就是从
要计算x1和x2的关系,其实就是训练 q k v 矩阵的过程。
重点:v是自身的特征
dimension of k , 排除向量维度的影响
multi-head
todo 这里看下特征图的可视化
位置编码
堆叠+residual block
decoder
cross-attention
decoder提供q,encoder提供k和v?啥意思?todo
mask机制
decoder中,前文不考虑后文的影响,因为后文还未产生,"遮挡"
loss
bert
自监督训练
vit
视觉的注意力图,更关注前景
视觉提取embadding,对于一个图像区域做卷积,例如512维,那么输出就是512维度的向量。
cnn vs transformer
cnn 需要深层次的卷积才能提取到全局特征,也就是高级语义信息;
transformer 的感受野一开始就是全局的