从DSP角度看卷积
我有点迟了,但仍然想分享我的观点和见解。我的背景是理论物理学和数字信号处理。特别是,我几乎研究了小波和卷积;)
深度学习社区中人们谈论卷积的方式也让我感到困惑。在我看来,似乎缺少的是适当分离关注点。我将解释使用一些DSP工具进行的深度学习卷积。
免责声明
为了阐明要点,我的解释将有些麻烦,而且数学上并不严格。
定义
让我们先定义一些东西。我将讨论限于一维(扩展到更大的维度是直截了当的)无限的(因此我们不需要弄乱边界)序列。xn={xn}∞n=−∞={…,x−1,x0,x1,…}
两个序列和之间的纯(离散)卷积定义为ynxn
(y∗x)n=∑k=−∞∞yn−kxk
如果我们用矩阵向量运算的形式来编写,则看起来像这样(假设一个简单的内核和向量):q=(q0,q1,q2)x=(x0,x1,x2,x3)T
q∗x=⎛⎝⎜⎜⎜q1q200q0q1q200q0q1q200q0q1⎞⎠⎟⎟⎟⎛⎝⎜⎜⎜x0x1x2x3⎞⎠⎟⎟⎟
让我们分别介绍下采样和上采样运算符和。通过系数下采样将删除除第k个样本以外的所有样本:↓↑k∈N
↓kxn=xnk
并且因数上采样是在样本之间交织零:kk−1
↑kxn={xn/k0n/k∈Zotherwise
例如,我们有:k=3
↓3{…,x0,x1,x2,x3,x4,x5,x6,…}={…,x0,x3,x6,…}
↑3{…,x0,x1,x2,…}={…x0,0,0,x1,0,0,x2,0,0,…}
或根据矩阵运算(此处)编写:k=2
↓2x=(x0x2)=(10000100)⎛⎝⎜⎜⎜x0x1x2x3⎞⎠⎟⎟⎟
和
↑2x=⎛⎝⎜⎜⎜x00x10⎞⎠⎟⎟⎟=⎛⎝⎜⎜⎜10000010⎞⎠⎟⎟⎟(x0x1)
正如人们已经可以看到的,向下和上采样运算符相互调换,即。↑k=↓Tk
深度学习卷积
让我们看一下深度学习中使用的典型卷积以及如何编写它们。给定一些内核和向量我们具有以下内容:qx
- 跨度为的跨步卷积为,k↓k(q∗x)
- 因子为的扩张卷积为,k(↑kq)∗x
- 步长为的转置卷积为kq∗(↑kx)
让我们重新排列一下转置的卷积:
q∗(↑kx)=q∗(↓Tkx)=(↑k(q∗)T)Tx
在这种表示法必须将其作为运算符来读取,即,它将与内核卷积的内容抽象化。或用矩阵运算编写(示例):(q∗)q
q∗(↑kx)=⎛⎝⎜⎜⎜q1q200q0q1q200q0q1q200q0q1⎞⎠⎟⎟⎟⎛⎝⎜⎜⎜10000010⎞⎠⎟⎟⎟(x0x1)=⎛⎝⎜⎜⎜q1q000q2q1q000q2q1q000q2q1⎞⎠⎟⎟⎟T(10000100)T(x0x1)=⎛⎝⎜⎜⎜(10000100)⎛⎝⎜⎜⎜q1q000q2q1q000q2q1q000q2q1⎞⎠⎟⎟⎟⎞⎠⎟⎟⎟T(x0x1)=(↑k(q∗)T)Tx
可以看到,是转置操作,即名称。
连接到最近的邻居上采样
在卷积网络中发现的另一种常见方法是使用某种内置形式的插值进行上采样。让我们通过简单的重复插值以因子2进行上采样。可以写成。如果我们还向其中添加一个可学习的内核,得到。卷积可以合并,例如对于,我们有↑2(11)∗xq↑2(11)∗q∗xq=(q0q1q2)(11)∗q=(q0q0+q1q1+q2q2),
也就是说,我们可以用因子大小为2的重复上采样器和大小为3的内核的卷积替换为内核大小为4的转置卷积。此转置卷积具有相同的“插值能力”,但能够学习更好的匹配插值。
结论和最后评论
我希望我可以通过在基本操作中将它们分开来澄清一些在深度学习中发现的常见卷积。
我没有在这里盖池。但这只是非线性下采样器,也可以在此表示法内进行处理。