【翻译】Sklearn与TensorFlow机器学习实用指南 —— 第13章 卷积神经网络(上)

浏览: 1715

作者:ApacheCN【翻译】  Python机器学习爱好者

Python爱好者社区专栏作者

GitHub:https://github.com/apachecn/hands_on_Ml_with_Sklearn_and_TF



尽管 IBM 的深蓝超级计算机在1996年击败了国际象棋世界冠军 Garry Kasparvo,直到近几年计算机都不能可靠地完成一些看起来较为复杂的任务,比如判别照片中是否有狗以及识别语音。为什么这些任务对于人类而言如此简单?答案在于感知主要发生在我们意识领域之外,在我们大脑中的专门视觉,听觉和其他感官模块内。当感官信息达到我们的意识时,它已经被装饰了高级特征;例如,当你看着一只可爱的小狗的照片时,你不能选择不看这只小狗,或不注意它的可爱。你也不能解释你如何认出这是一只可爱的小狗,这对你来说很明显。因此,我们不能相信我们的主观经验:感知并不是微不足道的,理解它我们必须看看感官模块是如何工作的。

卷积神经网络(CNN)是从大脑视觉皮层的研究中出现的,自 20 世纪 80 年代以来它们一直用于图像识别。在过去的几年里,由于计算能力的增加,可用训练数据的数量以及第 11 章介绍的训练深度网络的技巧,CNN 致力于在某些复杂的视觉任务中做出超出人类的表现。他们使图像搜索服务,自动驾驶汽车,视频自动分类系统等变得强大。此外,CNN 并不局限于视觉感知:它们在其他任务中也很成功,如语音识别或自然语言处理(NLP); 然而,我们现在将专注于视觉应用。

在本章中,我们将介绍 CNN 的来源,构建它们模块的外观以及如何使用 TensorFlow 实现它们。然后我们将介绍一些最好的 CNN 架构。

视觉皮层的结构

David H.Hubel 和 Torsten Wiesel 在 1958 年和 1959 年对猫进行了一系列实验(以及几年后在猴子上的实验),对视觉皮层的结构提供了重要的见解(1981 年作者因此获得了诺贝尔生理和医学奖)。具体来说,他们发现视皮层中的许多神经元有一个小的局部感受野,这意味着它们只对位于视野中有限的一部分区域的视觉刺激起作用(见图 13-1,五个神经元的局部感受野由虚线圆圈表示)。不同神经元的感受野可能重叠,并且它们一起平铺了整个视野。此外,作者表明,一些神经元只对水平线方向的图像作出反应,而另一些神经元只对不同方向的线作出反应(两个神经元可能具有相同的感受野,但对不同方向的线作出反应)。他们还注意到一些神经元具有较大的感受野,并且它们对较复杂的模式作出反应,这些模式是较低层模式的组合。这些观察结果让我们想到:更高级别的神经元是基于相邻低级神经元的输出(在图 13-1 中,请注意,每个神经元只与来自前一层的少数神经元相连)。这个强大的结构能够检测视野中任何区域的各种复杂图案。

这些对视觉皮层的研究启发了 1980 年推出的新认知机(neocognitron),后者逐渐演变为我们现在称之为卷积神经网络。一个重要的里程碑是 Yann LeCun,LéonBottou,Yoshua Bengio 和 Patrick Haffner 于 1998 年发表的一篇论文,该论文引入了着名的 LeNet-5 架构,广泛用于识别手写支票号码。这个架构有一些你已经知道的构建块,比如完全连接层和 Sigmoid 激活函数,但是它还引入了两个新的构建块:卷积层和池化层。现在我们来看看他们。

卷积层

CNN 最重要的组成部分是卷积层:第一卷积层中的神经元不是连接到输入图像中的每一个像素(就像它们在前面的章节中那样),而是仅仅连接到它们的局部感受野中的像素(参见图 13-2)。 进而,第二卷积层中的每个神经元只与位于第一层中的小矩形内的神经元连接。 这种架构允许网络专注于第一隐藏层中的低级特征,然后将其组装成下一隐藏层中的高级特征,等等。 这种层次结构在现实世界的图像中是很常见的,这也是 CNN 在图像识别方面效果很好的原因之一。

到目前为止,我们所看到的所有多层神经网络都有由一长串神经元组成的层,在输入到神经网络之前我们必须将输入图像压缩成 1D。 现在,每个图层都以 2D 表示,这使得神经元与其相应的输入进行匹配变得更加容易。

卷积核/过滤器

神经元的权重可以表示为局部感受野大小的小图像。 例如,图 13-5 显示了两个可能的权重集,称为过滤器(或卷积核)。第一个表示为中间有一条垂直的白线的黑色正方形(除了中间一列外,这是一个充满 0 的7×7矩阵,除了中央垂直线是 1)。 使用这些权重的神经元会忽略除了中央垂直线以外感受野的一切(因为除位于中央垂直线以外,所有的输入都将乘 0)。第二个卷积核是一个黑色的正方形,中间有一条水平的白线。 再一次,使用这些权重的神经元将忽略除了中心水平线之外的局部感受野中的一切。

现在,如果一个图层中的所有神经元都使用相同的垂直线卷积核(以及相同的偏置项),并且将网络输入到图 13-5(底部图像)中所示的输入图像,则该图层将输出左上图像。 请注意,垂直的白线得到增强,其余的变得模糊。 类似地,如果所有的神经元都使用水平线卷积核,右上角的图像就是你所得到的。 注意到水平的白线得到增强,其余的则被模糊了。因此,使用相同卷积和的一个充满神经元的图层将为您提供一个特征映射,该特征映射突出显示图像中与卷积和最相似的区域。 在训练过程中,CNN 为其任务找到最有用的卷积和,并学习将它们组合成更复杂的模式(例如,交叉是图像中垂直卷积和和水平卷积和都激活的区域)。

叠加的多个特征映射

到目前为止,为了简单起见,我们已经将每个卷积层表示为一个薄的二维层,但是实际上它是由几个相同大小的特征映射组成的,所以使用3D图表示其会更加准确(见图 13-6)。 在一个特征映射中,所有神经元共享相同的参数(权重和偏置,权值共享),但是不同的特征映射可能具有不同的参数。 神经元的感受野与前面描述的相同,但是它延伸到所有先前的层的特征映射。 简而言之,卷积层同时对其输入应用多个卷积核,使其能够检测输入中的任何位置的多个特征。

事实上,特征地图中的所有神经元共享相同的参数会显着减少模型中的参数数量,但最重要的是,一旦 CNN 学会识别一个位置的模式,就可以在任何其他位置识别它。 相比之下,一旦一个常规 DNN 学会识别一个位置的模式,它只能在该特定位置识别它。

而且,输入图像也由多个子图层组成:每个颜色通道一个。 通常有三种:红色,绿色和蓝色(RGB)。 灰度图像只有一个通道,但是一些图像可能更多 - 例如捕捉额外光频(如红外线)的卫星图像。


Python爱好者社区历史文章大合集:

Python爱好者社区历史文章列表(每周append更新一次)

福利:文末扫码立刻关注公众号,“Python爱好者社区”,开始学习Python课程:

关注后在公众号内回复“课程”即可获取:

小编的Python入门免费视频课程!!!

【最新免费微课】小编的Python快速上手matplotlib可视化库!!!

崔老师爬虫实战案例免费学习视频。

陈老师数据分析报告制作免费学习视频。

玩转大数据分析!Spark2.X+Python 精华实战课程免费学习视频。

推荐 0
本文由 Python爱好者社区 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册