Dropout 相当于是一个正则项,只在训练时使用,即在层之间加入噪声,增加模型的鲁棒性。
因此,推理过程中,Dropout直接返回输入本身。
【补充知识点】:
正则化(regularization)的核心定义只有一句话:
任何显式地牺牲训练误差、换取模型复杂度下降的操作或约束,都叫正则化。
把这句话拆成三个关键词:
显式——它必须是人为“加进去”的,而不是模型本来就有的;
牺牲训练误差——如果不付出代价,就不叫正则化;
换取复杂度下降——最终目的是降低泛化误差(测试误差)。
常用的正则化方法 |
牺牲代价(训练误差↑) |
换取的复杂度下降 |
L2 权重衰减(Weight Decay) |
额外惩罚项 λ‖w‖² 拉高损失 |
权重变小 → 函数更平滑,VC 维↓ |
L1 权重衰减(Lasso) |
额外惩罚项 λ‖w‖₁ 拉高损失 |
权重稀疏 → 特征选择,有效参数量↓ |
Dropout |
训练时随机屏蔽神经元/权重,网络更难拟合 |
抑制共适应 → 网络更鲁棒,等效集成大量子网络 |
Early Stopping |
提前终止训练,训练误差未降至最低 |
迭代次数↓ → 有效容量↓ |
训练时把 p概率 的神经元置 0,相当于把剩余神经元的“总输出强度”缩小了 (1−p) 倍;
除以 (1−p) 是把强度再拉回原来的期望值,这样推理阶段无需任何缩放就能得到一致的输出。
例如,自主实现的dropout函数中,结果如下:
在 Dropout 技术中,训练时以概率 p 随机保留神经元(丢弃概率为 1−p)。
除以保留概率 p 的核心原理是:
保持该层输出的期望值(均值)在训练和测试时一致。
若不进行缩放,训练时输出的期望值仅为原始值的 p 倍,而测试时为原始值,会导致网络行为不一致。
缩放操作确保了训练和测试时输出的期望值相同,提升模型泛化能力。
假设某层有 4 个神经元,输出值为 [2,4,6,8],保留概率 p=0.5(即丢弃概率 1−p=0.5)。
生成掩码: 以 50% 概率保留每个神经元。例如掩码为 [1,0,1,0](意思是:保留第 1、3 个,丢弃第 2、4 个)。
应用 Dropout(未缩放): 输出变为 [2×1,4×0,6×1,8×0]=[2,0,6,0]。 期望值 = (2+0+6+0)/4=2而原始期望值为 (2+4+6+8)/4=5。
缩放(除以 p=0.5):缩放后输出 = [2/0.5,0,6/0.5,0]=[4,0,12,0]。 期望值 = (4+0+12+0)/4=4(与原始期望值 5 仍有偏差,因单次采样有随机性)。
多次采样验证期望值: 重复多次实验,缩放后的平均输出趋近原始值:
实验1:掩码 [1,0,1,0] → [4,0,12,0] → 均值 = 4
实验2:掩码 [0,1,0,1] → [0,8,0,16] → 均值 = 6
实验3:掩码 [1,1,0,0] → [4,8,0,0] → 均值 = 3
平均期望 = (4+6+3)/3≈4.33 → 接近原始均值 5(采样越多越接近)。