吴恩达deep learning ai 笔记总结(2-3) 改善深层神经网络-超参数调试、Batch正则化和编程框架

改善深层神经网络-超参数调试、Batch正则化和编程框架

Tuning Process

深度神经网络需要调试的超参数(Hyperparameters)较多,包括:

  • α:学习因子
  • β:动量梯度下降因子
  • β1,β2,ε:Adam算法参数
  • #layers:神经网络层数
  • #hidden units:各隐藏层神经元个数
  • learning rate decay:学习因子下降参数
  • mini-batch size:批量训练样本包含的样本个数

超参数之间也有重要性差异。通常来说,学习因子α是最重要的超参数,也是需要重点调试的超参数。动量梯度下降因子β、各隐藏层神经元个数#hidden units和mini-batch size的重要性仅次于α。然后就是神经网络层数#layers和学习因子下降参数learning rate decay。最后,Adam算法的三个参数β1,β2,ε一般常设置为0.9,0.999和10−810−8,不需要反复调试。当然,这里超参数重要性的排名并不是绝对的,具体情况,具体分析。

如何选择和调试超参数?

  • 在机器学习领域,超参数比较少的情况下,我们之前利用设置网格点的方式来调试超参数;
  • 但在深度学习领域,超参数较多的情况下,不是设置规则的网格点,而是随机选择点进行调试。这样做是因为在我们处理问题的时候,是无法知道哪个超参数是更重要的,所以随机的方式去测试超参数点的性能,更为合理,这样可以探究更超参数的潜在价值。

随机化选择参数的目的是为了尽可能地得到更多种参数组合。
在经过随机采样之后,我们可能得到某些区域模型的表现较好。然而,为了得到更精确的最佳参数,我们应该继续对选定的区域进行由粗到细的采样(coarse to fine sampling scheme)。也就是放大表现较好的区域,再对此区域做更密集的随机采样。例如,对下图中右下角的方形区域再做25点的随机采样,以获得最佳参数。
在这里插入图片描述

Using an appropriate scale to pick hyperparameters

上一部分讲的调试参数使用随机采样,对于某些超参数是可以进行尺度均匀采样的,但是某些超参数需要选择不同的合适尺度进行随机采样。在超参数选择的时候,一些超参数是在一个范围内进行均匀随机取值,如#layers和#hidden units,都是正整数,是可以进行均匀随机采样的。但是有一些超参数的选择做均匀随机取值是不合适的,这里需要按照一定的比例在不同的小范围内进行均匀随机取值,以学习率α的选择为例,在0.001,…,1范围内进行选择:
在这里插入图片描述
如上图所示,如果在 0.001,…,1 的范围内进行进行均匀随机取值,则有90%的概率 选择范围在 0.1∼1之间,而只有10%的概率才能选择到0.001∼0.1之间,显然是不合理的。

所以在选择的时候,在不同比例范围内进行均匀随机取值,如0.001∼0.001、0.001∼0.01、0.01∼0.1、0.1∼1 范围内选择。

通常的做法是将linear scale转换为log scale,将均匀尺度转化为非均匀尺度,然后再在log scale下进行均匀采样。

一般解法是,如果线性区间为[a, b],令m=log(a),n=log(b),则对应的log区间为[m,n]。对log区间的[m,n]进行随机均匀采样,然后得到的采样值r,最后反推到线性区间,即10r。10r就是最终采样的超参数。

除了αα之外,动量梯度因子ββ也是一样,在超参数调试的时候也需要进行非均匀采样。一般ββ的取值范围在[0.9, 0.999]之间,那么1−β1−β的取值范围就在[0.001, 0.1]之间。那么直接对1−β1−β在[0.001, 0.1]区间内进行log变换即可。

这里解释下为什么ββ也需要向αα那样做非均匀采样。假设ββ从0.9000变化为0.9005,那么11−β11−β基本没有变化。但假设ββ从0.9990变化为0.9995,那么11−β11−β前后差别1000。ββ越接近1,指数加权平均的个数越多,变化越大。所以对ββ接近1的区间,应该采集得更密集一些。

Hyperparameters Tuning in Practice

在超参数调试的实际操作中,我们需要根据我们现有的计算资源来决定以什么样的方式去调试超参数,进而对模型进行改进。下面是不同情况下的两种方式:
在这里插入图片描述

  • 在计算资源有限的情况下,使用第一种Babysitting one model,类比做Panda approach, 仅调试一个模型,每天不断优化;
  • 在计算资源充足的情况下,使用第二种Training many models in parallel,Caviar approach,同时并行调试多个模型,选取其中最好的模型。

使用哪种模型是由计算资源、计算能力所决定的。一般来说,对于非常复杂或者数据量很大的模型,使用Panda approach更多一些。

Normalizing activations in a network

我们已经学习过,在训练神经网络时,标准化输入可以提高训练的速度。方法是对训练数据集进行归一化的操作,即将原始数据减去其均值μ后,再除以其方差。但是标准化输入只是对输入进行了处理,那么对于神经网络,又该如何对各隐藏层的输入进行标准化处理呢?

常用的方式是将隐藏层的经过激活函数前的z[l]进行归一化。

Batch Normalization
对第l层隐藏层的输入Z做如下标准化处理,忽略上标:

在这里插入图片描述
其中,m是单个mini-batch包含样本个数,ε是为了保证数值的稳定。

到这里所有z的分量都是平均值为0和方差为1的分布,但是我们不希望隐藏层的单元总是如此,也许不同的分布会更有意义,所以我们再进行计算:
在这里插入图片描述
这里γ和β是可以更新学习的参数,如神经网络的权重w一样,两个参数的值来确定z˜(i)所属的分布。

Fitting Batch Norm into a neural network

我们已经知道了如何对某单一隐藏层的所有神经元进行Batch Norm,接下来将研究如何把Bath Norm应用到整个神经网络中。

对于L层神经网络,经过Batch Norm的作用,整体流程如下:

在这里插入图片描述
实现梯度下降
在这里插入图片描述
同样与Mini-batch 梯度下降法相同,Batch Norm同样适用于momentum、RMSprop、Adam的梯度下降法来进行参数更新。

Why does Batch Norm work?

我们可以把输入特征做均值为0,方差为1的规范化处理,来加快学习速度。而Batch Norm也是对隐藏层各神经元的输入做类似的规范化处理。总的来说,Batch Norm不仅能够提高神经网络训练速度,而且能让神经网络的权重W的更新更加“稳健”,尤其在深层神经网络中更加明显。比如神经网络很后面的W对前面的W包容性更强,即前面的W的变化对后面W造成的影响很小,整体网络更加健壮。

举个例子来说明,假如用一个浅层神经网络(类似逻辑回归)来训练识别猫的模型。如下图所示,提供的所有猫的训练样本都是黑猫。然后,用这个训练得到的模型来对各种颜色的猫样本进行测试,测试的结果可能并不好。其原因是训练样本不具有一般性(即不是所有的猫都是黑猫),这种训练样本(黑猫)和测试样本(猫)分布的变化称之为covariate shift。

在这里插入图片描述
对于这种情况,如果实际应用的样本与训练样本分布不同,即发生了covariate shift,则一般是要对模型重新进行训练的。在神经网络,尤其是深度神经网络中,covariate shift会导致模型预测效果变差,重新训练的模型各隐藏层的W[l]W[l]和B[l]B[l]均产生偏移、变化。而Batch Norm的作用恰恰是减小covariate shift的影响,让模型变得更加健壮,鲁棒性更强。Batch Norm减少了各层W[l]W[l]、B[l]B[l]之间的耦合性,让各层更加独立,实现自我训练学习的效果。也就是说,如果输入发生covariate shift,那么因为Batch Norm的作用,对个隐藏层输出Z[l]Z[l]进行均值和方差的归一化处理,W[l]W[l]和B[l]B[l]更加稳定,使得原来的模型也有不错的表现。针对上面这个黑猫的例子,如果我们使用深层神经网络,使用Batch Norm,那么该模型对花猫的识别能力应该也是不错的。

另一个原因:Batch Norm 可以加速神经网络训练的原因和输入层的输入特征进行归一化,从而改变Cost function的形状,使得每一次梯度下降都可以更快的接近函数的最小值点,从而加速模型训练过程的原理是有相同的道理。

只是Batch Norm 不是单纯的将输入的特征进行归一化,而是将各个隐藏层的激活函数的激活值进行的归一化,并调整到另外的分布。

Batch Norm也起到轻微的正则化(regularization)效果

  • 每个mini-batch都进行均值为0,方差为1的归一化操作
  • 每个mini-batch中,对各个隐藏层的Z[l]添加了随机噪声,效果类似于Dropout
  • mini-batch越小,正则化效果越明显

但是,Batch Norm的正则化效果比较微弱,正则化也不是Batch Norm的主要功能。

Batch Norm at test time

训练过程中,Batch Norm是对单个mini-batch进行操作的,但在测试过程中,如果是单个样本,该如何使用Batch Norm进行处理呢?

首先,回顾一下训练过程中Batch Norm的主要过程:
在这里插入图片描述
此时,我们需要单独进行估算均值μ和方差σ2。通常的方法就是在我们训练的过程中,对于训练集的Mini-batch,使用指数加权平均,当训练结束的时候,得到指数加权平均(exponentially weighted average)后的均值μ和方差σ2,而这些值直接用于Batch Norm公式的计算,用以对测试样本进行预测。

原文链接:https://blog.csdn.net/koala_tree/article/details/78234830

Softmax Regression

在多分类问题中,有一种 logistic regression的一般形式,叫做Softmax regression。Softmax回归可以将多分类任务的输出转换为各个类别可能的概率,从而将最大的概率值所对应的类别作为输入样本的输出类别。

为了处理多分类问题,我们一般使用Softmax回归模型。Softmax回归模型输出层的激活函数如下所示:
在这里插入图片描述
输出层每个神经元的输出对应属于该类的概率,满足:
在这里插入图片描述

Training a softmax classifier

Sotfmax回归 将 logistic回归 从二分类问题推广到了多分类问题上。
Softmax 的Loss function
在使用Sotfmax层时,对应的目标值y以及训练结束前某次的输出的概率值y^分别为:
在这里插入图片描述
Sotfmax使用的Loss function为:
在这里插入图片描述

在训练过程中,我们的目标是最小化Loss function,由目标值我们可以知道,y1=y3=y4=0,y2=1,所以代入L(y^,y)中,有:

在这里插入图片描述
所以为了最小化Loss function,我们的目标就变成了使得y^2的概率尽可能的大。

对应的Cost function如下:
在这里插入图片描述

Softmax 的梯度下降

在这里插入图片描述

发布了45 篇原创文章 · 获赞 4 · 访问量 2518

猜你喜欢

转载自blog.csdn.net/keke_Memory/article/details/102762486