题目重点:从负对数概率到熵与perplexity,给零概率、连续密度及tokenizer比较边界。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 题目直接问surprisal的unit;本文先按离散事件概率定义,不把logarithm本身当单位。
- log底2为bits,底e为nats,底10常称hartleys/dits;必须说出底数和事件/条件上下文。
- 连续概率密度不是无量纲事件概率,直接套离散自信息会引入坐标/单位依赖,另作边界。
解题路线
- 事件x概率p(x),I(x)=−log_b p(x)。概率无量纲,所得信息量单位由底定义;p越小越惊讶。p=1时0,p=0事件如果实际出现代表模型给了零支持,surprisal趋于正无穷。
- 换底I_bits=I_nats/ln2,1nat≈1.442695bits。用同一分布比较只换底不改变样本排序,但数值和损失梯度的全局尺度变化;优化超参数也可能要相应调整。
- entropy是自信息在真实分布下的期望,cross entropy使用模型q给出的−log q(x)在真实p下平均;单次surprisal、平均NLL与KL不是同一个量。KL是H(p,q)−H(p),不是某一条样本loss本身。
- 语言模型token条件surprisal=−log p(x_t|x_<t),整段联合NLL按链式分解求和;平均每tokenNLL带分母。perplexity若用nats为exp(平均NLL),用bits为2^(平均NLL),不能把bits直接送exp。
- 数值计算用log-softmax/稳定概率路径,模型极小概率直接exp再取log可能underflow;若人工clip epsilon应说明这改变目标,不能把有限clip loss当原模型真实surprisal。
- 不同tokenizer改变事件空间和token数,per-token NLL/PP不直接公平。可按同一编码的字节/字符信息率报告,并说明Unicode/文本规范化;连续密度自信息和differential entropy可负,与离散信息量性质不相同。MIT原始教学参考:https://ocw.mit.edu/courses/6-004-computation-structures-spring-2017/pages/c1/c1s1/。
手动走一遍
p=1/8时I=3bits=ln8≈2.079441542nats。两token条件概率1/2与1/4,联合概率1/8、总surprisal3bits,平均1.5bits/token,PP=2^1.5=√8≈2.828427;若错误exp(1.5)得到4.48,会混淆底数。
规模与取舍
已有log概率时计算每事件自信息O(1),序列汇总O(T);获得分布logits/softmax的代价由模型和词表决定。单位换算不是一次完整模型推理的复杂度。
易错点与追问
容易失分的边界
- 回答logarithm而不指定底数单位。
- NLL求和与每token平均混用。
- bits直接exp成PP。
- clip概率未说明目标改变。
- 连续密度当事件概率。
继续深挖
- cross entropy与KL如何区分?
- 改变tokenizer怎样公平比较?
- 零概率观测如何诊断模型?
- 为何连续密度的熵可能为负?
技术参考
- MIT OCW 自信息与单位:公开概念/交互合同参考,教学示例不代表题目项目。
