Geeks_Z の Blog Geeks_Z の Blog
首页
  • 学习笔记

    • 《HTML》
    • 《CSS》
    • 《JavaWeb》
    • 《Vue》
  • 后端文章

    • Linux
    • Maven
    • 汇编语言
    • 软件工程
    • 计算机网络概述
    • Conda
    • Pip
    • Shell
    • SSH
    • Mac快捷键
    • Zotero
  • 学习笔记

    • 《数据结构与算法》
    • 《算法设计与分析》
    • 《Spring》
    • 《SpringMVC》
    • 《SpringBoot》
    • 《SpringCloud》
    • 《Nginx》
  • 深度学习文章
  • 学习笔记

    • 《PyTorch》
    • 《ReinforementLearning》
    • 《MetaLearning》
  • 学习笔记

    • 《高等数学》
    • 《线性代数》
    • 《概率论与数理统计》
  • 增量学习
  • 哈希学习
GitHub (opens new window)

Geeks_Z

AI小学生
首页
  • 学习笔记

    • 《HTML》
    • 《CSS》
    • 《JavaWeb》
    • 《Vue》
  • 后端文章

    • Linux
    • Maven
    • 汇编语言
    • 软件工程
    • 计算机网络概述
    • Conda
    • Pip
    • Shell
    • SSH
    • Mac快捷键
    • Zotero
  • 学习笔记

    • 《数据结构与算法》
    • 《算法设计与分析》
    • 《Spring》
    • 《SpringMVC》
    • 《SpringBoot》
    • 《SpringCloud》
    • 《Nginx》
  • 深度学习文章
  • 学习笔记

    • 《PyTorch》
    • 《ReinforementLearning》
    • 《MetaLearning》
  • 学习笔记

    • 《高等数学》
    • 《线性代数》
    • 《概率论与数理统计》
  • 增量学习
  • 哈希学习
GitHub (opens new window)
  • Python

  • MLTutorials

    • 机器学习基础

    • 模型与算法

    • 模型优化

      • 局部极小值与鞍点
      • 批量和动量
      • 学习率
      • 梯度下降
      • 反向传播
      • 优化算法
      • 各种Optimizer梯度下降优化算法回顾和总结
      • AI算法工程师必备的深度学习最优化上
      • PyTorch优化神经网络训练的17种方法
      • AdamW与Adam的比较可能AdamW依然是最好的优化器
      • 机器学习调参自动优化方法
      • Dropout
        • Dropout
          • How to train?
          • 为什么Dropout会有用
          • testing时为什么要乘以(1-p)%
          • 为什么说dropout是终极的ensemble方法
  • 卷积神经网络

  • 循环神经网络

  • Transformer

  • VisionTransformer

  • 扩散模型

  • 计算机视觉

  • PTM

  • MoE

  • LoRAMoE

  • LongTailed

  • 多模态

  • 知识蒸馏

  • PEFT

  • 对比学习

  • 小样本学习

  • 迁移学习

  • 零样本学习

  • 集成学习

  • Mamba

  • PyTorch

  • CL

  • CIL

  • 小样本类增量学习FSCIL

  • UCIL

  • 多模态增量学习MMCL

  • LTCIL

  • DIL

  • 论文阅读与写作

  • 分布外检测

  • GPU

  • 深度学习调参指南

  • AINotes
  • MLTutorials
  • 模型优化
Geeks_Z
2025-03-26
目录

Dropout

Dropout

How to train?

chapter1-0.png

在train的时候,每一次update参数之前,对network里面的每个neural(包括input),做sampling(抽样)。 每个neural会有p%会被丢掉,跟着的weight也会被丢掉。

chapter1-0.png

你在training 时,performance会变的有一点差(某些neural不见了),加上dropout,你会看到在testing set会变得有点差,但是dropout真正做的事就是让你testing 越做越好

chapter1-0.png

在testing上注意两件事情:

  • 第一件事情就是在testing上不做dropout。
  • 在dropout的时候,假设dropout rate在training是p%,all weights都要乘以(1-p%)

假设training时dropout rate是p%,在testing rate时weights都要乘以(1-p)%。(假定dropout rate是50%,在training的时候计算出来的weights等于1,那么testing时的rate设为0.5

为什么Dropout会有用

chapter1-0.png

为什么在训练的时候要dropout,但是测试的时候不dropout。

training的时候会丢掉一些neural,就好像使在练习轻功一样在脚上绑上一些重物,然后实际上战斗的时候把重物拿下来就是testing时(没有进行dropout),那时候你就会变得很强

chapter1-0.png

另外一个很直觉的理由是:在一个团队里面,总是会有人摆烂(摆烂,指事情已经无法向好的方向发展,于是就干脆不再采取措施加以控制而是任由其往坏的方向继续发展下去),这是会dropout的。

假设你觉得你的队友会摆烂,所以这个时候你就想要好好做,你想要去carry他。但实际上在testing的时候,大家都是有在好好做,没有需要被carry,因为每个人做的很努力,所以结果会更好。

testing时为什么要乘以(1-p)%

chapter1-0.png

还有一个要解释的是:在做dropout任务时候要乘以(1-p)%,为什么和training时使用的training不相同呢?很直觉的理由是这样的:

假设dropout rate是50 percent,那在training的时候总是会丢掉一般的neural。假设在training时learning好一组weight(w1,w2,w3,w4),但是在testing时没有dropout,对同一组weights来说:在training时得到z,在testing是得到z′。但是training和testing得到的值是会差两倍的,所以在做testing时都乘以0.5,这样得到的结果是比较match:z=z′。

上述的描述是很直觉的解释

chapter1-0.png

其实dropout还是有很多的理由,这个问题还是可以探讨的问题,你可以在文献上找到很多不同的观点来解释dropout。我觉得我比较能接受的是:dropout是一个终极的ensemble方法

ensemble的意思是:我们有一个很大的training set,每次从training set里面只sample一部分的data。我们之前在讲bias和variance时,打靶有两种状况:一种是bias很大,所以你打准了;一种是variance很大,所以你打准了。如果今天有一个很复杂的model,往往是bias准,但variance很大。若很复杂的model有很多,虽然variance很大,但最后平均下来结果就很准。所以ensemble做的事情就是利用这个特性。

我们可以training很多的model(将原来的training data可以sample很多的set,每个model的structures不一样)。虽然每个model可能variance很大,但是如果它们都是很复杂的model时,平均起来时bias就很小。

chapter1-0.png

在training时train了很多的model,在testing时输入data x进去通过所有的model(Network1,Network2,Network3,Network4),得到结果(y1,y2,y3,y4),再将这些结果做平均当做最后的结果。

如果model很复杂时,这一招是往往有用的

为什么说dropout是终极的ensemble方法

chapter1-0.png

为什么说dropout是终极的ensemble方法?在进行dropout时,每次sample一个minibatch update参数时,都会进行dropout。

第一个、第二个、第三个、第四个minibatch如图所示,所以在进行dropout时,是一个终极ensemble的方式。假设有M个neurons,每个neuron可以dropout或者不dropout,所以可能neurons的数目为2M,但是在做dropout时,你在train2Mneurons。

每次只用one mini-batch去train一个neuron,总共有2M 能的neuron。最后可能update的次数是有限的,你可能没有办法把2M neuron都train一遍,但是你可能已经train好多的neurons。

每个neuron都用one mini-batch来train,每个neuron用一个batch来train可能会让人觉得很不安(一个batch只有100笔data,怎么可能train整个neuron呢)。这是没有关系的,因为这些不同neuron的参数是共享的。

chapter1-0.png

在testing的时候,按照ensemble方法,把之前的network拿出来,然后把train data丢到network里面去,每一个network都会给你一个结果,这些结果的平均值就是最终的结果。但是实际上没有办法这样做,因为network太多了。所以dropout最神奇的是:当你把一个完整的network不进行dropout,但是将它的weights乘以(1-p)percent,然后将train data输入,得到的output y。神奇的是:之前做average的结果跟output y是approximated

chapter1-0.png

你可能想说何以见得?接下来我们将来举一个示例:若我们train一个很简单的network(只有一个neuron并且不考虑bis),这个network的activation是linear的。

这个neuron的输入是x1,x2,经过dropout以后得到的weights是w1,w2,所以它的output是z=w1x2+w2x2。如果我们要做ensemble时,每个input可能被dropout或者不被dropout,所以总共有四种structure,它们所对应的结果分别为z=w1x1,z=w2x2,z=w1x1,z=0。因为我们要进行ensemble,所以要把这四个neuron的output要average,得到的结果是z=12w1x1+12w2x2。

如果我们现在将这两个weights都乘以12(12w1x1+12w2x2),得到的output为z=12w1x1+12w2x2。在这个最简单的case里面,不同的neuron structure做ensemble这件事情跟我们将weights multiply一个值,而不做ensemble所得到的output其实是一样的。

只有是linear network,ensemble才会等于weights multiply一个值。

上次更新: 2025/06/25, 11:25:50
机器学习调参自动优化方法
卷积神经网络

← 机器学习调参自动优化方法 卷积神经网络→

最近更新
01
帮助信息查看
06-08
02
常用命令
06-08
03
学习资源
06-07
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Geeks_Z | MIT License
京公网安备 11010802040735号 | 京ICP备2022029989号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式