Course 2-Improving Deep Neural Networks--Week 3

来源:互联网 发布:hiddns域名注册 编辑:程序博客网 时间:2024/06/05 05:28

超参数调试 、batch normalization 、deep learning framework

3.1 tuning process

在调参时,有些参数会比其他参数重要的多,以下列出一些调参的guidelines:

1、最重要的参数:学习率α
2、次重要的参数:momentum中的β(0.9就不错)、#hidden units、mini-batch size
3、再次重要的参数:#layers、learning rate decay、Adam中的β1β2ε(事实上Ng从来不调Adam中的参数,总是让他们等于0.9、0.99、1e-8)

如何系统的组织超参数搜索过程?
1、在参数空间随机选取参数,这样可以尝试不同的参数,从而确定哪一组参数最好。
2、由粗到细的搜索参数。首先在参数空间随机粗略的选取,确定哪一组性能好,然后再最优参数的周围,更密集的采样,选取参数。

3.2 using an appropriate scale to pick hyperparameters

随机采样,并不意味着随机均匀采样,而是选取合适的尺度或标尺来采样,本小节将讨论这个问题。
对于有些参数,如#hidden units、layers,它们用随机均匀采样是可以的。
但是,对于学习率α,若我们想在0.0001~1这个区间取值,如果我们随机均匀采样,那么我们将投入90%的资源在0.1~1这个区间内搜索,仅剩10%的资源在0.0001~0.1的区间内搜索,这样显然不太合理。这时,我们考虑用对数坐标,将0.0001~1转化为-4~0,对于0.0001~0.001就有了更多的搜索资源可用。在-4~0之间随机平均采样,然后得到α的值,该计算在Python中可以这样实现:

r=-4*np.random.rand()learning_rate = 10**r ##learning_rate = np.power(10,r)

3.3 调参实践

如果计算资源比较紧张,就用方法一;如果计算资源丰富,就用方法二。
方法一:每次只训练一个模型,不断地调试。
方法二:每次训练多个模型,设置不同的参数,看那个参数集合效果好。

3.4 normalizing activations in a network

batch normalization 使得参数搜索问题更简单,也使得模型更鲁棒,还会使你更容易的训练深层次网络。
batch normalization 原理:
在logistics regression中,介绍了标准化输入可以加速模型训练。那么,在深层次的网络中,我们除了标准化输入X外,是否还可以标准化隐含层的输入A呢?这就是batch normalization的思想。实际中,我们标准化的是激活函数的输入Z。关于到底标准化A还是Z,在学术界还是有争论的,但Ng推荐标准化Z。有时,我们希望Z的分布不全是0均值、1方差,Z若有其他的分布,可能会具有更好的效果。实现如下:
这里写图片描述
上图左边的四个公式就是batch normalization的具体实现,这里的γβ是模型要学习的参数,它们分别控制了新分布的标准差和均值。因此,batch normalization不光可以标准化输入X,还可以标准化或者改变隐藏层中的Z,使每层的输入是我们想要的分布。

3.5 fitting batch norm into a neural network

本小节描述在神经网络中怎么实现batch normalization。如下图所示,在每一个隐层中,当计算得到Z后,我们先不直接计算A,而是使用batch normalization,通过参数βγ,计算得到Z~,然后将Z~作为激活函数的输入得到A。
这里写图片描述
当使用了batch normalization后,我们算法的参数有W、b、βγ。这里的参数β和momentum中的超参数β是完全不同的两个参数。无论使用哪一种优化算法,在做参数更新的时候,βγ的更新方法与W和b的更新方法相同
在实践中,batch norm经常和训练集的mini-batch一起使用。实现时,在每一个mini-batch X{t}上,逐层计算包括ZZ~A在内的前向传播、后项传播以及参数更新,来完成一步梯度下降。
这里写图片描述
在实现时,有一点要注意,因为Z=Wa+b,在我们计算Z~时,要先将Z标准化,即转化为0均值、1方差,再用γβ缩放。这样,即便我们在计算Z时,加上了b,在计算均值的步骤中也要减去,因此,在实际中运用batch norm时,我们都忽略参数b,使Z=Wa
还有一点是,β[l]γ[l]的维度与Z[l]相同,都是(n[l],1)
最后再总结下在gradient descent中如何使用batch norm,如下图中所示。其中,优化算法不一定要用梯度下降法,还可以使用momentum、RMSprop、Adam等等。
这里写图片描述

3.6 why does batch norm work?

first
与标准化输入差不多,batch norm通过将隐藏层中输入的各个维度的特征调整到差不多的范围,可以加快学习速率。
second
batch norm使得神经网络中更深层的权重比前面隐层中的权重对变化更具有鲁棒性。如何理解这句话呢?举个例子:在猫脸识别问题上,我们的训练集是黑猫VS非猫,但是训练完成后,我们的测试集是包含有其他颜色猫的图像,这时候模型可能就无法工作的很好。也就是说,若我们的训练集数据只能表达出我们想要模式的一部分(其他的部分模式在测试机数据中),那么我们就无法期望在训练数据集上性能表现良好的模型在测试集上也表现的很好。如下图所示,绿色的曲线表示我们想要的模式,左图表示训练数据能表达的模式,其分界线很可能是一条直线,而右图表示测试数据的分布,它含有左图数据表达不了的模式,显然能把左图数据分开的分界线是无法正确分开右图中的数据的。
这里写图片描述
这样,从左图到右图,数据的分布变了,这种现象有个名字,叫covariate shift。思想是,如果已经学习了从X到Y的映射,但是后来X的分布改变了,那么就需要重新学习算法了,即便ground truth function没有改变(如图中绿色曲线所示)。
那么,covariate shift 问题怎样应用于神经网络呢?
这里写图片描述
对于上图所示神经网络,我们考虑第3层,它的输入是[a[2]1,a[2]2,a[2]3,a[2]4],但是在这之前,如果W[1]b[1]W[2]b[1]这些参数改变了,[a[2]1,a[2]2,a[2]3,a[2]4]同样也会发生变化。那么,从第3层的角度来看,它的输入总是在发生变化,所以,它就有了covariate shift问题。
而batch norm所做的就是减少了隐藏单元变量分布的数量。即[z[2]1,z[2]2,z[2]3,z[2]4]确实会在模型更新参数时不断变化,但batch norm可以确保,无论它怎么变化,各个分量的分布都是0均值、1方差,或者是由β[2]γ[2]决定的。这样做限制了前层参数更新的数量,影响了数值的分布。因此,batch norm 减少了隐层输入数据的变化问题,使它们变得更稳定,这样后面的隐层就有了更坚实的基础。它使得层与层之间更加独立,从而加速了整个网络的学习。
batch norm还有轻微的正则化的作用
这里写图片描述
由于均值和方差不是在完整的训练集上计算的,因此,这样的结果有点小噪声,那么从ZZ~的过程中也会有小噪声,这样就与dropout相似了,因为dropout产生噪声的方式就是使一个隐藏的单元以一定的概率乘以0。正因为这些噪声的存在,它使得后面的隐藏单元不过分依赖任何一个隐藏单元。因为噪声很小,所以正则化的效果并不明显,因此可以将batch norm 和 dropout同时使用。另外,当mini-batch size较大时,噪声就会减小,正则化效果也会减弱。

3.7 batch norm at test time

前面介绍了batch norm每次针对一个mini-batch计算均值和方差,但是,当我们在测试模型或使用模型做预测的时候,我们每次只输入一个数据点,这时候,我们怎么得到batch norm所需要的均值和方差呢?
典型的batch norm实现中,使用指数加权平均来估计均值和方差。具体的,对于mini-batch X{1},X{2},X{3}...,它们在第l层上有均值 μ{1}[l],μ{2}[l],μ{3}[l]...,可以利用指数加权平均得到第l层上的均值估值μ[l],第l层上的方差估值σ2[l]计算方法类似。
这里写图片描述
估计batch norm中每层Z的均值和方差方法有很多,并不局限于上面提到的这种。但很多深度学习框架中,也有很多不错的估计方法,都能得到不错的结果。
batch norm的应用,使得我们可以构建更深的神经网络,也使得我们的学习算法可以学习的更快。

3.8 多类分类——softmax

softmax的计算过程如下图所示:一般在网络的最后一层,按照之前一样计算Z,然后,我们需要一个临时变量t,保存对Z逐元素进行指数操作后的结果,然后得到a
这里写图片描述
之前已经学习到,logistic regression的分类面是线性的,那么,没有隐含层的softmax分类面是什么样的呢?下图画出了多类情况下,softmax的分类面。
这里写图片描述

3.9 train a softmax classifier

softmax的实现流程如下图左部分所示。其中,与softmax相对应的是“hardmax”:将向量中最大的元素映射为1,其余映射为0。
这里写图片描述
那么,softmax的损失函数又是什么样子的呢?如下图中间部分所示。同时还要明确,如果softmax是个四类问题,那么YY^就是4*m的矩阵。
这里写图片描述
使用softmax层怎样实现梯度下降法?如下图所示,我们需要知道dZ[L]=y^y,其他的求导方法就和以前一样了。
这里写图片描述

3.10 deep learning frameworks

这里写图片描述

3.11 TensorFlow

这里写图片描述

阅读全文
0 0