关于算法:恒源云卷积神经网络的工作原理

42次阅读

共计 4733 个字符,预计需要花费 12 分钟才能阅读完成。

文章起源 | 恒源云社区

原文地址 | 卷积神经网络的工作原理

原文作者 | instter


视频链接
每当深度学习又有什么重大突破时,这些停顿十有八九都和卷积神经网络(Convolutional Neural Networks,CNN)无关。CNN 又被称为 CNNs 或 ConvNets,它是目前深度神经网络(deep neural network)畛域的倒退主力,在图片分别上甚至能够做到比人类还精准的水平。如果要说有任何办法能不负大家对深度学习的冀望,CNN 相对是首选。

它们特地棒的中央在于它们很容易了解,至多当你将它们分解成它们的根本局部时。我将疏导您实现它。有一段视频更具体地探讨了这些图像。如果两头有什么不懂的中央,只有点击图片,就能跳到影片中对应的阐明。

X’s and O’s


为了阐明 CNN,咱们能够从一个非常简单的例子开始:辨识图片上的符号是圈还叉。这个例子一方面曾经能很好阐明 CNN 的运作原理,另一方面也够简略,免得咱们拘泥于不必要的细节。在这里 CNN 最重要的工作,就是每当咱们给它一张图,它就会回报下面的符号是圈还是叉。对它来说后果永远是这两者之一。

首先咱们能够想到分别图片最简略的办法,是间接用圈和叉的图片去比对新的图片,看图上的符号比拟像哪个。但事件没有这么简略,因为电脑在比对这些图片的时候十分刻板。在电脑看来,这些图片只是一群排成二维矩阵、带有地位编号的像素(就跟棋盘一样)。在咱们的例子里,红色格子(即笔画)的值为 1,彩色格子(即背景)的值为 -1。所以在比对图片时,如果有任何一个格子的值不相等,电脑就会认为两张图不一样。现实上,咱们心愿不论在平移、放大、旋转或变形等状况下,电脑都能正确判断符号。这时 CNN 就派上用场了。

特色


CNN 会比拟两张图片里的各个部分,这些部分被称为特色(feature)。比起比拟整张图片,在类似的地位上比对大略特色,CNN 能更好地分辨两张图片是否雷同。

一张图片里的每个特色都像一张更小的图片,也就是更小的二维矩阵。这些特色会捕获图片中的共通因素。以叉叉的图片为例,它最重要的特色包含对角线和两头的穿插。也就是说,任何叉叉的线条或中心点应该都会合乎这些特色。

卷积


每当 CNN 分辨一张新图片时,在不晓得上述特色在哪的状况下,CNN 会比对图片中的任何中央。为了计算整张图片里有多少相符的特色,咱们在这里发明了一套筛选机制。这套机制背地的数学原理被称为 卷积(convolution),也就是 CNN 的名称由来。

卷积的基本原理 , 要计算特色和图片部分的相符水平,只有将两者各个像素上的值相乘、再将总和除以像素的数量。如果两个像素都是红色(值为 1),乘积就是 ; 如果都是彩色(值为 -1),乘积就是。也就是说像素相符的乘积为 1,像素相异的乘积为 -1。如果两张图的每个相素都相符,将这些乘积加总、再除以像素数量就会失去 1; 反之,如果两者的像素齐全相异,就会失去 -1。1 * 1 = 1(-1) * (-1) = 1

咱们只有反复上述过程、演绎出图片中各种可能的特色,就能实现卷积。而后,咱们能够依据每次卷积的值和地位,制作一个新的二维矩阵。这也就是利用特色筛选过后的原图,它能够通知咱们在原图的哪些地方能够找到该特色。值越靠近 1 的部分和该特色越相符,值越靠近 - 1 则相差越大,至于靠近值靠近 0 的部分,则简直没有任何类似度可言。

下一步是将同样的办法利用在不同特色上,在图片中各个部位的卷积。最初咱们会失去一组筛选过的原图,每一张图都对应了一个特色。咱们能够将整段卷积运算,简略想成繁多的解决步骤。这个步骤被称为卷积层,这也代表前面还有更多层。

从 CNN 的运作原理,不难看出它很耗运算资源。尽管咱们能够只用一张纸解释完 CNN 如何运作,但运作途中相加、相乘和相除的数量能够减少得十分快。用数学来表白,能够说这些运算的数量,会随着(一)图片中相素的数量、(二)每个特色中像素的数量、以及(三)特色的数量出现性增长。有了这么多影响运算数量的因素,CNN 所解决的问题能够不费吹灰之力地变得非常复杂,也难怪一些芯片制造商为了因应 CNNs 的运算需要,正在设计和制作专用的芯片。

池化


另一个 CNN 所应用的弱小工具是 池化(pooling)。池化是一个压缩图片并保留重要信息的办法, 池化会在图片上选取不同窗口(window),并在这个窗口范畴中抉择一个最大值。实务上,边长为二或三的正方形范畴,搭配两像素的距离(stride)是满现实的设定。

原图通过池化当前,其所蕴含的像素数量会降为本来的四分之一,但因为池化后的图片蕴含了原图中各个范畴的最大值,它还是保留了每个范畴和各个特色的相符水平。也就是说,池化后的信息更专一于图片中是否存在相符的特色,而非图片中哪里存在这些特色。这能帮忙 CNN 判断图片中是否蕴含某项特色,而不用分心于特色的地位。这解决了后面提到电脑十分死板的问题。

所以,池化层的功能是将一张或一些图片池化成更小的图片。最终咱们会失去一样数量、但蕴含更少像素的图片。这也有助于改善方才提到的消耗运算问题。当时将一张八百万像素的图片简化成两百万像素,能够让后续工作变得更轻松。

线性整流单元


另一个轻微但重要的步骤是 线性整流单元(Rectified Linear Unit,ReLU),它的数学原理也很简略——将图片上的所有正数转为 0。这个技巧能够防止 CNNs 的运算后果趋近 0 或无限大,它就像 CNNs 的车轴润滑剂一样——没有什么很酷的技术,但没有它 CNNs 也走不了多远。

线性整流后的后果和原图会有雷同数量的像素,只不过所有的负值都会被换成零。

深度学习


到这里,读者可能曾经发现每一层运算的输出(二维矩阵)和输入(二维矩阵)都差不多,这代表咱们能够像叠乐高积木一样,将每一层叠在一起。所以原图在通过筛选、整流、池化之后会变成一组更小、蕴含特色信息的图片。接下来,这些图片还能够再被筛选和压缩,它们的特色会随着每次解决变得更简单,图片也会变得更小。最初,比拟低阶的解决层会蕴含一些简略的特色,例如棱角或光点; 更高阶的解决层则会蕴含一些比较复杂的特色,像是形态或图案。这些高级的特色通常曾经变得很好辨认,比方说在人脸识别的 CNN 中,咱们能够在最高阶的解决层内看出残缺的人脸。

全连贯层


最初,CNN 还有一项秘密武器——全连贯层(fully connected layers)。全连贯层会汇合高阶层中筛选过的图片,并将这些特色信息转化为票数。在咱们的例子里有两个选项:圈或叉。在传统的神经网络架构中,全连贯层所表演的角色是次要构建单元(primary building block)。当咱们对这个单元输出图片时,它会将所有像素的值当成一个一维清单,而不是后面的二维矩阵。清单里的每个值都能够决定图片中的符号是圈还是叉,不过这场选举并不全然专制。因为某些值能够更好地判断叉,有些则更适宜用来判断圈,这些值能够投的票数会比其余值还多。所有值对不同选项所投下的票数,将会以 权重(weight) 连结强度(connection strength)的形式来示意。

所以每当 CNN 判断一张新的图片时,这张图片会先通过许多低阶层,再到达全链接层。在投票表决之后,领有最高票数的选项将成为这张图片的类别。

和其余阶层一样,多个全链接层也能够被组合在一起,因为它们输出(清单)和输入(投票后果)的模式十分相近。实务上,咱们能够将多个全链接层组合在一起,其中几层会呈现一些虚构、暗藏的投票选项。每当咱们新增一层全链接层,整个神经网络就能够学习更简单的特色组合,所做出的判断也会更精确。

反向流传


到目前为止的阐明看起来都很不错,但其实背地还有一个大问题——特色从何而来?以及在全链接层中,咱们该如何决定权重?如果咱们得亲手实现这些工作,CNN 应该不会像当初一样热门。幸好,有个名叫反向流传(backpropagation)的机器学习技巧能够帮忙咱们解决这个问题。

为了应用反向流传,咱们须要先筹备一些曾经有答案的图片。这代表咱们须要先静下心来,为几千张图片标上圈和叉。接着咱们得筹备一个未经训练的 CNN,其中任何像素、特色、权重和全连贯层的值都是随机决定的。而后咱们就能够用一张张标好的图片训练这个 CNN。

通过 CNN 的解决,每张图片最终都会有一轮决定类别的选举。和之前标好的正解相比,这场选举中的误判,也就是辨识误差,能够通知咱们怎么才是好的特色跟权重。咱们能够通过调整特色和权重,让选举所产生的误差升高。在每次调整后,这些特色和权重会被微调高一点或低一点,误差也会被从新计算,胜利升高误差的调整将被保留。所以当咱们调整过卷积层里的每个像素、和全链接层里的每个权重当前,咱们能够失去一组略微更擅于判断以后图片的权重。接着咱们能够反复以上步骤,识别更多已标记的图片。训练过程中,个别图片里的误判会过来,但这些图片中共通的特色和权重会留下。如果有够多的已标记图片,这些特色和权重的值最初会趋近一个擅于辨识大多数图片的稳固状态。

不用说,反向传导也是个很消耗运算资源的步骤,这也是另一个驱使厂商生产非凡元件的起因。

超参数

除了以上阐明,CNN 还是有些很难解释和学习的面向。CNN 的设计者须要做很多决定,包含以下问题。

  • 每个卷积层中该有多少特色?每个特色中该有多少像素?
  • 每个池化层中的窗口大小为何?距离又该多长?
  • 每个额定的全链接层该有多少暗藏神经元(选项)?

除了这些问题,咱们还须要思考很多高阶的构造问题,像是 CNN 中该有多少解决层、程序为何。有些深度神经网络可能包含上千个解决层,设计上也就有十分多可能性。

有了这么多排列组合,咱们只能测试其中一小部分的 CNN 设定。因而 CNN 的设计通常会随着机器学习社群所累积下来的常识演进,效力上偶然会呈现一些出其不意的晋升。尽管咱们曾经介绍了一些根本的 CNN 构造,但除此之外还有很多经测试后发现无效的改良技巧,例如应用新型解决层,或用更简单的形式连贯不同解决层。

图形处理之外


咱们的圈和叉例子和图像识别无关,不过 CNN 也能解决其余型态的数据,技巧是将任何数据转成相似图片的模式。例如,咱们能够将音频依据工夫细分,再将每一小段的声音分成高音、中音、低音或其余更高的频率。如此一来,咱们就能够把这些信息组成一个二维矩阵,其中各行代表不同工夫、各列代表不同频率。在这张假图片里,越相近的「像素」,彼此之间的关联性越高。CNN 很善于解决这样的数据,研究者们也施展创意,将自然语言解决(natural language processing)中的文字数据、和新药研发过程中的化学数据都转成 CNN 能够解决的模式。

不过当每一横列(row)代表一位顾客、每始终行(column)别离代表这位顾客的姓名、邮箱、购买和浏览纪录等不同信息时,这种顾客数据并非 CNN 能够解决的模式。因为在这个例子里,行和列的地位并不重要,也就是说在不影响信息的状况下,它们能够被任意排列。相较之下,一张图片里像素的行列地位如果被调换,通常会丢失本来的意义。

所以应用 CNN 的一个窍门是如果数据不会受扭转行列程序所影响,这种数据就不适宜应用 CNN 解决。不过如果能够将问题转成相似图片辨认的模式,那 CNN 很可能是最现实的工具。
扩大浏览:CS231n 课堂笔记

参考

  1. https://e2eml.school/how_convolutional_neural_networks_work.html
  2. https://brohrer.mcknote.com/zh-Hant/how_machine_learning_works/how_convolutional_neural_networks_work.html
  3. https://www.youtube.com/watch?v=FmpDIaiMIeA&t=3s
正文完
 0