卷积算术笔记

  |  

摘要: 本文是《A guide to convolution arithmetic for deep learning》这篇文章的笔记。

【对算法,数学,计算机感兴趣的同学,欢迎关注我哈,阅读更多原创文章】
我的网站:潮汐朝夕的生活实验室
我的公众号:算法题刷刷
我的知乎:潮汐朝夕
我的github:FennelDumplings
我的leetcode:FennelDumplings


本文我们通过一篇论文系统了解一下关于卷积的各个方面。文章信息如下:

本文的核心是以下两点:

  1. 卷积层和反卷积层的区别
  2. input shape, kernel shape, zero padding, stride, output shape 在 卷积,池化,反卷积中内在的联系

$1 定义

$1-1 离散卷积

1
i, k, p, s -> o


$1-2 池化

1
i, k, s -> o

$2 卷计算术

  • No zero padding, unit strides
1
o = (i - k) + 1
  • Zero padding, unit strides
1
o = (i - k) = 2p + 1
  • Zero padding, non-unit strides
1
o = floor((i + 2p - k)/s) + 1

$3 池化算术

1
o = floor((i - k)/s) + 1

$4 反卷积算术

源于对全连接层的分析,卷积可以用矩阵乘法高效实现。

$4-1 卷积和矩阵乘法的关系

$4-2 反卷积

一个核 w,定义了两个矩阵 C 和 transpose(C),分别对应卷积的前向和反向;也定义了矩阵 transpose(C) 和 C,分别对应反卷积的前向和反向

反卷积的核心:

  1. recover the shape
  2. 保持连接模式(与 padding 有关)

  • No zero padding, units strides, transposed
1
2
3
卷积: s=1, p=0, k
对应的反卷积:s'=s p'=k-1 k'=k
o' = i' + (k - 1) 此公式对应 fully padding convolution with unit stride

  • Zero padding, units strides, transposed
1
2
3
卷积:s=1, k, p
对应的反卷积:s'=s, k'=k, p'=k-p-1
o' = i' + (k - 1) - 2p
  • Half(Same) padding, transposed
1
2
3
卷积:k=2n+1, s=1, p=floor(k/2)=n
对应的反卷积:k'=k, s'=s, p'=p
o' = i' + (k-1) - 2p = i'

  • Full Padding, Transposed
1
2
3
卷积:s=1, k, p=k-1
对应的反卷积:s'=s, k'=k, p'=0
o' = i' + (k - 1) -2p = i' - (k - 1)
  • No Zero padding, non-units strides, transposed
1
2
3
4
卷积:p=0, k, s 同时 i - k 是 s 的倍数
对应的反卷积:i'~, k'=k, s'=1, p'=k-1
其中 i'~ is the size of stretched input obtained by adding s - 1 zeros between each unit
o' = s * (i - 1) + k

  • Zero padding, non-unit strides, transposed
1
2
3
4
卷积:k, s, p, 同时 i + 2p - k 是 s 的倍数
对应的反卷积:i'~, k'=k, s'=1, p'=k-p-1
其中 i'~ is the size of stretched input obtained by adding s - 1 zeros between each unit
o' = s * (i - 1) + k - 2p

对 i 的限制可以通过引入一个参数 a 来省略掉。

1
2
3
4
5
6
a 属于 {0, 1, ..., s-1}
卷积:k, s, p, i
对应的反卷积:a, i'~, k'=k, s'=1, p'=k-p-1
其中 i'~ is the size of stretched input obtained by adding s - 1 zeros between each unit
a = (i + 2p - k) mod s 代表在 input 的右下角扩展零的行数列数
o' = s * (i - 1) + a + k - 2p

$5 其它类型卷积

  • Dilated Convolutions
1
2
3
4
5
k, d -> 有效卷积核大小, k^ = k + (k - 1)(d - 1)

卷积:i, k, p, s, d
o = floor([i + 2p - k - (k - 1)(d - 1)]/s) + 1
参考 $2-4


Share