2.3 超参数调试、Batch正则化和程序框架

 

调试处理

 

在所有参数中,学习率α是最重要的没有之一。其次是β、mini-batch的大小以及隐藏单元的数量。再其次是网络的层数、学习率衰减。如果使用Adam算法,它的β几乎可以使用默认值不变化。当然这是吴恩达的看法,并不是完全绝对的。

 

假设我们有两个超参数,可能会首先想到系统的等间距选择超参数来找到最优值,就像上左图一样。但实际上更推荐用右图的随机取值,因为如果这两个参数是α和epsilon,显然α的选择很重要而epsilon几乎不影响结果,那么如果按照左图中的方法我们只能取到5个不同的α值来训练了25个模型,这是十分浪费的做法,右图的方法却可以选择25个不同的α,这样更可能选择到最优值。

 

另一个常见的做法是使用区域定位的抽样方案。例如在这个二维例子中抽取了这些点,发现其中一个点表现最好,其周围点表现也不错,那么下一步要做的事情应当是在这个区域内进行更密集的取样。

 

为超参数选择合适的范围

实际上随机抽样并不意味着在有效范围内均匀随机抽样,更重要的是选取合适的尺度。假如你现在要选择第l层的隐藏单元的个数n[l],再假设你认为50~100是个不错的范围,你可能会在这个范围内均匀随机取一些值尝试。

 

但以上的方法并不是对所有的参数都适用,比如你正在搜索超参数学习率α,假设它的范围在0.0001~1,如果再用上面的方法我们将会用90%的资源在搜索0.1~1,而只有剩下的10%在0.0001~0.1,这看起来不大对。更合理的方法是用对数尺度而不是线性尺度来搜索,这样你在每个数量级上使用的资源就均匀合理了。下面是对这种方法的Python实现,可以在实践的部分详细关注。

再例如你在搜索β时,假设范围在0.9~0.999之间,那么就应该画一个中间是0.99的数轴,与上面同理。

 

超参数训练:Pandas VS Caviar

深度学习已应用在生活的方方面面,而每个领域适合的超参数可能是不一样的,但也有可能是可以跨领域适应的,例如为计算机视觉训练的模型也很好的适用于演讲。现在许多深度学习的从业者通过其他领域的论文找到灵感,我们对超参数的直觉和思路都应该与时俱进。在很多情况的改变下,例如你的数据中心使用了新的服务器,之前的很多超参数很可能已经成为明日黄花,所以建议隔几个月就重新评估这些超参数。

 

关于如何探寻超参数的问题,有两种主流思想。其中一个是你精心照料一个模型,你需要处理很大的数据集但却没有足够的计算资源,每次只能训练一个或一小部分模型。这种情况下,即使枯燥的训练你也要盯着,你可能会每天对参数微调一下,例如选择更大的学习率或是引入动量方法。另一种计算资源充足的情况下,你可能会同时训练许多个模型,并得到一个如图中右边所示的结果。左边可以比喻为一个熊猫,熊猫产子非常少所以需要精心呵护,右边更像是鱼类的行为所以称之为鱼子酱行为。

 

batch norm(批量归一化)

 

我们之前讲过,对输入的特征数据进行归一化,也就是让机器学习的图形从扁变得更圆一些,这会更利于梯度下降算法的优化。这个方法对于逻辑回归是有用的。对于层数更多的模型,你不仅有输入特征x,在每一层你还有输出的结果a,所以如果你想有效果,就应该对每一层的输出结果进行归一化,这就是对batch norm(批量归一化)简单的解释。

但实际上我们归一化的是激活函数之前的z,对于对z还是a进行归一化学术界有一些争议,但大部分时候还是对z进行归一化。

 

具体实现就是先将某一层的所有z,先计算均值μ,再计算方差σ2。然后对z进行归一化,也就是将每个z减去均值再除以标准差,为避免分母为零还可以加一个epsilon。这样我们就把z归一化为一组均值为0,方差为1的值了。

但我们不希望每一个隐藏层都这样,也许隐藏单元有了不同的分布会有意义。所以我们计算一个新的东西,称之为z~(z头上一个波浪),这里γ和β是模型的学习参数,所以我们使用一些梯度下降或梯度下降的优化算法来学习。注意,γ和β的作用是你可以随意设置z~的平均值,例如你使用sigmoid激活函数,并不希望这一组z均值为0方差为1,这会落在sigmoid的线性部分,并不能发挥出较好的性能。当γ和β等于图中写出的公式时,那z~的作用在于它会精确转化这个方程,z~=z。(我并不知道这句话意味着什么)。

注意这里的参数β与之前优化算法Adam中的β不是同一个,只是这两个方法的作者恰好都使用了β,注意区分。

将Batch Norm拟合进神经网络

 

假设有一个这样的神经网络,我们可以认为每个单元进行着z和a两步的计算。但当我们加入batch norm(BN 批量归一化)后,看第二行的流程图,实际上是加了一项BN,箭头上面的字母表示计算这一步所需要的参数。也就是说,我们的参数从从前的w和b,增加了两个即β和γ。然后我们根据需求优化这些参数,例如可以进行梯度下降,那么我们就会计算dβ,然后更新β。也可以用梯度下降的优化算法来更新参数。当然如果你正在使用深度学习编程框架就不需要自己去实现BN算法。

 

但实际上我们通常用在训练集上的是mini batch BN算法。首先用这幅图上面三行再加深一下理解:横向是在一个mini batch上进行的一次梯度下降,这一次会经历这个神经网络的所有层,每一层参数都不同。但纵向是同一层在不同mini batch上的计算,注意同一层的参数是相同的,在经过不同的mini batch时会对参数进行不同的微调,但依旧是这一层的参数自己。另外,仍需明确w和b是为将上一层喂进来的数据计算成z,β和γ是将z归一化后做一点调整,也就是将z变得更好看一些。

下面写出了计算一次z的详细算法,我们会发现在计算z时使用的参数b无论为何值,在归一化减去均值时都会被减掉,所以可以直接省略参数b。控制偏移量(加任意常数)的功能直接由β代替。

 

为什么BN算法有用

1. 将输入所有的输入特征X都归一化到相同的范围内能够加速学习过程,而BN所做的是调整每个隐藏层的值。

 

 

 

 

2. 能够忽略协变量的影响。例如一个逻辑回归或一个识别猫的神经网络,在左边你用都是黑猫的训练集去训练的模型,在右边的测试集就不好用。再例如上面两幅图,虽然拟合出的曲线一样,但x的分布位置发生了变化,那我们就无法指望左侧拟合出的曲线适用于右侧。所以我们的数据分布随着某种东西的变化我们称之为协变量。

那么在神经网络中,例如对于第三层来说,如果它是第一层(遮住前两层),那么它随着一次次梯度下降,训练后两层的参数,直到找到某种将输入特征(也就是上一层输出的a)映射到y^的方法。但如果再考虑到整个神经网络,前两层也有不断变化着的参数,也就是说第二层的隐藏单元一直在变,其受协方差影响。BN所做的就是减少了这些隐藏单元值分布的不稳定性。也就是说,当前面的层改变时,后面所受的影响更小,它减弱了前面和后面层参数之间的联系,削弱了层与层之间的耦合,使得每一层稍稍独立于其他层,有助于加速整个网络的学习。

 

3.和dropout的效果类似,BN算法具有轻微的正则化效果。因为在每一个mini batch上,在进行BN算法时所计算的均值、方差不过是在一个极小的数据集上计算的,所以它具有一定的噪声,通过在隐藏单元上增加噪声使得后续的隐藏单元不要过度依赖其他隐藏单元,拟合出的模型也不会过度依赖某一组数据。当增加mini batch的大小时,则会有更小的噪声和更弱的正则化效果。注意,一定不能够将BN算法看作一种正则化方法,这里只是讲明BN算法的一点无意的副作用。

测试时的BN

为了在测试时也使用我们的神经网络,我们需要在测试时使用特殊的均值和方差计算方式,因为之前的计算是建立在一个mini batch上的,测试时你很可能没有那么大的数据集。所以当我们在拟合神经网络时,会记录每一次每一层的均值和方差,在测试时使用之前训练时的均值和方差的指数加权平均值。

 

Soft Max 回归

 

这是一种多类别分类器,例如图中我们需要识别猫、狗和小鸡,那么分别将它们成为类别1、2和3,不属于这三类的分为0。那么这种情况下我们构建的神经网络的输出层就应有4个单元,每个单元输出代表的是这个类别的概率,那么输出层y^输出的数据总和应当为1。

 

标准化的做法就是使你的网络使用softmax层,在最后一层计算完以后,使用softmax激活,首先将这几个数都进行指数运算,然后再归一化。也就是右边例如这四个数是5 2 -1 3,先计算t=ez,得到一组向量,再将这一组数除以他们的总和,最后得到的这一组向量四个数就是输出y^。根据我的个人理解,第一步计算首先是让其都大于0,因为要表示概率,然后放在指数上可以放大数与数的差距。第二步运算归一化是变成概率的形式。

 

Softmax这个名字对应的是hardmax,hardmax所做的就是将z的输出中最大的那个置1,其余置0。很明显相比之下,softmax的方法要温和一些。二元分类时我们称之为逻辑回归,如果softmax的输出层元素为2,那么将输出两个概率,例如0.8和0.2,但实际上我们可以简化为只计算其中一个,因为另一个用1减去就可以得到了,那么这其实就是逻辑回归所做的事。所以,softmax实际上可以看作是逻辑回归在多元上的推广。

 

第一行左边的y是一个四维的列向量,表示真值。右边y^也是一样维度的神经网络输出结果。可以看出现在应该是第二个元素应当概率最大,但是y^却只有0.2,那就需要不断的梯度下降来优化他。

中间蓝色大写L定义了损失函数,这是一个求和式,你会发现真值y为0的都没有了,只剩下了真值y为1的那一项,也就是紫色字体写出的,这时若要使损失函数最小化,y^就会尽可能大,也就是是上面紫色圈出0.2会不断变大。

 

反向传播公式。

 

posted @ 2022-04-09 11:27  诸葛村夫CC  阅读(73)  评论(0编辑  收藏  举报