A guide to convolution arithmetic for deep learning

目标

  • 介绍卷积和反卷积的关系
  • 明白 input shape, kernel shape, zero padding, strides , out shape 在卷积,池化,反卷积的关系

1 介绍

1.1 离散卷积

  • 神经网络:放射变换, 输入数组,在乘以一个矩阵加上一个偏置后,得到一个输出。
    • 输入数据类型:图片、声音其他等,都满足多个维度存储,有一个以上的轴来排序数据,并且有一个以上的通道来表述数据。
    • 缺点:没有保存其拓扑信息
  • 离散卷积:线性变换,保存了拓扑信息(数据的排序)
    • 稀疏:一些输入单元信息作用于一个输出单元信息
    • 重复参数:kernel作用于输入数据的不同位置
    • 输入:input feature maps 输出:output feature maps
    • 对于input feature maps ,可以使用不同的kernels,获取多层的output feature maps
      这里写图片描述
    • 用kernel的集合来定义离散卷积:(n, m, k1,…kN)
      • n:input feature maps的数量
      • m:output feature maps的数量
      • k j :第j个维度kernel的大小
      • N: N个维度的卷积,常见的二维卷积
    • 对于第j个维度,output feature maps(oj)的大小影响元素
      • i j :input featur maps 第j个维度的大小
      • k j :kernel 第j个维度的大小
      • s j :stride(步幅)第j个维度的大小
      • p j :zero-padding(补零)第j个维度的大小
      • 计算公式如下
        • o j = i j + 2 p j k j s j + 1
    • 步幅(stride):组成二次抽样
      • 比如说s=2,可以看做是s=1的中,只取偶数的实现。

1.2 池化

  • 池化:通过一些对子区域的总结(比如平均、最大值),减小feature maps 的大小(类似离散卷积,把线性操作换成其他的函数)
  • 对于第j个维度,经过池化输出(oj)的大小影响元素
    • i j :input featur maps 第j个维度的大小
    • k j :池化窗口第j个维度的大小
    • s j :stride(步幅)第j个维度的大小
  • 这里写图片描述

2 卷积计算(i, k, s, p)

  • 假设:
    • 2-D discrete convolutions (N= 2)
    • square inputs (i1=i2=i)
    • square kernel size (k1=k2=k)
    • same strides along both axes (s1=s2=s)
    • same zero padding along both axes (p1=p2=p)

2.1 zero padding = 0 and strides = 1

o = ( i k ) + 1

2.2 zero padding != 0 and strides = 1

o = ( i k ) + 2 p + 1

half padding (input size = ouput size )

k = 2 n + 1 ; s = 1 ; p = k 2

o = ( i k ) + 2 p + 1 = i + 2 p ( k 1 ) = i + 2 n 2 n = i

full padding

s = 1 ; p = k 1

o = ( i k ) + 2 p + 1 = i + ( k 1 )

2.3 zero padding = 0 and strides > 1

o = i k s + 1

2.4 zero padding != 0 and strides > 1

o = i + 2 p k s + 1

如果j = i + a, a >0 and a < s,那么以j为输入的大小计算的输出的大小 = 以i为输入的大小计算的输出的大小

3. 池化计算

o = i k s + 1

4. 反卷积计算

  • 假设:
    • 2-D discrete convolutions (N= 2)
    • square inputs (i1=i2=i)
    • square kernel size (k1=k2=k)
    • same strides along both axes (s1=s2=s)
    • same zero padding along both axes (p1=p2=p)

4.1 卷积作为一种矩阵操作

  • 例如当i=4,k=3,s=1,p=0:
    • 可以将输入矩阵平铺成(16,1)的矩阵X
    • kernel平铺成(4,16)的矩阵C
    • 最终的结果为Y= CX,即一个(4,1)的矩阵,再resize为(2,2)
  • 卷积的正向过程是乘以了 C ,反向过程乘以了 C T

4.2 反卷积

  • transposed convolution; fractionally strided convolution; deconvolution
  • kernel 决定了卷积,但是正向和反向的计算决定了是卷积还是反卷积
  • 反卷积的正向过程是乘以了 C T ,反向过程乘以了 ( C T ) T = C
  • 卷积是 Y = C X , 反卷积是 C T Y = C T C X = X

4.3 zero padding = 0 and strides = 1 反卷积

  • 卷积 i=4,k=3,s=1,p=0,所以o = 2
  • 反卷积 i=o,k=k,s=s,p=k-1,所以o = i + (k - 1)

4.4 zero padding != 0 and strides = 1 反卷积

  • 反卷积k=k,s=s,p=k-p-1,所以o = i + (k - 1) -2p
  • half padding, transposed
    • 卷积 k = 2 n + 1 ; s = 1 ; p = k 2
    • 反卷积 k=k,s=s,p=p
    • = i + (k - 1) - 2p = i
  • full padding, transposed
    • 卷积 k ; s = 1 ; p = k 1
    • 反卷积 k=k,s=s,p=0
    • = i + (k - 1) - 2p = i - (k - 1)

4.5 zero padding = 0 and strides > 1 反卷积

  • 卷积 k ; s ; p = 0
  • 反卷积 k=k,s=1,p=k-1(输入的每个单元之间加了s-1个0)
  • o=s( i- 1) + k

4.5 zero padding != 0 and strides > 1 反卷积

  • 卷积 k ; s ; p
  • 反卷积 k=k,s=1,p=k-p-1(输入的每个单元之间加了s-1个0)
    • if( i+2p-k) %s == 0 :
      • o=s( i- 1) + k - 2p
    • if( i+2p-k) %s!= 0
      • 设 a = ( i+2p-k) mod s
      • o=s( i- 1) + a + k - 2p

5. 扩展卷积 dilated convolution

  • 约束因子 d:
    • d = 1 :常规卷积
    • d > 1: kernel每个单元格之间加入(d-1)个空的元素,计算公式 k = k + ( k 1 ) ( d 1 )
  • 扩展卷积计算 输出大小
    o = i + 2 p k ( k 1 ) ( d 1 ) s + 1

这里写图片描述

ps:

  • 线性linear,指量与量之间按比例、成直线的关系,在数学上可以理解为一阶导数为常数的函数
  • 非线性non-linear则指不按比例、不成直线的关系,一阶导数不为常数。
  • 虽然以上介绍的是2维的且是正方形的,但是也可以推广到多维和非正方形。

猜你喜欢

转载自blog.csdn.net/sda42342342423/article/details/80612496