你实现了一个点积注意力:score(q,k)=q·k,直接 softmax 后对 v 加权。q、k 的维度 d=64。训练时发现初期 softmax 输出几乎是 one-hot(某个位置权重接近 1),loss 几乎不降。请说明这个现象的原因,给出修法并写出修正后的完整公式;再说明如果 d=8,这个现象还明显吗,为什么。
面试官在考什么
判断候选人是否理解缩放点积注意力里 sqrt(d_k) 到底在解决什么问题,而不是只记得公式里有这一项。
回答框架 · 前两步
- 原因:d 变大时点积 q·k 的数值尺度随 d 增大(各分量独立同分布且均值 0 方差 1 时 Var(q·k)=d),logits 范围过大。
- logits 过大会让 softmax 进入饱和区,输出接近 one-hot,softmax 对 logits 的梯度中含 p_i(1-p_i) 这类因子,p 接近 0 或 1 时梯度趋近 0,训练几乎不动。
还有 3 条答案要点、 3 层追问、 5 个常见坑, 以及针对你简历的追问路径,在定制报告里。
延伸阅读
想看这个方向的整体准备路线? 进入「深度学习基础」方向页
同一能力域的其他题
- 手写版:请推导一下自注意力的计算过程,并说明为什么要除以 sqrt(d_k)?如果不除会出什么问题?
- 你用单层 LSTM(hidden=128)做一个长度 512 的序列分类任务,只取最后一个时间步的 h 接一层线性分类头。训练集 loss 能降到 0.05,验证集 loss 停在 0.6 左右;更奇怪的是,你把验证集里每条样本的时间步随机打乱后再测,指标几乎不变。请给出你的根因判断、一个能证伪它的实验,以及你接下来会怎么改。
- 场景:线上实时风控,每条请求是一条长度 300 的行为序列(每步 64 维),要求单条推理 P99 < 20ms,只能部署一张 T4,线上 batch=1(请求串行到达但必须低延迟)。候选方案:(A) 2 层 LSTM,hidden=256;(B) 2 层 GRU,hidden=256;(C) 因果膨胀卷积(dilation=1,2,4,...,128,kernel=3,约 8 层)。请给出你的选型,并估算 A/B 在这个延迟预算下能不能达标、为什么。如果实际必须用 RNN,你会怎么改?
- 某实时风控场景,用户行为序列平均长度 2000,QPS 1000,要求单次推理 P99 ≤ 50ms(单卡 T4)。当前用 2 层 LSTM,hidden=256,延迟 120ms,且长序列尾部信息衰减明显。团队有人提议直接换 Transformer,但 GPU 预算只允许推理成本增加 20%。作为技术负责人,你如何做技术决策?请给出你对 RNN/LSTM/GRU 能力边界的判断、可能的中间方案、以及如何验证和推动落地。
- 单层 LSTM,输入维度 64,隐层维度 128,batch=32、序列长度 50。请算出这一层 LSTM 有多少个可学习参数(含 bias,写出计算式);如果把同样的输入维度、隐层维度换成单层 GRU,参数量是多少?并说明这个比例从两者的门结构上看是怎么来的,LSTM 每个门各控制什么。
- 在 d_k=512 的点积注意力里,假设 q 和 k 的每一维近似独立、均值 0 方差 1。请估算 q·k 的量级,说明为什么必须除以 sqrt(d_k),以及如果不除,在 fp16 训练时会具体出现什么现象。另外,如果你把 padding 位置的 score 设成 -1e9 而不是 -inf,可能踩什么坑?