吴恩达深度学习专项课程2学习笔记/week1/Regularization
Regularization
L2 Regularization
在cost function后加一个L2范数项(对于矩阵来说为Forbenius norm,为\(\sum\limits_k\sum\limits_j W_{k,j}^{[l]2}\)),L2正则化后的cost function变为:
L2正则化有时候也被称为“weight decay”(权重衰减),这是因为带入权值W更新的公式后,可以发现相当于每次更新权重都将其乘上一项$ 1 - \frac{\alpha \lambda}{m} $。
L2正则化依赖于这样的假设,即具有小权重的模型比具有大权重的模型简单。因此,通过惩罚成本函数中权重的平方值,可以控制所有权重值较小。这使得模型更加平滑,随着输入改变,输出变化更慢。
\(\lambda\)是一个可以调节的超参数,L2正则化使得模型更加平滑。如果\(\lambda\)过大的话,会使得模型过于平滑,可能使得bias增大。
一个小的tip:在使用了正则化之后,我们修改了cost function,加上了正则化项,我们在debug时绘制cost function图像时,也应该带上这一项,否则看到的cost function可能不是持续减小的。
Dropout Regularization
在每一步迭代中随机关闭一些神经元。
如何应用dropout呢?
在向前传播中,大致包括4步。
- 设置一和\(a^{[1]}\)的形状一样的变量\(d^{[1]}\),使用
np.random.rand()
获得0~1之间的数。还要利用到向量化,创建一个随机矩阵\(D^{[1]} = [d^{[1](1)} d^{[1](2)} ... d^{[1](m)}]\),和\(A^{[1]}\)的维度相同。 - 使用
X = (X < 0.5)
和keep_prob
值,使得\(D^{[1]}\)在1-keep_prob
)的可能性下为0,在keep_prob
的可能性下为1。 - \(A^{[1]}\) = \(A^{[1]} * D^{[1]}\)
- inverted dropout,\(A^{[1]}\) 除以
keep_prob
,保证cost的值不受使用dropout的影响。
在向后传播中,包括2步。
- 在向前传播中,对
A1
使用了mask \(D^{[1]}\)关闭了某些神经元,在向后传播计算dA1
时,应关闭同样的神经元,因此对dA1
也使用mask \(D^{[1]}\)。 dA1
除以keep_prob
,因为微积分中如果\(A^{[1]}\) 缩放了keep_prob
, 然后它的微分 \(dA^{[1]}\) 也被缩放了keep_prob
。
在测试时,不要使用dropput。因为测试时,并不想要得到随机的预测结果。
如何理解dropout呢?
从整体上看,每一步迭代都关闭一些神经元,这样每一步训练中,实际上都在训练的更简单的神经网络。
从单一神经元的角度出发,由于它上一层的神经元的输入会随机被丢弃一些,因此它无法完全依赖于任何一个特征,所以权重就倾向于分散,即给每一个输入特征的权重都较小,这样达到了和L2正则化类似的效果。
keep_prob的值应根据各层神经元的各数设置,对于神经元数目比较多的,设置更小的keep_prop值,因为神经元数目多的层数更容易过拟合,如果对不同层设置不同的keep_prop值,也有一个缺点就是超参数的数目增多的话运行可能会更慢。通常对于输入层一般不使用dropout。
在计算机视觉领域,由于特征维度很大,往往都不可能有足够的数据,因此使用dropout几乎成为默认,但是其他领域就不一定如此。
dropout还有一个缺点在于,由于随机丢弃使得cost function的定义不那么明确,因此无法用绘图法进行梯度下降检测。因此需要先把dropout关闭之后进行梯度下降检测确保递减,再加入dropout。
Other Regularization Methods
- Data augmentation(数据扩增)
比如水平翻转,随机裁剪扭曲图片等,以增加一些信息量。
- Early stopping(早停止)
绘制train set 和dev set的cost function和迭代步数的图像,一般前者递减,后者先减小后增大,选择一个两者均较好的迭代步数提前终止。
可以这样做的原因在于:最开始随机赋予w的权值一般是较小的(接近0),随着训练的过程可能不断增大,因此提前停止相当于选择看一个中间大小的权重值。但是它的的缺点在于同时会影响Cost function的拟合效果,不够正交化。