吴恩达DeepLearning深度学习-Lesson2-week1-Improving Deep Neural Networks-[part 1]

吴恩达DeepLearning深度学习-Lesson2-week1-Improving Deep Neural Networks-[part 1],第1张

文章目录
  • Regularizing your NeuralNetwork - [part 1]
    • 训练、验证和测试集
    • 偏差 Bias & 方差 Variance
    • 机器学习基础(常见的应对偏差和方差的策略)
    • 正则化 Regularization
    • 为什么正则化有利于预防过拟合
    • dropout 正则化
    • 理解 Dropout
    • 其他正则化方法
      • 数据扩增
      • early stopping


Regularizing your NeuralNetwork - [part 1]

Lesson2 Week1 part I

训练、验证和测试集

深度学习是一个典型的迭代过程,需要多次循环往复,才能为应用程序找到一个称心的神经网络。因此循环该过程的效率是决定项目进展速度的一个关键因素,而创建高质量的训练数据集,验证集和测试集也有助于提高循环效率。

验证集的作用在于验证不同模型和算法的效果。充分验证之后,我们选定了最终模型,然后就可以在测试集上进行评估了,目的是评估无偏评估算法的运行状况。

在数据量比较小的情况下,常见做法是将所有数据三七分。就是人们常说的70%验证集,30%测试集。也可以按照 60%训练,20%验证和 20%测式集来划分。这是前几年机器学习领域普遍认可的最好的实践方法。如果只有100条,1000条或者1万条数据,那么上述比例划分是非常合理的。

在数据集规模较大的情况下,验证集和测试集要小于数据总量的20%或10%。假设我们有100万条数据,其中1万条作为验证集,1万条作为测试集,100万里取1万,比例是1%,即:训练集占98%,验证集和测试集各占1%。对于数据量过百万的应用,训练集可以占到 99.5%,验证和测试集各占0.25%,或者验证集占0.4%,测试集占0.1%。

最后一点,就算没有测试集也不要紧。测试集的目的是对最终所选定的神经网络系统做出无偏估计,如果不需要无偏估计,也可以不设置测试集。所以如果只有验证集,没有测试集,我们要做的就是,在训练集上训练,尝试不同的模型框架,在验证集上评估这些模型,然后迭代并选出适用的模型。


Lesson2 Week1 part II

偏差 Bias & 方差 Variance

理解偏差和方差的两个关键数据是训练集误差(Train set error)和验证集误差(Dev set error),为了方便论证,假设我们可以辨别图片中的小猫,我们用肉眼识别几乎是不会出错的。

假定训练集误差是1%,为了方便论证,假定验证集误差是11%,可以看出训练集设置得非常好,而验证集设置相对较差,我们可能过度拟合了训练集,在某种程度上,验证集并没有充分利用交叉验证集的作用,像这种情况,我们称之为“高方差”。

假设训练集误差是15%,验证集误差是16%,假设该案例中人的错误率几乎为0%,人们浏览这些图片,分辨出是不是猫。算法并没有在训练集中得到很好训练,如果训练数据的拟合度不高,就是数据欠拟合,可以说这种算法“高偏差”。

再举一个例子,训练集误差是15%,偏差相当高,但是,验证集的评估结果更糟糕,错误率达到30%,在这种情况下,我会认为这种算法偏差高,因为它在训练集上结果不理想,而且方差也很高,这是方差、偏差都很糟糕的情况。

再看最后一个例子,训练集误差是0.5%,验证集误差是1%。用户看到这样的结果会很开心,猫咪分类器只有1%的错误率,偏差和方差都很低。

总结:重点是通过查看训练集误差,我们可以判断数据拟合情况,至少对于训练数据是这样,可以判断是否有偏差问题,然后查看错误率有多高。当完成训练集训练,通过使用验证集验证时,我们可以判断方差是否过高,从训练集到验证集的这个过程中,我们可以判断方差是否过高。


Lesson2 Week1 part III

机器学习基础(常见的应对偏差和方差的策略)

训练神经网络的基本流程如下。首先,应该使模型在训练集上做到低偏差、拟合训练集数据。此时我们的模型可以发生了过拟合现象。然后,我们在验证集上运行模型检查误差,判断模型是否存在过拟合。

High Bais:

  1. 更复杂神经网络。
  2. 更多的训练时间。
  3. 更换算法。

High Variance:

  1. 采用更多的数据。(至少对模型的低偏差要求无影响)
  2. 正则化。

Lesson2 Week1 part IV

正则化 Regularization

我们在神经网络中实现 L2 正则化,需要引入参数 λ \lambda λ 正则化参数,作为代价函数中的一项,假设整个网络共有 L 层,整个代价函数如公式所示:
J ( w [ 1 ] , b [ 1 ] , . . . , w [ L ] , b [ L ] ) = 1 m ∑ i = 1 m L ( y ^ ( i ) , y ( i ) ) + λ 2 m ∑ l = 1 L ( ∣ ∣ w [ l ] ∣ ∣ F 2 ) J(w^{[1]}, b^{[1]},...,w^{[L]}, b^{[L]})=\frac{1}{m} \sum_{i=1}^{m} L\left(\hat{y}^{(i)}, y^{(i)}\right)+\frac{\lambda}{2m}\sum_{l=1}^{L}\left({||w^{[l]}||}^{2}_{F}\right) J(w[1],b[1],...,w[L],b[L])=m1i=1mL(y^(i),y(i))+2mλl=1L(w[l]F2)
我们称 ∣ ∣ w [ l ] ∣ ∣ 2 {||w^{[l]}||}^{2} w[l]2 为欧几里得范数的平方或 L2 范数的平方。计算结果等于矩阵中所有元素的平方和。按照惯例,我们称之为“弗罗贝尼乌斯范数",它表示一个矩阵中所有元素的平方和。

在利用代价函数计算参数梯度时,我们为参数 d w [ l ] dw^{[l]} dw[l] 增加一项 λ m w [ l ] \frac{\lambda}{m}w^{[l]} mλw[l],也就是 d w [ l ] = ( b a c k p r o p a g a t i o n ) + λ m w [ l ] dw^{[l]}=(backpropagation)+\frac{\lambda}{m}w^{[l]} dw[l]=(backpropagation)+mλw[l]。利用计算得到的 d w [ l ] dw^{[l]} dw[l] 更新 w [ l ] = w [ l ] − α λ m w [ l ] − α ( b a c k p r o p a g a t i o n ) = ( 1 − α λ m ) w [ l ] − α ( b a c k p r o p a g a t i o n ) w^{[l]}=w^{[l]}-\alpha\frac{\lambda}{m}w^{[l]}-\alpha(backpropagation)=(1-\alpha\frac{\lambda}{m})w^{[l]}-\alpha(backpropagation) w[l]=w[l]αmλw[l]α(backpropagation)=(1αmλ)w[l]α(backpropagation)
正由于权重指标 w [ l ] w^{[l]} w[l] 乘以了一个小于 1 的系数,所有我们称 L2 正则化为“权重衰减”。


Lesson2 Week1 part V

为什么正则化有利于预防过拟合


左图的分类器类似于一个线性的分类器,在训练集上并不能很好地拟合数据分类情况,所以它是高偏差的情况。右图的分类器可以在训练集上很好地拟合分类情况,但是可能在验证集上误差很大,属于过拟合状态,所以它是高方差过拟合的情况。

我们在正则化中为代价函数 J 添加了正则项,它可以避免数据权值矩阵过大,这就是弗罗贝尼乌斯范数,但为什么弗罗贝尼乌斯范数可以减少过拟合?

直观上理解,如果正则化 λ \lambda λ 设置得足够大,权重矩阵 W 更新时的比例系数 ( 1 − α λ m ) (1-\alpha\frac{\lambda}{m}) (1αmλ) 越小,W 越接近于 0 的值,也就是把多隐藏单元的权重设为 0,于是基本上消除了这些隐藏单元的许多影响。实际上该神经网络的所有隐藏单元依然存在,但是它们的影响变得更小了。如果是这种情况,这个被大大简化了的神经网络会变成一个很小的网络,小到如同一个逻辑回归单元,可是深度却很大,它会使这个网络从过度拟合的状态更接近左图的高偏差状态。但是 λ \lambda λ 会存在一个中间值,于是会有一个接近"Just Right"的中间状态


Lesson2 Week1 part VI

dropout 正则化

正则化工作流程(参考知乎文章 Dropout)

  1. 首先随机(临时)删掉网络中一半的隐藏神经元,但是输出神经元保持不变。神经网络随机失活部分神经元后的示意图,如下图所示。
  2. 开始一次训练样本 x 的训练。x 输入修改后的网络进行前向传播,然后把得到的损失结果通过修改的网络反向传播。一小批训练样本执行完这个过程后,在没有被删除的神经元上按照随机梯度下降法更新对应的参数(w,b)。
  3. 重复这一过程:
    • 恢复被删掉的神经元(此时被删除的神经元保持原样,而没有被删除的神经元已经有所更新)。
    • 随机失活部分神经元(备份被删除神经元的参数)。
    • 对一小批训练样本,先前向传播然后反向传播损失并根据随机梯度下降法更新参数(w,b),没有被删除的那一部分参数得到更新,删除的神经元参数保持被删除前的结果。

Lesson2 Week1 part VII

理解 Dropout

Dropout 的理解:不要依赖于任何一个特征,因为该单元的输入可能随时被清除。因此该单元通过这种方式传播下去,并为单元的四个输入增加一点权重,通过传播所有权重,dropout 将产生收缩权重的平方范数的效果,和之前讲的 L2 正则化类似;实施 dropout 的结果实它会压缩权重,并完成一些预防过拟合的外层正则化;L2对不同权重的衰减是不同的,它取决于激活函数倍增的大小。

实施 dropout 的另一个细节是,这是一个拥有三个输入特征的网络,其中一个要选择的参数是 keep-prob,它代表每一层上保留单元的概率。所以不同层的 keep-prob 也可以变化。第一层,矩阵 w [ 1 ] w^{[1]} w[1] 是7×3,第二个权重矩阵 w [ 2 ] w^{[2]} w[2] 是7×7,第三个权重矩阵 w [ 3 ] w^{[3]} w[3] 是3x7,以此类推, w [ 2 ] w^{[2]} w[2] 是最大的权重矩阵,因为 w [ 2 ] w^{[2]} w[2] 拥有最大参数集,即7x7,为了预防矩阵的过拟合,对于这一层,我认为这是第二层,它的 keep-prob值应该相对较低,假设是0.5。对于其它层,过拟合的程度可能没那么严重,它们的 keep-prob 值可能高一些,可能是0.7,这里是0.7。如果在某一层,我们不必担心其过拟合的问题,那么keep-prob可以为1,为了表达清除,我用紫色线笔把它们圈出来,每层keep-prob的值可能不同。

dropout 是一种正则化方法,它有助于预防过拟合,因此除非算法过拟合,不然不会使用dropout的。所以它在其它领域应用得比较少,主要存在于计算机视觉领域,因为我们通常没有足够的数据,所以一直存在过拟合,这就是有些计算机视觉研究人员如此钟情于dropout函数的原因。


Lesson2 Week1 part VIII

其他正则化方法 数据扩增

假设你正在拟合猫咪图片分类器,如果你想通过扩增训练数据来解决过拟合,但扩增数据代价高,而且有时候我们无法扩增数据,但我们可以通过添加这类图片来增加训练集。例如,水平翻转图片,并把它添加到训练集。所以现在训练集中有原图,还有翻转后的这张图片,所以通过水平翻转图片,训练集则可以增大一倍,因为训练集有冗余,这虽然不如我们额外收集一组新图片那么好,但这样做节省了获取更多猫咪图片的花费。

通过随意翻转和裁剪图片,我们可以增大数据集,额外生成假训练数据。和全新的,独立的猫咪图片数据相比,这些额外的假的数据无法包含像全新数据那么多的信息,但我们这么做基本没有花费,代价几乎为零,除了一些对抗性代价。以这种方式扩增算法数据,进而正则化数据集,减少过拟合比较廉价。

early stopping

我们可以在同一张图片上绘制训练集误差和验证集误差。当你还未在神经网络上运行太多迭代过程的时候,参数 w 接近 0,因为随机初始化 w 值时,它的值可能都是较小的随机值,所以在你长期训练神经网络之前 w 依然很小,在迭代过程和训练过程中 w 的值会变得越来越大。比如在这儿,神经网络中参数 w 的值已经非常大了,所以 early stopping 要做就是在中间点停止迭代过程。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/942188.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-18
下一篇2022-05-18

发表评论

登录后才能评论

评论列表(0条)

    保存