机器学习经典算法:k-SVD 前面为什么加个 k?
人类知识的发展历程比较复杂,我们简单点将其看成一个迭代过程:一代人的知识积累下来,再传授给下一代,下一代人除了使用已有知识外,还会对知识作进一步提升和扩展,然后继续传授给下一代。如此往复,不断进步。
然而知识从广义上看非常宽泛,我们不妨将其作一个简化,假设知识可以用一个字典来表示,那么知识的形成和应用也简化为两个步骤:建字典和查字典。
这里隐藏着如下一些大致要求,
字典尽量建得全面完备,以满足各个方面各个角度的不同应用。概括地说,就是具有完备性甚至允许冗余性。
而查字典往往是为了解决某一个特定问题,因此涉及到的具体知识点会比较有限,反映在所谓的稀疏性上。概括地说,就是具有稀疏性而不失精准。
从机器学习的角度来看,我们需要将这两点数学化,那么该如何办到呢?
¸转化为数学问题我们将上面的所提到的几个关键点用简单的数学概念表示如下:
数据矩阵,用我们的出发点是观察到的
令观测值为
首先,令
其中
然后,所谓的字典学习任务被转换为以下具体优化问题,
其中
这是一个非凸优化任务,可以迭代式求解。然而,
因此,每一次迭代包括两个阶段,
第 1 阶段:假设
第 2 阶段:假设系数向量是固定的,并针对
在
这也是
假设
由于 Frobenius 范数的定义可知,这相当于解如下
这个问题并不好处理,不妨转变一下思路,比如考虑以下优化任务,则可以实现类似的目标:
其中
上式的任务可以通过任何一种
而带有约束的优化问题,可以利用拉格朗日乘子法将其转化为无约束优化问题,
这里我们用
从第 1 阶段获得
现在的目标是针对
的列进行优化,注意,算法中是逐列分别处理的。
假设我们目前考虑更新
其中
请注意,在上述总和中,索引为
接着,我们将最小化外积矩阵(秩 为 1)
观察到这个乘积,除了
现在的任务就是求解一个秩 1 矩阵以最小化下式,
其中,
这个可以从下式中推得,
换句话说,我们要寻找一个在 Frobenius 范数意义上最逼近误差矩阵
的秩 1 矩阵。
上面从形式上看是一个最小二乘问题,自然可以利用最小二乘法来求解。但回想一下矩阵的 SVD 分解,容易知道这个小任务也可以通过矩阵
根据
因此,我们首先在
然后,得到一个简化向量
观察等式
然后我们收集
由 SVD 分解可得
后续将
综上所述,
1、初始化
2、第 1 阶段稀疏编码:用相关算法(如 OMP)解优化问题,获得稀疏编码表示向量
3、第 2 阶段字典更新:对于
从第 1 阶段计算所得的矩阵
选择
求
将
更新
4、如果满足收敛标准,则停止迭代;否则令
名称的 SVD 部分非常明显。但是,读者可能想知道前面为啥要加一个
那么它到底为啥要加上这个名头呢?实际上,该算法可以被认为是
因此,我们可以将
此外,基于输入向量到簇的分配,在
相关阅读
-
世界热推荐:今晚7:00直播丨下一个突破...
今晚19:00,Cocos视频号直播马上点击【预约】啦↓↓↓在运营了三年... -
NFT周刊|Magic Eden宣布支持Polygon网...
Block-986在NFT这样的市场,每周都会有相当多项目起起伏伏。在过去... -
环球今亮点!头条观察 | DeFi的兴衰与...
在比特币得到机构关注之后,许多财务专家预测世界将因为加密货币的... -
重新审视合作,体育Crypto的可靠关系才能双赢
Block-987即使在体育Crypto领域,人们的目光仍然集中在FTX上。随着... -
简讯:前端单元测试,更进一步
前端测试@2022如果从2014年Jest的第一个版本发布开始计算,前端开发... -
焦点热讯:刘强东这波操作秀
近日,刘强东发布京东全员信,信中提到:自2023年1月1日起,逐步为...