前言
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机制通过以下步骤实现:
- 分解输入:将输入序列分解为多个词或token。
- 计算注意力分数:对于每个输出词,计算其与输入序列中每个词的相似度(通常通过点积、加性注意力或其他相似度度量方法)。
- 公式化表示: 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 个隐藏状态。
- 计算注意力权重:通过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=∑s′exp(et,s′)exp(et,s)。
- 加权求和:根据注意力权重对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。
- 生成输出:将上下文向量 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=S⋅sigmoid(vp⊤tanh(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=S⋅sigmoid(vp⊤tanh(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个相同的层组成,每层包含两个子层:
- 多头自注意力机制:用于捕捉输入序列中各个元素之间的关系。
- 前馈网络:对每个位置的表示进行非线性变换。
每个子层后面都接有残差连接(Residual Connection)和层归一化(Layer Normalization),以加速训练并提高模型的稳定性。
-
解码器:解码器也由N个相同的层组成,每层包含三个子层:
- 掩码多头自注意力机制:在生成输出序列时,解码器只能看到当前及之前的元素,因此需要使用掩码来防止未来信息的泄露。
- 多头注意力机制:解码器通过该机制关注编码器的输出。
- 前馈网络:与编码器中的前馈网络相同,用于进一步处理每个位置的表示。
解码器的每个子层后面同样接有残差连接和层归一化。
② 自注意力机制(Self-Attention)
自注意力机制是Transformer模型的核心组件之一。其工作原理如下:
- 输入表示:将输入序列中的每个词表示为三个向量:Query(Q)、Key(K)和Value(V)。
- 计算注意力分数:对于每个Query向量,计算其与所有Key向量的点积,得到注意力分数。
- 加权求和:根据注意力分数对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)
编码器由多层组成,每层包含两个主要组件:
- 多头自注意力机制(Multi-Head Self-Attention)
- 前馈神经网络(Feed-Forward Network)
自注意力机制
- 目标:让模型关注文本中不同单词之间的关系。
- 过程:
- 对于每个单词,计算其 Query(Q)、Key(K) 和 Value(V) 向量。
- 使用 Q 和 K 计算注意力分数,表示单词之间的相关性。
- 使用注意力分数对 V 进行加权求和,得到每个单词的上下文表示。
多头机制:
- 模型会并行计算多个注意力头(例如 8 个),每个头关注不同的语义关系。
- 例如:
- 一个头可能关注 “fox” 和 “jumps” 之间的关系(动作)。
- 另一个头可能关注 “dog” 和 “barks” 之间的关系(反应)。
前馈神经网络:
对自注意力机制的输出进行非线性变换,进一步增强表示能力。
(3)解码器(Decoder)
解码器也由多层组成,每层包含三个主要组件:
- 掩码多头自注意力机制(Masked Multi-Head Self-Attention)
- 解码器只能看到当前及之前的单词,避免未来信息泄露。
- 编码器-解码器注意力机制(Encoder-Decoder Attention)
- 解码器关注编码器的输出,结合上下文信息。
- 前馈神经网络(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.”
在这个例子中,多头注意力机制的作用体现在:
- 捕捉多样化的语义关系:
- 一个注意力头关注 “fox” 和 “jumps” 之间的关系(动作)。
- 另一个注意力头关注 “dog” 和 “barks” 之间的关系(反应)。
- 第三个注意力头关注 “fox” 和 “running” 之间的关系(持续动作)。
- 增强模型的表达能力:
- 通过并行计算多个注意力头,模型能够生成更加丰富和准确的摘要。
希望这个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(n2⋅d)。相比之下,RNN的计算复杂度为 O ( n ⋅ d 2 ) O(n \cdot d^2) O(n⋅d2),CNN的计算复杂度为 O ( k ⋅ n ⋅ d 2 ) O(k \cdot n \cdot d^2) O(k⋅n⋅d2),其中 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架构的预训练模型。这些模型通过在大量未标注文本上进行预训练,学习到了丰富的语言表示,并在多种下游任务中取得了显著的性能提升。
年份 | 里程碑模型/技术 | 主要贡献 |
---|---|---|
2013 | Word Embedding | 提出词嵌入(如 Word2Vec),将单词映射到低维向量空间,捕捉语义信息。 |
2017 | Transformer | 提出 Transformer 模型,完全基于注意力机制,摒弃 RNN 和 CNN 结构。 |
2018 | ELMo | 提出上下文相关的词表示(Contextualized Word Embeddings)。 |
2018 | Transformer-Decoder (GPT-1) | 提出 GPT-1,基于 Transformer 解码器,用于生成式预训练。 |
2018 | BERT | 提出 BERT,基于 Transformer 编码器,使用双向上下文进行预训练。 |
2019 | Transformer-XL | 提出 Transformer-XL,解决长文本建模问题,引入循环机制。 |
2019 | XLNet | 提出 XLNet,结合自回归和自编码的优点,提升预训练效果。 |
2019 | GPT-2 | 提出 GPT-2,更大规模的 GPT 模型,生成能力显著提升。 |
2020 | GPT-3 | 提出 GPT-3,参数量达到 1750 亿,展示了少样本学习和强大生成能力。 |
2021 | Codex (基于 GPT-3) | 提出 Codex,专门用于代码生成和理解,支持 GitHub Copilot。 |
2022 | ChatGPT (基于 GPT-3.5) | 提出 ChatGPT,专注于对话生成,展示了强大的自然语言交互能力。 |
2023 | GPT-4 | 提出 GPT-4,进一步扩展模型规模,支持多模态输入(文本、图像等)。 |
五、Transformer vs CNN vs RNN
特征提取器 | 计算复杂度 | 并行操作数量 | 学习距离长度 |
---|---|---|---|
Transformer | O ( n 2 ⋅ d ) O(n^2 \cdot d) O(n2⋅d) | 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(k⋅n⋅d2) | 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(n⋅d2) | O ( n ) O(n) O(n) | O ( n ) O(n) O(n) |
六、总结
Attention机制通过动态地为输入序列中的每个词分配不同的权重,有效地解决了传统Encoder-Decoder架构中的长程依赖问题。Transformer模型通过引入自注意力机制和多头注意力机制,进一步增强了模型的表达能力,并在NLP任务中取得了显著的性能提升。随着预训练模型的发展,Transformer模型的应用前景将更加广阔。🤔
OK!今天就学习到这里了!🙂
项目地址
- 拓展阅读
- 专栏文章
如果觉得我的文章对您有帮助,三连+关注便是对我创作的最大鼓励!或者一个star🌟也可以😂.