Deep Learning Specialization课程笔记——正则化和最优化

Machine Learning Application

本周学习如何在实际运用中使神经网络高效工作。

训练神经网络,你必须做很多决定:神经网络多少层?每层多少隐藏单元?学习速率多少?用什么激活函数?而这些超参数并不常常一次性猜中,所以需要idea->code->experiment的不断循环。

关于测试集大小问题:当数据量巨大时,测试集所占比例可以变小(如30%->10%)

另一个准则是:尽可能确保开发集(Dev sets,交叉验证集)和测试集数据分布相同。这样能更好的加快算法进步速度。

之后讲了“偏差-方差困境(偏差-方差均衡)”,这个之前比较熟悉,不赘述。

若train set error和dev set error都大,是欠拟合,高偏差;

若train set error小,dev set error大,是过拟合,高方差。

下图的紫色线条显示了一种既高偏差,又高方差的情况:


High bias解决办法:bigger network,train longer,change NN architecture;

High variance解决办法:more data,regularization,change NN architecture。


Regularization

正则化是解决过拟合的一个可靠办法

那么我们来看正则化是如何生效的?

以逻辑回归为例:J为最小化代价函数,lamda为正则化参数,该函数是每一个训练样本的预测损失之和。公式为:


那么为什么只对w进行正则化,而不对b这样呢?

答:也可以这样,但实际问题中w往往是高维参数矢量,而b是单数字,实际上不会起太大作用

那么在神经网络中呢?这时||w||^2不再叫做第二范数,而被称为“Frobenius norm”,它表示矩阵中元素的平方和


那么是如何进行梯度下降的呢?

我们知道,在添加正则项之前,使用的方法是在后向传播中求dw=dJ/dw,之后对w进行更新。

那么在添加了正则项之后,相当于求导时加上了lamda/m*w^[l]项,如下图所示:


由于dw的值会变大,所以w的值会变得更小,可以起到权重衰减的作用。

那么为什么正则化可以防止过拟合?

一个直观的理解是:当把正则项设的很大时,权重矩阵w会被设置的接近0,相当于把很多隐藏单元的权重设置的接近0,而导致这些隐藏单元的影响被消除了,使得神经网络得到了简化


或者说,如果w很小,会使得z=w*a+b很小,在g(z)=tanh(z)中为线性函数,整个网络接近线性网络,不能计算很复杂的非线性函数,因此就不大容易发生过拟合。

接下来介绍dropout regularization(随机失活正则化),它是除了L2正则化以外,另一种非常强大的正则化技术。

它指的是:我们网络中的每一层,对每一个节点做一次公平投币,使得这个节点有50%的几率被保留,50%的几率被丢弃。


这里展示随机失活中最常用的一种:inverted dropout(反向随机失活)

其中keep.prob表示给定隐藏单元将被保留的概率值,d3是对a3中的值随机选取其中的keep.prob置true,其余(1-keep.prob)置false,第二步对a3进行更新,第三步是为了提供(1-keep.prob)的校正值,从而不改变a3的期望值:


要注意的是在测试阶段不使用随机算法,因为这时并不想让输出也是随机的,只会为预测增加噪声

在dropout中,可以为每一层设置不同的留存率,也可以为输入设置留存率,舍弃掉一些输入项,但实际操作中,通常取输入项留存率为1。

除了L2和dropout以外,还可以使用其他的方法减少过拟合,包括:

增加训练数据:比如把图片水平翻转,随机裁剪,扭曲变换(在不改变图片信息本质,如猫的图片 的前提下),这些额外的伪训练样本增加的信息量不如随机样本,但这是一个廉价的方式(只需要一些计算代价)。

early stopping:在神经网络表现最好的那次迭代附近停止。


原因是刚开始迭代时w接近0(随机初始化),之后w开始变大,这时要求在一个不大不小的w处终止。

Early stopping的一个很大的缺点对于一个算法,我们希望能够优化成本函数J,然后避免过拟合。这是两项完全不同的任务,early stopping没有办法分开解决这两个问题。


Optimization

训练神经网络时,有一种加速训练的方法是对输入进行归一化(normalization),这包含两个步骤:1.均值归0;2.方差归一化

为什么要归一化呢?不然代价函数可能会出现左边的情况,梯度下降只能使用小的学习率:


对于权重指数w,若其值皆大于1,那么在一个非常深的网络,激活函数就会爆炸;若小于1,激活函数则会指数级的减少。

初始化单个神经元,其中左边是ReLu的形式


梯度检验(Grad check):






猜你喜欢

转载自blog.csdn.net/weixin_37805505/article/details/79901689