微调LLM前你需要了解的一些概念1 -- 综述

📅 2026/6/30 7:06:31
微调LLM前你需要了解的一些概念1 -- 综述
语言模型的核心任务很朴素给定前面的 token预测下一个 token。例如输入法国 的 首都 是模型要预测巴黎训练时模型会不断看到类似样本输入法国 的 首都 是 目标巴黎如果模型给“巴黎”的概率高loss 就小如果模型把“伦敦”预测得更高loss 就大。训练过程就是不断调整参数让正确 token 的概率越来越高。整体流程可以画成这样输入文本Tokenizer 切成 tokenToken Embedding多层 Transformer Blocks最后位置 hidden state输出层 W_out / LM Headlogitssoftmax下一个 token 概率分布选择或采样 token注意模型内部不是直接处理汉字或单词而是处理 token id 和高维向量。2. Token、Embedding 和 Hidden State一句话进入模型前会先经过 tokenizer法国的首都是 → [法国, 的, 首都, 是]每个 token 会被映射成一个向量这一步叫 embedding法国 → [0.12, -0.08, 0.31, ...] 的 → [0.03, 0.22, -0.11, ...] 首都 → [0.44, -0.19, 0.07, ...] 是 → [-0.21, 0.16, 0.28, ...]如果模型的 hidden size 是 4096那么每个 token 就会对应一个 4096 维向量。一开始的 embedding 只是比较基础的 token 表示。经过多层 Transformer 之后每个 token 的向量会融合上下文变成 hidden state。例如最后一个 token “是”的 hidden state经过多层加工后可以粗略理解为h_last ≈ “当前上下文在问法国的首都是哪个城市”当然模型里实际存的是高维数字向量不是中文句子。中文解释只是帮助我们理解。3. Transformer Block 的整体结构LLM 通常不是只有一个 Transformer Block而是很多层 Block 堆叠起来。常见数量大致是小模型6 - 12 层 中等模型24 - 32 层 大模型40 - 80 层 超大模型80 层以上例如GPT-2 small12 层 GPT-2 medium24 层 GPT-3 175B96 层 LLaMA 7B32 层 LLaMA 13B40 层 LLaMA 65B80 层一个现代 Decoder-only Transformer Block 通常包含Norm Self-Attention Residual Add Norm MLP / FFN Residual Add图示如下输入 xLayerNorm / RMSNormSelf-Attention残差相加 x Attention(...)LayerNorm / RMSNormMLP / FFN残差相加 x MLP(...)输出 y传给下一层公式可以简化为x x SelfAttention(Norm(x)) y x MLP(Norm(x))其中y就是这一层 Block 的最终输出会作为下一层 Block 的输入。4. 每一层的输出会作为下一层输入吗是的。可以写成X0 Embedding(tokens) X1 Block1(X0) X2 Block2(X1) X3 Block3(X2) ... XN BlockN(XN-1)每一层都会拿上一层输出的 hidden states 作为输入并重新计算自己的 Q、K、V第 1 层Q1 X0 Wq1, K1 X0 Wk1, V1 X0 Wv1 第 2 层Q2 X1 Wq2, K2 X1 Wk2, V2 X1 Wv2 第 3 层Q3 X2 Wq3, K3 X2 Wk3, V3 X2 Wv3重点是每一层输入不同每一层 Q/K/V 参数也不同每一层都会重新做一次注意力计算。低层可能更偏局部搭配、词法和位置中层可能更偏语法和实体关系高层可能更偏语义、任务意图和预测。这个说法只是直觉不是人工规定。5. Self-Attention让 token 理解上下文Self-Attention 要解决的问题是当前 token 应该重点关注上下文里的哪些 token例如小明 把 苹果 放进 书包 因为 它 太甜 了“它太甜”里的“它”更可能指“苹果”因为“甜”和“苹果”的语义关系更强。如果句子变成小明 把 苹果 放进 书包 因为 它 太小 了“它太小”更可能指“书包”因为“太小”更像是在描述容器容量。模型并不是写死规则而是在大量训练中学到这些统计和语义关系。6. Q、K、V 到底是什么Q、K、V 分别是Q Query查询 K Key键 / 标签 V Value值 / 内容一句话记Q我想找什么 K我有什么标签能不能被别人匹配到 V如果别人关注我我能提供什么内容每个 token 都会同时生成 Q、K、V。例如 token “它”Q(它) ≈ 我指代的是前面哪个东西前面的 token 有各自的 KK(苹果) ≈ 水果、物体、可被描述味道 K(书包) ≈ 容器、物体、可被描述大小和容量如果后面出现“太甜”那么“它”的 Q 会更匹配“苹果”的 K。模型就会更多读取“苹果”的 V。如果后面出现“太小”那么“它”的 Q 会更匹配“书包”的 K。模型就会更多读取“书包”的 V。QKV 计算公式是Q X Wq K X Wk V X Wv注意力公式是Attention(Q, K, V) softmax(QK^T / sqrt(d_k)) V流程图输入 hidden states XQ X WqK X WkV X WvQK^T 计算相似度除以 sqrt(d_k) 缩放softmax 得到注意力权重权重加权求和 V融合上下文后的表示为什么要除以sqrt(d_k)因为维度较大时Q 和 K 点积的数值可能很大softmax 会变得过于尖锐训练不稳定。除以sqrt(d_k)可以稳定数值范围。7. 用一个例子看模型如何理解上下文输入法国 的 首都 是模型要预测下一个 token巴黎在最后一个 token “是”的位置模型可能需要关注法国 首都可以粗略理解为Q(是)这个句子需要补充什么事实 K(法国)国家实体 K(首都)需要城市答案 V(法国)法国相关语义信息 V(首都)首都关系相关信息Attention 聚合之后最后位置的 hidden state 逐渐包含国家 法国 关系 首都 答案类型 城市最后输出层再把这个 hidden state 映射到词表得到巴黎: 高分 伦敦: 低分 苹果: 极低分这就是“理解上下文”和“预测下一个 token”之间的桥。8. Multi-Head Attention从多个角度看上下文一个注意力头只能从一种子空间理解关系。多个头可以同时关注不同关系。例如Head 1关注语法关系 Head 2关注实体关系 Head 3关注指代关系 Head 4关注位置关系Multi-Head Attention 的直觉是让模型从多个角度同时理解上下文。每个 head 都有自己的 Q/K/V 投影最后多个 head 的结果会拼接或合并再经过一个输出投影矩阵Wo。输入 XHead 1 AttentionHead 2 AttentionHead 3 AttentionHead 4 AttentionConcat / 合并输出投影 WoAttention 输出9. MLP / FFN对信息做加工Self-Attention 更像“信息检索”当前 token 应该从哪些上下文 token 里拿信息MLP / FFN 更像“信息加工”拿到信息之后如何进一步变换、提炼、组合MLP 和 FFN 在 Transformer 语境下基本可以认为是同一个模块MLP Multi-Layer Perceptron多层感知机 FFN Feed-Forward Network前馈神经网络它通常对每个 token 的 hidden state 单独处理不负责 token 之间互相通信。token 之间的信息交换主要发生在 Attention 里。传统 FFN 结构hidden_size → intermediate_size → hidden_size例如4096 → 11008 → 4096公式FFN(x) W2 * activation(W1 * x b1) b2常见激活函数有GELU SiLU ReLU SwiGLU现代 LLM 常用 SwiGLU 一类门控结构可以理解为哪些特征应该通过哪些特征应该被抑制。Attention 和 MLP 的区别可以这样记Attentiontoken mixing不同 token 之间交换信息 MLPchannel mixing同一个 token 向量的不同维度之间加工组合一句话Attention 负责“看谁”MLP 负责“想明白”。10. 残差相加是什么残差连接不是让一层完全替换输入而是输出 原输入 本层新加工的信息在 Attention 后x x Attention(Norm(x))在 MLP 后y x MLP(Norm(x))直觉是新表示 旧理解 本层补充的新理解这有几个好处保留原始信息 让每一层学习增量修改 缓解深层网络梯度传播困难 让模型在某层没学到有用东西时也可以近似保持原样你可能会问处理后的向量会不会盖过原向量理论上会。如果Attention(x)或MLP(x)数值特别大确实可能主导结果。但实际模型有机制控制LayerNorm / RMSNorm 稳定数值范围 参数初始化控制初始输出幅度 训练过程会惩罚不合适的过大修改 有些模型还会使用残差缩放、门控或 Dropout所以残差连接不是简单粗暴地覆盖而是让每层在旧表示上做可学习的增量修正。11. 输出层 W_out从 hidden state 到 token 概率经过最后一层 Transformer 后每个位置都有一个 hidden state。对于自回归语言模型预测下一个 token 时通常使用最后一个位置的 hidden stateh_last例如输入法国 的 首都 是最后位置“是”的 hidden state 可以理解为h_last ≈ “这个句子在问法国的首都是哪个城市”输出层的任务是把h_last映射成整个词表上每个 token 的分数。公式logits h_last W_out b如果hidden_size 4096 vocab_size 50000那么h_last shape 4096 W_out shape 4096 × 50000 logits shape 50000也就是说一个 4096 维向量 → 输出层 → 50000 个 token 的原始分数这些原始分数叫 logits巴黎: 15.2 伦敦: 7.1 苹果: -2.5 的: 0.8logits 还不是概率需要经过 softmaxP(token_i) exp(logit_i) / sum(exp(logit_j))得到巴黎: 0.86 伦敦: 0.04 柏林: 0.03 苹果: 0.000001图示最后位置 hidden state h_last线性输出层 W_outlogits每个 token 的原始分数softmax概率分布选择或采样下一个 token输出层可以理解为当前 hidden state 和词表中每个 token 的“答案向量”做匹配。很多模型会让输入 embedding 和输出层权重共享参数这叫 weight tying。直觉上就是输入层把 token 变成向量 输出层把向量再匹配回 token12. Wq/Wk/Wv 和 W_out 的关系模型的参数是一个大集合模型参数 Embedding 参数 多层 Transformer Block 参数 Final Norm 参数 输出层 W_out 参数每个 Transformer Block 里面又有Attention 参数Wq, Wk, Wv, Wo MLP / FFN 参数W_up, W_down, W_gate 等 Norm 参数结构可以画成模型总参数Embedding 参数Transformer Blocks 参数Final LayerNorm / RMSNorm 参数输出层 W_out / LM Head 参数Attention: Wq, Wk, Wv, WoMLP / FFN: W_up, W_down, W_gateBlock 内 Norm 参数它们的关系是Wq/Wk/Wv在每一层 Attention 里用来理解上下文 WoAttention 内部的输出投影 W_out模型最后的输出层用来预测 token注意不要混淆WoTransformer Block 内部 Attention 的输出投影 W_out整个模型最后映射到词表的输出层13. 训练时它们如何一起更新训练时模型会做前向传播输入 tokens计算预测概率 计算 loss看正确 token 概率高不高 反向传播计算每个参数对 loss 的影响 优化器更新调整参数语言模型最常用的是交叉熵损失Loss -log P(正确 token)例如目标 token 是“巴黎”。如果模型输出巴黎: 0.90 伦敦: 0.04 苹果: 0.0001loss 较小。如果模型输出巴黎: 0.02 伦敦: 0.80 苹果: 0.01loss 较大。反向传播会把误差信号传回所有相关参数W_out Wq / Wk / Wv / Wo MLP 参数 Norm 参数 Embedding 参数梯度下降更新公式参数 参数 - 学习率 × 梯度 θ θ - η ∇L现代 LLM 常用 AdamW 等优化器而不是最朴素的 SGD。训练链路图输入 tokens模型前向传播输出概率分布和真实下一个 token 计算交叉熵 loss反向传播计算梯度AdamW / 梯度下降更新参数W_out 更新Q/K/V 矩阵更新MLP 参数更新Embedding 等其他参数更新14. 推理时的 KV Cache训练时模型通常可以并行处理完整序列。推理时GPT 类模型是自回归生成法国 的 首都 是 → 巴黎 法国 的 首都 是 巴黎 → 。每一步只新增一个 token。历史 token 的 K/V 不会改变所以可以缓存起来KV Cache 缓存历史 token 的 Key 和 Value这样下一步生成时就不需要重新计算所有历史 token 的 K/V只需要计算新 token 的 Q/K/V并拿新 Q 去和缓存的 K 做注意力。优点显著减少重复计算 加快推理速度代价占用更多显存 上下文越长KV Cache 越大15. 一条完整主线总结以输入法国 的 首都 是预测巴黎完整过程是1. Tokenizer 把文本切成 token 2. Embedding 把 token id 映射成向量 3. 第 1 层 Transformer Block 加工这些向量 4. 每层 Attention 用 Q/K/V 让 token 关注相关上下文 5. 每层 MLP 对每个 token 的向量做非线性加工 6. 残差连接保留旧信息并叠加新信息 7. 多层 Block 逐步形成更丰富的 hidden states 8. 最后位置 hidden state 表示整个前缀的预测语境 9. 输出层 W_out 把 hidden state 映射到词表 logits 10. softmax 把 logits 转成概率分布 11. 模型选择或采样出下一个 token 12. 训练时用 loss 衡量预测错多少 13. 反向传播和优化器更新所有相关参数16. 面试高频回答模板Q1Self-Attention 是什么Self-Attention 是 Transformer 的核心机制它让序列中每个 token 根据与其他 token 的相关性动态聚合上下文信息。相比 RNN它可以并行计算并且更容易捕捉长距离依赖。Q2Q/K/V 分别是什么Q 是当前位置想查询什么信息K 是每个位置可被匹配的特征V 是每个位置实际提供的信息。Attention 通过 Q 和 K 的点积计算相关性经 softmax 得到权重再对 V 加权求和。Q3Transformer Block 里有什么典型 Decoder-only Transformer Block 包含 Self-Attention、MLP/FFN、LayerNorm/RMSNorm 和 Residual Connection。Attention 负责 token 间信息交互MLP 负责非线性加工Norm 稳定训练Residual 保留信息并改善梯度传播。Q4MLP / FFN 的作用是什么MLP/FFN 对每个 token 的 hidden state 独立做非线性变换。它通常先升维再经过激活函数或门控结构最后降回 hidden size。Attention 更偏信息检索MLP 更偏信息加工和知识表达。Q5残差连接为什么重要残差连接把子层输出和原输入相加例如x Attention(x)。它让每层学习增量修改而不是完全重写表示有助于保留原始信息、改善梯度传播使深层模型更容易训练。Q6输出层如何预测下一个 tokenTransformer 最后一层会输出 hidden state。预测下一个 token 时模型取最后位置的 hidden state通过线性输出层W_out映射到词表大小的 logits再经过 softmax 得到每个 token 的概率分布。Q7Wq/Wk/Wv 和 W_out 的关系是什么Wq/Wk/Wv 是每层 Attention 内部的参数用来生成 Query、Key、Value从而理解上下文。W_out 是模型最后的语言建模输出头用来把最终 hidden state 映射成词表 logits。它们都属于模型参数训练时会通过同一个 loss 一起更新。17. 最短记忆版Embedding把 token 变成向量 Self-Attention决定每个 token 该看谁 Q我想找什么 K我有什么标签 V我能提供什么内容 MLP / FFN对拿到的信息做加工 Residual旧理解 新补充 LayerNorm / RMSNorm稳定数值 Transformer Blocks多层逐步深化表示 W_out把最终 hidden state 映射到词表分数 softmax把分数转成概率 Loss衡量正确 token 概率够不够高 Gradient Descent根据错误更新参数 KV Cache推理时缓存历史 K/V加速生成