资讯详情

第二门课 改善深层神经网络:超参数调试、正则化以及优化(Improving Deep Neural Networks:Hyperparameter ...

第二门课 改进深层神经网络:超参数调试、正则化和优化(Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)

第一周:深度学习的实践水平(Practical aspects of Deep Learning)

文章目录

  • 第二门课 改进深层神经网络:超参数调试、正则化和优化(Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)
    • 第一周:深度学习的实践水平(Practical aspects of Deep Learning)
      • 1.1 训练、验证、测试集(Train / Dev / Test sets)
      • 1.2 偏差,方差(Bias /Variance)
      • 1.3 机器学习基础(Basic Recipe for Machine Learning)
      • 1.4 正则化(Regularization)
      • 1.5 为什么正则化有利于防止过拟合?(Why regularization reduces overfitting?)
      • 1.6 dropout 正则化(Dropout Regularization)
      • 1.7 理解 dropout(Understanding Dropout)
      • 1.8 其它正则化方法(Other regularization methods)
      • 1.9 归一化输入(Normalizing inputs)
      • 1.10 梯度消失/梯度爆炸(Vanishing / Exploding gradients)
      • 1.11 神经网络权重初始化(Weight Initialization for Deep NetworksVanishing / Exploding gradients)
      • 1.12 梯度值接近(Numerical approximation of gradients)
      • 1.13 梯度检验(Gradient checking)
      • 1.14 梯度检验应用的注意事项(Gradient Checking Implementation Notes)

1.1 训练、验证、测试集(Train / Dev / Test sets)

[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-NPucSUz1-1611326728498)(…/images/L2_week1_1.png)]

你可能已经明白了,本周我们将继续学习如何有效地运行神经网络,包括如何构建数据,以及如何确保优化算法的快速运行,以便学习算法在合理的时间内完成自学。

在第一周,我们首先谈谈神经网络机器学习中的问题,然后是随机神经网络,并学习一些技能来确保神经网络的正确运行。有了这些问题,我们开始了今天的课程。

在配置训练、验证和测试数据集的过程中做出正确的决策将在很大程度上帮助您创建一个高效的神经网络。我们需要做很多决定,比如:

  1. 神经网络分为多少层?

  2. 每层有多少个隐藏单元?

  3. 学习速度是多少?

  4. 各层激活函数使用哪些激活函数?

[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-9k0zqa0z-1611326728500)(…/images/L2_week1_2.png)]

在创建新应用的过程中,我们无法从一开始就准确预测这些信息和其他超级参数。事实上,应用机器学习是一个高度迭代的过程。通常,当项目启动时,我们会首先有一个初步的想法,如构建一个含有特定层数、隐藏单元数量或数据集数量的神经网络,然后编码并尝试运行这些代码,通过运行和测试获得神经网络或这些配置信息的运行结果,您可以根据输出结果改进您的想法和策略,或者不断迭代更新自己的解决方案,以找到更好的神经网络。

如今,深度学习在自然语言处理、计算机视觉、语音识别和结构化数据应用等领域取得了巨大的成功。结构化数据包罗万象,从广告到网络搜索。其中,网络搜索不仅包括网络搜索引擎,还包括购物网站,从所有根据搜索栏条目传输结果的网站。到计算机安全和物流,比如判断司机在哪里接送,范围很广。

我发现可能有自然语言处理人才想进入计算机视觉领域,或经验丰富的语音识别专家想加入广告行业,或者,有些人想从计算机安全领域跳到物流行业,在我看来,从一个领域或应用领域的直觉经验,通常不能转移到其他应用领域,最佳决策取决于你的数据,计算机配置输入特征的数量,使用训练还是具体配置等诸多因素。

[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-mj346v8Q-1611326728503)(…/images/97596da07232f85d566710ee7dd2f8ad.png)]

目前为止,我觉得,对于很多应用系统,即使是经验丰富的深度学习行家也不太可能一开始就预设出最匹配的超级参数,所以说,应用深度学习是一个典型的迭代过程,需要多次循环往复,才能为应用程序找到一个称心的神经网络,因此循环该过程的效率是决定项目进展速度的一个关键因素,而创建高质量的训练数据集,验证集和测试集也有助于提高循环效率。

[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-J6lZ6QBa-1611326728506)(…/images/072653e2e9402d2857bfcb7b9f783a5c.png)]

假设这是训练数据,我用矩形说,我们通常把这些数据分成几部分,一部分作为训练集,一部分作为简单的交叉验证集,有时也称为验证集,方便,我叫它验证集(),其实都是同一个概念,最后一部分作为测试集。

接下来,我们开始通过验证集或简单的交叉验证集选择最佳模型来执行训练集算法。经过充分验证,我们选择了最终模型,然后我们可以评估测试集中的运行状态。

在机器学习发展的小数据量时代,常见做法是将所有数据三七分,就是人们常说的70%训练集,30%测试集。如果明确设置了验证集,也可以按照60%训练集,20%验证集和20%测试集来划分。这是前几年机器学习领域普遍认可的最好的实践方法。

[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-wkcDtZVr-1611326728508)(…/images/ebbfb8514ff5a983f41e938d5870b79d.png)]

若只有100条、1000条或1万条数据,则上述比例划分非常合理。

然而,在大数据时代,我们目前的数据量可能是数百万,因此验证集和测试集占数据总量的比例往往较小。因为验证集的目的是验证不同的算法,哪种算法更有效。因此,只要验证集足够大,就可以评估不同的算法,如2个甚至10个不同的算法,并快速判断哪种算法更有效。我们可能不需要拿出20%的数据作为验证集。

[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-wVz9FZfa-1611326728510)(…/images/1224fb0922d5673c380e6dad9ded0b6b.png)]

例如,如果我们有100万个数据,我们可以评估1000个数据,找出1-2个性能最好的算法。同样,根据最终选择的分类器,测试集的主要目的是正确评估分类器的性能。因此,如果有数百万的数据,我们只需要1000个数据来评估单个分类器,并准确地评估分类器的性能。假设我们有100万个数据,其中1万个作为验证集,1万个作为测试集,100万里取1万,比例为1%,即训练集占98%,验证集和测试集占1%。对于数据量超过100万的应用,训练集可以占99.5%的验证和测试集分别占0%.25%或验证集占0.4%,测试集占0.1%。

综上所述,在机器学习中,我们通常将样本分为三个部分:训练集、验证集和测试集。数据集规模相对较小,适用于传统的划分比例。如果数据集规模较大,验证集和测试集应小于数据总量的20%或10%。稍后,我将给出如何划分验证集和测试集的具体指导。

现代深度学习的另一个趋势是越来越多的人在训练和测试集分布不匹配的情况下进行训练,假设你要构建一个用户可以上传大量图片的应用程序,目的是找出并呈现所有猫咪图片,可能你的用户都是爱猫人士,训练集可能是从网上下载的猫咪图片,而验证集和测试集是用户在这个应用上上传的猫的图片,就是说,训练集可能是从互联网上捕获的图片。验证集和测试集在用户上的图片。结果许多网页上的猫咪图片分辨率很高,很专业,后期制作精良,而用户上传的照片可能是用手机随意拍摄的,像素低,比较模糊,这两类数据有所不同,针对这种情况,根据经验,我建议大家要确保验证集和测试集的数据来自同一分布,关于这个问题我也会多讲一些。因为你们要用验证集来评估不同的模型,尽可能地优化性能。如果验证集和测试集来自同一个分布就会很好。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9TJn0w17-1611326728512)(…/images/459ffc8998b35b259bc3bab4fd4fb44c.png)]

但由于深度学习算法需要大量的训练数据,为了获取更大规模的训练数据集,我们可以采用当前流行的各种创意策略,例如,网页抓取,代价就是训练集数据与验证集和测试集数据有可能不是来自同一分布。但只要遵循这个经验法则,你就会发现机器学习算法会变得更快。我会在后面的课程中更加详细地解释这条经验法则。

最后一点,就算没有测试集也不要紧,测试集的目的是对最终所选定的神经网络系统做出无偏估计,如果不需要无偏估计,也可以不设置测试集。所以如果只有验证集,没有测试集,我们要做的就是,在训练集上训练,尝试不同的模型框架,在验证集上评估这些模型,然后迭代并选出适用的模型。因为验证集中已经涵盖测试集数据,其不再提供无偏性能评估。当然,如果你不需要无偏估计,那就再好不过了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ld2a1f0T-1611326728513)(…/images/658fc77a1ea588d5768dcd1a9a90761a.png)]

在机器学习中,如果只有一个训练集和一个验证集,而没有独立的测试集,遇到这种情况,训练集还被人们称为训练集,而验证集则被称为测试集,不过在实际应用中,人们只是把测试集当成简单交叉验证集使用,并没有完全实现该术语的功能,因为他们把验证集数据过度拟合到了测试集中。如果某团队跟你说他们只设置了一个训练集和一个测试集,我会很谨慎,心想他们是不是真的有训练验证集,因为他们把验证集数据过度拟合到了测试集中,让这些团队改变叫法,改称其为“训练验证集”,而不是“训练测试集”,可能不太容易。即便我认为“训练验证集“在专业用词上更准确。实际上,如果你不需要无偏评估算法性能,那么这样是可以的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2HGNtDBT-1611326728514)(…/images/02556a7f525c0ec016483644755c2231.png)]

所以说,搭建训练验证集和测试集能够加速神经网络的集成,也可以更有效地衡量算法地偏差和方差,从而帮助我们更高效地选择合适方法来优化算法。

1.2 偏差,方差(Bias /Variance)

我注意到,几乎所有机器学习从业人员都期望深刻理解偏差和方差,这两个概念易学难精,即使你自己认为已经理解了偏差和方差的基本概念,却总有一些意想不到的新东西出现。关于深度学习的误差问题,另一个趋势是对偏差和方差的权衡研究甚浅,你可能听说过这两个概念,但深度学习的误差很少权衡二者,我们总是分别考虑偏差和方差,却很少谈及偏差和方差的权衡问题,下面我们来一探究竟。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kxZx0sFq-1611326728515)(…/images/e0ec4205933b7c2a9eaed9fbaa8d4afc.png)]

假设这就是数据集,如果给这个数据集拟合一条直线,可能得到一个逻辑回归拟合,但它并不能很好地拟合该数据,这是高偏差()的情况,我们称为“欠拟合”()。

相反的如果我们拟合一个非常复杂的分类器,比如深度神经网络或含有隐藏单元的神经网络,可能就非常适用于这个数据集,但是这看起来也不是一种很好的拟合方式分类器方差较高(),数据过度拟合()。

在两者之间,可能还有一些像图中这样的,复杂程度适中,数据拟合适度的分类器,这个数据拟合看起来更加合理,我们称之为“适度拟合”()是介于过度拟合和欠拟合中间的一类。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PuiOJq59-1611326728516)(…/images/05ac08b96177b5d0aaae7b7bfea64f3a.png)]

在这样一个只有 x 1 x_1 x1​和 x 2 x_2 x2​两个特征的二维数据集中,我们可以绘制数据,将偏差和方差可视化。在多维空间数据中,绘制数据和可视化分割边界无法实现,但我们可以通过几个指标,来研究偏差和方差。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ftn1M9RD-1611326728517)(…/images/2efd9728b5f07f914903dde309167a5d.png)]

我们沿用猫咪图片分类这个例子,左边一张是猫咪图片,右边一张不是。理解偏差和方差的两个关键数据是训练集误差()和验证集误差(),为了方便论证,假设我们可以辨别图片中的小猫,我们用肉眼识别几乎是不会出错的。

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

通过查看训练集误差和验证集误差,我们便可以诊断算法是否具有高方差。也就是说衡量训练集和验证集误差就可以得出不同结论。

假设训练集误差是15%,我们把训练集误差写在首行,验证集误差是16%,假设该案例中人的错误率几乎为0%,人们浏览这些图片,分辨出是不是猫。算法并没有在训练集中得到很好训练,如果训练数据的拟合度不高,就是数据欠拟合,就可以说这种算法偏差比较高。相反,它对于验证集产生的结果却是合理的,验证集中的错误率只比训练集的多了1%,所以这种算法偏差高,因为它甚至不能拟合训练集,这与上一张幻灯片最左边的图片相似。

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

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

有一点我先在这个简单提一下,具体的留在后面课程里讲,这些分析都是基于假设预测的,假设人眼辨别的错误率接近0%,一般来说,最优误差也被称为贝叶斯误差,所以,最优误差接近0%,我就不在这里细讲了,如果最优误差或贝叶斯误差非常高,比如15%。我们再看看这个分类器(训练误差15%,验证误差16%),15%的错误率对训练集来说也是非常合理的,偏差不高,方差也非常低。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R1i4q2BX-1611326728519)(…/images/c61d149beecddb96f0f93944320cf639.png)]

当所有分类器都不适用时,如何分析偏差和方差呢?比如,图片很模糊,即使是人眼,或者没有系统可以准确无误地识别图片,在这种情况下,最优误差会更高,那么分析过程就要做些改变了,我们暂时先不讨论这些细微差别,重点是通过查看训练集误差,我们可以判断数据拟合情况,至少对于训练数据是这样,可以判断是否有偏差问题,然后查看错误率有多高。当完成训练集训练,开始使用验证集验证时,我们可以判断方差是否过高,从训练集到验证集的这个过程中,我们可以判断方差是否过高。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LRqv0J79-1611326728520)(…/images/fcdc2a7afbaaa07ca08b078bb4d37e8d.png)]

以上分析的前提都是假设基本误差很小,训练集和验证集数据来自相同分布,如果没有这些假设作为前提,分析过程更加复杂,我们将会在稍后课程里讨论。

上一张幻灯片,我们讲了高偏差和高方差的情况,大家应该对优质分类器有了一定的认识,偏差和方差都高是什么样子呢?这种情况对于两个衡量标准来说都是非常糟糕的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mx3Vy7VL-1611326728521)(…/images/f8fdbf9ed01b8634573125e0fb2ca860.png)]

我们之前讲过,这样的分类器,会产生高偏差,因为它的数据拟合度低,像这种接近线性的分类器,数据拟合度低。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GOJZB5UX-1611326728522)(…/images/e9451f36e8baa41b74c95d9a09b0f028.png)]

但是如果我们稍微改变一下分类器,我用紫色笔画出,它会过度拟合部分数据,用紫色线画出的分类器具有高偏差和高方差,偏差高是因为它几乎是一条线性分类器,并未拟合数据。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dR9JsSlS-1611326728524)(…/images/6e86aa7d9b21b1a49bf4a084c7503527.png)]

这种二次曲线能够很好地拟合数据。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Gcqp8iN-1611326728525)(…/images/67dc5997a956314e238e6fc362f9883d.png)]

这条曲线中间部分灵活性非常高,却过度拟合了这两个样本,这类分类器偏差很高,因为它几乎是线性的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XG8MiLC2-1611326728526)(…/images/6bf7e092ddf93104ea64a5ddecbb7c6d.png)]

而采用曲线函数或二次元函数会产生高方差,因为它曲线灵活性太高以致拟合了这两个错误样本和中间这些活跃数据。

这看起来有些不自然,从两个维度上看都不太自然,但对于高维数据,有些数据区域偏差高,有些数据区域方差高,所以在高维数据中采用这种分类器看起来就不会那么牵强了。

总结一下,我们讲了如何通过分析在训练集上训练算法产生的误差和验证集上验证算法产生的误差来诊断算法是否存在高偏差和高方差,是否两个值都高,或者两个值都不高,根据算法偏差和方差的具体情况决定接下来你要做的工作,下节课,我会根据算法偏差和方差的高低情况讲解一些机器学习的基本方法,帮助大家更系统地优化算法,我们下节课见。

1.3 机器学习基础(Basic Recipe for Machine Learning)

上节课我们讲的是如何通过训练误差和验证集误差判断算法偏差或方差是否偏高,帮助我们更加系统地在机器学习中运用这些方法来优化算法性能。

下图就是我在训练神经网络用到的基本方法:(尝试这些方法,可能有用,可能没用)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-omiuaGEg-1611326728527)(…/images/L2_week1_8.png)]

这是我在训练神经网络时用到地基本方法,初始模型训练完成后,我首先要知道算法的偏差高不高,如果偏差较高,试着评估训练集或训练数据的性能。如果偏差的确很高,甚至无法拟合训练集,那么你要做的就是选择一个新的网络,比如含有更多隐藏层或者隐藏单元的网络,或者花费更多时间来训练网络,或者尝试更先进的优化算法,后面我们会讲到这部分内容。你也可以尝试其他方法,可能有用,也可能没用。

一会儿我们会看到许多不同的神经网络架构,或许你能找到一个更合适解决此问题的新的网络架构,加上括号,因为其中一条就是你必须去尝试,可能有用,也可能没用,不过采用规模更大的网络通常都会有所帮助,延长训练时间不一定有用,但也没什么坏处。训练学习算法时,我会不断尝试这些方法,直到解决掉偏差问题,这是最低标准,反复尝试,直到可以拟合数据为止,至少能够拟合训练集。

如果网络足够大,通常可以很好的拟合训练集,只要你能扩大网络规模,如果图片很模糊,算法可能无法拟合该图片,但如果有人可以分辨出图片,如果你觉得基本误差不是很高,那么训练一个更大的网络,你就应该可以……至少可以很好地拟合训练集,至少可以拟合或者过拟合训练集。一旦偏差降低到可以接受的数值,检查一下方差有没有问题,为了评估方差,我们要查看验证集性能,我们能从一个性能理想的训练集推断出验证集的性能是否也理想,如果方差高,最好的解决办法就是采用更多数据,如果你能做到,会有一定的帮助,但有时候,我们无法获得更多数据,我们也可以尝试通过正则化来减少过拟合,这个我们下节课会讲。有时候我们不得不反复尝试,但是,如果能找到更合适的神经网络框架,有时它可能会一箭双雕,同时减少方差和偏差。如何实现呢?想系统地说出做法很难,总之就是不断重复尝试,直到找到一个低偏差,低方差的框架,这时你就成功了。

有两点需要大家注意:

第一点,高偏差和高方差是两种不同的情况,我们后续要尝试的方法也可能完全不同,我通常会用训练验证集来诊断算法是否存在偏差或方差问题,然后根据结果选择尝试部分方法。举个例子,如果算法存在高偏差问题,准备更多训练数据其实也没什么用处,至少这不是更有效的方法,所以大家要清楚存在的问题是偏差还是方差,还是两者都有问题,明确这一点有助于我们选择出最有效的方法。

第二点,在机器学习的初期阶段,关于所谓的偏差方差权衡的讨论屡见不鲜,原因是我们能尝试的方法有很多。可以增加偏差,减少方差,也可以减少偏差,增加方差,但是在深度学习的早期阶段,我们没有太多工具可以做到只减少偏差或方差却不影响到另一方。但在当前的深度学习和大数据时代,只要持续训练一个更大的网络,只要准备了更多数据,那么也并非只有这两种情况,我们假定是这样,那么,只要正则适度,通常构建一个更大的网络便可以,在不影响方差的同时减少偏差,而采用更多数据通常可以在不过多影响偏差的同时减少方差。这两步实际要做的工作是:训练网络,选择网络或者准备更多数据,现在我们有工具可以做到在减少偏差或方差的同时,不对另一方产生过多不良影响。我觉得这就是深度学习对监督式学习大有裨益的一个重要原因,也是我们不用太过关注如何平衡偏差和方差的一个重要原因,但有时我们有很多选择,减少偏差或方差而不增加另一方。最终,我们会得到一个非常规范化的网络。从下节课开始,我们将讲解正则化,训练一个更大的网络几乎没有任何负面影响,而训练一个大型神经网络的主要代价也只是计算时间,前提是网络是比较规范化的。

今天我们讲了如何通过组织机器学习来诊断偏差和方差的基本方法,然后选择解决问题的正确操作,希望大家有所了解和认识。我在课上不止一次提到了正则化,它是一种非常实用的减少方差的方法,正则化时会出现偏差方差权衡问题,偏差可能略有增加,如果网络足够大,增幅通常不会太高,我们下节课再细讲,以便大家更好理解如何实现神经网络的正则化。

1.4 正则化(Regularization)

深度学习可能存在过拟合问题——高方差,有两个解决方法,一个是正则化,另一个是准备更多的数据,这是非常可靠的方法,但你可能无法时时刻刻准备足够多的训练数据或者获取更多数据的成本很高,但正则化通常有助于避免过拟合或减少你的网络误差。

如果你怀疑神经网络过度拟合了数据,即存在高方差问题,那么最先想到的方法可能是正则化,另一个解决高方差的方法就是准备更多数据,这也是非常可靠的办法,但你可能无法时时准备足够多的训练数据,或者,获取更多数据的成本很高,但正则化有助于避免过度拟合,或者减少网络误差,下面我们就来讲讲正则化的作用原理。

我们用逻辑回归来实现这些设想,求成本函数 J J J的最小值,它是我们定义的成本函数,参数包含一些训练数据和不同数据中个体预测的损失, w w w和 b b b是逻辑回归的两个参数, w w w是一个多维度参数矢量, b b b是一个实数。在逻辑回归函数中加入正则化,只需添加参数λ,也就是正则化参数,一会儿再详细讲。

λ 2 m \frac{\lambda}{2m} 2mλ​乘以 w w w范数的平方,其中 ∥ w ∥ 2 2 \left\| w \right\|_2^2 ∥w∥22​是 w w w的欧几里德范数的平方,等于 w j w_{j} wj​( j j j 值从1到 n x n_{x} nx​)平方的和,也可表示为 w T w w^{T}w wTw,也就是向量参数 w w w 的欧几里德范数(2范数)的平方,此方法称为 L 2 L2 L2正则化,因为这里用了欧几里德范数,被称为向量参数 w w w的 L 2 L2 L2范数。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-81XjP2BZ-1611326728528)(…/images/fa185e95684bbe6c0e9100164aff2ee5.png)]

为什么只正则化参数 w w w?为什么不再加上参数 b b b 呢?你可以这么做,只是我习惯省略不写,因为 w w w通常是一个高维参数矢量,已经可以表达高偏差问题, w w w可能包含有很多参数,我们不可能拟合所有参数,而 b b b只是单个数字,所以 w w w几乎涵盖所有参数,而不是 b b b,如果加了参数 b b b,其实也没太大影响,因为 b b b只是众多参数中的一个,所以我通常省略不计,如果你想加上这个参数,完全没问题。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uipQtvN0-1611326728529)(…/images/84c4e19130a91a09120087dd704bbaa4.png)]

L 2 L2 L2正则化是最常见的正则化类型,你们可能听说过 L 1 L1 L1正则化, L 1 L1 L1正则化,加的不是 L 2 L2 L2范数,而是正则项 λ m \frac{\lambda}{m} mλ​乘以 ∑ j = 1 n x ∣ w ∣ \sum_{j= 1}^{n_{x}}{|w|} ∑j=1nx​​∣w∣, ∑ j = 1 n x ∣ w ∣ \sum_{j =1}^{n_{x}}{|w|} ∑j=1nx​​∣w∣也被称为参数 w w w向量的 L 1 L1 L1范数,无论分母是 m m m还是 2 m 2m 2m,它都是一个比例常量。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YDd8Mlc0-1611326728529)(…/images/5190dbc5a98db7a248499f54a04257cc.png)]

如果用的是 L 1 L1 L1正则化, w w w最终会是稀疏的,也就是说 w w w向量中有很多0,有人说这样有利于压缩模型,因为集合中参数均为0,存储模型所占用的内存更少。实际上,虽然 L 1 L1 L1正则化使模型变得稀疏,却没有降低太多存储内存,所以我认为这并不是 L 1 L1 L1正则化的目的,至少不是为了压缩模型,人们在训练网络时,越来越倾向于使用 L 2 L2 L2正则化。

我们来看最后一个细节, λ \lambda λ是正则化参数,我们通常使用验证集或交叉验证集来配置这个参数,尝试各种各样的数据,寻找最好的参数,我们要考虑训练集之间的权衡,把参数设置为较小值,这样可以避免过拟合,所以λ是另外一个需要调整的超级参数,顺便说一下,为了方便写代码,在编程语言中, λ \lambda λ是一个保留字段,编写代码时,我们删掉 a a a,写成 l a m b d lambd lambd,以免与中的保留字段冲突,这就是在逻辑回归函数中实现 L 2 L2 L2正则化的过程,如何在神经网络中实现 L 2 L2 L2正则化呢?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DCbB8m3m-1611326728531)(…/images/2e88bd6f30a8ff8014d6d7dbe6d0488a.png)]

神经网络含有一个成本函数,该函数包含 W [ 1 ] W^{[1]} W[1], b [ 1 ] b^{[1]} b[1]到 W [ l ] W^{[l]} W[l], b [ l ] b^{[l]} b[l]所有参数,字母 L L L是神经网络所含的层数,因此成本函数等于 m m m个训练样本损失函数的总和乘以 1 m \frac{1}{m} m1​,正则项为 λ 2 m ∑ 1 L ∣ W [ l ] ∣ 2 \frac{\lambda }{2m}{ {\sum\nolimits_{1}^{L}{| { {W}^{[l]}}|}}^{2}} 2mλ​∑1L​∣W[l]∣2,我们称 ∣ ∣ W [ l ] ∣ ∣ 2 {||W^{\left[l\right]}||}^{2} ∣∣W 标签: 4034连接器xg4a

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台