【三年面试五年模拟】2026-10-25 华为大模型算法岗一面面经:13道题解析与算法实现

写在前面

欢迎大家关注Rocky的知乎:Rocky Ding

《三年面试五年模拟》AIGC/LLM/AI Agent算法工程师/开发工程师求职面试秘籍独家资源:【三年面试五年模拟】WeThinkIn/AIGC-Interview-Book,欢迎大家Star~

Rocky最新撰写的10万字AI Agent(AI智能体)深入浅出全维度解析文章: 深入浅出完整解析AI Agent(AI智能体)的核心基础知识

AIGC/LLM/AI Agent算法岗/开发岗求职面试内推学习社群 (涵盖AIGC、LLM大模型、AI Agent、传统深度学习、自动驾驶、机器学习、计算机视觉、自然语言处理、强化学习、大数据挖掘、具身智能、元宇宙、AGI等AI行业最新面试干货经验与核心知识)欢迎大家加入:https://t.zsxq.com/33pJ0


大家好,我是Rocky。

目录

  • 一面
    • [1. 简要介绍过往实习与项目经历](#1. 简要介绍过往实习与项目经历)
    • [2. 在模型训练阶段,如果出现loss难以收敛,你会从哪些角度排查](#2. 在模型训练阶段,如果出现loss难以收敛,你会从哪些角度排查)
    • [3. Transformer基础原理是什么,时间复杂度如何计算,有哪些常用优化思路](#3. Transformer基础原理是什么,时间复杂度如何计算,有哪些常用优化思路)
    • [4. 除MHA、MQA、GQA之外,你还了解哪些注意力变体,DeepSeek、Qwen采用的注意力方案有什么特点](#4. 除MHA、MQA、GQA之外,你还了解哪些注意力变体,DeepSeek、Qwen采用的注意力方案有什么特点)
    • [5. FFN模块内部结构是怎样的,有哪些可替代的设计](#5. FFN模块内部结构是怎样的,有哪些可替代的设计)
    • [6. 说说常见归一化方式以及各自作用](#6. 说说常见归一化方式以及各自作用)
    • [7. MoE的运行原理是什么,路由专家、共享专家的含义](#7. MoE的运行原理是什么,路由专家、共享专家的含义)
    • [8. 深度学习前向传播、反向传播以及参数更新的完整流程](#8. 深度学习前向传播、反向传播以及参数更新的完整流程)
    • [9. LoRA低秩适配的底层原理](#9. LoRA低秩适配的底层原理)
    • [10. PPO、GRPO、DPO三者的核心逻辑以及差异对比](#10. PPO、GRPO、DPO三者的核心逻辑以及差异对比)
    • [11. GRPO去掉Critic网络的原因](#11. GRPO去掉Critic网络的原因)
    • [12. 大模型的数据清洗流程、数据集搭建思路](#12. 大模型的数据清洗流程、数据集搭建思路)
    • [13. 手撕:三数之和;进阶变体:寻找和最接近0的三元组](#13. 手撕:三数之和;进阶变体:寻找和最接近0的三元组)

一面

1. 简要介绍过往实习与项目经历

回答:

按"研究或业务目标---个人职责---技术路线---关键困难---验证结果"组织介绍。先用一分钟给出最相关的一到两个项目,再让面试官选择深入的方向。大模型算法岗位通常希望确认你是否真正处理过数据、训练、评测和部署中的具体问题,而不是只调用过某个框架。

可以根据真实经历表达:"我主要关注......,在......项目中负责......。针对......问题,先采用......作为基线,再通过......进行改进,用......数据和指标验证。项目当前处于......阶段,仍存在......局限。"所有空缺都需要用自己的事实补全,没有实习就如实介绍研究、课程或个人项目。

准备好数据规模与划分、底座版本、训练设置、主要对照实验,以及一次具体失败案例。结果要区分离线实验、内部测试和正式上线;准确率、吞吐或成本改善必须带比较基线和统计口径,不能把团队全部成果归为个人贡献,也不能把尚未验证的设计说成已经实现。

2. 在模型训练阶段,如果出现loss难以收敛,你会从哪些角度排查

回答:

先判断"不收敛"的具体表现:loss 不下降、剧烈振荡、突然变为 NaN/Inf,还是训练 loss 下降但验证效果不改善。不同现象对应不同原因,不能一上来只减学习率。保存配置、随机种子、样本批次、loss 分项、梯度范数和参数更新量,建立可复现的最小问题。

先排数据与目标。 检查样本与标签是否错位、tokenizer 与模型是否匹配、因果语言建模标签是否重复右移、padding 和不参与训练的 token 是否正确屏蔽、有效监督 token 是否为零,以及 loss 的求和或平均口径。SFT 要检查聊天模板和回答区域;偏好训练要检查正负样本是否反标;RL 则检查奖励是否恒定、异常或被截断。先尝试让模型过拟合一个小批次,若做不到,优先排实现和优化配置。

再排计算图与数值。 检查是否误用 detach、no_grad 或冻结了目标参数,优化器是否实际包含适配器参数,梯度是否累计在预期位置。观察各层激活与梯度,定位爆炸、消失和异常算子;确认损失计算采用稳定实现,混合精度下必要运算保留更高精度。FP16 的 loss scaling 与 BF16 的使用条件不同,不能把任何数值问题都归因于"没有开 GradScaler"。

再排优化和训练循环。 核验学习率、warmup、调度器调用时机、有效 batch size、梯度累积除数、梯度裁剪及权重衰减;避免每个微批次错误 step,或提前清空梯度。对 LoRA 检查目标层、rank、缩放与初始化,对 MoE 检查路由塌缩、专家负载与丢弃 token,对长序列训练检查位置编码和长度分布。

最后检查分布式和泛化。 多卡 loss 应按有效 token 数正确聚合,数据采样器与梯度同步必须符合预期。训练 loss 降而验证变差时,重点考虑过拟合、数据分布变化、评测泄漏和任务指标错配。采用单卡、短序列、稳定精度和小数据集建立基线,每次只改变少量因素,用消融结果验证修复,而不是同时修改所有超参数。

定位时先看一个最小实验。 固定 8~32 条经过人工核验的样本,关闭复杂数据增强与分布式优化,确认模型能降低这些样本上的训练损失;这只是排障手段,不构成泛化能力证明。若小样本能拟合、正式训练不稳定,再逐一恢复长序列、混合精度、梯度累积和并行策略,以最先出现问题的变化定位原因。

观测现象 优先检查 有意义的验证
loss 长期几乎不动 标签、监督掩码、可训练参数、学习率 参数更新范数是否非零,小批次能否拟合
loss 突然 NaN/Inf 输入异常、溢出、无效运算、梯度爆炸 保存失败批次,检查第一个异常张量
训练下降、验证恶化 过拟合、分布偏移、评测口径 按领域与长度分桶,检查独立验证集
多卡异常、单卡正常 token 加权、同步、采样与并行算子 对齐有效 batch 后比较梯度和更新

排障结论应能回答"哪项证据排除了哪类原因",而不仅是列出可能修改的超参数。

3. Transformer基础原理是什么,时间复杂度如何计算,有哪些常用优化思路

回答:

Transformer 用注意力在 token 之间交换信息,用逐位置的 FFN 进行特征变换,并通过残差连接、归一化和位置信息稳定训练、表达顺序。编码器常使用双向注意力;自回归解码器用因果掩码禁止当前位置访问未来 token。下面以长度 n、隐藏维度 d、头数 h、头维度 d_h=d/h 的标准自注意力层为例。

Q = X W Q , K = X W K , V = X W V , A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K ⊤ d h + M ) V . Q=XW_Q,\quad K=XW_K,\quad V=XW_V,\qquad \mathrm{Attention}(Q,K,V) =\mathrm{softmax}\left(\frac{QK^\top}{\sqrt{d_h}}+M\right)V. Q=XWQ,K=XWK,V=XWV,Attention(Q,K,V)=softmax(dh QK⊤+M)V.

每个头计算后拼接并进行输出投影。注意力分数决定从哪些位置聚合信息,FFN 则作用于每个 token 的通道维度。位置编码可以是加性编码,也可以通过 RoPE 等方式作用于 Q/K;注意力本身并不会自动知道输入顺序。

训练或整段预填充的时间复杂度。 Q/K/V 和输出投影约为 O(nd²),注意力的 QK 与加权 V 约为 O(n²d),FFN 约为 O(nd·d_ff)。当 d_ff 与 d 成比例时,单层常写成 O(nd²+n²d),批大小 B 和层数 L 还需乘入。把 Transformer 一概写成 O(n²) 会遗漏投影和 FFN;在短序列、大隐藏维度场景,它们可能占主要计算。

空间与解码需要另算。 朴素实现会显式保存约 O(Bhn²) 的注意力矩阵。缓存历史 K/V 后,每生成一个 token 只计算新的投影,但仍需读取并与已有 t 个位置交互,标准层单步主要计算为 O(d²+td+d·d_ff)。KV Cache 随历史长度增长,缓存不会让整段生成总成本变成常数,也不会消除长历史访存。

常用优化可以分层说明:FlashAttention 通过分块和在线 softmax 减少高带宽内存读写及中间矩阵物化,仍是精确稠密注意力,通常不改变 O(n²d) 的主要算术量;GQA/MQA、MLA 重点压缩 K/V 表示和解码缓存;局部或稀疏注意力减少参与交互的位置;线性或循环状态方案改变计算结构,同时改变表达与信息保留方式。量化、算子融合、批处理、激活重计算和并行策略则分别处理精度、访存、调度或训练显存问题,应结合质量和硬件实测选择。

KV Cache 的数量级可以直接估算。 对标准每层分别存储 K/V 的 GQA,忽略元数据与分配碎片,缓存字节数约为:

M K V = 2 B L T h k v d h b . M_{\mathrm{KV}}=2BLT h_{\mathrm{kv}}d_h b. MKV=2BLThkvdhb.

这里 B 是批大小,L 是层数,T 是缓存长度,h_kv 是 K/V 头数,d_h 是头维度,b 是每个元素的字节数。例如 B=1、L=32、T=8192、h_kv=8、d_h=128、FP16 每元素 2 字节,缓存约为 1 GiB;若 K/V 头数改为 32,则约为 4 GiB。这只是相同假设下的机制算例,不代表某个具体产品的总显存。MLA 的缓存布局不同,不能机械套用这条公式。

4. 除MHA、MQA、GQA之外,你还了解哪些注意力变体,DeepSeek、Qwen采用的注意力方案有什么特点

回答:

可以按"减少访问位置、压缩历史表示、改变注意力形式"介绍变体。滑动窗口和块稀疏注意力只访问部分位置,窗口为 w 时局部注意力主要计算可降到 O(nwd),但远距离信息需要全局 token、跨层传播或其他路径。线性注意力和部分循环状态模型通过核映射或状态递推处理历史,避免完整的两两注意力矩阵,但固定状态容量、数值稳定性和精确检索能力需要额外评估。

DeepSeek 应限定版本。 DeepSeek-V2、V3 采用 MLA,即多头潜在注意力。其核心是把 K/V 信息联合压缩到较低维的潜在表示,并采用解耦的位置编码设计;推理时缓存潜在表示及必要的位置相关分量,结合矩阵吸收或专用内核计算,减少直接缓存每个头完整 K/V 的开销。它不是简单把全部 Query 头共用同一组普通 K/V,也不能把 KV Cache 说成只剩一个无位置分量的向量。

MLA 的收益依赖缓存布局、计算重排、硬件和推理实现,训练与预填充仍需承担相应计算。DeepSeekMoE 属于 FFN/专家结构,不能用来回答"注意力是什么";MoE、MLA 和训练目标是不同层面的设计。

Qwen 也不能用一个结论覆盖所有版本。 例如 Qwen3-8B 的配置是 32 个 Query 头、8 个 K/V 头,属于 GQA。Qwen3-Next-80B-A3B 则使用混合架构,将 Gated DeltaNet 与门控注意力组合:前者通过状态更新高效处理长历史,后者保留注意力交互能力。应按具体模型配置确认层布局,不能把 Qwen3-Next 的混合设计倒推到整个 Qwen 系列,也不能把门控机制本身等同于 KV 头共享。

还可以补充低秩或压缩记忆注意力、带全局位置的局部注意力等,但要说明近似条件和质量代价。FlashAttention 是精确注意力的高效实现方法,与稀疏、线性或 MLA 的结构变化应分开比较。选型时同时看长文本检索、推理质量、缓存容量、首 token 延迟、解码吞吐和内核支持,不能只比较论文中的理论复杂度。

这张图把实现优化、缓存结构和交互结构分开。FlashAttention、GQA 与滑动窗口可以组合,但它们分别解决访存、缓存容量和交互数量问题。面试里应先说清优化目标,再给具体版本例子;同一模型家族的不同版本并不共享唯一的注意力答案。

5. FFN模块内部结构是怎样的,有哪些可替代的设计

回答:

标准 Transformer FFN 是对每个 token 独立应用、各位置共享参数的两层非线性网络。它通常先扩大通道维度,再投影回模型维度:

F F N ( x ) = ϕ ( x W 1 + b 1 ) W 2 + b 2 , W 1 ∈ R d × d f f , W 2 ∈ R d f f × d . \mathrm{FFN}(x)=\phi(xW_1+b_1)W_2+b_2, \quad W_1\in\mathbb{R}^{d\times d_{\mathrm{ff}}}, \quad W_2\in\mathbb{R}^{d_{\mathrm{ff}}\times d}. FFN(x)=ϕ(xW1+b1)W2+b2,W1∈Rd×dff,W2∈Rdff×d.

传统结构可以使用 ReLU 或 GELU,很多现代大模型会省略部分偏置。FFN 的作用是对注意力聚合后的特征进行非线性变换;没有非线性时,两层线性投影可以合成一层,表达优势会大幅减少。

一种常见替代是门控 FFN,如 SwiGLU:

S w i G L U ( x ) = ( S i L U ( x W g ) ⊙ ( x W u ) ) W d . \mathrm{SwiGLU}(x)= \bigl(\mathrm{SiLU}(xW_g)\odot(xW_u)\bigr)W_d. SwiGLU(x)=(SiLU(xWg)⊙(xWu))Wd.

它通过两个上投影分支进行逐元素门控,再下投影,因此主要权重规模约为 3d·d_mid,而标准两层 FFN 约为 2d·d_ff。比较参数预算时要相应调整中间维度,不能固定宽度后声称门控没有成本。若传统 d_ff=4d,忽略偏置且保持相近权重规模,门控中间维度约取 8d/3,实际通常按硬件要求对齐。

MoE 可以用多个 FFN 专家替代单个稠密 FFN,每个 token 只激活部分专家,以更少的活跃计算承载更大总参数容量,但增加路由、通信和负载管理。其他方案包括低秩分解、参数共享、稀疏化或卷积混合等,是否有效取决于任务、训练和内核支持。MoE 专家内部仍然可以使用 SwiGLU,所以它们不是互斥选项。

面试中应补充 FFN 经常占模型很大一部分参数与 FLOPs。替换结构要在相同参数量、活跃计算或延迟预算下比较,并检查质量、训练稳定性和部署成本。

6. 说说常见归一化方式以及各自作用

回答:

归一化通过控制激活或参数的尺度改善数值条件与优化过程,但不同方法的统计维度、训练推理行为和适用场景不同。不能将它们统一解释成"防止过拟合",也不能认为有归一化就不需要合适的初始化和学习率。

BatchNorm 通常按通道利用批次及空间位置统计均值和方差,训练时使用批统计,推理时通常使用运行统计,适合很多视觉网络;很小 batch 或分布改变时要特别注意。LayerNorm 通常对每个 token 的隐藏维度独立统计,训练与推理没有 BatchNorm 式运行均值切换,适合变长序列和 Transformer。

对于一个 d 维 token 表示,LayerNorm 与 RMSNorm 的核心形式分别为:

L N ( x ) j = γ j x j − μ σ 2 + ε + β j , R M S N o r m ( x ) j = γ j x j 1 d ∑ k = 1 d x k 2 + ε . \begin{aligned} \mathrm{LN}(x)_j&=\gamma_j\frac{x_j-\mu}{\sqrt{\sigma^2+\varepsilon}}+\beta_j,\\ \mathrm{RMSNorm}(x)j&=\gamma_j\frac{x_j}{\sqrt{\frac{1}{d}\sum{k=1}^{d}x_k^2+\varepsilon}}. \end{aligned} LN(x)jRMSNorm(x)j=γjσ2+ε xj−μ+βj,=γjd1∑k=1dxk2+ε xj.

RMSNorm 通常不减均值,主要控制均方根尺度,省去部分统计计算;常见实现也不含偏置。具体 epsilon、统计精度和参数化会影响结果。InstanceNorm 更偏向每个样本、每个通道的空间统计;GroupNorm 将通道分组,在每个样本内统计,不依赖 batch 大小。这些维度要结合张量布局解释。

Transformer 中还需区分归一化类型与放置位置:Pre-Norm 在子层之前归一化,使残差主路径相对直接,通常有利于深层训练;Post-Norm 在残差相加后归一化,对优化设置更敏感。RMSNorm 可以用于 Pre-Norm,二者不是同一个分类轴。Q/K 归一化作用于注意力输入并影响分数尺度,也不能与整个残差块的归一化混为一谈。

如果出现数值不稳定,应检查归一化轴、零方差处理、低精度统计、掩码位置和残差尺度。BatchNorm 的运行统计、LayerNorm 的可训练缩放以及模型 train/eval 模式行为也需要分别验证。

统计轴可以用形状解释。 输入是 [B,T,D] 时,语言模型常见 LayerNorm/RMSNorm 对最后一个 D 维归一化,每个 token 独立计算统计量。若误写成跨 T 维统计,就改变了模型的依赖结构;自回归训练中,跨完整序列统计还可能把未来 token 的信息带入当前位置。Mask 是否存在、归一化放在哪个轴上,都必须结合实际算子判断。

7. MoE的运行原理是什么,路由专家、共享专家的含义

回答:

MoE 通过条件计算扩大模型容量:路由器根据当前 token 表示选择少量专家执行,再按权重融合结果。专家通常是 FFN,而非完整独立语言模型;不同 token 可以进入不同专家,同一专家的参数在其处理的 token 之间共享。

一个包含共享专家的简化计算可以表示为:

y = ∑ j ∈ S E j ( x ) + ∑ i ∈ T o p K ( g ( x ) ) p i ( x ) E i ( x ) . y=\sum_{j\in\mathcal{S}}E_j(x) +\sum_{i\in\mathrm{TopK}(g(x))}p_i(x)E_i(x). y=j∈S∑Ej(x)+i∈TopK(g(x))∑pi(x)Ei(x).

这里 S 是共享专家集合,g(x) 生成路由分数,p_i 是被选专家的融合权重;具体实现可能对共享分支额外门控、对权重重新归一化,或在外层加入残差。因此这个式子表达职责,不意味着所有 MoE 都采用相同加权方式。

路由专家 是随 token 条件选择的专家集合,希望通过分工覆盖不同特征或模式;不能预设某个专家必然对应"数学"或"中文",专业化需要观察验证。共享专家在采用该设计的模型中对所有 token 或固定公共路径执行,提供通用表示,减少路由专家重复学习公共能力;并非所有 MoE 都存在共享专家。

总参数、每 token 活跃参数和实际计算成本要区分。只激活少量专家不意味着显存只需容纳活跃专家,部署仍需存储或分布加载全部必要权重。专家并行通常包含 token dispatch 和结果汇聚,跨设备通信、批次碎片化和负载不均可能限制吞吐。

训练中需处理专家塌缩、热门专家拥塞、容量限制和可能的 token 丢弃。可以通过负载均衡损失、路由偏置调节、容量设计等方法改善,具体取决于模型;DeepSeek-V3 的辅助损失自由负载均衡策略也不应被泛化成所有 MoE 的共同规则。评测既看质量和活跃 FLOPs,也看每专家负载、通信耗时和端到端成本。

活跃参数的机制算例。 假设有 64 个相同规模的路由专家、每 token 选择 2 个,并额外执行 1 个共享专家,则这一 MoE 层存储 65 份专家权重,每 token 只计算其中 3 份专家分支。这里还没计入注意力、路由器和其他公共层,不能把 3/65 当作整个模型的激活参数比例,更不能据此推出 21.7 倍加速。

容量限制也需要明确业务含义:某专家被过多 token 选中时,可以丢弃、溢出转路由、排队或使用无丢弃调度,不同实现对质量和延迟影响不同。对于 DeepSeek-V3,专家级负载调节避免常规的专家均衡辅助损失,并不等于训练目标完全没有任何辅助项;还需区分报告中用于抑制单序列失衡的序列级辅助项。

8. 深度学习前向传播、反向传播以及参数更新的完整流程

回答:

首先准备并校验批次,设置训练模式,确保模型参数位于预期设备并被优化器管理。前向传播依次执行各层,将输入映射为预测,并根据有效监督位置计算标量损失。自动微分系统记录必要操作和中间量,构成反向求导所需的计算图。

反向传播利用链式法则,从损失对输出的导数逐层计算对参数和中间变量的梯度。调用 backward 通常把梯度累加到参数的梯度缓冲区,不会自动更新权重。图中被 detach 的路径或禁用梯度的操作不会按预期继续传播;冻结参数也需要区分不更新该参数与是否仍需梯度经过该模块传到其他参数。

优化器根据梯度和自身状态更新参数。SGD 的基本形式是 θ←θ−η∇L;Adam 使用一阶、二阶矩估计和偏差修正,AdamW 进一步将权重衰减与自适应梯度更新解耦。随后按调度策略更新学习率,并在下一轮反向累计之前清理梯度。

不使用混合精度和梯度累积时,典型顺序是:清梯度 → 前向 → 计算 loss → backward → 可选梯度裁剪 → optimizer.step → 按约定执行 scheduler.step。清梯度可以安排在其他位置,但必须确保预期的累计窗口正确。验证阶段切换 eval,并在不需要梯度时使用 no_grad 或 inference_mode;eval 本身并不关闭自动微分。

梯度累积时,多个微批次反向后才执行一次参数更新,损失缩放应与目标的有效样本或 token 加权一致。混合精度下常用 autocast;使用 GradScaler 时,先缩放 loss 再反向,在裁剪前解除梯度缩放,再执行带有限值检查的 step 和 scale 更新。若由于溢出跳过更新,学习率调度也应保持正确节奏。BF16 并不必然需要与 FP16 相同的缩放方案。

分布式训练还包括梯度同步或分片聚合,保存检查点应覆盖模型、优化器、调度器、必要的缩放状态和数据进度。用参数更新范数、有效 batch、梯度范数和 loss 分项确认训练确实执行了预期过程,而不是只有日志在变化。

有效 token 加权是一个容易被追问的细节。 两个微批次分别有 10 和 90 个有效监督 token,各自 mean loss 为 2 和 1,合并后的 token mean 应为 (10×2+90×1)/100=1.1,直接平均两个均值会得到 1.5。

如果各卡梯度同步采用 DDP 的默认均值归约,且要优化全局有效 token 均值,可以让每卡本地 token loss 求和乘以 world_size / global_token_count 后反向,再由 DDP 平均。分母应覆盖当前完整累积窗口;存在额外自动缩放的训练框架时,必须核对框架实际归约规则,不能再重复除一次。

9. LoRA低秩适配的底层原理

回答:

LoRA 冻结预训练权重,只训练一个低秩增量,基于任务适配所需的有效权重变化可以由较低秩表示近似这一经验假设。对于采用列向量输入的线性层:

W ′ = W + α r B A , W ∈ R d o u t × d i n , A ∈ R r × d i n , B ∈ R d o u t × r . W'=W+\frac{\alpha}{r}BA,\quad W\in\mathbb{R}^{d_{\mathrm{out}}\times d_{\mathrm{in}}},\quad A\in\mathbb{R}^{r\times d_{\mathrm{in}}},\quad B\in\mathbb{R}^{d_{\mathrm{out}}\times r}. W′=W+rαBA,W∈Rdout×din,A∈Rr×din,B∈Rdout×r.

因此增量的秩最多为 r,可训练参数量为 r(d_in+d_out),而全量更新该矩阵需要 d_in·d_out 个参数。α/r 是标准 LoRA 常见的缩放方式,变体可能采用不同缩放。常见初始化令 A 随机、B 为零,使初始增量为零且底座输出不变;若 A、B 同时初始化为零,初始梯度可能无法推动两者更新。

训练时底座权重不更新,A、B 通过普通反向传播优化。它主要减少可训练参数、梯度和优化器状态,不能按相同比例减少全部激活显存或计算。注入哪些注意力投影或 MLP 层、rank 和学习率取决于任务,rank 越高并不必然越好。

在兼容精度和布局下,可以将增量合并进底座权重,避免保留额外低秩分支;多个适配器动态切换时可能选择不合并。QLoRA 还结合量化底座等机制,不能直接等同于 LoRA。量化后合并与重新量化也可能产生误差,需要重新验证。

面试可补充选型边界:LoRA 适合资源受限的任务适配,持续变化的外部知识不一定适合写入权重。评测需对比底座、提示词或 RAG 基线、不同 rank 与训练步数,同时检查目标任务提升、通用能力退化和数据泄漏。

初始化为何只把一个矩阵置零。 记增量权重的梯度为 G,省略批次与输入求和细节,有:

∂ L ∂ B = α r G A ⊤ , ∂ L ∂ A = α r B ⊤ G . \frac{\partial\mathcal{L}}{\partial B}=\frac{\alpha}{r}GA^\top,\qquad \frac{\partial\mathcal{L}}{\partial A}=\frac{\alpha}{r}B^\top G. ∂B∂L=rαGA⊤,∂A∂L=rαB⊤G.

当 B=0、A 随机时,第一步 A 的梯度为零,但 B 通常可以更新,之后 A 也获得梯度;若 A、B 都为零,标准双线性参数化下两者的梯度都为零,普通梯度更新无法启动。这是初始化选择的直接原因,而不是"随机初始化总会更好"。

以 4096×4096 线性权重、rank=8 为例,LoRA 训练 65,536 个参数,原矩阵有 16,777,216 个参数,前者约为后者的 0.39%。这个比例只对应该矩阵的可训练权重,不包含激活、其他可训练层或优化器之外的显存。

10. PPO、GRPO、DPO三者的核心逻辑以及差异对比

回答:

三者都能用于模型对齐,但训练信号、采样方式和优化对象不同。下面对比的是语言模型对齐中常见的 PPO、DeepSeekMath 提出的 GRPO,以及标准离线 DPO;具体实现和后续变体可能改变 KL、长度归一化或参考模型设置。

PPO:利用奖励和优势进行受约束的策略更新。 从旧策略采样回答,通过奖励函数或奖励模型评价,价值网络通常估计状态价值,再结合回报构造优势,例如使用 GAE。策略通过新旧概率比进行优化,常见裁剪目标为:

ρ t ( θ ) = π θ ( a t ∣ s t ) π o l d ( a t ∣ s t ) , J c l i p = E t  ⁣ min ⁡ ( ρ t A t , c l i p ( ρ t , 1 − ϵ , 1 + ϵ ) A t ) . \rho_t(\theta)=\frac{\pi_\theta(a_t\mid s_t)}{\pi_{\mathrm{old}}(a_t\mid s_t)},\qquad J_{\mathrm{clip}}=\mathbb{E}_t\!\left \\min\\bigl(\\rho_t A_t,\\mathrm{clip}(\\rho_t,1-\\epsilon,1+\\epsilon)A_t\\bigr) \\right. ρt(θ)=πold(at∣st)πθ(at∣st),Jclip=Etmin(ρtAt,clip(ρt,1−ϵ,1+ϵ)At).

Actor 最大化策略目标,Critic 学习价值估计。语言模型 RLHF 常另外使用参考策略的 KL 约束,放在奖励或损失中的位置依实现而定。裁剪不是对真实策略分布距离的硬性保证,PPO 算法本身也不要求奖励必须来自单独训练的奖励模型。

GRPO:用同一问题的一组回答构造相对优势。 对问题采样 G 个回答,计算奖励 R_i,在常见的结果奖励设置下得到:

A ^ i = R i − R ‾ s t d ( R 1 , ... , R G ) + ε . \widehat A_i=\frac{R_i-\overline R}{\mathrm{std}(R_1,\ldots,R_G)+\varepsilon}. A i=std(R1,...,RG)+εRi−R.

再将回答级优势用于该回答的 token 更新,结合类似 PPO 的新旧策略比率和裁剪,并可加入参考策略 KL。它省去独立价值网络的训练,仍需要采样、评分和策略更新。回答长度如何归一化、过程奖励怎样分配、零方差组怎样处理,均需明确;不同变体不一定采用相同规则。

DPO:从偏好对直接优化相对概率。 数据为同一输入 x 下偏好的 y_w 与较差的 y_l,利用固定参考策略,标准目标为:

z θ = β log ⁡ π θ ( y w ∣ x ) π r e f ( y w ∣ x ) − log ⁡ π θ ( y l ∣ x ) π r e f ( y l ∣ x ) , L D P O = − E ( x , y w , y l ) log ⁡ σ ( z θ ) . \begin{aligned} z_\theta&=\beta\left \\log\\frac{\\pi_\\theta(y_w\\mid x)}{\\pi_{\\mathrm{ref}}(y_w\\mid x)} -\\log\\frac{\\pi_\\theta(y_l\\mid x)}{\\pi_{\\mathrm{ref}}(y_l\\mid x)}\\right,\\ \mathcal L_{\mathrm{DPO}}&=-\mathbb E_{(x,y_w,y_l)}\log\sigma(z_\theta). \end{aligned} zθLDPO=βlogπref(yw∣x)πθ(yw∣x)−logπref(yl∣x)πθ(yl∣x),=−E(x,yw,yl)logσ(zθ).

标准离线 DPO 不需要在优化循环中在线 rollout,也不必单独训练显式奖励模型或 Critic;构建偏好数据仍可能使用模型生成、人工或规则评价。DPO 的推导与 KL 正则化奖励最大化有关,但训练实现不是简单地把 PPO 的 Critic 删掉。

工程上,PPO 的价值估计和多模型状态增加资源与调参成本,适合有可靠奖励且需要持续探索的场景;GRPO 适合能对同题多个回答做有效区分的任务,但多次采样并不免费;DPO 适合已有高质量偏好对的情况,受数据覆盖和偏好噪声约束。最终要比较实际任务质量、奖励偏差、KL 漂移、长度分布、训练稳定性及采样成本,而不是只看算法名称。

比较维度 常见语言模型PPO 原始GRPO的结果奖励设置 标准离线DPO
主要数据 旧策略采样的回答 同题采样的一组回答 固定偏好对
优势或监督 回报与价值基线构造优势 组内奖励构造相对优势 偏好回答相对劣质回答的对数概率差
价值估计器 通常需要 不训练独立Critic 不需要
优化时在线生成 常见训练循环需要 常见训练循环需要 不要求
主要成本风险 rollout、价值训练与稳定性 多回答采样、零方差与奖励噪声 偏好覆盖、错误标签与分布外行为

旧策略与参考策略必须区分。 旧策略对应这批 rollout 的采样分布,概率比约束同一批数据上的更新幅度;参考策略用于限制相对初始或指定模型的偏移。在多轮更新中,旧策略会按采样轮次变化,参考策略通常保持固定。把二者混为一个模型,会导致对裁剪与 KL 的理解错误。

图表比较的是明确限定的常见设置。共享骨干 PPO、在线 DPO 或修改优势归一化的 GRPO 变体,需要另行描述,不能拿其中一个变体覆盖所有同名算法。

11. GRPO去掉Critic网络的原因

回答:

语言模型 PPO 中,Critic 通过学习状态价值提供基线,帮助估计某个动作比预期好多少,从而降低策略梯度的方差。它不是奖励模型:奖励模型或规则评价输出好坏,Critic 估计从当前状态出发的预期回报,两者职责不同。

训练大语言模型的价值估计器需要额外模型状态、计算与优化工作,实践中常与策略使用相近规模的骨干;不过并非所有 PPO 实现都必须部署完全独立且同等规模的网络,也可能共享部分骨干。GRPO 利用同一个问题下多个回答的奖励分布构造相对基线,因而不再训练独立的状态价值函数。

例如同题四个回答奖励为 0、0、1、1,组内平均值为 0.5,成功回答获得正相对优势,失败回答获得负相对优势。因为比较在同一问题内进行,可以缓解不同问题绝对奖励尺度和难度带来的部分影响;标准差归一化还会改变各组的梯度尺度,并不保证对所有难度分布都最优。

代价是必须产生足够且有区分度的候选。若整组奖励相同,组内优势为零或接近零,策略缺少这部分学习信号;G=1 也无法产生通常意义上的有效组内相对比较。加 epsilon 只能避免除零,不能凭空创造信息。对于极难问题全错、极易问题全对、奖励噪声大或需要细粒度信用分配的任务,采样策略、奖励设计和优势估计都需要调整。

因此,去掉 Critic 的依据是用组内统计替代学习型价值基线,并降低相应资源成本。它不意味着不需要奖励、不需要参考模型、不需要旧策略概率,也不意味着总训练成本一定低于任意 PPO 实现;多回答 rollout、评分和可能的方差代价必须一起评估。

"去掉Critic"没有解决所有信用分配问题。 仅使用最终结果奖励时,同一回答的 token 往往共享回答级优势,正确的中间步骤与错误的最终步骤不一定被精细地区分。过程奖励、分段反馈和更好的采样覆盖可以提供额外信息,但也增加奖励可靠性与实现复杂度。组内均值包含当前样本本身,归一化还会改变梯度尺度,因此不宜把它笼统称为对任意 PPO 优势估计的无偏等价替代。

12. 大模型的数据清洗流程、数据集搭建思路

回答:

先定义训练目标,再设计数据集。预训练需要广泛而可控的语言和知识分布,SFT 需要输入与高质量目标输出,偏好优化需要同题可比较的回答,RL 需要能产生有效反馈的问题与奖励机制。不能用同一套"去重后直接训练"流程覆盖全部阶段。

接入与可追溯管理。 记录数据获取渠道、授权使用范围、时间、领域、语言和处理版本,保留原始快照及清洗日志。先按文档家族、用户、实体或时间等合适边界设计训练、验证、测试划分,再跨分区检查重复和关联泄漏;不能把同一文档的多个切片随机分到训练和测试中。

解析与基础清洗。 修复编码、抽取正文,去除模板、导航、广告和异常重复,识别语言、空内容、损坏文本及 OCR 风险,处理敏感信息与不应进入训练的数据。数学公式、代码缩进、表格单位和否定条件具有任务价值,不能被过强清洗误删。不同领域应采用不同阈值,并抽检被保留与被删除的样本。

去重与质量筛选。 用规范化哈希处理精确重复,用 MinHash、SimHash 或其他方法识别近重复,必要时用语义方法发现模板化变体。相似不一定等价,不能误删事实不同的版本。质量过滤结合规则、模型打分与人工抽检,兼顾准确性、可读性、信息密度和领域多样性;过度按某种写作风格筛选会引入偏差。

构造训练样本。 SFT 检查聊天角色、模板、答案正确性、拒答边界、监督掩码和工具参数;偏好对检查选择理由、两侧可比性、顺序与长度偏差;代码或数学任务尽量采用测试或可验证结果,但要防止只覆盖有限测试和奖励投机。合成数据保留生成配置与验证记录,不把模型自评当成唯一事实依据。

混合、发布与迭代。 根据任务和 token 预算控制语言、领域、难度、长度与时间分布,避免高重复样本主导训练。Packing、EOS 和 attention mask 要符合数据边界设计,防止无意跨样本监督。发布版本化 manifest、统计报告和固定评测集,通过小规模试训、消融及错误回流验证数据收益;评测泄漏扫描与人工审查贯穿全流程,不能只在末尾检查一次。

13. 手撕:三数之和;进阶变体:寻找和最接近0的三元组

回答:

第一部分:三数之和。 给定整数数组,返回所有由三个不同下标组成、和为 0 的不重复数值三元组。结果按数值去重,不是按下标枚举;数组可以包含重复元素,例如三个 0 可以组成一个合法答案。

先排序,固定第一个位置 i,用左右指针 l、r 搜索其右侧区间。和小于 0 时增大 l,和大于 0 时减小 r,命中时记录并跳过重复值。排序保证移动方向正确:若当前和过小,固定 l 并减小 r 只会更小,因此当前 l 已无可行解;过大时同理可排除当前 r。固定值重复时跳过,避免输出重复三元组。

python 复制代码
def three_sum(nums: list[int]) -> list[tuple[int, int, int]]:
    a = sorted(nums)
    result = []
    for i in range(len(a) - 2):
        if i > 0 and a[i] == a[i - 1]:
            continue
        if a[i] > 0:
            break
        left, right = i + 1, len(a) - 1
        while left < right:
            total = a[i] + a[left] + a[right]
            if total < 0:
                left += 1
            elif total > 0:
                right -= 1
            else:
                result.append((a[i], a[left], a[right]))
                lv, rv = a[left], a[right]
                while left < right and a[left] == lv:
                    left += 1
                while left < right and a[right] == rv:
                    right -= 1
    return result

长度不足 3 时自然返回空列表。排序需要 O(n log n),固定位置后双指针各单向移动,搜索总时间 O(n²)。此实现使用 sorted 复制输入,工作空间为 O(n),另外还有输出空间;不能因指针个数固定而把整个实现说成 O(1) 空间。它不修改调用者数组。

第二部分:寻找和最接近 0 的三元组。 目标变为最小化三数之和的绝对值,仍要求三个不同下标。需要先确认并列答案的处理方式;下面返回任意一个最优数值三元组,若存在绝对值相同但符号相反的最优和,约定选择数值较小的和,即负的那个,不承诺同和时的字典序最小三元组。

同样固定 i,扫描左右指针,每次先更新当前最优解,再依据和的正负移动。当前和小于 0 时,缩小右端只会使和更负、更远离 0,因此可以排除当前左端;和大于 0 时对称处理。命中 0 已达到绝对差的最优值,可以立即返回。

python 复制代码
def three_sum_closest_zero(nums: list[int]) -> tuple[int, int, int]:
    if len(nums) < 3:
        raise ValueError("at least three integers are required")
    a = sorted(nums)
    best = (a[0], a[1], a[2])
    best_sum = sum(best)
    for i in range(len(a) - 2):
        if i > 0 and a[i] == a[i - 1]:
            continue
        left, right = i + 1, len(a) - 1
        while left < right:
            total = a[i] + a[left] + a[right]
            if (abs(total), total) < (abs(best_sum), best_sum):
                best = (a[i], a[left], a[right])
                best_sum = total
            if total == 0:
                return (a[i], a[left], a[right])
            if total < 0:
                left += 1
            else:
                right -= 1
    return best

该变体也为 O(n²) 时间、O(n) 工作空间,输入约定为整数数组。不能沿用"三数之和中固定值大于 0 就直接跳出"的代码而不分析,因为全正数数组仍有合法最接近答案;也不能在没有零和解时返回空列表。全负数、重复值、仅 3 个元素、并列最优以及大整数都需要测试。若使用固定宽度整数语言,应考虑求和溢出;Python 整数没有这种固定宽度溢出,但极大整数仍有位运算成本。

例如输入 -1, 0, 1, 2, -1, -4,三数之和返回 (-1, -1, 2) 和 (-1, 0, 1);最接近 0 的版本可以返回其中任一零和三元组。输入 1, 2, 4, 8 时,最接近三元组为 (1, 2, 4),其和为 7。两个任务共享排序与双指针框架,但输出契约和剪枝条件不同。

用于自测的边界样例。

输入 所有零和三元组 最接近0的结果要求
[0,0,0,0] 仅 (0,0,0) 和为0,使用三个不同下标
[1,2,4,8] 空 (1,2,4),和为7
[-8,-4,-2,-1] 空 (-4,-2,-1),和为−7
[-2,-1,1,2] 空 选择和为−1的最优解,符合负和优先约定
[1,2] 空 抛出长度不足异常

验证最接近变体时,应把所有三个不同下标的组合暴力枚举,按 (abs(sum), sum) 比较最优目标;再检查返回三元组的元素重数确实存在于输入中。只检查目标和而忽略元素数量,会漏掉重复使用同一位置的错误。

推荐阅读

1. 深入浅出完整解析AI Agent(AI智能体)的核心基础知识

2025年可以说是AI Agent全面落地应用的元年,因此Rocky在持续撰写对AI Agent的全维度解析文章:

深入浅出完整解析AI Agent(AI智能体)的核心基础知识

2. 深入浅出完整解析扩散模型DDPM、DDIM、Score-Based、SDE、LDM、Classifier/Classifier-Free Guidance、Rectified Flow核心基础知识

Rocky对扩散模型的本质原理与和核心基础知识进行了全面系统的深入浅出分析讲解,同时不断跟进补充扩散模型的最新技术发展,希望能给大家带来帮助:

深入浅出完整解析扩散模型DDPM、DDIM、Score-Based、SDE、LDM、Classifier/Classifier-Free Guidance、Rectified Flow核心基础知识

3. 入浅出完整解析FLUX.2、Seedream(即梦)、Z-image、GLM-Image核心基础知识

Rocky对AIGC时代"中场时刻"之后的主流AIGC创作大模型的核心基础知识进行了全面系统的深入浅出分析讲解,力求让大家通俗易懂理解AIGC时代的技术浪潮的本质价值:

入浅出完整解析FLUX.2、Seedream(即梦)、Z-image、GLM-Image核心基础知识

4. 深入浅出完整解析FLUX.1 Kontext和FLUX.1 Krea核心基础知识

Rocky对FLUX.1 Kontext和FLUX.1 Krea的核心基础知识作了全面系统的梳理与解析:

深入浅出完整解析FLUX.1 Kontext和FLUX.1 Krea核心基础知识

5. 深入浅出完整解析DeepSeek系列核心基础知识

Rocky对DeepSeek系列模型的核心基础知识作了全面系统的梳理与解析:

深入浅出完整解析DeepSeek系列核心基础知识

6. 深入浅出完整解析Stable Diffusion 3(SD 3)和FLUX.1系列核心基础知识

Rocky对Stable Diffusion 3和FLUX.1的核心基础知识作了全面系统的梳理与解析:

深入浅出完整解析Stable Diffusion 3(SD 3)和FLUX.1系列核心基础知识

7. 深入浅出完整解析Stable Diffusion XL(SDXL)核心基础知识

Rocky对Stable Diffusion XL的核心基础知识作了全面系统的梳理与解析:

深入浅出完整解析Stable Diffusion XL(SDXL)核心基础知识

8. 深入浅出完整解析Stable Diffusion(SD)核心基础知识

Rocky对Stable Diffusion 1.x-2.x系列模型的核心基础知识做了全面系统的梳理与解析:

深入浅出完整解析Stable Diffusion(SD)核心基础知识

9. 深入浅出完整解析Stable Diffusion中U-Net的前世今生与核心知识

Rocky对Stable Diffusion中最为关键的U-Net结构进行了深入浅出的全面解析,包括其在传统深度学习中的价值和在AIGC中的价值:

深入浅出完整解析Stable Diffusion中U-Net的前世今生与核心知识

10. 深入浅出完整解析LoRA(Low-Rank Adaptation)模型核心基础知识

对于AIGC时代中的"ResNet"------LoRA模型,Rocky进行了深入浅出的全面讲解:

深入浅出完整解析LoRA(Low-Rank Adaptation)模型核心基础知识

11. 深入浅出完整解析ControlNet核心基础知识

AIGC图像创作开源社区已经形成以Stable Difffusion/FLUX为核心,ConrtolNet和LoRA作为首要AI辅助工具的变化万千的AIGC图像创作工作流。

ControlNet正是让AI图像创作社区无比繁荣的关键一环,它让AIGC图像创作过程更加的可控,更有助于广泛地将AIGC算法解决方案应用到各行各业中:

深入浅出完整解析ControlNet核心基础知识

12. 深入浅出完整解析Sora、Seedance、keling等AI视频大模型核心基础知识

AI绘画和AI视频是两个互相促进、相互交融的领域,2024年无疑是AI视频领域的爆发之年,Rocky对AI视频领域核心的Sora、Seedance、Keling等大模型进行了全面系统的梳理与解析:

深入浅出完整解析Sora、Seedance、keling等AI视频大模型核心基础知识

13. 深入浅出完整解析AIGC时代Transformer核心基础知识

在AIGC时代中,Transformer为AI行业带来了深刻的变革。Transformer架构正在一步一步重构所有的AI技术方向,成为AI技术架构大一统与多模态整合的关键核心基座,大有一统"AI江湖"之势。Rocky也对Transformer模型进行持续的深入浅出梳理与解析:

深入浅出完整解析AIGC时代Transformer核心基础知识

14. 深入浅出完整解析ComfyUI、Diffusers、Stable Diffusion WebUI等主流AIGC创作框架核心基础知识

AIGC创作框架正是AIGC算法工作流的运行载体,目前主流的AIGC创作框架有ComfyUI、Diffusers、Stable Diffusion WebUI等 。在传统深度学习时代,PyTorch、TensorFlow以及Caffe是传统深度学习模型的基础运行框架,到了AIGC时代,Rocky相信ComfyUI就是AIGC时代的"PyTorch"、Stable Diffusion WebUI就是AIGC时代的"TensorFlow"、Diffusers就是AIGC时代的"Caffe":

深入浅出完整解析ComfyUI、Diffusers、Stable Diffusion WebUI等主流AIGC创作框架核心基础知识

15. 深入浅出完整解析ComfyUI、Diffusers、Stable Diffusion WebUI等主流AIGC创作框架核心基础知识

在AIGC时代中,如何快速转身,入局AIGC产业?如何成为AIGC/LLM/AI Agent算法/开发工程师?如何在学校中系统性学习AIGC/LLM/AI Agent知识,斩获心仪的AIGC/LLM/AI Agent算法/开发offer?

Don't worry,Rocky为大家总结整理了全面的AIGC/LLM/AI Agent算法/开发工程师成长秘籍,为大家答疑解惑,希望能给大家带来帮助:

手把手教你成为AIGC/LLM/AI Agent算法/开发工程师,斩获AIGC/LLM/AI Agent算法/开发offer!

16. AIGC产业的深度思考与分析

2023年3月21日,微软创始人比尔·盖茨在其博客文章《The Age of AI has begun》中表示,自从1980年首次看到图形用户界面(graphical user interface)以来,以OpenAI为代表的科技公司发布的AIGC模型是他所见过的最具革命性的技术进步。

Rocky也认为,AIGC及其生态,会成为AI行业重大变革的主导力量。AIGC会带来一个全新的红利期,未来随着AIGC的全面落地和深度商用,会深刻改变我们的工作、生活、学习以及交流方式,各行各业都将被重新定义,过程会非常有趣。

那么,在此基础上,我们该如何更好的审视AIGC的未来?我们该如何更好地拥抱AIGC引领的革新?Rocky准备从技术、产品、商业模式、长期主义等维度持续分享一些个人的核心思考与观点,希望能帮助各位读者对AIGC有一个全面的了解:

深入浅出全面解析AIGC时代核心价值与发展趋势(2025年版)

17. AI算法工程师的独孤九剑秘籍

为了方便大家实习、校招以及社招的面试准备,同时帮助大家提升扩展技术基本面,Rocky将符合大厂和AI独角兽价值的算法高频面试知识点撰写总结成《三年面试五年模拟》之独孤九剑秘籍:

【三年面试五年模拟】AIGC时代的算法工程师的求职面试秘籍(持续更新中)

18. 深入浅出完整解析AIGC时代中GAN(Generative Adversarial Network)系列模型核心基础知识

GAN系列模型作为传统深度学习时代的最热门生成式Al模型,在AIGC时代继续繁荣,作为Stable Diffusion/FLUX系列大模型的"得力助手",广泛活跃于AlGC图像创作的产品与工作流中:

深入浅出完整解析AIGC时代中GAN(Generative Adversarial Network)系列模型核心基础知识

相关推荐
马剑威(威哥爱编程)2 小时前
【HarmonyOS 7 小艺智能体实战】07:手写一个 Skill(下)——ArkTS、意图框架与工程结构
人工智能·华为·harmonyos
小虎AI生活2 小时前
59.3k Stars 的 diagram-design 实战:接入 WorkBuddy,让 AI 按 4px 网格自动出架构图
aigc·ai编程
Old Uncle Tom2 小时前
LLM 替代 SAST?Claude Code 安全审查工具的设计取舍与工程启示
人工智能·安全·软件工程
叁两2 小时前
别再手动刷行业信息了,你可能需要一个"行业研究员"
人工智能
2601_965449082 小时前
AI视频制作:做系列历史地图视频想固定音色,AI 音色克隆的流程实测
人工智能·音视频
2601_962071003 小时前
从OpenRouter到Crazyrouter:Claude Code三处改动
人工智能·ai
阿里云大数据AI技术3 小时前
云栖实录|从代码上下文到千亿级文档:Qoder × 阿里云 Elasticsearch 落地生产级Agent向量检索
人工智能·elasticsearch
汤姆宝库3 小时前
具身智能深拆:VLA、世界模型与数据飞轮
开发语言·人工智能·php
鲜于言悠9053 小时前
Jev爆火:不生成文字,直接输出概率的决策模型
人工智能