吴恩达深度学习笔记二:超参数调试、正则化以及优化

这一章主要讲解在实际的神经网络训练过程中,我们应该如何去进行优化处理,这其中就包括了对数据集的分类采集技巧、超参数的调试、正则化处理等。

1.对数据集的分类(训练/验证/测试集)

对大规模数据集分类的一般原则(非必须,只是建议),训练集(training sets)、验证集(development sets)和测试集(test sets)应该取自同一分布,在这基础上,我们一般把收集来的数据的绝大多数用于训练集来训练神经网络,然后取一小部分在验证集上检验网络对这部分数据的预测效果,当神经网络在训练集和验证集上均表现良好时,我们再取一部分未知数据放入神经网络取做预测,看看网络对位置数据的预测效果如何。

 

2.偏差与方差表明的不同问题

在神经网络的训练中,我们会经常提到偏差与方差的概念,若真实值和预测值出现了低偏差高方差的情况,那么说明我们的网络模型对训练集数据产生了过拟合,解决过拟合的方法一般有正则化准备更多的训练数据。若出现了高偏差的情况,那说明梯度下降的迭代次数不够,或者网络模型本身存在问题导致损失函数值没有按预期方向减小。

3.正则化处理(L2正则化、Dropout、其他)

正则化在神经网络中是用来解决高方差(过拟合)问题的一种方法。

正则化就是对最小化经验误差函数(损失函数)上加约束,这样的约束可以解释为先验知识(正则化参数等价于对参数引入先验分布)。约束有引导作用,在优化误差函数的时候倾向于选择满足约束的梯度减少的方向,使最终的解倾向于符合先验知识(如一般的l-norm先验,表示原问题更可能是比较简单的,这样的优化倾向于产生参数值量级小的解,一般对应于稀疏参数的平滑解)。

同时,正则化解决了逆问题的不适定性,产生的解是唯一存在同时也依赖于数据的,噪声对不适定的影响就弱,解就不会过拟合,而且如果先验(正则化)合适,则解就倾向于是符合真解(更不会过拟合了),即使训练集中彼此间不相关的样本数很少。

在实际应用中,有多种进行正则化处理的方法,比如L2正则化、Dropout正则化、其他方法(如增大数据集,假设数据是图片,可以对同一组图片进行旋转、裁剪等微度处理得到冗余数据;此外还有提前停止训练达到正则化效果的手段)

吴恩达深度学习笔记二:超参数调试、正则化以及优化

Dropout正则化处理的过程如下:

①设置一个概率阈值keep_prob= k(k=0%~100%),然后根据这个概率值随机丢弃当前层1-k的隐藏单元(意即这些隐藏单元不参与传播计算)

②在Dropout的基础上进行反向传播得到各层参数的梯度值

③通过梯度下降来更新各参数(由于Dropout消除了部分隐藏单元的权重,因此过拟合的现象会有明显减轻)

 

4.梯度消失与梯度爆炸

 

在深层的神经网络中,经过一层层的传播,难免会出现梯度呈指数级的上升或者下降,这样就有可能出现梯度爆炸或梯度消失的糟糕情况,梯度爆炸引例如下:

吴恩达深度学习笔记二:超参数调试、正则化以及优化

解决方案(随机初始化权重值到一个与网络层数有关的较小的范围):

吴恩达深度学习笔记二:超参数调试、正则化以及优化

 

5.梯度检验

在实施 backprop 时,有一个测试叫作梯度检验,它的作用是确保 backprop 正确实施,因为有时候你虽然写下了这些方程式 却不能 100% 确定,执行backprop 的所有细节都是正确的,为了逐渐实现梯度检验,我们首先说说如何对计算梯度做数值逼近,这一步是为了确定我们的导数是否计算正确,如下图所示:

吴恩达深度学习笔记二:超参数调试、正则化以及优化

计算导数与真实数学求得的导数误差越小,表明正确的可能性越高,否则应该检查自己的程序是否得到了错误地的梯度值。

接下来是梯度检验,这个过程主要用来检验自己构建的神经网络所得到的梯度值是否在按正确的方向逐渐逼近较小的目标函数值。梯度检验的步骤如下:

 

吴恩达深度学习笔记二:超参数调试、正则化以及优化

 

6.梯度下降的优化算法

梯度下降的优化算法主要有Mini-batch gradient descent(对于中间参数的处理可用到指数加权平均数和偏差修正)、动量梯度下降法(即Momentum算法)、RMSprop算法、Adam优化算法等。

吴恩达深度学习笔记二:超参数调试、正则化以及优化

吴恩达深度学习笔记二:超参数调试、正则化以及优化

此外,为了减少人为操作,本章还讲解了一些学习率自动衰减的公式,也就是在训练过程中让学习率随着迭代次数逐渐衰减以达到更好地自动趋近最优目标的效果。

 

7.局部最优问题

在深度学习研究早期,人们总是担心优化算法会困在极差的局部最优,不过随着深度学习理论不断发展,我们对局部最优的理解也发生了改变,我向你展示一下现在我们怎么看局部最优,以及深度学习中的优化问题,这是曾经人们在想到局部最优时,脑海里会出现的图,也许你想优化一些参数,我们把它们称之为W1和W2,平面的高度就是损失函数,在图中,似乎各处都分布着局部最优,梯度下降法,或者某个算法可能困在一个局部最优中,而不会抵达全局最优,如果你要作图计算一个数字,比如说这两个维度,就容易出现,有多个不同局部最优的图,而这些低维的图,曾经影响了我们的理解,但是这些理解并不正确。

吴恩达深度学习笔记二:超参数调试、正则化以及优化

事实上 如果你要创建一个神经网络,通常梯度为零的点,并不是这个图中的局部最优点,实际上成本函数的零梯度点,通常是鞍点。也就是像下图中这个点,这里是W1 W2,高度即成本函数 J 的值,但是一个具有高维空间的函数,若梯度为0,那么在每个方向,它可能是凸函数,也可能是凹函数,如果你在 2万维空间中,那么要想得到局部最优,所有的 2万个方向都需要是这样,但发生的机率也许很小,也许是1/(2^20000)。

吴恩达深度学习笔记二:超参数调试、正则化以及优化

如果局部最优不是问题,那么问题是什么?问题在于梯度下降过程中遇到的平稳段会大幅减小学习效率。首先,你不太可能困在极差的局部最优中,条件是你在训练较大的神经网络,存在大量参数,并且成本函数 J被定义在较高的维度空间;第二,平稳段是一个大问题,这样使得学习十分缓慢,这也是像 Momentum,或是 RmsProp、 Adam 这样的算法,能够加速学习算法的地方,在这些情况下,更成熟的观察算法,如 Adam 算法,能够加快速度,让损失函数尽早往下走出平稳段。

 

8.Batch归一化

Batch归一化会使我们的参数搜索问题变得很容易,使神经网络对超参数的选择更加稳定.超参数的范围会更庞大,工作效果也更好.也会使我们更容易地训练更深层网络.

吴恩达深度学习笔记二:超参数调试、正则化以及优化

对于深层神经网络 ,Batch归一化的计算过程如下图笔记所示:

吴恩达深度学习笔记二:超参数调试、正则化以及优化

吴恩达深度学习笔记二:超参数调试、正则化以及优化

 

9.Softmax Regression

吴恩达深度学习笔记二:超参数调试、正则化以及优化