Dictionary Learning

字典学习数学原理

这里我们省去背景介绍,我们直接通过数学公式来更加直观的了解这一技术,并通过一些具体的应用领域来感受字典学习的魅力,那就开始吧!
对于给定样本数据集 Y Y Y,我们可以建立一个能够表示这个数据集的字典 D D D,这时数据集每个样本都能通过字典 D D D与该样本对应的稀疏表示 X X X来恢复,且 X X X满足一定的稀疏度,用公式表示如下:
Y ≈ D X Y \approx DX YDX,st. ∥ X ∥ 0 ≤ L \|X\|_{0} \leq L X0L
而字典学习就是通过迭代的方式寻找出字典 D D D与各样本所对应的稀疏表示 X X X,如下式所示:
min ⁡ D , X ∑ i ∥ x i ∥ 0 , \min _{\mathbf{D}, \mathbf{X}} \sum_{i}\left\|\mathbf{x}_{i}\right\|_{0}, \quad minD,Xixi0, s.t. min ⁡ D , X ∥ Y − D X ∥ F 2 ≤ ϵ \min _{\mathbf{D}, \mathbf{X}}\|\mathbf{Y}-\mathbf{D} \mathbf{X}\|_{F}^{2} \leq \epsilon minD,XYDXF2ϵ
式中零范数不容易寻优,可以使用一范数来代替,即使用 ∥ x i ∥ 1 \left\|\mathbf{x}_{i}\right\|_{1} xi1代替 ∥ x i ∥ 0 \left\|\mathbf{x}_{i}\right\|_{0} xi0,其中 E \mathcal{E} E为重构允许的误差最大值。

K-SVD优化

我们可以使用K-SVD算法来求解该优化问题,这里有两个优化变量,一般是先固定一个,优化另一个变量,然后交替运行,直至达到要求为止。

初始化

我们可以从数据集中随机选出一些列来组成字典 D D D的原子,即其列向量,对于稀疏表示 X X X我们可以初始化为全零列向量。

更新 X X X

为了方便,我们这里只考虑单个样本向量y,假设字典中只有4个原子,即 D = [ α 1 , α 2 , α 3 , α 4 ] D=[\alpha 1, \alpha 2, \alpha 3, \alpha 4] D=[α1,α2,α3,α4],且这里的字典就是按照我们之前的初始化方法从数据集中随机选取的四个样本,现在我们的目标是计算y的编码x,并使得x尽量稀疏。

  1. 首先我们从 α 1 , α 2 , α 3 , α 4 \alpha 1, \alpha 2, \alpha 3, \alpha 4 α1,α2,α3,α4找出与y最近的向量,也就是分别计算点乘:
    α 1 ⋆ y , α 2 ⋆ y , α 3 ⋆ y , α 4 ⋆ y \alpha 1^{\star} y, \alpha 2^{\star} y, \alpha 3^{\star} y, \alpha 4^{\star} y α1y,α2y,α3y,α4y,得到最近的原子 α \alpha α
  2. 假设 α 2 ∗ y \alpha 2^{*} y α2y是最小的,我们就选用 α 2 \alpha 2 α2作为我们的第一个原子,然后我们的初始编码向量为:
    x 1 = ( 0 , b , 0 , 0 ) x 1=(0, b, 0,0) x1=(0,b,0,0)
    其中b为未知量。
  3. 求解未知量b:
    y − b ⋆ α 2 = 0 y-b^{\star} \alpha 2=0 ybα2=0
    显然我们可以很容易的求出b。
  4. 计算残差 y ′ y^{\prime} y
    y ′ = y − b ⋆ α 2 y^{\prime}=y-b^{\star} \alpha 2 y=ybα2,如果满足重构误差阈值 E \mathcal{E} E,则结束,否则进入下一步。
  5. 计算剩余的字典 α 1 , α 3 , α 4 \alpha 1, \alpha 3, \alpha 4 α1,α3,α4与残差向量y’的最近的向量,也就是计算
    α 1 ⋆ y ′ , α 3 ⋆ y ′ , α 4 ⋆ y ′ \alpha 1^{\star} y^{\prime}, \alpha 3^{\star} y^{\prime}, \alpha 4^{\star} y^{\prime} α1y,α3y,α4y
    然后求取最小值对应的向量 α \alpha α,假设 α 3 ⋆ y ′ \alpha 3^{\star} y^{\prime} α3y为最大值,那么就令新的编码向量为:
    x 2 = ( 0 , b , c , 0 ) x 2=(0, b, c, 0) x2=(0,b,c,0)
    其中b、c为未知数
  6. 求解系数b、c,于是我们可以列出方程:
    y − b ⋆ α 2 − c ⋆ α 3 = 0 y-b^{\star} \alpha 2-c^{\star} \alpha 3=0 ybα2cα3=0
    方程中有两个未知参数b、c,我们可以进行求解最小二乘方程,求得b、c。
  7. 更新残差向量y’
    y ′ = y − b ⋆ α 2 − c ⋆ α 3 y^{\prime}=y-b^{\star} \alpha 2-c^{\star} \alpha 3 y=ybα2cα3
    如果y’的模长满足阈值范围,那么就结束,否则就继续循环,就这样一直循环下去。

更新字典D

假设X是已知的,我们逐列更新字典。下面我们仅更新字典的第k列,记dk为字典D的第k列向量,记 x T k \mathbf{x}_{T}^{k} xTk为稀疏矩阵X的第k行向量,我们有:
∥ Y − D X ∥ F 2 = ∥ Y − ∑ j = 1 K d j x T j ∥ F 2 = ∥ ( Y − ∑ j ≠ k d j x T j ) − d k x T k ∥ F 2 = ∥ E k − d k x T k ∥ F 2 \begin{aligned}\|\mathbf{Y}-\mathbf{D} \mathbf{X}\|_{F}^{2} &=\left\|\mathbf{Y}-\sum_{j=1}^{K} \mathbf{d}_{j} \mathbf{x}_{T}^{j}\right\|_{F}^{2} \\ &=\left\|\left(\mathbf{Y}-\sum_{j \neq k} \mathbf{d}_{j} \mathbf{x}_{T}^{j}\right)-\mathbf{d}_{k} \mathbf{x}_{T}^{k}\right\|_{F}^{2} \\ &=\left\|\mathbf{E}_{k}-\mathbf{d}_{k} \mathbf{x}_{T}^{k}\right\|_{F}^{2} \end{aligned} YDXF2=Yj=1KdjxTjF2=Yj=kdjxTjdkxTkF2=EkdkxTkF2
上式中残差: E k = Y − ∑ j ≠ k d j x T j \mathbf{E}_{k}=\mathbf{Y}-\sum_{j \neq k} \mathbf{d}_{j} \mathbf{x}_{T}^{j} Ek=Yj=kdjxTj
此时优化问题可描述为: min ⁡ d k , x T k ∥ E k − d k x T k ∥ F 2 \min _{\mathbf{d}_{k}, \mathbf{x}_{T}^{k}}\left\|\mathbf{E}_{k}-\mathbf{d}_{k} \mathbf{x}_{T}^{k}\right\|_{F}^{2} mindk,xTkEkdkxTkF2

因此我们需要求出最优的dk, x T k \mathbf{x}_{T}^{k} xTk,这是一个最小二乘问题,可以利用最小二乘的方法求解,或者可以利用SVD进行求解,这里利用SVD的方式求解出两个优化变量。
但是,在这里我们需要注意的是,不能直接利用Ek进行求解,否则求得的新的 x T k \mathbf{x}_{T}^{k} xTk不稀疏。因此我们需要将Ek中对应的 x T k \mathbf{x}_{T}^{k} xTk不为0的位置提取出来,得到新的 E k ′ \mathbf{E}_{k}^{\prime} Ek,这个过程如图所示,这样描述更加清晰。
在这里插入图片描述
如上图,假设我们要更新第0列原子,我们将 x T k \mathbf{x}_{T}^{k} xTk中为零的位置找出来,然后把Ek对应的位置删除,得到 E k ′ \mathbf{E}_{k}^{\prime} Ek,此时优化问题可描述为:
min ⁡ d k , x T k ∥ E k ′ − d k x T ′ k ∥ F 2 \min _{\mathbf{d}_{k}, \mathbf{x}_{T}^{k}}\left\|\mathbf{E}_{k}^{\prime}-\mathbf{d}_{k} \mathbf{x}_{T}^{\prime k}\right\|_{F}^{2} mindk,xTkEkdkxTkF2

交替更新

通过上述的更新,我们可以得到最优的字典D、以及稀疏表示X。

实际应用

字典学习是很有使用价值的一个技术,能够被广泛应用在图像去噪、恢复、去马赛克等领域,这里仅以图像去噪为例简单说明。
如果你的计算资源有限,我们可以用大量的数据,通过字典学习针对这些样本学到能够表征所有这些样本的字典原子,在测试时,给你一张被污染的图像,我们可以固定字典,仅更新对该图像的稀疏表示,即只要找到最优的稀疏表示就能够恢复出干净图像。自然我们也可以直接在被污染的图片上通过交替更新字典D与稀疏表示X来恢复出干净的图像。也能够选择一种折中的方案,即更新预训练的字典D。
具体的更新过程如下图所示:
在这里插入图片描述
图中x表示干净图像,y表示被污染的图像, α \alpha α表示稀疏表示,D为字典,R表示取出x的一个局部块。

去噪效果如下图所示:
在这里插入图片描述
在这里插入图片描述

参考文献

字典学习(Dictionary Learning, KSVD)详解
ML笔记:字典学习2(Dictionary Learning)
Digital image processing: p068- Sparse Modeling Image Processing Examples
赵小胖的脑科学园地
[论文]K-SVD: An Algorithm for Designing Overcomplete Dictionaries for Sparse Representationk-svd字典学习

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值