卷积神经网络——理论部分

栏目: 数据库 · 发布时间: 5年前

内容简介:如果没有填充,那么每经过一次卷积操作,图像的大小都会变小,比如一个大小为 \(3 × 3\) 的过滤器在一个大小为 \(6 × 6\) 的图像上进行卷积,会得到一个大小为 \(4 × 4\) 的图像。事实上,假设原始图像大小为 \(n × n\),过滤器大小为 \(f × f\),那么卷积后的图像大小为 \((n-f+1) × (n-f+1)\),很明显,这会导致图像的大小在几次卷积操作后就会越来越小。没有填充的另一个缺点是,位于图像边缘的像素在卷积操作时只会被用到一次,而更接近图像中心的像素却会被用到多次

如果没有填充,那么每经过一次卷积操作,图像的大小都会变小,比如一个大小为 \(3 × 3\) 的过滤器在一个大小为 \(6 × 6\) 的图像上进行卷积,会得到一个大小为 \(4 × 4\) 的图像。事实上,假设原始图像大小为 \(n × n\),过滤器大小为 \(f × f\),那么卷积后的图像大小为 \((n-f+1) × (n-f+1)\),很明显,这会导致图像的大小在几次卷积操作后就会越来越小。

没有填充的另一个缺点是,位于图像边缘的像素在卷积操作时只会被用到一次,而更接近图像中心的像素却会被用到多次,这使我们丢失了许多靠近图像边界的信息。

所以为了解决以上两个问题,一个方法是在进行卷积操作前对图像进行填充。同样用大小为 \(6×6\) 的图像为例,如果在该图像周围填充一圈像素点,那么该图像的大小就会变为 \(8×8\),再用一个大小为 \(3×3\) 的过滤器对该图像进行卷积后,得到的图像的大小为 \(6×6\),这就使得卷积后的图像大小和原始图像(填充之前)的大小一样了。

我们用 p 来表示填充的像素圈数,此时卷积后的图像大小为 \((n+2p-f+1)×(n+2p-f+1)\),合理设置 p 的值,即可保证卷积后的图像大小不变,同时也提高了原始图像(填充前)边界信息的利用率。

如果希望卷积后图像大小不变,即 \(n+2p-f+1=n\),解得 \(p = \cfrac{f-1}{2}\) 即可。这里的 \(f\) 在绝大多数情况都是奇数而不是偶数,这样有两个好处:

  1. 如果 \(f\) 是偶数,将得到不对称的填充,因为这里的 p 无法除尽;
  2. \(f\) 为奇数可以保证过滤器有一个中心像素点,可以称之为中心像素,这样可以方便我们描述过滤器的位置。

当然用偶数的 \(f\) 也可以得到不错的结果,但一般情况下人们都会把 \(f\) 设置成奇数。

Stride(步幅)

没有引入 Stride(步幅)时,过滤器每次只移动一个像素点距离。引入 Stride 后用 s 表示步幅,此时过滤器每次移动 s 个像素点距离。比如一个大小为 \(3×3\) 的过滤器在一个大小为 \(7×7\) 的图像上进行步幅为 2 的卷积操作后,得到的图像大小为 \(3×3\)。

这里的关系式为,如果原始图像大小为 \(n×n\),过滤器大小为 \(f×f\),填充为 p,步幅为 s,那么卷积后的图像大小为 \((\cfrac{n+2p-f}{s}+1) × (\cfrac{n+2p-f}{s}+1)\)。

一个问题是,如果式子中的分数除不尽怎么办?办法是对 \((\cfrac{n+2p-f}{s}+1)\) 向下取整,因为如果过滤器移动到了其一部分超出图像边界的地方,那么这里是不进行卷积运算的。

在三维图像上进行卷积运算

一副彩色图像有 RGB 三个通道,一个 \(6×6\) 大小的图像维度应该是 \(6×6×3\),这里的 3 便对应三个通道,对这样的图像进行卷积运算时,用到的过滤器的通道数必须与其一致,比如这里可以使用 一个 维度为 \(3×3×3\) 的过滤器,得到卷积后的图像维度为 \(4×4\)。如果使用 \(x\) 个该维度的过滤器,那么卷积后的图像维度应为 \(4×4×x\)。

具体该如何运算呢?先以一个过滤器为例。

卷积神经网络——理论部分

方便起见,这里不讨论 Padding 和 Stride。如上图所示,先将过滤器的三个通道分别于原图像左上角贴合,然后将这 27 个位置的元素对应相乘再相加,得到结果,填入输出图像的最左上角元素,然后移动过滤器继续运算,直到移动到原图像右下角为止。

如果有多个过滤器,比如两个,如图所示:

卷积神经网络——理论部分

那么按照刚才的计算方法,会得到两个维度为 \(4×4\) 的图像,再将这两幅二维图像叠在一起便得到了维度为 \(4×4×2\) 的图像。对于其他数量的过滤器,方法也是一样的。

(Pooling layer) 池化层

Max pooling (最大池化)

假设原始图像大小为 \(4×4\),过滤器大小为 \(2×2\),步幅为 2,不填充,那么经过池化层后的图像大小为 \(2×2\),过滤器移动的方式和之前一样,只不过这里进行的运算不是卷积,而是取最大值,具体操作看这张图:

卷积神经网络——理论部分

如上图所示,原始图像被分成了四个区域,这四个区域实际就是过滤器进行操作的四个区域,在每个区域里,取最大值赋给输出图像的相应位置。

如果考虑输入图像的通道数目,比如 \(n×n×n_c\),其中 \(n_c\) 代表通道数目,那么输出图像的通道数目也是 \(n_c\),具体过程就是在输入图像的每个通道都进行池化操作。

Average pooling (平均池化)

顾名思义,与 Max Pooling 不同,Average pooling 在运算时取过滤器覆盖区域的平均像素值,再赋给输出图像的相应位置。

卷积神经网络——理论部分

关于超参数的选择

  • f 和 s 都取 2 或者 f 取 3,s 取 2,这会使得输入图像的长宽近似变为一半
  • p 一般取 0,即不作任何填充
  • Max pooling 比 Average pooling 用得更多些

卷积神经网络的优势

Parameter sharing (参数共享)

如果一个过滤器是专门用来检测垂直边缘的,那么对于输入图像的每一部分,该过滤器都能起作用,换句话说,该过滤器中的参数对于输入图像的每一部分都是有作用的,这使得一个用于检测某种特征(如垂直边界)的过滤器能够被用在输入图像的任何一个部分,这同时使得神经网络的参数大大减少,除了减少运算量,在一定程度上也能防止过拟合的发生。

Sparsity of connections (连接的稀疏性)

在每一层,每个输出值都只和输入图像中某一部分的输入值有关。这可以实现 translation invarience(平移无关性)。

关于平移无关性可以参考 这篇在 StackExchange 上的讨论

-

代码练习链接:


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

创新者的处方

创新者的处方

[美]克莱顿·克里斯坦森、杰罗姆·格罗斯曼、黄捷升 / 朱恒鹏、张琦 / 中国人民大学出版社 / 2015-9 / 89.90元

[内容简介] ● 创新大师克里斯坦森采用了哈佛商学院在20年研究中总结而出的、在各行业实践中获得成功的管理创新经验,把颠覆式创新理念引入美国医疗行业研究。医疗机构需要量体裁衣,选择合适的商业模式展开创新之举。 ● 作者同时探讨了医疗保险公司、制药企业、医学院和政府机构在医疗改革中起到的作用,从社会性角度深入剖析了医疗保健行业未来之路。 ● 医疗界人士、政策制定者、对医疗界现......一起来看看 《创新者的处方》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

在线进制转换器
在线进制转换器

各进制数互转换器

SHA 加密
SHA 加密

SHA 加密工具