神经网络基础知识及模型优化(二)

本文深入探讨了神经网络中的正则化技术,包括过拟合的概念、权值衰减和Dropout策略,解释了它们如何防止过拟合。此外,还介绍了超参数验证的重要性,如验证数据的选择、超参数最优化方法以及如何为超参数选择合适的范围。最后,文章阐述了偏差和方差在模型性能评估中的角色,帮助理解模型拟合程度的平衡。
摘要由CSDN通过智能技术生成


前言

接着上一章介绍了参数的更新方法,权重的初始化方法以及Batch Normalization后,这一章将对正则化、超参数验证等进行简单的描述。


一、正则化

1.过拟合

在机器学习中,过拟合是一个很常见的问题。过拟合是指模型只能拟合训练数据,但却不能很好的你和其他数据。奇迹学习的目标即使提高模型的泛化能力。而过拟合的主要原因有:
(1)模型参数过多、表现力过强。
(2)训练数据较少。

一般通过观察模型在训练集和测试集上的表现可以判断模型是否过拟合了。例如模型可能在训练集中的准确率几乎达到了100%,但是在测试集中离100%仍有较大的差距,即模型只你喝了训练数据,对一般的数据拟合的效果较差。例如,我们故意设置一个满足过拟合条件的模型和数据集,最终训练结果如下图所示。

在这里插入图片描述

2.权值衰减

权值衰减一直被用来作为一种抑制过拟合的方法。通过在学习的过程中对较大的权重进行惩罚来抑制过拟合。例如,在神经网络中将损失函数加上权重的平方范数(L2范数)来抑制权重变大。例如将权重记为 w w w,那么L2范数的权值衰减就是 1 2 λ w 2 \frac{1}{2}λw^2 21λw2,即将 1 2 λ w 2 \frac{1}{2}λw^2 21λw2加到损失函数上。其中λ是控制正则化强度的超参数。显然,λ设置的越大,对大的权重实施的惩罚就越重。另,开头的 1 2 \frac{1}{2} 21是为了让求导更方便,在反向传播的时候只需要加上正则化项的导数λ w w w

L2范数相当于各个元素的平方和。假设有权重 w = ( w 1 , w 2 , . . . , w n ) w=(w_1,w_2,...,w_n) w=(w1,w2,...,wn),则L2范数可以用 w 1 2 + w 2 2 + . . . + w n 2 \sqrt{w_1^2+w_2^2+...+w_n^2} w12+w22+...+wn2 求出。同时除了L2范数,还有L1范数、L ∞ \infin 范数等等。其中L1范数是各个元素的绝对值之和,相当于 ∣ w 1 ∣ + ∣ w 2 ∣ + . . . + ∣ w n ∣ |w_1|+|w_2|+...+|w_n| w1+w2+...+wn。而L ∞ \infin 范数也成为Max范数,相当于各个元素中绝对值最大的那一个。

上述三种范数都可用作正则化项,但是最常用的还是L2范数。

接下来我们将λ取为0.1,并结合上述故意过拟合的实验,采用L2范数进行正则化,最终实验结果如下图所示。

在这里插入图片描述

可以看出,虽然训练数据和测试数据之间仍有差距,但是相较于没有权值衰减之前,显然差距是变小了,即可证明过拟合受到了抑制。

3.Dropout

使用权值衰减是一种较为简单的抑制过拟合的方法。但是如果模型较为复杂的情况下,仅通过权值衰减难以有效的解决,此时我们可以使用Dropout方法。Dropout是在学习的过程中随机删除部分隐层的神经元,被选中删除的神经元不再进行信号的传递。同时,在测试的时候虽然会传递所有的神经元信号,但是对于各个神经元的输出要乘上训练时的删除比例再输出。Dropout示意图如下图所示。

在这里插入图片描述

在反向传播的时候,对于dropout掉的神经元,即正向传播的时候没有传递信号的神经元,反向传播的时候信号将停在那里。

接下来,Dropout的实验使用了7层网络(每层有100个神经元,激活函数为ReLU),一个使用Dropout,另一个不适用Dropout,而实验结果如下图所示。

在这里插入图片描述
通过对比可以看出,使用了Dropout后训练集和测试集的精度差距变小了。通过使用Dropout,即便是表现力强的网络,也可以抑制过拟合。

4.为什么正则化有利于预防过拟合呢?

假设存在着一个庞大的深度拟合的神经网络,如下图(请将其想象成一个很深很大,并且可能存在过拟合情况的神经网络)。
在这里插入图片描述
由于遇到过拟合的情况,我们尝试通过正则化的方式进行处理。以L2范式为例,从直观上理解,如果λ值设置的足够大,那么权重 w w w就会接近于0,这相当于把隐藏单元的权重设置为0,那么一个很大的神经网络就会被简化成一个很小的网络,如同一个逻辑回归单元,可是深度很大。他会使网络从过拟合的状态逐步接近作图中高偏差的状态,具体如下图。

在这里插入图片描述
但是,λ会存在一个中间值,使得模型接近中间的“适度拟合”的状态。

从直观角度我们感受一下正则化为什么可以预防过拟合,假设我们使用的是tanh作为激活函数,并用 g ( z ) 表 示 t a n h ( z ) g(z)表示tanh(z) g(z)tanh(z),那么如果 z z z的值非常小,那么就只能取到靠中间的部分值,接近于线性状态,具体如下图。

在这里插入图片描述
即如果 z z z的值在靠中间的范围,那么 g ( z ) g(z) g(z)大致呈线性,而每层几乎都是线性的,那就和线性回归函数是一样的。因为,即使再深层次的网络,如果采用的是线性激活函数,那么他仍智能计算线性函数,即不适用于做复杂的决策。

总的来说,如果正则化参数变得很大,那么参数 W W W很小, z z z也会相对变小,则激活函数会相对呈线性,从而整个神经网络会变得简单,不会发生过拟合。

二、超参数的验证

神经网络中,超参数是指各层的神经网络数量、batch大小、参数更新时的学习率或权值衰减等。如果这些超参数的值没有设置合适的值,模型的性能都会很差。接下来将会介绍一些能够高效的寻找超参数的值的方法。

1.验证数据

通常,我们将数据分成训练数据和测试数据,其中训练数据用来学习,而测试数据用来评估模型的泛化能力。但是要注意不能使用测试数据评估超参数的性能,因为如果使用测试数据调整超参数,超参数的值会对测试数据发生过拟合,即会导致超参数的值被调整为只拟合测试数据。而这很可能会导致该模型不能很好的拟合其他数据,导致模型的泛化能力低。因此,调整超参数的时候必须使用超参数专门的确认数据,而这种数据我们一般称之为验证数据。

即先通过训练数据来对模型进行训练,然后通过验证数据来评估和调整超参数,最后通过用测试数据泛化能力。

2.超参数的最优化

进行超参数的最优化时,要逐渐缩小超参数的“好值”的范围,即一开始先大致设定一个范围(一般只需要大致的指定,一般以“10的阶乘”为尺度指定范围,例如0.001到1000这样),然后在范围中不断地随机选择一个超参数(即进行采样),然后用这个采样到的值进行识别精度的评估。然后观察识别精度并根据结果缩小超参数的“好值”的范围。通过不断的迭代就可以逐渐的确定超参数的合适范围,最终找到合适的超参数的值。同时,在超参数的搜索过程中需要尽快放弃那些不符合逻辑的超参数,减少学习的epoch。

有报告指出,相较于网格化等有规律的搜索方式,随机采样的搜索方式效果可能会更好。这是因为在多个超参数中,各个超参数对最终精度的影响程度不同。

3.为超参数选择合适的范围

我们知道了,在超参数的范围中,随机取值可以提升搜索效率,但是并不是在有效范围内随机取值,而是选择合适的标尺,用于探索这些超参数。

假设你要选取隐层单元的数量 n n n,假设你取值范围是从50到100中随机选取某点,这时你可以在其中随机取点,这是比较合理的,但是这种方式对某些超参数并不适用。例如,如果你在搜索超参数 a a a(学习速率),假设你怀疑他的取值是范围是0.0001到1,那么如果你在这个区间中直接随机取值,那么它将有90%的概率落到0.1到1之间,这看上去不太合理。而这种情况下,应该采用对数标尺搜索超参数的方式,此时并不采用线性轴作为随机取值的区间,而是分别依次选取0.0001,0.001,0.01,0.1和1,在对数轴上均匀随机取点。

如果你想有更多正式的数学证明去说明为什么要用对数的方式进行随机取值,因为当我们发现当 a a a接近0的时候,所得结果的灵敏度会发生变化,即使 a a a仅有微小的变化,例如从0.001变成0.0005,会对结果产生巨大影响。相反0.1到0.1005之间的取值却无关紧要,其结果几乎不会发生变化。

三、偏差和方差

实际上,几乎所有的机器学习从业人员都或多或少对偏差和方差有一定了解,大家总是分开的讨论偏差和方差,却很少将两者结合起来进行权衡。假设我们存在一个数据集,该数据集的分布如下图所示。

在这里插入图片描述
假设这就是一个数据集,如果要用逻辑回归对这个数据集进行拟合,那么他的拟合效果一定很差,即“欠拟合”,因此就会出现高偏差的情况。相反,如果我们用一个深度神经网络对该数据集进行拟合,可能能够可能会造成数据过度拟合的情况,即“过拟合”,因此就会出现方差较高的情况。而两者之中,数据能够适度拟合的分类器我们称之为“适度拟合”,看起来更加的合理,三种情况的示意图如下所示。

在这里插入图片描述

假设有一个识别猫咪图片的数据集,为了方便论证,我们假设人类可以辨别图片中是否为猫咪,即通过肉眼识别一张图片是否为猫咪的图片的错误率几乎可以达到0%(即最优误差可以达到0%)。

此时,假设训练集误差为1%,验证集误差为11%,那么可以看出训练集效果非常好,而验证集相对较差(训练集和最优误差之间仅差1%,而验证集和训练集之间差距有10%),因此判断出现了过拟合现象,也成为高方差。

假设训练集的误差是15%,验证集误差是16%,那么说明训练数据的拟合度不够高,发生了欠拟合,即该模型的偏差较高,相反验证集产生的结果是合理的,其错误率只比训练集多1%。

当然,可能由于图片比较模糊等原因,人眼辨别的错误了也达到15%,那么上述情况种训练集误差几乎等于贝叶斯最优误差,并且验证集误差仅高出1%,那么可以说这个模型是非常理想的,偏差和方差都很低。

一般我们训练一个网络的步骤为:先训练一个初始模型,然后根据训练集误差进行评估,即判断该模型的偏差高不高。如果偏差很高,甚至无法拟合训练集,那么就应该选择一个新的网络,比如含有更多隐藏层或者更多隐藏单元的网络,或者花费更多时间来训练网络,采用更好的优化算法等等,直到解决掉偏差问题,这是最低标准,即能够较好的拟合训练集。然后通过验证集来对方差进行评估,如果方差较高最好的办法是采用更多的数据。但在无法获取更多数据的情况下,我们可以通过正则化来减少过拟合,通过不断地尝试最终找出一个低偏差、低方差的模型。


参考文献

本文的参考内容有:
深度学习入门:基于Python的理论与实现
吴恩达老师的深度学习笔记(2017)


总结

这一章主要讲述了正则化及其方式、超参数的调优以及偏差和方差。至此,分成两章我将所看到的最近认为有用的知识点记录完啦,如果有错误及不足之处,欢迎大家批评指正!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值