由于工作需要,最近刚刚看了一些K-SVD的介绍,这里给自己做一下小节。

K-SVD我们一般是用在字典学习、稀疏编码方面,它可以认为是K-means的一种扩展,http://en.wikipedia.org/wiki/K-means_clustering

我们进行K-SVD的目标是要构造一个过完备的矩阵,然后选择最稀疏的系数解使得矩阵可以对其训练集相似的目标向量进行稀疏表示。

就字典学习来说,我们所设计的字典目标要满足(还有第二种情况我们先不考虑):

其中$Y$是你要表示的信号($n\times N$),$D$是字典,也就是过完备矩阵($n\times K$),$X$为系数矩阵($K\times N$)。这里需要说明的是$X$与$Y$是按列对应,所表示的含义是字典中的条目(每一列)按照$X_i$为系数进行线性组合,就会得到$Y$。而我们的目的是在已知$X$和$Y$的情况下更新字典来满足上述条件。

构造字典的算法分为两步:稀疏表示和字典更新。

稀疏表示:

首先要有一个初始化的字典$D$,然后我们将$DX$看做$D$中的每列与$X$中对应每行的乘积,这样就将$DX$给分片,即$DX=\sum_{i=1}^K{d_i}{x_i^T}$

字典更新:

这里我们的思想是逐次更新字典向量,通过K次迭代完成字典的一次更新。我们在剥离第K个条目之后,上述表达式会产生一个"空洞",而我们要做的就是寻找新的$d_i$和$x_i$来填补这个"空洞"来更加趋于收敛情况,所使用的方法便是SVD

上式中的E是误差矩阵,对E做SVD分解,$E=U\Lambda V^T$,其中U和V的列矢量均是正交基,$\Lambda$是对角矩阵。若$\Lambda$的对角元素从大到小排列,则表示E的能量分量主轴在相应几个正交方向上由大到小分配,如此我们取U的第一个列向量来表示$d_i$,取V的第一个列向量与$\Lambda$的第一个元素的成绩表示$x_i$,这样就完成了字典一个条目的更新。

但是这里我们要注意的是,X是一个稀疏矩阵,我们通过上述方法得到的X有可能不满足稀疏条件,处理方法是我们只计算$x_i$中的非零列,可以理解为我们用$x_i$中非零元素构建一个新的矩阵$\Omega$($N\times M$),M是$x_i$中的非零元素个数,N是字典中每个向量的维数。然后我们上式进行变化:

$$E_k^R=E_k\Omega, x_R^k=x_T^k\Omega$$

然后我们对$E_k^R$进行SVD分解,按照上面思路,得到新的字典条目$d_i$。这里做一下说明,上面乘以新的矩阵$\Omega$其实就是把字典中没有做贡献的向量给移除掉,从而不会造成直接分解之前的向量不稀疏的情况了。

在字典更新时,有可能出现极限情况,即$x_i=0$,如此E收缩后也为0矩阵,即无法进行SVD,解决方法是计算误差矩阵E的每一列的平方,找到平方和最大的列也就是误差最大的列,被表示为最小列填充该字典列,以此最大限度的减小误差,让字典可以继续有效更新。

参考:

http://home.ustc.edu.cn/~zywvvd/files/K-SVD.pdf

http://blog.nrdang.com/?p=35

http://blog.csdn.net/abcjennifer/article/details/8693342

Aharon M, Elad M, Bruckstein A. -svd: An algorithm for designing overcomplete dictionaries for sparse representation[J]. Signal Processing, IEEE Transactions on, 2006, 54(11): 4311-4322.

最新文章

  1. react 犯错
  2. MAC 安装j2ee.sh的办法
  3. Centos下设置静态IP
  4. 对于不是特别擅长Photoshop的人来说,熟悉和运用Photoshop工具提供的各类便捷的快捷键,是有帮助的。
  5. c enum用法
  6. delphi 程序窗体及控件自适应分辨率(通过ComponentCount遍历改变字体大小以及上下左右)
  7. PHP 表单验证 - 验证 E-mail 和 URL
  8. 使用disqus搭建comment时一件非常二的事
  9. hadoop笔记之Hive入门(Hive的体系结构)
  10. android音乐柱状频谱实现
  11. 网络数据(socket)传输总结
  12. Linq to SQL -- Select、Distinct和Count、Sum、Min、Max、Avg
  13. Gym 102028C - Supreme Command - [思维题][2018-2019 ACM-ICPC Asia Jiaozuo Regional Contest Problem C]
  14. mqtt------ mosca服务器端参数简介
  15. python六十课——高阶函数之map
  16. [Beego模型] 四、使用SQL语句进行查询
  17. 自动化部署--shell脚本--3
  18. linux环境中,如何使用tar来创建压缩包?解压缩?
  19. springMVC去掉静态资源的拦截
  20. jsp/servlet区别

热门文章

  1. rsyslog 与 logrotate 服务
  2. photoshop几个基本技巧
  3. angular-ngSanitize模块-linky过滤器详解
  4. VS的工程链接优化的问题
  5. AJAX创建表格,删除数据
  6. wap版百度hi给你飞速的赶脚 赶紧登陆手机百度hi吧
  7. A+B Again(在某个数中找大于m的最小约数)
  8. 淘宝(阿里百川)手机客户端开发日记第五篇 SharedPreferences使用详解
  9. 在线调试和演示的前端开发工具------http://jsfiddle.net/
  10. Resources in Visual Tracking(转载)