吴恩达深度学习笔记之改善神经网络(一)
来源:互联网 发布:万能游戏透视软件 编辑:程序博客网 时间:2024/06/09 19:37
1.1 Train/dev/test sets
在配置训练,验证,和测试数据集的过程中做出正确决策,会在很大程度上帮助大家创建高效的神经网络。训练神经网络的时候,我们需要做出很多决策。例如:神经网络分多少层,每层包含多少神经元,以及学习速率是多少。
实际上,应用型机器学习是一个高度迭代的过程,下面的示例图可以表示我们训练一个神经网路的过程。
当然最佳决策取决于我们拥有的数据量,应用深度学习是一个典型的迭代过程,需要很多次循环往复,才能为应用程序找到一个称心的神经网络,因此循环过程的效率是决定项目进度的关键因素,创建高质量的训练集,验证集,测试集有助于提高循环效率。
在机器 学习的小数据时代,通常做法是将所有数据三七分。如下所示:
但是在大数据时代,那么验证集合测试集数据总量的比例会变得更小。
总结一下:
在机器学习中,我们通常将样本分成训练集,验证集和测试集三部分,数据规模相对较小的,适用传统的划分比例,数据规模较大的,验证集合测试集就可以占到20%或10%以下。其次要确保验证集和测试集的数据来自同意分布。
1.2 偏差和方差(bias and variance)
这一节我们对偏差和方差做一个简单的介绍。以一个简单的二分类为例。如下图所示:
上图中,第一种就是一种高偏差的情况,我们称之为欠拟合,第二种刚刚好,第三种是高方差的情况,我们称之为过拟合。
我们可以通过以下几个指标来研究偏差和方差,理解偏差和方差的两个关键数据是训练集误差和验证集误差。如下所示:
假设训练集误差为1%,但是验证集为误差为11%,此时,我们可能过度拟合了训练集,在某种程度上,验证集并没有充分利用交叉验证集的作用,像这种情况,称为高方差,如果训练集测试集误差都很高,则称为高偏差。也就是说,我们可以通过衡量训练集和验证集误差,我们可以得出不同结论。
注意
以上分析都是假设基本误差很小的情况下,其次训练集数据和测试集数据来自同一分布。
1.3 机器学习基础(Basic “recipe” for machine learning)
训练神经网络时可以用以下的基本方法,即初始模型训练完成后,我们首先妖之道算法的偏差高不高,如果偏差较高,试着评估训练集或训练数据的性能,如果偏差的确很高,甚至无法拟合训练集,那么我们要做的是选择一个新网络,比如含有更多隐藏层或者隐藏单元的网络,或者尝试更先进的优化算法。通常采用规模更大的网络会有用。进行不断尝试,直到解决偏差问题。一旦偏差降低到可以接受的程度,检查一下方差是否有问题,如果方差高,最好的方法是采用更多的数据,其次,我们可以通过正则化来减少过拟合。
1.4 正则化(Regularization)
如果我们怀疑神经网络过度拟合了数据,即存在高方差问题,此时又没有更多的数据,那么最先想到的方法是通过正则化来减少过拟合。这也是非常可靠的方法,下面我们来看看正则化的原理。
我们以逻辑回归为例,求成本函数的最小值,如下:
加上后面的
如果用L1正则化,W最终会是稀疏的,也就是说w向量中有很多0,虽然这样与利于压缩模型,因为集合中参数均为0,存储中所占用的内存更少,实际上,却没有降低太多存储内存。
神经网络实现正则化
神经网络的成本函数如下:
其中
如何实现使用该范数实现梯度下降呢?我们用反向传播算法计算出dw的值,backprop会给出j对w的偏导数。如下:
1.5 为什么正则化可以减少过拟合?(why regularization reduce overfitting)
我们先看一下神经网络的代价函数:
我们可以从上述公示中就是如果正则化
1.6 Dropout 正则化(Dropout regularization)
除了L2正则化外,还有一个好方法可以减少过拟合,即dropout(随机失活)。dropout会遍历网络的每一层,并设置消除神经网络中节点的概率,每个节点都以抛硬币的方式设置概率,设置完节点概率,我们会得到一个节点更少,规模更小的网络。如下所示:
1.7 理解dropout(understanding dropout)
上一小节,我们已经对dropout随机删除网络中的神经元有了一个直观了解,好像每次迭代之后,神经网络都会变得比以前更小,因此采用一个较小的神经网络和使用正则化的效果是一样的。第二个直观认识就是我们从单个神经元入手,我们看下面这个单个神经元。
这个单元的工作就是输入并生成一些有意义的输出,通过dropout该单元的某些输入可以被消除,因为输入的神经元可能会被消除,所以我们不愿意把所有赌注都放在某一个节点上,因为可能被删除,因此该单元将通过这种方式积极的传播开,并为单元增加权重,通过传播所有权重dropout将产生收缩权重的平方范数的效果。如下,可以调节每一层的keep-prob.
总结一下:
dropout的功能类似于L2正则化,与L2正则化不同的是,被应用的方式不同,dropout也会有所不同,甚至更适用于不同的范围,实施dropout的另一个细节是其中一个要选择的参数keep-prob他代表每一层保留单元的概率,所以不同的keep-prob也可以变化,dropout主要被应用计算机视觉当中。其次dropout一大缺点就是代价函数J不再被明确定义,每次迭代都会随机移除一些节点。
1.8 归一化输入(Normalizing inputs)
训练神经网络其中一个加速训练的方法就是归一化输入。我们来了解一下,假设我们有一个特征向量,他是二维的,如下:
归一化输入需要两个步骤:第一步就是零均值化,即执行
为什么要进行归一化?
我们先来看代价函数
我们接着来看下面一张图:
如果我们不使用归一化输入的话,它的代价函数将会是上图中左边的样子,他是一个非常细长狭窄的代价函数。而如果使用了归一化,梯度下降法能更简单更快速。如右图所示。
1.9 梯度消失与梯度爆炸 (Vanishing/exploding gradient)
训练神经网络尤其是神经网路所面临的一个问题是梯度消失或梯度爆炸。导数或者坡度会以指数方式变大或变小。为了简单起见,我们以下面的神经网络为例。
由上图可知,如果对于一个深度神经网络来说,L值越大,那么
1.10 梯度检验(Gradient checking)
梯度检验可以帮我节省很多时间,也可以帮我发现backprop中的bug,接下来我们看看如何利用梯度检验来调试或者检验backprop的实施是否正确。假设我们的网络中含有如下参数,我们首先要做的就是把所有参数转换成一个巨大的向量。如下所示:
然后做一个连接运算,得到一个巨型向量
同样地,把
然后我们要做的就是验证这些向量是否彼此接近,具体来说,就是计算两个向量的距离的欧几里得范数。如下所示:
这里先得到欧式距离,然后用向量做归一化,分母是用于预防这些向量太小或太大,我们实际执行这个方程式时,如果发现得到的值为
梯度检验和dropout不能同时使用,因为每次迭代的时候,dropout会随机消除隐藏层单元的不同子集,难以计算dropout在梯度下降上的代价函数J。
- 吴恩达深度学习笔记之改善神经网络(一)
- 吴恩达深度学习笔记之改善神经网络(二)
- 吴恩达深度学习之改善神经网络(三)
- 吴恩达神经网络和深度学习课程自学笔记(一)之深度学习概论
- 神经网络与深度学习_吴恩达 学习笔记(一)
- 吴恩达深度学习入门学习笔记之神经网络和深度学习(第二周:神经网络基础)
- 吴恩达深度学习入门学习笔记之神经网络和深度学习(第二周:神经网络基础)
- 吴恩达《神经网络与深度学习》课程笔记归纳(一)
- 吴恩达深度学习笔记(一)week3 浅层神经网络
- 吴恩达深度学习笔记(一)week4 深层神经网络
- 深度学习笔记(一)---神经网络
- 神经网络与深度学习 笔记 (一)
- 神经网络和深度学习笔记(一)
- 深度学习之神经网络入门(一)
- 吴恩达深度学习课程笔记之神经网络基础
- 吴恩达深度学习笔记之卷积神经网络(卷积网络)
- 吴恩达深度学习笔记之卷积神经网络(实例探究)
- 吴恩达深度学习笔记之卷积神经网络(目标检测)
- 237. Delete Node in a Linked List
- 注册
- LeetCode-94. Binary Tree Inorder Traversal
- JavaScript图片压缩上传
- qmake的使用,如何操作QT命令行
- 吴恩达深度学习笔记之改善神经网络(一)
- E企播报:大数据进化AI决策 阿里云AWS竞相布局
- 封装Okhttp3Util(拦截器)
- FreeRTOS学习--1
- 【反转问题】POJ
- CyclicBarrier 打造一个安全的门禁系统
- 购物车页面
- npm 使用介绍
- 计算机组成原理