当前位置: 首页 > news >正文

Transformer详解:Attention机制原理

前言

Hello,大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者,本系列文章是作者参加DataWhale2025年1月份学习赛,旨在讲解Transformer模型的理论和实践。😲

本文将详细探讨Attention机制的原理、其在Transformer模型中的应用,以及Transformer模型如何通过自注意力机制(Self-Attention)和多头注意力机制(Multi-Head Attention)来处理序列数据。我们还将讨论Transformer模型在自然语言处理(NLP)任务中的优势,并对比其与CNN、RNN的计算复杂度、并行操作数量和学习距离长度。


一、 Attention机制原理

在这里插入图片描述

注意力机制(Attention Mechanism)最初是为了改进基于Encoder-Decoder架构的神经机器翻译(Neural Machine Translation, NMT)系统而提出的。传统的NMT系统依赖于RNN或LSTM来编码输入句子并生成上下文向量,但这种架构在处理长句子时存在长程依赖问题,导致信息丢失。2015年,Bahdanau等人提出了第一个Attention模型,通过引入注意力机制,模型能够在生成每个输出词时动态地关注输入序列中的不同部分,从而显著提升了翻译质量

1.Attention机制的引入

① 传统Encoder-Decoder架构的局限性

在传统的Encoder-Decoder架构中,编码器(Encoder)将输入序列编码为一个固定长度的上下文向量,解码器(Decoder)则基于该上下文向量生成输出序列。这种架构的局限性在于:

  • 长程依赖问题:随着输入序列长度的增加,编码器难以捕捉到长距离的依赖关系,导致信息丢失。
  • 固定长度上下文向量:Encoder将整个输入序列压缩为一个固定长度的向量,导致信息丢失。

这部分我上篇文章中已经详细说明!


② Attention机制的引入

🤔Attention机制允许Decoder在生成每个输出时动态地关注输入序列的不同部分,打破了固定长度上下文向量的限制。
在这里插入图片描述

Attention机制的核心思想是:在生成每个输出词时,动态地为输入序列中的每个词分配不同的权重。具体来说,Attention机制通过以下步骤实现:

  1. 分解输入:将输入序列分解为多个词或token。
  2. 计算注意力分数:对于每个输出词,计算其与输入序列中每个词的相似度(通常通过点积、加性注意力或其他相似度度量方法)。
    • 公式化表示: e t , s = score ( h t , h s ) e_{t,s} = \text{score}(h_t, h_s) et,s=score(ht,hs),其中 h t h_t ht 是Decoder的当前隐藏状态, h s h_s hs 是Encoder的第 s 个隐藏状态。
  3. 计算注意力权重:通过Softmax函数将注意力分数转换为权重,确保权重之和为1。
    • 公式化表示: α t , s = exp ⁡ ( e t , s ) ∑ s ′ exp ⁡ ( e t , s ′ ) \alpha_{t,s} = \frac{\exp(e_{t,s})}{\sum_{s'} \exp(e_{t,s'})} αt,s=sexp(et,s)exp(et,s)
  4. 加权求和:根据注意力权重对Encoder的隐藏状态进行加权求和,生成一个动态的上下文向量 c t c_t ct
    • 公式化表示: c t = ∑ s α t , s h s c_t = \sum_s \alpha_{t,s} h_s ct=sαt,shs
  5. 生成输出:将上下文向量 c t c_t ct 与Decoder的当前隐藏状态 h t h_t ht 结合,生成输出词。

通过这种方式,Attention机制能够有效地捕捉输入序列中的长程依赖关系,并为每个输出词生成一个与其相关的上下文向量。


2. Attention机制的发展类比

先类比一下不同发展阶段:

① 死记硬背:RNN时代

在RNN时代,模型通过大量的背诵词汇和学习语法来理解语言。这种方法的局限性在于难以处理长序列和长程依赖问题。

  • 类比:就像人类学习一门新语言时,最初通过死记硬背词汇和语法规则来掌握基础知识。这种方法虽然简单直接,但难以理解长句子或复杂语境中的深层含义。
② 提纲挈领:Attention机制

Attention机制的引入使得模型能够在生成每个输出词时动态地关注输入序列中的不同部分,从而显著提升了翻译质量。

  • 类比:就像人类在听力练习中,逐渐学会通过关键词和转折句来理解句子的核心意思。Attention机制通过“加权求和”的方式,从输入序列中提取重要信息,忽略不相关部分。
③ 融会贯通:Transformer

Self-Attention使得模型能够在输入序列内部建立全局依赖关系,而不仅仅是依赖Encoder和Decoder之间的交互。这种机制特别适合处理长序列任务,因为它能够直接捕捉序列中任意两个位置之间的关系;

Transformer模型通过自注意力机制(Self-Attention)和多头注意力机制(Multi-Head Attention)进一步提升了模型的表达能力;

  • 类比:就像人类通过大量的听力和日常对话,逐渐理解上下文中的代词指代、名词潜在含义,并学会举一反三。Transformer模型通过多头注意力机制,能够同时关注输入序列中的多个不同部分,从而更全面地理解上下文。
④ 登峰造极:GPT

GPT模型通过大量的预训练数据和自回归生成方式,使得模型能够在各种自然语言处理任务中表现出色,达到了“登峰造极”的境界。

  • 类比:就像人类通过沉浸式的大量练习,最终能够熟练使用新语言,甚至能够信手拈来地表达专业词汇和幽默段子。GPT模型通过海量数据的训练,掌握了语言的深层规律,能够在各种任务中游刃有余。

再来类比一下整个实现的步骤:

① 分解输入

假设我们有一段上下文想要计算机理解。首先,计算机会将这些输入分解为更小的部分,例如单个词汇,或称之为token。

  • 类比:就像人类在阅读时,会将句子分解为单词或短语来理解。
② 挑选出重要的部分

然后,计算机会查看这些部分并决定哪些是最重要的。它会通过每个部分与它心中的认为的“主题”进行比较来实现这一点。

  • 疑问解答:计算机如何知道哪一部分最重要?
    • 这是通过计算每个token与当前任务的“查询”之间的相似度来实现的。相似度越高,说明该token越重要。这个过程类似于K-Means算法中的“距离计算”,但Attention机制中的“查询”是动态变化的,取决于当前任务的需求。
③ 分配重要性

根据每个部分与问题的匹配程度,为其分配一个分数。分数越高,该部分就越重要。对每个部分进行评分后,系统会确定对每个部分应该给予多少关注。得分较高的部分会获得更多关注,而得分较低的部分则会获得较少关注。

  • 疑问解答:为什么需要分配权重?
    • 分配权重的目的是让模型能够动态地关注输入序列中的重要部分,而不是平等对待所有部分。加权求和的结果是一个上下文向量,它综合了输入序列中的重要信息,而不是一个单独的值。
④ 加权求和

最后,计算机将所有信息加起来,但会给重要信息赋予更大的权重。这样,计算机就能更清楚地了解输入中最重要的信息。

  • 疑问解答:为什么不直接分配权重矩阵?
    • 权重矩阵是Attention机制的核心组成部分。通过权重矩阵,模型能够动态地计算每个token的重要性,并生成一个上下文向量。这个上下文向量是模型生成输出的关键输入。

3. 全局注意力和局部注意力

注意力又分为全局注意力和局部注意力,其各有其应用场景;

① 全局注意力

在这里插入图片描述

全局注意力意味着所有的输入都很重要。在全局注意力机制中,模型会考虑编码器LSTM和解码器LSTM的所有隐藏状态来计算可变长度的上下文向量。

  • 计算量大:随着输入大小的增加,矩阵大小随之增加,进而增加了计算量。
  • 隐藏状态:隐藏状态是一个向量,多个隐藏状态代表不同语境下的隐藏状态。权重矩阵是为了方便进行批量的向量运算。
② 局部注意力

在这里插入图片描述

局部注意力是通过定义一个窗口来限制注意力的范围,从而减少计算量,但它仍然是可微的,因此与硬注意力有本质区别。硬注意力是不可微的,通常需要强化学习来训练。

  • 预测对齐位置:模型需要预测在源句子中哪个位置(( p_t ))对于当前的目标词嵌入最为重要。这里的源句子指的是原来的输入,( p_t ) 指的是编码器编码前的段落的token对应的位置向量。预测是通过训练一个模型,输入是当前的目标词token,输出当前句子中与目标词权重最高的token所在的位置向量值。
    • 预测对齐公式 p t = S ⋅ sigmoid ( v p ⊤ tanh ⁡ ( W p h t ) ) p_t = S \cdot \text{sigmoid}(v_p^\top \tanh(W_p h_t)) pt=Ssigmoid(vptanh(Wpht)),其中 S 是源句子长度, v p v_p vp W p W_p Wp 是可学习参数。
  • 定义注意力窗口:在预测的位置 p t p_t pt 周围定义一个大小为 2D 的窗口,其中 D 是经验选择的一个参数。这类似于图像卷积运算中的窗口。
  • 计算上下文向量:上下文向量是窗口内输入序列的加权平均值。权重是根据预测的位置和窗口内的每个位置之间的相似度来计算的。如果对象是矩阵,那么窗口就是一个二维的卷积窗口,计算加权平均值就是窗口内的像元值的均值。如果对象是一维的向量,那么这个输入的序列的均值就是上下文向量。如果这个窗口对全局都进行遍历,相当于对全局文本做了一个平滑处理,最后得到的就是平滑后的文本。
③ 对齐方法
  • 单调对齐:其中 ( p_t ) 设置为 ( t ),假设在时间 ( t ) 时,只有 ( t ) 附近的信息才重要。这意味着距离关键词远的结果权重更低,这也是为什么在大模型最后的时候指定的指令大模型更加遵循。
  • 预测对齐:其中模型本身预测对齐位置如下: p t = S ⋅ sigmoid ( v p ⊤ tanh ⁡ ( W p h t ) ) p_t = S \cdot \text{sigmoid}(v_p^\top \tanh(W_p h_t)) pt=Ssigmoid(vptanh(Wpht)),其中 V p V_p Vp W p W_p Wp是训练过程中学习到的模型参数,S 是源句子长度。这个公式通过sigmoid函数和tanh函数来预测对齐位置,使得模型能够动态地调整注意力窗口。

预测对齐的核心思想是通过一个可学习的模型来动态预测对齐位置,而不是像单调对齐那样简单地假设对齐位置与时间步一致。这种动态预测的能力使得模型能够更好地捕捉输入序列中的复杂依赖关系。


4. 图像字幕任务中的软注意力和硬注意力

  • 软注意力(Soft Attention):在图像字幕任务中,软注意力为所有图像区域分配权重,权重是通过Softmax函数计算的,因此是连续的。软注意力是可微的,适用于端到端训练,对标上面的全局注意力。
  • 硬注意力(Hard Attention):硬注意力是随机选择一个图像区域,而不是只考虑一个图像块。硬注意力通常使用强化学习来训练,因为它是不可微的。
  • 局部注意力与图像字幕任务的关系:局部注意力并不是软注意力和硬注意力的折中,而是一种计算效率更高的软注意力机制。它通过定义一个窗口来限制注意力的范围,从而减少计算量,但仍然保持可微性。

二、 Transformer模型中的Attention机制

1. Transformer模型概述

在这里插入图片描述

Transformer模型由Vaswani等人在2017年提出,完全基于Attention机制,摒弃了传统的RNN和CNN结构。Transformer模型的核心组件包括:

  • 编码器-解码器架构:编码器负责处理输入序列,解码器负责生成输出序列。
  • 自注意力机制(Self-Attention):允许模型在处理每个序列元素时,考虑到序列中所有其他元素的信息。
  • 多头注意力机制(Multi-Head Attention):通过并行计算多个注意力头,捕捉序列中不同部分的依赖关系。
  • 位置编码(Positional Encoding):为序列中的每个元素提供位置信息,以弥补Transformer模型缺乏递归结构的不足。
  • 前馈网络(Feed-Forward Network):在自注意力机制之后,进一步对每个位置的表示进行非线性变换。

2. Transformer组成

在这里插入图片描述

① 编码器-解码器架构

在这里插入图片描述

Transformer模型由编码器和解码器两部分组成,每部分都由多个相同的层堆叠而成。

  • 编码器:编码器由N个相同的层组成,每层包含两个子层:

    1. 多头自注意力机制:用于捕捉输入序列中各个元素之间的关系。
    2. 前馈网络:对每个位置的表示进行非线性变换。

    每个子层后面都接有残差连接(Residual Connection)和层归一化(Layer Normalization),以加速训练并提高模型的稳定性。

  • 解码器:解码器也由N个相同的层组成,每层包含三个子层:

    1. 掩码多头自注意力机制:在生成输出序列时,解码器只能看到当前及之前的元素,因此需要使用掩码来防止未来信息的泄露。
    2. 多头注意力机制:解码器通过该机制关注编码器的输出。
    3. 前馈网络:与编码器中的前馈网络相同,用于进一步处理每个位置的表示。

    解码器的每个子层后面同样接有残差连接和层归一化。

② 自注意力机制(Self-Attention)

自注意力机制是Transformer模型的核心组件之一。其工作原理如下:

  1. 输入表示:将输入序列中的每个词表示为三个向量:Query(Q)、Key(K)和Value(V)。
  2. 计算注意力分数:对于每个Query向量,计算其与所有Key向量的点积,得到注意力分数。
  3. 加权求和:根据注意力分数对Value向量进行加权求和,生成每个词的输出表示。

通过自注意力机制,模型能够捕捉序列中每个词与其他词之间的依赖关系,从而生成上下文丰富的表示。

③ 多头注意力机制(Multi-Head Attention)

在这里插入图片描述

多头注意力机制通过并行计算多个注意力头,进一步增强了模型的表达能力。每个注意力头独立计算一组Query、Key和Value向量,并生成一个输出表示。最后,将所有注意力头的输出拼接起来,并通过线性变换生成最终的输出。

多头注意力机制的优点在于:

  • 捕捉多样化的依赖关系:不同的注意力头可以关注序列中的不同部分,从而捕捉多样化的依赖关系。
  • 增强模型的表达能力:通过并行计算多个注意力头,模型能够生成更加丰富的表示。
④ 位置编码(Positional Encoding)

在这里插入图片描述

由于Transformer模型缺乏递归结构,无法直接捕捉序列中元素的位置信息。为了解决这个问题,Transformer模型引入了位置编码。位置编码通过将每个词的位置信息编码为一个向量,并与词嵌入向量相加,从而为模型提供序列的顺序信息。

位置编码的公式如下:

P E ( p o s , 2 i ) = sin ⁡ ( p o s 1000 0 2 i d m o d e l ) PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{\frac{2i}{d_{model}}}}\right) PE(pos,2i)=sin(10000dmodel2ipos)

P E ( p o s , 2 i + 1 ) = cos ⁡ ( p o s 1000 0 2 i d m o d e l ) PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{\frac{2i}{d_{model}}}}\right) PE(pos,2i+1)=cos(10000dmodel2ipos)

其中,pos表示词的位置,i表示维度索引, d m o d e l d_{model} dmodel表示词嵌入的维度。

⑤ 前馈网络(Feed-Forward Network)

在这里插入图片描述

在自注意力机制之后,Transformer模型使用前馈网络对每个位置的表示进行进一步的非线性变换。前馈网络由两个线性变换和一个激活函数组成,公式如下:

F F N ( x ) = max ⁡ ( 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

其中, W 1 W_1 W1 W 2 W_2 W2是可学习的权重矩阵, b 1 b_1 b1 b 2 b_2 b2是偏置项。前馈网络的作用是对每个位置的表示进行独立的变换,增强模型的表达能力。

⑥ 残差连接与层归一化

为了加速训练并提高模型的稳定性,Transformer模型在每个子层(自注意力机制和前馈网络)后面都添加了残差连接和层归一化。残差连接通过将输入直接加到输出上,缓解了梯度消失问题。层归一化则通过对每个样本的特征进行归一化,加速了模型的收敛。

3.Transformer工作演示

① 输入文本

假设我们有以下一段文本:

  • 原文

    “The quick brown fox jumps over the lazy dog. The dog, surprised by the sudden movement, barks loudly. The fox, unfazed, continues running.”

我们的目标是生成一个摘要,比如:

  • 摘要

    “A fox jumps over a dog, which barks loudly, but the fox keeps running.”

② Transformer 的处理流程
(1)输入编码(Input Embedding)
  • 每个单词(如 “fox”、“jumps”、“dog”)被转换为一个向量表示(词嵌入)。
  • 位置编码(Positional Encoding) 被添加到词嵌入中,以保留单词在句子中的位置信息。
(2)编码器(Encoder)

编码器由多层组成,每层包含两个主要组件:

  1. 多头自注意力机制(Multi-Head Self-Attention)
  2. 前馈神经网络(Feed-Forward Network)

自注意力机制

  • 目标:让模型关注文本中不同单词之间的关系。
  • 过程
    1. 对于每个单词,计算其 Query(Q)Key(K)Value(V) 向量。
    2. 使用 QK 计算注意力分数,表示单词之间的相关性。
    3. 使用注意力分数对 V 进行加权求和,得到每个单词的上下文表示。

多头机制

  • 模型会并行计算多个注意力头(例如 8 个),每个头关注不同的语义关系。
  • 例如:
    • 一个头可能关注 “fox” 和 “jumps” 之间的关系(动作)。
    • 另一个头可能关注 “dog” 和 “barks” 之间的关系(反应)。

前馈神经网络:

对自注意力机制的输出进行非线性变换,进一步增强表示能力。

(3)解码器(Decoder)

解码器也由多层组成,每层包含三个主要组件:

  1. 掩码多头自注意力机制(Masked Multi-Head Self-Attention)
  • 解码器只能看到当前及之前的单词,避免未来信息泄露。
  1. 编码器-解码器注意力机制(Encoder-Decoder Attention)
  • 解码器关注编码器的输出,结合上下文信息。
  1. 前馈神经网络(Feed-Forward Network)
  • 对注意力机制的输出进行进一步处理。

③ 具体流程演示
(1)编码器处理输入文本
  • 模型首先对输入文本进行编码。
  • 在多头自注意力机制中:
  - 一个注意力头发现 “fox” 和 “jumps” 之间的关系(动作)。- 另一个注意力头发现 “dog” 和 “barks” 之间的关系(反应)。- 第三个注意力头发现 “fox” 和 “running” 之间的关系(持续动作)。
  • 解码器根据编码器的输出,逐步生成摘要。

例如:

  1. 生成单词 “A”:- 解码器从编码器中提取到 “fox” 是句子的主语。2. 生成单词 “fox”:- 解码器关注编码器中 “fox” 的上下文信息。3. 生成单词 “jumps”:- 解码器从编码器中提取到 “fox” 和 “jumps” 之间的关系。4. 生成单词 “over”:- 解码器关注编码器中 “jumps” 和 “dog” 之间的关系。5. 生成单词 “a”:- 解码器从编码器中提取到 “dog” 是句子的宾语。6. 生成单词 “dog”:- 解码器关注编码器中 “dog” 的上下文信息。7. 生成单词 “which”:- 解码器从编码器中提取到 “dog” 和 “barks” 之间的关系。8. 生成单词 “barks”:- 解码器关注编码器中 “barks” 的上下文信息。9. 生成单词 “loudly”:- 解码器从编码器中提取到 “barks” 和 “loudly” 之间的关系。10. 生成单词 “but”:- 解码器关注编码器中 “fox” 和 “running” 之间的关系。11. 生成单词 “the”:- 解码器从编码器中提取到 “fox” 是句子的主语。12. 生成单词 “fox”:- 解码器关注编码器中 “fox” 的上下文信息。13. 生成单词 “keeps”:- 解码器从编码器中提取到 “fox” 和 “running” 之间的关系。14. 生成单词 “running”:- 解码器关注编码器中 “running” 的上下文信息。
  • 最终生成的摘要为:
    “A fox jumps over a dog, which barks loudly, but the fox keeps running.”

在这个例子中,多头注意力机制的作用体现在:

  1. 捕捉多样化的语义关系
    • 一个注意力头关注 “fox” 和 “jumps” 之间的关系(动作)。
    • 另一个注意力头关注 “dog” 和 “barks” 之间的关系(反应)。
    • 第三个注意力头关注 “fox” 和 “running” 之间的关系(持续动作)。
  2. 增强模型的表达能力
    • 通过并行计算多个注意力头,模型能够生成更加丰富和准确的摘要。

希望这个demo能帮助各位更好地理解 Transformer 的工作流程🙂!

4.Transformer模型在GIS中的应用案例

作为一个GIS开发者,我也得举个案例辅助同行理解:我们可以将其应用到地理信息系统(GIS)中的一个具体案例中。假设我们正在处理一个城市交通流量预测的任务,目标是预测未来某个时间段的交通流量。我们可以将这个过程类比为Transformer模型的工作方式。

① 数据收集阶段(编码器 - Encoder)

类比:收集交通数据

  • 收集信息:首先,我们需要收集城市中各个路段的交通流量数据,包括历史流量、天气情况、节假日信息等。这就像Transformer模型的编码器在接收输入信息。
  • 记录数据:我们将这些数据记录下来,比如某条道路在早高峰时段的平均车速、某个交叉口的车流量等。这些记录就像Transformer模型中的“编码”过程,将原始信息转换成内部表示。
② 数据分析阶段(自注意力机制 - Self-Attention)

类比:分析交通数据的关联性

  • 考虑关联性:在分析交通数据时,我们注意到某些路段在特定天气条件下的流量会显著增加,比如下雨天时,高速公路的流量可能会减少,而城市主干道的流量会增加。这个考虑关联性的过程就像Transformer模型中的自注意力机制,它能够注意到不同信息之间的关联性。
  • 优先级排序:我们进一步发现,某些路段在节假日期间的流量变化最为显著,因此我们会优先考虑这些路段的数据。这个决定过程就像自注意力机制中的权重分配,重要的信息会被赋予更高的权重。
③ 预测阶段(解码器 - Decoder)

类比:生成交通流量预测

  • 按计划预测:根据记录的交通数据和考虑到的关联性,我们开始生成未来某个时间段的交通流量预测。这就像Transformer模型的解码器,它根据编码器的输出和自注意力机制的结果来生成最终的输出。
  • 调整细节:在预测过程中,我们可能会根据实际情况调整预测模型,比如发现某个路段的施工信息,我们会调整该路段的预测结果。这就像解码器在生成输出时会根据上下文调整细节。
⑤ 结果应用阶段

类比:应用预测结果

  • 享受成果:最终,我们得到了未来某个时间段的交通流量预测结果,并可以将其应用于交通管理、路线规划等实际场景中。这就像Transformer模型成功完成了预测任务。

通过这个GIS中的交通流量预测案例,我们可以看到Transformer模型的工作流程:

  • 编码器(数据收集阶段接收并处理输入信息(交通数据)。
  • 自注意力机制(数据分析阶段识别信息之间的关联性并分配权重(考虑天气、节假日等因素)。
  • 解码器(预测阶段根据编码器的输出和自注意力机制的结果生成最终的输出(交通流量预测)。
  • 结果应用阶段将预测结果应用于实际场景中。

这样,Transformer模型就像一个高效的交通流量预测系统,能够根据不同的数据需求和关联性来完成任务。

作者这里再次感谢一下Deepseek😉😊帮我生成这个案例!


三、Transformer模型的计算复杂度与并行性

1. 计算复杂度

Transformer模型的计算复杂度主要来自于自注意力机制。假设输入序列长度为 n n n,每个词的维度为 d d d,则自注意力机制的计算复杂度为 O ( n 2 ⋅ d ) O(n^2 \cdot d) O(n2d)。相比之下,RNN的计算复杂度为 O ( n ⋅ d 2 ) O(n \cdot d^2) O(nd2),CNN的计算复杂度为 O ( k ⋅ n ⋅ d 2 ) O(k \cdot n \cdot d^2) O(knd2),其中 k k k为卷积核的大小。

2. 并行操作数量

Transformer模型的并行操作数量为 O ( 1 ) O(1) O(1),因为自注意力机制可以同时计算所有词的注意力分数。相比之下,RNN的并行操作数量为 O ( n ) O(n) O(n),因为RNN需要按顺序处理每个词。

3. 最长计算路径

Transformer模型的最长计算路径为 O ( 1 ) O(1) O(1),因为自注意力机制可以一次性处理整个序列。相比之下,RNN的最长计算路径为 O ( n ) O(n) O(n),因为RNN需要依次处理每个词。


四、Transformer模型的应用与发展

1. 应用场景

在这里插入图片描述

Transformer模型在NLP领域的应用非常广泛,包括:

  • 机器翻译:Transformer模型在机器翻译任务中取得了显著的性能提升。
  • 文本摘要:通过捕捉文本中的关键信息,Transformer模型能够生成高质量的文本摘要。
  • 问答系统:Transformer模型能够理解问题的上下文,并生成准确的答案。

2. 预训练模型的发展

Transformer模型的成功为预训练模型的发展奠定了基础。例如,BERT、GPT等模型都是基于Transformer架构的预训练模型。这些模型通过在大量未标注文本上进行预训练,学习到了丰富的语言表示,并在多种下游任务中取得了显著的性能提升。

在这里插入图片描述

年份里程碑模型/技术主要贡献
2013Word Embedding提出词嵌入(如 Word2Vec),将单词映射到低维向量空间,捕捉语义信息。
2017Transformer提出 Transformer 模型,完全基于注意力机制,摒弃 RNN 和 CNN 结构。
2018ELMo提出上下文相关的词表示(Contextualized Word Embeddings)。
2018Transformer-Decoder (GPT-1)提出 GPT-1,基于 Transformer 解码器,用于生成式预训练。
2018BERT提出 BERT,基于 Transformer 编码器,使用双向上下文进行预训练。
2019Transformer-XL提出 Transformer-XL,解决长文本建模问题,引入循环机制。
2019XLNet提出 XLNet,结合自回归和自编码的优点,提升预训练效果。
2019GPT-2提出 GPT-2,更大规模的 GPT 模型,生成能力显著提升。
2020GPT-3提出 GPT-3,参数量达到 1750 亿,展示了少样本学习和强大生成能力。
2021Codex (基于 GPT-3)提出 Codex,专门用于代码生成和理解,支持 GitHub Copilot。
2022ChatGPT (基于 GPT-3.5)提出 ChatGPT,专注于对话生成,展示了强大的自然语言交互能力。
2023GPT-4提出 GPT-4,进一步扩展模型规模,支持多模态输入(文本、图像等)。

五、Transformer vs CNN vs RNN

特征提取器计算复杂度并行操作数量学习距离长度
Transformer O ( n 2 ⋅ d ) O(n^2 \cdot d) O(n2d) O ( 1 ) O(1) O(1) O ( 1 ) O(1) O(1)
CNN O ( k ⋅ n ⋅ d 2 ) O(k \cdot n \cdot d^2) O(knd2) O ( n ) O(n) O(n) O ( log ⁡ k n ) O(\log_k n) O(logkn)
RNN O ( n ⋅ d 2 ) O(n \cdot d^2) O(nd2) O ( n ) O(n) O(n) O ( n ) O(n) O(n)

六、总结

Attention机制通过动态地为输入序列中的每个词分配不同的权重,有效地解决了传统Encoder-Decoder架构中的长程依赖问题。Transformer模型通过引入自注意力机制和多头注意力机制,进一步增强了模型的表达能力,并在NLP任务中取得了显著的性能提升。随着预训练模型的发展,Transformer模型的应用前景将更加广阔。🤔

OK!今天就学习到这里了!🙂


项目地址

  • 拓展阅读
  • 专栏文章

thank_watch

如果觉得我的文章对您有帮助,三连+关注便是对我创作的最大鼓励!或者一个star🌟也可以😂.

相关文章:

Transformer详解:Attention机制原理

前言 Hello,大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者,本系列文章是作者参加DataWhale2025年1月份学习赛,旨在讲解Transformer模型的理论和实践。😲 本文将详细探讨Attention机制的原理…...

网络安全技术深度解析与实践案例

网络安全技术深度解析与实践案例 随着信息技术的飞速发展,网络已成为现代社会不可或缺的一部分。然而,网络空间的开放性也带来了各种安全隐患。为了保障网络和数据的安全,网络安全技术显得尤为重要。本文将深入探讨网络安全技术的核心要素,并通过Python代码示例展示其具体…...

JavaScript中提高效率的技巧一

1.生成随机颜色的两种方式 1).生成RandomHexColor const generateRandomHexColor () > {return #${Math.floor(Math.random() * 0xffffff).toString(16).padStart(6, 0)} } generateRandomHexColor() // #a8277c generateRandomHexColor() // #09c20c generat…...

美食推荐系统 协同过滤余弦函数推荐美食 Springboot Vue Element-UI前后端分离

个性化美食推荐系统 协同过滤余弦函数推荐美食 Echart数据统计 Springboot Vue Element-UI前后端分离 【亮点功能】 1.SpringbootVueElement-UIMysql前后端分离 2.Echarts图表统计数据, 直观展示数据情况 3.发表评论后,用户可以回复评论, 回复的评论可以被再次回复,…...

ThinkPHP 8的一对多关联

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 使用VS Code开发ThinkPHP项目-CSDN博客 编程与应用开…...

Django简介与虚拟环境安装Django

目录 1.Django简介 1.1 Django 的核心特点 1.2 Django 的核心组件 1.3 Django 的应用场景 1.4 总结 2.基础环境建立 2.1 创建虚拟环境 2.1.1 使用 virtualenv 创建虚拟环境 2.1.2 使用 venv 创建虚拟环境 2.2 激活虚拟环境 2.2.1 在 Windows 上 2.2.2 在 macOS 或 …...

Redis延迟队列详解

以下是对 Redis 延迟队列的详细解释: 一、什么是 Redis 延迟队列 Redis 延迟队列是一种使用 Redis 实现的消息队列,其中的消息在被消费之前会等待一段时间,这段时间就是延迟时间。延迟队列常用于一些需要延迟处理的任务场景,例如订…...

一文大白话讲清楚webpack基本使用——2——css相关loader的配置和使用

一文大白话讲清楚webpack基本使用——2——css相关loader的配置和使用 1. 建议按文章顺序从头看是看 第一篇:一文大白话讲清楚啥是个webpack第二篇:一文大白话讲清楚webpack基本使用——1——完成webpack的初步构建然后看本篇,Loader的配置…...

第二代增强-采购申请屏幕增强

这篇文章可能有点乱,但是都是学习的一个过程,问题就是在ME52N修改采购申请增强字段之后,点击保存之后无法更新到数据库,困扰了很久,终于解决了,特此记录 文章目录 需求创建增强结构测试屏幕ZXM02TOP创建屏幕…...

图论DFS:黑红树

我的个人主页 {\large \mathsf{{\color{Red} 我的个人主页} } } 我的个人主页 往 {\color{Red} {\Huge 往} } 往 期 {\color{Green} {\Huge 期} } 期 文 {\color{Blue} {\Huge 文} } 文 章 {\color{Orange} {\Huge 章}} 章 DFS 算法:记忆化搜索DFS 算法&#xf…...

零基础一篇打通Vue极速通关教程

文章目录 写给零基础看的Vue极速掌握教程第1章 Vue简介1.1 Vue 概述1.2 MVVM 模式1.3 WebStorm开发工具1.3.1 WebStorm简介1.3.2 集成Vue开发调试工具 第2章 Vue的事件绑定2.1 Vue基本使用2.1.1 插值表达式2.1.2 注意事项 2.2 Vue事件绑定2.1.1 点击事件2.2.2 键盘事件2.2.3 移…...

商城系统中的常见 BUG

以下是商城系统中一些常见的 BUG: 功能与操作类 支付问题:如无法成功完成支付,支付过程中出现延迟、错误或订单重复支付等,还可能因网络问题导致支付失败或数据不一致。 登录 / 注册问题:用户在注册或登录时可能遇到…...

下定决心不去读研了。。。

大家好,我是苍何。 之前发表过一篇文章,表达了自己读研的困惑和纠结,得到了大家很多的建议,也引起了很多人的共鸣,在留言区分享了自己的故事,看着这些故事,我觉得都够苍何写一部小说了。 可惜苍…...

100个网络基础知识

1)什么是链接? 链接是指两个设备之间的连接。它包括用于一个设备能够与另一个设备通信的电缆类型和协议。 2)OSI 参考模型的层次是什么? 有 7 个 OSI 层:物理层,数据链路层,网络层,传输层,会话层,表示…...

庄小焱——2024年博文总结与展望

摘要 大家好,我是庄小焱。岁末回首,2024 年是我在个人成长、博客创作以及生活平衡方面收获颇丰的一年。这一年的经历如同璀璨星辰,照亮了我前行的道路,也为未来的发展奠定了坚实基础。 1. 个人成长与突破 在 2024 年&#xff0c…...

高通8255 Android STR 启动失败要因分析调查

目录 背景: 调查过程: 步骤1: slog2info | grep vmm_service 步骤2: slog2info | grep qvm 总结: 解决方案 背景: 调试高通8255 STR的STR过程中发现Android和QNX进入STR状态后,脱出STR时…...

Qt QML专栏目录结构

第1章 走进Qt Quick的世界... 4 ★1.4 Qt Quick应用... 4 ★1.5 Qt Quick UI项目(qmlproject工程) 4 第2章 QML语法... 4 ★2.2 import导入语句... 4 ★2.3 QML类型系统... 5 ★2.4 对象特性(Attributes)... 6 三个等于号JavaScript语…...

“深入浅出”系列之FFmpeg:(3)音视频开发的学习路线和必备知识

一、岗位要求 音视频开发属于我自己想要学习的板块,我想知道公司招聘音视频开发工程师所需要的条件,于是我就从招聘网站上找来了几个有关音视频开发的岗位需求,内容仅供参考: (1)算法工程师-视频编解码 …...

Webpack简述

一、为什么要构建工具 人类喜欢书写的代码以及开发方式计算机不喜欢,构建工具的作用就是让人类舒舒服服写自己喜欢的代码,然后一打包生成计算机喜欢的代码 第一个webpack自身仅仅是将我们引入的模块打包成一个文件(编译import)&am…...

解决 Error: Invalid or corrupt jarfile day04_studentManager.jar 报错问题

在 Java 开发过程中,我们可能会遇到这样的报错信息:Error: Invalid or corrupt jarfile day04_studentManager.jar。这个错误通常表示 day04_studentManager.jar 文件可能已损坏或无效,下面将为大家详细介绍如何解决这个问题。 一、错误点分…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...