三、基础知识:字典学习(K-SVD)
3.1 字典学习的思想
学习是一种过程,我们在学习知识时,不需要学习所有前辈们学习过的东西,而仅仅需要学习他们总结下的精华,也即字典。这就可以把学习比作一个查字典的过程,而对字典,主要有三个要求:
① 字典要全面,包含所有关键的知识点
② 字典要精简,保证查字典的时候可以精准查到所需知识点,稳准狠。
③ 字典要准确,查到知识点后,能学习到知识点本来的几乎所有信息,可以还原。
3.2 字典学习数学模型
3.2.1 数学描述
首先对一些概念使用数学符号表示:
① “以前的知识”,更专业一点,我们称之为原始样本,用矩阵 Y 表示
② “字典”,我们称之为字典矩阵,用 D 表示,“字典”中的词条,我们称之为原子(atom),用列向量 表示
③ “查字典的方法”,我们称为稀疏矩阵,用 X 表示
④ “查字典的过程”,我们可以用矩阵的乘法来表示,即 DX
字典学习的主要思想是,利用包含 K 个原子 的字典矩阵 D ∈ ,稀疏线性表示原始样本 Y ∈ (其中 m 表示样本数,n 表示样本的属性),即有 Y = DX(这只是我们理想的情况),其中 X ∈ 为稀疏矩阵,可以将上述问题用数学语言描述为如下优化问题:
其中,X 为稀疏编码的矩阵,为该矩阵的行向量, 表示零阶范数,表示向量中不为0的数的个数,此处是为了限制 X 为一个系数矩阵。
3.2.2 求解
将优化函数的约束条件去掉,采用拉格朗日乘子法转化为无约束优化问题:
此处使用 替代 ,方便求解
双变量优化问题的求解一般是固定一个,优化另一个,如此交替反复进行,稀疏矩阵 X 的优化可以借助 Lasso 、OMP 等,此处重点介绍更新词典 D。
假设 X 已知,则可以对字典逐列进行更新。以第 k 列为例,记 为字典 D 的第 k 列向量, 为稀疏矩阵 X 的第 k 行向量,那么改写优化函数:
于是优化问题可描述为:
因此只需要求出最优的 和 即可,可用最小二乘法求解或SVD求解,此处用SVD求解。但是不能直接对 求解,这样新得到的 是不稀疏的(此处存疑),因此求解时需要将 中对应的 不为0的列拿出来,得到新的 ,提取过程如下:
假设需要更新第0列原子,需要将 中为0的位置找出,并将 的对应位置列删除,构成 ,优化问题变为:
因此需要找出最优的 和
取左奇异矩阵 的第一个列向量 作为 ,即 ;取右奇异矩阵 的第一个行向量与第一个奇异值的乘积作为 ,即 ,计算出 后,将其还原为 。