您现在的位置是:首页 >技术交流 >[chapter 31][PyTorch][Early Stop& Dropout]网站首页技术交流

[chapter 31][PyTorch][Early Stop& Dropout]

明朝百晓生 2023-07-18 12:00:02
简介[chapter 31][PyTorch][Early Stop& Dropout]

前言

深度神经网络结构的过拟合是指 :

        在训练集上的正确率很高, 但在测试集上的准确率很低.
为了缓解网络过拟合的问题,

       其中一种常见的办法是使用 dropout ,Early Stop

目录:

     1: Early Stop

     2:    Dropout 

     3:   stochastic Gradient Descent


一  Early Stop

        Early Stop的概念非常简单,在我们一般训练中,经常由于过拟合导致在训练集上的效果好,而在测试集上的效果非常差。因此我们可以让训练提前停止,在测试集上达到最好的效果时候就停止训练,而不是等到在训练集上饱和在停止,这个操作就叫做Early Stop。


二  Dropout 

2.1 Dropout出现的原因

         在机器学习的模型中,如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象。在训练神经网络的时候经常会遇到过拟合的问题,过拟合具体表现在:模型在训练数据上损失函数较小,预测准确率较高;但是在测试数据上损失函数比较大,预测准确率较低。

          过拟合是很多机器学习的通病。如果模型过拟合,那么得到的模型几乎不能用。为了解决过拟合问题,一般会采用模型集成的方法,即训练多个模型进行组合。此时,训练模型费时就成为一个很大的问题,不仅训练多个模型费时,测试多个模型也是很费时。

综上所述,训练深度神经网络的时候,总是会遇到两大缺点:

    (1)容易过拟合

     (2)费时

Dropout可以比较有效的缓解过拟合的发生,在一定程度上达到正则化的效果。

2.2  Dropout 

       在2012年,Hinton在其论文《Improving neural networks by preventing co-adaptation of feature detectors》中提出Dropout。当一个复杂的前馈神经网络被训练在小的数据集时,容易造成过拟合。为了防止过拟合,可以通过阻止特征检测器的共同作用来提高神经网络的性能。

       在2012年,Alex、Hinton在其论文《ImageNet Classification with Deep Convolutional Neural Networks》中用到了Dropout算法,用于防止过拟合。并且,这篇论文提到的AlexNet网络模型引爆了神经网络应用热潮,并赢得了2012年图像识别大赛冠军,使得CNN成为图像分类上的核心算法模型。

    。

Dropout说的简单一点就是:我们在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征,如图1所示。

 2.3   Dropout 网络结构

        以DNN结构为例

        默认神经元结构

        z_i^t=w_i^{t}a^{t-1}+b_i^t

         a_i^t=f(z_i^t)

        增加Drop out 功能后的,神经元结构

          r^t=rand()

          d^{t-1}=r^t odot a^{t-1}

         z_i^{t}=w_i^td^{t-1}+b_i^t

         a_i^t=f(z_i^t)

  2.4  dropout 前向传播原理

          这里重点介绍一下Dropout 神经元输入d 产生的原理

       某一层神经元输入向量为 a=[a_1,a_2,..a_k],

      step1 : 生成每个输入单元对应的dropout 概率                  

                 r = torch.rand(k) =[p_1,p_2,.p_i..p_k]

                 
      step2:  生成掩码向量

                    掩码向量 m=[m_1,m_2,..m_k]

                      m=randMask(r_i)=left{egin{matrix} 0,r_i < p \ frac{1}{1-p},r_i geq p end{matrix}
ight.

       step3    生成dropout 输入向量 d

                     d=dropout(a)=a odot m =[a_1m_1,a_2m_2,..a_km_k]

  2.5  反向传播原理

          e= forward(a)

          	riangledown e=[frac{partial e}{partial d_1},frac{partial e}{partial d_2},...frac{partial e}{partial d_k}]

          frac{partial e}{partial a_i}= frac{partial e}{partial d_i} frac{partial d_i}{partial a_i}

        frac{partial d}{partial a} =m

      所以

      	riangledown e_a=	riangledown e_d odot m

2.6 PyTorch 代码

  

 要注意的下面两个API 作用是相反,第一是dropout,第二个是保留

train 的时候神经元需要dropout,但是测试的时候,要保留,通过eval 实现


三  stochastic Gradient Descent

     原理比较简单,由于硬件限制,我们不会拿train 数据集中的所有样本训练,

假设样本总数为m,每轮训练只会随机选取部分数据集训练,batch size 

 

深度学习中Dropout原理解析 - 知乎

dropout函数详解及反向传播中的梯度求导_dropout反向传播梯度如何计算_BrightLampCsdn的博客-CSDN博客

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。