Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
ml-mastery-zh
提交
73161650
M
ml-mastery-zh
项目概览
OpenDocCN
/
ml-mastery-zh
11 个月 前同步成功
通知
2
Star
556
Fork
158
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
ml-mastery-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
73161650
编写于
9月 14, 2019
作者:
飞
飞龙
提交者:
GitHub
9月 14, 2019
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #28 from Lnssssss/master
翻译校对
上级
59b95656
dffafb18
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
36 addition
and
36 deletion
+36
-36
docs/dl-keras/dropout-regularization-deep-learning-models-keras.md
...eras/dropout-regularization-deep-learning-models-keras.md
+36
-36
未找到文件。
docs/dl-keras/dropout-regularization-deep-learning-models-keras.md
浏览文件 @
73161650
...
...
@@ -4,14 +4,14 @@
神经网络和深度学习模型的简单而强大的正则化技术是dropout。
在这篇文章中,您将
发现 dropout 正则化技术以及如何将其应用于使用 Keras 的 Python 模型
。
在这篇文章中,您将
了解 dropout 正则化技术以及如何将其应用于使用 Keras 用 Python 编写的模型中
。
阅读这篇文章后你会知道:
*
dropout正则化技术
如何工作
。
*
dropout正则化技术
原理
。
*
如何在输入层上使用 dropout。
*
如何在隐藏层上使用 dropout。
*
如何
调整问题的dropout水平。
*
如何
针对具体问题对dropout调优
让我们开始吧。
...
...
@@ -23,31 +23,31 @@
使用 Keras 的深度学习模型中的dropout正规化
照片由
[
Trekking Rinjani
](
https://www.flickr.com/photos/trekkingrinjani/4930552641/
)
,保留一些权利。
## 神经网络的
丢失
正则化
## 神经网络的
dropout
正则化
Dropout 是 Srivastava 等人提出的神经网络模型的正则化技术。在他们的 2014 年论文
[
dropout:一种防止神经网络过度拟合的简单方法
](
http://jmlr.org/papers/v15/srivastava14a.html
)
(
[
下载 PDF
](
http://jmlr.org/papers/volume15/srivastava14a/srivastava14a.pdf
)
)。
dropout是一种在训练过程中忽略随机选择的神经元的技术。
他们随机“dropout”。这意味着它们对下游神经元激活的贡献在正向通过时暂时消除,并且任何重量更新都不会应用于向后通过的
神经元。
dropout是一种在训练过程中忽略随机选择的神经元的技术。
这些神经元被随机“dropout“,这意味着它们对激活下一层神经元的贡献在正向传递时暂时消除,并且在反向传递时任何权重更新也不会应用于这些
神经元。
当神经网络学习时,
神经元权重在网络中的上下文中进行。针对特定特征调整神经元的权重,从而提供一些特化。相邻神经元变得依赖于这种专业化,如果采取太多可能导致脆弱的模型太专门于训练数据。这在训练期间依赖于神经元的背景被称为复杂的共同适应
。
当神经网络学习时,
网络中的神经元的权重将进行调整重置。神经元的权重针对某些特征进行调优,具有一些特殊化。周围的神经元则会依赖于这种特殊化,如果过于特殊化,模型会因为对训练数据过拟合而变得脆弱不堪。神经元在训练过程中的这种依赖于上下文的现象被称为复杂的协同适应(complex co-adaptations)
。
你可以想象
,如果神经元在训练过程中随机掉出网络,那么其他神经元将不得不介入并处理对缺失神经元进行预测所需的表示。这被认为导致网络学习多个独立的内部表示
。
你可以想象
到如果神经元在训练过程中被随机丢弃,那么其他神经元因缺失神经元不得不介入并替代缺失神经元的那部分表征,为预测结果提供信息。人们认为这样网络模型可以学到多种相互独立的内部表征
。
其结果是网络对神经元的特定权重变得不那么敏感。这反过来
导致网络能够更好地概括并且不太可能过度拟合训练数据
。
其结果是网络对神经元的特定权重变得不那么敏感。这反过来
使得网络能够更好地泛化,减少了过度拟合训练数据的可能性
。
##
科拉斯
的dropout规范化
##
Keras
的dropout规范化
通过以每
个权重更新周期的给定概率(例如 20%)随机选择要丢弃的节点,可以容易地实现丢失。这就是在卡拉斯实施 Dropout 的方式。 Dropout 仅在模型训练期间使用,在评估模型的技
能时不使用。
通过以每
轮权重更新时的给定概率(例如 20%)随机选择要丢弃的节点、。这就是在Keras实施 Dropout 的方式。 Dropout 仅在模型训练期间使用,在评估模型的性
能时不使用。
接下来,我们将探讨在 Keras 中使用 Dropout 的几种不同方法。
这些示例将使用
[
Sonar 数据集
](
http://archive.ics.uci.edu/ml/datasets/Connectionist+Bench+(Sonar,+Mines+vs.+Rocks
)
)。这是一个二元分类问题,其目标是
从声纳啁啾返回中正确识别岩石和模拟地雷。它是神经网络的一个很好的测试数据集,因为所有输入值都是数字的并且具有相同的比例
。
这些示例将使用
[
Sonar 数据集
](
http://archive.ics.uci.edu/ml/datasets/Connectionist+Bench+(Sonar,+Mines+vs.+Rocks
)
)。这是一个二元分类问题,其目标是
利用声纳回声正确识别岩石和模拟地雷。它是神经网络的一个很好的测试数据集,因为所有输入值都是数字的并且具有相同的量纲
。
数据集可以是从 UCI 机器学习库下载的
[
。您可以将声纳数据集放在当前工作目录中,文件名为 sonar.csv。
](
http://archive.ics.uci.edu/ml/machine-learning-databases/undocumented/connectionist-bench/sonar/sonar.all-data
)
我们将使用带有 10
倍交叉验证的 scikit-learn 来评估开发的模型
,以便更好地梳理结果中的差异。
我们将使用带有 10
折交叉验证的 scikit-learn 来评估模型的质量
,以便更好地梳理结果中的差异。
有 60 个输入值和一个输出值,输入值在用于网络之前已
标准化。基线神经网络模型具有两个隐藏层,第一个具有 60 个单元,第二个具有 30 个。随机梯度下降用于训练具有相对低的学习率和动
量的模型。
有 60 个输入值和一个输出值,输入值在用于网络之前已
归一化。基准神经网络模型具有两个隐藏层,第一个具有 60 个单元,第二个具有 30 个。随机梯度下降用于训练具有相对低的学习率和冲
量的模型。
下面列出了完整的基线模型。
...
...
@@ -102,7 +102,7 @@ results = cross_val_score(pipeline, X, encoded_Y, cv=kfold)
print
(
"Baseline: %.2f%% (%.2f%%)"
%
(
results
.
mean
()
*
100
,
results
.
std
()
*
100
))
```
运行该示例可生成
86%的估计分类准确度
。
运行该示例可生成
分类准确度约为86%
。
```
py
Baseline
:
86.04
%
(
4.58
%
)
...
...
@@ -112,13 +112,13 @@ Baseline: 86.04% (4.58%)
Dropout 可以应用于称为可见层的输入神经元。
在下面的示例中,我们在输入(或可见层)和第一个隐藏层之间添加一个新的 Dropout 层。dropout率设置为 20%,这意味着每个更新周期中将随机
排除
五分之一输入。
在下面的示例中,我们在输入(或可见层)和第一个隐藏层之间添加一个新的 Dropout 层。dropout率设置为 20%,这意味着每个更新周期中将随机
丢弃
五分之一输入。
此外,正如 Dropout
原始论文中所建议的那样,对每个隐藏层的权重施加约束,确保权重的最大范数不超过值 3.这可以通过在密集上设置 kernel_constraint 参数来完成。构造层时的类
。
此外,正如 Dropout
那篇论文中所建议的那样,对每个隐藏层的权重施加约束,确保权重的最大范数不超过值 3.这可以通过在构造模型层时设置 kernel_constraint 参数来完成
。
学习率提高了一个数量级,
动量增加到 0.9。原始 Dropout 论文中也推荐了这些学习率的提高
。
学习率提高了一个数量级,
冲量增加到 0.9。 这也是Dropout 论文中推荐的做法
。
继续上面的基
线示例,下面的代码使用输入丢失来运行相同的网络
。
继续上面的基
准示例,下面的代码使用输入层dropout的网络模型
。
```
py
# dropout in the input layer with weight constraint
...
...
@@ -144,7 +144,7 @@ results = cross_val_score(pipeline, X, encoded_Y, cv=kfold)
print
(
"Visible: %.2f%% (%.2f%%)"
%
(
results
.
mean
()
*
100
,
results
.
std
()
*
100
))
```
运行该示例
至少在单次测试运行中提供了分类精度的
小幅下降。
运行该示例
在单次测试运行中分类精度
小幅下降。
```
py
Visible
:
83.52
%
(
7.68
%
)
...
...
@@ -152,9 +152,9 @@ Visible: 83.52% (7.68%)
## 在隐藏层上使用 Dropout
Dropout 可以应用于网络模型
体内的隐藏神经元
。
Dropout 可以应用于网络模型
内的隐藏层节点
。
在下面的示例中,Dropout 应用于两个隐藏层之间以及最后一个隐藏层和输出层之间。再次使用 20%的dropout率,
以及对这些层的
权重约束。
在下面的示例中,Dropout 应用于两个隐藏层之间以及最后一个隐藏层和输出层之间。再次使用 20%的dropout率,
并且对这些层进行
权重约束。
```
py
# dropout in hidden layers with weight constraint
...
...
@@ -181,38 +181,38 @@ results = cross_val_score(pipeline, X, encoded_Y, cv=kfold)
print
(
"Hidden: %.2f%% (%.2f%%)"
%
(
results
.
mean
()
*
100
,
results
.
std
()
*
100
))
```
我们可以看到,针对此问题以及所选
网络配置,在隐藏层中使用丢失并未提升表现。事实上,表现比基线
差。
我们可以看到,针对此问题以及所选
模型配置参数,在隐藏层中使用 dropout 并未提升模型效果。事实上,表现比基准
差。
可能需要
额外的训练时期
或者需要进一步调整学习率。
可能需要
更多的训练迭代次数
或者需要进一步调整学习率。
```
py
Hidden
:
83.59
%
(
7.31
%
)
```
## 使用 Dropout 的
提示
## 使用 Dropout 的
技巧
关于 Dropout 的原始论文提供了一套标准机器学习问题的实
验结果。因此,在实践中使用dropout时,他们提供了许多有用的启发式方法
。
关于 Dropout 的原始论文提供了一套标准机器学习问题的实
践性结论。因此在运用dropout时,会带来很多帮助
。
*
通常,使用 20%-50%神经元的小dropout值,20%
提供良好的起点。概率太低具有最小的影响而且值太高会导致网络的学习不足
。
*
使用更大的网络。当在较大的网络上使用 dropout 时,
您可能会获得更好的表现,从而为模型提供更多学习独立表示的机会
。
*
在
传入(可见)和隐藏单位上使用 dropout。在网络的每一层应用丢失已经显示出
良好的结果。
*
使用具有衰减和大动量的大学习率。将学习率提高 10 到 100 倍,并使用 0.9 或 0.99 的高动
量值。
*
限制网络
权重的大小。较大的学习率可能导致非常大的网络权重。对网络权重的大小施加约束
,例如大小为 4 或 5 的最大范数正则化已被证明可以改善结果。
*
通常,使用 20%-50%神经元的小dropout值,20%
可作为良好的起点。比例太低具有最小的影响比列太高会导致模型的欠学习
。
*
使用更大的网络。当在较大的网络上使用 dropout 时,
模型可能会获得更好的表现,模型有更多的机会学习到多种独立的表征
。
*
在
输入层(可见层)和隐藏层都使用 dropout。在网络的每一层应用 dropout 已被证明具有
良好的结果。
*
增加学习率和冲量。将学习率提高 10 到 100 倍,并使用 0.9 或 0.99 的高冲
量值。
*
限制网络
模型权重的大小。较大的学习率可能导致非常大的权重值。对网络的权重值做最大范数正则化等方法
,例如大小为 4 或 5 的最大范数正则化已被证明可以改善结果。
## 关于dropout的更多资源
以下是一些资源,您可以用它们来了解有关神经网络和深度学习模型中的
丢失
的更多信息。
以下是一些资源,您可以用它们来了解有关神经网络和深度学习模型中的
dropout
的更多信息。
*
[
dropout:一种防止神经网络过度拟合的简单方法
](
http://jmlr.org/papers/v15/srivastava14a.html
)
(原始论文)。
*
[
通过阻止特征检测器的共同适应来改善神经网络
](
http://arxiv.org/abs/1207.0580
)
。
*
[
dropout方法如何在深度学习中发挥作用? Quora 上的
](
https://www.quora.com/How-does-the-dropout-method-work-in-deep-learning
)
。
##
摘要
##
总结
在这篇文章中,您
发现了深度学习模型的丢失
正则化技术。你了解到:
在这篇文章中,您
了解了深度学习模型的 dropout
正则化技术。你了解到:
*
dropout
是什么以及如何运作
。
*
dropout
含义和原理
。
*
如何在自己的深度学习模型中使用 dropout。
*
在您自己的模型上从dropout中获得最佳结果的提示
。
*
使用dropout的技巧
。
您对dropout或这篇文章有任何疑问吗?在评论中提出您的问题,我会尽力回答。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录