在深度学习中对正则化的直观认识

做者|Kelvin Lee
编译|Flin
来源|towardsdatascience网络

得到对正则化的直观认识

在机器学习中,正则化是一种用来对抗高方差的方法——换句话说,就是模型学习再现数据的问题,而不是关于问题的潜在语义。与人类学习相似,咱们的想法是构建家庭做业问题来测试和构建知识,而不是简单的死记硬背:例如,学习乘法表,而不是学习如何乘。机器学习

这种现象在神经网络学习中尤其广泛——学习能力越强,记忆的可能性就越大,这取决于咱们这些实践者如何引导深度学习模型来吸取咱们的问题,而不是咱们的数据。大家中的许多人在过去都曾遇到过这些方法,而且可能已经对不一样的正则化方法如何影响结果造成了本身的直观认识。为大家中那些不知道的人(甚至为那些知道的人!)本文为正则化神经网络参数的造成提供了直观的指导。将这些方面可视化是很重要的,由于人们很容易将许多概念视为理所固然;本文中的图形和它们的解释将帮助你直观地了解,当你增长正则化时,模型参数的实际状况。函数

在本文中,我将把 L2 和 dropouts 做为正则化的标准形式。我不会讨论其余方法(例如收集更多数据)如何改变模型的工做方式。性能

全部的图形和模型都是用标准的科学Python堆栈制做的:numpymatplotlibscipysklearn,而神经网络模型则是用PyTorch构建的。学习

开发复杂函数

深度学习的核心原则之一是深度神经网络做为通用函数逼近的能力。不管你感兴趣的是什么,疾病传播,自动驾驶汽车,天文学等,均可以经过一个自学习模型来压缩和表达,这种想法绝对是使人惊奇的!尽管你感兴趣的问题其实是是否能够用解析函数f来表示这些问题,但当你经过训练来调整机器学习模型时,该模型采用的参数θ容许模型近似地学习 f*。测试

出于演示的目的,咱们将查看一些相对简单的数据:理想状况下,一维中的某些数据足够复杂,足以使老式曲线拟合变得痛苦,但还不足以使抽象和理解变得困难。我要建立一个复杂的函数来模拟周期信号,可是要加入一些有趣的东西。下面的函数实现以下方程:优化

其中A,B,C是从不一样高斯分布中采样的随机数。这些值的做用是在很是类似的函数之间加上滞后,使得它们随机地加在一块儿产生很是不一样的f值。咱们还将在数据中添加白色(高斯)噪声,以模拟所收集数据的效果。ui

让咱们将随机生成的数据样本可视化:在本文的其他部分中,咱们将使用一个小的神经网络来重现这条曲线。.net

为了进行咱们的模型训练,咱们将把它分红训练/验证集。为此,我将在sklearn.model_selection中使用极其方便的train_test_split功能。让咱们设计训练和验证集:设计

正如咱们在图中看到的,这两个集合在表示整个曲线方面都作得至关好:若是咱们删除其中一个,咱们能够或多或少地收集到数据表示的相同图片。这是交叉验证的一个很是重要的方面!

开发咱们的模型

如今咱们有了一个数据集,咱们须要一个相对简单的模型来尝试复制它。为了达到这个目的,咱们将要处理一个四层的神经网络,它包含三个隐藏层的单个输入和输出值,每一个隐藏层64个神经元。

为了方便起见,每一个隐藏层都有一个LeakyReLU激活,输出上有ReLU激活。原则上,这些应该不那么重要,可是在测试过程当中,模型有时没法学习一些“复杂”的功能,特别是当使用像tanh和sigmoid这样容易饱和的激活函数时。在本文中,这个模型的细节并不重要:重要的是它是一个彻底链接的神经网络,它有能力学习逼近某些函数。

为了证实模型的有效性,我使用均方偏差(MSE)损失和ADAM优化器执行了一般的训练/验证周期,没有任何形式的正则化,最后获得了如下结果:

当咱们使用此模型来预测:

除了曲率变化很快的区域(接近x=11)以外,这个模型很好地再现了咱们的“复杂”函数!

如今,我能够听到你在问:若是模型运行良好,我为何要作任何正则化?在本演示中,咱们的模型是否过拟合并不重要:我想要理解的是正则化如何影响一个模型;在咱们的例子中,它甚至会对一个完美的工做模型产生不利影响。在某种意义上,你能够把这理解为一个警告:当你遇到过分拟合时要处理它,但在此以前不要处理。用Donald Knuth的话说,“不成熟的优化是万恶之源”。

正则化如何影响参数

如今咱们已经完成了全部的样板文件,咱们能够进入文章的核心了!咱们的重点是创建对正则化的直观认识,即不一样的正则化方法如何从三个角度影响咱们的简单模型:

  1. 训练/验证的损失会怎样?

  2. 咱们的模型性能会发生什么变化?

  3. 实际的参数会怎样呢?

虽然前两点很简单,可是不少人可能不熟悉如何量化第三点。在这个演示中,我将使用核密度评估来测量参数值的变化:对于那些熟悉Tensorboard的人来讲,你将看到这些图;对于那些不知道的人,能够把这些图看做是复杂的直方图。目标是可视化咱们的模型参数如何随正则化而变化,下图显示了训练先后θ分布的差别:

蓝色曲线被标记为“均匀的”,由于它表明了咱们用均匀分布初始化的模型参数:你能够看到这基本上是一个顶帽函数,在中心具备相等的几率。这与训练后的模型参数造成了鲜明的对比:通过训练,模型须要不均匀的θ值才能表达咱们的功能。

L2正则化

正则化最直接的方法之一是所谓的L2正则化:L2指的是使用参数矩阵的L2范数。由线性代数可知,矩阵的范数为:

在前神经网络机器学习中,参数一般用向量而不是矩阵/张量来表示,这就是欧几里得范数。在深度学习中,咱们一般处理的是矩阵/高维张量,而欧几里德范数并不能很好地扩展(超越欧几里德几何)。L2范数其实是上述方程的一个特例,其中p=q=2被称为Frobenius或Hilbert-schmidt范数,它能够推广到无限维度(即Hilbert空间)。

在深度学习应用中,应用这种L2正则化的通常形式是在代价函数J的末尾附加一个“惩罚”项:

很简单,这个方程定义了代价函数J为MSE损失,以及L2范数。L2范数的影响代价乘以这个前因子λ;这在许多实现中被称为“权值衰减”超参数,一般在0到1之间。由于它控制了正则化的数量,因此咱们须要了解这对咱们的模型有什么影响!

在一系列的实验中,咱们将重复与以前相同的训练/验证/可视化周期,可是这是在一系列的λ值上。首先,它是如何影响咱们的训练的?

让咱们来分析一下。更深的红色对应于更大的λ值(尽管这不是一个线性映射!),将训练损失的痕迹显示为MSE损失的日志。记住,在咱们的非正则化模型中,这些曲线是单调递减的。在这里,当咱们增长λ的值,最终训练偏差大大增长,而且早期损失的减小也没有那么显著。当咱们试图使用这些模型来预测咱们的功能时,会发生什么?

咱们能够看到,当λ值很小时,函数仍然能够很好地表达。转折点彷佛在λ=0.01附近,在这里,曲线的定性形状被再现,但不是实际的数据点。从λ>0.01,模型只是预测整个数据集的平均值。若是咱们把这些解释为咱们在训练上的损失,那么损失就会中止,这也就不足为奇了。

那么参数的分布呢?

咱们看到,参数值的传播大大受阻,正如咱们的 λ 从低到高。与均匀分布相比,参数值的扩展愈来愈接近于零,λ=1.0时,θ的分布看起来就像一个在0处的狄拉克δ函数。由此,咱们能够消除L2正则化做用于约束参数空间——强制θ很是稀疏而且接近零。

dropouts呢?

另外一种流行且成本高效的正则化方法是在模型中包含dropouts。这个想法是,每次模型经过时,一些神经元经过根据几率p将它们的权值设置为0来失活。换句话说,咱们对参数应用一个布尔掩码,每次数据经过不一样的单元时都被激活。这背后的基本原理是将模型学习分布在整个网络中,而不是特定的一层或两层/神经元。

在咱们的实验中,咱们将在每一个隐藏层之间加入dropout层,并将dropout几率p从0调整为1。在前一种状况下,咱们应该有一个非正则化的模型,而在后一种状况下,咱们各自的学习能力应该有所降低,由于每个隐藏层都被停用了。

咱们看到了与L2正则化很是类似的效果:整体而言,模型的学习能力降低,而且随着dropout几率值的增大,最终损失的比例也增大。

当咱们试图使用这些模型来预测咱们的功能时:

如图,咱们逐步增长了dropout几率。从p=0.1开始,咱们能够看到咱们的模型对于它的预测开始变得至关不可靠:最有趣的是,它彷佛近似地跟踪了咱们的数据,包括噪音!

在p=0.2和0.3时,这一点在x=11时更加明显——回想一下,咱们的非正则化模型很可贵到正确的函数区域。咱们看到,带dropout的预测实际上使这一区域难以置信的模糊,这几乎就像模型告诉咱们,它是不肯定的!(后面会详细介绍)。

从p=0.4开始,模型的能力彷佛受到了极大的限制,除了第一部分以外,它几乎没法再现曲线的其余部分。在p=0.6时,预测结果彷佛接近数据集的平均值,这彷佛也发生在L2正则化的大值上。

咱们的模型参数呢?

将此结果与咱们的L2范数结果进行比较:对于dropout,咱们的参数分布更广,这增长了咱们的模型表达的能力。除p=1.0外,dropout几率的实际值对参数的分布影响不大,若是有影响的话。在p=1.0时,咱们的模型没有学到任何东西,只是相似于均匀分布。在p值下降时,尽管速度下降了,模型仍然可以学习。

最后

从咱们简单的实验中,我但愿你已经从咱们探索的三个角度,对这两种正则化方法如何影响神经网络模型造成了一些直观认识。

L2正则化很是简单,只须要调整一个超参数。当咱们增长L2惩罚的权重时,由于参数空间的变化,对于大的值(0.01-1),模型容量降低得很是快。对于较小的值,你甚至可能不会看到模型预测有什么变化。

Dropouts是一种更复杂的正则化方法,由于如今必须处理另外一层超参数复杂性(p能够为不一样的层提供不一样的值)。尽管如此,这实际上能够提供模型表达的另外一个维度:模型不肯定性的形式。

在这两种方法中,咱们看到正则化增长了最终的训练损失。这些人工形式的正则化(与获取更多的训练数据相反)的代价是它们会下降模型的容量: 除非你肯定你的模型须要正则化,不然在这样的结果下,你不会但愿正则化。可是,经过本指南,你如今应该知道这两种形式如何影响你的模型!

若是你感兴趣,能够在Binder上(https://mybinder.org/v2/gh/laserkelvin/understanding-ml/master) 运行一些代码。我不须要运行torch模型(这会耗尽它们的资源),可是你可使用它在notebook中查看代码。

原文连接:https://towardsdatascience.com/a-visual-intuition-for-regularization-in-deep-learning-fe904987abbb

欢迎关注磐创AI博客站:
http://panchuang.net/

sklearn机器学习中文官方文档:
http://sklearn123.com/

欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/

相关文章
相关标签/搜索