机器学习强基计划9-1:图解匹配追踪(MP)与正交匹配追踪(OMP)算法

news2024/11/25 14:37:42

目录

  • 0 写在前面
  • 1 字典学习
  • 2 稀疏表示与稀疏编码
  • 3 匹配追踪MP算法
  • 4 正交匹配追踪OMP算法

0 写在前面

机器学习强基计划聚焦深度和广度,加深对机器学习模型的理解与应用。“深”在详细推导算法模型背后的数学原理;“广”在分析多个机器学习模型:决策树、支持向量机、贝叶斯与马尔科夫决策、强化学习等。强基计划实现从理论到实践的全面覆盖,由本人亲自从底层编写、测试与文章配套的各个经典算法,不依赖于现有库,可以大大加深对算法的理解。

🚀详情:机器学习强基计划(附几十种经典模型源码)


1 字典学习

人类社会一切已发现或未发现的知识都必须通过字、词、句进行表示,而整体的知识量非常庞大——人类每天产生的新知识约2T;换言之,无论人类的知识多么浩瀚,一本新华字典或牛津字典也足以表达人类从古至今乃至未来的所有知识——字典中字、词、句的排列组合。所以字典相当于庞大数据集的一种降维表示,且蕴藏样本背后最本质的特征。现代神经科学表明,哺乳动物大脑的初级视觉皮层主要工作就是进行图像的字典表示。

考虑样本矩阵的一种分解

X = D A \boldsymbol{X}=\boldsymbol{DA} X=DA

其中 X = [ x 1 x 2 ⋯ x m ] ∈ R d × m \boldsymbol{X}=\left[ \begin{matrix} \boldsymbol{x}_1& \boldsymbol{x}_2& \cdots& \boldsymbol{x}_m\\\end{matrix} \right] \in \mathbb{R} ^{d\times m} X=[x1x2xm]Rd×m是样本矩阵; A = [ α 1 α 2 ⋯ α m ] ∈ R k × m \boldsymbol{A}=\left[ \begin{matrix} \boldsymbol{\alpha }_1& \boldsymbol{\alpha }_2& \cdots& \boldsymbol{\alpha }_m\\\end{matrix} \right] \in \mathbb{R} ^{k\times m} A=[α1α2αm]Rk×m是样本 X \boldsymbol{X} X的编码矩阵,其中 α i \boldsymbol{\alpha }_i αi x i \boldsymbol{x}_i xi的编码; D = [ d 1 d 2 ⋯ d k ] ∈ R d × k \boldsymbol{D}=\left[ \begin{matrix} \boldsymbol{d}_1& \boldsymbol{d}_2& \cdots& \boldsymbol{d}_k\\\end{matrix} \right] \in \mathbb{R} ^{d\times k} D=[d1d2dk]Rd×k称为字典(dictionary) d i \boldsymbol{d}_i di称为字典的一个原子(atom),通常经过归一化处理, k k k称为字典的词汇量,可由用户指定。设样本相当于字典而言相当庞大,即 m ≫ k m\gg k mk

在这里插入图片描述

考察样本的编码形式:

  • k < d k<d k<d,则 D \boldsymbol{D} D称为欠完备字典,相当于特征选择或线性降维技术;
  • k > d k>d k>d,则 D \boldsymbol{D} D称为过完备字典,编码维度增大似乎违背了避免维数灾难的原则,但此时约束 α i \boldsymbol{\alpha }_i αi x i \boldsymbol{x}_i xi稀疏表示(sparse representation)——含有大量零元素。

2 稀疏表示与稀疏编码

类比真实的《现代汉语字典》,其中约有3500个常用字,而一篇文档可能只使用了其中15%的字,若将每个文档看作一个样本,每个字作为一个特征,字在文档中出现的频率作为特征取值,那么一篇文档的特征向量约有85%的零元素。但不同主题的文档使用的主要词汇可能相差很大(比如古风诗词和科幻小说),导致稀疏分布不同

因此稀疏表示不会掩盖真实特征,相反,甚至可能使困难的学习问题变得线性可分,而且得益于计算机科学对稀疏矩阵的研究,稀疏化使机器学习在计算和存储方面更高效

那这里稠密和稀疏的概念与维数灾难有什么关系呢?

机器学习任务中通常面临高维特征空间,若特征维数为40,则要实现密采样就需要 1 0 80 10^{80} 1080个样本——相当于宇宙中基本粒子的总数。所以密采样在高维特征空间中无法实现,换言之,高维特征样本分布非常稀疏,给机器学习训练、算法采样优化带来了困难。这种高维情形下机器学习任务产生严重障碍现象称为维数灾难(curse of dimensionality),维数灾难还会以指数级的规模造成计算复杂度上升、存储占用大等问题,具体可见机器学习强基计划8-1:图解主成分分析PCA算法(附Python实现)

在这里插入图片描述

所以本节研究的对象是特征的稠密与稀疏,而维数灾难里讨论的是特征空间中样本的稠密与稀疏

稀疏编码(sparse coding)研究给定字典时如何用尽量稀疏的表示还原样本,形式化为

α i ∗ = a r g min ⁡ α i ∥ x i − D α i ∥ 2 2    s . t . ∥ α i ∥ 0 ⩽ L \boldsymbol{\alpha }_{i}^{*}=\mathrm{arg}\min _{\boldsymbol{\alpha }_i}\left\| \boldsymbol{x}_i-\boldsymbol{D\alpha }_i \right\| _{2}^{2}\,\, \mathrm{s}.\mathrm{t}. \left\| \boldsymbol{\alpha }_i \right\| _0\leqslant L αi=argαiminxii22s.t.αi0L

必须指出, ∥ α i ∥ 0 \left\| \boldsymbol{\alpha }_i \right\| _0 αi0的存在导致该优化是NP难问题。由于每个样本的稀疏编码相互独立,故优化过程可并行进行。可以证明,当 α i \boldsymbol{\alpha }_i αi充分稀疏时,上述优化问题有唯一解,且和

α i ∗ = a r g min ⁡ α i ∥ x i − D α i ∥ 2 2 + λ ∥ α i ∥ 1 \boldsymbol{\alpha }_{i}^{*}=\mathrm{arg}\min _{\boldsymbol{\alpha }_i}\left\| \boldsymbol{x}_i-\boldsymbol{D\alpha }_i \right\| _{2}^{2}+\lambda \left\| \boldsymbol{\alpha }_i \right\| _1 αi=argαiminxii22+λαi1

同解,此时可采用PGD等凸优化技术求解。然而因为不能保证 α i \boldsymbol{\alpha }_i αi充分稀疏,即非凸优化与凸优化的求解不一定等价,因此本节介绍基于贪心策略的非凸优化求解方法

3 匹配追踪MP算法

匹配追踪(Matching Pursuit, MP)的核心思想是挑选少数几个影响力最大的字典原子重构原始样本,其余字典原子置零,在稀疏化的同时保证主要信息不丢失。MP采用样本在字典原子方向的投影绝对值衡量影响力,其原理类似余弦相似度

h ( d i , r ) = ∣ < d i , r > ∣ d i ∣ ∣ h\left( \boldsymbol{d}_i,\boldsymbol{r} \right) =\left| \frac{\left< \boldsymbol{d}_i,\boldsymbol{r} \right>}{\left| \boldsymbol{d}_i \right|} \right| h(di,r)= didi,r

其中 r \boldsymbol{r} r残差(residual)或重构误差,衡量了基于稀疏表示的样本与原始样本间的误差。初始时刻 r = x \boldsymbol{r}=\boldsymbol{x} r=x,当字典原子单位化后,贪心策略要求选择满足

i ∗ = a r g max ⁡ i ∣ < d i , r > ∣ i^*=\mathrm{arg}\max _i\left| \left< \boldsymbol{d}_i,\boldsymbol{r} \right> \right| i=argimaxdi,r

的字典原子并用相应影响力更新编码向量,更新后的稀疏表示应比前几轮迭代更逼近原始样本,所以当重构误差小于阈值时即得最优的稀疏表示。如图所示为算法示意图,直观地,残差不断减小。

在这里插入图片描述
算法流程如下所示

在这里插入图片描述

4 正交匹配追踪OMP算法

MP算法的缺陷在于残差只与本轮迭代选择的字典原子正交,即同一字典原子可能在迭代中被重复选择,例如上图第二轮迭代后的残差 r 2 \boldsymbol{r}_2 r2 d 1 \boldsymbol{d}_1 d1夹角最小,导致 d 1 \boldsymbol{d}_1 d1被再次选择。若MP中对同一字典原子的选择可以合并为一次,即每次循环中都选择不同的原子,则可以大大减少迭代次数。正交匹配追踪(Orthogonal Matching Pursuit, OMP)通过引入正交性质克服了MP算法收敛速度慢的缺陷,改进算法如表所示

在这里插入图片描述

与MP算法最大的区别在于最小二乘编码的计算,使得

D Γ T r = D Γ T ( x − D Γ α Γ ∗ ) = 0 \boldsymbol{D}_{\varGamma}^{T}\boldsymbol{r}=\boldsymbol{D}_{\varGamma}^{T}\left( \boldsymbol{x}-\boldsymbol{D}_{\varGamma}\boldsymbol{\alpha }_{\varGamma}^{*} \right) =\mathbf{0} DΓTr=DΓT(xDΓαΓ)=0

即残差与字典原子正交,保证了更新的效率。采用最小二乘法而非施密特正交化的原因是对整个字典正交化的计算复杂度太高,且造成计算浪费(未被选择的原子也被正交化)

完整代码通过下方名片联系博主获取


🔥 更多精彩专栏

  • 《ROS从入门到精通》
  • 《Pytorch深度学习实战》
  • 《机器学习强基计划》
  • 《运动规划实战精讲》

👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/661641.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS小技巧之悬停3D发光效果

今天要实现的效果如图所示&#xff0c;鼠标悬停是图片卡片会有3D翻转的效果&#xff0c;且动画过程中还带有发光的效果。类似这种3D悬停效果日常看到的比较多&#xff0c;但是今天实现的这个效果有以下几个亮点&#xff1a; 核心CSS代码不超过10行没有额外的元素&#xff08;只…

STM32 MCO+SPI获取24位模数转换(24bit ADC)高速芯片ADS1271采样数据

STM32 MCOSPI获取24位模数转换&#xff08;24bit ADC&#xff09;高速芯片ADS1271采样数据 STM32大部分芯片只有12位的ADC采样性能&#xff0c;如果要实现更高精度的模数转换如24位ADC采样&#xff0c;则需要连接外部ADC实现。ADS1271是 TI公司一款高速24位Σ-Δ型模数转换器(…

[每周一更]-(第50期):Go的垃圾回收GC

参考文章&#xff1a; https://juejin.cn/post/7111515970669117447https://draveness.me/golang/docs/part3-runtime/ch07-memory/golang-garbage-collector/https://colobu.com/2022/07/16/A-Guide-to-the-Go-Garbage-Collector/https://liangyaopei.github.io/2021/01/02/g…

【前端布局篇】浮动、定位、弹性布局,固比固、双飞翼、圣杯布局

一、布局方式介绍 布局模型是基于盒模型基础上进行的拓展&#xff0c;关于布局有流式布局&#xff08;标准的布局&#xff09;&#xff0c;浮动布局、定位布局、flex布局等。 1.1 标准流&#xff08;流动模型&#xff09; 描述&#xff1a;元素按照自己默认的元素类型在页面…

社区问答精选——长安链开发知多少?(6月)

此次整理的内容为5-6月社群内的问答供更多开发者参考&#xff08;社群中部分优质问题连贯性不足未能收录&#xff0c;欢迎点击公众号菜单栏加入社群共同交流&#xff09;。有更多问答在社区issue中描述更为细致&#xff0c;开发者提问前可以先按照关键词进行搜索。欢迎各位开发…

Doris FE启动流程源码解读

FE启动流程分析 Doris中FE主要负责接收和返回客户端请求、元数据以及集群管理、查询计划生成等工作。 本文主要看一下Doris的fe在启动时做了什么。 启动流程分析 启动流程图&#xff1a; 代码路径&#xff1a; doris/fe/fe-core/src/main/java/org/apache/doris/DorisFE.j…

华为云CodeArts Build快速上手编译构建-进阶玩家体验

华为云CodeArts Build编译构建为开发者提供配置简单的混合语言构建平台&#xff0c;实现编译构建云端化&#xff0c;支撑企业实现持续交付&#xff0c;缩短交付周期&#xff0c;提升交付效率。支持编译构建任务一键创建、配置和执行&#xff0c;实现获取代码、构建、打包等活动…

react+antd实现表格封装,可动态控制列显示隐藏。

实现效果 import { Table, Pagination, Button, Dropdown, Checkbox, message } from antd; import { useState, useEffect } from react; import { PicRightOutlined } from ant-design/icons;import ./index.less;const TableComponent (props) > {const powerList JSON…

【方法】Excel表格的“打开密码”不想要了,如何取消?

对于重要的Excel表格&#xff0c;很多小伙伴都会设置“打开密码”&#xff0c;这样就无法随意打开表格&#xff0c;只有输入正确的密码才可以打开。 如果后续表格不再需要保护&#xff0c;每次打开都要输一次密码&#xff0c;这样操作也是很麻烦。 那不想要“打开密码”&…

(5)(5.8) 保存微调和自动微调

文章目录 前言 1 保存微调 2 自动微调 3 保存微调和自动微调的视频演示 4 桌面方法 前言 当然&#xff0c;风对你的旋翼飞机有很大的影响&#xff0c;会把它推来推去。然而&#xff0c;你可能也会发现&#xff0c;在自稳模式下飞行时&#xff0c;即使在无风的环境中&#xff0…

chatgpt赋能python:Python重新编辑引擎优化(SEO)文章

Python重新编辑引擎优化(SEO)文章 介绍 Python是一种多用途的高级编程语言&#xff0c;用于开发网络应用程序&#xff0c;算法&#xff0c;科学计算和数据分析等。 随着越来越多的网站和应用程序采用Python编写&#xff0c;优化Python代码以提高搜索引擎优化(SEO)变得越来越重…

基于html+css的图展示133

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

科技孵化制造蝶变:国际智造节上,群硕获评2023杰出数字化创新企业

论起2023年的热点有哪些&#xff1f;由ChatGPT掀起的智能科技浪潮&#xff0c;绝对是逃不开的话题。 6月16日&#xff0c;以“科技驱动&#xff0c;智造未来”为主题的2023国际智造节&#xff0c;在北京隆重举行。通过此次活动&#xff0c;在数字化领域深耕二十年的群硕软件&a…

K8s Kubectl 技巧集锦

kubectl 是 Kubernetes 的一个命令行管理工具&#xff0c;可用于 Kubernetes 上的应用部署和日常管理。本文列举了 9 个常见的 kubectl 命令&#xff0c;并总结了一些使用技巧&#xff0c;希望可以帮助系统管理员简化管理工作。 一、使用 Kubectl 查询、创建、编辑和删除资源 …

【C数据结构】循环队列_CyclicQueue

目录 循环队列_CyclicQueue 【1】循环队列 【1.1】循环队列的各个接口 【1.2】循环队列初始化 【1.3】循环队列初销毁 【1.4】循环队列插入 【1.5】循环队列删除 【1.6】循环队列获取头位置数据 【1.7】循环队列获取尾位置数据 【1.8】循环队列判满 【1.9】循环队列…

MMOE(Multi-gate Mixture-of-Experts)

1.前提和动机 随着推荐技术的发展&#xff0c;目前越来越多的推荐场景&#xff0c;往往并不是单独的优化一个指标&#xff0c;比如&#xff1a; 视频推荐领域&#xff1a;推荐排序任务不仅需要考虑到用户点击率、完播率&#xff0c;也需要考虑到一些满意度指标&#xff0c;例如…

优秀java实习报告范文5篇

优秀java实习报告范文(一) 一:实习介绍 1)实习题目 学生信息管理系统的设计与开发 2)实习目的 《Java程序设计》课程是电子商务专业的一门专业必修课程&#xff0c;特针对此课程进行为期三周的实践教学&#xff0c;旨在提升本专业学生对此课程中的理论知识的综合应用能力、提高…

微信研发体系下的分布式配置系统设计实践

腾小云导读 对很多的开发者而言&#xff0c;处理运营素材反复变更等需求场景不是一件轻松的事。开发者通常需要定制化地进行数据清理、格式转换和工具开发等等。在这个时候&#xff0c;建设分布式配置系统就显得尤为重要。本文旨在分析分布式配置系统的必要性、可行性及其关键…

SpringBoot的日志

SpringBoot的日志 &#x1f50e;日志是什么&#x1f50e;日志的作用&#x1f50e;日志级别日志级别的作用日志级别的分类日志级别的设置 &#x1f50e;打印日志打印日志具体内容划分 &#x1f50e;常用的日志框架为什么这样设计对比System.out.ptintln()与日志框架 &#x1f50…

Kubernetes那点事儿——暴露服务之Ingress

Kubernetes那点事儿——暴露服务之Ingress 前言一、ingress负载均衡器Ingress Controller路由规则Ingress 二、Ingress Controller三、案例 前言 在 k8s 集群中&#xff0c;如果我们将服务暴露出来&#xff0c;提供访问&#xff0c;可以使用Nodeport方式&#xff0c;但是Nodepo…