#020. 综合案例题:把数学链路从输入推到结论
#学习目标与概念起点
学习目标
这一章练的是“把题目给出的输入对象,一步步翻译成数学对象,再推到可解释结论”。读完后,你应该能把 LLM 的 token 训练题和量化的风险回测题讲成完整链路,而不是只报一个公式。
概念起点
综合题通常不是考一个孤立定义,而是考对象之间的连接:分数如何变概率,概率如何变 loss,loss 如何给梯度;收益样本如何变均值、方差、协方差,风险指标如何影响上线判断。
面试里遇到综合题,先不要急着背公式。先说“我会从输入、对象、公式、计算、解释、边界六步走”。这句话能把你的回答从碎片知识变成可复核的推理过程。
#综合案例 1:LLM 训练链路
一个语言模型在某个位置需要预测下一个 token。词表只考虑 3 个候选 token:A、B、C。模型输出 logits 为 \(z=(2,1,0)\),真实 token 是 B。请从 logits 开始,计算 softmax 概率、NLL/CE loss、logits 梯度,并解释一次梯度下降会如何改变模型行为。
第一步:明确输入对象。logits \(z=(2,1,0)\) 是模型给 A、B、C 的未归一化分数。它们不是概率,可以为负,也不需要加起来等于 1。真实 token 是 B,所以标签 one-hot 向量是 \(y=(0,1,0)\)。
第二步:把 logits 变成概率。softmax 的作用是先指数化,再除以指数和:
这里 \(e^2\approx7.389\),\(e^1\approx2.718\),\(e^0=1\),指数和为 \(7.389+2.718+1=11.107\)。因此:
这说明模型当前最相信 A,给真实答案 B 的概率只有约 \(24.5\%\)。综合题里要把这个数读出来:不是“loss 大小”本身有意义,而是它反映真实 token 被模型压得不够高。
第三步:计算 NLL/CE。单个样本的负对数似然只看真实 token 的概率:
如果写成交叉熵形式,因为 \(y=(0,1,0)\),只有 B 那一项保留下来:
所以在 one-hot 监督训练里,NLL 和 CE 对单个 token 是同一个量。它惩罚的是“真实 token 概率太低”。
第四步:从 loss 推到 logits 梯度。softmax 加交叉熵有一个重要简化:
代入本题:
注意梯度的符号要结合“梯度下降”看。参数更新是沿负梯度方向走,所以 A 的 logit 会被压低,B 的 logit 会被推高,C 的 logit 也会略微压低。B 的梯度幅度最大,因为模型对真实 token 的概率严重不足。
第五步:解释一次训练更新。如果只在 logit 层做一个学习率为 \(\eta=0.1\) 的示意更新:
更新后 A 和 B 的差距从 \(2-1=1\) 缩小到约 \(1.9335-1.0755=0.858\)。因此下一次 softmax 会给 B 更高概率。真实模型里我们不是直接优化 logits,而是通过反向传播更新产生这些 logits 的参数;但方向解释完全一致。
logits 是模型偏好,softmax 是概率化,CE/NLL 是对真实 token 概率的惩罚,梯度 \(q-y\) 是“当前预测概率减去目标概率”。面试中要能说出:预测过高的错误类被往下推,真实类被往上推,推的幅度由概率误差决定。
#LLM 延伸:KL、temperature 与 attention
沿用上题 logits \(z=(2,1,0)\)。分别用 \(T=1\)、\(T=2\)、\(T=0.5\) 做 softmax,解释采样行为会怎么变。
temperature 不是直接改概率,而是先改 logits 的尺度:
\(T=1\) 时,上题已经得到 \(q\approx(0.665,0.245,0.090)\)。当 \(T=2\) 时,logits 变成 \((1,0.5,0)\),分数差距变小:
分布更平,低分 token 更有机会被采到。若 \(T=0.5\),logits 变成 \((4,2,0)\),分数差距变大:
分布更尖,模型更倾向选最高 logit 的 token。边界是:temperature 改的是采样分布的随机性,不会凭空让模型知道更多事实;温度太高会胡乱采样,太低会重复和保守。
某 RLHF 或偏好优化阶段,reference 模型在 A、B、C 上的分布为 \(p=(0.6,0.3,0.1)\),当前模型分布为 \(q=(0.8,0.15,0.05)\)。计算 \(D_{KL}(q\|p)\),并解释为什么它可以限制模型偏离 reference。
这里选择 \(D_{KL}(q\|p)\),意思是在当前模型 \(q\) 认为常见的 token 上,惩罚它和 reference \(p\) 的比例差异:
代入数值:
这个值不是普通距离,因为换成 \(D_{KL}(p\|q)\) 会得到不同结果。它的训练含义是:如果当前模型为了追求奖励,把概率质量过度挪到某些 token 上,KL 项会增加,从而给优化一个“别离原模型太远”的刹车。
KL 小不等于输出一定好,只说明两个分布在指定方向下接近。KL 约束能减少 reward hacking 和语言分布崩坏,但它不能替代高质量偏好数据和真实任务评估。
query \(q=(1,1,1,1)\),两个 key 为 \(k_1=(1,1,1,1)\)、\(k_2=(1,-1,1,-1)\),value 为 \(v_1=(10,0)\)、\(v_2=(0,10)\)。计算缩放 attention 输出,并解释为什么要除以 \(\sqrt d\)。
attention 的输入对象是 query、key、value。query 表示当前位置在找什么,key 表示历史位置能被匹配的特征,value 表示被取回的信息。
先做内积相似度:
维度 \(d=4\),缩放因子 \(\sqrt d=2\),所以 attention logits 是 \((2,0)\)。softmax 后:
最后用权重加权 value:
如果不缩放,logits 是 \((4,0)\),softmax 约为 \((0.982,0.018)\),几乎只看第一个 value。除以 \(\sqrt d\) 的直觉是:维度变大时,随机向量内积的尺度也会变大,softmax 更容易饱和,梯度更容易变小。缩放不是改变相似度排序,而是控制数值尺度。
#综合案例 2:Quant 风险链路
你有两个资产 A、B 的 5 天日收益样本:
| 日期 | A 收益 | B 收益 |
|---|---|---|
| 1 | \(0.01\) | \(0.00\) |
| 2 | \(-0.02\) | \(-0.01\) |
| 3 | \(0.03\) | \(0.02\) |
| 4 | \(0.00\) | \(0.01\) |
| 5 | \(0.02\) | \(0.00\) |
组合权重为 \(w=(0.6,0.4)^T\)。请从收益样本出发,计算均值、样本方差、协方差、组合期望收益、组合方差,并解释风险来自哪里。
第一步:明确输入对象。每一行是一天,每一列是一个资产。收益 \(R_A,R_B\) 是随机变量的历史样本。权重 \(w=(0.6,0.4)^T\) 表示 60% 资金放 A,40% 放 B。
第二步:计算样本均值。均值估计的是平均日收益:
组合日均收益是权重加权平均:
注意这只是样本平均,不是保证每天赚 \(0.64\%\)。样本越短,估计误差越大。
第三步:计算偏离均值的样本。方差和协方差看的是收益相对均值的共同波动。A 的偏离为:
B 的偏离为:
第四步:计算样本方差和协方差。样本方差通常除以 \(n-1\),因为我们用样本均值替代了真实均值:
协方差是两个偏离量逐日相乘再平均:
因此协方差矩阵为:
第五步:计算组合方差。组合收益是 \(R_p=0.6R_A+0.4R_B\)。方差展开后自然出现协方差:
组合日波动率是标准差:
所以这个组合的样本日均收益约 \(0.64\%\),日波动约 \(1.52\%\)。如果只看两个资产各自波动,会漏掉协方差项 \(0.0000768\)。这里 A 和 B 同涨同跌的共同波动会抬高组合风险。
量化风险题的主线是:历史收益样本给出均值和协方差估计;权重把资产收益合成组合收益;组合风险是 \(w^T\Sigma w\);风险控制的核心不是“资产多不多”,而是权重和共同波动如何叠加。
#Quant 延伸:VaR、CVaR、回测与成本
沿用上题权重,先逐日计算组合收益,再估计 80% 历史 VaR 和 CVaR。为了演示,用损失 \(L=-R_p\) 表示亏损。
逐日组合收益为:
对应损失为:
从小到大排序:
80% VaR 是损失分布的 80% 分位数。5 个样本很少,经验估计会很粗。按排序取第 \(\lceil0.8\cdot5\rceil=4\) 个样本,得到:
这个结果看起来反直觉,因为 80% 分位数仍然是负损失,也就是盈利。原因不是公式错了,而是样本太少、亏损天数太少,历史分位数估计不稳定。若看最坏 20% 的平均损失,也就是超过该阈值的尾部,只有最大损失 \(0.016\):
因此本例真正能说明的是边界:VaR/CVaR 的历史估计高度依赖样本量。5 天样本只能演示计算流程,不能作为实盘风险结论。
VaR 问“坏到某个置信水平时,亏损门槛在哪里”;CVaR 问“进入尾部以后,平均亏多少”。只报 VaR 容易忽略门槛之后的严重程度。
某策略 252 天回测日均收益 \(0.0008\),日波动 \(0.012\)。上线后预计双边成本、滑点和冲击成本合计会吃掉日均 \(0.0003\)。请判断这个策略是否足够强,并说明还缺哪些证据。
第一步:先看成本前。日 Sharpe 是均值除以波动:
粗略年化 Sharpe 用 \(\sqrt{252}\) 放大:
成本前看起来还可以,但这不是上线结论,因为可交易收益必须扣成本。
第二步:扣掉成本。成本后日均收益为:
成本后年化 Sharpe 约为:
第三步:看统计显著性。如果日收益近似独立同分布,均值的 t-stat 可粗略写成:
这里 \(n=252\),所以成本后:
这个数很弱,远不足以说明均值稳定为正。还要注意,Sharpe 年化和 t-stat 在一年日频样本下数值形式接近,但它们回答的问题不同:Sharpe 描述风险调整收益,t-stat 描述均值估计离 0 有多远。
第四步:补上线边界。不能只说“Sharpe 大于某个数就上线”。还要检查:样本外表现、参数调优次数、多重检验、换仓频率、容量、成交约束、延迟、极端行情、空头限制、融资成本和停牌等执行细节。成本后 Sharpe 从 1.06 掉到 0.66,说明策略 edge 很容易被实现摩擦吃掉。
| 步骤 | 要算什么 | 要解释什么 | 边界 |
|---|---|---|---|
| 收益样本 | \(R_A,R_B,\ldots\) | 样本是随机变量的历史观测,不是真实分布本身。 | 样本短、非平稳、幸存者偏差。 |
| 均值方差 | \(\bar R,s^2,\Sigma\) | 均值估收益,方差估波动,协方差估共同波动。 | 估计误差通常很大,均值尤其不稳。 |
| 组合风险 | \(w^T\Sigma w\) | 权重和协方差共同决定组合波动。 | 相关性在压力期可能上升。 |
| 尾部风险 | \(VaR,CVaR\) | VaR 看分位门槛,CVaR 看尾部平均严重程度。 | 厚尾、小样本和流动性会破坏历史估计。 |
| 上线判断 | 成本后 Sharpe、t-stat | 收益是否大到能覆盖噪声和交易摩擦。 | 数据泄漏、多重检验、容量和执行成本。 |
#常见误区
误区 1:把 logits 当概率
logits 只是相对分数。必须经过 softmax 才能解释为概率。直接说“logit 为 2,所以概率是 2”是对象层面的错误。
误区 2:只背 \(q-y\)
\(q-y\) 是 softmax 加 one-hot CE 的结果,不是任何 loss 都长这样。面试中要说明 \(q\) 是预测概率,\(y\) 是目标分布,梯度表达的是概率误差。
误区 3:KL 当普通距离
KL 非对称,方向决定含义。说 KL regularization 时,要明确是 \(D_{KL}(q\|p)\) 还是 \(D_{KL}(p\|q)\),以及在哪个分布上取期望。
误区 4:忽略协方差
组合风险不是各资产风险的简单平均。只要资产共同波动明显,协方差项就会显著改变组合方差。
误区 5:把 VaR 当最大亏损
VaR 是分位数,不是最坏情况。超过 VaR 后亏多少,要看 CVaR、压力测试和流动性情境。
误区 6:成本前回测直接上线
量化策略的可交易性取决于成本后收益。高换手、小容量、延迟和滑点会把纸面 alpha 吃掉。
#面试表达模板
| 被追问 | 不要只回答 | 更完整的回答 |
|---|---|---|
| softmax 为什么接 CE? | “因为分类都这么做。” | softmax 把 logits 变成分布,CE 最大化真实 token 的概率,梯度 \(q-y\) 直接给出概率误差方向。 |
| temperature 有什么用? | “让输出更随机。” | 它缩放 logits,改变分布熵;高温更探索,低温更确定,但不修正模型本身的知识错误。 |
| 协方差为什么重要? | “因为资产相关。” | 组合方差展开里有 \(2w_iw_j\sigma_{ij}\),共同波动会直接增加或减少组合风险。 |
| VaR 够不够? | “够,因为是 95% 风险。” | VaR 是分位阈值,不描述阈值之后的平均损失;还要看 CVaR、压力测试和流动性。 |
| 回测 Sharpe 能否上线? | “Sharpe 高就可以。” | 要看成本后、样本外、t-stat、多重检验、容量、换手和执行延迟。上线是统计证据加工程可行性的判断。 |
#最后检查清单
- 能否先说清楚输入对象:logits、标签、收益样本、权重、成本、样本长度分别是什么?
- 能否手算一个三分类 softmax,并解释指数化、归一化和概率和为 1?
- 能否解释 one-hot CE/NLL 为什么只看真实 token 的负 log 概率?
- 能否从 \(\partial L/\partial z=q-y\) 说出哪个 logit 被推高、哪个被压低,以及为什么?
- 能否说明 temperature 是缩放 logits,不是提升模型能力?
- 能否从 query、key、value 走到 attention 权重和 value 加权和,并解释 \(\sqrt d\) 缩放?
- 能否从收益样本算出均值、样本方差、协方差,并写出协方差矩阵?
- 能否把组合方差 \(w^T\Sigma w\) 展开成方差项和协方差项,并解释共同波动的影响?
- 能否区分 VaR 的分位阈值和 CVaR 的尾部平均损失?
- 能否把回测判断落到成本后 Sharpe、t-stat、样本外、容量、滑点和多重检验,而不是只看一段漂亮曲线?
- 能否在每道综合题最后补一句边界:这个结论在哪些假设下成立,哪些现实因素会破坏它?