字节跳动 抖音电商 AI Infra
Q: SFT阶段的训练流程?数据处理和框架选择?
SFT(Supervised Fine-Tuning)流程:
- 数据来源:人工标注、模型蒸馏(强模型生成)、开源数据集筛选。
- 数据处理:格式化为instruction-response对、去重、质量过滤(长度/困惑度/毒性)、多样性采样。
- 训练框架:DeepSpeed ZeRO(大模型分片)、Megatron-LM(3D并行)、LLaMA-Factory/Axolotl(轻量微调工具)。
- 训练配置:学习率1e-5~5e-5、cosine schedule、FP16/BF16混合精度。
Q: PPO训练流程?包括数据、奖励模型训练、各模型的Loss?
PPO(Proximal Policy Optimization)在RLHF中的流程:
- 奖励模型训练:用人类偏好数据(chosen/rejected对)训练RM,Loss = -log(sigmoid(r_chosen - r_rejected))。
- PPO训练循环:
- Actor(策略模型)生成response。
- RM打分作为reward。
- Critic(价值模型)估计baseline V(s)。
- 计算advantage A = R - V(s)。
- Actor Loss = -min(ratio×A, clip(ratio, 1-eps, 1+eps)×A)(PPO-Clip)。
- Critic Loss = MSE(V_pred, R_target)。
- 加KL惩罚防止策略偏离参考模型太远。
- 训练资源:通常需要4个模型(Actor/Critic/RM/Reference),多卡训练。
Q: DPO训练流程?PPO和DPO的区别?
DPO(Direct Preference Optimization):
- 直接用偏好数据训练策略模型,无需训练奖励模型。
- Loss = -log(sigmoid(beta × (log_pi(chosen)/log_ref(chosen) - log_pi(rejected)/log_ref(rejected))))。
- 隐式将偏好学习转化为一个分类问题。
区别:
- PPO需要4个模型(开销大),DPO只需2个(策略+参考)。
- PPO是在线学习(生成新数据),DPO是离线学习(固定偏好数据集)。
- PPO效果通常更好(在线探索)但训练不稳定,DPO简单稳定但探索能力弱。
- 多轮DPO(Iterative DPO)可弥补离线局限。
Q: 怎么评估微调后模型有提升?
- 自动指标:特定任务的benchmark得分(如MMLU/GSM8K/HumanEval)。
- 人工评估:人类评分胜率(vs 基线模型)。
- LLM-as-Judge:用强模型(如GPT-4)对比评分。
- A/B测试:线上真实用户流量对比。
- 领域专项评估:针对具体应用的测试集。
- 安全评估:毒性/偏见/越狱测试。
Q: PPO为什么效果比DPO强?多轮DPO为什么有提升?
PPO更强因为:
- 在线生成数据,能探索策略空间中新的response,学到更好的行为。
- 奖励模型提供细粒度的reward信号(连续值),比DPO的二分类更丰富。
- 能优化分布外的response,DPO只能优化训练数据中出现的pair。
多轮DPO提升因为:
- 每轮用当前策略生成新response构建偏好数据,近似在线学习效果。
- 逐轮缩小on-policy/off-policy gap。
- 类似self-play的迭代改进。
Q: CLIP训练原理?
CLIP(Contrastive Language-Image Pre-training):
- 同时训练图像编码器和文本编码器,使匹配的图文对embedding接近,不匹配的远离。
- Loss:对称的InfoNCE/对比损失。一个batch内N个图文对形成N×N相似度矩阵,对角线为正样本,其余为负样本。
- 训练数据:400M互联网图文对。
- 推理:计算图像和文本embedding的余弦相似度,实现零样本分类/检索。
Q: 讲几种优化器?
- Adam:自适应学习率,结合一阶矩(动量)和二阶矩(RMSProp),加bias correction。
- AdamW:解耦weight decay,L2正则不参与自适应计算。
- SGD+Momentum:传统方法,泛化性好,大模型微调时也常用。
- LAMB:Layer-wise Adaptive Moments for Batch training,大batch训练用。
- Adafactor:内存高效的Adam变体,分解二阶矩为行列,省显存。
Q: MHA(Multi-Head Attention)原理?
- 输入X通过三组线性投影得到Q、K、V(每组分为h个头)。
- 每个头独立计算:Attention_i = softmax(Q_i × K_i^T / sqrt(d_k)) × V_i。
- 多头结果拼接:Concat(head_1, …, head_h)。
- 最终线性投影:Output = Concat × W_O。
多头的好处:不同头可以关注不同位置/不同语义子空间的信息,增强表达能力。
Q: GRPO(Group Relative Policy Optimization)原理?
GRPO是DeepSeek提出的RLHF算法,改进点:
- 无需Critic模型:通过组内相对比较估计baseline,省去价值模型。
- 组采样:对每个prompt生成一组(如G=8个)response,组内response的reward均值作为baseline。
- 优势估计:A_i = (R_i - mean(R_group)) / std(R_group),归一化后的相对优势。
- PPO-Clip更新:使用标准PPO loss但用组相对优势替代传统advantage。
优势:减少一半模型显存(无Critic),训练更稳定(组归一化减少reward scale敏感性)。
Q: LoRA原理?r大小对模型训练的影响?
LoRA(Low-Rank Adaptation)原理:
- 冻结原始权重W,添加低秩旁路:W’ = W + BA,其中B∈R^{d×r},A∈R^{r×k},r << min(d,k)。
- 训练时只更新A和B,参数量极少。
- 推理时可合并回原权重:W_merged = W + BA,无额外延迟。
r大小的影响:
- r越大:拟合能力越强(接近全参数微调),但参数量增加、过拟合风险。
- r越小:参数少训练快,但可能欠拟合复杂任务。
- 经验值:通用任务r=8-16足够;复杂任务(如代码生成)可用r=64-128。
- QLoRA用NF4量化基础模型+FP16 LoRA,进一步省显存。
Q: ViT训练原理?
ViT(Vision Transformer):
- 将图像切分为固定大小的patch(如16×16)。
- 每个patch线性投影为embedding(相当于token)。
- 添加位置编码(learnable或sinusoidal)。
- 添加[CLS] token。
- 经过标准Transformer Encoder(Multi-Head Attention + FFN)。
- [CLS] token的输出经MLP head做分类。
训练:通常需要大规模数据预训练(如ImageNet-21K或JFT-300M),小数据上不如CNN。DeiT通过知识蒸馏和数据增强让ViT在ImageNet上也有好效果。
Q: Swin Transformer原理?
Swin Transformer引入层次化结构和局部注意力:
- 窗口注意力:将特征图划分为不重叠的窗口(如7×7),每个窗口内做self-attention。计算量从O(n^2)降为O(n×w^2)。
- 移位窗口(Shifted Window):相邻层交替使用原始和移位的窗口划分,实现跨窗口信息交流。
- 层次化:通过Patch Merging逐层降采样,类似CNN的多尺度特征金字塔。
- 相对位置编码:不用绝对位置,用窗口内的相对位置bias。
优势:线性复杂度(相对于序列长度)、多尺度特征、适用于检测/分割等密集预测任务。
Q: Qwen3快思考和慢思考的原理?
Qwen3支持两种推理模式:
- 快思考(Fast/Non-thinking):直接生成答案,类似传统LLM。延迟低、token消耗少。
- 慢思考(Slow/Thinking):先在特殊thinking标签内进行推理链(Chain-of-Thought),再输出最终答案。精度更高但消耗更多token。
实现原理:通过训练让模型学会何时需要深入思考。用户可通过参数控制(enable_thinking=True/False)。模型内部通过特殊token(如