精读论文:Sparse Coding with Variance Regularization

Sparse Coding with Variance Regularization

\quad
本文的主题是 sparse coding。这个主题在computer vision中非常常见,因为我们需要提取出图像的 representation,而且尽可能要求是稀疏表示。通常的 sparse coding算法是用 ℓ 1 \ell_1 1 的惩罚函数(penalty function)来限制字典的稀疏性。在这篇文章中,作者提出了一种全新的框架,在这个框架中我们不再需要对 decoder 使用某种正则函数。
\quad

Abstract

在文中首先提出了一个问题:“ Collapse of the ℓ 1 \ell_1 1 norm in the codes”。也就是说 ℓ 1 \ell_1 1范数崩溃的问题。为什么会造成这个问题呢?首先,现有一个字典为 D \mathcal{D} D,重构信号为 y ^ \hat y y^,那么有
y = D z = c D ⋅ 1 c z y = \mathcal{D}z = c\mathcal{D} \cdot \frac{1}{c}z y=Dz=cDc1z
成立,这个意思就是说,当 c > 1 c>1 c>1时, 1 c z \frac{1}{c}z c1z比原来的 z z z会更小,但其实这会有一模一样的重构。此时,如果不对 D \mathcal{D} D做限制, D \mathcal{D} D无限大,就会导致 z z z无限小,这就是 ℓ 1 \ell_1 1范数崩溃问题。

传统的方法是利用二范数去规范化字典,但是文中指出这样的规范化是不平凡的,所以本文提出了方差正则化方法,直接对 z z z进行约束,省去了对字典进行约束的步骤。(这里的方差正则化是直接加在损失函数上的)

同时,文中的方差正则化其实就是“Let each latent code component has variance greater than a fixed threshold”。后文会对这里进行详细解释。

另外,文中实验表明,使用了非线性Deocder的带方差正则化的AutoEncoder框架相比于线性decoder的框架具有更高的重构质量。同时,使用了方差正则化的稀疏表示方法在降噪和分类任务也具有很好的效果。
\quad

Sparse AutoEncoder Framework

下图是文中提出的AutoEncoder框架,这个框架其实是比较漂亮的。
在这里插入图片描述

给定一个输入 y y y(图片)和一个固定的decoder D \mathcal{D} D,使用FISTA找到一个sparse code z ∗ z^* z可以使用字典 D \mathcal{D} D的元素重构 y y y

整个框架的输入为图片 y y y

  • 首先,将图片 y y y输入到Encoder里面,得到输出 z ε z_{\varepsilon} zε
  • 其次,将 z ε z_{\varepsilon} zε D \mathcal{D} D输入到FISTA中,经过若干步迭代,可以得到 z ∗ z^* z。这里的迭代有一个损失函数,可以更新对应的参数。(其实这里的FISTA更像是LISTA)这里的损失函数一共分为三部分:
    • 方差正则化
    • M S E ( z ε , z ∗ ) MSE(z_\varepsilon, z^*) MSE(zε,z)
    • M S E ( y , y ^ ) MSE(y, \hat y) MSE(y,y^)
  • z ∗ z^* z传入Decoder中,重构信号 y y y

注意:在FISTA中,输入 z ε z_{\varepsilon} zε其实是作为FISTA迭代的初值,可以减少迭代次数,加快FISTA的收敛。另外,传入 D \mathcal{D} D(参数固定)是为了重构信号 y y y。这就是说,这里想要FISTA得到的 z ∗ z^* z同时满足两个条件:(1)和Encoder得到的 z ε z_\varepsilon zε足够接近;(2)要求能较好的重构信号 y y y

接下来详细讲一讲每部分的细节。

\quad

Background: Sparse Coding and Dictionary Learning

首先来看一下背景知识,知道的略过。

稀疏编码算法就是在给定一个固定的字典 D ∈ R d × l \mathcal{D}\in\mathbb{R}^{d\times l} DRd×l和样本 y ∈ R d y\in \mathbb{R}^{d} yRd的基础上,寻求一个潜在的稀疏表示的算法。一般通过最小化能量函数求解:
z ∗ = arg ⁡ min ⁡ z E ( z , y , D ) = 1 2 ∥ y − D z ∥ 2 2 + λ ∥ z ∥ 1 z^{*}=\arg\min_{z}\mathbf{E}(z, y, \mathcal{D})=\frac{1}{2}\|y-\mathcal{D} z\|_{2}^{2}+\lambda\|z\|_{1} z=argzminE(z,y,D)=21yDz22+λz1

其实一般情况下字典也是不知道的,字典 D \mathcal{D} D的参数一般利用梯度下降算法最小化均方误差求解得到:
L D ( D , Z ∗ , Y ) = arg ⁡ min ⁡ D 1 N ∑ i = 1 N ∥ y i − D z i ∗ ∥ 2 2 \mathcal{L}_{\mathcal{D}}\left(\mathcal{D}, \mathcal{Z}^{*}, \mathcal{Y}\right)=\arg \min _{\mathcal{D}} \frac{1}{N} \sum_{i=1}^{N}\left\|y_{i}-\mathcal{D} z_{i}^{*}\right\|_{2}^{2} LD(D,Z,Y)=argDminN1i=1NyiDzi22
方便起见,(1)式重新写为:
z ∗ = arg ⁡ min ⁡ z E ( z , y , D ) = arg ⁡ min ⁡ z f ( z ) + g ( z ) z^{*}=\arg \min _{z} \mathbf{E}(z, y, \mathcal{D})=\arg \min _{z} f(z)+g(z) z=argzminE(z,y,D)=argzminf(z)+g(z)

这里先讲一讲ISTA算法 ,一个ISTA迭代可以分为两步:Gradient StepShrinkage Step

  • Gradient Step

z ~ ( k ) = z ( k − 1 ) − η k ∇ f ( z ( k − 1 ) ) \tilde{z}^{(k)}=z^{(k-1)}-\eta_{k} \nabla f\left(z^{(k-1)}\right) z~(k)=z(k1)ηkf(z(k1))

  • Shrinkage Step

z ( k ) = τ λ η k ( z ~ ( k ) ) z^{(k)}=\tau_{\lambda \eta_{k}}\left(\tilde{z}^{(k)}\right) z(k)=τληk(z~(k))
其中, τ α ( x ) j = sign ⁡ ( x j ) ( ∣ x j ∣ − α ) + \tau_{\alpha}(x)_{j}=\operatorname{sign}\left(x_{j}\right)\left(\left|x_{j}\right|-\alpha\right)_{+} τα(x)j=sign(xj)(xjα)+。ISTA详细步骤可以看之前写的文章:Iterative Shrinkage Thresholding Algorithm

FISTA比较简单,它其实就是在ISTA的基础上加了一个动量项,进行了加速。Gradient Step式中的 z k − 1 z^{k-1} zk1被替换为:
x ( k ) = z ( k − 1 ) + t k − 1 − 1 t k ( z ( k − 1 ) − z ( k − 2 ) ) x^{(k)}=z^{(k-1)}+\frac{t_{k-1}-1}{t_{k}}\left(z^{(k-1)}-z^{(k-2)}\right) x(k)=z(k1)+tktk11(z(k1)z(k2))
t 1 = 1 t_1=1 t1=1,对于 k ≥ 2 k\geq 2 k2有:
t k = 1 + 1 + 4 t k − 1 2 2 t_{k}=\frac{1+\sqrt{1+4 t_{k-1}^{2}}}{2} tk=21+1+4tk12
因此,FISTA的 Gradient Step变为了:
z ~ ( k ) = x ( k ) − η k ∇ f ( x ( k ) ) \tilde{z}^{(k)}=x^{(k)}-\eta_{k} \nabla f\left(x^{(k)}\right) z~(k)=x(k)ηkf(x(k))
Shrinkage Step和ISTA一样。

\quad

(F)ISTA with Variance Regularization

为了防止 ℓ 1 \ell_1 1范数的崩溃,在原来的优化问题上加入方差正则化:
f ~ ( z ) = ∑ i = 1 n 1 2 ∥ y i − D z ⋅ i ∥ 2 2 ⏟ reconstruction terms + ∑ j = 1 l β [ ( T − Var ⁡ ( z j ⋅ ) ) + ] 2 ⏟ squared hinge terms \tilde{f}(\mathbf{z})=\underbrace{\sum_{i=1}^{n} \frac{1}{2}\left\|y_{i}-\mathcal{D} \mathbf{z}_{\cdot i}\right\|_{2}^{2}}_{\text{reconstruction terms}} + \underbrace{\sum_{j=1}^{l} \beta\left[\left(T-\sqrt{\operatorname{Var}\left(\mathbf{z}_{j\cdot}\right) }\right)_{+}\right]^{2}}_{\text{squared hinge terms}} f~(z)=reconstruction terms i=1n21yiDzi22+squared hinge terms j=1lβ[(TVar(zj) )+]2
其中, Var ⁡ ( z j . ) = 1 n − 1 ∑ i = 1 n ( z j i − μ j ) 2 \operatorname{Var}\left(\mathbf{z}_{j .}\right)=\frac{1}{n-1} \sum\limits_{i=1}^{n}\left(\mathbf{z}_{j i}-\mu_{j}\right)^{2} Var(zj.)=n11i=1n(zjiμj)2

在此基础上,加入 ℓ 1 \ell_1 1正则化项,可以得到修正后的能量函数
E ~ ( z , Y , D ) = ∑ i = 1 n 1 2 ∥ y i − D z ⋅ i ∥ 2 2 + ∑ j = 1 l β [ ( T − Var ⁡ ( z j ⋅ ) ) + ] 2 + ∑ i = 1 n λ ∥ z ⋅ i ∥ 1 \tilde{\mathbf{E}}(\mathbf{z}, Y, \mathcal{D})=\sum_{i=1}^{n} \frac{1}{2}\left\|y_{i}-\mathcal{D} \mathbf{z}_{\cdot i}\right\|_{2}^{2}+\sum_{j=1}^{l} \beta\left[\left(T-\sqrt{\operatorname{Var}\left(\mathbf{z}_{j\cdot}\right) }\right)_{+}\right]^{2}+\sum_{i=1}^{n} \lambda\left\|\mathbf{z}_{\cdot i}\right\|_{1} E~(z,Y,D)=i=1n21yiDzi22+j=1lβ[(TVar(zj) )+]2+i=1nλzi1

不知道大家对这个方差正则化是否理解,我来谈谈自己的一点想法:关注hinge term这一项,我们最小化 E ~ ( z , Y , D ) \tilde{\mathbf{E}}(\mathbf{z}, Y, \mathcal{D}) E~(z,Y,D)时,由于平方的存在,理想情况下是想hinge term这一项越小越好,里面的 ( T − Var ⁡ ( z j ⋅ ) ) \left(T-\sqrt{\operatorname{Var}\left(\mathbf{z}_{j\cdot}\right) }\right) (TVar(zj) )这部分本身就非负(简单的理解,其实 ( ) + ()_+ ()+就是ReLU),所以这部分越小越小,其实就是让 z z z的方差大于一个固定的阈值 T \sqrt{T} T

与上面的ISTA类似,分别讨论 Gradient StepShrinkage Step:

  • Gradient Step:
    z ~ ⋅ t ( k ) = z ⋅ t ( k − 1 ) − η k ∇ z ⋅ t ( k − 1 ) f ~ ( z ) \tilde{\mathbf{z}}_{\cdot t}^{(k)}=\mathbf{z}_{\cdot t}^{(k-1)}-\eta_{k} \nabla_{\mathbf{z}_{\cdot t}^{(k-1)}} \tilde{f}(\mathbf{z}) z~t(k)=zt(k1)ηkzt(k1)f~(z)

    • reconstruction terms
      ∂ ∂ z s t ∑ i = 1 n 1 2 ∥ y i − D z ⋅ ∥ 2 2 = D s T ( D z ⋅ t − y t ) \frac{\partial}{\partial \mathbf{z}_{s t}} \sum_{i=1}^{n} \frac{1}{2}\left\|y_{i}-\mathcal{D} \mathbf{z}_{\cdot}\right\|_{2}^{2}=\mathcal{D}_{s}^{T}\left(\mathcal{D} \mathbf{z}_{\cdot t}-y_{t}\right) zsti=1n21yiDz22=DsT(Dztyt)
    • hinge terms
      ∂ ∂ z s t ∑ j = 1 l β [ ( T − Var ⁡ ( z j . ) ) + ] 2 = { − 2 β n − 1 T − Var ⁡ ( z s . ) Var ⁡ ( z s . ) ( z s t − μ s ) ,  if  Var ⁡ ( z s . ) < T 0  otherwise  \frac{\partial}{\partial \mathbf{z}_{s t}} \sum_{j=1}^{l} \beta\left[\left(T-\sqrt{\operatorname{Var}\left(\mathbf{z}_{j .}\right)}\right)_{+}\right]^{2}= \begin{cases}-\frac{2 \beta}{n-1} \frac{T-\sqrt{\operatorname{Var}\left(\mathbf{z}_{s .}\right)}}{\sqrt{\operatorname{Var}\left(\mathbf{z}_{s .)}\right.}}\left(\mathbf{z}_{s t}-\mu_{s}\right), & \text { if } \sqrt{\operatorname{Var}\left(\mathbf{z}_{s .}\right)}<T \\ 0 & \text { otherwise }\end{cases} zstj=1lβ[(TVar(zj.) )+]2=n12βVar(zs.) TVar(zs.) (zstμs),0 if Var(zs.) <T otherwise 
  • Shrinkage Step:与ISTA一样。

AutoEncoder Architectures

Encoder

Encoder的架构如下:
在这里插入图片描述
这里的Encoder的架构采用的2010年发表的LISTA的架构。要注意的是,Encoder的输出层也作用了ReLU,也就是说,Encoder的输出是非负的,同时也是较为稀疏。
\quad

Decoder

Decoder其实就相当于字典的存在,也就是说:
y = D x y=\mathcal{D}x y=Dx
可以 D \mathcal{D} D看作一个映射,把 z ∗ → y ^ z^*\rightarrow\hat y zy^。自然地,这个映射有线性的,也有非线性的。在论文中,作者使用了两种Decoder,分别为:

  • Linear Decoder: A simple linear transformation W ∈ R d × l W\in \mathbb{R}^{d\times l} WRd×l.
  • Non-Linear Decoder: Networks with one hidden layer. (parameters: W 1 ∈ R m × l W_1\in\mathbb{R}^{m\times l} W1Rm×l, b 1 ∈ R m b_1\in\mathbb{R}^{m} b1Rm, W 2 ∈ R d × m W_2\in\mathbb{R}^{d\times m} W2Rd×m)

并且,论文中的实验说明了非线性的Decoder的效果比线性的Decoder效果更好。

\quad

Training

一些训练的细节:

  • 利用Encoder得到的结果当作FISTA的初值,减少迭代次数;
  • 限制 z z z为非负,简化Shrinkage为ReLU;
  • λ \lambda λ的值取决于稀疏程度;
  • 四组算法:SDL、SDL-NL、VDL、VDL-NL
    • SDL:standard dictionary learning.
    • SDL-NL: SDL with non-linear decoder.
    • VDL:variance-regularized dictionary learning.
    • VDL-NL:VDL with non-linear decoder.
  • 数据集:MNIST VS Natural Image Patches.
  • 评估: PSNR

提到PSNR,这里简单说一下PSNR的计算公式。给定一个大小为 m × n m\times n m×n的干净图像 I I I和噪声图像 K K K,均方误差( M S E MSE MSE)定义为:
M S E = 1 m n ∑ i = 0 m − 1 ∑ j = 0 n − 1 [ I ( i , j ) − K ( i , j ) ] 2 M S E=\frac{1}{m n} \sum_{i=0}^{m-1} \sum_{j=0}^{n-1}[I(i, j)-K(i, j)]^{2} MSE=mn1i=0m1j=0n1[I(i,j)K(i,j)]2
在此基础上,PSNR(dB)被定义为:
P S N R = 10 ⋅ log ⁡ 10 ( M A X I 2 M S E ) P S N R=10 \cdot \log _{10}\left(\frac{M A X_{I}^{2}}{M S E}\right) PSNR=10log10(MSEMAXI2)

其中 M A X I 2 MAX_I^2 MAXI2为图片可能的最大像素值。如果每个像素都由 8 位二进制来表示,那么就为 255。通常,如果像素值由 B B B位二进制来表示,那么 M A X I = 2 B − 1 MAX_I=2^B-1 MAXI=2B1。一般地,针对 uint8 数据,最大像素值为 255;针对浮点型数据,最大像素值为 1。

峰值信噪比PSNR衡量图像失真或是噪声水平的客观标准

2个图像之间PSNR值越大,则越相似。普遍基准为30dB,30dB以下的图像劣化较为明显。

\quad

参考

  • Evtimova K, LeCun Y. Sparse Coding with Multi-Layer Decoders using Variance Regularization[J]. arXiv preprint arXiv:2112.09214, 2021.
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
卷积稀疏编码(convolutional sparse coding)是一种基于深度学习模型的方法,用于学习输入数据的稀疏表示。它在计算机视觉和模式识别领域得到了广泛应用。 与传统的稀疏编码方法不同,卷积稀疏编码利用了卷积层的结构和权值共享的特性。它通过在输入数据上应用卷积操作和非线性激活函数来提取特征,并使用稀疏性约束来学习这些特征的表示。 卷积稀疏编码的一个关键思想是特征共享。通过共享权值,可以减少需要学习的参数量,并使模型具有良好的泛化能力。这种共享的方式使得卷积稀疏编码在处理图像、视频等高维数据时更加有效。 卷积稀疏编码的训练过程可以通过最小化重构误差和稀疏性约束来实现。通过最小化重构误差,模型可以学习到输入数据的低维表示,从而具有压缩和降维的效果。同时,通过稀疏性约束,模型可以选择性地激活少量的特征,从而实现特征的稀疏表示。 卷积稀疏编码在图像处理领域的应用非常广泛。它可以用于图像去噪、图像恢复、图像合成等任务。此外,随着深度学习的发展,卷积稀疏编码也被应用于图像分类、目标检测和语义分割等视觉任务中。 总之,卷积稀疏编码是一种利用卷积层和权值共享的方法,用于学习输入数据的稀疏表示。它具有良好的泛化能力和较好的压缩和降维效果,已在图像处理和计算机视觉领域取得了很好的应用效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AlphaGuaGua

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值