『ML笔记』字典学习3(Dictionary Learning,KSVD)

article/2025/10/14 15:14:58

文章目录

    • 一、字典学习数学模型
        • 1.1、数学描述
        • 1.2、求解问题
        • 1.3、字典学习算法实现

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

一、字典学习数学模型

字典学习的思想应该源来实际生活中的字典的概念。字典是前辈们学习总结的精华,当我们需要学习新的知识的时候,不必与先辈们一样去学习先辈们所有学习过的知识,我们可以参考先辈们给我们总结的字典,通过查阅这些字典,我们可以大致学会到这些知识。为了将上述过程用准确的数学语言描述出来,我们需要将“总结字典”、“查阅字典”做出一个更为准确的描述。就从我们的常识出发:

  • 1.我们通常会要求的我们的字典尽可能全面,也就是说总结出的字典不能漏下关键的知识点。
  • 2.查字典的时候,我们想要我们查字典的过程尽可能简洁,迅速,准确。即,查字典要快、准、狠。
  • 3.查到的结果,要尽可能地还原出原来知识。当然,如果要完全还原出来,那么这个字典和查字典的方法会变得非常复杂,所以我们只需要尽可能地还原出原知识点即可。

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

1.1、数学描述

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

  • “以前的知识”,更专业一点,我们称之为原始样本,用矩阵 Y \mathbf{Y} Y表示;
  • “字典”,我们称之为字典矩阵,用 D \mathbf{D} D表示,“字典”中的词条,我们称之为原子(atom),用列向量 d k \mathbf{d_{k}} dk 表示;
  • “查字典的方法”,我们称为稀疏矩阵,用 X \mathbf{X} X
  • “查字典的过程”,我们可以用矩阵的乘法来表示,即 D X \mathbf{DX} DX
  • 用数学语言描述,字典学习的主要思想是,利用包含 K K K 个原子 d k \mathbf{d_{k}} dk的字典矩阵 D ∈ R m × K \mathbf{D} \in \mathbf{R}^{m \times K} DRm×K,稀疏线性表示原始样本 Y ∈ R m × n \mathbf{Y} \in \mathbf{R}^{m \times n} YRm×n其中 n n n 表示样本数, m m m 表示样本的属性),即有 Y = D X \mathbf{Y=DX} Y=DX(这只是我们理想的情况),其中 X ∈ R K × n \mathbf{X} \in \mathbf{R}^{K \times n} XRK×n为稀疏矩阵,可以将上述问题用数学语言描述为如下优化问题:
    min ⁡ D , X ∥ Y − D X ∥ F 2 , s.t.  ∀ i , ∥ x i ∥ 0 ≤ T 0 (1-1) \min_{\mathbf{D,\ X}}{\|\mathbf{Y}-\mathbf{DX}\|^2_F},\quad \text{s.t.}\ \forall i,\ \|\mathbf{x}_i\|_0 \le T_0 \tag{1-1} D, XminYDXF2,s.t. i, xi0T0(1-1)
  • 或者
    min ⁡ D , X ∑ i ∥ x i ∥ 0 , s.t.  min ⁡ D , X ∥ Y − D X ∥ F 2 ≤ ϵ , (1-2) \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{1-2} D, Xminixi0,s.t. D, XminYDXF2ϵ,(1-2)
  • 上式中 X \mathbf{X} X 为稀疏编码的矩阵, x i ( i = 1 , 2 , ⋯ , K ) \mathbf{x}_i\,\ (i=1,2,\cdots,K) xi (i=1,2,,K),为该矩阵中的行向量,代表字典矩阵的系数。
  • 注意 ∥ x i ∥ 0 ∥\mathbf{x_{i}}∥_{0} xi0表示零阶范数,它表示向量中不为0的数的个数。即是想让其尽可能的稀疏,非0的元素尽可能的少。

1.2、求解问题

  • 式(1-1)的目标函数表示,我们要最小化查完的字典与原始样本的误差,即要尽可能还原出原始样本;它的限的制条件 ∥ x i ∥ 0 ≤ T 0 \|\mathbf{x}_i\|_0 \le T_0 xi0T0,,表示查字典的方式要尽可能简单,即 X X X要尽可能稀疏。式(1-2)同理。式(1-1)或式(1-2)是一个带有约束的优化问题,可以利用拉格朗日乘子法将其转化为无约束优化问题
    min ⁡ D , X ∥ Y − D X ∥ F 2 + λ ∥ x i ∥ 1 (1-3) \min_{\mathbf{D,\ X}}{\|\mathbf{Y}-\mathbf{DX}\|^2_F}+\lambda\|\mathbf{x}_i\|_1 \tag{1-3} D, XminYDXF2+λxi1(1-3)
  • 注意 ∥ x i ∥ 0 ∥\mathbf{x_{i}}∥_{0} xi0表示零阶范数 我们将 ∥ x i ∥ 0 ∥\mathbf{x_{i}}∥_{0} xi0 ∥ x i ∥ 1 ∥\mathbf{x_{i}}∥_{1} xi1代替,主要是 ∥ x i ∥ 1 ∥\mathbf{x_{i}}∥_{1} xi1更加便于求解。
  • 这里有两个优化变量 D , X \mathbf{D,\ X} D, X,为解决这个优化问题,一般是固定其中一个优化变量,优化另一个变量,如此交替进行。式(1-3)中的稀疏矩阵 X \mathbf{X} X可以利用已有经典算法求解,如Lasso(Least Absolute Shrinkage and Selection Operator)、OMP(Orthogonal Matching Pursuit),这里我重点讲述如何更新字典 D \mathbf{D} D,对更新 X \mathbf{ X} X不多做讨论。
  • 假设 X \mathbf{ X} X是已知的,我们逐列更新字典。下面我们仅更新字典的第 k k k列,记 d k \mathbf{d_{k}} dk 为字典 D \mathbf{D} D的第 k k k列向量,记 x T k \mathbf{x}^k_T xTk 为稀疏矩阵 X \mathbf{X} X的第 k k k 行向量,那么对式(1-1),我们有:
    ∥ Y − D X ∥ F 2 = ∥ Y − ∑ j = 1 K d j x T j ∥ F 2 = ∥ ( Y − ∑ j ≠ k d j x T j ) − d k x T k ∥ F 2 = ∥ E k − d k x T k ∥ F 2 (1-4) \begin{aligned} {\|\mathbf{Y}-\mathbf{DX}\|^2_F} =&\left\|\mathbf{Y}-\sum^K_{j=1}\mathbf{d}_j\mathbf{x}^j_T\right\|^2_F \\ =&\left\|\left(\mathbf{Y}-\sum_{j\ne k}\mathbf{d}_j\mathbf{x}^j_T\right)-\mathbf{d}_k\mathbf{x}^k_T\right\|^2_F\\ =&\left\|\mathbf{E}_k - \mathbf{d}_k\mathbf{x}_T^k \right\|^2_F \end{aligned} \tag{1-4} YDXF2===Yj=1KdjxTjF2Yj=kdjxTjdkxTkF2EkdkxTkF2(1-4)
  • 上式中残差: E k = Y − ∑ j ≠ k d j x T j (1-5) \mathbf{E}_k=\mathbf{Y}-\sum_{j\ne k}\mathbf{d}_j\mathbf{x}^j_T\tag{1-5} Ek=Yj=kdjxTj(1-5)
  • 此时优化问题可描述为: min ⁡ d k , x T k ∥ E k − d k x T k ∥ F 2 (1-6) \min_{\mathbf{d}_k,\ \mathbf{x}^k_T}\left\|\mathbf{E}_k - \mathbf{d}_k\mathbf{x}_T^k \right\|^2_F\tag{1-6} dk, xTkminEkdkxTkF2(1-6)
  • 因此我们需要求出最优的 d k , x T k \mathbf{d}_k,\ \mathbf{x}_T^k dk, xTk,这是一个最小二乘问题,可以利用最小二乘的方法求解,或者可以利用SVD进行求解,这里利用SVD的方式求解出两个优化变量
  • 但是,在这里我人需要注意的是,不能直接利用 E k \mathbf{E}_k Ek 进行求解,否则求得的新的 x T k \mathbf{x}^k_T xTk 不稀疏。因此我们需要将 E k \mathbf{E}_k Ek中对应的 x T k \mathbf{x}^k_T xTk不为0的位置提取出来,得到新的 E k ′ \mathbf{E}_k^{'} Ek,这个过程如图2-1所示,这样描述更加清晰。
    在这里插入图片描述
  • 如上图,假设我们要更新第0列原子,我们将 x T k \mathbf{x}_T^k xTk中为零的位置找出来,然后把 E k \mathbf{E}_k Ek对应的位置删除,得到 E k ′ \mathbf{E}_k^{'} Ek,此时优化问题可描述为:
    min ⁡ d k , x T k ∥ E k ′ − d k x ′ T k ∥ F 2 (1-7) \min_{\mathbf{d}_k,\ \mathbf{x}^k_T}\left\|\mathbf{E}_k^{'} - \mathbf{d}_k\mathbf{x{'}}_T^{k} \right\|^2_F \tag{1-7} dk, xTkminEkdkxTkF2(1-7)
  • 因此我们需要求出最优的 d k , x ′ T k \mathbf{d}_k,\ \mathbf{x^{'}}_T^k dk, xTk:
    E k ′ = U Σ V T (1-8) \mathbf{E}_k^{'}=\mathbf U\mathbf \Sigma \mathbf V^T \tag{1-8} Ek=UΣVT(1-8)
  • 取左奇异矩阵 U \mathbf U U 的第1个列向量 u 1 = U ( ⋅ , 1 ) \mathbf{u}_1=U(\cdot,1) u1=U(,1)作为 d k = u 1 \mathbf{d}_k=\mathbf{u}_1 dk=u1,即 d k \mathbf{d}_k dk,取右奇异矩阵的第1个行向量与第1个奇异值的乘积作为 x ′ T k \mathbf{x{'}}_T^k xTk,即 x ′ T k = Σ ( 1 , 1 ) V T ( 1 , ⋅ ) \mathbf{x{'}}^k_T=\mathbf \Sigma(1,1)\mathbf V^T(1,\cdot) xTk=Σ(1,1)VT(1,)。得到 x ′ T k \mathbf{x{'}}^k_T xTk后,将其对应地更新到原 x T k \mathbf{x}_T^k xTk
  • 注意:式(1-8)所求得的奇异值矩阵 Σ \bf Σ Σ 中的奇异值应从大到小排列;同样也有 x ′ T k = Σ ( 1 , 1 ) V ( ⋅ , 1 ) T \mathbf{x{'}}^k_T=\mathbf \Sigma(1,1)\mathbf V(\cdot,1)^T xTk=Σ(1,1)V(,1)T,这与上面x′kT的求法是相等的。

1.3、字典学习算法实现

利用1.2小节稀疏算法求解得到稀疏矩阵 X \mathbf{X} X后,逐列更新字典,有如下算法1.1。

算法字典学习(K-SVD)
输入原始样本,字典,稀疏矩阵
输出字典,稀疏矩阵
1 初始化从原始样本 Y ∈ R m × n Y \in \mathbf{R}^{m \times n} YRm×n随机取 K K K个列向量或者取它的左奇异矩阵的前 K K K个列向量
{ d 1 , d 2 , ⋯ , d K } \{\mathbf{d}_1,\mathbf{d}_2,\cdots,\mathbf{d}_K\} {d1,d2,,dK}作为初始字典的原子,得到字典 D ( 0 ) ∈ R m × K \mathbf{D}^{(0)} \in \mathbf{R}^{m \times K} D(0)Rm×K。令 j = 0 j=0 j=0
重复下面步骤1-3,直到达到指定的迭代步数,或收敛到指定的误差:
2 稀疏编码利用字典上一步得到的字典 D ( j ) \mathbf{D}^{(j)} D(j),稀疏编码,得到 X ( j ) ∈ R K × n \mathbf{X}^{(j)}\in\mathbf{R}^{K \times n} X(j)RK×n
3 字典更新逐列更新字典 D ( j ) \mathbf{D}^{(j)} D(j),字典的列 d k ∈ { d 1 , d 2 , ⋯ , d K } \mathbf{d}_k \in \{\mathbf{d}_1,\mathbf{d}_2,\cdots,\mathbf{d}_K\} dk{d1,d2,,dK}
3.1当更新 d k \mathbf{d}_k dk时,计算误差矩阵 E k \mathbf{E}_k Ek: E k = Y − ∑ j ≠ k d j x T j . \mathbf{E}_k=\mathbf{Y}-\sum_{j\ne k}\mathbf{d}_j\mathbf{x}^j_T. Ek=Yj=kdjxTj.
3.2取出稀疏矩阵第 k k k个行向量 x T k \mathbf{x}^k_T xTk不为0的索引的集合 ω k = { i 1 ≤ i ≤ n , x T k ( i ) ≠ 0 } \omega_{k}=\left\{i 1 \leq i \leq n, \mathbf{x}_{T}^{k}(i) \neq 0\right\} ωk={i1in,xTk(i)=0}
还有以下的这个: x ′ T k = { x T k ( i ) 1 ≤ i ≤ n , x T k ( i ) ≠ 0 } \mathbf{x'}_T^{k} = \{\mathbf{x}_T^k(i)1\le i\le n,\ \mathbf{x}_T^k(i) \ne 0\} xTk={xTk(i)1in, xTk(i)=0}
3.3 E k \mathbf{E}_k Ek取出对应 ω k \omega_k ωk不为0的列,得到 E k ′ \mathbf{E}_k^{'} Ek,
3.4 E k ′ \mathbf{E}_k^{'} Ek作奇异值分解 E k = U Σ V T ; \mathbf{E}_k=\mathbf U\mathbf \Sigma \mathbf V^T; Ek=UΣVT; U U U的第1列更新字典的第 k k k列,即
d k = U ( ⋅ , 1 ) \mathbf{d}_k=\mathbf U(\cdot,1) dk=U(,1), 令: x ′ T k = Σ ( 1 , 1 ) V ( ⋅ , 1 ) T \mathbf{x'}^k_T=\mathbf \Sigma(1,1)\mathbf V(\cdot,1)^T xTk=Σ(1,1)V(,1)T;得到 x ′ T k \mathbf{x'}^k_T xTk后,将其对应地更新到原 x T k \mathbf{x}_T^k xTk
3.5 j = j + 1 j=j+1 j=j+1

最后感谢作者:

  • https://www.cnblogs.com/endlesscoding/p/10090866.html

http://chatgpt.dhexx.cn/article/rWZgHQcg.shtml

相关文章

字典学习日记

字典的创建 在定义字典时,每个元素都包含了两部分:键(key)和值(value),并且在“键”和“值”之间使用英文冒号分隔,相邻两个元素使用英文逗号分离,所有的元素都放…

Dictionary Learning(字典学习、稀疏表示以及其他)

第一部分 字典学习以及稀疏表示的概要 字典学习(Dictionary Learning)和稀疏表示(Sparse Representation)在学术界的正式称谓应该是 稀疏字典学习(Sparse Dictionary Learning)。该算法理论包含两个阶段&am…

字典的学习笔记

列表 [] 单身什么是字典 {} 二人世界 python内置的数据结构之一,与列表一样是一个可变序列(可以增删改操作的) 以键值对的方式存储数据,字典是一个无序的序列 -> hash(key) 通过哈希函数来计算存储位置,key一定是不可变的字典的创建 使用花…

python学习之字典

目录 一、字典格式 二、操作 1、添加元素 2、修改value值 3、删除 4、遍历和查询 5、合并字典 三、小结 一、字典格式 特点:是以键值对的形式存储 结构:{键1:值,键2:值,键3:值} 字典…

『ML笔记』深入浅出字典学习1(Dictionary Learning)

目录 一、预备知识 二、字典学习以及稀疏表示的概要 2.1、我们为什么需要字典学习? 2.2、我们为什么需要稀疏表示? 三、下一节 参考文献 一、预备知识 稀疏向量:假设向量中的元素绝大部分为零元素,则称该向量是稀疏的。 …

机器学习(十三)k-svd字典学习

k-svd字典学习 原文地址:http://blog.csdn.net/hjimce/article/details/50810129 作者:hjimce 一、字典学习 字典学习也可简单称之为稀疏编码,字典学习偏向于学习字典D。从矩阵分解角度,看字典学习过程:给定样本数据集Y&…

字典学习(KSVD)详解

关于字典学习 对于一个事物,我们如何表征它呢?很明显,这个事物是有特征的,或者说,这个事物它是由许多个不同的特征经过一定的组合而形成的。字典学习的目标是提取实物的最本质特征。用字典来表征该事物的特征。&#…

语音增强———字典学习介绍

语音增强--------------字典学习 字典学习就是用较少的特征(原子)来表示信号,那么信号的多个特征组合就相当于多个原子组成的字典,那么信号就可以用字典中少量的原子进行表示。信号在字典下的表示系数越系数,那么重构…

字典学习(Dictionary Learning)

字典学习——Dictionary Learning 我主要从一下几个方面分享一下。 什么是字典学习字典学习的理论依据及公式字典学习的应用 1、什么是字典学习? 在人类发展的近几千年历史中,文字对人类文明的推动起着举足轻重的作用。人类用文字记述了千年的历史&a…

为什么我们需要机器学习,机器学习主要应用在哪几方面?

一、为什么需要机器学习? 有些任务直接编码较为复杂,我们不能处理所有的细微之处和简单编码,因此,机器学习很有必要。相反,我们向机器学习算法提供大量数据,让算法不断探索数据并构建模型来解决问题。比如…

什么是机器学习,目前机器学习的应用有哪些?

机器学习 机器学习就是让机器具备人一样学习的能力,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是人工智能的核心。 机器学习已经有了十分广泛的应用&a…

【机器学习】浅析机器学习各大算法的适用场景

最近在参加一个分类算法竞赛,也正好整理各个分类机器学习算法的简单介绍,应用场景和优缺点。资源来自网上和自己个人理解。 一、逻辑回归模型 1、理解逻辑回归模型(LR) 逻辑回归是一种分类算法,其原理是将线性回归预测…

什么是机器学习?有哪些应用?终于有人讲明白了

作者:星环科技人工智能平台团队 来源:大数据DT(ID:hzdashuju) 导读:人工智能的快速发展,带动了相关技术的繁荣。近些年,国内外的科技公司对机器学习人才都有大量需求。怎样入行机器学…

各种机器学习的应用场景分别是什么?

[转] https://www.leiphone.com/news/201712/RqsxWpjPOPFy6Qm4.html 关于这个问题我今天正好看到了这个文章,讲的正是各个算法的优劣分析,很中肯。 正好14年的时候有人做过一个实验[1],比较在不同数据集上(121个)&…

【机器学习】机器学习在社会科学中的应用

机器学习在社会科学中的应用 在科学研究中,从方法论上来讲,都应先见森林,再见树木。当前,人工智能科技迅猛发展,万木争荣,更应系统梳理脉络。为此,我们特别精选国内外优秀的综述论文&#xff0c…

机器学习应用

监督学习和非监督学习 监督学习: 有标签的,回归和分类,场景:用户流失预测 非监督学习:无标签,聚类和降维,场景:用户细分 数据不平衡 类别不平衡。数据在某些维度上多,…

【机器学习】为什么机器学习难于应用

摘要: 本文主要讲述了如何管理机器学习应用方面的棘手问题 应用机器学习是有挑战性的。 在机器学习领域,你必须要在没有正确答案的问题上做出很多决定!例如: 用什么框架? 用什么数据作为输入,要输出什么数…

机器学习在社会科学中的应用

本文把目前机器学习技术在社会科学研究中的应用分成三类:第一,数据生成(Data Generating Process):机器学习可以帮助学者获得以前很难或无法获得的数据;第二,预测(Prediction&#x…

【Machine Learning】20.应用机器学习的一些建议

20.应用机器学习的一些建议 1.导入包2. 评估学习算法(以线性回归为例)2.1 分离数据集可视化数据集 2.2 误差计算2.3 比较模型在训练集和测试集上的表现 3.Bias and Variance3.1 可视化数据集3.2 找到optimal degree最佳次数3.3 Tuning Regularization调整…

机器学习之应用举例

#Photo OCR Photo Optical Character Recognition(照片光学字符识别),注重的问题是如何让计算机读出图片中的文字信息。 1、给定某种图片,它将图像扫描一遍,然后找出照片中的文字信息; 2、重点关注这些文…