KSVD稀疏表示-字典学习 笔记
2019-04
一、引言
1、有监督学习
属性有标记的学习过程(低维还方便,高维很难划分具体的明确的标签)
2、无监督学习
属性没有标记的学习过程。
字典学习一般是无监督学习过程,维灾情况,导致高维空间中,最近的点和最远的点的距离随维度增加而减小,换句话说,维度增加让远点和近点的差异减小,趋近于零。所以单纯用最邻近算法不能解决高维问题。
3、维灾解决办法:降维
字典就是一个矩阵(n维),这个矩阵比之前的的高维数据(k维)的维度要低得多,即n<<k。数据对象y可以表示成y=a1 x1 +…+an xn
其中,xi 是字典的列向量,ai 是一个线性组合,称之为稀疏表示系数,整个ai 构成的矩阵记为A。所谓的稀疏表示 ,其实就是求这个系数的矩阵。为了实现稀疏,系数矩阵的很多值,都是0。
二、稀疏表示
使用包含原型信号原子(原子:信号的基本构成成分,一个列向量代表一个原子)的完备字典(字典:许多原子的排序集合,一个N*T的矩阵,如果T>N,则为过完备或冗余字典。即原子的个数远远大于信号y的长度(其长度很显然是n)。 T=N则为完备字典),其信号由这些原子的稀疏线性组合描述
**
y=Dx**:给定一个信号y,它可以被表示成这些原子的稀疏线性组合。
D分两种: 1固定字典:使用简单,方便,计算过程少,但是稀疏结果不好
2学习字典:根据学习过程建立的字典,可以适用于任何类型的图像,但是计算过程复杂目的:找到让X尽量稀疏的D。
意义:1用尽可能少的资源表示尽可能多的知识,2计算速度快。
稀疏规则化算子:为了实现特征的自动选择,会学习地去掉这些没有信息的特征,也就是把这些特征对应的权重置为0。
1、研究过程
提取出400个小碎片,每个照片碎片的尺寸均为 16x16 像素,不妨把这400个碎片标记为 S[i], i = 0,… 399,随机提取第401个碎片,,尺寸也是 16x16, 标记为 T。
问题:
如何从这400个碎片中,选取一组碎S[k], 通过叠加的办法,合成出一个新的碎片,而这个新的碎片,应当与随机选择的目标碎片 T,尽可能相似,同时,S[k] 的数量尽可能少
转为数学公式:
Sum_k (a[k] * S[k]) --> T, 其中 a[k] 是在叠加碎片 S[k] 时的权重系数。
解决办法:稀疏编码
稀疏编码是一个重复迭代的过程,每次迭代分两步:
1)选择一组 S[k],然后调整 a[k],使得Sum_k (a[k] * S[k]) 最接近 T。
2)固定住 a[k],在 400 个碎片中,选择其它更合适的碎片S’[k],替代原先的 S[k],使得Sum_k (a[k] * S’[k]) 最接近 T。
经过几次迭代后,最佳的 S[k] 组合。
2、矩阵分解方式
(1)SVD 奇异值分解
奇异值分解的过程,图像处理中常用于压缩图像。对矩阵形状无限制(不是方阵当然也可以,因为转置相乘就可以得到方阵了)
A:MN矩阵
U:MM矩阵,内部向量两两正交的,内部向量称为左奇异向量((1/σ)AV得到的向量)
Σ:M*N矩阵,对角线元素为奇异值(σ(∑的小写,西格玛):特征值求根的数值)构成,其余元素为0
V’:N * N的矩阵,V转置,内部向量两两正交,内部向量称为右奇异向量(上述奇异值做特征值对应的奇异向量)
注: 假设A为M*N(M>N) 1 A’A得小矩阵
2小矩阵的特征值开方构成奇异值,特征向量构成右奇异向量
3 AA‘’得大矩阵
3 Ax大矩阵得到与大矩阵同型矩阵,乘以1/σ得到左奇异向量
注1:奇异值个数为n,构成m行n列的∑对角矩阵,先依次填入求出的n个,其他位置填入0
注2:u和v的计算需要分别求两次,AA‘和A‘A。
注3:AA‘和A‘A特征值相同
(2)特征值分解
特征值分解:只能应用于方阵。
分解得到的Σ矩阵是一个对角阵,里面的特征值是由大到小排列的,这些特征值所对应的特征向量就是描述这个矩阵变化方向 (从主要的变化到次要的变化排列)
1当对角线元素非0,其余位置元素均为0的时候,对角线非1代表矩阵向某个方向(x,y,z。。。多维度)拉伸。 如:矩阵
A=
【2 0】
【0 1】
代表单位矩阵
【1 0】
【0 1】
延x方向拉伸2个单位长度2当除对角线元素外其他元素为非0的情况,拉伸方向由多因素确定 如:矩阵
A=
【1 1】
【0 1】
代表单位矩阵
【1 0】
【0 1】
延45°方向拉伸。单位长度1不变。
3、匹配追踪算法
(1)mp 匹配追踪
1从字典矩阵D(也称为过完备原子库中),选择一个与信号 y 最匹配的原子(也就是某列),构建一个稀疏逼近,并求出信号残差(迭代计算值与初始设定值之差)
2选择与信号残差最匹配的原子,反复迭代至前m个原子,
3信号y可以由这些原子的线性和,再加上最后的残差值来表示,如果残差值在可以忽略的范围内,则信号y就是这些原子的线性组合。
Φ={φk}表示原子归一化字典,y表示信号 1初始化信号残差 e0=y; 2遍历原子,使它与e0的内积绝对值最大。该原子表示成φ1; 3
e0-φ1在其空间上的正交投影得残差e1; e1=e0-<e0,φ1>φ1; 4迭代23步,至出现em为止。
一个向量在另一个单位法向量上的投影,也就是这两个向量的内积,再乘以该单位法向量,
注:
1字典已特征化
2 当数据出现信号(残值)在已选择的原子进行垂直投影是非正交时,迭代次数会增加。因为每次迭代没有出现新的原子来进行表示。(没想起来好例子,只能抽象思考)
(2)正交匹配追踪
残差是总与已经选择过的原子正交的。这意味着一个原子不会被选择两次,结果会在有限的几步收敛。
施密特正交
(1)用y表示你的信号,初始化残差e0=y;
(2)选择与e0内积绝对值最大的原子,表示为φ1;
(3)将选择的原子作为列组成矩阵Φt,定义Φt列空间的正交投影算子为
p=φ ((φ’φ)^-1 )φ’
通过从e0减去其在Φt所张成空间上的正交投影得到残差e1;
e1=e0-pe0 =
(4)对残差迭代执行(2)、(3)步;
三、KSVD
给定一组训练信号,我们在严格的稀疏性约束下寻找能够为该组中每个成员提供最佳表示的字典。对Kmean的推广迭代方法,它交替进行两个过程,又称字典设计方法:
1、在基于当前字典的示例的稀疏编码
2、更新字典原子以更好地拟合数据的过程。字典列的更新与稀疏表示的更新相结合,从而加速了收敛
利用奇异值分解( SVD) 来更新 dk 和 xkT ,SVD 可以找到距离 Ek 最近的且秩为 1 的矩阵。但是其中的 xkT
不一定稀疏,所以更新的 dk 不满足稀疏条件。也就是说用 SVD 得到的 xkT 更新向量中的非零值的位置和数量与原
xkT不同,会出现“发散”现象。
对E‘进行svd奇异值分解,E‘=U∑V’
取左奇异矩阵U的第1个列向量u1作为dk,取右奇异矩阵的第1个行向量与第1个奇异值的乘积作为x′Tk
3迭代至所有原子都更新完成,结束。
总结:K-means主要用途是想处理NP问题,计算过程为了减少np的复杂性,通过迭代,能以较快的速度得到一个不错的局部最优结果。字典设计问题上也存在计算量过大的问题,通过降维,使用K-SVD算法。
KSVD稀疏表示-字典学习 笔记相关推荐
- 2018 A Sparse Topic Model for Extracting Aspect-Specific Summaries from Online Reviews 稀疏主题模型学习笔记
论文来源 文章介绍 模型及推理 关于源码 论文来源 Rakesh V, Ding W, Ahuja A, et al. A Sparse Topic Model for Extracting Aspe ...
- 4.19列表和字典学习笔记及作业
列表相关操作 1.数学运算符:+, * 列表1 + 列表2 - 将两个列表合成产生一个新列表 print([10, 20, 30] + [100, 200])list1 = [10, 20, 30] ...
- 稀疏表示和字典学习的简单理解
稀疏表示和字典学习的简单理解 特征分类 稀疏表示 字典学习 特征分类 相关特征:对当前有用的属性 冗余特征:所包含的信息有时能从其他特征中推演出来.如若某个冗余特征恰好对应了学习任务所需"中 ...
- Pygame简单入门学习笔记
首先先放出我的第一个使用Pygame写的程序"菜虚鲲大战蔡徐坤". import random import pygame import sys import time pygam ...
- 字典学习/稀疏表示学习笔记
首先向大家安利一下南大周志华老师写的<机器学习>这本书,作为一个对此一窍不通的人看了都觉得很有意思,受益匪浅.语言平实却又干货十足,比某些故弄玄虚泛泛而谈的其它国内教材高到不知哪里去了. ...
- 『ML笔记』字典学习3(Dictionary Learning,KSVD)
文章目录 一.字典学习数学模型 1.1.数学描述 1.2.求解问题 1.3.字典学习算法实现 字典学习也是一种数据降维的方法,这里我用到SVD的知识,对SVD不太理解的地方,可以看看这篇博客: 奇异值 ...
- [转]字典学习/稀疏编码
本文转自https://zhuanlan.zhihu.com/p/26015351 机器学习--字典学习/稀疏编码学习笔记 Esquirrel 2 个月前 以下资料是小编学习字典学习/稀疏编码时,整理 ...
- 『ML笔记』深入浅出字典学习1(Dictionary Learning)
目录 一.预备知识 二.字典学习以及稀疏表示的概要 2.1.我们为什么需要字典学习? 2.2.我们为什么需要稀疏表示? 三.下一节 参考文献 一.预备知识 稀疏向量:假设向量中的元素绝大部分为零元素, ...
- K-SVD字典学习算法
1.提出问题:什么是稀疏表示 假设我们用一个MN的矩阵表示数据集Y,每一行代表一个样本,每一列代表样本的一个属性,一般而言,该矩阵是稠密的,即大多数元素不为0. 稀疏表示的含义是,寻找一个系数矩阵X( ...
- 稀疏编码(sparse code)与字典学习(dictionary learning)
Dictionary Learning Tools for Matlab. 1. 简介 字典 D∈RN×KD\in \mathbb R^{N\times K}(其中 K>NK>N),共有 ...
最新文章
- element upload预览_vue+element上传图片并显示预览图
- python中repeat函数用法
- 如何启用 express debug 模式
- groovy怎样从sql语句中截取表名_Mysql和SQL
- RTSP协议基本分析
- php用json_encode编码后乱码,php json_encode()函数中文编码乱码解决方法_PHP教程
- matlab读取xlsx文件,从电子表格读取数据
- 促销惊喜活动优惠海报设计,可临摹PSD分层格式
- matepad和鸿蒙,上手华为新 MatePad Pro :搭载鸿蒙系统后,生产力有何不同?
- vue+axios中的get请求传参,post请求头(form/json)不一样的传参的处理
- python menu实例_python GUI库图形界面开发之PyQt5菜单栏控件QMenuBar的详细使用方法与实例...
- Thymeleaf $/*/#/@语法
- lua循环,减少不必要的循环
- Nginx配置二级域名来实现多个站点
- easypoi中excel注解开关_easypoi: 入,Word模板导出,通过简单的注解和模板 语言(熟悉的表达式语法),完成以前复杂的写法...
- shell逻辑运算符优先级_linux shell 逻辑运算符、逻辑表达式详解
- 扩展频谱--直接序列扩频
- 大一计算机实验报告excle,excel实验报告总结
- MFC与stdafx
- PHP 1到100质数 (素数) 和