首页 欧冠联赛正文

鹿晨辉,深化卷积神经网络背面的数学原理 | 技能头条,柿饼的功效与作用

admin 欧冠联赛 2019-04-30 271 0

作者 | Piotr Skalski

译者 | Monanfei

修改 | 十月Rachel、Jane

出品 | AI科技大本营(id:rgznai100)

【导读】在核算机神经视觉技能的开展进程中,卷积神经网络成为了其间的重要组成部分,本文对卷积神经网络的数学原理进行了介绍。文章包括四个首要内容:卷积、卷积层、池化层以及卷积神经网络中的反向传达原理。在卷积部分的介绍中,作者介绍了卷积的界说、有用卷积和相同卷积、跨步卷积、3D卷积。在卷积层部分,作者论述了衔接切开和参数同享对下降网络参数学习量的效果。在池化层部分,作者介绍了池化的含义以及掩膜的运用。

主动驾驶、智能医疗、智能零售,这些曾被以为不行能完成的工作,在核算机视觉技能的协助下,总算在最近成为了实际。今日,主动驾驶和主动杂货店的愿望不再像早年那样遥不行及。事实上,每天咱们都在运用核算机视觉技能协助咱们用人脸解锁手机,或许对行将发布到交际媒体上的相片进行主动润饰。在核算机视觉技能运用这一巨大成功的背面,卷积神经网络(CNN)或许是其间最重要的组成部分。在本文中,咱们将逐渐了解,神经网络是怎么与CNN特有的思维协作的。本文章包括了适当杂乱的数学方程式,但假如您对线性代数和微积分不熟悉,请不要泄气。我的方针不是让您记住那些公式,而是让您从直觉上去了解这些公式背面躲藏的含义。

前语

在之前的系列中,咱们学习了密布衔接的神经网络(densely connected neural networks)。这些网络的神经元被分红组,构成接连的层,相邻的两个层之间的神经元相互衔接。下图展现了一个密布衔接的神经网络的示例。

Figure 1. Densely connected neural network architecture

当咱们处理分类问题时,假如咱们的特征是一组有限的并有清晰界说的特征,这种办法是很有用的——例如,依据足球运动员在竞赛期间所记载的统计数据,猜测该运动员的方位。可是,当运用相片来进行猜测时,状况会变得愈加杂乱。咱们当然能够将每个像素的亮度视为一个独自的特征,并将其作为输入传递给咱们的密布网络(dense network)。不幸的是,为了使神经网络能够处理典型的智能手机相片,该网络有必要包括数千万乃至数亿个神经元。咱们也能够经过缩小相片的尺度来进行处理手机相片,可是这样做会使咱们丢掉许多有价值的信息。能够发现,这种传统战略的功能很差,因而咱们需求一种新的、愈加聪明的办法来尽或许多地运用数据,并一起削减必要的核算和参数的数量。CNN闪亮上台的时分到了。

数字图画的数据结构

首要花一点时刻来解说一下数字图画的存储办法。数字图画实际上是巨大的数字矩阵。矩阵中的每个数字对应于其像素的亮度。在RGB模型中,五颜六色图画由三个矩阵组成,别离对应三个色彩通道——红,绿,蓝。而在是非图画中,咱们只需求一个矩阵。矩阵中的每个数字的取值区间都是0到255。该规模是存储图画信息的功率(256个值刚好合适1个字节)与人眼的灵敏度(咱们差异同种色彩的灰度级其他数量极限)之间的折衷。

Figure 2. Data structure behind digital images

卷积

核卷积(kernel convolution)不只仅用于CNN,它仍是许多其他核算机视觉算法的要害要素。核卷积便是将一个小数字矩阵(滤波器,也称作 kernel 或 filter)在图画上进行滑动,并依据 kernel 的值,对图画矩阵的值进行转化的进程。对图画经过卷积操作后得到的输出称为特征映射(feature map)。特征映射的值的核算公式如下,其间 f 代表输入图画,h 代表滤波器 。成果矩阵的行数和列数别离用 m 和 n 表明。

Figure 3. Kernel convolution example

将 kernel 放在选定的像素上后,咱们从 kernel 中顺次取出每个值,并将它们成对地与图画中的相应值相乘。终究,咱们将每个核运算后的成果元素相加,并将求和成果放在输出特征图中的正确方位上。上图从微观视点具体地展现了这一运算的进程,但在完好图画上施行该运算的成果或许愈加风趣。图4展现了运用几个不同 kernel 的卷积成果。

Figure 4. Finding edges with kernel convolution

有用卷积&相同卷积(Valid and Same Convolution)

正如咱们在图3中看到的,当咱们运用 3x3 的 kernel 对 6x6 图画履行卷积时,咱们得到 4x4 的特征映射。这是因为在这个图画中,只要16个方位能够将 kerenl 完好地放在这张图画中。因为每次履行卷积时咱们的图画都会缩小,因而在咱们的图画彻底消失之前,咱们只能进行有限次数的卷积。别的,假如对kernel 在图画中移动的进程进行调查,咱们就会发现图画外围像素的影响远小于图画中心像素的影响。这样会导致咱们失掉图画中包括的一些信息。下图展现了像素方位的改动对特征图的影响。

Figure 5. Impact of pixel position

为了处理这两个问题,咱们能够运用额定的边框来填充图画(padding)。例如,假如运用 1像素进行填充,咱们将图画的巨细添加到 8x8,因而运用 3x3 的 kernel 的卷积,其输出尺度将为 6x6 。在实践中,咱们通常用零值来填充额定的鸿沟。依据是否运用填充,咱们将处理两种类型的卷积——Valid 和 Same。Valid——运用原始图画,Same——运用原始图画并运用它周围的边框,以便使输入和输出的图画巨细相同。在第二种状况下,填充宽度应满意以下等式,其间 p 是填充尺度,f 是kernel 尺度(通常是奇数)。

跨步卷积(Strided Convolution)

Figure 6. Example of strided convolution

在前面的比如中,咱们总是每次将 kernel 移动一个像素,即步长为1。步长也能够视为卷积层的超参数之一。图6展现了运用更大步长时的卷积运算。在规划CNN架构时,假如期望感知域堆叠较少,或许期望让特征图的空间维度更小,咱们能够添加步长。输出矩阵的尺度(考虑填充和步长时)能够运用以下公式核算。

过渡到第三个维度

体积卷积(Convolution over volume)是一个十分重要的概念,这不只使咱们能够处理五颜六色图画,并且更为重要的是,咱们能够在单层网络中运用多个 kernel 。榜首个规则是 kernel 和图画有必要具有相同数量的通道。一般来说,图画的处理进程和图3的示例十分类似,可是这次咱们是将三维空间中的值对相乘。假如想在同一个图画上运用多个 kernel,首要咱们要别离对每个kernel履行卷积,然后将成果从顶层向下进行叠加,终究将它们组合成一个全体。输出张量的尺度(能够称为3D矩阵)满意以下等式,其间:n - 图画巨细,f  - 滤波器巨细,nc  - 图画中的通道数,p - 填充巨细,s -  步幅巨细,nf  - kernel 的数量。

Figure 7. Convolution over volume

卷积层

接下来咱们将用前面学到的常识来构建CNN的一个层。咱们即将用到的办法简直与构建密布神经网络时用到的相同,仅有有区其他当地是,咱们不再运用简略的矩阵乘法,而是运用卷积。前向传达包括两个进程。榜首步是核算中心值 Z:首要将前一层的输入数据与张量 W(包括滤波器)进行卷积,然后将运算后的成果加上误差 b 。第二步是将中心值 Z 输入到非线性激活函数中(运用g表明该激活函数)。下面展现了矩阵办法的数学公式。假如您对公式中的任何部分不太清楚,我强烈推荐您去阅览一下我之前的文章,文中具体评论了密布衔接的神经网络的具体内容。下文的插图很好地展现了公式中各张量的维数,以助于了解。

Figure 8. Tensors dimensions

衔接切开和参数同享(Connections Cutting and Parameters Sharing)

在本文的最初曾说到,因为需求学习很多的参数,密布衔接的神经网络在处理图画方面的才能很差,而卷积却为该问题供给了一种处理方案,下面咱们一起来看看卷积是怎么优化图画处理的核算的。鄙人图中,咱们用一种稍微不同的办法对2D卷积进行了可视化——用数字1-9 符号的神经元构成输入层,用于接纳输入图画的像素亮度,单元 A-D 表明经过卷积核算后得到的特征映射。终究,I-IV 表明来自 kernel 的后续值,这些值是需求网络进行学习的。

Figure 9. Connections cutting and parameters sharing

现在,让咱们重视卷积层的两个十分重要的特点。榜首,从图中能够看到,并非两个相邻层中的一切神经元都相互衔接。例如,神经元 1 仅影响 A 的值。第二,咱们能够发现一些神经元运用了相同的权重。这两个特点意味着在CNN中咱们需求学习的参数要少得多。值得一提的是,kernel 中的任一单值都会影响输出特征映射的每一个元素——这在反向传达的进程中是至关重要的。

卷积层的反向传达(Convolutional Layer Backpropagation)

任何早年企图从头开端编写神经网络的人都知道,前向传达还不到终究成功的一半。当你开端向回核算时,真实的趣味才刚刚开端。现在,咱们不需求为反向传达而烦恼——因为深度学习结构现已为咱们做好了,可是我觉得有必要弄理解它背面发作的工作。就像在密布衔接的神经网络中相同,咱们的方针是核算导数,然后在梯度下降的进程中,用这些导数去更新咱们的参数值。

鄙人面的核算中,咱们将用到链式法则——这在我之前的文章中说到过。咱们想要评价参数的改变对成果特征映射的影响,以及随之对终究成果的影响。在开端具体评论之前,咱们需求将数学符号一致 ——为了表明便利,我不会运用偏导数的完好符号,而是用下面说到的缩符号。可是请记住,当我运用这种表明法时,这将一直代表着本钱函数的偏导。

Figure 10. Input and output data for a single convolution layer in forward and backward propagation

咱们的使命是核算 dW [1] 和 db [l] (它们是与当时层参数相关的导数),以及 dA[l-1](它将被传递给前一层)。如图10所示,dA[l] 作为输入,张量 dW 和 W,db 和 b 以及 dA 和 A 的维度别离相同。榜首步是求激活函数关于输入张量的导数,将其成果记为 dZ [1] 。依据链式法则,该运算的成果将在后边用到。

现在,咱们需求处理卷积本身的反向传达。为了完成这个方针,咱们将运用一个称为全卷积的矩阵运算,该运算的可视化解说如下图所示。请注意,在此进程中咱们要运用 kernel,而咱们之前用到的 kernel 是该 kernel 旋转了180度所得到的。该操作能够用以下公式表明,其间 kernel 由 W 表明,dZ[m,n] 是一个标量,该标量归于早年一层所取得的偏导数。

Figure 11. Full convolution

池化层(Pooling Layers)

除了卷积层之外,CNNs 常常运用一个称为池化层的网络层,它们首要用于减小张量的巨细并加速核算速度。这个层的结构很简略,咱们只需求将图画划分红不同的区域,然后对每个部分履行一些操作即可。例如,关于最大池化层(Max Pool Layer),咱们从每个区域中挑选一个最大值,并将其放在输出中的相应方位即可。与卷积层的状况相同,咱们有两个超参数——kernel 的尺度和步长。终究值得一提是,假如要为多通道图画履行池化操作,则每个通道都应该别离履行池化操作。

Figure 12. Max pooling example

池化层的反向传达(Pooling Layers Backpropagation)

在本文中,咱们仅评论最大池化的反向传达(max pooling backpropagation),可是经过将该办法稍作调整,便可运用到其他一切类型的池化层。因为在池化层这种类型的层中,咱们不必更新任何参数,咱们的使命仅仅适度地分配梯度值。前文讲到,在最大池化的前向传达中,咱们从每个区域中挑选最大值并将它们传输到下一层。因而很明显,在反向传达期间,梯度不会影响未在前向传达中运用的矩阵元素。在实际操作中,该进程是经过创立一个掩膜(mask)来完成的,该掩膜会记住在前向传达中所运用的元素的方位,随后咱们就能够用该掩膜来传递梯度。

Figure 13. Max pooling backward pass

原文地址:

https://towardsdatascience.com/gentle-dive-into-math-behind-convolutional-neural-networks-79a07dd44cf9

(本文为AI科技大本营编译文章,转载请微信联络1092722531)

声明:该文观念仅代表作者自己,搜狐号系信息发布渠道,搜狐仅供给信息存储空间服务。
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

最近发表

    w优德88com_w88优德中文网_w88优德投注

    http://www.soap-cream.com/

    |

    Powered By

    使用手机软件扫描微信二维码

    关注我们可获取更多热点资讯

    w88出品