今天学习了一下稀疏编码,自己做点笔记,SRC算法就是利用训练样本数据和测试样本数据之间的关系找到一个稀疏矩阵,本质就是寻找这样一个矩阵,即一个稀疏的、超完备基向量集,来覆盖我们的输入数据空间。
若Xi表示第i类的训练样本,大小为d*li,d为特征维数,li为样本数量。将所有类别(K类)的训练样本组合成一个矩阵为D=[X1 ... Xi ... XK],大小为d*l。对于任意一个测试样本,可以表示成如下的线性方式:
y = Da (1)
根据线性代数的知识,已知D和y,系数a可以方便的求解出来。但是,一般情况下,l 远大于d。因此,公式(1)没有唯一的解。为了得到唯一的解,需要添加一个约束条件,即系数a 尽可能的稀疏。因此公式(1)演变为如下的最优问题
y = Da
s.t. min ||a|| 1
(2)
上述的问题等同于如下问题:
min ||a|| 1 s.t.y = Da (3)
该问题属于一种线性约束的最优化问题。
求解得到合适的最优系数a*后,利用残差来确定相应的类别,方法如下:
y* = arg mini ei(y), ei(y) = ||y - Xiai*||2 (4)
通过公式(4)求解对应的类别。
以下主要是根据SRC的部分改进,其中之一是利用每一类样本单独进行训练得到字典,我看的文章主要是针对测试样本不能用训练样本稀疏表示,采用的是先对测试样本进行效正,在利用效正后的测试样本进行稀疏表示求解。
算法模型如式(5): τ=argmin‖x‖1+‖e‖1subj
T(y,τ)=Ax+e(5)
其中,y是原始图像,τ是仿射变换参数,T(·)是仿射变换算子。T(y,τ)表示测试样本y
经过仿射变换与训练样本对齐后的图像。
为了避免陷入局部最小值, 本算法将每一类用户的训练图像单独用作训练字典,算法模型变为式(6):
τ=argmin‖e‖1subj
T(y,τ)=Aix+e,i=1,2…k(6)其中k
表示训练图像中的种类。
假设测试样本与训练样本只存在微小的平移偏差,
则可以通过一阶泰勒展开式来近似校正后的测试图像:
T(y,τ)≈y+Δx·Yx +Δy·Yy(7)其中 ,Yx是图像 y 水 平 方 向 的 一 阶 导 数 ,Yy表示图像 y竖直方向的一阶导数。
再将每次得到的相对偏移量累加,最终得到原始的测试样本相对于同类训练样本偏移量。
τ=argmin‖e‖1 subj y+Δx·Yx+Δy·Yy=Ai x+e (8)
等价τ=argmin‖e‖1subj
y=Aix-Δx·Yx-Δy·Yy+e=Bw(9)
(中间计算和推理有省略)
Idetify(y)=arg min‖ei‖2(i=1,2…k) (11)
第三在求解的时候最后采用的是L1和L2范数的混合使用,可以考虑不同范数,比如Lp范数等等。
文章上面的内容是别人滴进行的个人总结,文章最后提出了自己的改进想法和观点