改善深层神经网络:超参数调试、正则化以及优化

改善深层神经网络:超参数调试、正则化以及优化

Improving Deep Neural Networks Hyperparameter tuning, Regularization and Optimization
本章设计超参数调优,如何构建数据,以及如何确保优化算法的快速运行。

神经网路机器学习的问题,然后是随机神经网路

在配置训练,验证和测试数据集的过程中做出正确决策。

数据的分配通常是验证集、测试集和训练集。
一般的话,要保证验证集和测试集来此同一地方,(也就是适用范围较小)

偏差和方差

偏差较高 称为 欠拟合
方差过大 成为 过拟合
差不多 称为 适度拟合
在这里插入图片描述
理解偏差跟方差的关键在于 训练集误差和验证集误差

在这里插入图片描述
通过训练集和验证集的误差来判断偏差和方差。
可以在机器学习的过程中,通过这些基本方法,来优化算法。

  • 先判断偏差高不高,如果偏差较高,尝试评估训练集或者训练数据的性能。如果的确很高,那就要尝试拟合一个新网络。或者增加隐藏网络的层数,反正就是不断尝试迭代,直到拟合。
  • 高偏差对于增加训练集是没有用的,所以如果不够拟合,要判断是高偏差还是高方差的原因。
正则化

解决高方差,最常见的方法可能是
①正则化。
②增加更多的训练数据

正则化: 讲解链接

文章目录
正则化(Regularization)
   稀疏模型与特征选择的关系
L1和L2正则化的直观理解
  正则化和特征选择的关系
    为什么梯度下降的等值线与正则化函数第一次交点是最优解?
  L2正则化和过拟合的关系
正则化参数的选择
  L1正则化参数
  L2正则化参数
Reference

还有一个正则化方法叫做 dropout(随机失活)
好像每次迭代之后神经网络都会变得比以前更小

在这里插入图片描述
也就是随机选取,随机删除
那么如何实施呢?采用反向随机失活(inverted dropout)
keep-prob表示保留某个单元的概率

在这里插入图片描述

  • 最开始设定网络层数和保留概率,
  • 然后将部分的矩阵d【】设置成0,
  • 然后通过a3=d3*a3将a的对应的位置改变成0,
  • 最后再让a3除以keep-prob来保证期望值相同。

测试阶段一般不使用dropout+

dropout不同于L2正则化的地方在于,他可能被应用于不同的输入范围

每层keep-prob的值都可能不同K

dropout一个缺点就是它的代价函数不能被明确定义了

损失函数

损失函数和代价函数代表的一个意思。
在这里插入图片描述

回归问题所对应的损失函数为L2损失函数和L1损失函数
在这里插入图片描述
在这里插入图片描述
通过最小化L2或L1损失对其参数进行估计。
一个是偏差,一个是方差。

其他方法

  • 图片的水平翻转,裁剪图片,通过这些方法扩增数据。进而正则化数据集,减少过拟合比较廉价
  • early Stopping
    可以绘制验证集误差,验证集的代价函数,通常先下降,再上升。
    (自我理解:用来减少过拟合)
    在这里插入图片描述

缺点就是过拟合和J的优化没法同时解决。

配置优化提高训练速度

通过将数据均化零值,如果输入特征在不同的范围内,那么归一化特征值就比较重要了。比如x是1–1000,y是0-1那么可能就需要,
在这里插入图片描述
x,y 的归一化
在这里插入图片描述
3d展示。迭代的学习率的问题,一个需要特别小,导致次数特别多,一个则均匀,无所谓的。

梯度消失或者梯度爆炸

指的就是导数
如何选择随机初始化权重,从而避免这个问题
RELU的初始权重
在这里插入图片描述
tanh和其他方法的初始权重选额
在这里插入图片描述
运行两次单边公差,因为它的结果更准。
也就是实际运行的导数。
结论:双边误差公式的结果更准确。
在这里插入图片描述
** backprop(反向传播) 其实就是求导**

实施梯度检验的技巧和注意事项

  • 首先不要在训练中使用梯度检验它只用于调试
  • 第二点如果算法的梯度桧验失败要检查所有项(也就是说如果dOapprox[i]与O的值相差很大,查看具体的i,看看是哪个元素导致的)
  • 在实施梯度检测时,请注意正则化,代价函数一定要包含正则项。
  • 在这里插入图片描述
  • 第四点梯度检验不能与dropout同时使用

mini-batch梯度下降法

提前把训练集分成小的部分,这些部分叫做mini-batch,
在这里插入图片描述

小括号表示第几个,中括号表示神经网络的第几层,大括号表示第几个mini-batch

batch梯度下降算法就是一次处理所有的数据集,

选择你的mini-batch的大小,

  • 如果训练集较小:直接使用batch算法(《=2000)
  • 一般的mini-batch大小为64—512,一般采用2的次方

深度学习中优化方法

可以看:深度学习中优化方法

指数加权平均

在这里插入图片描述
移动平均值,也就是每一个数是上一个数的代数+最新的数
eg:0.9v1+0.1v2

在这里插入图片描述

也就是可以通过β来计算出这是几天的平均值,如果β是0.9,那么1/(1-0.9)=10,那这个数就是十天的平均值。
通过调整β可以得到不同的值,一个恰当的β往往是重要的。
这是优化算法的关键一环

v t = β v t − 1 + ( 1 − β ) v t {v_t} = \beta {v_{t - 1}} + \left( {1 - \beta } \right){{\rm{v}}_t} vt=βvt1+(1β)vt

从内存和效率上来讲,这是一个性价比比较高的办法,

偏差修正

可以让平均数运行的更加准确。
在这里插入图片描述
如果不用的话,得到的是紫色的曲线,就是一开始的起点基本跟第一个点基本是重合的,甚至前几个点也是一样的。

有一个办法可以处理这个问题,也就是不用v_t而是用v_t除以(1-B^t)

v t 1 − β t \frac{{v_t}}{{1 - {\beta _t}}} 1βtvt
主要用来处理前期数据的。

动量(momentum)

运行速度几乎总是快于标准的梯度下降的
想法:计算梯度的指数加权平均值,并利用该梯度更新你的权重。

在这里插入图片描述
梯度下降算法基本是这样的,这样的形状导致了你无法使用较大的学习率来优化参数,如果使用较大的学习率,那么波动更大。
同时你希望的是,纵轴方式波动比较小,但是横轴方向波动比较大,

人们在使用momentum的时候,不会受到修正偏差的影响,所以
v t 1 − β t \frac{{v_t}}{{1 - {\beta _t}}} 1βtvt
就几乎用不到了。
公式:
在这里插入图片描述

可以看:深度学习中优化方法

RMSprop

在这里插入图片描述
文章有详细的介绍,我这里只说我的补充想法

我们希望S dW会相对较小,所以我们要除以一个较小的数,而希望S db又较大,所阅这里我们要除以较大的数字,这样就河以减缓纵轴上的变化,通过图片可以知道,垂直方向的要比水平方向的大得多,所以斜率在b方向特别大,所以这些微分中,db较大,dw较小,结果就是纵轴的更新被一个较大的数相除,就能消除摆动,而水平方向的更新被一个较小的数相除。

所以你可以使用更大的学习率,而不用担心上下浮动过大
在这里插入图片描述

Adam

将Momentum和RMSprop结合在一起,在这里插入图片描述
一个更新了1,一个更新了2.
还要计算修正偏差。
β_1用于计算这个微分,β_2用来计算平方数的指数力加权平均数,叫做第二矩。

学习率衰减

在这里插入图片描述

如果使用固定的学习率,就会是这样,最后 不会收敛,因为min-batch中有噪音。
看这个

学习率衰减(Learning rate decay)

还有一个局部最优的问题,这也是当前需要考虑的问题。

week2的第十题不太懂

超参数调试设置
超参数中,

  • 1、学习率更为重要
  • 2、 momentum β 、mini-batch大小、隐藏单元数量
  • 3、选择层数,学习率衰退
  • -4、 β1、β2、ε一般都是默认值,不用怎么动的。

采取的策略:随机取值和精确搜索
考虑使用由粗糙到精细的搜索过程,随机取值可以提升你的搜索效率,随机取值也是选取合适的指标来的。
在这里插入图片描述
如果是这样,那么随机均匀取值是合理的,但是如果是这样

在这里插入图片描述

如果采用随机均匀取值的话,那么0.001—1之间,90%的数字都会落在0.1-0.9之间,那么显然是不太合理的。使用的不是线性轴,分别取值0.001,0.01,0.1,1,然后对数均匀取值,
用对数标展搜索超参数的方武会更合理

如何组建超参数搜索过程
鱼子酱模式的训练和熊猫方式的训练
在这里插入图片描述

batch归一化

在深度学习兴起后,最重要的一个思想是一个算法-Batch归一化,由Sergey Ioffe和Christian Szegedy两位研究者创造。Batch归一化会使参数搜索问题变得很容易,使神经网络对超参数的旋转更加稳定,超参数的范围会更庞大,工作效果也很好。
在逻辑回归中,我们学过归一化输入会让算法运行的更好。
在这里插入图片描述
那么我们可不可以归一化每一层的a来使得下一次的参数训练的更好呢?简单来说,Batch归一化做的就是这个事情。严格的说,归一化的不是a而是z。
归一化的过程如下:
在这里插入图片描述
前三个公式让z的每一个分量都含有平均值0和方差1,但我们不想让隐藏单元总是含有平均值0和方差1,也许隐藏单元有了不同的分布会有意义,所以有了第四个公式。 注意, γ \gamma γ 和β是模型的学习参数,他们的作用是允许我们可以随意设置 z ~ \tilde z z~的平均值,事实上,如果 γ = σ 2 + ε \gamma = \sqrt {{\sigma ^2} + \varepsilon} γ=σ2+ε β = − μ \beta = - \mu β=μ z ~ ( i ) = z ( i ) {\tilde z^{(i)}} = {z^{(i)}} z~(i)=z(i)。通过对 γ \gamma γ 和β合理设定,可以使你构造含其他平均值和方差的隐藏单元值。于是,我们将会使用 z ~ ( i ) {\tilde z^{(i)}} z~(i)来替代 z ( i ) {z^{(i)}} z(i),方便神经网络中的后续计算。

怎么将bantch归一化加到神经网络中呢?

在这里插入图片描述
Batch归—化是发生在计算z和a之间的
bantch归一化在深度学习中,通常是一行代码!!

关于如何用Batch图一化来应用梯度下降法
假设你在使用min-batch算法

详细的算法步骤

batch归一化

batch归一化2

那么batch归一化为什么会有效呢?
首先,从之前的输入特征归一化可以看到,它可以将不同参数的范围变换到相似的范围,可以加速学习。但是batch归一化不仅仅是对输入值,而且还对隐藏单元进行归一化。
第二个原因是,它可以使权重比你的网络更滞后或更深层。比如第10层的权重比第一层的权重更能经受的住变化。这是什么意思呢?下面给出一个生动形象的例子。
对于下面这个猫脸识别的神经网路,可能是深层也可能是浅层。假设你已经在所有黑猫的图像上训练了数据集,如果现在你要把此网路应用于有色猫,这种情况下,正面的例子不仅是黑色猫还有有色猫。那么你的cosfa可能适用的不会很好(cosfa是啥意思?是classify吗?)。如果在黑猫图像中,你的训练集是一种情况,加上有色猫以后,如果你试图把黑猫和有色猫统一与一个数据集,那么你就不应该期待左边训练很好的模块同样在右边也运行的很好。
在这里插入图片描述
所以,使你的数据分布改变的想法有个有点怪的名字-covariate shift。如果你已经学习了x->y的映射,如果x的分布改变了,那么你可能需要重新训练你的学习算法。covariate shift的问题怎么应用于神经网络呢?
让我们从第三层来看看神经网络的学习过程。假如此网络已经学习了参数w3,b3,从第三隐藏层的角度来看,它从前层中取一些值,然后做些什么希望使输出值\hat\hat接近于真实值y。

协变量偏移(Covariate Shift)

Batchl图一化将你的数据以mini-batch的形式逐一处理,但在测试时你可能需要对每一个样本逐一处理,

sofatmax回归

能能让你在试图识别某一分类时做出预测,或者说是多种分类中的一个不只是识别两个分类,
在这里插入图片描述

softmax讲解

softmax需要输入个向量最后输出一个向量

深度学习的框架:
在这里插入图片描述

TensorFlow框架

梯度下降算法讲解

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值