当前位置: 首页 > news >正文

Dropout

Dropout(丢弃法)是一种在神经网络训练中广泛使用的正则化(Regularization)技术。它的主要作用是防止模型在训练集上过拟合(Overfitting),从而提高模型在未见过数据(测试集)上的泛化能力。


Dropout 类的作用和工作原理

如果你要在你的面向对象的神经网络框架中实现一个 Dropout 类,它会像 SigmoidLinear 层一样,拥有 forwardbackward 方法,但其内部操作非常独特:

1. 训练阶段(forward 方法):随机“失活”

在训练时,Dropout 层的 forward 操作会随机地将该层的一部分神经元设置为零(失活)

步骤 操作 目的
1. 生成掩码 (Mask) 根据设定的丢弃概率 $p$(例如 $p=0.5$),生成一个与输入数据同形状的随机布尔矩阵(掩码)。 决定哪些神经元应该被临时“删除”。
2. 丢弃 将输入数据与这个掩码相乘,使得被选中丢弃的神经元的输出变为 0 实现随机失活,打破神经元之间的共适应性。
3. 缩放 (Scaling) 将剩下的未失活神经元的输出除以 $1-p$(保持概率)。 “反向缩放”。这是为了保证下一层神经元的输入总和的期望值与没有 Dropout 时保持一致。

2. 测试/验证阶段(forward 方法):不做任何事

在测试、验证或实际部署模型时,Dropout 层不执行任何随机丢弃操作,它只是简单地传递输入数据

  • 原因: 如果在测试时也随机丢弃神经元,会引入不确定性,导致每次运行的结果不同。由于训练时的缩放已经补偿了神经元减少的影响,测试时无需再做处理。

3. 反向传播(backward 方法):传递梯度

在反向传播时,Dropout 层只对在前向传播中被保留下来的神经元传递梯度。

  • 它将上游传来的梯度(G)与训练时生成的掩码相乘,实现梯度传递。
  • 同时,梯度也需要被 $1-p$ 缩放,保持与前向传播的一致性。

Dropout 的价值:正则化

Dropout 的核心思想是,通过随机“折磨”模型,使其变得更加健壮:

  1. 防止特征共适应性: 强制要求每个神经元不能完全依赖于前一层特定的某些神经元,因为它不知道下一次训练时哪些神经元会“存活”。这迫使神经元学习到更通用、更具鲁棒性的特征。
  2. 集成学习: 每次训练迭代都相当于在一个稍微不同的网络上进行,Dropout 最终效果类似于训练了一个庞大的集成模型(Ensemble Model)
  3. 简化网络: 由于它的作用,通常可以在使用 Dropout 的情况下使用更大的网络规模,而不用担心过拟合。
# 定义Dropout类
class Dropout(Module):def __init__(self, p=0.3):super().__init__()self.info += f"**    Dropout(p={p})"  # 打印信息self.p = pdef forward(self, x):r = np.random.rand(*x.shape) # 矩阵r与x的shape相同,值在0-1之间随机生成self.nagtive=r<self.px[self.nagtive]=0return xdef backward(self, G):G[self.nagtive]=0return G
http://www.hskmm.com/?act=detail&tid=19015

相关文章:

  • 经典排序算法深度解析 - 实践
  • Java网络编程(七):NIO实战构建高性能Socket服务器 - 实践
  • Unigine整合Myra UI Library全纪录(3):整合与优化
  • Tita 项目经营一体化建筑业企业解决方案
  • CD78.【C++ Dev】以AVL任务的bug讲讲调试技巧
  • 实用指南:AI 时代的安全防线:国产大模型的数据风险与治理路径
  • 写给自己的年终复盘以及未来计划
  • 最近难得的一点思考
  • np.random.rand
  • Nexpose 8.22.0 for Linux Windows - 漏洞扫描
  • 冯延巳-风乍起,吹皱一池春水。
  • 大唐名相张九龄-海上生明月,天涯共此时
  • 王昌龄的态度
  • 开发知识点-Python-virtualenv
  • 白居易-那个寒冷的夜晚,思念像潮水般袭来。想得家中夜深坐,还应说着远行人。
  • 2025年移动厕所厂家口碑排行榜:环保移动厕所,泡沫封堵移动厕所,市区公园露营地移动厕所,装配式移动厕所,公共移动厕所定制安装公司选择指南!
  • Metasploit Framework 6.4.90 (macOS, Linux, Windows) - 开源渗透测试框架
  • VSCode+Window+Chrome常用快捷键
  • 那些诗词那些花|君不见此玫瑰于晚秋的夜色中凄然绽放,别具一格。
  • Linux环境下VSCode快速安装终极指南:debian/ubuntu/linux平台通用
  • 醉后不知天在水,满船清梦压星河
  • Apache Doris性能优化全解析:慢查询定位与引擎深度调优 - 教程
  • 【诗词解读】跨越千年的文脉传承:月与酒是中国人的永恒浪漫
  • 秋风中的窘境,一代诗圣的安居梦
  • 辛弃疾:明月团团高树影,十里水沉烟冷
  • 坐观垂钓者,徒有羡鱼情:孟浩然与当代人的无能为力之痛
  • Go与C# 谁才更能节省内存? - 详解
  • SQL子查询(Subquery)优化
  • 【诗词解读】王维的温柔都藏在他的诗句里:吾谋适不用,勿谓知音稀。
  • shiro反序列化及规避检测