17. 大模型学习
前言
本文学习主流的大模型架构,主要参考了博客 《Transformer 模型详解》 、浙江大学毛老师团队的教材 《大模型基础》 和相应的视频讲解 《大模型公开课》。
一、Transformer
Transformer 由 Encoder 和 Decoder 两个部分组成,各部分包含 6 个 block。
1. 工作流
Transformer 的工作流程如下:
- Step1:获取输入句子的每一个单词的表示向量 X ∈ R n × d X\in \mathbb{R}^{n\times d} X∈Rn×d,由单词的 Embedding 和单词位置的 Embedding 相加得到。其中, n n n 是句子中单词个数, d d d 是表示向量的维度(论文中 d = 512 d=512 d=512)

- Step2:将得到的单词表示向量矩阵传入 Encoder 中,经过 6 个 Encoder block 后得到句子中所有单词的编码信息矩阵
C
C
C。其中,每一个 Encoder block 输出的矩阵维度与输入完全一致,均为
R
n
×
d
\mathbb{R}^{n\times d}
Rn×d。

- Step3:将 Encoder 输出的编码信息矩阵
C
C
C 输入到 Decoder 中,Decoder 会依次根据当前翻译过的单词
1
→
i
1\rightarrow i
1→i 翻译下一个单词
i
+
1
i+1
i+1 。在翻译到单词
i
+
1
i+1
i+1 时,通过 Mask 操作遮盖
i
+
1
i+1
i+1 之后的单词。

2. Transformer 的输入
Transformer 中单词的输入表示由单词 Embedding 和位置 Embedding 相加得到。
2.1. 单词 Embedding
有很多种方式可以获取。例如,可以采用 Word2Vec、Glove 等算法预训练得到,也可以在 Transformer 中训练得到。
2.1.1. Word2Vec
Word2Vec 由 Google 在 2013 年提出,它的核心思想是:根据一个词的邻居,就能知道这个词的含义,即从局部视角预测上下文。它有两种经典的训练模式:
- CBOW (Continuous Bag of Words):在一定窗口内,利用周围的词来预测中间词。例如,由“我”、“一只”、“猫”来预测中间的“有”。
- Skip-gram:在一定窗口内,利用中间词来预测周围的词。该方法的效果通常更好,尤其是对低频词。例如,由“有”预测周围的“我”、“一只”、“猫”。
Word2Vec 方法的优缺点如下:
- 优点:在线学习,模型简单,能捕捉到复杂的语义类比。
- 缺点:它只关注窗口内的局部信息,忽略了整个语料库的全局统计规律,比如某个词在全书出现的总频率。
2.1.2. Glove
GloVe(Global Vectors)由斯坦福大学在 2014 年提出,它的核心思想是:利用全局词频统计信息来构建向量,即侧重全局统计视角。Glove 的核心步骤如下:
- 共现矩阵:GloVe 不再逐句扫描,而是先根据全部文本算出一张巨大的共现矩阵(Co-ccurrence Matrix),矩阵里的每个格子记录了:词 A 和 词 B 在整个语料库中共同出现了多少次。
- 矩阵分解:GloVe 认为,词向量的点积等于这两个词共现次数的对数。例如,如果“苹果”和“脆”在几万篇文档中经常同时出现,它们的共现次数就很高。既然这两个词在现实语言中联系紧密,那么在数学空间里,它们的向量点积也应该很大。在此基础上,GloVe 试图将共现矩阵分解为中心词向量和上下文词向量。
分解得到两个词向量后,有三种处理方法:
- 只取其一:丢弃上下文向量,只保留中心词向量。
- 向量相加:虽然两个向量捕获的信息相似,但由于训练过程中的随机性,将它们相加可以减少过拟合,并起到类似“集成学习”的效果。实验证明,相加后的向量通常在语义任务上表现更好。
- 向量拼接:将两个向量首尾相接,但这会使维度翻倍,增加计算开销。
Glove 方法的优缺点如下:
- 优点:结合了全局统计信息,训练速度通常比 Word2Vec 更快,尤其在处理非零元素时;在处理词汇相似性任务上表现更稳健。
- 缺点:需要预先构建巨大的共现矩阵,内存开销大。
2.2. 位置 Embedding
位置 Embedding 可以通过训练得到,也可以使用某种公式计算得到。在 Transformer 中采用后者,计算公式如下:
P
E
(
p
o
s
,
2
i
)
=
sin
(
p
o
s
1000
0
2
i
/
d
)
P
E
(
p
o
s
,
2
i
+
1
)
=
cos
(
p
o
s
1000
0
2
i
/
d
)
\begin{aligned} PE_{(pos, 2i)} &= \sin\left(\frac{pos}{10000^{2i/d}}\right) \\ PE_{(pos, 2i+1)} &= \cos\left(\frac{pos}{10000^{2i/d}}\right) \end{aligned}
PE(pos,2i)PE(pos,2i+1)=sin(100002i/dpos)=cos(100002i/dpos)
其中,
- p o s pos pos :词在句子中的绝对位置。例如,第 0 个词,第 1 个词 …
- i i i :维度索引。公式中 2 i 2i 2i 表示偶数维度, 2 i + 1 2i+1 2i+1 表示奇数维度。
- d d d :表示向量的维度。
- 1000 0 2 i / d 10000^{2i/d} 100002i/d :这是一个几何级数,决定了正弦/余弦波的周期。
这个公式设计的优势在于:
- 独特表示:每个位置都有一个唯一的编码。
- 相对位置:对于任何固定的偏移量
k
k
k,
P
E
p
o
s
+
k
PE_{pos+k}
PEpos+k 可以用
P
E
p
o
s
PE_{pos}
PEpos 计算得到。因为
S i n ( A + B ) = S i n ( A ) C o s ( B ) + C o s ( A ) S i n ( B ) C o s ( A + B ) = C o s ( A ) C o s ( B ) − S i n ( A ) S i n ( B ) Sin(A+B) = Sin(A)Cos(B) + Cos(A)Sin(B)\\ Cos(A+B) = Cos(A)Cos(B) - Sin(A)Sin(B) Sin(A+B)=Sin(A)Cos(B)+Cos(A)Sin(B)Cos(A+B)=Cos(A)Cos(B)−Sin(A)Sin(B) - 可扩展:正弦和余弦函数的取值范围在 [ − 1 , 1 ] [-1, 1] [−1,1] 之间,且具有周期性。这使得模型在面对比训练集更长的句子时,依然能产生有意义的位置表示,而不会像绝对位置那样,数值越变越大。
3. 注意力机制
Transformer 所使用的 Multi-Head Attention 结构由多个 Self-Attention 组成的,下面进行介绍:
3.1. Self-Attention
Self-Attention 的结构如下:

3.1.1. Self-Attention 的输入
Self-Attention 的输入是单词的表示向量 X X X 或者上一个 Encoder block 的输出,而计算中所用到的 Q Q Q(查询), K K K(键), V V V(值)则是对 X X X 的线性变换,变换矩阵分别为 W Q , W K , W V W_Q,W_K,W_V WQ,WK,WV 。特别的, X , Q , K , V X,Q,K,V X,Q,K,V 的每一行都表示一个单词。

3.1.2. Self-Attention 的输出
Self-Attention 的输出如下:
Attention
(
Q
,
K
,
V
)
=
softmax
(
Q
K
T
d
k
)
V
\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V
Attention(Q,K,V)=softmax(dkQKT)V
- d k \sqrt{d_k} dk : d k d_k dk 表示 K , V K,V K,V 的列数,即向量维度。除以 d k \sqrt{d_k} dk 是为了防止点积结果过大,导致 Softmax 函数进入梯度极小的饱和区。
-
Q
K
T
QK^T
QKT :用于表示单词之间的 attention 强度。其中,
Q
K
T
QK^T
QKT 的行列数都为
n
n
n,
n
n
n 为句子单词数。下图中 1234 表示的是句子中的单词。

-
softmax
\text{softmax}
softmax :对矩阵的每一行进行 Softmax,即每一行的和都变为 1,从而得到每一个单词对于其他单词的 attention 权重。

- Attention ( Q , K , V ) \text{Attention}(Q, K, V) Attention(Q,K,V):得到带注意力权重的词向量表示。

3.2. Multi-Head Attention
Multi-Head Attention 是由多个 Self-Attention 组合形成的。首先,将输入 X X X 分别输入 h h h 个不同的 Self-Attention 中,计算得到 h h h 个输出矩阵 Z i Z_i Zi。下图是 h = 8 h=8 h=8 的情况:

得到 8 个输出矩阵之后进行拼接,并输入一个线性层,得到 Multi-Head Attention 最终的输出
Z
Z
Z ,其维度与输入
X
X
X 相同。

3.3. Masked Multi-Head Attention
由于翻译是从左到右顺序翻译的,只有翻译完第 i i i 个单词,才可以翻译第 i + 1 i+1 i+1 个单词,因此 Masked Multi-Head Attention 在 Multi-Head Attention 基础上引入了 Mask 操作,从而防止第 i i i 个单词知道 i + 1 i+1 i+1 个单词之后的信息。特别的, Mask 操作是在 Self-Attention 的 Softmax 之前使用的,下面介绍其流程:
- Step1:假设输入矩阵包含(0,1,2,3,4)五个单词的表示向量,则 Mask 是一个 5×5 的矩阵。对于单词
i
i
i ,只能使用单词
(
0
,
⋯
,
i
)
(0,\cdots,i)
(0,⋯,i) 的信息。

- Step2:在得到 Self-Attention 中的
Q
K
T
QK^T
QKT 后,用 Mask 矩阵遮挡住每一个单词之后的信息,然后再计算 Softmax 并与
V
V
V 相乘。

4. Transformer 的内部结构
Transformer 中包含 Encoder 结构(左侧)和 Decoder 结构(右侧)。

4.1. Encoder 结构
Encoder 结构由多个 Encoder block 组成的,而一个 Encoder block 由 Multi-Head Attention 👉 Add & Norm 👉 Feed Forward 👉 Add & Norm 组成。其中,Add & Norm 层由 Add 和 Norm 两部分组成,Add 表示残差连接,Norm 表示 Layer Normalization;Feed Forward 结构由两层的全连接层组成,第一层的激活函数为 Relu,第二层不使用激活函数,最终得到的输出矩阵的维度与
X
X
X 一致:
max
(
0
,
X
W
1
+
b
1
)
W
2
+
b
2
\max(0, XW_1 + b_1)W_2 + b_2
max(0,XW1+b1)W2+b2
4.2. Decoder 结构
Decoder 结构由多个 Decoder block 组成,Decoder block 的结构与 Encoder block 相似,但是存在一些区别:
- 包含两个 Multi-Head Attention 层。
- 第一个 Multi-Head Attention 层采用了 Masked 操作。
- 第二个 Multi-Head Attention 层中,只有 Q Q Q 使用的是上一个 Decoder block 的输出, K , V K, V K,V 矩阵使用的是 Encoder 的编码信息矩阵 C C C 。
- 最后有一个 Softmax 层计算下一个翻译单词的概率。
二、大语言模型架构
凭借着庞大的参数量和丰富的训练数据,大语言模型不仅展现出了强大的泛化能力,还催生了新智能的涌现。相较过去的人工智能模型,大模型“大”在以下几个方面:
- 参数量大:增加 Encoder 或 Decoder block 的数量、增加 Multi-head attention 的头数、增加前馈网络的维度。
- 数据量大:增加数据集并进行数据清洗。
1. 基础知识
1.1. 扩展法则
扩展法则(Scaling Laws)揭示了模型的能力随模型和数据规模的变化关系,常用的法则如下:
- Kaplan-McCandlish 扩展法则:模型规模比数据规模更重要。
- Chinchilla 扩展法则:模型规模与数据规模同等重要。
1.2. 涌现能力
模型训练数据规模以及参数数量的不断提升,为大模型解锁了一系列新的能力,这些新能力并非通过在特定下游任务上训练获得,而是随着模型复杂度的提升凭空自然涌现的,这些能力因此被称为大语言模型的涌现能力(Emergent Abilities)。典型的涌现能力如下:
- 上下文学习(In-Context Learning):很多任务中无需额外的训练,仅通过示例或提示即可理解任务要求并生成恰当的输出。
- 常识推理(Commonsense Reasoning):基于常识知识和逻辑进行理解和推断的能力。
- 代码生成(Code Generation):基于自然语言描述自动生成编程代码。
- 逻辑推理(Logical Reasoning):基于给定信息和规则进行合乎逻辑的推断和结论。
2. 大模型架构

上面这张图是大模型的进化树,粉色分支代表 Encoder-only 架构,绿色分支代表 Encoder-Decoder 架构,蓝色分支代表 Decoder-only 架构。开源模型以实心方块表示,闭源模型则以空心方块表示。右下角的堆叠柱状图展示了来自不同公司和机构的模型数量。下面对三个架构展开介绍:
| 结构 | 核心设计 | 适用场景 | 局限性 | 图解 |
|---|---|---|---|---|
| Encoder-only 架构 | 只使用了 Transformer 的 Encoder 结构。特别的,对于不同下游任务,会设计不同的任务处理部分。例如,判别任务需要添加分类器,对于生成任务需要添加全连接层。 | 适合于自然语言理解(NLU)任务,如情感分析或文本分类等判别任务。 | 生成能力差 | ![]() |
| Encoder-Decoder 架构 | 完整采用了 Transformer 的 Encoder 结构和 Decoder 结构。 | 适合于处理各种复杂的有条件生成任务,例如机器翻译、文本摘要和问答系统等需要同时理解输入并生成相应输出的场景。 | 模型规模以及计算量庞大 | ![]() |
| Decoder-only 架构 | 只使用了 Transformer 的 Decoder 结构。特别的,对于不同下游任务,输出结构都一样 | 适合于无条件文本生成任务,例如自动故事生成、新闻文章生成 | 在理解复杂输入数据时存在一定局限性 | ![]() |
2.1. Encoder-only 架构
下面介绍一些常见的 Encoder-only 架构大模型。
| 模型 | BERT | RoBERTa | ALBERT | ELECTRA |
|---|---|---|---|---|
| 参数量 | Base:1.1 亿 Large:3.4 亿 | Base:1.2 亿 Large:3.5 亿 | Base:0.12 亿 Large:0.18 亿 X-Large:0.6 亿 XX-Large:2.2 亿 | Small:0.28 亿 Base:2.2 亿 Large:6.6 亿 |
| 数据量 | 15GB | 160GB | 15GB | 20 - 200GB |
| 核心设计 | 掩码语言建模任务(MLM):判断两个句子是否为连续。 下文预测(NSP):随机选择样本序列中大约 15% 的 Token 进行遮掩,将其替换为特殊标签 [MASK] 或者随机单词,模型需要预测这些被替换的 Token 的原始内容。 [CLS] 标签:BERT 的输出是输入中所有 Token 的向量表示,因此总长度不固定。为了适配下游任务,设计 [CLS] 标签来提取整个输入序列的聚合表示。 | 动态掩码语言建模:BERT 在每个训练 epoch 中,掩码位置不再变化,而 RoBERTa 则每次都重新选择掩码位置。 | 参数因子分解:BERT 的 Embedding 层参数量是
V
×
H
V \times H
V×H ,ALBERT 将 Embedding 层的矩阵分解为
V
×
E
+
E
×
H
V \times E + E \times H
V×E+E×H,即先下投影再上投影。 跨层参数共享: BERT 模型中所有 Encoder block 独立训练, ALBERT 为了降低模型的参数量,只学习第一层 Encoder block 的参数,并将其直接共享给其他所有层。 句序预测(SOP):将 BERT 中的 NSP 任务替换为 SOP ,即将两个连续句子直接拼接起来,或是顺序翻转再拼接。 | GAN:在 BERT 原有的掩码语言建模基础上结合了 GAN 的思想,生成器进行掩码预测,判别器检测替换词。 下文预测:BERT 中只有 15% 的固定比例 Token 被掩码,ELECTRA 的判别器会判断生成器输出的所有Token 是否被替换过。 |
| 优点 | 不仅能够捕捉到 Token 的细粒度特征,还能够把握长距离的依赖关系和句子间的复杂联系 | 解决 BERT 训练程度不充分的问题,有效提升了预训练语言模型的性能 | 显著减少了参数的数量,提高了训练和推理效率 | 提升了训练效率和效果,同时提高了模型在下游任务中的表现 |
2.2. Encoder-Decoder 架构
下面介绍一些常见的 Encoder-Decoder 架构大模型。
| 模型 | T5 | BART |
|---|---|---|
| 参数量 | Small:6000 万 Base:2.2 亿 Large:7.7 亿 3B:28 亿 11B:110 亿 | Base:1.4 亿 Large:4 亿 |
| 数据量 | 750GB | 160GB |
| 核心设计 | Span Corruption:对整个被遮挡的连续文本片段进行预测,这些片段可能包括连续的短语或子句,它们在自然语言中构成了具有完整意义的语义单元,而不是只遮盖单个 token 。 下游任务适配:T5 模型可以在完全零样本(Zero-Shot)的情况下,利用 Prompt 工程技术直接适配到多种下游任务。 | BART 以重建被破坏的文本为目标: Token 遮挡任务:推断被删除的 Token 内容 Token 删除任务:推断被删除的 Token 位置以及内容 连续文本填空任务:推断一段 span 及其长度 句子打乱任务:将给定文本拆分并打乱,然后推理前后句 文档旋转任务: 随机选取一个 Token 作为文本新的开头进行旋转,然后寻找文本合理起始点 |
| 变体 | mT5:扩展了对 100 多种语言的支持 T0: 模型通过多任务训练增强了零样本学习能力 Flan-T5:专注于指令微调 | mBART:跨语、言文本生成任务 |
2.3. Decoder-only 架构
下面介绍一些常见的 Decoder-only 架构大模型。
2.3.1. GPT 系列
GPT系列主要使用了Kaplan-McCandlish 扩展法则。
| 模型 | GPT-1 | GPT-2 | GPT-3 |
|---|---|---|---|
| 参数量 | 1.17 亿 | Small:1.24 亿 Medium:3.55 亿 Large:7.74 亿 XL:15 亿 | Small:1.25 亿 Medium:3.5 亿 Large:7.62 亿 XL:13 亿 2.7B:27 亿 6.7B:67 亿 13B:130 亿 175B:1750 亿 |
| 数据量 | 5GB | 40GB | 1TB |
| 核心设计 | 下一词预测任务:基于给定的上文预测下一个可能出现的 Token。 | 下一词预测任务:相较 GPT-1 ,对数据集进行了筛选和清洗。 | 下一词预测任务:相较 GPT-1 ,对数据集进行了筛选和清洗。 |
| 下游任务 | 文本分类:例如情感分析、主题分类。 文本相似度评估:比较文档、搜索结果优化和推荐系统。 多项选择题解答 | 在某些任务上可以不进行微调,直接进行零样本学习 | 利用少样本学习,便能够执行文本生成、问答系统、语言翻译等多种下游任务。 |
除上述方法外,InstructGPT 还引入了人类反馈强化学习,包括下述步骤:
- 有监督微调:收集大量“问题-人类回答”对作为训练样本,对大语言模型进行微调。
- 训练奖励模型:针对每个输入,让模型生成多个候选输出,并由人工对其进行质量评估和排名,构成偏好数据集。用此偏好数据集训练一个奖励模型,使其可以对输出是否符合人类偏好进行打分。
- 强化学习微调:在语言模型生成输出后,奖励模型对其进行评分,强化学习算法根据这些评分调整模型参数。
然而,上述强化学习方法计算开销较大,有研究进一步提出直接偏好优化(DPO),直接利用人类偏好数据来训练模型,省略了单独构建奖励模型以及应用复杂强化学习算法的步骤。
2.3.2. LLaMA 系列
LLaMA 系列主要使用了 Chinchilla 扩展法则。
| 模型 | LLaMA1 | LLaMA2 | LLaMA3 |
|---|---|---|---|
| 参数量 | 67 / 130 / 325 / 652 | 70 / 130 / 340 / 700 | 80 / 700 |
| 数据量 | 5 TB | 7 TB | 50 TB |
| 核心设计 | 词嵌入模块:使用旋转位置编码替代原有的绝对位置编码。 注意力模块:将 RELU 激活函数改为 SwiGLU 激活函数,并且在进行自注意力操作之前对 Q 和 K 添加旋转位置编码。 全连接前馈模块:使用 Pre-Norm 层正则化策略,将正则化应用于自注意力和前馈网络之前,而非之后。 | 人类反馈强化学习:首先使用公开的指令微调数据集对模型进行有监督微调,然后训练了 RLHF 奖励模型,并基于近似策略优化和拒绝采样进行强化学习。 分组查询注意力:K 和 V 不再与 Q 一一对应,而是一组查询共享相同的键和值。 | 强化阶段:使用人类反馈强化学习。 分词阶段:将字典长度扩大了三倍,减少对具有完整意义的语义单元进行分割。 模型结构:采用分组查询注意力机制。 |
LLaMA 的衍生模型主要分为三类:
- 性能改进类模型:Alpaca 使用指令遵循样例数据进行微调;Vicuna 在日常对话数据上微调;Guanaco 引入 QLoRA 技术,显著降低了微调的时间成本。
- 垂域任务类模型:CodeLLaMA 模型利用大量公开代码数据进行微调; LawGPT 通过 30 万条法律问答对进行微调;GOAT 模型通过数学题库进行微调;Cornucopia 利用金融问答数据进行微调。
- 多模态任务类模型:LLaVA 利用 CLIP 提取图像特征并利用一个线性投影层实现图片和文本之间的对齐;MiniGPT4 使用 VIT-G/14 以及 Q-Former 作为图像编码器,并同样使用线性投影层来实现图片和文本之间的对齐。
2.4. 非 Transformer 架构
☺️这一块需要了解状态空间模型,可以看毛老师的视频,这就不手搓公式了
经典的非 Transformer 架构模型有 RWKV、Mamba、TTT。
三、提示词工程
提示词(Prompt)是指用于指导生成式人工智能模型执行特定任务的输入指令。而 Prompt 工程是设计和优化Prompt 的过程,主要包括任务说明、上下文(问答示例)、问题、输出格式四个基本元素。Prompt 工程可以用于引导大语言模型完成垂直领域任务而避免微调、数据增强、构建智能体。
1. Prompt 分词向量化
下面介绍划分 token 的一种方法 —— BBPE,其流程如下:
- 初始化词表:将所有字符按照其底层编码拆分为若干字节。
- 统计词频:统计词表中所有“ Token 对”共同出现的频率。
- 合并高频 Token 对:选择出现频率最高的 Token 对,将其合并成一个新的 Token 并加入词表。
- 迭代合并:不断迭代合并,直至达到预设的词表大小或达到指定的合并次数。
在完成分词之后,这些 Token 随后会经过模型的嵌入矩阵处理,转化为固定大小的表征向量。这些向量序列被直接输入到模型中,供模型理解和处理。在模型生成阶段,模型会根据输入的向量序列计算出词表中每个词的概率分布。模型从这些概率分布中选择并输出对应的 Token,这些 Token 再被转换为相应的文本内容。
2. 上下文学习
上下文学习相当于在LLM所学知识的基础上,把特定任务所用到的知识提取出来。按照按照示例数量的不同,上下文学习分为:零样本上下文学习、 单样本上下文学习和少样本上下文学习。在其他条件相同的情况下,样本越多,推理效果越好。
| 方面 | 细节 |
|---|---|
| 选择标准 | 相似性:精心挑选出与待解决问题最为相近的示例。 多样性:所选的示例涵盖尽量广的内容。 |
| 选择方法 | 直接检索:给定一组候选示例,依据候选示例与待解决问题间的相似性对候选示例进行排序,然后选取 Top-K 个示例。这种方法选择出的示例可能趋向同质化。 聚类检索:先把所有候选示例划分为 K 个簇,然后从每个簇中选取最为相似的一个示例,由此得到 K 个示例,但有些簇与问题可能并不相似。 迭代检索:首先挑选与问题高度相似的示例,随后在迭代过程中,结合当前问题和已选示例,动态选择下一个示例。 |
| 性能影响因素 | 预训练数据:领域丰富度、任务多样性、边缘案例样本。 预训练模型:当模型参数达到一定的规模时,上下文学习才能得以涌现。 演示示例:不同的任务对于示例格式的要求不同,如复杂推理任务需要中间推理步骤作为参考;模型越大,越有可能跟随错误的样本标签;随着示例数量的增多,性能提升的速率会逐渐减缓;不同模型对示例顺序的偏好不同。 |
3. 思维链
随着语言模型参数规模的持续扩张,其在自然语言处理任务中的表现显著增强,但在面对算术求解、常识判断和符号推理等需要复杂推理能力的任务时,模型参数规模的增长并未带来预期的性能突破,这种现象被称作“Flat Scaling Curves”。为此,研究者提出思维链提示(CoT),在生成答案的过程中引入一系列的中间推理步骤。常见方法如下:

| 方法 | 按部就班 | 三思后行 | 集思广益 |
|---|---|---|---|
| 描述 | 模型一步接着一步地进行推理。 | 模型每一步都停下来估当前的情况,然后从多个推理方向中选择出下一步的行进方向。 | 多个解题思路得到答案。 |
| 案例 | Zero-Shot CoT 和 Auto CoT | 思维树(ToT) | Self-Consistency |
| 步骤 | Step 1:利用聚类技术从问题库中筛选出与用户提问位于一个簇中的问题。 Step 2:借助 Zero-Shot CoT 的方式,在同簇的类似问题 后面跟上一句 “Let’s think step by step”,引导模型自行生成一条推理链。 Step 3:借助 Zero-Shot CoT 的方式,Auto-CoT 引导大语言模型生成针对用户问题的推理链和答案 | 拆解:将复杂问题拆分成多个简单子问题,每个子问题的解答过程对应一个思维过程。 衍生:根据当前子问题生成可能的下一步推理方向。 评估:评估当前推理的合理性,类似剪枝操作。投票模式中,模型在多节点中选择,依据票数决定保留哪些节点;打分模式中,模型对节点进行评分,依据评分结果决定节点的保留。 搜索:使用深度优先搜索、广度优先搜索等经典搜索算法,或 A* 搜索、蒙特卡洛树搜索等启发式搜索算法搜索正确路径。 | Step 1:使用 CoT 或 Zero-Shot CoT 的方式来引导大语言模型针对待解决问题生成一组多样化的推理路径。 Step 2:统计每个答案在所有推理路径中出现的频率。 Step 3:选择出现频率最高的答案。 |
| 特点 | 按部就班的方法是一条线,不存在前瞻性,适合简单问题。 | 构建了思维树与思维图,用树状结构进行推理。 | 不仅仅依赖于单一的推理路径,而是通过探索多种可能的解决方案,从中选择最优的答案。 |
除上述方法外,对于开放性问题,可以将所有结果都给LLM,让它决定选哪个答案。
4. Prompt 技巧
Prompt 通常由任务说明、上下文、 问题\输出格式等部分中的一个或几个组成。

下面介绍一些Prompt 技巧:
| Prompt 技巧 | 细节 |
|---|---|
| 规范 Prompt 编写 | 任务说明要明确:选择能够清晰表达动作的动词;使用具体的名词来定义任务的输出或目标;语言简洁明了;将任务说明放置在开头和结尾,因为模型通常更关注这些部分的信息。 上下文丰富且清晰:从丰富性角度,上下文可以包括与问题直接相关的背景信息、具体的演示示例,或是对话的连续性内容;从清晰性角度,避免包含冗余或不必要的信息,应直接指向任务的核心。 输出格式要规范:常用的输出格式包括 JSON、 XML、 HTML、 Markdown 和 CSV 等,在编写提示时,要明确指定输出格式,并提供输出格式的示例。 排版要清晰:使用一致的分隔符区分不同的 Prompt 部分;增加空白行和适当的缩进区分不同的内容块;清晰的标题和子标题。 |
| 合理归纳提问 | 复杂问题拆解:在分步引导阶段,将复杂问题细化为多个子问题,并引导模型针对每个子问题进行深入分析和回答;在归纳总结阶段,汇总子问题的答案,形成最终回答。 追问:对需要详尽解释某个概念、现象或过程的场景,挖掘特定话题的深层信息;对于需要全面了解一个主题的场景,宽讨论的广度,收集更多数据、例证或选项;对于输出不符合预期或存在错误时,提供反馈,指出问题所在,并请求模型进行更正或澄清。 |
| 适时使用 CoT | 何时使用:在任务类别方面, CoT 技术特别适用于需要复杂推理的任务,如算术、常识和符号推理;在模型规模的考量上, CoT 技术应用于参数量超过千亿的巨型模型时,能够显著提升其性能;在模型能力的考量上, 对于那些未经推理方面的指令微调的大语言模型,适当的 CoT 提示能够激发其卓越的 CoT 推理能力,而微调过的则不需要。 方法选择:仅需对问题进行逻辑推理和逐步分析时,可以使用按部就班模式;对于包含创意思维的任务,可以选用三思后行模式;在多个思维中进行探索和选择在处理需要高准确度和可靠性任务时,可以使用集思广益模式。 |
| 善用心理暗示 | 角色扮演:通过为大语言模型设定一个详尽的角色,例如数据科学家、诗人或律师,可以有效地引导模型的输出朝向所需的方向,需要在指令中包含具体属性、职责、知识和技能。 情景代入:将特定情境下所需的专业知识、 历史背景等信息嵌入到模型的响应中。 |
四、参数高效微调
对于预训练数据涉及较少的垂直领域,大语言模型需要对这些领域及相应的下游任务进行适配。常见的两种方法如下:
| 微调方法 | 上下文学习 | 指令微调 |
|---|---|---|
| 描述 | 设计 Prompt 来驱动大语言模型完成这些下游任务。 | 构建下游任务数据集,并通过监督学习微调。 |
| 优点 | 计算开销小 | 在下游任务的性能更好 |
| 缺点 | Prompt 设计需要花费大量的人力成本,并且在推理阶段的代价会随 Prompt 中样例的增多快速增加。 | 全量微调效率低,受资源限制 |
对于指令微调方法,研究者们为了避免微调全部参数,减少在微调过程中需要更新的参数数量和计算开销,提出了参数高效微调(PEFT)。常见方法分类如下:

- 参数附加方法:在模型结构中附加新的、较小的可训练模块。在进行微调时,将原始模型参数冻结,仅微调这些新加入的模块。
- 参数选择方法:仅选择模型的一部分参数进行微调,而冻结其余参数。
- 低秩适配方法:通过低秩矩阵来近似原始权重更新矩阵,并冻结原始参数矩阵,仅微调低秩更新矩阵。
1. 参数附加方法
1.1. 加在输入
加在输入的方法在输入数据的 embedding 前拼接可学习参数,这些参数被称为软提示。具体而言,将输入文本序列转化为输入嵌入矩阵,然后将软提示嵌入拼接上输入嵌入矩阵,形成一个新矩阵,最后输入 Transformer 模型。训练过程仅软提示参数被更新。其中,软提示越多效果越好、不同初始化效果不同。这种方法的优点如下:内存效率高;可以使用单一冻结模型进行多任务适应。

1.2. 加在模型
加在模型的方法将额外的参数或模型添加到预训练模型的隐藏层中,常见方法如下:
1.2.1. Prefix-tuning
Prefix-tuning 和上一节介绍的 Prompt-tuning 十分类似,区别在于 Prompt-tuning 仅将软提示添加到输入嵌入中,而 Prefix-tuning 在 Transformer 输入的 K 和 V 之前拼接可学习参数。同时,在将 K 和 V 输入 Transformer 模型前,先通过一个多层感知机(MLP)进行重参数化。因此,需要训练的参数包括 MLP 和前缀矩阵两部分。训练完成后, MLP 的参数会被丢弃,仅保留前缀参数。这种方法的优点如下:减少了训练参数量;微调方式灵活;保持预训练知识。

1.2.2. Adapter-tuning
Adapter-tuning 方法在 Transformer 的每一个多头注意力层和全连接层之后增加瓶颈(Bottomneck)结构。其中,下投影层将信息压缩到一个低维的表示,经过非线性映射后再通过上投影层扩展回原始维度,相当于将大参数拆成了两个相乘的矩阵,有效减少了参数量。

1.2.3. AdapterFusion
如果想要结合多个任务的知识,可以考虑将多个任务的适配器参数结合在一起,每个适配器参数独立优化或者联合优化。然后,引入一个新的融合模块,搜索多个任务适配器模块的最优组合。

1.3. 加在输出
对于硬件资源有限,大模型权重不可访问的场景,可以使用加在输出的方法。具体而言,用反专家模型模拟没有领域知识的目标大模型,则专家模型与反专家模型的输出差异 = 大模型与专家模型的差异,将这个差异附加到大模型的逻辑输出上,就可以修正大模型的输出。

2. 参数选择方法
参数选择方法选择性的对预训练模型中的某个参数子集进行微调。常见方法分类如下:
- 基于规则的方法:根据人类专家的经验,确定哪些参数应该被更新。例如,BitFit 通过仅优化神经网络中的每一层的偏置项以及任务特定的分类头;Lee 等人仅对 BERT 和 RoBERTa 的最后四分之一层进行微调;PaFi 选择具有最小绝对值的模型参数作为可训练参数。
- 基于学习的方法:在模型训练过程中自动地选择可训练的参数子集。例如,Child-tuning 通过梯度掩码矩阵策略实现仅对选中的择子网络进行梯度更新,而屏蔽子网络梯度以外的梯度。
3. 低秩适配方法
低秩适配(LoRA)方法基于本征维度假设,即微调时仅在低维子空间进行参数更新,也能实现与完整参数更新类似的性能。
3.1. LoRA
LoRA将 d × k d\times k d×k 参数更新矩阵低秩分解为一个 r × k r\times k r×k 的矩阵和一个 d × r d\times r d×r 的矩阵,冻结原模型参数,仅微调这两个小矩阵。LoRA 仅微调部分低秩参数,因此具有很高的参数效率;并且 LoRA 参数与模型参数分离,所以 LoRA 还具有可插拔性,有良好的跨任务泛化性能。 影响 LoRA 性能的因素如下:
- 初始化的影响较大:一般 B 用 0 初始化,A 用高斯分布。
- 秩 r r r :简单任务使用低秩,跨领域迁移或复杂任务用高秩。
- 施加位置:在只微调一种权重矩阵时,放在 FFN 的效果最好保持微调总参数量不变,放的位置越多,效果越好。

3.2. LoRA 变体
LORA 变体从以下几个角度对 LORA 进行改进:性能改进;任务泛化;训练改进;推理改进。
- 性能改进(AdaLoRA):微调 Transformer 时,不同模块和层中的权重矩阵的重要性不同。研究发现:微调 FFN 层的权重矩阵比微调 Attention 获得了更好的性能;顶层的权重矩阵比底层的权重矩阵更重要。
- 任务泛化(LoRAHub):通过组合在不同任务上训练的LoRA模块来提高模型对未见任务的适应性。在使用时对多个任务的LoRA模块加权平均,权重通过学习得到。
- 训练改进(QLoRA):存储时使用模型量化降低存储位宽,参数更新时再把存储权重反量化为高位宽,计算完将其释放。
- 推理改进(S-LoRA):若想训练多个任务的 LoRA,过去方法需要串行。S-LoRA 并行训练,将数据分别输入 LLM 和 LORA 参数,两者分别计算完成之后再求和得到最终结果,使得不同 LoRA 的请求可以放在同一个 batch 中。目前只支持 Attention 的优化,不支持 FFN。
五、模型编辑
大语言模型有时会产生一些不符合人们期望的结果,如偏见、毒性和知识错误等。
- 偏见:模型生成的内容中包含刻板印象和社会偏见等不公正的观点,例如性别歧视。
- 毒性:主动或被动输出恶意内容,被动是指越狱攻击。
- 知识错误:模型提供的信息与事实不符。
针对这些问题,常见的纠正方法如下:
- 重新预训练:使用清洗后的数据对模型进行重新预训练,但这会消耗巨大的计算资源。
- 微调:容易导致过拟合和灾难性遗忘。
- 模型编辑:旨在精准、高效地修正大语言模型中的特定知识点,同时不影响其他无关输出。
模型编辑常被用于机器遗忘以保护用户隐私。
1. 编辑效果
模型编辑的效果由下面五方面进行评估:

- 准确性:衡量对某个知识点的直接修改是否有效。
- 泛化性:具有语义相似性的问题时,能否给出统一的目标答案。
- 可迁移性:模型将特定知识点迁移到其它相关问题上的能力,此时问题相关,答案不同。
- 局部性:模型可以准确回答无关问题。
- 高效性:模型编辑的时间成本和资源消耗。
2. 编辑方法
现有的编辑方法分类如下:

不同方法的性能比较如下:

2.1. 外部拓展法
外部拓展法的核心思想是将新知识存储在附加的外部参数或外部知识库中,将其和原始模型一起作为编辑后模型。根据外部组件是否直接整合进模型本身的推理过程,外部拓展法又可划分为知识缓存法和附加参数法。
2.1.1. 知识缓存法
知识缓存法包括三个主要组件:
- 编辑缓存:充当一个知识存储库,用于保存需要修改的知识。
- 门控单元:用于判断输入问题与编辑缓存中的知识的相关程度。
- 推理模块:获取原始输入问题和编辑缓存中的知识作为输入,通过监督训练的方式学习预测用户期望的结果。

SERAC 是一种经典的知识缓存法,该方法将新知识点保存在编辑缓存模块,对于输入的问题,首先通过范围分类器判断其是否与某个新知识点有关,如果有关,则利用反事实模型预测输入的问题在新知识点下的输出结果,否则利用原始模型进行推理。SERAC 适用于修正模型对自然语言中非字面含义语句的理解。
2.1.2. 附加参数法
附加参数法与参数高效微调中的参数附加方法类似,都是将外部参数插入到模型中的特定位置,冻结原始模型,只训练新引入的参数以修正模型输出。例如,CALINET 和 T-Patcher 通过修改模型最后一层 Transformer 的全连接前馈模块来实现。其中,CALINET 可同时对多个问题进行修正,T-Pacher 一次对一个问题修正。

2.2. 内部修改法
内部修改法旨在通过更新原始模型的内部参数来为模型注入新知识。
2.2.1. 元学习法
基于元学习的模型编辑方法旨在让模型“学习如何编辑”。其中,内层优化问题旨在学习模型在具体编辑任务上的参数;外层优化问题旨在学习可以泛化到其他编辑任务上的元知识。例如,KE 将元知识作为超网络,提出了一种通过训练超网络来学习模型参数更新值的方法。MEND 通过低秩分解的方法来优化超网络辅助模型参数更新的过程。

2.2.2. 定位编辑法
定位编辑法修改的是原始模型的局部参数,其先定位到需要修改的参数的位置,然后对该处的参数进行修改。例如,KN 将全连接前馈模块的每个中间激活值定义为一个知识神经元。为了评估每个神经元对于特定知识预测的贡献, KN 将有关该知识点的掩码文本输入给预训练模型,获取隐藏状态后,将其输入到模型每一层的 FFN 中,通过归因方法,积累每个神经元在预测正确答案时的梯度变化,从而确定哪些神经元在知识表达过程中起关键作用。ROME 设计了一种因果跟踪实验,进一步探索中间层全连接前馈模块与知识的关系,优化了知识存储机制的结论。为了将 ROME 扩展到大量知识的编辑,MEMIT 通过因果跟踪实验定位出多个关键的全连接前馈层,将批量的知识更新分布在多个全连接前馈层的参数矩阵上,减小参数变化幅度,提高批量编辑的鲁棒性。

3. 代表性方法
T-Patcher 和 ROME 这两种方法在准确性、泛化性、可迁移性和局部性上表现较优。因此,接下来将以这两种方法为代表,更加细粒度地解释模型编辑的内部机制。
3.1. 附加参数法:T-Patcher
T-Patcher 将全连接前馈层视为键值存储体,并选择在最后一个 Transformer 层的全连接前馈层中添加补丁参数。然后,从编辑的准确性和局部性两个角度设计损失函数。其中,准确性损失包括激活损失和编辑损失;局部性损失在确保补丁不会对无关的输入进行激活的前提下,放大补丁对目标查询向量和无关查询向量的激活值差距。

3.2. 定位编辑法: ROME
定位编辑首先定位知识存储在神经网络中的哪些参数中,然后再针对这些定位到的参数进行精确的编辑。 ROME 是其中的代表性方法。
3.2.1. 知识存储位置
为探究模型中不同结构与具体知识在推理过程中的相关性,从而确定知识在模型中的具体位置,ROME 设计了因果跟踪,包含三个步骤:
- 正常推理:即对照组,保存模型在未受干扰情况下的内部状态。
- 干扰推理:即实验组,通过添加噪声干扰模型的所有内部状态。
- 恢复推理:控制变量,将干扰模型中每一层的参数值恢复为原始参数,看修改哪个会输出正确结果

基于上述实验,ROME 发现中间层的全连接前馈层可能是模型中存储知识的关键位置,并且主体的最后一个token最重要,比如说“斑马”中“马”更重要。为了进一步区分全连接前馈层和注意力层在因果效应中所起到的作用,文章进一步设计了阻断实验:
- 阻断实验:在恢复某一层 Transformer 处理的输出后,将后续的全连接前馈层(或注意力层)冻结为干扰状态,然后观察模型性能的下降程度。

基于上述实验,ROME 发现: 知识存储于模型的中间层,其关键参数位于全连接前馈层,而且特定中间层的全连接前馈层在处理主体的末尾 Token 时发生作用 。
3.2.2. 知识存储机制
ROME 结合知识定位实验中的结论,推测知识以键值映射的形式等价地存储在任何一个中间层的全连接前馈层中,并对大语言模型中的知识存储机制做出以下假设:
- 存储:注意力层收集主体的信息,将其汇入至主体的最后一个 Token 的向量表示中。
- 查询:位于中间层的全连接前馈层对这个编码主体的向量表示进行查询,将查询到的相关信息融入残差流中。
- 生成:末尾的注意力层捕获并整理隐藏状态中的信息,以生成最终的输出。
3.2.3. 精准知识编辑
ROME 编辑方法主要包括三个步骤:
-
确定键向量:在主体前拼接随机的不同前缀文本进行多次推理,计算平均的向量。

-
优化值向量:通过设计损失函数优化全连接前馈层的输出向量,以确保编辑的准确性和局部性。

-
插入知识:基于带约束的最小二乘问题,将键值向量的映射插入前馈层中的下投影矩阵,同时不干扰该层中已有的其他信息。

六、检索增强生成
大模型生成的内容可能存在“幻觉”现象,即一本正经的胡说八道。导致大模型幻觉的原因由以下几个方面:
| 来源 | 细节 |
|---|---|
| 训练数据导致的幻觉 | 知识过时:训练数据在采集完成后直接用于训练模型,但是其中包含的知识可能在模型训练后又发生了更新。 知识边界:训练数据采集无法覆盖世间所有知识,尤其是垂域知识。 知识偏差:训练数据中包含不实与偏见信息。 |
| 模型自身导致的幻觉 | 知识长尾:训练数据中部分信息的出现频率较低,导致模型对这些知识的学习程度较差。 曝光偏差:训练时每生成一个 token 都有 ground truth 进行矫正,推理时存在错误累积。 对齐不当:在模型与人类偏好对齐阶段中,偏好数据标注不当可能引入了不良偏好。。 解码偏差:模型解码策略中的随机因素可能影响输出的准确性。 |
为了解决幻觉问题,研究者提出检索增强生成(RAG) ,该技术常被用于智能体的构造和垂域多模态模型增强。

1. 架构分类
根据是否对大语言模型进行微调,现有的 RAG 系统可以分为
- 黑盒增强架构:不访问模型的内部参数,仅利用输出反馈进行优化。根据是否对检索器进行微调,黑盒增强架构可以进一步分为两类: 无微调、 检索器微调。
- 白盒增强架构:允许对大语言模型进行微调。白盒增强架构也可根据是否对检索器进行微调分为
两类: 仅微调大语言模型、 检索器与大语言模型协同微调。

各方法的优缺点如下:

2. 知识检索
RAG 主要包含知识库构建、查询增强、检索器、检索结果重排序四个关键技术。
2.1. 知识库构建
知识库构建主要有以下两类方法:
- 数据采集及预处理:数据采集过程中,来自不同渠道的数据被整合、转换为统一的文档对象。数据预处理主要包括数据清洗和文本分块两个过程。 其中,文本分块是将长文本分割成较小文本块的过程,例如把一篇长文章分为多个短段落。分块时需要考虑:切分方法(如按句子或段落切分)、设定块大小,以及是否允许块之间有重叠。
- 知识库增强:涉及查询生成与标题生成等多个步骤。查询生成指的是利用大语言模型为每一个答案生成对应的问题,作为答案的 key;标题生成指的是利用大语言模型为没有标题的文档生成合适的标题。
2.2. 查询增强
用户查询和知识库之间不能很好匹配。为了解决此问题,我们可以对用户查询的语义和内容进行扩展,即查询增强,主要有以下两种方法:
- 查询语义增强:通过同义改写和多视角分解等方法来扩展。其中,同义改写是指换种提问方式;多视角分解是指将大问题根据不同视角拆分成子查询,例如威胁可能包括气候变化方面的威胁、自然灾害的威胁。
- 查询内容增强:通过生成与原始查询相关的背景信息和上下文,从而丰富查询内容,提高检索的准确性和全面性。
2.3. 检索器
检索器旨在找到知识库中与用户查询相关的知识文本。检索器可分为判别式检索器和生成式检索器两类。
2.3.1. 判别式检索器
判别式检索器通过判别模型对查询和文档是否相关进行打分。现有方法可以分为以下三类:
- 稀疏检索器:仅根据词频进行评估,对语义理解不足。例如,TF-IDF 基于词频(TF)和逆文档频率(IDF)来衡量词语在文档或语料库中的重要性。其中,TF 是指某个词在一个文档中的出现频率;IDF 是指某个词在所有文档中的出现频率的倒数取对数。
- 双编码检索器:查询和文档首先各自通过独立的编码器生成各自的向量表示,再计算相似度。该方法具有极高的匹配效率,但在提取特征向量时缺乏交互从而影响匹配的精度。
- 交叉编码检索器:将查询和文档拼接在一起,随后利用预训练语言模型作为编码器(例如 BERT)生成一个向量表示。该方法能够实现查询和文档之间的深度交互,但计算量大,因此不适合在大规模检索阶段使用。

2.3.2. 生成式检索器
与判别式检索器不断地从知识库中去匹配相关文档不同,生成式检索器直接将知识库中的文档信息记忆在模型参数中。然后,在接收到查询请求时,能够直接生成相关文档的标识符(即 DocID),以完成检索。该方法需要以多任务的形式对模型进行训练,主要包括索引任务与检索任务两个任务:
- 索引任务:模型学习文档的内容与其对应的文档ID之间的映射关系;
- 检索任务:模型学习为输入查询返回一个潜在相关的候选文档的排名列表。
该方法内存效率高,仅存储文档标识符和模型参数;并且生成速度快,仅需生成轻量的文档标识符。
2.4. 检索结果重排
检索器可能检索到与查询相关性不高的文档,这些文档如果直接输入给大语言模型,可能会引发生成质量的下降。为此,在将其输入给大语言模型之前,还需要对其进行进一步的精选。精选的主要途径是对检索到的文档进行重新排序,然后从中选择出排序靠前的文档。重排方法主要分为两类:
- 基于交叉编码的重排方法:将问题与文档拼接在一起,输入交叉编码器、分类器,获取相关性分数。
- 基于上下文学习的重排方法:通过设计精巧的 Prompt,使用大语言模型来执行重排任务。
3. 生成增强
检索器得到相关信息后,将其传递给大语言模型以期增强模型的生成能力。
3.1. 何时增强
判断是否需要增强的核心在于判断大语言模型是否具有内部知识。如果我们判断大模型对一个问题具备内部知识,那么我们就可以避免检索增强的过程。判断方法有两种:
- 外部观测法:类似于面试考察应聘者的知识。通过 Prompt 直接询问模型是否具备内部知识;或反复询问大语言模型同一个问题,观察模型多次回答的一致性;又或者通过设定流行度阈值来判别模型是否具备相应的内部知识,例如设定在维基百科中过去30天页面访问量超过100的知识为流行知识。
- 内部观测法:类似于对人体内部进行脑电波诊断。通过检测模型内部神经元的状态信息来判断模型是否存在内部知识。由于模型的内部知识检索主要发生在中间层的前馈网络中,因此在处理包含或不包含内部知识的不同问题时,模型的中间层会展现出不同的动态变化。基于这一特性,我们可以训练分类器进行判别,这种方法被称为探针。
3.2. 何处增强
增强的位置有以下三种:
- 输入端:将问题和检索到的外部知识拼接在 Prompt 中,然后输入给大语言模型。
- 中间层:采用交叉注意力将外部知识直接编码到模型的隐藏状态中。
- 输出端:利用外部知识对生成的文本进行后矫正。

3.3. 多次增强
- 处理复杂问题时:采用分解式增强的方案,将复杂问题分解为多个子问题。
- 处理模糊问题时:采用渐进式增强的方案,将问题的不断细化,然后分别对细化的问题进行检索增强。
3.4. 降本增效
检索出的外部知识通常包含大量原始文本,将其通过 Prompt 输入给大语言模型时,会大幅度增加输入 Token 的数量,从而增加了大语言模型的推理计算成本。此问题可从以下两个角度进行解决:
- 去除冗余文本:有三种级别的去除方法,Token 级别的方法对文本中不必要的 Token 进行剔除;子文本级别的方法将全文本拆分为多个片段,去除片段;全文本级别的方法直接从整个文档中抽取出重要信息,以去除掉冗余信息。
- 复用计算结果:为了避免对每个 Token 都重新
计算前面的 Key 和 Value 的结果,我们可以将之前计算的 Key 和 Value 的结果进行缓存(即 KV-cache),在需要是直接从 KV-cache 中调用相关结果,从而避免重复计算。
更多推荐




所有评论(0)