字典学习(KSVD)详解

注: 字典学习也是一种数据降维的方法,这里我用到SVD的知识,对SVD不太理解的地方,可以看看这篇博客:《SVD(奇异值分解)小结 》。

1、字典学习思想

字典学习的思想应该源来实际生活中的字典的概念。字典是前辈们学习总结的精华,当我们需要学习新的知识的时候,不必与先辈们一样去学习先辈们所有学习过的知识,我们可以参考先辈们给我们总结的字典,通过查阅这些字典,我们可以大致学会到这些知识。

为了将上述过程用准确的数学语言描述出来,我们需要将“总结字典”、“查阅字典”做出一个更为准确的描述。就从我们的常识出发:

我们通常会要求的我们的字典尽可能全面,也就是说总结出的字典不能漏下关键的知识点。

查字典的时候,我们想要我们查字典的过程尽可能简洁,迅速,准确。即,查字典要快、准、狠。

查到的结果,要尽可能地还原出原来知识。当然,如果要完全还原出来,那么这个字典和查字典的方法会变得非常复杂,所以我们只需要尽可能地还原出原知识点即可。

注: 以上内容,完全是自己的理解,如有不当之处,欢迎各位拍砖。

下面,我们要讨论的就是如何将上述问题抽象成一个数学问题,并解决这个问题。

2、字典学习数学模型 2.1 数学描述

我们将上面的所提到的关键点用几个数学符号表示一下:

“以前的知识”,更专业一点,我们称之为原始样本,用矩阵\(\mathbf{Y}\)表示;

“字典”,我们称之为字典矩阵,用\(\mathbf{D}\)表示,“字典”中的词条,我们称之为原子(atom),用列向量\(\mathbf{d}_k\)表示;

“查字典的方法”,我们称为稀疏矩阵,用\(\mathbf{X}\)

“查字典的过程”,我们可以用矩阵的乘法来表示,即\(\mathbf{DX}\)

用数学语言描述,字典学习的主要思想是,利用包含\(K\)个原子\(\mathbf{d}_k\)的字典矩阵\(\mathbf{D}\in \mathbf{R}^{m \times K}\),稀疏线性表示原始样本\(\mathbf{Y} \in \mathbf{R}^{m \times n}\)(其中\(m\)表示样本数,\(n\)表示样本的属性),即有\(\mathbf{Y=DX}\)(这只是我们理想的情况),其中\(\mathbf{X} \in \mathbf{R}^{K \times n}\)稀疏矩阵,可以将上述问题用数学语言描述为如下优化问题

\[ \min_{\mathbf{D,\ X}}{\|\mathbf{Y}-\mathbf{DX}\|^2_F},\quad \text{s.t.}\ \forall i,\ \|\mathbf{x}_i\|_0 \le T_0 \tag{2-1} \]

或者

\[ \min_{\mathbf{D,\ X}}\sum_i\|\mathbf{x}_i\|_0, \quad \text{s.t.}\ \min_{\mathbf{D,\ X}}{\|\mathbf{Y}-\mathbf{DX}\|^2_F} \le \epsilon, \tag{2-2} \]

上式中\(\mathbf{X}\)为稀疏编码的矩阵,\(\mathbf{x}_i\,\ (i=1,2,\cdots,K)\)为该矩阵中的行向量,代表字典矩阵的系数。

注: \(\|\mathbf{x}_i\|_0\)表示零阶范数,它表示向量中不为0的数的个数。

2.2 求解问题

式(2-1)的目标函数表示,我们要最小化查完的字典与原始样本的误差,即要尽可能还原出原始样本;它的限的制条件\(\|\mathbf{x}_i\|_0 \le T_0\),表示查字典的方式要尽可能简单,即\(\mathbf{X}\)要尽可能稀疏。式(2-2)同理。

式(2-1)或式(2-2)是一个带有约束的优化问题,可以利用拉格朗日乘子法将其转化为无约束优化问题

\[ \min_{\mathbf{D,\ X}}{\|\mathbf{Y}-\mathbf{DX}\|^2_F}+\lambda\|\mathbf{x}_i\|_1 \tag{2-3} \]

注: 我们将\(\|\mathbf{x}_i\|_0\)\(\|\mathbf{x}_i\|_1\)代替,主要是\(\|\mathbf{x}_i\|_1\)更加便于求解。

这里有两个优化变量\(\mathbf{D,\ X}\),为解决这个优化问题,一般是固定其中一个优化变量,优化另一个变量,如此交替进行。式(2-3)中的稀疏矩阵\(\mathbf{X}\)可以利用已有经典算法求解,如Lasso(Least Absolute Shrinkage and Selection Operator)、OMP(Orthogonal Matching Pursuit),这里我重点讲述如何更新字典\(\mathbf{D}\),对更新\(\mathbf{X}\)不多做讨论。

假设\(\mathbf{X}\)是已知的,我们逐列更新字典。下面我们仅更新字典的第\(k\)列,记\(\mathbf{d}_k\)为字典\(\mathbf{D}\)的第\(k\)列向量,记\(\mathbf{x}^k_T\)为稀疏矩阵\(\mathbf{X}\)的第\(k\)行向量,那么对式(2-1),我们有

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpjwdz.html