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

深度学习-丢弃法 Dropout

Dropout 相当于是一个正则项,只在训练时使用,即在层之间加入噪声,增加模型的鲁棒性

因此,推理过程中,Dropout直接返回输入本身。

【补充知识点】:

正则化(regularization)的核心定义只有一句话:

  • 任何显式地牺牲训练误差、换取模型复杂度下降的操作或约束,都叫正则化

把这句话拆成三个关键词:

  1. 显式——它必须是人为“加进去”的,而不是模型本来就有的;

  2. 牺牲训练误差——如果不付出代价,就不叫正则化;

  3. 换取复杂度下降——最终目的是降低泛化误差(测试误差)。

常用的正则化方法

牺牲代价(训练误差↑)

换取的复杂度下降

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)。

  1. 生成掩码: 以 50% 概率保留每个神经元。例如掩码为 [1,0,1,0](意思是:保留第 1、3 个,丢弃第 2、4 个)。

  2. 应用 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。

  3. 缩放(除以 p=0.5):缩放后输出 = [2/0.5,0,6/0.5,0]=[4,0,12,0]。 期望值 = (4+0+12+0)/4=4(与原始期望值 5 仍有偏差,因单次采样有随机性)。

  4. 多次采样验证期望值: 重复多次实验,缩放后的平均输出趋近原始值:

    1. 实验1:掩码 [1,0,1,0] → [4,0,12,0] → 均值 = 4

    2. 实验2:掩码 [0,1,0,1] → [0,8,0,16] → 均值 = 6

    3. 实验3:掩码 [1,1,0,0] → [4,8,0,0] → 均值 = 3

    4. 平均期望 = (4+6+3)/3≈4.33 → 接近原始均值 5(采样越多越接近)。

http://www.lryc.cn/news/604727.html

相关文章:

  • MySQL索引和事务笔记
  • 开源 Arkts 鸿蒙应用 开发(十三)音频--MP3播放
  • WPFC#超市管理系统(3)商品管理
  • 【科研绘图系列】R语言绘制绝对量柱状堆积图+环形图数量统计+特数量标注
  • 潇洒郎: Kafka Ubuntu 安装部署,命令行或者python生产数据与消费数据(kafka-python)
  • 【选型】HK32L088 与 STM32F0/L0 系列 MCU 参数对比与选型建议(ST 原厂 vs 国产芯片)
  • 2025年6月数据挖掘顶刊TKDE研究热点有哪些?
  • 传输层协议UDP与TCP
  • 周期滤波策略
  • AbMole小课堂丨bFGF(FGF-2):维持干细胞培养、驱动类器官构建与细胞分化
  • 容器与虚拟机的本质差异:从资源隔离到网络存储机制
  • 如何使用 Apache Ignite 作为 Spring 框架的缓存(Spring Cache)后端
  • GitPython02-Git使用方式
  • RHCA - CL260 | Day03:配置 RHCS 集群
  • 将 qt 构建为静态库
  • BGP高级特性之正则表达式
  • vue npm install卡住没反应
  • ISO 26262 汽车功能安全(腾讯混元)
  • 在 CentOS 系统上安装 Docker
  • Kotlin -> Kotlin Lambda 表达式与 Function 接口的关系
  • 深入理解 Kotlin Flow:异步数据流处理的艺术
  • 在线教育场景下AI应用,课程视频智能生成大纲演示
  • Jupyter Notebook 中显示图片、音频、视频的方法汇总
  • Python 使用pandas库实现Excel字典码表对照自动化处理
  • C++:STL中list的使用和模拟实现
  • 《C++二叉搜索树原理剖析:从原理到高效实现教学》
  • CH347使用笔记:CH347作为FPGA下载器的几种方式
  • 大语言模型API付费?
  • 【PZ7020-StarLite 入门级开发板】——FPGA 开发的理想起点,入门与工业场景的双重优选
  • PyTorch API