Dropout
训练时随机置零部分激活,减少神经元对固定组合的依赖。
学习目标
- p=0.5 的两种可能值与期望
- Dropout 会永久删除神经元吗?
- 说明:保持单元素期望不等于保持整网输出或保证验证效果提高。
为什么需要这个概念
Dropout 在训练模式以概率 p 将输入元素置零,并把保留值除以 1-p;评估模式则直接返回输入。这种反向缩放保持单个元素输出的期望不变。
学习前需要掌握
背景与问题
网络可能过度依赖少数隐藏特征的固定组合。Dropout 在训练中随机移除部分响应,让模型在不完整的特征组合下也必须产生预测。
概念定义
Dropout 在训练模式以概率 p 将输入元素置零,并把保留值除以 1-p;评估模式则直接返回输入。这种反向缩放保持单个元素输出的期望不变。
直观理解
每次训练临时遮住不同线索,避免模型只记住一种固定搭配;推理时让所有线索一起工作。
核心原理
对固定输入 h,掩码以概率 1-p 保留元素,输出为 mask×h/(1-p)。例如 p=0.5,保留的 1 变成 2,删除的变成 0,期望仍为 1;并非每一次有限样本输出均值都恰好为 1。
Dropout 的随机性由训练模式决定,no_grad 不会自动关闭它。纯推理既要 model.eval,也要关闭梯度跟踪。若手动调用函数式 dropout,应正确传入 training 标志,否则可能在评估中持续随机。
p 较大时噪声更强,可能使模型欠拟合或梯度波动。它与权重衰减、数据增强作用不同,不能代替代表性数据或正确验证。卷积和序列中还存在按通道或结构化屏蔽的变体。
数学表达
核心公式
Dropout 在训练模式以概率 p 将输入元素置零,并把保留值除以 1-p;评估模式则直接返回输入。这种反向缩放保持单个元素输出的期望不变。
变量含义
p丢弃概率h原激活
计算步骤
- 1保留时输出 1/(1−0.5)=2。
- 2丢弃时输出 0。
- 3期望为 0.5×2+0.5×0=1。
代码对应位置
示例 1p=0.5 的两种可能值与期望的最小验证:使用完整构造输入核对p=0.5 的两种可能值与期望,输出只表示本例计算。
变量解释
| 变量 | 含义 |
|---|---|
p | 丢弃概率 |
h | 原激活 |
完整数值示例
p=0.5 的两种可能值与期望
已知条件
- 输入元素恒为 1
- 丢弃概率为 0.5
计算步骤
- 保留时输出 1/(1−0.5)=2。
- 丢弃时输出 0。
- 期望为 0.5×2+0.5×0=1。
计算结果
训练输出只可能为 0 或 2;评估输出全部为 1。
处理前后对比
- 保持单元素期望不等于保持整网输出或保证验证效果提高。
p=0.5 的两种可能值与期望
代码不把一次随机掩码写成永远固定的预期,而检查所有训练输出是否属于允许集合、评估是否恢复原值。这验证的是运算契约。
期望保持并不意味着有 Dropout 的非线性网络与没有 Dropout 的网络具有相同预测。后续非线性、损失及不同掩码组合都会改变整体行为。
计算与实现步骤
- 保留时输出 1/(1−0.5)=2。
- 丢弃时输出 0。
- 期望为 0.5×2+0.5×0=1。
代码实现
示例 1
p=0.5 的两种可能值与期望的最小验证
example_01.py用途:使用完整构造输入核对p=0.5 的两种可能值与期望,输出只表示本例计算。
import torch
from torch import nn
torch.manual_seed(7)
drop = nn.Dropout(0.5)
x = torch.ones(16)
drop.train()
train_y = drop(x)
print("train values valid:", bool(((train_y == 0) | (train_y == 2)).all()))
drop.eval()
print("eval:", drop(x).tolist())代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
使用完整构造输入核对p=0.5 的两种可能值与期望,输出只表示本例计算。
Step 1 · 1–10 行
导入当前步骤需要的数值计算、预处理、模型或评价工具。依赖集中写在代码开头,便于复现。
import torch
from torch import nn
torch.manual_seed(7)
drop = nn.Dropout(0.5)
x = torch.ones(16)
drop.train()
train_y = drop(x)
print("train values valid:", bool(((train_y == 0) | (train_y == 2)).all()))
drop.eval()
print("eval:", drop(x).tolist())预期输出或运行结果
train values valid: True eval: [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
常见错误 · 3 条
- 验证忘记 eval
- p 越大越好
- 误当权重衰减
实际应用
- 全连接隐藏层正则化
- 按验证表现调节训练噪声
常见错误
- 验证忘记 eval
- p 越大越好
- 误当权重衰减
常见问题
Dropout 会永久删除神经元吗?
不会。标准 Dropout 每次前向重新采样掩码,参数仍在;它区别于永久剪枝。
这个示例能说明什么边界?
保持单元素期望不等于保持整网输出或保证验证效果提高。
推荐学习资料
参考库不会生成虚假资源或无效外部链接。