字典学习——Dictionary Learning
我主要从一下几个方面分享一下。
- 什么是字典学习
- 字典学习的理论依据及公式
- 字典学习的应用
1、什么是字典学习?
在人类发展的近几千年历史中,文字对人类文明的推动起着举足轻重的作用。人类用文字记述了千年的历史,用文字留下了各种思想火花,用文字抒发了各种各样的情感等等。但是这一切的内容,只需要一本字典就能表述完。因为人在这环节中的功能,无非就是使用字典当中的字词进行了适当的排列了而已。
基于这种思想,先前的大佬提出了字典学习——Dictionary Learning。
字典学习的目标,就是提取事物最本质的特征(类似于字典当中的字或词语)。如果我们能都获取这本包括最本质的特征的字典,那我们就掌握了这个事物的最本质的内涵。换言之,字典学习将我们的到的对于物体的信息降维,减少了该物体一些无关紧要信息对我们定义这个物体的干扰。
2、字典学习的理论依据及公式
- 稀疏模型
稀疏模型的作用如下:
稀疏模型将大量的冗余变量去除,只保留与响应变量最相关的解释变量,简化了模型的同时却保留了数据集中最重要的信息,有效地解决了高维数据集建模中的诸多问题——百度百科
可以发现,稀疏模型所能达到的效果与我们字典学习的目标一致。都是要将冗余的无关紧要的信息除去,将最重要的、本质的信息得以保留。也正因如此,所以“字典”的衡量标准也就产生了。字典创建的好不好,就要看它这个模型够不够稀疏。
ps:稀不稀疏,就是说你提取的特征是不是够关键,是不是够本质。
- 公式
x:输入的图像(维度为 )
D:字典模型(维度为)
α:疏松矩阵(维度为K)
我们的目的就是:
:各分向量平方之后开方。
- 模型建立
我们可以将求D的问题看成一个优化问题,第一项是确保D和 能够很好地重构 (失真少),第二项是确保尽量稀疏(字典构建耦合性小,类似于在字典中我们解释一个字或词语尽可能的少用其他的词语)。
- 初始化
从样本集X中随机挑选n个样本,作为D的初始值;并且初始化α为0。
- 求解xi
为了简单起见,我们抽出一个样本进行讨论,假定样本为x向量,稀疏代码为α向量。现在x和D算是已知的,求解α,同时满足α尽量的稀疏,也就是非零元素尽量的少。假设D为[d1,d2,d3,d4,d5],其中有5个原子。首先求出离x距离最近的原子,假设是d3。那么我们就可以求出一个初步的α为[0,0,c3,0,0],c3是一个未知系数,代表原子的权重。假定x=c3*d3。可求得c3的值。接着我们用求出的c3求残差向量x'=x-c3*d3(此处),x'是一个预设的阈值向量,当x'小于阈值的话,则停止计算,如果不小于的话,转到下一步。 计算剩余的原子d1,d2,d4,d5中与残差向量x'距离最近的,假设是d1,那么更新α为[c1,0,c3,0,0],假设x=c1*d1+c3*d3,求解出c1,然后更新残差向量x'=x-c1*d1-c3*d3(此处)。判断是否小于阈值,如果不满足,再继续求下一个最近的原子的系数。求解原子系数的数量也可以指定为一个常量,例如3,那就代表迭代3次。
- 更新字典
通过上一个步骤可以求出所有的 ,接着就可以更新字典D了。
保持α不变,使用相同步骤更新D。再保持D不变,使用相同步骤更新α。