从与原始的Transformer architecture比较来理解GPT
flyfish
一、Transformer architecture
先说名词
不同的文献和资料中有不同的名字,其实是一样的意思
1 编码器-解码器多头注意力机制(Encoder-Decoder Multi-Head Attention Mechanism)
其他名字:
交叉注意力机制(Cross-Attention Mechanism)
源-目标注意力机制(Source-Target Attention Mechanism)
解码器-编码器注意力机制(Decoder-Encoder Attention Mechanism)
2 遮蔽多头自注意力机制(Masked Multi-Head Self-Attention Mechanism )
其他名字:
因果注意力机制(Causal Attention Mechanism)
未来位置遮蔽注意力机制(Look-Ahead Masking Attention Mechanism)
遮蔽自注意力机制(Masked Self-Attention Mechanism)
前向遮蔽注意力机制(Forward Masking Attention Mechanism)
名字很多,意思是一样的
组成
编码器(Encoder):
编码器由 N 个相同的层堆叠而成,每个层包含两个子层:
多头自注意力机制(Multi-Head Self-Attention Mechanism)
前馈神经网络(Feed-Forward Neural Network)
每个子层后都包含残差连接和层归一化(Layer Normalization)。
解码器(Decoder):
解码器也由 N 个相同的层堆叠而成,每个层包含三个子层:
多头自注意力机制(Masked Multi-Head Self-Attention Mechanism)(带有掩码以防止未来信息泄露)
编码器-解码器多头注意力机制(Encoder-Decoder Multi-Head Attention Mechanism)
前馈神经网络(Feed-Forward Neural Network)
每个子层后也包含残差连接和层归一化。
位置嵌入(Positional Encoding):
为了保留序列的位置信息,通常在输入中加入位置嵌入。
生成器(Generator):
用于将解码器的输出映射到词汇表中的概率分布。
原始的 Transformer 架构中,编码器和解码器的多头注意力机制有以下几种类型
图中流程是从下往上走
编码器:使用一个双向的多头自注意力机制。
解码器:使用一个单向的遮蔽多头自注意力机制(因果注意力机制)和一个双向的编码器-解码器多头注意力机制(交叉注意力机制)
编码器中的多头注意力
- 多头自注意力机制(Multi-Head Self-Attention Mechanism) :
-
类型 :双向的(Bidirectional)这种机制允许模型捕捉输入序列中的全局依赖关系,因为它可以同时考虑到元素的前后文。
-
功能 :对输入序列中的每个位置,通过查看序列中的所有其他位置(包括前后位置)来计算其表示。这种机制允许编码器捕捉输入序列中全局的依赖关系。
解码器中的多头注意力
解码器中的多头注意力机制包括两种类型:
- 遮蔽多头自注意力机制(Masked Multi-Head Self-Attention Mechanism)图下部分 :
-
类型 :单向的(Unidirectional),又称因果注意力机制(Causal Attention Mechanism)。这种机制用于生成任务中,确保模型生成的每个位置的元素只能依赖于之前生成的元素,而不能依赖于未来的元素。
-
功能 :对解码器输入序列的每个位置,通过仅查看该位置及其之前的所有位置来计算其表示。这确保了生成过程中的每个步骤只能看到之前生成的内容,而不能看到未来的内容,从而保持生成序列的因果性。
- 编码器-解码器多头注意力机制(Encoder-Decoder Multi-Head Attention Mechanism)图上部分 :
-
类型 :双向的(Bidirectional),也称交叉注意力机制(Cross-Attention Mechanism)。
-
位置 :在解码器层中,位于遮蔽多头自注意力机制之后。
-
功能 :通过查看编码器的输出序列,为解码器提供额外的上下文信息。解码器每个位置通过查看整个编码器输出序列,来生成与输入序列相关的表示。
二、Decoder-Only Transformer Architecture
Decoder-Only Transformer Architecture 是一种只包含解码器部分的 Transformer 模型。与标准的 Transformer 模型不同,它省略了编码器部分,只使用解码器进行任务处理。GPT-2 就是一个典型的 Decoder-Only Transformer 模型。
组成部分
输入嵌入层(Input Embedding Layer):
将输入的单词或符号嵌入到高维向量空间中。
位置编码(Positional Encoding):
添加位置编码以保留序列中单词的位置信息。
堆叠的解码器层(Stacked Decoder Layers):
多个相同的解码器层堆叠而成,每个解码器层包含:
遮蔽多头自注意力机制(Masked Multi-Head Self-Attention Mechanism)
前馈神经网络(Feed-Forward Neural Network)
残差连接和层归一化(Residual Connections and Layer Normalization)
输出层(Output Layer):
将解码器的输出映射到词汇表中的概率分布。
GPT-2 是一种典型的自回归架构(autoregressive architecture)模型。
GPT-2 的自回归特性
逐步生成文本:
GPT-2 在生成文本时,通过逐步生成每个单词,每个生成的单词只依赖于之前生成的单词。
遮蔽多头自注意力机制:
在训练和推理过程中,GPT-2 使用遮蔽多头自注意力机制,确保每个位置只能看到当前位置及其之前的位置,而不能看到未来的位置。
模型结构:
GPT-2 的模型结构是一个 Decoder-Only Transformer,其中的每一层都使用自回归机制进行文本生成。
如果自回归 用数学语言描述是(不喜欢的,可以跳过,不影响理解)
序列中的每个元素 x t x_t xt 是基于之前生成的元素 x 1 , x 2 , . . . , x t − 1 x_1, x_2, ..., x_{t-1} x1,x2,...,xt−1 来生成的,公式如下:
p ( x ) = p ( x 1 ) p ( x 2 ∣ x 1 ) p ( x 3 ∣ x 1 , x 2 ) ⋯ p ( x T ∣ x 1 , x 2 , ... , x T − 1 ) p(x) = p(x_1) p(x_2|x_1) p(x_3|x_1, x_2) \cdots p(x_T|x_1, x_2, \ldots, x_{T-1}) p(x)=p(x1)p(x2∣x1)p(x3∣x1,x2)⋯p(xT∣x1,x2,...,xT−1)
-
联合概率分布 :
p ( x ) = p ( x 1 ) p ( x 2 ∣ x 1 ) p ( x 3 ∣ x 1 , x 2 ) ⋯ p ( x T ∣ x 1 , x 2 , ... , x T − 1 ) p(x) = p(x_1) p(x_2|x_1) p(x_3|x_1, x_2) \cdots p(x_T|x_1, x_2, \ldots, x_{T-1}) p(x)=p(x1)p(x2∣x1)p(x3∣x1,x2)⋯p(xT∣x1,x2,...,xT−1)这个公式表示生成序列 x x x 的联合概率等于依次生成每个元素的条件概率的乘积。
-
逐步生成 :
-
第一步,生成第一个元素 x 1 x_1 x1 的概率是 p ( x 1 ) p(x_1) p(x1)。
-
第二步,在已生成 x 1 x_1 x1 的条件下生成 x 2 x_2 x2,其概率是 p ( x 2 ∣ x 1 ) p(x_2 | x_1) p(x2∣x1)。
-
第三步,在已生成 x 1 x_1 x1 和 x 2 x_2 x2 的条件下生成 x 3 x_3 x3,其概率是 p ( x 3 ∣ x 1 , x 2 ) p(x_3 | x_1, x_2) p(x3∣x1,x2)。
-
依此类推,直到生成第 T T T 个元素 x T x_T xT,其概率是 p ( x T ∣ x 1 , x 2 , ... , x T − 1 ) p(x_T | x_1, x_2, \ldots, x_{T-1}) p(xT∣x1,x2,...,xT−1)。
-
-
p ( x ) p(x) p(x) :整个序列 x x x 的联合概率分布。
p ( x ) p(x) p(x) 表示生成整个序列 x x x 的概率。 -
x x x :序列。
x x x 是由 T T T 个元素组成的序列,可以是单词、字符或其他符号。
x x x 通常表示整个序列,例如在文本生成中, x x x 可能是一个句子或段落。 -
x i x_i xi :序列中的第 i i i 个元素。
x i x_i xi 表示序列 x x x 中的第 i i i 个元素。例如,在文本生成中, x i x_i xi 可能是一个单词或字符。 -
p ( x i ∣ x 1 , x 2 , ... , x i − 1 ) p(x_i | x_1, x_2, \ldots, x_{i-1}) p(xi∣x1,x2,...,xi−1) :给定之前的元素 x 1 , x 2 , ... , x i − 1 x_1, x_2, \ldots, x_{i-1} x1,x2,...,xi−1 的条件下,第 i i i 个元素 x i x_i xi 的条件概率。
这个条件概率表示在已经生成了序列的前 i − 1 i-1 i−1 个元素之后,生成第 i i i 个元素的概率。
例如, p ( x 3 ∣ x 1 , x 2 ) p(x_3 | x_1, x_2) p(x3∣x1,x2) 表示在已经生成了 x 1 x_1 x1 和 x 2 x_2 x2 之后,生成 x 3 x_3 x3 的概率。
-
T T T :序列的长度。
T T T 表示序列中元素的总数。例如,在文本生成中,如果序列是一个句子, T T T 可能是句子中的单词总数。
三、GPT-2 (Decoder-Only Transformer)(autoregressive architecture)
输入嵌入层和位置编码
将输入序列的每个单词转换为嵌入向量,并加上位置编码。
遮蔽多头自注意力机制
在每个解码器层中使用遮蔽多头自注意力机制,确保每个位置只看到当前位置及其之前的位置。
前馈神经网络
每个解码器层中包含一个前馈神经网络,用于进一步处理注意力机制的输出。
残差连接和层归一化
每个子层之后使用残差连接和层归一化,以稳定训练过程和加速模型收敛。
输出层
最后将解码器的输出映射到词汇表中的概率分布,用于生成下一个单词