先读这个:这里的题目全部来自站内笔记本身——各篇的“面试常见问题”和文末的“自检”——不是任何一家公司的面试题,也不涉及任何公司的面试流程。面试的侧重点变得很快,这些题目有时效性。

这一页和基础与原理讲的是同一批东西,但用途不一样:那边是学——有推导、有能动手玩的图;这边是考前快速过一遍——只有题和答案。内容重复是故意的。

这一页是自动生成的:构建站点时,程序把每篇笔记里的面试题(连同答案)和自检题抽出来,按知识板块归类。笔记改了,这里跟着变,不存在第二份需要维护的题库。

怎么用:先在心里答,再点开题目看答案;“再问自己”那几道没有现成答案,答不上来就点回笔记。想被随机考,用下面的“随机抽一题”。

127 道题 · 57 道带答案

通用基础

ML 基础

7 道题

再问自己(答案在笔记里)

数学与统计

5 道题

再问自己(答案在笔记里)

编程与数据结构

7 道题

grid = [[0] * 3] * 3,改了 grid[0][0],为什么三行都变了?

* 3 复制的是引用:三行其实是同一个列表。不管通过 grid[0]、grid[1] 还是 grid[2] 去改,改的都是这一个列表,三行自然一起变。正确写法是 [[0] * 3 for _ in range(3)],每次循环都新建一行。名字和对象的关系,见两个名字,不一定是两份数据。

出处:技术面:刷题用得上的 Python 语法

fs = [lambda: i for i in range(3)],为什么 fs[0]() 返回的是 2?

lambda 记住的是变量 i 本身,调用时才去看 i 的值;循环结束时 i 已经是 2,所以三个函数都返回 2。这叫延迟绑定(late binding)。要记住当时的值,就用默认参数把它固定下来:lambda i=i: i。闭包的完整例子见默认参数和闭包。

出处:技术面:刷题用得上的 Python 语法

sorted 和 list.sort 有什么区别?Python 的排序稳定吗?

sorted 接受可迭代对象,返回新列表;list.sort 原地排序,返回 None。稳定性是两者的保证:key 相同就保留原顺序。CPython 的排序能利用已有的有序片段;在 key 计算和比较为常数成本时,最坏时间为 O(n log n),已排序输入可以更快。长字符串比较、昂贵的 key 函数也要单独计入成本。

出处:技术面:刷题用得上的 Python 语法

heapq 怎么当最大堆用?Top K 问题怎么做?

heapq 默认使用小顶堆。存入时取负、取出再取负,可以实现数值最大堆,兼容较老 Python;3.14 起也提供公开的 _max 接口。求最大的 k 个元素(1≤k≤n),维护大小不超过 k 的小顶堆:新元素比堆顶大就替换。扫描时间 O(n log(k+1)),有序输出还需 O(k log k)。详见 Top K 的淘汰线 和 官方接口。

出处:技术面:刷题用得上的 Python 语法

-7 // 2 等于多少?-7 % 2 呢?

-7 // 2 = -4,-7 % 2 = 1。Python 的整除向下取整,并且保证 a == (a // b) * b + a % b。C++ 和 Java 向零取整,-7 / 2 得 -3,余数是 -1。

出处:技术面:刷题用得上的 Python 语法

列表推导式和生成器表达式有什么区别?

列表推导式 [...] 保存全部结果;生成器表达式 (...) 按需计算,不建这份结果列表。生成器仍保留执行状态,也可能让输入对象继续占着内存;它耗尽以后不会自动从头再来。要多次遍历同一批结果,保存列表可能更合适。见短路与迭代器。

出处:技术面:刷题用得上的 Python 语法

为什么默认空列表不会在每次调用时重新创建?

默认值只在定义函数时求值一次。def f(acc=[]) 里的那个列表会被之后所有调用共用,上一次调用往里加的东西,下一次还在。改成 acc=None,在函数体里 if acc is None: acc = []。传入已有列表时它仍会被修改,这一点和可运行的例子见默认参数和闭包。

出处:技术面:刷题用得上的 Python 语法

大模型

Fine-tuning 与 Post-training

20 道题

典型 PPO-style RLHF 有哪些角色?分别训不训?

常见的四个角色是 Actor、Critic、Reward、Reference。它们不等于「必须同时常驻四份完整模型」。

在这个典型设置里,只有 Actor 和 Critic 更新参数。 Reward 是第二阶段训好后冻结的,Reference 是 SFT 模型的冻结副本。Actor 和 Reference 初始权重相同,训练中 Actor 逐渐偏离,Reference 停在原地作为 KL 的参照。

出处:RLHF:评估闭环与复习题

为什么需要 Reference model 和 KL 惩罚?去掉会怎样?

奖励(reward)模型在有限数据上学到的偏好,未必能泛化到策略后来生成的回答。优化得越来越用力,可能找到高分但不合人意的输出,例如迎合某种表达风格,而不是改善答案本身。

Reference KL 为偏离参照策略增加代价。$\beta$ 越大,这个代价通常越强,但实际效果也取决于 reward 尺度。去掉 KL 不等于训练必然崩溃;保留它也不能保证不钻奖励的空子。应把有无 KL、系数与独立评估一起比较,而不是把某个非零系数当成定律。推导和数值例子见 Reference 与 Critic。

出处:RLHF:评估闭环与复习题

Critic 是干什么的?GRPO 怎么把它省掉的?

Critic 估计状态价值 $V_t$,可用来构造类似 $\hat A_t=\hat G_t-V_t$ 的优势估计。合适的 baseline 能降方差(variance);使用 TD 或 GAE 时,还涉及 bootstrapping 的偏差。没有 Critic 也能训练,例如 REINFORCE,并不是「没有就训不动」。

GRPO 从同一 prompt 的一组回答中构造相对信号,不训练独立 Critic。它省下 Critic 的相关成本,但增加了组内采样需求;全对、全错(见 DAPO 的动态采样)、reward 尺度和长度归一化都需要检查。不能只数少了几个模型,就断言总训练成本更低。

出处:RLHF:评估闭环与复习题

DPO 和 PPO 的本质区别是什么?

DPO 用了一个推导:带 KL 约束的奖励最大化有闭式最优解,把奖励反解成策略的表达式之后,偏好损失可以直接对策略求梯度。于是奖励模型和 RL 循环都不需要了。

标准 DPO 的代价是使用离线偏好对。训练中策略在变,数据却不跟着变;它无法主动探索当前 policy 的新失败。PPO 或其他 online RL 可以从当前策略采样,更适合需要探索、环境交互或可验证多步结果的任务,但 rollout 更贵,训练也更不稳定。

所以 DPO 不能完全替代 PPO,但 PPO 也不是所有场景都更好。高质量静态偏好数据可以先用 DPO;需要当前策略不断产生新数据时使用 online RL。Online DPO 等变体进一步说明,关键区别是数据与反馈闭环(feedback loop),而不只是 loss 的名字。

出处:RLHF:评估闭环与复习题

奖励模型的分数可以直接比较大小吗?

Bradley–Terry 损失直接约束的是同一 prompt 下 chosen 与 rejected 的分差。给所有分数加一个常数,损失完全不变,所以零点没有可识别语义;一个 $2.4$ 不能直接读成「满意度 2.4」。

固定 Reward Model 的原始输出当然可以拿来计算,但跨 prompt、领域或模型版本比较时,必须先确认校准(calibration)与尺度是否稳定。训练实现也可能做 reward whitening 或 normalization;那是优化选择,不是 Bradley–Terry 必然要求的规则。

出处:RLHF:评估闭环与复习题

有了 verifier,为什么仍要独立评估?

因为 verifier 只检查写进去的条件。测试覆盖不足、答案提取错误、边界情况遗漏,都可能让错误答案得高分。程序确定性强,不代表它准确表达了全部任务目标。

RLVR 适合能自动检查结果的任务或子目标;开放式对话也可能用程序检查格式、工具参数,但这些检查覆盖不了全部回答质量。要保留独立题目、不同类型测试和必要的人类评审,确认模型学到的是任务,而不是检查器的漏洞。可验证奖励从一个具体反例讲起:一段永远输出同一个列表、却能通过单个排序测试的“解法”。

出处:RLHF:评估闭环与复习题

请写出 PPO、GRPO 与 DPO 最关键的三个式子。

用 Monte Carlo return 时,PPO 的优势可写成 $\hat A_t=G_t-V_\phi(s_t)$;GAE 则另有 bootstrapping。Clipped surrogate 会截平部分收益,不保证一次更新后的 ratio 或 KL 被硬性限制。GRPO 常用 $\hat A_i=(R_i-\mu_R)/(\sigma_R+\varepsilon)$。DPO 使用 $-\log\sigma\!\left(\beta[\Delta_w-\Delta_l]\right)$,其中 $\Delta$ 是当前 policy 相对 Reference 的 log-probability 变化。

出处:PPO、GRPO 与 DPO:反馈怎样变成一次更新

为什么 GRPO 省掉 Critic,却没有省掉 rollout?

它仍要让当前或近期 policy 对同一 prompt 生成多个回答,并给每个回答计算 reward;否则没有组内相对 baseline。它省掉的是训练 $V_\phi(s)$ 的 Critic。

出处:PPO、GRPO 与 DPO:反馈怎样变成一次更新

DPO 为什么不需要显式 Reward Model?

KL 约束下的最优策略可以反解出奖励:$r=\beta\log(\pi^*/\pi_{\mathrm{ref}})$ 加一个只依赖 prompt 的项。同一 prompt 的两个回答相减时这一项抵消,reward difference 就写成 chosen/rejected 的 policy/reference log-ratio 之差。Reward 没消失,而是隐含在 DPO loss 中。推导见上文。

出处:PPO、GRPO 与 DPO:反馈怎样变成一次更新

两分钟结论:DPO 能完全替代 PPO 吗?

不能一概而论。先问数据从哪来、反馈多久更新:离线 DPO 不会自己采集新失败;PPO / GRPO 通常在训练中持续生成并打分。Online DPO 也能刷新偏好数据,因此 online / offline 和偏好损失 / 策略梯度是两个不同的选择。成本也要算全:离线 DPO 省掉了训练中的在线生成,但收集和标注偏好对的成本还在;PPO / GRPO 要付生成预算和更多系统协调。在同任务、同预算下比较成本、覆盖和验证结果,不把它们排成优劣榜。

出处:PPO、GRPO 与 DPO:反馈怎样变成一次更新

再问自己(答案在笔记里)

大模型基础:架构与生成

75 道题

多头注意力有多少参数?

四个 $d_\text{model} \times d_\text{model}$ 矩阵,$4d^2$(不含 bias)。和头数无关——切头只是把同样的参数重新分组。

出处:多头注意力(MHA):从公式到实现

时间和显存复杂度是多少?

设 batch 大小为 B、模型宽度为 d。包含投影的时间复杂度是 $O(BTd^2+BT^2d)$;显式保存各头注意力矩阵需要 $O(BhT^2)$ 空间。FlashAttention 通过分块避免把完整注意力矩阵写入显存,但 dense attention 的二次计算量并没有因此消失,其他激活、KV 和参数也仍占空间。

出处:多头注意力(MHA):从公式到实现

Q 和 K 为什么用两个不同的矩阵,不能共享?

可以共享,但会限制匹配函数。在本节没有额外位置变换的 self-attention 中,若 Q=K,原始分数 $QQ^\top$ 对称;逐行 softmax 的分母不同,最终权重却不一定对称。分开的投影允许两个方向连原始分数都不同;不要把“分数对称”说成“注意力权重对称”。

$Q=K$ 也不会让注意力失效,看三种情况:所有 query 完全相同时,每行是均匀分布;query 两两正交且范数相同时,对角分数最大,但只有范数相对 softmax 温度足够大,注意力才接近单位矩阵;一般情况下,越像自己的位置分到越多权重,但不保证只看自己。

还要注意,这些内部坐标并不唯一。对任意可逆矩阵 $R$,令 $Q'=QR$、$K'=KR^{-\top}$,仍有 $Q'K'^\top=QK^\top$:换一套内部基,功能完全不变。所以孤立地解释 $W_Q$ 的某个元素通常没有意义,有意义的是整个投影实现的函数和它对输出的因果作用。

出处:多头注意力(MHA):从公式到实现

V 为什么不参与打分?

分开投影让匹配特征与传递的内容可以不同。例如匹配时更看重实体类型,读出时还要保留具体属性。Q/K/V 都来自输入,所以内容本来就会影响分数;不是让 V 参与打分就一定退化,而是标准结构选择了分开这两种计算角色。

出处:多头注意力(MHA):从公式到实现

多头会不会退化成一个头?

部分头可能冗余。Head pruning 的研究在一些模型和任务上删除了部分头,而性能变化不大。但不能推成任何模型都能直接删掉大部分头:剪哪些、是否微调(fine-tuning)、在哪些数据上验证,都影响结果。

出处:多头注意力(MHA):从公式到实现

mask 为什么要在 softmax 之前加?填 0 行不行?

给禁止位置的 logit 加 0 不会屏蔽它;把 logit 设成 0 也仍有 $e^0=1$ 的未归一化权重。softmax 前设成 $-\infty$ 才把它从分母里去掉。softmax 后置零再重新归一化,在非空有效支持集上数学等价,但仅置零不等价,数值稳定性也更难处理。

出处:多头注意力(MHA):从公式到实现

残差连接解决了什么问题?

它让深层网络更容易学习相对输入的修正,并给 Jacobian 加上恒等项。总梯度仍可能发生抵消或放大,不能把一条通路的存在说成无条件稳定。

区分优化和过拟合(overfitting)时,先看训练误差,再看验证误差。训练误差变高,不能仅用“模型更大所以过拟合”解释。

出处:残差连接

为什么是相加不是拼接?

拼接(如 DenseNet)也能保留信息,但会增加后续层的输入宽度,需要管理参数和显存。相加保持当前宽度,便于堆叠;它不意味着能无限加深,也不要求各层参数量完全相同。

另外相加让「什么都不做」成为一个可达的解($f=0$ 即恒等),拼接则需要后续层专门学出「忽略新拼进来的部分」。

出处:残差连接

$x + f(x)$ 中 $f$ 的输出方差会怎样?

先对一个坐标写完整:

$$\operatorname{Var}(x+f)=\operatorname{Var}(x)+\operatorname{Var}(f)+2\operatorname{Cov}(x,f).$$

只有协方差可忽略、各层更新方差相近时,才近似随深度线性增长。若 $f=-x$,输出方差反而为 0。分支缩放可以控制每层增量;final norm 只控制末端送入输出头的尺度,不能把中间传播问题都修好。

检查实际激活和梯度分布,再决定初始化、残差缩放或归一化方案。

出处:残差连接

Pre-Norm 和 Post-Norm 怎么取舍?

Pre-norm 通常更容易优化深层网络,因为 Norm 位于分支而非主 skip 上;它仍需要合适的学习率、初始化和训练预算。

Post-norm 逐层归一化(layer normalization)残差输出,训练条件和表示行为不同。质量结论要在可比预算下测,不能直接排出所有模型通用的优劣顺序。梯度路径的推导见归一化。

出处:残差连接

Dropout 加在哪一步?为什么不能加在残差流上?

加在分支输出上:$x + \text{Dropout}(f(x))$。

若对 skip 的 $x$ 做 dropout,直接路径就变成随机掩码,不再是 $I$。这里解释的是为何标准残差分支这样放,不是证明任何其他 dropout 设计都无效。

另外,embedding dropout、attention dropout 和 residual dropout 不是同一个位置,核对配置时要分开。

出处:残差连接

残差和 LSTM 的 cell state 有什么关系?

两者都提供加法通路。LSTM 的 $c_t = f_t \odot c_{t-1} + i_t \odot \tilde c_t$ 在固定门值时,沿 cell state 的直接导数是 forget gate;它接近 1 时有利于跨时间传播。总导数仍包含门对历史的依赖。

所以可以类比时间与深度上的传播,但不能说两种结构完全等价。

出处:残差连接

temperature 是作用在 logits 上还是概率上?为什么?

logits 上,在 softmax 之前:$p_i = \text{softmax}(z_i/T)$。

若已有原始 softmax 概率,$p_i^{1/T}/\sum_j p_j^{1/T}$ 与 $\operatorname{softmax}(z/T)$ 数学上等价,因为公共归一化因子会抵消。实现时通常保留 logits 来避免概率下溢。给所有概率乘同一个系数再归一化,则不会改变分布。

出处:解码策略:temperature、top-k、top-p

top-k 和 top-p 的区别?候选数怎样变化?

top-k 固定保留 $k$ 个候选(candidate);top-p 保留累积概率刚好达到 $p$ 的最小集合。

区别在于候选池是否随分布形状变化。分布陡时,top-p 可以只留少数候选;分布平时则可能留很多。这个适应性不等于质量保证:模型也可能很自信地给错 token 高分。

出处:解码策略:temperature、top-k、top-p

为什么 beam search 的分数更高,回答却未必更好?

模型似然不等于任务质量,开放生成中尤其要检查重复与多样性(diversity)。Beam search 是有限宽度的近似搜索,不是全局最优算法;翻译和摘要也有多个合理答案。应与采样、重排或验证方案在同一预算下比较。

出处:解码策略:temperature、top-k、top-p

temperature=0 和 greedy 是一回事吗?

最大 logit 唯一时,$T \to 0^+$ 的概率集中到该 token;并列最大时,极限仍会在它们之间分配概率,而 greedy 通常用固定规则打破平局。

具体配置要看接口:有的用 temperature=0 表示 greedy,有的要求关闭采样,不能在公式里直接除零。Greedy 对固定 logits 和固定平局规则是确定的;不同 kernel 或批处理方式若改变了 logits,接近的候选仍可能换序。

出处:解码策略:temperature、top-k、top-p

temperature、top-k、top-p 谁先作用?顺序会影响结果吗?

本文选择 temperature → top-k → top-p;具体框架的顺序需要核对。不能把任意两个步骤互换后仍当作同一配置。

正温度不改变 top-k 的候选集合:它不改变排序;并列时仍需使用相同的取舍规则。

对 top-p 有影响:top-p 看的是累积概率,温度改变了各 token 的相对占比,累积到 $p$ 所需的 token 数就变了。实测同样 top_p=0.9,$T=0.7$ 时温度在前得到 4 个候选、在后得到 5 个;$T=1.5$ 时是 6 对 5。$T=1$ 时两者相等——所以只在默认温度下测试是发现不了的。

出处:解码策略:temperature、top-k、top-p

频率惩罚和存在惩罚有什么区别?

都作用在 logits 上:$z_i \leftarrow z_i - \alpha_p\mathbb{1}[c_i>0] - \alpha_f c_i$。

系数为正时,存在惩罚只看「出现过没有」,出现 1 次和 10 次扣得一样多;频率惩罚按次数累计,出现越多扣得越多。它们调整的是 token 的相对概率,不保证减少语义上的重复,也不保证换话题。

两者都会误伤本该重复的 token——标点、代词、代码缩进和括号、正文里反复出现的人名。调大了输出会变别扭,代码生成尤其容易被搞坏。

出处:解码策略:temperature、top-k、top-p

RL 训练做 rollout 时,采样参数该怎么设?

先确认实际 rollout 分布 $\mu$。未变换的旧策略采样是容易核对的基线(baseline);其他采样配置也可以是有意设计,但要明确目标策略、记录的概率和校正方式。

普通 PPO 的分母来自收集这批数据的旧策略,不是当前更新中的策略。若数据来自 $\mu$,却直接当作未变换的旧策略样本,估计量就改变了。还要检查支持集:$\mu$ 为零的动作无法从这批样本中恢复(离线估计里的同一个问题见 OPE 估计量)。

出处:解码策略:temperature、top-k、top-p

总参数和激活参数分别由什么决定?Mixtral 8x7B 为什么不是 56B?

固定 expert 大小时,总 expert 参数随 N 增长,每个 token 的主要 expert 计算随 k 增长;router 仍需为 N 个 experts 打分。Mixtral 8x7B 复制的是 FFN,不是 8 个完整模型,因此总参数为 46.7B、每 token 激活 12.9B,而不是直接算 8×7B。

出处:MoE:复习题

Router 怎么算门控权重?top-k 选择不可导,router 怎么学?

常见 router 用线性层打分,再按 top-k 选择。Mixtral 在选中集合里归一化;Switch 的 top-1 则保留全体 softmax 中的概率,不把唯一门值改成 1。普通 autograd 不对离散索引求导,任务梯度通过连续门值回传。未选中的 expert 参数没有该 token 的任务梯度,但对应 router logit 可能通过全体 softmax 或辅助目标得到梯度,两者要分开说。

出处:MoE:复习题

为什么需要负载均衡?Switch 的辅助 loss 为什么是 f_i 乘 P_i?

某个 expert 被选得多,就拿到更多 token、得到更多训练,可能越来越常被选,形成自我强化的不均衡,也可能让部分设备等待。Switch 的辅助 loss 是 $\alpha N \sum f_i P_i$:$f_i$ 是不可导的分配比例,$P_i$ 是可导的平均 router 概率。梯度通过 $P_i$ 回传;完全均匀时值为 $\alpha$,但这不是所有路由分布下的严格下界。

出处:MoE:复习题

Capacity factor 是什么?超出容量的 token 去哪了?

在 Switch 的 top-1 设定里,上限按 $\frac{\text{token 数}}{N}\times\text{CF}$ 设置,再按实现取整。它限制每个 expert 的容量,不保证每张卡实际耗时一样。溢出的 expert 分支可被跳过,但 token 仍沿残差传播;top-k 或 dropless 实现的处理方式可能不同,不能把一个 capacity 公式套到所有模型。

出处:MoE:复习题

DeepSeek-V3 的 auxiliary-loss-free 是怎么做的?真的完全没有 balance loss 吗?

Bias 只用于挑 top-k,门值仍来自原始 affinity;超载的 expert 降低 bias,负载偏低的提高。这个更新不靠辅助 loss 的梯度,但会改变选中集合,因而也可能改变输出与任务梯度。V3 仍保留很小的序列级 balance loss($\alpha=0.0001$),所以不是完全没有辅助目标。

出处:MoE:复习题

细粒度专家和共享专家各解决什么问题?

细粒度专家允许在相近的 expert 矩阵计算预算下,组合更多小专家;组合更多不保证分工更好,通信也未必不变。共享专家为所有 token 提供共同的计算路径,减少重复学习是设计目的,不是预先指定知识归属。DeepSeek-V3 两者都有;Qwen3-235B-A22B / 30B-A3B 没有 shared expert。

出处:MoE:复习题

MoE 省显存吗?部署时主要的代价是什么?

稀疏激活不会自动按 k/N 缩减模型权重存储。全部参数仍需存放在某处,常驻 GPU、跨卡分片(sharding)或 offload 都有不同代价。Expert parallelism 通常还要派发与回收 token;大 batch 可能用到很多专家。是否比某个 dense baseline 更省显存或更快,要说明质量、精度、batch 与部署方式。

出处:MoE:复习题

Looped Transformer 和 ALBERT 的参数共享有什么区别?

两者都共享参数。ALBERT 还结合 embedding 因式分解来压缩模型,不能把总参数变化全归于共享。Looped 模型的重点是共享同一组权重,同时可以调整执行深度;参数不变,不代表计算量、KV 或延迟不变,也不保证深度外推有效。

出处:Looped Transformer:复习题

循环给模型增加了什么,又没有增加什么?

增加共享参数上的计算深度,不新增外部事实,也不新增每圈独立的权重。能否利用好这些计算是实验问题。约 2 bit/parameter 是小规模模型上合成知识实验的结果,不是发布的 Ouro checkpoint 的容量测量或容量定理;“多圈一定更准”也不成立。

出处:Looped Transformer:复习题

Input injection 是什么?为什么需要?

每圈重新提供输入表示 $e$,如 Huginn 将 prelude 输出和当前状态送入 adapter。这样不必完全依赖循环状态保存输入。它是一种设计选择,不是所有循环模型稳定训练的必要或充分条件。

出处:Looped Transformer:复习题

自适应深度有哪些做法?Ouro 的 early exit 在公开代码里省计算吗?

ACT、PonderNet、退出 gate 和深度 router 采用不同目标。需要分清条件停止概率、实际退出概率、输出选择和实际跳过计算。自适应深度里的 3 步算例给出平均 2.2 步;Ouro 的 7ea635b 快照则先执行全部配置圈数再选择输出,不能把选择深度直接当计算量。

出处:Looped Transformer:复习题

Looped 模型的 KV cache 为什么会变大?能不能各圈共享?

各圈权重一样,收到的隐藏状态(hidden state)却不一样,所以完整缓存通常按(圈,层)区分。共享会改变计算,需要比较误差。不同论文的 checkpoint、prefill 规则和生成长度不完全相同;不能把协议差异当作严格复现失败。内存账与来源见代价与局限。

出处:Looped Transformer:复习题

Looping 和 chain-of-thought 是什么关系?

CoT 增加生成位置,looping 增加隐藏状态更新;两者能组合。带 KV cache 的逐 token 前向不重算全部前缀。模拟 CoT 的理论构造有额外结构与输入长度条件,不等于任意现成模型可以直接互换;可见文字也不保证解释忠实。

出处:Looped Transformer:复习题

再问自己(答案在笔记里)

想学透,而不只是过一遍:去知识板块动手玩

结构图:在模型家族之间变形 · Self-attention 一步一步算 · KV cache:解码每一步到底算了什么 · MHA → GQA → MQA → MLA 与显存计算器 · 谁能看到谁:sliding window、local:global 与 sink · RoPE:位置就是旋转 · MoE:按真实 expert 数量画的路由 · FlashAttention:attention 矩阵放在哪里

应用与系统

AI 系统与 Agent

13 道题

Workflow 和 agent 有什么区别?什么时候不该用 agent?

workflow 用事先写好的代码路径串起模型和工具;agent 让模型自己决定流程和工具。步骤能事先列出来、没有验证信号、或者做错一步代价很高(发送、付款、删除)时,都不该直接用 agent:先写成 workflow,或者在关键步骤加人工确认。

出处:Agents:复习题

一个 agent 由哪几部分组成?

模型(决定下一步)、工具(对外界动手)、循环(结果回到模型)、停止条件(做完或预算用完),再加上存放中间状态的上下文或记忆。ReAct 的「想一步、做一步」是这个循环最常见的形式。

出处:Agents:复习题

为什么写代码是 agent 最成熟的场景之一?

因为验证信号最强:代码能跑,测试能过,每一步都有客观反馈,agent 可以在沙箱里多试,通过后仍要人看 diff。相比之下,客服、个人助理这类场景很难自动判断对错,更依赖规则、权限和人工。即使在写代码的场景,测试通过也不等于改对了。

出处:Agents:复习题

怎么评估一个客服 agent 的可靠性?

不能只看单次成功率,要看同一个任务独立重复多次是否全都做对,比如 τ-bench 的 pass^k(k 次全部成功的概率)。还要检查是否遵守政策、工具调用是否正确、复杂情况有没有转人工,并看完整的运行轨迹而不只是最终回答。

出处:Agents:复习题

什么时候用 frontier API,什么时候自己 serve 开源模型?

先看能力:在自己的评估集上开源模型不达标,就用 frontier。数据有严格边界时,先核对 API 的地域、保留策略、合同和私有连接能否满足,满足不了再考虑自部署。流量大且稳定、已有闲置算力或需要深度定制时,自部署可能更划算、更可控,但要把闲置容量、运维和维护时间一起算;没有通用的流量界线。量小或不确定时,先用 API 把质量和成本测出来。实际上常常混用:路由、级联、蒸馏、兜底。

出处:Agents:复习题

为什么单步准确率上的小差距,在 agent 里会被放大?

若各步独立、任何一步出错都无法恢复,错误会沿步骤累积:每步 95% 做对,20 步全对只有约 36%;每步 99% 做对,约 82%。真实任务里错误会相关,也可能重试或恢复,所以这道乘法只是提醒:要做端到端评估,并记录失败发生在哪一步。

出处:Agents:复习题

什么是 reward hacking?举两个例子。

模型优化的是你实际给的奖励,而不是你心里想要的目标,两者一有偏差,它就会钻空子。OpenAI 的划船游戏里,奖励是沿途的道具,agent 就原地转圈刷道具,比跑完比赛得分还高。LLM 里也一样:拿「测试通过」当奖励,agent 可能去改测试;RLHF 里奖励模型偏爱长回答或附和用户,策略模型就会学着写得更长、更会讨好。

出处:Agents:复习题

级联和路由都是在小模型和 frontier 模型之间分配请求,区别在哪?

级联让小模型先答,看了答案再决定要不要升级,所以判断更准,但被升级的请求要付两次钱,还要串着等两个模型。路由在看到答案之前就决定派给谁,每条请求只调用一次模型(另加路由开销)、延迟更低,但可能派错;派错后要靠输出检查或兜底补救,这部分成本和延迟也要算进去。两种方案都只有在难度判断足够准的时候才划算。

出处:Agents:复习题

再问自己(答案在笔记里)

还想被追问得更细?

本页术语 15
奖励 reward
RL 里指导策略更新的标量信号
方差 variance
估计量的波动幅度;重要性加权最容易在这里爆炸
反馈闭环 feedback loop
模型的输出改变下一轮训练数据,偏差因此自我放大
校准 calibration
模型给出的置信度是否等于真实正确率
蒸馏 distillation
用一个模型的输出训练另一个通常更小的模型
微调 fine-tuning
在预训练权重上继续训练以适配具体任务
过拟合 overfitting
训练集越来越好,没见过的数据反而变差
层归一化 layer normalization
沿特征维做归一化,稳定训练
候选 candidate
召回阶段捞出来、等待精排挑选的内容
多样性 diversity
结果之间在主题、来源或其他指定维度上有多大差异
基线 baseline
用来比较新方法的参考方法或配置
分片 sharding
把参数、梯度或优化器状态切开分给多张卡,每张只存其中一份
隐藏状态 hidden state
递归模型在时间步之间传递的压缩表示
多头注意力 multi-head attention
把注意力拆成若干组并行计算再拼回来
残差连接 residual connection
x + f(x),让梯度有一条不经过 f 的通路