动手学深度学习(十五) 您所在的位置:网站首页 dropout参数一般设置为多少 动手学深度学习(十五)

动手学深度学习(十五)

#动手学深度学习(十五)| 来源: 网络整理| 查看: 265

文章目录 一、从其他方向审视过拟合二、使用Dropout的动机及其定义三、从零开始实现dropout四、使用pytorch简洁实现五、总结

说明:此博客是笔者根据李沐沐神2021年动手学深度学习进行的笔记整理,其中也包含了个人的一些学习理解和代码。如有错误请指正!

一、从其他方向审视过拟合

当面对更多的特征数量有限时,线性模型往往不能考虑特征之间的交互作用,模型会更容易发生过拟合。(也就是模型学习到了量数据的部分特征,而可能忽略了其中更为普遍的规律)

在传统的说法中,范化性和灵活性之间的这种基本权衡可以描述为“偏差-方差权衡”(bias-variance trade off),简单的线性模型有很大的偏差:其仅仅能拟合一小类简单的函数,但是这些模型的方差很低(也就是说对于这些模型而言,给定不同的随机数据,其结果类似,精确度基本不受数据的影响),对于这些简单的函数过拟合的风险较小。

对于深度神经网络,偏差-方差谱位于另一端。神经网络其不局限于单独查看某一个特征,而是更广泛地学习了各种不同特征之间的交互关系。所以即使我们样本数量远大于特征数量,深度神经网络也可能出现过拟合(简单想象多个特征的组合排列就可以想到这一点了,样本数量增长远不及这些特征排列组合的关系增长多,加入一个新的特征其交互关系可能是爆炸增长)

深度神经网络有令人费解的范化性质,但是这些性质的数学基本原理仍然未知。

二、使用Dropout的动机及其定义

一个好的模型需要对输入数据的扰动鲁棒,参数的范数代表了一种有用的简单性度量,简单性的另一个又用角度是平滑性,即函数不应该对输入的微小变化敏感。

1995年克里斯托弗.毕晓谱证明了具有输入噪音的训练等价于Tikhonov正则

在毕晓普的工作中,他将高斯噪声添加到线性模型的输入中。在每次训练迭代中,他将从均值为零的分布 ϵ ∼ N ( 0 , σ 2 ) \epsilon \sim \mathcal{N}(0,\sigma^2) ϵ∼N(0,σ2)采样噪声添加到输入 x \mathbf{x} x,从而产生扰动点 x ′ = x + ϵ \mathbf{x}' = \mathbf{x} + \epsilon x′=x+ϵ。预期是 E [ x ′ ] = x E[\mathbf{x}'] = \mathbf{x} E[x′]=x。

2014年斯里瓦斯塔瓦等人将上述方法应用于网络的内部层提出一个新的想法“丢弃法”:在层之间加入噪音。那么我们希望加入噪音之后得到的新的输入:

E [ x ′ ] = x E[\mathbf{x}'] = \mathbf{x} E[x′]=x

在标准dropout正则化中,通过按保留(未丢弃)的节点的分数进行归一化来消除每一层的偏差。换言之,每个中间激活值 h h h以丢弃概率 p p p由随机变量 h ′ h' h′替换,如下所示:

h ′ = { 0  概率为  p h 1 − p  其他情况 \begin{aligned} h' = \begin{cases} 0 & \text{ 概率为 } p \\ \frac{h}{1-p} & \text{ 其他情况} \end{cases} \end{aligned} h′={01−ph​​ 概率为 p 其他情况​​

请注意:

E [ h ′ ] = p ∗ 0 + ( 1 − p ) ∗ h 1 − p = h E[\mathbf{h}'] = p*0 +(1-p)*\frac{h}{1-p} = h E[h′]=p∗0+(1−p)∗1−ph​=h

根据设计,期望值保持不变,即 E [ h ′ ] = h E[h'] = h E[h′]=h。

在这里插入图片描述 注意:正则项(Dropout)只在训练过程中使用,因为其会影响模型参数的更新 所以在推理过程中,丢弃法直接返回输入

h = d r o p o u t ( h ) h = dropout(h) h=dropout(h)

测试应该保证输出的确定性 三、从零开始实现dropout

要实现单层的dropout函数,我们必须从伯努利(二元)随机变量中提取与我们的层的维度一样多的样本,其中随机变量以概率 1 − p 1-p 1−p取值 1 1 1(保持),以概率 p p p取值 0 0 0(丢弃)。实现这一点的一种简单方式是首先从均匀分布 U [ 0 , 1 ] U[0, 1] U[0,1]中抽取样本。那么我们可以保留那些对应样本大于 p p p的节点,把剩下的丢弃。

在下面的代码中,(我们实现 dropout_layer 函数,该函数以dropout的概率丢弃张量输入X中的元素),如上所述重新缩放剩余部分:将剩余部分除以1.0-dropout。

import torch from torch import nn from d2l import torch as d2l import torchvision from torchvision import transforms from torch.utils import data def dropout_layer(X,dropout): assert 0


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有