改善深层神经网络:超参数调试、正则化以及优化(三)- 超参数调试、Batch正则化和程序框架

本次学习笔记主要记录学习深度学习时的各种记录,包括吴恩达老师视频学习、花书。作者能力有限,如有错误等,望联系修改,非常感谢!


第一版       2022-05-23        初稿

一、调试处理(Tuning process)

在这里插入图片描述
如图最重要的是学习率α,其次黄框,接着是紫框,β1,β2,ε选为0.9、0.999和10-8
在这里插入图片描述
在深度学习中,常用做法是随机选择点,因为对要解决的问题,很难知道哪个超参数更重要。
假如三个超参数,搜索的是一个立方体,要试验更多值。
在这里插入图片描述
由粗糙到精细的策略:
在二维例子中取值,会发现效果最好的某点,也许其周围效果也好,放大这块区域,在其中更密集的取值或随机取值,聚集更多的资源。若怀疑超参数在这区域的效果,可在整个方格粗略搜索后,应聚集到更小的方格中。

二、为超参数选择合适的范围(Using an appropriate scale to pick hyperparaqmeters)

在这里插入图片描述
随机取值提升了搜索效率,但不是在有效范围内的随机均匀取值,而是选择合适的标尺。
或 选取神经网络的层数,称为L
在这里插入图片描述
假设在搜索α,从0.0001到1的数轴,有90%的数值将落在0.1到1之间。
反而用数标尺搜索更合理,分别依次取0.0001,0.001,0.01,0.1,1。

总结:
在对数坐标下取值,取最小值的对数就得到a的值,取最大值的对数就得到b值,所以现在对数轴上的10a到10b区间取值,在a,b间随意均匀的选取r值,将超参数设为10r,这就是对数轴上取值过程。
在这里插入图片描述
最后是给β取值,用于计算指数的加权平均值。假定在0.9到0.999之间,0.9类似10个值取平均值。

为什么线性轴不是好办法?因为当β接近1时,所的结果的灵敏度会变化。

三、超参数调试实践:Pandas vs Caviar(Hyper)

在这里插入图片描述
可能数据中心更新了服务器,原来的参数设定可能不好用,至少每隔几个月一次。
在这里插入图片描述
1.一个模型,通常有庞大的数据组,但没许多计算资源或足够的CPU和GPU,只负担起一小批模型,可以逐渐改良, 比如:第0天,随机参数初始化,观察曲线,第1天末可能学习不错,然后试着增加学习率,两天后依旧不错,每天观察模型。

2.同时试验多种模型,最后选择工作效果最好的那个

四、归一化网络的激活函数(Normalizing activations in a network)

在这里插入图片描述
Batch归一化,μ平均值,训练集减平均值,计算方差接着根据方差归一化数据集。

对更深层的网络,如归一化a[2]的值,更快速度训练w[3],b[3],严格说,真正归一化的是z[2]
在这里插入图片描述
假设有些隐藏单元值,如图是针对l层,但省去l。
我们不想让隐藏单元总含有平均值0和方差1,也许隐藏单元有了不同的分布会有意义,称z{i},会用梯度下降来更新γ和β。

如,有sigmoid激活函数,不想让值总全集中在这,想使它们有更大的方差,或不是0的平均值,以便利用非线性sigmoid函数。所以,γ和β真正作用使隐藏单元值的均值和方差标准化,

五、将Batch Norm拟合进神经网络(Fitting Batch Norm into a neural network)

在这里插入图片描述
可认为每个单元负责计算两件事,第一先计算z,然后应用到激活函数中计算a。
Batch归一化是将z[1]值进行Batch归一化,简称BN,由β和γ控制。

接下来是由a计算z,做与第一层类似操作…

此处β和前面计算指数加权平均的β无关系,更新dβ,可以用Adam或RMSprop或Momentum来更新β和γ。
在深度学习框架中,一行代码可以搞定Batch归一化。
在这里插入图片描述
首先mini-batchX[1],然后计算z[1]

注意计算z的方式,但 Batch 归一化做的是,它要看这个mini-batch,先将z归一化,结果为均值0和标准方差,再由β和γ重缩放,但这意味着,无论b的值是多少,都是要被减去的,因为在 Batch 归一化的过程中,你要计算z的均值,再减去平均值,在此例中的mini-batch 中增加任何常数,数值都不会改变,因为加上的任何常数都将会被均值减去所抵消。 所以在Batchguiyihua 可以消除b或设为0。

在这里插入图片描述
总结:关于如何用 Batch 归一化来应用梯度下降法
假设你在使用 mini-batch 梯度下降法,你运行t =1到batch 数量的for 循环,你会在mini-batch X{t} 上应用正向 prop,每个隐藏层都应用正向 prop,用 Batch 归一化代替z为z帽。接下来,它确保在这个mini-batch 中,z值有归一化的均值和方差,归一化均值和方差后是z帽,然后,你用反向 prop 计算dw和db,及所有l层所有的参数,dβ和dγ。尽管严格来说,要去掉db。最后,你更新这些参数:W、β、γ

六、Batch Norm为什么奏效(Why does Batch Norm work?)

在这里插入图片描述
1.归一化不仅仅对于这里的输入值,还有隐藏单元的值,都可以从0到1,加速学习
2.它可以使权重比你的网络更滞后或更深层,如图例子,使数据改变分布的想法,名为“Cobariate shift”,即若已经学到x到y的映射,x分布改变,可能需要重新训练学习算法。
在这里插入图片描述
从第三层看学习过程,已经学习了参数w[3]和b[3],接下来需要什么使得y帽接近真实值y。 从第三层隐藏层角度看,这些隐藏单元的值不断改变。

batch归一化做的是,减少了这些隐藏值分布变化的数量。如图下方,讲的是z1,z2的值可以改变,batch归一化确保无论怎样变化,z1,z2的均值和方差保持不变。可以强制均值和方差,但限制了前层的参数更新,会影响数值分布的程度。

batch归一化减少了输入值改变的问题。它做的是当前层保持学习,改变时,迫使后层适应的程度减小。

batch归一化还有轻微的正则化效果,mini-batch上均值和方差会有些小噪声。
在这里插入图片描述
1.batch归一化含有几重噪声,因为标准偏差的缩放和减去均值带来的额外噪音。可将batch归一化和dropout一起使用。
2.若应用了较大的mini-batch,减少了噪声,因此减少了正则化效果,是dropout一个奇怪的性质。

七、测试时的Batch Norm(Batch Norm at test time)

在这里插入图片描述
m表示这个mini-batch中的样本数量。加上ε是为了数值稳定性。

为了神经网络运用于测试,需单独估算均值和方差,batch归一化中需要一个指数加权平均来估算。
最后在测试,归一化得z。

八、softmax回归(softmax regression)

在这里插入图片描述
二分分类只有两种可能的标记0或1,而softmax回归有多种可能。猫1,狗2,小鸡3,其他0。
用C表示输入会被分入的类别总个数。
在这里插入图片描述
如图神经网络,输出层有4个,我们想让这四层告诉我们四种类型中每个的概率大小。

接下看softmax式子写出来看看,临时变量t。右侧为例子。
softmax激活函数特殊之处在于,因为需要将所有可能的输出归一化,就需要输入一个向量,最后输出一个向量。
在这里插入图片描述
上边三个是3个线性决策边界。
C=4、C=5、C=6,显示了softmax分类器在没有隐藏层的情况下能做的事。

九、训练一个softmax分类器(Training a softmax classfier)

在这里插入图片描述
注意到最大元素是5,而最大概率也是第一种概率。
softmax名称来源于hardmax。C=2,softmax回归实际上变回了logistic回归。
在这里插入图片描述
梯度下降法是用来减少训练集的损失的,要使它变小的唯一方式就是使-logy帽变小,那么需要y帽尽可能大,但不会比1大。
在这里插入图片描述
输出层会计算z[l],它是C x 1维的。

十、深度学习框架(Deep Learning frameworks)

在这里插入图片描述
选择深度学习框架:
1.便于编程
2.运行速度

十一、TensorFlow

在这里插入图片描述
如图的损失函数,用TensorFlow最小化
在这里插入图片描述
学习率0.01

1


  1. 深度学习-吴恩达 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值