Does GPT's 'decoder-only' architecture mean it consists of only a decoder?

GPT的decoder-only是只有decoder吗?

事情的起因是我和朋友争论GPT模型到底有没有encoder。他认为GPT或类似的模型其实有一个很小的encoder,并且encoder和decoder之间会有cross attention。而我的观点则是GPT只有decoder部分,没有encoder。

于是有了这篇论文考古。

GPT

论文链接:https://cdn.openai.com/research-covers/language-unsupervised/language\_understanding\_paper.pdf

GPT 1.0

GPT1.0分为训练和微调

训练

微调

训练就是纯预测(优化一个目标函数),微调是同时做预测和分类(作者发现这样泛化性更好),优化目标为一组目标函数的和。

架构图可以到,就是只用了解码器,没有用编码器。

论文中谈及架构的时候提到了引用34和62。说他们使用的decoder是来自transformer的一个变体。

GENERATING WIKIPEDIA BY SUMMARIZING LONG
SEQUENCES

Attention is all you need.

34的文章提出了一个decoder-only的架构,用来生成像维基百科一样的文章,作者认为用decoder-only能够关注更长的序列,这比常见的在序列转换任务中使用的编码器—解码器架构所能处理的序列要长得多。在引言部分和模型示例图可以看到他们模型只包含deocder.

作者仅以不做了实验发现,比起encoder-decoder架构,decoder-only能微量提点,但是能处理的长度显著增加。

那么原来做cross attention那一层去哪里了?

在GPT1.0和它引用的论文里面是直接删掉了。只有masked multi-head
attention

GPT 2.0

那在GPT2.0, 3.0用了吗?

Language Models are Unsupervised Multitask Learners

https://cdn.openai.com/better-language-models/language\_models\_are\_unsupervised\_multitask\_learners.pdf

GPT2.0在模型描述里面提到只在GPT1.0上做了微小改动,如果加了encoder应该属于模型大变化,应该会提到。

从源码里面看就是decoder-only
https://github.com/openai/gpt-2/blob/master/src/model.py

GPT 3.0

Language Models are Few-Shot Learners

https://arxiv.org/pdf/2005.14165

提到架构和GPT2.0一样

GPT 4.0

CloseAI的技术报告没有提模型细节,一种比较可靠的说法是他们要做多模态所以引入的ViT或者clip之类的技术理解媒体文件。但是这里我猜应该是只是做完embedding和文字的embedding一起输入,不能算是有"cross-attention"的encoder。

Decoder only有什么好处?

这里借用知乎这里的讨论
重新梳理一下。

注意力机制的数学特性(苏剑林观点)

**核心观点:**双向注意力容易退化为低秩,而因果注意力必然满秩。

详细解释与例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
双向注意力示例
句子:"我爱北京天安门"
双向注意力矩阵(简化示例)
[
[0.2, 0.2, 0.2, 0.2, 0.2], "我"看所有词
[0.2, 0.2, 0.2, 0.2, 0.2], "爱"看所有词
[0.2, 0.2, 0.2, 0.2, 0.2], "北京"看所有词
[0.2, 0.2, 0.2, 0.2, 0.2], "天安"看所有词
[0.2, 0.2, 0.2, 0.2, 0.2], "门"看所有词
]
容易退化为低秩:所有行向量相似
因果注意力示例(decoder-only)
[
[1.0, 0, 0, 0, 0], "我"只看自己
[0.5, 0.5, 0, 0, 0], "爱"看"我"和自己
[0.3, 0.3, 0.4, 0, 0], "北京"看前面的词
[0.2, 0.2, 0.3, 0.3, 0], "天安"看前面的词
[0.2, 0.2, 0.2, 0.2, 0.2], "门"看所有前面的词
]
下三角矩阵,必然满秩,表达能力更强

如果注意力矩阵变成低秩,相当于模型"眼里看到的东西都一样",很多不同的位置/内容其实被糊成了一坨,没法细致地区分信息。

预测任务难度与泛化能力(@yili观点)

**核心观点:**更难的预测任务促使模型学习更好的通用表征。

具体例子:

预测"北京"这个词时:

Encoder-Decoder:可以看到完整句子"我爱[MASK]天安门",从两边获取信息

Decoder-Only:只能看到"我爱",必须从更少的信息中推断

这种"信息饥渴"迫使模型:

学习更强的语言模型能力

更好地理解词序和语法结构

形成更通用的表征

上下文学习的天然优势(@mimimumu观点)

**核心观点:**Decoder-only架构让prompt能直接作用于每一层。

Few-shot学习示例:

1
2
3
4
5
6
7
输入你给出的格式去掉多余斜线,改成:

问:什么是机器学习?
答:机器学习是让计算机从数据中学习的技术。

问:什么是深度学习?
答:[模型生成]

在Decoder-only中:

每个token的表示逐层构建时,都能直接参考前面的示例

Prompt信息像"隐式微调"一样影响每一层的计算

而Encoder-Decoder需要先编码完整输入,再解码,信息传递路径更长。

隐式位置编码特性

**核心观点:**因果注意力天然具有位置敏感性。

对比例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
没有位置编码的双向注意力
"我爱你" 和 "你爱我" 可能产生相似的表示

因果注意力(即使没有显式位置编码)
"我爱你":

"我":只看自己
"爱":看"我"+"爱"
"你":看"我"+"爱"+"你"
"你爱我":

"你":只看自己
"爱":看"你"+"爱"
"我":看"你"+"爱"+"我"
表示完全不同,天然区分语序

KV-Cache复用机制

1
2
3
4
5
6
7
8
9
10
11
12
第一轮
用户:"介绍一下北京"
模型:生成回答,缓存所有KV

第二轮
用户:"它的人口有多少?"

Decoder-only:直接复用第一轮的KV-Cache
只需计算新输入的KV,效率极高

Encoder-Decoder:需要重新编码整个上下文
因为encoder看到的是完整输入,任何改变都需要重新计算

Does GPT's 'decoder-only' architecture mean it consists of only a decoder?

https://cl0und.xyz/2025/05/24/GPT的decoder-only是只有decoder吗/

Author

李三(cl0und)

Posted on

2025-05-24

Updated on

2025-05-24

Licensed under