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算法。