吴恩达深度学习 第二课第三周:超参数调试、Batch正则化和程序框架


机器学习、深度学习、相关论文

3.1 调试处理

关于超参数的重要性:
学习率 α > m o m e n t u m \alpha > momentum α>momentum参数 β \beta β和隐藏层大小hidden units和mini-batch-size > Adam参数和学习率decay, β \beta β默认值经常为0.9,关于Adam算法通常默认是 β 1 = 0.9 , β = 0.999 和 1 0 − 8 \beta_1=0.9,\beta=0.999和10^{-8} β1=0.9β=0.999108
在尝试超参数时:

  1. 建议随机选择点,如图二,因为我们很难提前知道哪个超参数重要,而某些超参数的确比其它的重要。比如说有两个参数,极限来看,如果一个参数根本不重要,而另外一个参数按照图示只尝试了5次,相比而言,随机取数效果要更好,因为可以尝试25个不同的值。
  2. 超参数的取值的规则是由粗糙到精细,逐步细化。

3.2 为超参数选择合适的范围

超参数应该选择的标尺:
以学习率为例,如果你认为超参数在0.0001到1之间,均匀取值的话你会发现0.1到1占据了90%,而0.0001到0.1只占了10%,这显然不合理。我们可以应用python的随机函数
r = -4*np.random.rand(),取得 1 0 − 4 到 1 0 0 10^{-4}到10^{0} 104100然后我们在每个均匀区间内为上述超参数取值。总结一下,就是对所取得数取对数,例如 1 0 a 到 1 0 b 10^a到10^b 10a10b,取对数后获取的区间 [ a , b ] [a,b] [a,b],就是我们随机的标尺的区间。
同样理解在给 β \beta β取值时从0.9到0.999,考虑这个问题我们可以看 1 − β 1-\beta 1β,在0.001到0.1间,因为我们要在 [ − 3 , − 1 ] [-3,-1] [3,1]随机取r值,那么 β = 1 − 1 0 r \beta=1-10^r β=110r,然后就变成了在特定的区间内均匀取值。之所以按照标尺来取值,对于 β \beta β而言,越靠近1,带来的影响越大,平均天数可近似看做 1 1 − β \frac{1}{1-\beta} 1β1,当 β \beta β接近1时,就会对细微的变化变得敏感。

3.3 超参数调试的实践

一种方式是pandas,在计算资源不足的情况下,照看一种模型,每天做调试。
另一种方式是同时实验多种模型,多个模型平行实验,当具有充足的计算资源时建议选择此方法。

3.4 归一化网络的激活函数

是指对函数的输入,做减去均值除以方差,类似于之前介绍的在做数据预处理时,可以将学习问题的轮廓变得额更圆便于梯度下降。

关于从 z [ l ] ( i ) z^{[l](i)} z[l](i)还是从激活值a做均一化,尚有争议,本文建议从 z [ l ] ( i ) z^{[l](i)} z[l](i)做归一化。
当我们对 z [ l ] ( i ) z^{[l](i)} z[l](i)值做标准化后,均值为0方差为1,我们不会想让隐藏单元总是标准分布,因为可能不同分布会有其他的意义,因为我们对 z [ l ] ( i ) z^{[l](i)} z[l](i)做处理,新的 z [ l ] ( i ) = γ z n o r m i + β , γ 和 β z^{[l](i)}=\gamma{z_{norm}^{i}}+\beta,\gamma和\beta z[l](i)=γznormi+β,γβ是我们要学习的参数,事实上, γ 和 β \gamma和\beta γβ分别等于标准化时的方差和均值时,新的 z [ l ] ( i ) z^{[l](i)} z[l](i)值就等于标准化前的 z n o r m [ l ] i z_{norm}^{[l]{i}} znorm[l]i。因为,当对 γ 和 β \gamma和\beta γβ赋予不同的值,就可以构造其他的不同分布,或者说,通过变化 γ 和 β \gamma和\beta γβ可以变化隐藏单元的平均值和方差。

1. β \beta β不同于Momentum中的超参数。
2. 归一化是对一个mini batch进行操作,单位是一个神经层, γ 和 β \gamma和\beta γβ和b的维度相同 ( n [ l ] , 1 ) (n^{[l]},1) (n[l],1)
3. 你也许不想隐藏单元值均值0方差1,比如你有sigmoid激活函数,你不想你的值都集中在0.5附近,想要更大的方差来更好的利用sigmoid激活函数。

3.5 将batch norm拟合到神经网络中

应用batch norm后的传播图,在反向传播时,我们会更新 β \beta β的参数,可以利用梯度下降、Momentum、Adam等方法。

在tensorflow,我们可以方便的调用tf.nn.batch_normalization来实现归一化
在batch归一化后,b的值应该去掉,因为均一化会使得数据具有相同的均值,而b便不再具有意义,通过缩放的参数 β \beta β取代了b的作用
l层 z [ l ] z^{[l]} z[l] b [ l ] b^{[l]} b[l]的维数相同,都为 ( n [ l ] , 1 ) (n^{[l]},1) (n[l],1) n [ l ] n^{[l]} n[l]等于隐藏层的个数。
反向传播时,可以将B-N看做一层,也要计算 γ 和 β \gamma和\beta γβ的梯度并更新。
在这里插入图片描述
在这里插入图片描述

3.6 batch norm为什么效果显著

第一点,类似于数据预处理,可以让特征在相同的范围学习。
第二点,使权重比你的网络更滞后。举个列子,类似于从训练的无色猫到测试的有色猫,batch norm相当于做了一个映射,通过指定每一层输入的分布,限制了前一层的表达性,但增加了后续学习的健壮性(最后一层是否应用batch norm?),减弱了前后层的联系,增强了每一层的学习独立。
第三点,batch norm同时有轻微的正则化效果,因为batch norm是在一个mini batch进行的,会有一定的噪声,通过均值和方差来进行缩放的,和dropout类似,它往每个激活层增加了噪音,使得学习过程不依赖于任何一个隐藏单元。因而会有这样一种情况,当你应用一个较大的mini batch时,减少了噪音,因而减少了正则化效果,这是dropout一个奇怪的性质。

3.7 测试时的batch norm

测试时,我们可能不能将一个mini batch 的大数量样本同时处理,我们可能会对每个样本逐一处理。我们需要其他方式估算均值和方差,这里用到指数加权平均。
在这里插入图片描述
通过训练集某一层每一个mini btach的(均值和方差)的滑动平均值,利用最后一个mini batch的均值和方差,作为测试集上的均值和方差的估计,然后只需要通过在这里插入图片描述这一点可以利用tenssorflow的滑动平均模块实现。

本文参考:
第三周 超参数调试、Batch正则化和程序框架

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值