稀疏表达是什么?用少数几个基本元素组合出数据
稀疏表达(Sparse Representation),也叫稀疏表示或稀疏编码,是指把一个数据表示为一组“基本元素”中少数几个元素的线性组合。这组基本元素叫作“字典”,其中的每个元素叫作一个“原子”。所谓“稀疏”,就是说在表示某个数据时,字典中绝大多数原子的系数都是零,只有少数几个原子真正参与了组合。
一个直观的比喻
可以把稀疏表达想象成用颜料调色:手中有一套几十种颜色的颜料,这就是字典;要调出某一种特定的颜色,通常只需要从中挑出两三种颜料按一定的比例混合,其余的颜料都用不着。类似地,一段音乐可以分解为少数几个音符的组合,一篇文章的主题可以用少数几个关键词来概括。稀疏表达的思想是:现实中的数据虽然看起来复杂,但往往可以用少数几个基本的“构件”来描述,抓住这些构件,就抓住了数据的本质。
固定的字典与学习的字典
使用固定的字典:很多自然信号在某些标准的变换下天然就是稀疏的。比如一张自然图像经过小波变换或离散余弦变换之后,绝大多数系数都非常小,只有少数几个系数较大。JPEG 图像压缩正是利用了这一点:只保留那些较大的系数,丢掉很小的系数,就能大幅减少数据量,而图像看起来几乎没有变化。从数据中学习字典:固定的字典并不一定最适合某一类特定的数据。字典学习的方法从大量的训练数据中,同时学习字典本身和每个样本的稀疏系数,让字典更贴合数据的特点。代表性的算法有 Michal Aharon、Michael Elad 和 Alfred Bruckstein 在 2006 年提出的 K-SVD,它交替地进行两步:固定字典求每个样本的稀疏系数,再固定系数逐个地更新字典中的原子。周志华《机器学习》在“稀疏表示与字典学习”一节中也介绍了这一思路:为普通的稠密数据学习一个合适的字典,把它转化为稀疏的表示,从而使学习任务得以简化。
如何求出稀疏的系数
在字典给定的情况下,找到一组非零系数最少、又能准确地表示数据的系数,在计算上是一个非常困难的组合优化问题。常用的方法有两类:一类是贪心的方法,比如正交匹配追踪,每一步挑选出与当前剩余误差最相关的那个原子,加入到表示中,再更新误差,直到误差足够小;另一类是凸松弛的方法,用 L1 范数,也就是系数绝对值之和,代替非零系数的个数作为惩罚,把问题转化为一个容易求解的凸优化问题,这与 Lasso 回归的形式相同,在统计学中也叫基追踪。压缩感知理论证明,在一定的条件下,这样的松弛能够得到与原问题相同的最稀疏解。
与大脑视觉的联系
1996 年,Bruno Olshausen 和 David Field 在《自然》杂志上发表了一项有影响力的研究:他们从大量自然图像的小块中,用稀疏编码的方法学习字典,结果发现学到的原子看起来像是各种方向、各种位置的边缘和条纹,这与哺乳动物大脑初级视觉皮层中神经元的感受野非常相似。这一发现表明,大脑处理视觉信息的方式,可能正是一种追求高效、稀疏的编码,每次只有少数神经元被激活。
应用
稀疏表达被广泛用于图像去噪:噪声通常无法用字典中少数几个原子很好地表示,在求稀疏表示的过程中会被自然地过滤掉;图像修复:根据图像中已知的部分,推断出缺失部分的稀疏表示,从而补全图像;超分辨率和图像压缩;人脸识别:2009 年,John Wright 等人提出用所有训练人脸作为字典,把待识别的人脸表示为训练人脸的稀疏组合,系数集中在哪个人的照片上,就判断为哪个人,这一方法对遮挡和噪声有较好的鲁棒性;以及音频和信号处理。在深度学习的时代,稀疏自编码器延续了这一思想,近年来被用于分析大语言模型的内部表示,把模型稠密的激活分解为大量稀疏的、可以解释的特征。