还在持续整理更新中,本文只作为一个大纲供大家粗略学习,,具体技术细节还请仔细阅读相应论文和代码为主,如有错误欢迎指正!
接下来的更新内容为:对相关技术细节进行查漏补缺,并增加每个小点的面试常见问题,敬请期待……

★用来表示知识点的考察频率和重要性

文章目录

Transformer

★Tokenizer

英文中,tokenize的目的是把输入文本流切分成具有完整语义的字串,其中有三种粒度:

  1. word:词汇表和embedding matrix会非常大
  2. char:字符数量太少,每个字符容纳了过多语义
  3. sub-word:平衡了词汇量和语义独立性。处理原则:常用词保持原状,生僻词拆分成字词以共享token压缩空间。
BPE(Byte-Pair Encoding)
  • 使用预分词器切分,如基于空格或规则
  • 统计每个词的词频
  • 建立基础词汇表,包括所有char
  • 分别考察2-gram,3-gram的字符组合。把高频n-gram加入词汇表,直到词汇表达到预定大小
  • 最终词汇表大小=基础char大小 + 合并串的数量

遇到未知字符使用 <unk>

BBPE(Byte-level BPE)

BPE的一个问题是,如果遇到了unicode(大字符集,如中文日文),基础词汇表会很大。处理方法:将unicode映射为一种字节,从而分解为字节子词,并将大小设定为256

WordPiece

和BPE相似,但合并时不是找最高频的组合,而是最大化训练集数据似然的merge,合并后所有原来切成这两个tokens的就保留合并的token。

Unigram

从一个巨大词汇表出发,逐渐删除其中词汇直到大小满足预定义。定义一个loss使得删除部分词会使得loss增加,而该算法每次挑出使loss增长最小的10%~20%的词汇来删除。

SentencePiece

把句子看作一个整体(“词”),再拆成片段(“子词”)。一般地,把空格也当成一种特殊字符来处理,再使用BPE或Unigram来构造词表。一般与Unigram联合使用,如Albert、XLnet、T5

面试数据类或设计数据处理的岗位大概率涉及:你了解tokenizer吗?你的数据是用什么分词器的?

Attention

传统注意力

基于源端和目标端的影向量计算Attention得分,可以得到源端每个词和目标端每个词间的依赖关系,但是没有考虑源和目标它们自己之间的依赖关系,也就是“自”注意力。自注意力(下文几种)目的是为了学到句子内部的依赖关系。

★自注意力/缩放点积注意力Scaled Dot-Product Attention

A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d K ) V Attention(Q,K,V) = softmax(\frac{QK^\mathbf{T}}{\sqrt{d_K}})V Attention(Q,K,V)=softmax(dK QKT)V

理解:

  1. Q乘K相当于query和key点乘,也就是句子内部词之间的相关性,也就是权值。
  2. 除以根号dk以保证方差不变,能有效控制softmax反向梯度消失的问题。(方差变大时,会导致一个数很大,其他很小且梯度也很小)
  3. 将权值和V加权求和

为什么使用Q,K而不是只用一个Q:引入非对称性,使得对角线元素不一定是最大的,更具健壮性,反之无法有效利用上下文信息

多头注意力MHA

将Q,K,V通过一个线性映射成h份,对每份进行Scaled Dot-Product Attention,再把结果concatenate起来,通过一个线性层,可以综合不同位置的不同表征子空间的信息。

实际为h次self-attention,Transformer使用切头(split)的方法,为了在不增加复杂度O(d*n^2)的前提下享受多头效果,类似CNN中“多通道不同卷积核”。

在推理过程中,每次都要计算历史的QKV矩阵,可以把历史的KV矩阵存储下来减少重复运算,称之为KV cache

Cross Attention

输入来自不同的序列(可以是不同模态,一个来自文本,一个来自图像),一个作为Q,另一个提供K,V。可以在图像,文本匹配,视觉问答等任务中提升性能

线性注意力

不使用softmax函数,使得计算复杂度降低且结构简单 ,但失去了注意力的强调和遗忘功能

稀疏注意力

在自注意力计算中引入稀疏性,不是让序列中的每个位置和其他所有位置计算注意力。BigBird同时使用带状(token和周围一小部分)、全局(CLS捕获全局信息)和随机注意力(有助于捕捉长距离依赖),减少计算量,使得模型可以处理更长序列

KV cache

KV cache有三种主要方法优化:token选择后处理压缩架构重设计

token 选择和修建方法

一般是识别并保留重要token,关键技术有:

  • 重型token:H2O识别生成过程中具有最高累计注意力分数的token,这些在缓存中优先处理
  • 动态次模撤销:将缓存问题框架化为一个优化问题,使用贪心算法和次模约束
  • token修剪:根据排名token,最低分数的token被修剪
后处理压缩技术

这些方法保持了标准的Transformer结构:FastGen使用自适应压缩、DMC使用动态内存压缩、L2范数基础的压缩

架构重设计

这些方法改变了Transformer结构,将压缩直接集成到架构中:

  • MQA(Multi-Query Attention):每个head的Q共享K,V,带来性能下降和模型稳定性,使用模型:PaLM、Gemini
  • GQA(Grouped-Query Attention):对Q进行分组以共享K,V,使用模型:LLAMA2-70B、LLAMA3、DeepSeek-V1、ChatGLM2/3
  • MLA(Multi-headLatent Attention):DeepSeek-V1提出,将原本权重降秩成两个。(Lora高效参数微调:在训练时,原参数矩阵冻结,只优化两个低秩矩阵)
  • DCA(Dual Chunk Attention):将长序列分割成小块,分别在块内、块间、相邻块应用注意力机制,无需额外训练就能拓展上下文窗口限制,与Flash Attention结合可进一步提升推理速度,使用模型:Qwen3
★MLA详解

引入低秩变量c,在推理时只需缓存这个维度远小于d的向量,即可推导出K、V

若不考虑Rope位置编码,MLA的训练过程可以描述为:
c i = x i W c k i ( s ) = c i W k c ( s ) , v i ( s ) = c i W v c ( s ) c_i =x_iW_c\\ k_i^{(s)}=c_iW_{kc}^{(s)},v_i^{(s)}=c_iW_{vc}^{(s)} ci=xiWcki(s)=ciWkc(s),vi(s)=ciWvc(s)
在推理中,每当生成第t个token,需要与历史i<t的Key做点积qk,传统方法需要缓存k,但是MLA中:
q t ( s ) k i ( s ) = ( x t W q s ) ( c i W k c ( s ) ) ⊤ = x t W m e r g e d ( s ) c i ⊤ q_{t}^{(s)}k_i^{(s)}=(x_tW_q^{s})(c_iW_{kc}^{(s)})^\top=x_tW_{merged}^{(s)}c_i^\top qt(s)ki(s)=(xtWqs)(ciWkc(s))=xtWmerged(s)ci
而新的合并矩阵只需要在需要时计算W_kc,因此只需存储压缩向量c即可

而若考虑位置编码Rope,则需要多一些维度专门处理位置编码:
k i ( s ) = c i W k c ( s ) ⊕ x i W k r R i = [ k i ( C ) , k ( R ) ] q t ( s ) k i ( s ) = x t W m e r g e d ( s ) c i ⊤ + R o P E ( x W q r t ) R o P E ( x W k r i ) k_i^{(s)}=c_iW_{kc}^{(s)}\oplus x_iW_{kr}R_i=[k_i(C),k(R)]\\ q_{t}^{(s)}k_i^{(s)}=x_tW_{merged}^{(s)}c_i^\top +RoPE(xW_{qrt})RoPE(xW_{kri}) ki(s)=ciWkc(s)xiWkrRi=[ki(C),k(R)]qt(s)ki(s)=xtWmerged(s)ci+RoPE(xWqrt)RoPE(xWkri)
q也进行同样的处理,而q*k^T后,就分成两部分,C和C的,R和R的在一起,将R有关部分存储,这样KV-cache只多了一个较小的位置区

FNN、残差连接、归一化

FNN

FNN的激活函数(GELU,模拟神经元随机激活特性)提供了一个非线性变换的作用

残差连接ResNet

h ( l + 1 ) = F ( h ( l ) ) + h ( l ) h^{(l+1)}=F(h^{(l)})+h^{(l)} h(l+1)=F(h(l))+h(l)

梯度可通过加法路径直达浅层,避开连乘衰减

LayerNorm与BatchNorm

BN为一个batch计算每一层的平均值和方差

LN对单样本归一化,不受batch内其他样本影响,且适配变长输入

Transformer为什么使用LN:文本是变长的,BN可能会丢失信息,且batch中样本并无相关性。使用LN起到白化作用,增强模型稳定性。

★post-norm与pre-norm

post-norm:传统的layer normalization是在残差之后的,做完Add然后再进行归一化。对参数正则化的效果更强,进而模型的鲁棒性也会更好

pre-norm:把layer normalization加在残差之前(其实在F()之前,为了防止原数据和正则数据混合)。不对这部分参数进行正则化,防止模型的梯度爆炸或者梯度消失

RMSNorm

简化的LayerNorm,应用于pre-norm,去除均值中心化步骤(从而具有平移不变性),减少计算量(主流LLM绝大部分都放弃LayerNorm转而使用RMSNorm)

常见激活函数
  • ReLU:仅处理正值,梯度在负区间为0,易导致神经元死亡
  • Swish:平滑且非单调,但缺乏门控机制,参数利用率低
  • GELU:通过高斯误差函数平滑处理负值,但计算复杂度较高(在ReLU上增加随机因素,x越小越容易被mask掉)

输入x乘上一个由依赖x的伯努利分布采样的m,x符合正态分布,因此x越小,m越可能为0

  • SwiGLU:平衡平滑性与门控动态性,梯度稳定性最优,性能表现最高

ReLU的硬截断特性可能导致梯度消失,而SwiGLU的Swish门控平滑且保留负区间的部分信息,增强了梯度的稳定性;同时,门控机制通过参数化选择重要特征,提升了模型表达能力。

Position Encoding

为什么需要PE

不同于RNN\LSTM,Transformer没有序列的顺序信息(调换位置并不影响Attention)

绝对位置编码:将位置信息直接加入到输入中,其中有两种计算方式:训练式和Sinusoidal

相对位置编码:通过微调attention计算方式(去除/修改若干项),使它具有识别token位置信息的能力

训练式(可学习)位置编码

初始化 max_len *hidden_dim大小的位置编码矩阵,以加法参与模型训练,应用:Bert, GPT, ALBert

问题:模型不具备长度外推性,预训练完的模型若增加max_len则多出来的参数并未训练

Sinusoidal(正余弦)位置编码

周期性:正余弦位置编码的每个分量都是正弦或余弦函数,具有周期性,且越靠后的分量,波长越长,频率越低

远程衰减性:对于两个相同的词向量,如果它们的距离越近,内积分数越高,反之越低

旋转位置编码RoPE

计算完Q/K后,应用旋转位置编码,再计算attention score
旋转矩阵 = ( cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ) 旋转矩阵=\left(\begin{array}{ll} \cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \end{array}\right) 旋转矩阵=(cosθsinθsinθcosθ)
优点:通过绝对位置编码的方式实现相对位置编码,有良好的外推性

应用模型:LLaMA,GLM-130B,PaLM

长度外推问题
  1. 位置编码不一致/推理的时候有训练没见过的位置编码
  2. attention span大小不一致(推理的时候attention span更大导致熵增)

解决方法

问题一:ALIBI,KEPRLE,Sandwich,XPOS,PI,NTK-RoPE

问题二:softmax时加一个系数?

ALiBi(Attention with Linear Biases)

计算完attention score后,加上一个预设的偏置矩阵

作用:相对距离越大,惩罚项越大,相当于两个token越远,贡献越小,具有良好的外推性。应用:BLOOM

YARN

ROPE当上下文窗口扩展到,相对位置的差值可能远超预期范围。此时,旋转频率无法捕捉新的位置信息,导致模型性能显著下降。

PI(线性内插):将索引均匀地拉伸到预训练窗口内(缺点,丢失高频信息)

NTK-Aware Interpolation:介于直接外推和线性内插之间的平滑方法,主要通过对低频维度更大幅度地插值,高频维度保持不变,保留了更多高频细节

NTK-by-parts Interpolation: 根据维度的不同类别对频率参数进行相应的变换。高频维度保留原始频率,低频维度进行线性插值,中间维度采用一种混合策略来确定插值程度

YARN:基于NTK-aware方法的进一步拓展,通过结合温度缩放和NTK-by-parts插值技术,全面提升长文本外推能力。

核心解决的问题是线性内插导致的self-attention 点积的值增大。由于线性内插会改变旋转向量转动的幅度,原来距离较远的q,k点积由于旋转幅度变小,他们的点积结果会增大,进而导致Softmax操作过于“锐化”,使得注意力分布集中于少数位置,削弱模型对全局上下文的关注能力。 Yarn在 NTK-by-parts 基础上,引入注意力温度因子来调整注意力分布

架构

★★Encoder-only, Decoder-only, Encoder-Decoder
  • Encoder-only:用于处理分类、回归、实体识别。如BERT。用于输入数据并提取特征,通常包括多层自注意力和前馈神经网络。
  • Decoder-only:用于生成任务,如文本生成、语言模型等。如GPT。模型采用单向注意力掩码,确保每个token只能关注它之前的token。接受一个或多个输入并逐步生成输出序列。
  • Encoder-Decoder:用于复杂转换任务,如机器翻译、文本摘要、语音识别等。如seq2seq,transformer。编码器用于处理输入并提取特征,解码器则生成序列化的输出。
  • prefix-Decoder:用于条件生成任务,如可控文本生成、对话、代码生成等。它模糊了纯编码器和编码器-解码器的界限。是Decoder-only架构的一种变体。在处理时,前缀部分的token能互相看到(采用双向注意力,如同Encoder)为模型提供任务指令、上下文或条件信息;而生成后续部分时,则采用单向注意力掩码(如同Decoder),确保自回归生成。整个计算过程是一次性完成的,无需独立的编码阶段。如GLM。将任务描述和输入作为不可变的前缀,模型在理解此前缀的条件下,自回归地生成后续内容。
为什么现在大模型都是Decoder-only

因为Decoder-only结构在没有任何微调的情况下,zero-shot的表现能力最好。Encoder-Decoder需要一定量的标注数据上做muti task fine tuning 才能发挥最佳性能。

理论上Encoder的双向注意力会存在低秩问题,可能削弱模型的表达能力,同等参数量和推理成本下Decoder-only最优

解码策略

Temperature

温度参数控制输出概率分布的“平滑度”。它决定了模型是更倾向于选择高概率的词,还是给低概率的词一些机会

Top-k Sampling(顶k采样)

只从概率最高的 k 个候选词中进行采样,并将这些词的概率重新归一化(使它们的概率之和为1),然后从中随机选择下一个词。

  • 优点:避免了从那些极不可能的“坏词”中进行选择,提高了输出质量。
  • 缺点k 是一个固定数字。有时概率分布可能很平缓(需要大k),有时可能很尖锐(小k就够用),固定k不够灵活。
Top-p Sampling (Nucleus Sampling)(核采样)

对Top-k的改进。它不选择固定数量的候选词,而是从高到累加概率,直到累计概率超过预定的阈值 p(例如0.9),然后只从这个“核”集合中采样。

  • 优点动态调整候选词的数量。在概率分布尖锐时,候选词少;分布平缓时,候选词多。比Top-k更灵活,通常能产生更流畅、更有创意的文本。

Top-k 和 Top-p 通常结合使用

Greedy Search(贪婪搜索)

在每一步都简单地选择概率最高的词作为下一个词

  • 优点:计算高效,速度快。
  • 缺点1. 容易生成重复、乏味的文本2.容易错过全局最优序列
Beam Search(束搜索)

贪心搜索的加强版,带有一定的“前瞻性”。它不再只保留一条路径,而是在每一步保留概率最高的 b条候选序列

  • 优点:比贪婪搜索找到全局更优序列的可能性大得多,生成的文本通常更连贯、更准确。
  • 缺点:计算量比贪婪搜索大 b 倍。当 b 较小时,仍可能错过最佳序列。
投机解码(Speculative Decoding)

小模型草稿,大模型并行验证

主流大模型

什么是思维链和推理大模型

思维链是一种提示大语言模型进行逐步推理的方法

推理大模型是在回答前进行思考,在回复用户前,在内部生成一长串思维链过程。

  • 推理模型:擅长解决复杂问题、策略规划等,适用于高精度领域
  • 普通大模型:低延迟、低成本,快速执行

★BERT系列

BERT 系走的是“从双向预训练范式出发 → 大量工程优化与更高效训练目标/蒸馏方案 → 产生众多轻量/高效变种”的路线

BERT

核心:双向(bidirectional)Transformer 的掩码语言模型(Masked LM)+ Next Sentence Prediction(原始论文)。

影响:把预训练-微调范式确立为 NLP 主流。

局限:只支持编码(理解),不擅长生成。

RoBERTa

改进点:去掉 NSP(Next Sentence Prediction),更长训练、更大批次、更多训练数据与动态掩码(dynamic masking)。本质是“工程化的更大BERT”。提升来自数据与训练策略而非架构本身。

ALBERT

改进点:参数共享(跨层共享权重)与因式分解嵌入以减少参数量,从而用更深或更长训练提升效果(以更低内存成本)。旨在提高参数效率与扩展性。

DeBERT

改进点:相对位置编码(relative position)、增强的注意力/嵌入机制(disentangled attention),以及一系列正则化/训练细节优化,进一步提升基线。

ELECTRA/DistilBERT

ELECTRA:用替换检测(discriminator vs generator)训练目标,比标准 MLM 更高效。

DistilBERT:通过知识蒸馏得到更小更快的模型。

★GPT

GPT 系主线是“自回归大模型 + 规模与数据扩张 + 对齐(instruction/RLHF)与多模态/复合能力”的路线。技术提升分为规模、训练目标(对齐)、架构细节与系统能力(多模态、工具调用)。

GPT-1

证明自回归 Transformer 在下游任务上微调也能获得竞争性能

GPT-2

大规模自回归(从 117M 到 1.5B 参数)展示了“scaling”的现象。尽管不是专门为对话设计,但体现了生成能力的爆发式提升。

GPT-3

参数级别跨越(175B),展现了 few-shot、zero-shot 强大能力;并推动基于提示(prompting)的新范式。训练数据与模型规模显著扩大,是“万金油”式大模型的典型

GPT-3.5

技术焦点:更好的对话能力、RLHF 的大规模应用、延迟与响应质量的工程优化,成为 ChatGPT 最初的服务核心。

GPT-4

改进:多模态能力(图像输入等)、更强的推理与指令执行、系统级特性(tooling、插件/agent 支持)、更严格的对齐与安全策略。GPT-4 被视为从“语言模型”向“通用智能助手”过渡的一步。

LLaMA

LLaMA 系以“开源 / 可复现的大模型”为定位,逐代通过数据规模、训练集覆盖与 tokenizer/初始化改进来提升性能与可用性,同时强调社区可访问性

LLaMA
  • 模型参数:即使减少参数量,只要增加预训练数据大小和训练时长,可以达到甚至超越原始大小模型的效果(与 GPT-3 类比更高效率)。

  • 模型结构

    • norm:使用post-norm,去除偏置并采用RMSNorm

    • 激活函数:采用SwiGLU

    • 位置编码:采用RoPE

  • tokenizer:采用Sentence Piece,对中文编码效率较低

LLaMA 2

提升训练数据规模(比上代多40%)、改进微调(使用STF和RLHF)

  • tokenizer:采用BytePair Encoding(BPE)
  • 模型结构不变
  • 采用GQA将上下文长度从2048提升至4096
LLaMA 3

重点提升数据多样性、tokenizer(Llama3 宣称使用更大词汇表/更好编码)与训练技巧,目标是减少幻觉、提高代码和长文本能力

Qwen

Qwen 系列由阿里云/阿里巴巴推出,面向中文与多模态任务,强调工程化的多模态支持与产业应用整合(云端服务、模型应用)

  • 数据处理:

    • 去重:完全匹配、MinHash和LSH的模糊匹配

    • 过滤低质量:多模型评分(包括语言模型、文本质量评分模型、潜在攻击识别模型)结合人工抽样

    • 高质量指令:加入高质量指令数据并进行多任务训练

  • tokenizer:基于BPE的tiktoken,更快地分词

  • 模型结构:

    • 位置嵌入:RoPE,并选择FP32,优先性能和准确性

    • 激活函数:SwiGLU

    • norm:采用RMSNorm

    • 长度外推:增加偏置,使用动态NTK-aware插值,LogN-Scaling(q,v乘以一个系数保持注意力的稳定),window attention

GLM

GLM 家族(如 GLM-130B)尝试在中英双语与混合目标上做出贡献,既有双向表征又支持自回归推理,属于“融合型训练目标”的路线。后续 ChatGLM、GLM-4 等则更聚焦对话与应用

GLM-6B

模型结构:

  • prefix decoder-only,输入上采用双向注意力,输出时使用单项注意力
  • embedding梯度缩减
  • norm:基于deepnorm的post layer norm
  • 激活函数:GeGLU
  • 位置编码:采用RoPE

tokenizer:sentence piece

GLM-130B

双语(中英)、使用“General Language Model”训练框架(支持混合目标),提供了在中文场景下大规模开放模型的可行工程路线,论文与技术报告详细描述训练难点及解决(比如 loss spikes、稳定性问题)。

ChatGLM / GLM 系列演进

更多面向对话、指令微调与工程化安全策略;在模型架构上保留对中文优化的工程细节。

Baichuan

百川以“开源、中文强、规模化训练数据”为卖点,推出 7B/13B 等多尺寸模型,强调在中文任务上的权衡与实际表现

模型结构:

  • 注意力层:使用xFormers
  • 最大z损失

DeepSeek

DeepSeek 在 2025 年引起全球关注:以较低成本训练出高性能模型(宣称使用 MoE、强化学习手段等)

MoE 与 RL-driven 方法: DeepSeek 在大规模模型中使用 Mixture-of-Experts(MoE)来降低推理成本并提高能力,也尝试用强化学习手段改进“推理/自检”能力

Deepseek R1

论文贡献:

  • 验证纯强化学习可行(不进行SFT)
  • 提出多阶段训练策略,包含:冷启动、拒绝采样、二轮SFT和全场景RL
  • 展示了知识蒸馏的潜力:DeepSeek-R1-Distill-Qwen-7B
  • 丰富了大模型的后训练方法论

谈谈你对目前各种大模型的见解:

  • 相同点:都是基于Transformer架构
  • 不同点:transformer层数,注意力头数,位置编码,是否使用MoE(专家数量?专家大小?),是否使用MLA/GQA,是否使用pre-norm/post-norm

Pre-train

预训练任务

自编码 / 掩码式(Masked LM)

代表:BERT 系列。随机遮蔽(mask)输入中15%的 token / span,训练模型恢复原文(填空式)。适合理解型任务。

自回归语言建模(Autoregressive LM)

代表:GPT 系列、很多大规模生成模型采用的主目标。按序预测下一个 token(或下一个子词序列),非常适合生成任务。许多开源大模型以自回归为基础。

Span / blank-infilling(连续片段填充 / 生成)

代表:GLM 的“autoregressive blank infilling”、T5 的 span corruption 等,通过空缺连续片段并以自回归方式重建,兼顾理解与生成能力。

Prefix / causal + bidirectional 混合(例如 prefix LM、decoder-only + auxiliary losses)

通过混合目标增强通用性(既保留文本生成能力也能做理解)。部分新模型会在不同阶段用略不同目标(例如先大规模自回归预训练,再用混合任务继续训练)

专门域目标(code modeling、image-caption、multimodal 对齐等)

对代码、对话、图文等会加入专门的预训练子任务(例如代码的断行/函数预测,图文的对齐/contrastive loss)

辅助/对比损失(contrastive / MLM+contrastive 等)

在多模态或检索增强场景中,常加入对比学习(例如句子对、图文对)作为辅助,以提升表示质量

★数据配比

主要来源
  • Web 抓取 (CommonCrawl / web text):占比常常是单模型数据中最大部分
  • 高质量语料(Books、Wikipedia、新闻、学术文章):用于补强语义/事实密度与长文本质量(通常占较小但“质量高”的份额)
  • 对话/指令/人类反馈数据(human-annotated):用于后续对齐/指令微调,但也有项目将部分人类对话数据加入预训练混合
  • 代码(GitHub 等):专门用于代码理解/生成的模型或阶段性训练
  • 多模态数据(图文、视频字幕等):用于视觉语言模型的预训练阶段
数据“配比”原则

先大规模抓取(web),再混入高质量语料(books/Wiki/code)以“稀释噪声并注入高质量知识”

分阶段训练(stage):先在大规模通用语料上训练,再在高质量 / 专门域语料上做强化(或用更高比例的高质量数据做后续阶段)

★★数据筛选、清洗与去重

基本清洗
  • 删除空文档、超短/超长段落、包含大量控制字符或无意义符号、过多 HTML 噪声等。

  • 语言识别(langid)判断并保留目标语言段或按语言分桶。

  • 基于黑名单规则过滤(明显成人/暴力/仇恨/个人隐私泄露等)。 Baichuan 等报告中特别强调在预训练阶段就做安全过滤。

质量打分与模型驱动筛选
  • 用小模型或专门训练的质量分类器对文本做“质量分”并丢弃低分样本;Qwen 报告中提到用模型对原始抓取数据做更细粒度的筛选。

  • 使用语言模型打分(perplexity、熵)来识别“无意义/复制/拼接”的文本段。

去重
  • 精确去重(exact dedup):字符串级别完全相同则删除。适用于去除镜像复制。

  • 模糊/语义去重(fuzzy / near-dup):利用 n-gram 比较、MinHash / LSH、rolling hash、suffix arrays、shingling 等技术来判定相似段并去重。

  • 语义去重(embedding-based / SemDeDup):先把文档 embed(或用句向量),在 embedding 空间里做簇/近邻去重,能捕捉 paraphrase 级别重复,但计算量大(需做样本选择/近似搜索)。研究表明语义去重与智能的数据选择能带来训练效率与性能改进(D4、LLM-data-pruning 等工作)。

元数据与质量信号保留(quality signals)

记录每条文档的“质量信号”(来源、抓取时间、域名信誉、language score、LM perplexity、toxicity score、重复率等),以便后续做权重采样或阶段次序训练(例如把高质量样本多次重复/权重提高)。RedPajama-V2 提供了“质量注释 signals”以便进一步筛选/加权。

专门的安全/合规过滤

以 classifier/规则结合的方式去除敏感内容(色情、仇恨、违法内容、个人敏感信息)。商业与大型开源团队(如 Baichuan)都强调预训练阶段尽量筛掉这类内容以降低下游风险

合成数据

用途

扩容训练语料:当高质量真实语料供给跟不上训练预算时,用模型生成“高质量、信息密集”文本补足训练集*(一些研究表明对小/中型模型可显著提升效率)*

任务/指令数据(instruction tuning & SFT):用模型生成 instruction→response 对,用于微调以提升对话/指令能力**。

数据增强(paraphrase / style transfer):对高质量原文做多风格重写,得到多样化的训练样本。

生成方法

直接用 LLM 生成(prompting):设计高质量 prompt,让模型根据真实文档生成 paraphrase / extension / summary / synthetic doc。

迭代增强(Evol-Instruct / self-bootstrapping):生成→自动筛选→用结果训练更强生成器,再生成更高质量数据(循环提升)。

检索增强生成(RAG for synthesis):用检索到的高质量片段引导生成,确保事实/知识密度。

风险与管控

幻觉与偏见传播:合成数据可能扩大模型的错误信念或偏见,需用校验模块(fact-check、LM scoring、human sample checks)来筛选。

质量优先原则:研究指出“基于真实高质量源做重写/扩充”的 synthetic 比单纯随机生成更稳健,且优先保证质量而非数量

Post-train

SFT

微调数据构造 Data Construction

SFT 的核心是 高质量的输入-输出对(Instruction → Response)。

数据来源
  • 人工标注:专家写 prompt 和高质量回答,通常用于对齐(alignment)或小规模高价值场景。
  • 众包标注:通过标注平台收集,注意质量控制。
  • 合成数据:利用已有大模型(如 GPT-4)生成数据,再经过筛选和清洗。
  • 现有任务数据集:如问答、摘要、翻译、分类等。
构造策略
  • Instruction-based:设计多样化的任务指令,使模型学会遵循指令。
  • Multi-turn dialogues:加入多轮对话,提升对话一致性和上下文记忆。
  • Negative data:故意加入错误/不理想回答,帮助模型学会避免。
清洗与过滤
  • 去重(hash 或 embedding 相似度去重)。
  • 长度约束(过短/过长的数据可能被丢弃)。
  • 毒性/偏见过滤(敏感词表、分类器过滤)。
  • Self-consistency check:用多个模型生成答案,选出一致性高的。

数据配比 Data Mixing & Balancing

通用指令 vs. 专业领域指令

  • 通用任务(对话、翻译、摘要):70–80%。
  • 专业任务(医学、金融、法律):20–30%。

单轮 vs. 多轮对话

  • 如果目标是通用助手:单轮 50%,多轮 50%。
  • 如果偏向工具使用:更多单轮(API call、函数调用)。

任务类别平衡

  • 避免过度偏向某类(如 summarization 太多导致泛化差)。
  • 通过 temperature samplingtask weight 控制采样比例。

高质量 vs. 大规模数据

  • 通常:少量高质量(例如 1M),优于大量低质量(>10M)。
  • LLaMA、Qwen、DeepSeek 等开源模型普遍采用 分层数据过滤 + 蒸馏,保证高信噪比。

★★全参微调

定义

Full Parameter Fine-tuning,更新模型的所有参数(包括 Transformer 的权重、词嵌入、LayerNorm 等)。

特点
  • 效果最好(理论上能逼近预训练模型能力上限)。
  • 计算开销大:
    • 参数量如 70B 级别,显存需求超过 数百 GB
    • 训练时间长,学习率需要 极低(1e-5 或更低),防止遗忘。
  • 需严格防止 catastrophic forgetting(灾难性遗忘),常见做法是:
    • 混合预训练数据(少量加入原始预训练语料)。
    • 正则化约束(如 L2-SP、Fisher 信息矩阵约束)。

冻结微调

定义

Partial Fine-tuning / Layer Freezing, 冻结一部分参数,只更新部分层。

常见策略
  • 冻结 embedding 和前半层,仅更新后半层。
  • 冻结所有参数,只更新 LayerNorm 和 bias。
优点
  • 显存占用小,训练更快。
  • 保留大模型通用能力。
缺点
  • 表达能力受限,难以适应分布差异大的任务。

PEFT

高效微调(Parameter-Efficient Fine-Tuning)目标:只训练很小一部分参数(<1%),但保持接近全参微调的性能。

Prompt Tuning
  • 思路:在输入前拼接一段可训练的虚拟 prompt embedding。
  • 实现:只训练这段 embedding,其余模型参数冻结。
  • 优点:参数量极小(几 MB)。
  • 缺点:对小模型有效,对大模型(几十 B)可能不足。
P-Tuning v2
  • 改进点
    • 将可训练 embedding 插入到 每一层 Transformer 的输入,而不是仅仅在输入层。
    • 类似在模型内部加虚拟 token,更强表达能力。
  • 特点
    • 可扩展到超大模型。
    • 通常比 Prompt Tuning 效果好。
Prefix-Tuning
  • 思路:在每层 Transformer 的 attention key/value 前面加一组可训练的前缀向量。
  • 实现:这些前缀参数在推理时像“记忆”,影响 attention。
  • 优点
    • 对生成任务尤其有效(对话、翻译)。
    • 参数量较小(百万级)。
★★★LoRA(Low-Rank Adaptation)
  • 思路

    • 对 Transformer 权重矩阵 W 进行低秩分解:
      W ′ = W + B A W' = W + BA W=W+BA
      其中
      KaTeX parse error: Can't use function '$' in math mode at position 71: …mes r}, r \ll d$̲

    • 只训练 A、B,冻结 W。

  • 优点

    • 参数量极小(百万级)。

    • 与原模型可合并,推理不增加额外开销。

    面试热点,建议使用LLaMaFactory实践一下,配合一个LLM模型如Qwen2:7B,并对这个模型的架构详细了解

LoRA 变体
  • QLoRA:结合 4-bit 量化 + LoRA,显存占用极低,可在单卡消费级 GPU 上训练 65B 模型。
  • DoRA(Weight-Decomposed LoRA):进一步分解权重幅度和方向,提升表达力。
  • MoRA(Mixture of Rank LoRA):使用多个低秩矩阵组合,提高拟合能力。
  • AdaLoRA:动态调整 rank,根据任务难度分配参数。

RLHF&Aligning

为什么有 SFT(监督微调)还需要 RLHF?两者本质区别

核心动机
  • SFT(Supervised Fine-Tuning):基于人类编写或筛选的“示例对”(prompt → 理想 response)训练模型,使其学会把输入映射到目标输出。这在“有清晰、可标注目标”的任务(翻译、问答、摘要)上非常有效,但难以覆盖主观偏好/价值判断/对话风格/安全边界等复杂、模糊或多模态的评价标准。

  • RLHF(Reinforcement Learning from Human Feedback):把人类偏好(或对比式选择)作为奖励信号,构造一个优化目标来引导模型产生更“被人类选中/更符合偏好”的输出。它适合解决那些难以用逐 token 的监督损失直接刻画的偏好性问题(例如礼貌性、有害性、详尽程度、回答偏好等)。

差异要点
  • 监督目标 vs 偏好/奖励目标:SFT 最小化示例级 NLL;RLHF 最大化(或间接最大化)人类偏好对应的奖励。

  • 数据需求:SFT 需要高质量的示例对;RLHF 需要对比式偏好标签(A 比 B 更好)或评分。

  • 优化难度:SFT 稳定、训练开销相对小;RLHF(尤其基于策略梯度的)更复杂、需要额外的 reward model / critic,容易不稳定但能直接优化主观指标。

OpenAI做 RLHF 的经典流程与各个模型角色

经典 pipeline
  • 预训练(base LM):在大量无监督文本上训练的语言模型(作为起点)。

  • SFT 阶段:用人工编写或过滤的示例把模型微调成能更好遵循指令的“初始策略”(SFT model)。SFT 是 RLHF 的 warm-start,能显著稳定后续训练。

  • 收集偏好数据:对同一 prompt 用当前策略或多个策略生成多个候选回答,由人工标注“哪个更好”或打分,形成(x, y₁, y₂, preference)对。

  • 训练奖励模型(Reward Model, RM):把偏好对转换为监督信号,学习一个函数 R(x,y) 使得被人工偏好更高的 y 有更高分数。

  • RL 优化策略:用 RL 算法(经典是 PPO)去最大化 RM 的预估奖励,同时加入**KL 惩罚项/行为约束(behavior cloning / reference model)**以防止策略漂移(即生成质量与预训练能力退化)。PPO 训练过程中需要采样(从策略生成文本),并用 RM 给出 reward。

  • 评估/循环:生成样本、再标注、迭代。

模型角色总结:
  • SFT 模型: warm-start 策略,提高稳定性;
  • 奖励模型(RM):把人类或自动评判映射为可微/可学习的打分函数;
  • 策略模型(policy):被 RL 算法(如 PPO)更新以最大化 RM 给出的奖励(同时受 KL/参考模型约束)

RLAIF与 ReFT

RLAIF(Reinforcement Learning from AI Feedback)

把“人类评分”替换或补充为AI 评估者(如另一个 LLM / critic)来给出偏好或评分,从而减少昂贵的人类标注。RLAIF 的优点是扩展性(能生成海量偏好数据),缺点是可能把偏差/错误放大(评估者自身的偏见或漏洞会被学习)。对 RLAIF 有批判性或验证性研究指出:在某些场景下 AI 评估不能完美替代人类,需谨慎混合使用。

ReFT(Reasoning with Reinforced Fine-Tuning)

是将 RL 方法用于提升推理能力的一类工作。ReFT 通常先用 SFT 进行 warm-up,然后用在线 RL(例如 PPO)在自动采样的多条推理路径上优化,使模型在复杂推理(如数学题)上更鲁棒。ReFT 强调生成多样解法并基于路径级 reward 来训练。

DPO

原理与实现

DPO,Direct Preference Optimization。DPO 重新参数化 reward model 与策略之间的关系,导出一个可以直接用判别/分类损失去微调 LM 的公式,从而省掉单独拟合 reward model + PPO 采样-优化 的复杂步骤。换句话说,DPO 把偏好对的优化问题转成对数几率(log-odds)上的二分类最大似然,不需要在优化时对模型进行采样估计奖励或跑复杂的策略梯度

  • 从偏好对 (y_A preferred over y_B) 出发,DPO 建立一个目标使得模型对 y_A 的条件概率相对 y_B 的概率呈现某个 odds 比(取决于一个温度/缩放因子)。

  • 最终可写成对数几率的 logistic/交叉熵损失(把偏好对看成二分类标签),因此可以直接用标准的监督训练框架更新语言模型参数。

实现优点:简单、稳定、训练资源低(相比 PPO 不需要大量在线采样、无需训练独立复杂的 reward model 或 critic、超参更少)。实验显示在若干任务上 DPO 能匹配或超越 PPO 的对齐效果,尤其是在单轮、偏好强烈的任务上。

PPO与 DPO 的对比

PPO
  • 优点:直接最大化 reward(RM 评估),理论上通用;能处理复杂多回合/对话/长期 reward。
  • 缺点:对采样/基线/超参敏感;训练不稳定(可能会发生崩溃或退化);需要大量计算与样本。
DPO
  • 优点:无需采样式策略梯度、实现简单(可在普通监督训练循环中完成)、稳定、计算开销小。
  • 缺点/限制:DPO 的理论与实践更偏向离线偏好数据、短文本或单轮偏好,在复杂的长期/多回合 reward 结构或需要显式价值估计的场景下能力有限;某些情形下没有显式的 KL 控制(但实现中可以加入正则化)可能导致行为偏移或过拟合偏好数据。

DPO 的已知问题以及如何优化/改进方向

常见问题:
  1. 对偏好数据分布敏感:偏好数据若有偏向性(labeler 群体同质),模型会学习并放大奖励中的偏差。
  2. 缺乏长期依赖/多回合优化能力:DPO 本质上是基于对比的静态更新,难以自然处理需要长期回报或策略性探索的场景。
  3. 过拟合 / 过度自信:直接优化对数几率可能导致模型在一些输入上过度放大差异,影响输出多样性或校准。
  4. KL/基线控制不足:没有内置强制约束使模型保持与原始行为一致,可能造成“崩溃式”偏移(尤其在数据稀少时)。
可能的优化策略:
  • 混合训练:在 DPO 更新中混入 SFT 的 NLL 项或把 DPO 当作 SFT 的一个正则化项(相当于保持部分行为克隆)。
  • 校准 / 温度调节:加入概率校准或缩放因子限制 log-odds 的幅度。
  • 数据多样化与去偏:在偏好数据收集阶段确保多样化标注者与数据平衡,或使用群体加权(见 GRPO)。
  • 引入小的参考模型惩罚:尽管 ORPO、DPO 等试图摆脱 reference model,但在某些场景下引入轻量级 KL 惩罚仍有助于稳定。
  • 离线-在线混合:将 DPO 用于离线阶段快速优化,再用少量 PPO/在线 RL 做精调与长期 reward 平衡。(这些想法在后续工作与实践中被试验。)

新方法速览

SimPO(Simple Preference Optimization)
  • 核心:在 DPO 基础上进一步简化,提出用序列的平均对数概率(average log-prob per token)作为隐式 reward 的设计,简化训练并提高稳定性。SimPO 指出一些 DPO 的设计细节可被更简单的替代方案替换,且在若干评测上效果更好或更稳。
KTO(Model Alignment as Prospect Theoretic Optimization)
  • 核心:KTO 用不同的损失/效用函数(受“前景理论(prospect theory)”启发)替代传统偏好损失,尤其用二元可接受/不可接受信号来训练,表明在某些规模(1B–30B)与任务上,这种方法能与或超过基于偏好的方法。KTO 强调选择损失形式与 inductive bias 的重要性。
ORPO(Odds Ratio Preference Optimization)
  • 核心:提出一种参考模型(reference model)自由的单阶段(monolithic)优化方法,用log-odds(赔率比)项作为对比信号附加在 NLL 上,从而在 SFT 阶段就同时实现对齐(penalize disfavored, reward favored)。优点是把 SFT 和偏好优化合并,节省计算并在很多模型尺度上展现强性能。ORPO 的论文与实现被广泛讨论,并被集成在一些 RLHF 工具(如 HuggingFace 的 TRL)里作为 trainer。
GRPO (Group Relative Policy Optimization)
  • 核心问题:PPO 中的价值函数通常是一个与策略模型大小相当的模型,这带来了显著的内存和计算负担。
  • GRPO 思路直接使用多个采样输出的平均奖励作为Baseline,显著减少了训练资源的使用。PPO采用绝对奖励最大化,学习单元为单个样本。而GRPO采用相对优势最大化,学习单元为样本组,继续结合组内经验和相对优势评估,从而实现组内经验共享。

面试问点:

GRPO算法原理:通过组内归一化替代传统PPO中的价值模型降低计算成本,具体来说:1.组采样:对每个问题采样G个输出,计算组内奖励的均值和标准差。2.优势计算:每个输出的优势值,消除奖励尺度偏差3.策略优化:最大化剪切后的策略比率和优势的乘积,同时约束KL散度避免灾难性遗忘

模型压缩与量化

模型压缩的动机与方法

随着大模型(LLM, Vision Transformer等)参数规模急剧增大,推理和部署成本成为瓶颈。模型压缩的目标是 降低存储和计算开销,同时保持模型性能。主流方法包括:

  1. 剪枝(Pruning):去掉冗余参数或结构。
  2. 蒸馏(Knowledge Distillation):用大模型指导小模型。
  3. 量化(Quantization):降低参数/激活的数值精度。
  4. 低秩分解(Low-rank factorization):矩阵分解减少计算。
  5. 权重共享与稀疏化(Weight sharing & sparsity)

量化的基本方法

量化的本质是 将浮点数(如 FP32, FP16)映射到低比特表示(如 INT8, INT4, INT2),以减少存储和加速矩阵乘法。

量化粒度(Granularity)
  • 逐层(Per-tensor)量化:整层共享一个scale,简单但精度损失大。
  • 逐通道(Per-channel)量化:每个通道(例如卷积核/注意力头)有独立scale,精度更高。
量化对象
  • 权重量化(Weight-only Quantization):只量化权重,激活保持FP16/FP32。
  • 激活量化(Activation Quantization):量化中间激活值,难度更高(因为激活动态范围大)。
  • 权重+激活联合量化:最高压缩,但对精度影响也最大。
常见量化方案
  • 对称量化(Symmetric):值域 [-a, a],适合权重分布。
  • 非对称量化(Asymmetric):值域 [a, b],适合激活分布。
  • 均匀量化(Uniform):线性映射,常见于硬件。
  • 非均匀量化(Non-uniform):如对数量化、k-means聚类,更贴合分布但硬件支持差。
训练方式
  • PTQ (Post-Training Quantization):在训练完成后离线量化,快速但精度损失可能大。
  • QAT (Quantization-Aware Training):训练时引入量化噪声,精度更好但成本高。

GPTQ

GPTQ(Post-training Quantization for GPT) 是 权重只量化(Weight-only Quantization) 的经典方法,特别适用于 LLM 部署。

核心思想
  • 使用 逐层误差最小化 的思想:在量化某层权重时,通过二阶近似(Hessian 矩阵信息)找到量化误差最小的权重映射。
  • 保证在不修改激活和推理逻辑的情况下,仍能保留较高精度。
算法流程
  1. 收集一小批校准数据(Calibration set)。
  2. 对每层权重进行量化(通常是 INT4 或 INT3)。
  3. 用近似的二阶信息(梯度/Hessian)修正量化误差。
  4. 最终得到一个推理可直接使用的量化模型。
特点
  • 无需重新训练 → 部署方便。
  • 支持 INT4 量化 → 大幅压缩存储。
  • 在 LLaMA、OPT 等模型上,GPTQ 能在 4bit 量化 下保持接近 FP16 的精度。

AWQ

AWQ (Activation-aware Weight Quantization)是一种改进的量化方法,核心思想是 在量化权重时显式考虑激活的分布

动机

GPTQ 只关注权重误差,而 忽略了权重对激活分布的影响。但 LLM 的推理性能往往取决于 激活值的动态范围

主要做法
  • 在量化权重前,使用校准数据统计激活分布。
  • 通过缩放/重构权重,使得量化后的权重对激活分布影响最小。
  • 重点关注 大幅影响激活的权重(outlier weights)
优点
  • 在相同比特(如 INT4)下,AWQ 通常比 GPTQ 更稳定。
  • 对激活分布鲁棒 → 更适合实际推理硬件。

专家模型MoE

MoE 的基本思想

  • 核心理念
    与传统 Transformer 每一层固定参数计算不同,MoE 在某些层(通常是 FFN 层)引入多个“专家网络”(Experts),每个输入 token 只会激活其中一小部分专家(通常是 1-2 个),从而在保持计算量近似不变的情况下显著增加模型容量。混合专家模型 (MoE) 的一个显著优势是它们能够在远少于稠密模型所需的计算资源下进行有效的预训练
  • 类比
    就像一个“任务分工”的系统,不同的 token/上下文激活不同的专家,提升参数利用率与表示能力。

MoE 的结构原理

一个典型的 MoE 层包含:

  1. Gate(门控网络)
    • 输入:token 的隐向量
    • 输出:一个 softmax / top-k 分布,决定分配到哪些专家
    • 常用实现:线性层 + softmax
  2. Experts(专家网络)
    • 通常是多层感知机(MLP/FFN)
    • 每个专家参数独立
  3. Routing 机制
    • 常见策略:
      • Top-1 routing:选择得分最高的专家
      • Top-2 routing:选择前两个专家并加权输出
    • 为避免专家不均衡,引入 Load Balancing Loss(负载均衡损失),也称为辅助损失,旨在鼓励给予所有专家相同的重要性
  4. Aggregation(聚合)
    • 对选中的专家输出进行加权求和
    • 输出回到 Transformer 主干
计算与参数对比
  • 普通 Transformer FFN:所有 token → 一个 FFN
  • MoE Transformer FFN:所有 token → 多个专家 FFN(但每个 token 只计算 1-2 个专家)
  • 效果
    • 参数量显著增加(容量 ↑)
    • 单步计算量近似不变(计算 ↓)
    • GPU 内存和通信开销 ↑

MoE 的训练思路

路由(Routing)
  • 随机路由(早期尝试,效果差)

  • 得分路由(主流,gate 预测专家分布)

  • 负载均衡正则
    典型的 loss:
    L a u x = α ⋅ ∑ i ( n i N ⋅ p i P ) L_{aux} = \alpha \cdot \sum_i \Big( \frac{n_i}{N} \cdot \frac{p_i}{P} \Big) Laux=αi(NniPpi)

    • n i n_i ni:分配给专家 i i i 的 token 数
    • p i p_i pi:gate 分布中的概率
    • 目标:让专家使用更均衡,防止“热门专家”过载
稀疏激活

稀疏性允许我们仅针对整个系统的某些特定部分执行计算。这意味着并非所有参数都会在处理每个输入时被激活或使用,而是根据输入的特定特征或需求,只有部分参数集合被调用和运行。

  • 稀疏 MoE(主流):Top-1/Top-2 experts
  • 稠密 MoE:所有专家参与计算,效果好但计算量大(几乎不用)
  • 稀疏激活是 MoE 提升可扩展性的核心
并行化与训练策略
  • 专家并行(Expert Parallelism)
    • 不同 GPU/TPU 核心存放不同专家
    • Routing 阶段需要 All-to-All 通信 将 token 分配到对应设备
  • 流水线并行(Pipeline)、张量并行(Tensor) 常与 MoE 结合
  • 训练技巧
    • Drop Tokens / Capacity Factor:每个专家设置容量上限,超出的 token 会被丢弃或 reroute或通过残差连接传递到下一层
    • Noise Routing:在 gate 输出加噪声,提升专家负载均衡(如 Switch Transformer)
    • 共享路由参数:减少 gate 过拟合
微调策略

1)增加更多专家可以提升处理样本的效率和加速模型的运算速度,但这些优势随着专家数量的增加而递减 (尤其是当专家数量达到 256 或 512 之后更为明显)

2)稠密模型和稀疏模型在过拟合的动态表现上存在显著差异。稀疏模型更易于出现过拟合现象,因此在处理这些模型时,尝试更强的内部正则化措施是有益的

**3)在微调过程中是否使用辅助损失是一个需要决策的问题 ** Token丢弃可能是一种正则化形式,有助于防止过拟合。另一个关于泛化问题确认的发现是,模型在小型任务上表现较差,但在大型任务上表现良好

MoE 的典型变体

Switch Transformer (Google, 2021)
  • 使用 Top-1 routing,单专家策略,简化通信,提升训练稳定性
  • 使用bf16精度训练专家,其余计算使用全精度
  • 参数量可扩展到万亿级
GShard (Google, 2020)
  • TPU 上实现大规模专家并行训练
  • 当扩展到多个设备时,MoE 层在不同设备间共享,而其他所有层则在每个设备上复制
  • 支持跨机 All-to-All
DeepSeek-MoE (2024)
  • 在 GPU 上优化通信调度
  • 引入部分共享专家:所有 tokens 都会经过的共享专家,每个 token 会用计算的 Router 权重,来选择 topK 个专家,然后和共享的专家的输出一起加权求和
  • 使用 Token Dropping + Expert Parallelism,在消费级硬件也能高效跑超大 MoE
Sparse Mixture of Experts in LLMs
  • LLaMA-MoE, Mixtral 等
  • 大模型多采用 Top-2 routing

RAG&Agent

LangChain 中的 RAG 工作流

LangChain 提供了构建 RAG 的“乐高块”式组件——document loaders、text splitters、embeddings、vectorstores、retriever、chain(如 RetrievalQA / ConversationalRetrievalChain)、以及 LLM。一个典型流程为:数据接入 → 分块 → 生成嵌入并入库 → 查询时检索 top-k →(可选)重排序/聚合 → 构建 prompt → LLM 生成 → 返回并记录证据/来源

★流程拆解
  1. Document Loaders:把 PDF / HTML / DOCX / DB / webpages 等转换成文本段。
  2. Text Splitter(分块器):按策略把文档分成可合理放入 prompt 的片段。
  3. Embeddings:对每个 chunk 计算向量(通常用现成 embedding model,如 sentence-transformers / OpenAI embeddings 等),并把向量与 chunk 元数据存入 Vector DB。
  4. VectorStore / Retriever:基于 ANN(近似邻近搜索)或混合索引检索 top-k 候选片段(可同时加上 metadata 过滤)。
  5. (可选) Re-ranking:用 cross-encoder 或更强的模型对候选重新排序,或基于启发式合分数(lexical score + dense score)做融合。
  6. Prompt Assembly:把 top-k 文本片段拼接(或摘要后)填入 prompt template,同时加入检索来源标注(provenance)。
  7. LLM 生成:生成回答并把检索到的来源返回给调用方。
  8. Logging/Tracing/Feedback:记录检索与生成上下文以便调优与审计(LangChain 与 LangSmith 支持 trace)。

★文档分块

分块(Chunking)直接影响检索召回生成上下文利用率

  • 颗粒度太大:一个 chunk 含太多信息,检索相关性下降(噪音多),且难以只把相关片段放入 prompt。
  • 颗粒度太小:上下文丢失(answer span 被拆散),检索时需要合并更多片段,带来成本与重复信息。

实践经验(经验值,具体按任务调优):

  • 推荐 chunk 大小(按 token):400–1,000 tokens 常是合理区间(短问答倾向 200–500,深度说明可到 800–1,000)。
  • overlap(重叠):50–200 tokens,用于保证答案边界不会被切断。
  • 切分策略:优先按语义边界(章节、段落、句子)分;在无明显结构时使用递归字符切分器(RecursiveCharacterTextSplitter)或基于 token 的切分。
  • 保留元数据:对每个 chunk 保存 doc_idoffsetsource_urltitlepublish_date 等,便于 provenance 和时间过滤。
  • Token-aware:如果下游 LLM 有上下文长度限制,分块时需要考虑拼入 prompt 后的剩余容量(动态拼装)。

向量模型

常见做法
  • 直接使用现成 embedding model(零/少调优):例如 OpenAI embeddings、官方 sentence-transformers 的预训练模型(如 all-MiniLM-L6-v2multi-qa-mini 等)。优点:简单、性能稳定;缺点:在领域专用语料上可能欠佳。
  • 微调 / 训练自己的向量模型(当你有领域数据或需要更好检索质量时):可用 sentence-transformers 框架做监督微调,常见训练策略包括对比学习(contrastive / NT-Xent)、MultipleNegativesRankingLoss、Triplet loss、交互式 hard negative mining 等。训练数据常为(query, positive passage, negative passages)对,或用 LLM 合成 query–passage 对强化训练。
向量维度与选择
  • 常见维度:384, 512, 768, 1024, 1536。维度越大表达能力更强但索引与存储成本高。
  • 评估方式:用 recall@k / MRR / nDCG 在你的开发集上比对不同 embedding 模型与训练策略(务必用真实 query–passage 对)。
  • 使用 in-batch negatives、周期性加入 hard negatives、数据增强(paraphrase、LLM 生成查询)能明显提升区分力

向量索引与检索

常见向量库:FAISS、Milvus、Pinecone、Qdrant、Weaviate、Chroma 等。FAISS 是 Meta 的经典库,适合本地部署与强大索引控制(多种索引类型与量化方案)

常见索引类型与参数(FAISS 举例):

  • IndexFlatL2:精确线性扫描(适合小数据集或 GPU 批量)。
  • IndexIVF(Inverted File):适合大规模,关键参数 nlist(聚类数)和搜索时的 nprobe(探测簇数)。
  • IndexHNSW:基于图的近邻(在高维下常表现好,支持动态插入)。
  • 量化(PQ、OPQ):通过 Product Quantization 显著减内存,但牺牲一些精度。

调参经验:对 IVF 类型,nlist ~ dataset_size^(1/2) 是常见起点;搜索时 nprobe 从 1 开始递增到满足召回率的值。

检索策略:稀疏、稠密、混合、重排序

稀疏检索(Lexical)

BM25 / TF-IDF(Lucene/Elasticsearch)擅长对精确词匹配、长尾实体名查询;成本低且可对时间/权限做过滤。

稠密检索(Dense)

基于向量相似度(ANN),能捕捉语义相似但词项不同的匹配(DPR 是代表性方法,使用 dual-encoder 学习 query 与 passage 向量)。稠密检索在很多 open-domain QA benchmark 上显著超越 BM25。

混合检索(Hybrid)

把稀疏分数与稠密分数融合(线性加权或 rank fusion),能兼取两者优点(尤其对实体/数字敏感的问法)。

重排序(Reranking)

先用 cheap retriever 取 top-K(比如 K=100),再用更强的 cross-encoder(把 query 与 candidate concat 输入一个 BERT/T5-based cross model)做精细排序并返回 top-k’(例如 top-5/10)。这种 two-stage 策略在精度—成本上常是最佳折中。

Query rewriting / expansion

使用 LLM 或规则把用户 query 重写或扩展(e.g., doc2query、LLM 生成检索扩展),可提升召回。

Metadata filtering / time windows / permission filtering

在检索前基于 metadata 做布尔过滤(如时间范围、文档类型、用户权限)能显著提高相关性与合规性。

RAG 中的 Prompt 组装与上下文管理

  • Top-k 的选择:常见策略是取 top-10/20,先用 reranker 缩到 top-3~5,再把这些拼入 prompt。K 的大小受 LLM 上下文窗口、成本与噪音影响。
  • 拼接策略:直接拼接(直接把原文片段放进 prompt) vs 摘要后拼入(先让模型或抽取器把每个 chunk 摘要为一句或几个要点)。摘要能节省 token 并减少噪音,但需保证摘要不丢信息。
  • 注入提示(prompt engineering):明确要求引用来源、限定回答风格/长度、提示拒绝无证据回答。常见做法是在 prompt 里为每个 chunk 标注 【source:doc_id#offset】,并在最后要求模型给出“引用清单”。
  • 避免 hallucination:强制要求基于检索到的片段回答,或用检索到的文本做“extractive answer +一句自洽summary”的组合可以减少无依据输出。

端到端评估指标(检索 + 生成)

Retrieval

recall@k, MRR (Mean Reciprocal Rank), nDCG(用于衡量检索质量)

Generation downstream

exact match / F1(QA)、ROUGE/BLEU(摘要)、人工评估(准确性/事实性)

最终应做A/B 测试、真实用户评价与错误分类(e.g., hallucination case types、missing-coverage cases)

Agent 基本思路

Agent(智能体)在大模型应用场景中指的是具备自主推理、规划与执行能力的系统,通常由以下几个核心模块构成:

  • 感知(Perception):接收输入,可能是用户指令、外部环境反馈、文档或 API 的输出。
  • 记忆(Memory):存储上下文信息,包括短期对话历史、长期知识库(数据库、向量库等)。
  • 推理与规划(Reasoning & Planning):通过大模型进行链式推理(Chain-of-Thought)、任务分解(Decomposition)、选择行动。
  • 工具调用(Tool Use):通过 function calling 或 API 调用外部工具(如搜索引擎、数据库、Python 执行器)。
  • 行动执行(Action Execution):将结果输出或进行下一步操作,形成“感知-决策-执行”的闭环。

★★Agent 推理框架

ReAct(Reason + Act)

核心思路:把 思考链(Reasoning traces)行动(Actions) 显式结合,通过交错的推理和行动步骤,使模型在执行任务时动态地进行推理和行动。

机制:模型一方面生成思维过程(类似 Chain-of-Thought),另一方面决定是否调用工具执行或搜索交互,以此往复。每次行动后,模型会更新上下文信息,以进行Observation,为未来的推理和行动提供信息。

优势:提高模型在开放环境中完成复杂任务的能力,支持多轮交互和工具使用。

应用:搜索问答、多工具协调、对话式助手。

和CoT对比:

  • CoT有严重幻觉问题,且是其主要失败模式
  • ReAct具有更高基础性和可信度,但由此损失了推理步骤的灵活性,可能导致更多的推理错误率,如重复生成之前的Thought和Action
  • 成功检索到有信息量的知识很重要,无信息量的搜索可能导致推理脱离正常轨道并很难恢复和重新表述其Thought
Plan and solve

由规划器和执行器两个模块组成。规划器负责让LL生成一个多步计划来完成一个大任务,具体为Planner和Replanner,前者负责第一次生成计划,后者根据任务完成情况进行replan。执行器负责规划中的查询等步骤,并调用一个或多个工具来完成该任务。

Reflexion
  • 核心思路:在 ReAct 的基础上引入 自我反思(Self-reflection)

  • 机制:Agent 在得到错误或低质量答案时,会回顾自己的推理过程,生成改进计划,再次尝试。由以下模块组成:

    • 执行者Actor:生成文本和动作
    • 评估者Evaluator:负责评估执行者生成的输出的质量,计算一个奖励分数以反映它的表现
    • 自我反思模型:生成口头的自我反思来为未来的尝试提供有价值的反馈,如“成功/失败”
    • 记忆:核心组成部分,包括短期记忆和长期记忆。推理时,执行者根据短期和长期记忆做出决策
  • 优势:减少错误累积,提高鲁棒性,类似“带反馈的 ReAct”。

  • 应用:编程助手(发现 bug → 自我调试)、长任务执行。

Agent 项目/框架对比

LangChain
  • 定位:最早也是最广泛使用的 Agent 框架。
  • 核心功能
    • 提供统一接口封装 LLM、工具(Tool)、记忆(Memory)、链(Chain)。
    • 支持多种 Agent 策略(ReAct Agent、Plan-and-Execute 等)。
  • 特点:生态庞大,文档与社区成熟,适合快速原型。
  • 不足:过于“重”,存在一定复杂性和冗余。
AutoGen (Microsoft)
  • 定位:强调多 Agent 协作
  • 核心功能
    • 定义不同角色的 Agent(如用户代理、助手代理、代码执行代理)。
    • 通过对话机制实现任务分工与协作。
  • 典型应用:代码生成/调试,科学研究任务(科研助手多 Agent 协作)。
  • 特点:侧重 对话式多 Agent,而不是单一 Agent 的工具调用。、
Swarm (OpenAI)
  • 定位:轻量化的多 Agent 协作框架。
  • 核心功能
    • 基于 function calling 构建 Agent,支持多个 Agent 的角色切换与协作。
    • 相比 AutoGen,更强调低开销、灵活性
  • 应用:企业内部 Agent 编排,轻量级任务执行。
  • 特点:官方支持度高,API 原生整合,可能成为未来 Agent infra 的主流。

MCP

★什么是Function Call

提供大模型与外部系统交互的能力,主动调用预设函数

★如何让大模型具备Function Call

主要通过SFT实现,基础模型需要良好的指令遵循和代码生成能力

Function Call训练核心思想
  1. 意图识别:理解用户请求是否需要借助外部工具/函数
  2. 参数提取与格式化:如需调用函数,正确地从用户请求中抽取所需参数,并按照预先定义(如JSON)的格式生成函数调用命令
Function Call训练
  1. 数据集构建。最关键的一步 ,每条数据包含:

    • 用户输入(query):一个需要或不需要调用函数的用户请求

    • 可用函数/工具描述(available Functions):一个结构化描述,告知模型当前有那些函数可用,每个函数的用途和所需参数

    • 期望输出:

      1. 如需调用函数:一个特定格式的字符串,通常是包含函数名和提取出的参数的json对象

        {
            "name":"get_weather",
            "arguments":{
                "city":"北京",
                "date":"今天"
            }
        }
        
  2. 选择基础模型(如Llama,GPT)

  3. 格式化训练数据:将用户输入和可以函数描述拼接作为模型输入,将期望输出作为目标输出

  4. 进行微调:使用SFT训练

Function Call对话流程
  1. 用户发出请求
  2. 模型首次响应:识别到需要调用外部函数,生成json
  3. 外部执行:应用程序捕获json,调用API(程序员实现过程)
  4. 将结果喂回模型:将API结果格式化后作为新输入提供给模型
  5. 模型再次响应,生成最终回答
Function Call存在问题
  1. 模型必须进行专门的Function Call调用微调才能稳定支持这种能力
  2. MCP之前,Function Call实现各不相同,对不同模型需进行适配
MCP和API的区别

MCP(Model Context Protocol,模型上下文协议)标准化了不同数据源和工具的方式

  • 传统API参数变更后协定发生变化,所有用户都要更新代码以包含新参数否则请求可能失败或提供不完整的结果

  • AI应用程序会发送一个初始请求来了解MCP服务器的功能,服务器将响应有关可用工具、资源、提示和详细信息

MCP优点

制定了AI工具调用标准,无需为每个模型与不同资源的对接编写适配代码,大大减少工作量

MCP和Function Call的关系
  1. Function Call是LLM产生调用请求的能力,MCP是标准化执行这些请求的协议框架
  2. Function Call生成指令,MCP负责让这些指令能在工具间通用可靠地传递和执行
  3. Function Call是MCP架构中模型表达意图的方式之一
MCP和A2A联系

Agent2Agent(A2A)使多个智能体协同完成任务,而无需共享内部记忆、思考和工具。AI可以把A2A智能体建模成MCP资源,由AgentCard表示。通过这种方式,连接到MCP服务器的智能体能发现新的合作智能体,并通过A2A建立连接。支持A2A的远程智能体须发布一个AgentCard,详细说明其能力和认证信息,以和客户端进行通信

一句话总结Agent、Fuction Call、MCP:Agent解决“如何自主完成复杂任务”,Fuction Call解决怎么调用外部函数和资源,MCP解决“如何高效接入外部函数和资源”

训练加速和分布式训练

核心目标
  1. 计算加速 —— 降低单次迭代计算的复杂度(算子优化、低精度计算、FlashAttention)。
  2. 内存优化 —— 减少激活和权重的显存消耗,使得更大模型可在有限 GPU 上运行(checkpointing、ZeRO、量化)。
  3. 分布式并行 —— 将模型与数据合理切分到多机多卡,最大化吞吐。
  4. 训练稳定性 —— 保持收敛性、数值稳定性。
FlashAttention
  • 问题:传统 Attention 的复杂度是 O(N^2)(序列长度 N),主要瓶颈是大规模 QK 矩阵的计算和显存占用。
  • 原理
    • 将 Attention 计算拆解为 块状矩阵乘法(block-sparse),在 GPU 上利用寄存器和 shared memory。
    • IO-aware:避免反复写入显存,减少 memory bandwidth 开销。
  • 效果
    • 复杂度保持 O(N^2),但常数优化极大,长序列(>2k tokens)速度提升显著,内存占用减少 ~2-4 倍。
    • FlashAttention-2/3 已进一步优化 kernel 并支持稀疏模式。
混合精度 (FP16/BF16):
  • 通过 FP16/BF16 来存储和计算大部分权重/激活,仅在关键部分(如梯度累积、归一化)保持 FP32 精度。
  • BF16 精度更好,广泛用于 A100/H100 训练。
量化 (Quantization):
  • 训练时量化 (QAT):模拟低比特权重/激活,减少显存和计算量。
  • 推理时量化 (PTQ):常见 8-bit/4-bit 推理加速。
  • AWQ、GPTQ、SmoothQuant 等方法在推理侧更常见,训练中常配合低精度优化器(如 AdamW + FP16 参数)。

分布式训练框架与工具

DeepSpeed

微软推出的深度学习加速库,核心是 ZeRO (Zero Redundancy Optimizer)

  • ZeRO-1:分布式存储优化器状态。
  • ZeRO-2:分布式存储优化器状态 + 梯度。
  • ZeRO-3:连参数本身也切分存储(极限内存优化)。
  • ZeRO-Infinity:结合 CPU 和 NVMe 做参数交换,突破 GPU 显存限制。
  • 其他功能
    • DeepSpeed Offload(CPU/NVMe)、
    • DeepSpeed-Inference(推理优化)、
    • DeepSpeed-MoE(专家模型高效训练)。
Megatron-LM

NVIDIA 开源的超大模型训练框架,主要贡献:

  • 系统化支持 张量并行 (TP)流水线并行 (PP)
  • 针对 Transformer 的高效 kernel(如 fused layernorm, fused bias+gelu)。
  • 常与 DeepSpeed 结合(Megatron-DeepSpeed)用于超大规模模型(GPT-3、MT-NLG)。

并行方式

分布式训练的三大核心维度:

数据并行 (Data Parallel, DP)
  • 思路:不同 GPU 拥有完整模型副本,分配不同数据子集。
  • 关键:每轮迭代需要 all-reduce 梯度 来保持模型一致。
  • 优点:实现简单,扩展性好。
  • 缺点:内存消耗大,无法解决单卡无法容纳大模型的问题。
模型并行 (Model Parallel)

分为 张量并行 (Tensor Parallel, TP)流水线并行 (Pipeline Parallel, PP)

  • TP:将单个矩阵运算(如 W ⋅ x W \cdot x Wx)拆分到多卡执行,典型是 Megatron-LM
    • 适合单层参数巨大(如 MLP/Attention 的大矩阵)。
    • 缺点是通信频繁(all-reduce)。
  • PP:将模型按层切分,不同 GPU 处理不同层,前向时像流水线一样传递。
    • 优点:降低单卡内存。
    • 缺点:存在流水线 bubble(需要 micro-batch overlap 解决)。
混合并行
  • 实际训练往往同时采用 DP + TP + PP(又称 3D 并行)。
  • 例如 GPT-3(175B 参数)训练时,使用了:
    • 8-way tensor parallel
    • 16-way pipeline parallel
    • data parallel 扩展到上千 GPU
Logo

更多推荐