专栏首页AI科技评论用 Excel 来阐释什么是多层卷积

用 Excel 来阐释什么是多层卷积

原来 Excel 也有这种妙用?!

原标题 | Multi-Channel Convolutions explained with… MS Excel!

作者 | Thom Lane

翻译 | 廖颖、希贝儿•兰姆、Diyz、micah壹路向北、通夜

编辑 | Pita

在之前的系列里,我们讨论了 1D 卷积, 2D 卷积 ,3D 卷积,今天的我们将会讨论 4D 卷积,5D 卷积, 6D卷积…

开玩笑的,我们将会讨论一些更有用的,更容易用Excel 可视化的东西, 首先我们看一下多输入通道中的卷积, 之后会讨论多输出通道的卷积,在MXNET Gluon 中很简单。

多输入通道

目前 在卷积系列中我们已经应用了:

  • 1D 卷积应用 一维数据(时间)
  • 2D 卷积应用 二维数据 (高,宽)
  • 3D 卷积 应用 三维数据 (长 宽 高)

这里 你会看到明显的应用模式,但是在这些简单的通信之间隐藏了一个重要的细节。我们输入的数据通常在每一个位置都定义了多个变量 (通过时间,空间),不仅仅只是一个数值。我们称其为通道。

Conv1D 和多输入通道

来看一个有趣的例子,让我们用冰激凌销售额的预测作为案例。在我们的时间维度上,输入以天为间隔,正态化我们的产品价格,营销话费, 室外温度,是否为周末等数据。总计4个输入通道

图1:一个4通道的输入数组,覆盖了6个时间间隔

尽管输入数据看起来像二维,但只有一个维度是空间的。我们期待从本地相邻阈值中找到模型,而不是跨越本地相邻值的通道变量。从一个随机序列的4个变量开始(A,B,C,D),我们不期待在A&B ,B&C,C&D 之间找到相似的空间关系(如果我们在这个维度上将将核层设为2)。

由于这个原因,在处理多通道时间数据的时候,最好使用1D 卷积, 尽管数据看上去像是二维的。

应用了 1D 卷积之后 (卷积核的大小是3) 我们的卷积核看起来不同于上一篇文章的应用了单个通道的例子。这次我们有4个输入通道,我们的卷积核也会用4个通道初始化。所以尽管我们使用了1D 卷积 但是我们有一个2D 卷积核!一个1D 卷积只代表我们在一个维度上滑动卷积核,但是并没有定义卷积核的形状,因为这也取决于输入通道的形状。

图2:一个 卷积核大小为3 的1D 卷积, 应用于 一个4*6 的输入矩阵,输出一个1*4 的矩阵

图3:单元格Q4使用的Excel公式

进阶:在这种情况下, 一个卷积核形状为(3,4)的2D卷积,达到的效果是相等的,但是对于一个1D 卷积你不用详细列出通道的维度。我们通常依赖于卷积核形状来推断 (例如,在传入第一批数据之后),但是我们通常可以指出输入通道的个数 通过 in_channels。在对公式增加内边距,宽度和扩张的时候, 2D 卷积核和1D 卷积可能是不一样的。

我们的代码相比单一输入通道的情况是没有改变的

在我们用1D 卷积包装之前, 有一个非常值得一提的常见用例。在自然语言处理的模型中第一个阶段通常需要将有序的原始文本转化成有序的向量,要么是字符,单词或者语句向量。在每一个时间跨度, 我们有一个有特定数值的向量(比如 128), 每一个值代表了字符,单词或者语句的不同属性。我们应当认为他们是时间序列的例子,将他们当做通道。由于我们随着时间的推移得到时间通道,1D 卷积对于本地时间模型的选择非常有效。

Conv2D 多通道输入

彩色图像也是多通道空间数据的一个非常好的例子。在每一个位置,我们通常有3个通道来代表颜色:对于红,绿,蓝不同的颜色强度。但我们这次有一些不一样的方法,我们将使用2个空间维度:高,宽。

图4:彩色图像通常用3个通道代表 (来源:https://www.howtogeek.com/howto/42393/rgb-cmyk-alpha-what-are-image-channels-and-what-do-they-mean/)

我们的内核将相应地调整通道,即使我们定义了一个3x3内核,初始化时内核的真实尺寸将是3x3x3,因为我们有3个输入通道。既然我们又回到了三维,在使用MS Excel之前,让我们先看一下three.js图。

图5:与3x3内核的2D卷积应用于大小为5x5的3通道RGB输入,得到3x3的输出。(源地址:https://thomelane.github.io/convolutions/2DConvRGB.html)

有了上面的图表,如果你想看实际的图像,你应该考虑看上面的图,但是我们感兴趣的是看到通道,因此我们从滑动的角度看。查看此链接以获得上面图表的交互式版本:https://thomelane.github.io/convolutions/2DConvRGB.html。观察到一个有趣的现象是,内核的每个“层”都与输入的相应通道交互。

我们可以在MS Excel中更详细地看到这一点。

图6:与3x3内核的2D卷积应用于大小为5x5的3通道RGB输入,得到3x3的输出。

从这个角度来看,我们认为每个通道都有自己的3x3内核。我们将内核的每个“层”应用于相应的输入通道,并获得中间值,即每个通道的单个值。最后一步是对这些值求和,以获得输出的最终结果。忽略0得到:

红色输出= (3*2) +(1*1) = 7 绿色输出 = (1*2) +(1*3) = 5 蓝色输出 = (2*1) +(3*1) +(1*2) = 7 输出 = 红色输出 + 绿色输出 + 蓝色输出 = 7 +5+ 7 = 19

在实际应用中我们并不会真的去计算那些中间值,但是这样理解很好地诠释了不同输入通道之间的分离。由于我们在最终要得到所有通道值的求和,每个内核实际上是在观察跨越所有通道的模式。

进阶:在上述情况下,该多输入卷积核其实等价于一个形状为(3,3,3)的三维卷积核,但是在用二维卷积的时候你不用指明有几个输入通道。事实上,我们一般会利用对于数据的形状的获取(比如在输入第一批数据之后), 但是我们依然可以利用 in_channels 这个属性去指定输入通道的数量。当加入 填充,步长和空洞时,三维和二维卷积之间的等价关系或许会被破坏。

# define input_data and kernel as above
# input_data.shape is (3, 5, 5)
# kernel.shape is (3, 3, 3)

conv = mx.gluon.nn.Conv2D(channels=1, kernel_size=(3,3))

output_data = apply_conv(input_data, kernel, conv)
print(output_data)

# [[[[19. 13. 15.]
#    [28. 16. 20.]
#    [23. 18. 25.]]]]
# <NDArray 1x1x3x3 @cpu(0)>

在MXNet Gloun中的代码看起来跟单输入通道一样,但是请注意卷积核的形状黑(3,3,3), 因为我们将每个卷积核都用在三个通道上,并且在每个通道中的视野域的长和宽均为3。因此,我们卷积核的布局为(in_channels,hieght,width).

多输出通道的卷积

图7:ImageNet中,能够最大化卷积层中某些卷积核的图像区块(链接:https://arxiv.org/pdf/1311.2901.pdf)。

在我们本系列第一个博客(https://medium.com/apache-mxnet/convolutions-explained-with-ms-excel-465d6649831c)中,我们介绍了,卷积就像一个特征探测器,卷积核定义了我们想要探测的特征。目前为止,在我们所有给出的例子中,我们在每层卷积上均只使用了一个卷积核,也就是说我们只是在寻找一个特征。显然,在图片分类,目标检测和分割等复杂的任务中,我们在每一层卷积网络中需要探测多个特征。

图8:ImageNet中,能够最大化卷积层中某4个卷积核的图像区块(链接:https://arxiv.org/pdf/1311.2901.pdf)。

第一层卷积层,在探测不同角度和不同颜色衬度(就像在多输入通道中我们所看到的哪样)的边或许会很有用。然后在接下来的卷积层中,我们或许就能探测到螺旋,甚至狗脸。

在计算上,加入多个输出通道很简单。我们需要几个输出通道,就只需要将前面的过程重复多少次,当然每次的卷积核是不同且独立的,之后我们将这几次的输出叠在一起,搞定!

图9: 一个1维的卷积层,拥有4个大小为3的卷积核,应用在形状 1x6 的矩阵上,给出了形状 4x4 的输出。

将这张图与上一个博客(https://medium.com/p/5f88c0f35941)中的图2进行比较。这里的第一个卷积核和那个例子中的一模一样,并且我们也得到了一样的(形状为 1x4)输出,但是在这里我们又加上了3个卷积核,最后的输出形状为 4x4。

通常,这很容易添加到 MXNet Gluon的卷积中。我们需要做的,就是改变参数 channels ,把它设为4而不是1。

进阶:我们之前提到一个跟这个参数看上去很像的一个参数 in_channels。注意二者的区别至关重要。in_channels 用于指定输入数据期望的通道数,而不是用卷积核形状来推断(通过传入的第一批数据)。channels 被用来指定需要的输出通道数,比如卷积核/滤波器的数量。

之前,在上一篇文章里提到,一维数卷积的卷积核也是一维的。当有多个输入通道时,我们必须增加额外的维度来解决多通道问题。现在,我们就在关注多个输出通道的问题,我们已经看到另一个问题!也就是对一维卷积实现三维输出。其实这些维度一直到在(很抱歉又向你们隐瞒),但是忽略它们会使问题更简单,因为它们都是单位长度,而且只需要使用 apply_conv 就可以添加这些维度了。

从上面的例子可以看出,卷积的大小为(4, 1, 3)。我们有4个卷积核,每个核都被用在相同的一维(单通道)输入上,在时间维度上,它们的宽度为3。因此,卷积核的形式就为(channels, in_channels, widths)。下表列出了更完整的默认维度形式以便查看。

表1:MXNet Gluon 默认维度

进阶:深度可分离卷积

常见卷积神经网络结构中大部分卷积都被用于多输入多输出问题。计算量与输出通道的数量成线性关系,但当参数 in_channels 和 channels 设置很大时,计算量也相当庞大。一种更有效的解决方法,就是使用深度可分离卷积。我们看一下多输入通道(参见图5),图中在对输入通道求和之前有一个中间步骤。使用深度可分离卷积,可以用1*1卷积代替求和操作。我们基本上把卷积分为两个阶段:第一个阶段关注每个输入通道各自的空间模式,第二个阶段关注各个通道(不是空间上的)。

图10:常见卷积和深度可分离卷积

MXNet Gluon 中,可以使用卷积参数 groups 来指定如何对操作进行分区。可以看看 用 MXNet Gluon 实现 MobileNet 这个使用实例。groups 用来设置输入通道的数量,从而给出深度可分离卷积。

进行实验

本文中展示的所有示例都可以在这些用于 Conv1D 和 Conv2D 的MS Excel电子表格中找到(或分别在此处和此处的谷歌表格中)。单击输出单元格检查公式,并尝试使用不同的内核值更改输出。在MXnet Gluon中复制您的结果后,我认为您可以在LinkedIn配置文件中正式添加“卷积大师”作为标题!

接下来

但在我们理解反卷积之前,这个系列是不会完结的!在这个系列的最后一篇博文中,我们将看到两种不同的思维模式来思考转置卷积,并看到一些实际的例子。

本文分享自微信公众号 - AI科技评论(aitechtalk),作者:雷锋字幕组

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 开发 | 变形卷积核、可分离卷积?卷积神经网络中十大拍案叫绝的操作

    AI 科技评论按:本文作者Professor ho,原文载于其知乎主页,AI 科技评论获其授权发布。 从2012年的AlexNet发展至今,科学家们发明出各种各...

    AI科技评论
  • ICLR 2020 | Deformable Kernels,创意满满的可变形卷积核

    论文提出可变形卷积核(DK)来自适应有效感受域,每次进行卷积操作时都从原卷积中采样出新卷积,是一种新颖的可变形卷积的形式,从实验来看,是之前方法的一种有力的补充...

    AI科技评论
  • 万字长文带你看尽深度学习中的各种卷积网络

    AI 科技评论按:深度学习中的各种卷积网络大家知多少?对于那些听说过却又对它们没有特别清晰的认识的小伙伴们,Kunlun Bai 这篇文章非常值得一读。Kunl...

    AI科技评论
  • 10分钟看懂全卷积神经网络( FCN ):语义分割深度模型先驱

    今天是10月24日,既是程序员节,也是程序员感恩节。这一天,大家纷纷向那些无私奉献、一心为民的好人们,送出“好人一生平安”的美好祝愿。而“1024”,既是这一句...

    用户1737318
  • AI 技术讲座精选:​通过学习Keras从零开始实现VGG网络

    Keras代码示例多达数百个。通常我们只需复制粘贴代码,而无需真正理解这些代码。通过学习本教程,您将搭建非常简单的构架,但是此过程会带给您些许好处:您将通过阅读...

    AI科技大本营
  • CNN中常用的四种卷积详解

    卷积现在可能是深度学习中最重要的概念。正是靠着卷积和卷积神经网络,深度学习才超越了几乎其他所有的机器学习手段。这期我们一起学习下深度学习中常见的卷积有哪些?

    智能算法
  • 从AlexNet理解卷积神经网络的一般结构

    2012年AlexNet在ImageNet大赛上一举夺魁,开启了深度学习的时代,虽然后来大量比AlexNet更快速更准确的卷积神经网络结构相继出现,但是Alex...

    chaibubble
  • 如何理解扩张卷积(dilated convolution)

    扩张卷积(Dilated Convolution)也被称为空洞卷积或者膨胀卷积,是在标准的卷积核中注入空洞,以此来增加模型的感受野(reception fiel...

    chaibubble
  • 如何理解卷积神经网络中的1*1卷积

    我们都知道,卷积核的作用在于特征的抽取,越是大的卷积核尺寸就意味着更大的感受野,当然随之而来的是更多的参数。早在1998年,LeCun大神发布的LetNet-5...

    chaibubble
  • 拆解VGGNet网络模型在分类和定位任务上的能力

    下面我们将对2014年夺得ImageNet的定位第一和分类第二的VGG网络进行分析,在此过程中更多的是对这篇经典文章的感性分析,希望和大家共同交流产生共鸣,如果...

    人工智能的秘密

扫码关注云+社区

领取腾讯云代金券