【深度学习】激活引入非线性,池化预防过拟合

2024-06-10 11:38

本文主要是介绍【深度学习】激活引入非线性,池化预防过拟合,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

深度学习的入门过程(截图自《TensorFlow技术解析与实战.李嘉璇.2017.pdf》)

原博文:

12.1 两个看似闲扯的问题

在开讲本章内容之前,先请你思考两个问题呗:第一个问题,你能用直线画出一张漂亮的笑脸吗?第二个问题是,你知道那副著名的对联:“诸葛一生唯谨慎,吕端大事不糊涂”,说得是什么典故吗?

如果你不是抬杠的话,我想你第一个问题的答案,应该是不能。因为直线的表现力非常有限,只有曲线才能画出更美的线条。因此,才有英国画家和美学家威廉•荷加兹(William Hogarth,1697~1764)这个的结论:“世界上最美的线条是曲线”。

 

图1 诸葛亮的“过度拟合”

第二问题说的是,诸葛当然是指“诸葛亮”。其人掌军理政之谨慎,史家已有共识。但过于谨慎是有代价的,那就是面临新情况做决策时,考虑因素过多,思前顾后,从而使其判断力(或称之为预测力)大打折扣。而同样身居高位的吕端则不同。吕端是宋朝一个名宰相,别看他平时是糊里糊涂的,很多鸡零狗碎之事,他从不斤斤计较。但一旦涉及原则性、重要关键决策点时,吕端从不马虎,其风格有点像“大行不顾细谨”。

12.2 追寻问题的本质

前面我们提了两个问题,看似闲扯,其实不然。因为它们的答案都和今天的主题相关。问题一的答案其实是想说明一个结论,就是线性的事物,表达能力不强,而非线性则相反。我们知道,从宏观来将,在本质上,人工神经网络就分为两大类层:显层和隐层。“显层”就是我们能感知到的输入层和输出层,而“隐层”则是除了输入输出之外的无法被我们感知的层,它可以理解为数据的内在表达[1]。

在第二章中,我们已经提到,如果“隐层”有足够多的神经元,那么神经网络能够以任意精度逼近任意复杂度的连续函数,这就是大名鼎鼎的通用近似定理(Universal Approximation Theorem)[2]。通过在第八章BP算法的讲解中,我们可以看到,神经元与神经元的连接都是基于权值的线性组合。我们知道,线性的组合依然是线性的,那网络的表达能力就非常有限了。这样一来,通用近似定理又是如何起作用的呢?这就得请“激活”函数出马了?神经元之间的连接是线性的,但激活函数可不一定是线性的啊,有了非线性的激活层在,多么玄妙的函数,我们都能近似表征出来。所以,在卷积神经网络中,激活层是必须保留的。

第二个问题的答案,其实是想说明深度学习训练的两大难点:过拟合(overfitting)和欠拟合(underfitting)。那什么是过拟合和欠拟合呢?图12-2可形象地说明这两个概念的差别。

03b3249c96724ffe0417ee8fa0e81fd6c6790b93

图12-2 过拟合与欠拟合的直观类比

“欠拟合”比较容易理解,就是样本不够,或学习算法不精,连已有数据中的特征都没有学习好,自然当面对新样本做预测时,效果肯定也好不到哪里去。比如说,在图12-2中(右下图),若果仅仅把样本中的“四条腿”当作青蛙的特征,这“欠缺”的特征,就会把一只四条腿的壁虎也当作青蛙。其实,欠拟合比较容易克服,比如在决策树算法中扩展分枝,再比如在神经网络中增加训练的轮数,从而可以更加“细腻”地学习样本种的特征。

相比而言,要克服过拟合,就相对困难得多。在过拟合里,构建的模型必须一丝不苟地反映已知的所有数据,但这样一来,它对未知数据(新样本)的预测能力就会比较差。

这是因为,所谓的“已知”数据,其实也是有误差的!精准的拟合会把这些数据的误差给放大。从而导致,拟合得越精确,面对新样本时,预测的效果反而会更加糟糕。比如说图12-2中(右上图),误把背上斑点当做青蛙的特征,当新来的样本青蛙,仅仅由于背上没有斑点(不同于样本数据),就被判定为非青蛙,这岂不是很荒诞?“诸葛一生唯谨慎”,说的就是诸葛亮陷入“过拟合”状态,他容易被很多细节所迷惑,自然决策的质量就会受到影响。

“吕端大事不糊涂”说的就是,小事情上“难得糊涂”,大事情上“毫不含糊”。遇到新情况,吕端就不会受很多细节所左右。用机器学习的术语来讲,吕端的“泛化能力”比较强。

卷积神经网络也追求泛化(即防过拟合)能力,它是如何做到的呢?自然也得学习“吕端”的行为——别管那么多!

针对神经网络,就是再次降低数据量,让系统少学点。不要认为,训练数据越“全面”越好。想一想人类的学习就知道怎么回事了。当孩子还小正处于学习阶段时,妈妈们的浓浓爱意,总想通过“事无巨细”地照顾孩子表达出来。但在这种环境下“学习”出来的孩子,一旦踏上社会,适应新环境的能力就差很多,并不值得提倡。神经网络也是如此。

那该如何降低数据量呢?最简单的策略自然就是“采样(sampling)”了。其实,采样的本质就是力图以合理的方式“以偏概全”。这样一来,数据量自然就降低了。

在卷积神经网络中,采样是针对若干个相邻的神经元而言的,因此也称为“亚采样(Subsampling)”。可能是“亚采样”这个词的逼格不够高吧,于是研究者们又给它取了个更难懂的词:“池化(Pooling)”。“池化”其实仅仅是个字面的翻译,远没达不到“信达雅”的要求,如果非要向“采样”的含义靠拢,中国那句古话,“弱水三千只取一瓢”,似乎更有韵味。南京大学周志华老师就将其的意译为“汇合”,这样的翻译似乎更加传神。但拗不过太多人都把“Pooling”翻译成“池化”,那我们也就“池化”叫下去吧。

接下来,我们就详细说一说激活层和池化层到底是怎么回事吧。

12.3 细说激活层

通过前面的铺垫,现在我们应该知道,激活层存在的最大目的,莫过于引入非线性因素,以增加整个网络的表征能力。

这时,选取合适的“激活函数”就显得非常重要了。在前面的章节中,我们提到了常用的激活函数Sigmoid(或tanh函数),也是可用的(如图12-3所示)。

                                                             1d3fed3cd800355141f95429a25aacb66d2a9fc8            

 

图12-3 激活函数Sigmoid

但Sigmoid之类激活函数有个很大的缺点,就是它的导数值很小。比如说,Sigmoid的导数取值范围仅为[0, 1/4]。且当输入数据(x)很大或者很小的时候,其导数趋都近于0。这就意味着,很容易产生所谓的梯度消失(vanishing gradient)现象。没有了梯度的指导,那么神经网络的参数训练,就如同“无头的苍蝇”,毫无方向感。

因此,如何防止深度神经网络陷入梯度消失,或说如何提升网络的训练效率,一直都是深度学习非常热门的研究课题。目前,在卷积神经网络中,最常用的激活函数久是修正线性单元(Rectified Linear Unit,简称ReLU)。这个激活函数是由Hinton等人2010年提出来的[3]。标准的ReLU函数为f(x)=max(x,0),即当x>0时,输出x; 当x<=0时,输出0。如图12-4所示,请注意,这是一条曲线啊,只不过它在原点处不够那么圆润而已。

 

408e87fe4d45b8e71c7b733df1a81bff9d1f1f05

图12-4 激活函数ReLU

不要小看这个看起来有点简陋的模型,其实它的优点还不少。相比于Sigmoid类激活函数,ReLU激活函数的优点主要体现在如下三点。

1)单侧抑制。观察图12-4可见,当输入小于0时,神经元处于抑制状态。反之,当输入大于0,神经元处于激活状态。

2)相对宽阔的兴奋边界。观察图12-3和图12-4可见,Sigmoid的激活态(即f(x)的取值)集中在中间的狭小空间,而ReLU这不同,只要输入大于0,神经元一直都处于激活状态。

3)稀疏激活性。相比于Sigmoid之类的激活函数,稀疏性是ReLU的优势所在[4]。Sigmoid把抑制状态的神经元设置一个非常小的值,但即使这个值再小,后续的计算还少不了它们的参与,计算负担很大。但考察图12-4可知,ReLU直接把抑制态的神经元“简单粗暴”地设置为0,这样一来,就使得这些神经元不再参与后续的计算,从而造成网络的稀疏性,如图12-5所示。

920c739f81f619d532db6776fbb7289f56c95890

图12-5  ReLU激活函数产生稀疏连接关系

这个细小的变化,让ReLU在实际应用中大放异彩,除了减少了计算量,还减少了参数的相互依存关系(网络瘦身了不少),使其收敛速度远远快于其他激活函数,最后还在一定程度上缓解了过拟合问题的发生(对Dropout机制比较熟悉的读者可能会发现,图12-5和Dropout的迭代过程何其神似!)。ReLU的卓越表现,让深度学习的三位大咖Yann LeCun、Yoshua Bengio和Geoffery Hinton在2015年表示,ReLU是深度学习领域最受欢迎的激活函数。

前面的描述可能还过于抽象,下面我们再用一个更为生动的案例来理解ReLU的操作,图12-6演示了ReLU“修正”前后的特征图谱。

5ea58de0b74115f7533689c01eb8d75a971b6d7d

图12-6  ReLU“修正”前后的特征图谱

说到ReLU激活函数有如此神奇作用,其实还有一个原因,那就是这样的模型正好“暗合”生物神经网络工作机理。2003年纽约大学教授Peter Lennie的研究发现[5],大脑同时被激活的神经元只有1~4%,即神经元同时只对输入信号的少部分选择性响应,大量信号被刻意地屏蔽了,这进一步表明神经元工作的稀疏性。其实,这是容易理解的,因为生物运算也是需要成本的。进化论告诉我们,作为人体最为耗能的器官,大脑尽要可能节能,才能在恶劣的环境中“适者生存”。

当然,LeRU的这种简单直接的处理方式,也带来一些副作用。最突出的问题就是,会导致网络在训练后期表现得非常脆弱,以至于这时的ReLU也被戏称为“死掉的ReLU(dying ReLU)”。目前,也有一些对研究工作对ReLU实施改进,分别提出了一系列诸如leaky-ReLU,random ReLU及PReLU[6]等优化方案,有兴趣的读者可自行前往查阅相关文献。

前面说完了激活层,下面我们再聊聊池化层。

12.4 详解池化层

池化层亦称子采样层,它也是卷积神经网络的另外一个“神来之笔”。通常来说,当卷积层提取目标的某个特征之后,我们都要在两个相邻的卷积层之间安排一个池化层。

池化层函数实际上是一个统计函数。以如图12-7所示的二维数据为例,如果输入数据的维度大小为W×H,给定一个池化过滤器,其大小为w×h。池化函数考察的是在输入数据中,大小为w×h的子区域之内,所有元素具有的某一种特性。常见的统计特性包括最大值、均值、累加和及L2范数等。池化层函数力图用统计特性反应出来的1个值,来代替原来w×h的整个子区域。

c77299ce46fbcfa930549ce4de9a1477b7fd8557

图12-7 池化操作:将池化滤波器内的所有元素用某个统计量来代替

因此,可以这么说,池化层设计的目的主要有两个。最直接的目的,就是降低了下一层待处理的数据量。比如说,当卷积层的输出大小是32×32时,如果池化层过滤器的大小为2×2时,那么经过池化层处理后,输出数据的大小为16×16,也就是说现有的数据量一下子减少到池化前的1/4。当池化层最直接的目的达到了,那么它的间接目的也达到了:减少了参数数量,从而可以预防网络过拟合。

下面我们举例说明常用的池化策略最大化和平均化是如何工作的。我们以一维向量数据[1, 2, 3, 2]为例,来说明两种不同的池化策略在正向传播和方向传播中的差异[7]。

1)最大池化函数(max pooling

前向传播操作:取滤波器最大值作为输出结果,因此有forward(1, 2, 3, 2) = 3.

反向传播操作:滤波器的最大值不变,其余元素置0。因此有backward(3) = [0, 0, 3, 0]。

2)平均池化函数(average pooling

前向传播操作:取滤波器范围所有元素的平均值作为数据结果,因此有forward(1, 2, 3, 2) = 2.

后向传播操作:滤波器中所有元素的值,都取平均值,因此有backward(2) = [2, 2, 2, 2]。

有了上面的解释,我们很容易得出图12-7中所示的池化策略前向传播结果,如图12-8所示。

08210bb388f27d72fff82a1f543679d8eb25ae7c

图12-8 两种不同的池化策略结果比对图

阅读到此,读者可能会有个疑问?对于处理图片而言,如果池化层的过滤器2×2,就相当于将上一层4个像素合并到一个1像素。如果过滤器的大小是6×6,那就相当于将上一层36个像素合并到一个1像素,这也岂不是让图像更加模糊了。的确是这样,通过池化操作后,原始图像就好像被打上了一层马赛克,如图12-9所示。对池化如何影响可视化图像的理论分析,感兴趣的读者可参阅LeCun团队的论文[8]。

5d4e01fc38ccdc9afffaae29b567b1eeac1a97e2

图12-9  池化前后的特征图谱变化(绘图参考了Facebook团队的资料)

图12-9给出了池化之后的“马赛克”类的图片,很显然,人类是不喜欢这样模糊图片的。但请注意,计算机的“视界”和人类完全不同,池化后的图片,丝毫不会影响它们对图片的特征提取。

这么说是有理论支撑的。这个理论就是局部线性变换的不变性(invariant)。它说的是,如果输入数据的局部进行了线性变换操作(如平移或旋转等),那么经过池化操作后,输出的结果并不会发生变化。局部平移“不变性”特别有用,尤其是我们关心某个特征是否出现,而不关心它出现的位置时。例如,在模式识别场景中,当我们检测人脸时,我们只关心图像中是否具备人脸的特征,而并不关心人脸是在图像的左上角和右下角。

因为池化综合了(过滤核范围内的)全部邻居的反馈,即通过k个像素的统计特性而不是单个像素来提取特征,自然这种方法能够大大提高神经网络的性能[9]。

12.5 勿忘全连接层

前面我们讲解了卷积层、激活层和池化层。但别忘了,在卷积神经网络的最后,还有一个至关重要的“全连接层(Fully Connected Layer,简称FC)”。“全连接”意味着,前层网络中的所有神经元都与下一层的所有神经元连接。全连接层设计目的在于,它将前面各个层学习到的“分布式特征表示”,映射到样本标记空间,然后利用损失函数来调控学习过程,最后给出对象的分类预测。

实际上,全连接层是就是传统的多层感知器(类似于我们在第八章学过的BP网络,不熟悉的读者可以前往查阅)。不同于BP全连接网络的是,卷积神经网络在输出层使用的激活函数不同,比如说它可能会使用Softmax函数。

这里,我们简单介绍一下这个Softmax函数。在数学上,Softmax函数又称归一化指数函数,它是逻辑函数的一种推广,其公式如(12-2)所示。

1a43cbf62ea565dbcac409fc16fc97538cb4da7c                                                                        (12-2)

我们常用SVM(支持向量机)来做分类器,SVM在分类的最后,会给一系列的标签如“猫”“狗”“船”等打一个具体分值,如[4, 1, -2],而Softmax函数有所不同,它把这些分值实施规则化(regularization),也就是说,将这些实分值转换为一系列的概率值(信任度),如[0.95, 0.04, 0.0],如图12-10所示。由此可见,其实SVM和Softmax是高度相互兼容的,不过是表现形式不同而已。

8d018fd077098a57b2590036e937eb9f8c79bdee

图12-10  Softmax输出层示意图(绘图参考了台湾大学李宏毅博士的工作)

虽然全连接层处于卷积神经网络最末的位置,看起来貌不惊人似的,但由于全连接层的参数冗余,导致该层的参数个数占据整个网络参数的绝大部分。这样一来,稍有不慎,全连接层就容易陷入过拟合的窘境,导致网络的泛化能力难尽人意。

12.7 小结与思考

到此为止,我们介绍完毕了卷积神经网络的所有核心层。各个层各司其职,概括起来,卷积层从数据中提取有用的特征;激活层为网络中引入非线性,增强网络表征能力;池化层通过采样减少特征维度,并保持这些特征具有某种程度上的尺度变化不变性。在全连接层实施对象的分类预测。

通过上面的学习,请你思考如下问题。

(1)由于全连接层因为参数个数太多,容易出现过拟合的现象,你知道Hinton教授的团队采取的是什么措施来弱化过拟合的吗?(提示:Dropout)

(2)全连接层的性能不甚如人意,很多研究人员做了改进。比如,现任360公司首席科学家颜水成博士团队曾发表了论文“网中网(Network In Network,NIN)[10]”。文中提出了用全局均值池化策略(Global Average Pooling,GAP),取代全连接层,你知道它的工作原理是什么吗?

此外,向推荐读者学习李飞飞(Feifei Li)教授团队在斯坦福大学开设的公开课:面向可视化识别的卷积神经网络(CS231n: Convolutional Neural Networks for Visual Recognition),课程极其精彩。毫不夸张地说,比Ian Goodfellow等人所著的《深度学习》可读性要高很多[9]。

写下你的感悟,祝你每天都有收获。

参考文献

[1] 周志华.机器学习.清华大学出版社.2016.1

[2] Hornik K, Stinchcombe M, White H. Multilayer feedforward networks are universal approximators[J]. Neural networks, 1989, 2(5): 359-366.

[3] Nair V, Hinton G E. Rectified linear units improve restricted boltzmann machines[C]// International Conference on International Conference on Machine Learning. Omnipress, 2010:807-814.

[4] Glorot X, Bordes A, Bengio Y. Deep Sparse Rectifier Neural Networks[C]// International Conference on Artificial Intelligence and Statistics. 2011.

[5] Lennie P. The Cost of Cortical Computation[J]. Current Biology Cb, 2003, 13(6):493-7.

[6] He K, Zhang X, Ren S, et al. Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification[C]// IEEE International Conference on Computer Vision. IEEE, 2015:1026-1034.

[7] 黄安埠. 深入浅出深度学习.中国工信出版社.2017.6

[8] Boureau Y L, Ponce J, Lecun Y. A Theoretical Analysis of Feature Pooling in Visual Recognition[C]// International Conference on Machine Learning. DBLP, 2010:111-118.

[9] Ian Goodfellow, Yoshua Bengio, Aaron Courville. 深度学习.人民邮电出版社。 2017.8

[10] Lin M, Chen Q, Yan S. Network In Network[J]. Computer Science, 2013.

文章作者:张玉宏,著有《品味大数据》一书。

本文节选自《深度学习之美》一书,电子工业出版社2018年7月出版。

这篇关于【深度学习】激活引入非线性,池化预防过拟合的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1048063

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件