完整题库链接:LLM 算法岗 | 面试常问的 LLM 八股题目汇总
目录
- 1. 从 txt 文本预处理到 SFT 训练的全流程
- 2. Pretrain、SFT、RLHF 的区别
- 3. Pretrain 和 SFT 优化目标的区别
- 4. SFT 核心流程及数据集构建策略
- 5. SFT 的 Loss 及多 Token 计算
- 6. SFT 与预训练样本 Loss 计算区别及屏蔽方法
- 7. SFT Loss 计算代码(含 shift right)
- 8. SFT 之后的常见 Post-Training 及目的区别
- 9. 为什么 SFT 后还要做 RL?为何偏好对齐不能用偏好数据直接做 SFT?
- (夹带私货)为什么 DPO 现在不火了?
- 面试背诵要点速查
1. 从 txt 文本预处理到 SFT 训练的全流程
步骤详解:
- 文本预处理:
- 清洗原始文本,去除无关字符、HTML 标签、乱码、去重等;质量过滤:基于规则(长度、乱码率)+ 基于模型(困惑度打分)筛选;
- 统一编码和格式;可能进行句子分割或段落划分;
- 对于多轮对话数据,需结构化处理,构建 JSON / Parquet 格式,比如统一为 {"instruction": "...", "input": "...", "output": "..."} 或对话格式。
- Tokenization:
- 使用分词器(如 BPE、SentencePiece)将文本转换为 token IDs,添加特殊 token(如 [BOS]、[EOS]、[PAD])。
- 对话模板(Chat Template):不同模型格式不同(Llama-3、Qwen、ChatGLM 等)。
- 构建输入:
- max_length 截断,将 token IDs 序列进行 padding 至统一长度,padding="max_length" 或 padding="longest"(batch 内动态),生成 input_ids;
- 创建 attention_mask 标识有效 token,区分 pad token(mask=0)和真实 token(mask=1);
- 构造labels,其中 prompt 部分设为忽略索引(如 -100),response 部分为对应的 token IDs。
- Forward:
- 将 input_ids 和 attention_mask 输入模型,得到logits,形状为 [batch_size, seq_len, vocab_size]。
- Loss 计算:
- 采用交叉熵损失,通常需要 shift right:用当前 token 预测下一个 token,即取 logits[:, :-1, :] 和 labels[:, 1:],然后计算损失,忽略 labels 中为 -100 的位置。
- 参数更新:
- 反向传播计算梯度,使用优化器(如 AdamW)更新模型参数,常配合学习率调度、梯度裁剪等技巧。
2. Pretrain、SFT、RLHF 的区别
维度Pretrain(预训练)SFT(监督微调)RLHF(人类反馈强化学习)目标学习通用语言表示和世界知识学习指令遵循 + 任务格式对齐人类偏好(有用、无害、诚实)数据海量无标注文本(网页、书籍、代码)高质量指令-输出对(数十万到数百万)偏好对/排序数据(A > B)任务定位自监督学习,next token prediction;基础模型构建有监督学习,条件生成;任务适配 / 对话能力培养强化学习,优化奖励函数;价值观对齐解决问题"模型会说话",从海量无标注文本中获取语言能力"模型听指令",让模型理解人类意图,输出符合期望的内容"模型说得好",纠正模型生成中不符合人类偏好的行为Loss纯交叉熵(所有 token)交叉熵(通常只算 answer 部分)PPO / DPO 等(基于奖励模型)3. Pretrain 和 SFT 优化目标的区别
Pretrain:优化目标是自回归语言建模损失,即最大化整个序列中每个 token 的条件概率(通常忽略部分 token 如 mask)。学习文本的统计分布。
<ul>目标:$ \max_\theta \sum_{t=1}^{T} \log P_\theta(x_t | x_{ |