Applied Scientist · Phone Screen ML Coding

Amazon AS ML Coding:Dropout 为什么除以保留概率?

实现训练和推理分支、复用mask的反向传播,证明期望保持并说明MC Dropout的适用边界。

题目重点:实现训练和推理分支、复用mask的反向传播,证明期望保持并说明MC Dropout的适用边界。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • 训练是逐元素独立mask,p表示丢弃概率,q=1-p是保留概率;代码要求0≤p<1。
  • 普通推理为identity,MC Dropout是刻意开启随机分支进行多次预测的另一个评测协议。
  • 示例一维输入与显式backward,不保证符合任意框架batch/channel dropout语义;题目没有指定库。

解题路线

  1. 独立mask M_i~Bernoulli(q),inverted dropout输出Y_i=X_i·M_i/q。因此E[Y_i|X_i]=X_i,训练时除q而普通推理不用再缩放。
  2. 有另一等价尺度约定:训练不除q、推理乘q;不可混用两种,否则期望失配。原始Dropout论文讨论推理权重缩放,本文使用现代常见的inverted训练约定并独立给推导。
  3. 反向复用本次forward的同一mask:dL/dX_i=(dL/dY_i)·M_i/q。backward重新抽mask会计算另一个随机函数的梯度,不能代表这一前向样本。
  4. 边界p=0直接identity;p=1会除零,训练示例拒绝,若正式API允许全丢需另定义全0和梯度0。推理分支不抽随机数,重复调用应完全相同。
  5. 保持单层输入的期望不保证整个非线性网络输出等于完整模型,E[f(Y)]一般不等于f(E[Y])。随机mask增加噪声,p大时方差更大且可能影响优化。
  6. MC Dropout多次随机推理汇总均值与离散度,可在特定模型与训练条件下近似表征模型不确定性,参见Gal/Ghahramani论文。样本方差不是自动校准的错误概率,也不能保证识别所有分布外样本;用独立数据校准并与其他方法比较。
  7. MC模式只开启Dropout,不应顺便让BatchNorm等层更新统计;生成推理延迟和采样预算要报告。seed用于复现,训练每次随机mask仍须允许变化。

手动走一遍

训练X=4,p=0.5,mask为0时输出0,为1时输出8,各半概率平均4;上游梯度3对应输入梯度0或6。若训练忘除0.5,期望只剩2;若普通推理再乘0.5,则再次错误缩小。

Python 参考实现

下面的代码按上文假设实现,适合本地运行并追加自己的测试用例。

代码区可横向滚动;使用键盘时,先聚焦代码区再按方向键查看。

import random


def dropout_forward(values,p=0.5,training=True,draw=None):
    """Elementwise inverted dropout; returns output and backward context."""
    if not 0 <= p < 1:
        raise ValueError("p must be in [0,1)")
    if not training or p==0:
        return list(values),([True]*len(values),1.0)
    draw=draw or random.random
    mask=[draw() >= p for _ in values]
    scale=1/(1-p)
    return [value*scale if keep else 0.0 for value,keep in zip(values,mask)],(mask,scale)


def dropout_backward(upstream,context):
    mask,scale=context
    if len(upstream)!=len(mask):raise ValueError("shape mismatch")
    return [grad*scale if keep else 0.0 for grad,keep in zip(upstream,mask)]

复杂度

n元素forward/backward O(n)时间,mask及输出O(n)空间;MC T次预测约T倍推理成本,可用在线均值/方差降低汇总存储但不能省网络运行。

易错点与追问

容易失分的边界

  • p与q含义混淆。
  • 训练已除q,推理又乘q。
  • backward重抽mask。
  • 期望保持被当整个模型输出完全相等。
  • MC样本方差当保证校准的置信度。

继续深挖

  • channel-wise与token-wise mask有什么不同?
  • 为什么p增大会提高激活方差?
  • RNN共享mask与逐时间步mask应怎样定义?

技术参考

✓已复制微信号!