deconv的用处比较广泛,涉及到visualization/pixel-wise prediction/unsupervised learning/image generation。比如Deconvolutional Network[1][2]做图片的unsupervised feature learning,ZF-Net论文中的卷积网络可视化[3],FCN网络中的upsampling[4],GAN中的Generative图片生成[5]。
Deconvolution大概可以分为如下几个方面:
- unsupervised learning,其实就是convolutional sparse coding[1][2]:这里的deconv只是观念上和传统的conv反向,传统的conv是从图片生成feature map,而deconv是用unsupervised的方法找到一组kernel和feature map,让它们重建图片。
待补充
下面要介绍的这篇文章主要用于学习图片的中低层级的特征表示,属于unsupervised feature learning,和传统的auto-encoder,RBM比较类似,和它最像的是sparse coding,这里先简单介绍下sparse coding,便于后续理解Deconvolutional Network。
Sparse coding是学习一个输入向量 x x x在basis空间 ϕ \phi ϕ下的系数 a a a,这个 a a a即是输入向量在 ϕ \phi ϕ空间的向量表示:
x = ∑ i = 1 k a i ϕ i x=\sum\limits_{i=1}^ka_i\phi_i x=i=1∑kaiϕi
其中 ϕ \phi ϕ是全局变量,对所有输入 x x x都一样, a a a是局部隐变量,每个 x x x都不一样。这种隐变量模式和K-means,GMM,LDA中的隐变量模式一模一样,所以可以看出这种unsupervised带隐变量的学习都有类似的套路。
Sparse coding和PCA变换最大的不同是PCA找的这个basis空间是complete set,而sparse coding找的这个basis空间是over-complete set,解释是over-complete set能更好的表达输入数据的潜在pattern。由于basis空间是over-complete的,所以系数 a a a就不是唯一的了(一个不太恰当的比喻是方程组求解中,求解三个未知数,但只有两个方程,所以求得的未知数不唯一),所以要引入sparsity,方法就是加正则。Sparse coding的loss function如下所示:
m i n i m i z e a i ( j ) , ϕ i ∑ j = 1 m ∥ x ( j ) − ∑ i = 1 k a i ( j ) ϕ i ∥ 2 + λ ∑ i = 1 k S ( a i ( j ) ) minimize_{a_i^{(j)},\phi_i}\sum\limits_{j=1}^m\Vert x^{(j)}-\sum\limits_{i=1}^ka_i^{(j)}\phi_i\Vert^2+\lambda\sum\limits_{i=1}^kS(a_i^{(j)}) minimizeai(j),ϕij=1∑m∥x(j)−i=1∑kai(j)ϕi∥2+λi=1∑kS(ai(j))
第一项是reconstruction误差,第二项是正则,一般是L1。还有个问题是,如果要保证 a a a足够小,那么让basis vector ϕ \phi ϕ足够大也能达到正则spasity的目的,但这并不是我们想要的,所以我们需要再加上一个约束:
∥ ϕ i ∥ 2 ≤ C , ∀ i = 1 , … , k \Vert\phi_i\Vert^2\le C,\quad\forall i=1,\dots,k ∥ϕi∥2≤C,∀i=1,…,k
即让 ϕ \phi ϕ小于某个常数。
学习求解这个loss function就是隐变量学习的通用技巧,有点像alternating least squares(ALS)交替优化。Sparse coding一个不足就是在learning阶段需要学习 a a a和 ϕ \phi ϕ,在inference阶段还是需要学习 a a a,runtime cost比较高。
接下来介绍Deconvolutional Network,和sparse coding的思路比较类似,是学输入图片 y y y的latent feature map z z z,同时也要学卷积核 f f f,如果非要用sparse coding 那套来解释,就是学习图片在basis空间 f f f的系数表示 z z z。只是操作由点乘变成了卷积,如下图所示:
∑ k = 1 K 1 z k i ⊕ f k , c = y c i \sum\limits_{k=1}^{K_1}z_k^i\oplus f_{k,c}=y_c^i k=1∑K1zki⊕fk,c=yci
公式在下面的第三部分有详细介绍, f f f就对应于sparse coding中的 ϕ \phi ϕ,而 z z z对应于sparse coding中的 a a a,Loss function是:
C 1 ( y i ) = λ 2 ∑ c = 1 K 0 ∥ ∑ k = 1 K 1 z k i ⊕ f k , c − y c i ∥ 2 2 + ∑ k = 1 K 1 ∣ z k i ∣ p C_1(y^i)=\frac{\lambda}{2}\sum\limits_{c=1}^{K_0}\Vert\sum\limits_{k=1}^{K_1}z_k^i\oplus f_{k,c}-y_c^i\Vert_2^2+\sum\limits_{k=1}^{K_1}|z_k^i|^p C1(yi)=2λc=1∑K0∥k=1∑K1zki⊕fk,c−yci∥22+k=1∑K1∣zki∣p
上述结构只是单层的deconvolutional layer,可以按照这个方式叠加layer,第一层的 z z z就作为第二层的图片输入。Loss function如下所示:
C l ( y ) = λ 2 ∑ i = 1 I ∑ c = 1 K l − 1 ∥ ∑ k = 1 K l g k , c l ( z k , l i ⊕ f k , c l ) − z c , l − 1 i ∥ 2 2 + ∑ i = 1 I ∑ k = 1 K l ∣ z k , l i ∣ p C_l(y)=\frac{\lambda}{2}\sum\limits_{i=1}^I\sum\limits_{c=1}^{K_l-1}\Vert\sum\limits_{k=1}^{K_l}g_{k,c}^l(z_{k,l}^i\oplus f_{k,c}^l)-z_{c,l-1}^i\Vert_2^2+\sum\limits_{i=1}^I\sum\limits_{k=1}^{K_l}|z_{k,l^i|^p} Cl(y)=2λi=1∑Ic=1∑Kl−1∥k=1∑Klgk,cl(zk,li⊕fk,cl)−zc,l−1i∥22+i=1∑Ik=1∑Kl∣zk,li∣p
其中, z c , l − 1 i z_{c,l-1}^i zc,l−1i就是上一层的feature map表示,作为当前层的输入:
g k , c l g_{k,c}^l gk,cl
是一个0-1矩阵,相当于一个mask,用来决定哪些位置的输入需要连接。
下面分别介绍Deconvolutional Netword的learning和inference
learning:
Deconvolutional Network的学习也是一个交替优化的过程,首先优化feature map z,然后优化filter f,如果有多层的话逐层进行训练。
首先第一步是学习feature map。学习Deconcolutional Network的loss function有些困难,原因是feature map中的不同位置的点因为filter互相耦合比较严重。作者尝试了GD,SGD,IRLS(Iterative Reweighted Least Squares)这些优化方法,效果都不理想。因此作者使用了另外一个优化方法,不是直接优化式3中的z,而是选择了一个代理变量x,让z接近x,同时正则化x达到和式3中loss function同样的效果:
优化上式也是采用交替优化x和z的方法。
第二步是学习filter,正常的梯度下降即可。
整个Deconvolutional Network的学习算法如下所示,其中红色的部分是学习feature map,其实也相当于做inference,蓝色框是学习filter,相当于模型本身的参数学习:
inference:
inference包括两个层面,一个是根据图片和学到的filter来inference latent feature map,另外一个是根据latent feature map 重建画面。以两层Deconvolutional Network为例,首先学习第一层 z 1 z1 z1,然后学习第二层 z 2 z2 z2,注意第二层的学习有两个loss,一个是重建 z 1 z1 z1的loss,即project 1次学习和z1的误差:
3 Model
首先考虑一个作用于图片的单层的Deconvolutional Network layer。这一层获取一张图片作为输入,这个图片用 y i y^i yi进行表示,图片由 K 0 K_0 K0个颜色通道组成: y 1 i , … , y K 0 i y_1^i,\dots,y_{K_0}^i y1i,…,yK0i,我们将这些颜色通道中的每一个通道 c c c都表示为一个由 K 1 K_1 K1个latent特征图 z k i z_k^i zki 与filter f k , c f_{k,c} fk,c 卷积结果的的线性加和:
∑ k = 1 K 1 z k i ⊕ f k , c = y c i ( 1 ) \sum\limits_{k=1}^{K_1}z_k^i\oplus f_{k,c}=y_c^i\quad\quad\quad\quad\quad(1) k=1∑K1zki⊕fk,c=yci(1)
这里如果 y c i y_c^i yci是一个 N r × N c N_r\times N_c Nr×Nc图片并且filter大小为 H × H H\times H H×H,那么latent feature map大小为 ( N r + H − 1 ) × ( N c + H − 1 ) (N_r +H-1)\times (N_c+H-1) (Nr+H−1)×(Nc+H−1)。但是等式1是一个under-determined system,so to yield a unique solution we introduce a regularization term on z k i z_k^i zki that encourages sparsity in the latent feature maps。我们可以采用如下的cost function:
C 1 ( y i ) = λ 2 ∑ c = 1 K 0 ∥ ∑ k = 1 K 1 z k i ⊕ f k , c − y c i ∥ 2 2 + ∑ k = 1 K 1 ∣ z k i ∣ p ( 2 ) C_1(y^i)=\frac{\lambda}{2}\sum\limits_{c=1}^{K_0}\Vert\sum\limits_{k=1}^{K_1}z_k^i\oplus f_{k,c}-y_c^i\Vert_2^2+\sum\limits_{k=1}^{K_1}|z_k^i|^p\quad\quad\quad\quad(2) C1(yi)=2λc=1∑K0∥k=1∑K1zki⊕fk,c−yci∥22+k=1∑K1∣zki∣p(2)
注意这里的 ∣ w ∣ p |w|^p ∣w∣p含义是 ∑ i , j ∣ z k i ∣ p \sum_{i,j}|z_k^i|^p ∑i,j∣zki∣p,通常情况下 p = 1 p=1 p=1。 λ \lambda λ is a constant that balances the relative contributions of the reconstruction of y i y^i yi and the sparsity of the feature map z k i z_k^i zki。
在整个学习过程中,如同3.2节所描述的,我们会使用一组图片 y = { y 1 , … , y I } y=\{y^1,\dots,y^I\} y={y1,…,yI},最终目标是寻找 arg min f , z C 1 ( y ) 2 \argmin\limits_{f,z}C_1(y)^2 f,zargminC1(y)2,即寻找最优的latent feature map以及filter,注意每张图片都有its own set of feature map,但是filter通常对所有图片都是相同的。
3.1 Forming a hierarchy
上面介绍的结构可以从multi-channel输入图片中产生sparse feature map。这种结构可以很轻易的堆叠在一起来形成hierarchy,做法就是将 l l l层的feature map z k , l i z_{k,l}^i zk,li作为 l + 1 l+1 l+1层的输入。换句话说, l l l层的输入是具有 K l − 1 K_{l-1} Kl−1个通道的 l − 1 l-1 l−1层的feature map。 l l l层的cost function C l C_l Cl可以用如下的等式进行表达:
C l ( y ) = λ 2 ∑ i = 1 I ∑ c = 1 K l − 1 ∥ ∑ k = 1 K l g k , c l ( z k , l i ⊕ f k , c l ) − z c , l − 1 i ∥ 2 2 + ∑ i = 1 I ∑ k = 1 K l ∣ z k , l i ∣ p ( 3 ) C_l(y)=\frac{\lambda}{2}\sum\limits_{i=1}^I\sum\limits_{c=1}^{K_l-1}\Vert\sum\limits_{k=1}^{K_l}g_{k,c}^l(z_{k,l}^i\oplus f_{k,c}^l)-z_{c,l-1}^i\Vert_2^2+\sum\limits_{i=1}^I\sum\limits_{k=1}^{K_l}|z_{k,l^i|^p}\quad\quad\quad\quad(3) Cl(y)=2λi=1∑Ic=1∑Kl−1∥k=1∑Klgk,cl(zk,li⊕fk,cl)−zc,l−1i∥22+i=1∑Ik=1∑Kl∣zk,li∣p(3)
这里 z c , l − 1 i z_{c,l-1}^i zc,l−1i 是从先前层来的feature map, g k , c l g_{k,c}^l gk,cl are alements of a fixed binary matrix that determines the connectivity between the feature maps at successive layers, i.e. whether z k , l i z_{k,l}^i zk,li is connected to to z c , l − 1 i z_{c,l-1}^i zc,l−1i or not [13]. In layer-1 we assume that g k , c 1 g_{k,c}^1 gk,c1 is always 1, but in higher layers it will be saprse. We train the hierarchy from the bottom upwards, thus z c , l − 1 i z_{c,l-1}^i zc,l−1i is given from the results of learning on C_{l-1}(y).
3.2 学习filter
学习filter的过程是交替进行的,首先在最优化 C l ( y ) C_l(y) Cl(y)时保持filter不变而更新feature map(这个过程称为inference),然后保持feature map不变通过优化 C l ( y ) C_l(y) Cl(y)来更新filter。整个优化过程通过layer-wise manner进行,在第一层输入数据是训练图片 y y y。
推测feature map:
给定输入以及filter的情况下,推测出最优的feature map z k , l i z_{k,l}^i zk,li是整个过程的最难点。在 z k , l i z_{k,l}^i zk,li上进行的sparsity限制防止了模型学到trivial solution例如identity function。当 p = 1 p=1 p=1时feature map的最小化问题是凸的并且已经有很多方法被提出来解决这样的问题(3,14)。尽管理论上我们总能找到全局最小解,实际上这个问题是很难求解的因为整个问题是poorly conditioned。这是因为feature map中的元素因为filter相互耦合比较严重。One element in the map can be affected by another distant element, meaning that the minimization can take a very long time to converge to a good solution。
作者尝试了很多种常规的优化方法来尝试解决式子3,包括direct gradient descent,Iterative Reweighted Least Squares(IRLS)以及stochastic gradient descent。但是他们发现direct gradient descent受到比较常见的例如flat-lining的影响因此给出了一个较差的解。IRLS在解决大规模问题时非常慢。Stochastic gradient descent需要上千轮的迭代才会收敛。
因此,论文作者采用了一种另外的方式,这是一种continuation方法,由(6)和(27)首先使用。这种方式不会直接优化方程3,而是最小化auxiliary损失函数 C ^ l ( y ) \hat{C}_l(y) C^l(y) ,这个损失函数对feature map中的每一个 z k , l i z_{k,l}^i zk,li 都包含一个auxiliary variable x k , l i i x_{k,l}^ii xk,lii:
C ^ l ( y ) = λ 2 ∑ i = 1 I ∑ c = 1 K l − 1 ∥ ∑ k = 1 K l g k , c l ( z k , l i ⊕ f k , c l ) − z c , l − 1 i ∥ 2 2 + β 2 ∑ i = 1 I ∑ k = 1 K l ∥ z k , l i − x k − l i ∥ 2 2 + ∑ i = 1 I ∑ k = 1 K l ∣ x k , l i ∣ p ( 4 ) \hat{C}_l(y)=\frac{\lambda}{2}\sum_{i=1}^I\sum_{c=1}^{K_l-1}\Vert\sum_{k=1}^{K_l}g_{k,c}^l(z_{k,l}^i\oplus f_{k,c}^l)-z_{c,l-1}^i\Vert_2^2+\frac{\beta}{2}\sum\limits_{i=1}^I\sum\limits_{k=1}^{K_l}\Vert z_{k,l}^i-x_{k-l}^i\Vert_2^2+\sum\limits_{i=1}^I\sum\limits_{k=1}^{K_l}|x_{k,l}^i|^p (4) C^l(y)=2λi=1∑Ic=1∑Kl−1∥k=1∑Klgk,cl(zk,li⊕fk,cl)−zc,l−1i∥22+2βi=1∑Ik=1∑Kl∥zk,li−xk−li∥22+i=1∑Ik=1∑Kl∣xk,li∣p(4)
这里 β \beta β是一个continuation parameter。引入auxiliary variable将cost function的convolution部分从 ∣ ⋅ ∣ p |\cdot|^p ∣⋅∣p中分离了出来。通过这种方式,我们以使用一种交替最小化 z k , l i z_{k,l}^i zk,li 的方式。首先固定 x k , l i x_{k,l}^i xk,li,这产生了一个对于 z k , l i z_{k,l}^i zk,li的quadratic问题。接下来,我们固定 z k , l i z_{k,l}^i zk,li并对 x k , l i x_{k,l}^i xk,li中的每个元素求解一个separable 1D problem。我们将这两个阶段分别称为 z z z以及 x x x子问题。
在我们交替进行这两个步骤时,我们会将 β \beta β缓慢增加,从一个较小的初始值直到它strongly clamps z k , l i z_{k,l}^i zk,li to x k , l i x_{k,l}^i xk,li。This has the effect of gradually introducing the sparsity constraint and gives good numerical stability in practice(11,27)。
z z z子问题:从等式4中可以看出我们可以独立解出每个 z k , l i z_{k,l}^i zk,li ,在固定了 x k , l i x_{k,l}^i xk,li后,我们取 C ^ l ( y ) \hat{C}_l(y) C^l(y)对 z k , l i z_{k,l}^i zk,li的导数:
$$$$
3.3 图片representation/reconstruction
为了将图片用于image reconstruction,我们首先decompose一个input image,整个过程通过使用学到的filter f来找到latent representation z。用一个两层网络来解释这个过程,我们首先通过最小化 C 1 ( y ′ ) C_1(y') C1(y′)来推导出layer 1的feature map z k , 1 z_{k,1} zk,1以及filter f k , c 1 f_{k,c}^1 fk,c1。接下来我们使用一个交替的过程来获取layer 2的feature map z k , 2 z_{k,2} zk,2。首先我们最小化和 y ′ y' y′有关的reconstruction error,projecting z k , 2 z_{k,2} zk,2 through f k , c 2 f_{k,c}^2 fk,c2 and f k , c 1 f_{k,c}^1 fk,c1
[1] Zeiler M D, Krishnan D, Taylor G W, et
al. Deconvolutional networks[C]. Computer Vision and Pattern Recognition, 2010.
[2] Zeiler M D, Taylor G W, Fergus R, etal. Adaptive deconvolutional networks for mid and high level featurelearning[C]. International Conference on Computer Vision, 2011.
[3] Zeiler M D, Fergus R. Visualizing and
Understanding Convolutional Networks[C]. European Conference on Computer
Vision, 2013.
[4] Long J, Shelhamer E, Darrell T, et al.Fully convolutional networks for semantic segmentation[C]. Computer Vision andPattern Recognition, 2015.
[5] Unsupervised Representation Learning
with Deep Convolutional Generative Adversarial Networks
参考: