非负矩阵分解(Non-negative Matrix Factorization, NMF)的乘性更新规则(Multiplicative Update Rules)及其推导
字数 4189 2025-12-12 06:18:21

好的,根据你的要求,我为你随机选择一个机器学习算法领域内,且不在你已列出的、非常详尽的已讲题目列表中的算法进行讲解。

非负矩阵分解(Non-negative Matrix Factorization, NMF)的乘性更新规则(Multiplicative Update Rules)及其推导

一、算法题目描述

非负矩阵分解(NMF) 是一种无监督的矩阵分解技术,它要求将一个给定的非负数据矩阵 \(V\)(维度为 \(n \times m\))近似分解为两个非负矩阵 \(W\)(维度为 \(n \times r\))和 \(H\)(维度为 \(r \times m\))的乘积:

\[ V \approx W \times H \]

其中,\(r\) 是一个远小于 \(n\)\(m \) 的预设值,称为分解的秩或主题/基的数量

这个问题的核心在于,在给定 \(V\)\(r\) 的前提下,如何找到 \(W\)\(H\) 使得乘积 \(WH\) 尽可能接近 \(V\),并且在整个求解过程中保持 \(W\)\(H\) 的所有元素非负。它广泛应用于文本主题建模、图像分析(如人脸识别、图像去噪)、音频谱分解和基因表达数据分析等领域,其非负性约束带来了可解释性,因为分解出的 \(W\)(基矩阵)和 \(H\)(系数矩阵)可以直观地理解为“部分”的“组合”。

乘性更新规则 是求解 NMF 最经典和高效的迭代算法之一,由李和海南在1999年提出。它的核心思想是:通过交替地、以乘法形式更新 \(W\)\(H\),使分解在满足非负约束的同时,朝着最小化重构误差(如Frobenius范数)的方向前进。

二、解题过程循序渐进讲解

第一步:问题建模与目标函数定义

我们的目标是找到 \(W\)\(H\),使 \(V \approx WH\)。需要一个标准来衡量“近似”的好坏。最常用的度量是Frobenius范数(欧几里得距离)的平方,即误差的平方和。

我们定义目标函数为:

\[ \min_{W \geq 0, H \geq 0} || V - WH ||_F^2 \]

其中 \(|| \cdot ||_F\) 表示 Frobenius 范数。根据定义展开:

\[ || V - WH ||_F^2 = \sum_{i=1}^{n} \sum_{j=1}^{m} (V_{ij} - (WH)_{ij})^2 \]

这是一个带约束(非负)的优化问题,决策变量是 \(W\)\(H\) 中的所有元素。

第二步:优化策略与交替最小二乘思想

直接同时优化 \(W\)\(H\) 非常困难。一种有效的策略是交替优化:固定一个,优化另一个。

  1. 固定 \(H\) ,优化 \(W\) :此时目标函数是关于 \(W\) 的二次函数(但带非负约束)。
  2. 固定 \(W\) ,优化 \(H\) :此时目标函数是关于 \(H\) 的二次函数(但带非负约束)。

如果我们忽略非负约束,这个问题就变成了普通的线性最小二乘(Least Squares),可以直接求导得到解析解(例如 \(W = VH^T(HH^T)^{-1}\))。但问题在于,这样求出的 \(W\) 可能包含负数,破坏了约束。

第三步:从梯度下降到乘性更新规则的推导(以更新 \(H\) 为例,固定 \(W\)

假设我们暂时抛开非负约束,使用朴素的梯度下降法来最小化目标函数。目标函数 \(f(H) = ||V - WH||_F^2\) 关于 \(H\) 的梯度 \(\nabla_H f\) 为:

\[ \nabla_H f = -2W^T(V - WH) = 2(W^TWH - W^TV) \]

(这里的系数2可以并入学习率,不影响算法本质)

梯度下降的更新公式是:\(H_{new} = H_{old} - \eta \odot \nabla_H f\),其中 \(\eta\) 是学习率矩阵(通常是一个标量学习率乘以全1矩阵),\(\odot\) 表示逐元素乘法。

为了保证更新后 \(H\) 的非负性,一个巧妙的思路是:精心设计学习率 \(\eta\)。李和海南提出,将学习率设置为一个与当前 \(H\) 成正比的量。具体地,令:

\[ \eta_{ab} = \frac{H_{ab}}{2(W^TWH)_{ab}} \]

注意,这里使用了梯度表达式的 \(W^TWH\) 项。

现在,我们进行梯度下降更新:

\[ H_{ab}^{new} = H_{ab}^{old} - \eta_{ab} \cdot \frac{\partial f}{\partial H_{ab}} \]

代入 \(\eta_{ab}\) 和梯度(为了形式简洁,我们使用去掉系数2的梯度形式 \(W^TWH - W^TV\)):

\[ H_{ab}^{new} = H_{ab}^{old} - \frac{H_{ab}^{old}}{(W^TWH)_{ab}} \cdot [(W^TWH)_{ab} - (W^TV)_{ab}] \]

\[ = H_{ab}^{old} - \frac{H_{ab}^{old} \cdot (W^TWH)_{ab}}{(W^TWH)_{ab}} + \frac{H_{ab}^{old} \cdot (W^TV)_{ab}}{(W^TWH)_{ab}} \]

\[ = H_{ab}^{old} - H_{ab}^{old} + \frac{H_{ab}^{old} \cdot (W^TV)_{ab}}{(W^TWH)_{ab}} \]

\[ = H_{ab}^{old} \cdot \frac{(W^TV)_{ab}}{(W^TWH)_{ab}} \]

哇!神奇的事情发生了:减法更新变成了乘法更新!我们得到了 \(H\) 的乘性更新规则:

\[ H_{ab} \leftarrow H_{ab} \frac{(W^TV)_{ab}}{(W^TWH)_{ab}} \]

第四步:对称地推导 \(W\) 的更新规则

同理,固定 \(H\),优化 \(W\)。目标函数 \(g(W) = ||V - WH||_F^2\) 关于 \(W\) 的梯度是:

\[ \nabla_W g = -2(V - WH)H^T = 2(WHH^T - VH^T) \]

采用对称的学习率设计:\(\eta‘_{ia} = \frac{W_{ia}}{2(WHH^T)_{ia}}\)
按照与第三步完全相同的推导过程,我们可以得到 \(W\) 的乘性更新规则:

\[ W_{ia} \leftarrow W_{ia} \frac{(VH^T)_{ia}}{(WHH^T)_{ia}} \]

第五步:完整的乘性更新算法流程

  1. 初始化:随机或以某种启发式方法初始化非负矩阵 \(W\)\(H\)
  2. 迭代更新,直到满足停止条件(如达到最大迭代次数,或重构误差的变化小于某个阈值):
    a. 更新 \(H\):对于 \(H\) 中的每个元素 \(H_{ab}\)

\[ H_{ab} \leftarrow H_{ab} \frac{(W^TV)_{ab}}{(W^TWH)_{ab}} \]

b. **更新 $ W $**:对于 $ W $ 中的每个元素 $ W_{ia} $:

\[ W_{ia} \leftarrow W_{ia} \frac{(VH^T)_{ia}}{(WHH^T)_{ia}} \]

(注意:在更新 $ W $ 后,通常会对 $ W $ 的每一列进行归一化,以避免缩放模糊。这意味着需要相应地对 $ H $ 的行进行调整以保持乘积不变,但为了算法简洁,这一步有时会在所有迭代完成后进行)。
  1. 输出:最终的非负矩阵 \(W\)\(H\)

第六步:算法特性与直观理解

  1. 非负性的自动保持:更新规则中,分子 \(W^TV\)\(VH^T\)\(W, H, V\) 非负时必然非负。分母 \(W^TWH\)\(WHH^T\) 也非负。只要初始化值为正,整个迭代过程中所有元素始终保持非负。这使得算法极其简洁稳定。
  2. 收敛性:该算法本质上是梯度下降的一个特例,只是学习率经过了特殊设计。理论可以证明,该更新规则能保证在每次迭代中目标函数值(Frobenius 误差)不增加,最终收敛到一个局部极小值(由于非凸性,不一定是全局最优)。
  3. 直观解释:更新规则像一个“纠正因子”。如果当前 \(WH\) 在某个位置 \((i, j)\) 的值 \((WH)_{ij}\) 小于真实值 \(V_{ij}\),那么在更新 \(H\)(或 \(W\))时,对应的因子会大于1,从而增大相关的 \(H_{ab}\)(或 \(W_{ia}\))。反之,如果估计值过高,因子小于1,则会减小对应的元素。这是一个自调节的过程。

总结

非负矩阵分解(NMF)的乘性更新规则通过一个巧妙的学习率设计,将带非负约束的梯度下降优化问题,转化为一个纯乘法形式的迭代算法。它优雅地同时保证了优化方向(减小重构误差)和约束条件(矩阵非负),成为NMF领域最基础和最重要的求解算法之一。其核心公式简洁明了:

\[ H \leftarrow H \odot \frac{W^T V}{W^T W H}, \quad W \leftarrow W \odot \frac{V H^T}{W H H^T} \]

其中 \(\odot\)\(/\) 分别表示逐元素乘法和逐元素除法。

好的,根据你的要求,我为你随机选择一个机器学习算法领域内,且不在你已列出的、非常详尽的已讲题目列表中的算法进行讲解。 非负矩阵分解(Non-negative Matrix Factorization, NMF)的乘性更新规则(Multiplicative Update Rules)及其推导 一、算法题目描述 非负矩阵分解(NMF) 是一种无监督的矩阵分解技术,它要求将一个给定的 非负 数据矩阵 \( V \)(维度为 \( n \times m \))近似分解为两个 非负 矩阵 \( W \)(维度为 \( n \times r \))和 \( H \)(维度为 \( r \times m \))的乘积: \[ V \approx W \times H \] 其中,\( r \) 是一个远小于 \( n \) 和 \(m \) 的预设值,称为 分解的秩或主题/基的数量 。 这个问题的核心在于,在给定 \( V \) 和 \( r \) 的前提下,如何找到 \( W \) 和 \( H \) 使得乘积 \( WH \) 尽可能接近 \( V \),并且在整个求解过程中保持 \( W \) 和 \( H \) 的所有元素非负。它广泛应用于文本主题建模、图像分析(如人脸识别、图像去噪)、音频谱分解和基因表达数据分析等领域,其非负性约束带来了 可解释性 ,因为分解出的 \( W \)(基矩阵)和 \( H \)(系数矩阵)可以直观地理解为“部分”的“组合”。 乘性更新规则 是求解 NMF 最经典和高效的迭代算法之一,由李和海南在1999年提出。它的核心思想是:通过交替地、以乘法形式更新 \( W \) 和 \( H \),使分解在满足非负约束的同时,朝着最小化重构误差(如Frobenius范数)的方向前进。 二、解题过程循序渐进讲解 第一步:问题建模与目标函数定义 我们的目标是找到 \( W \) 和 \( H \),使 \( V \approx WH \)。需要一个标准来衡量“近似”的好坏。最常用的度量是 Frobenius范数(欧几里得距离)的平方 ,即误差的平方和。 我们定义目标函数为: \[ \min_ {W \geq 0, H \geq 0} || V - WH || F^2 \] 其中 \( || \cdot || F \) 表示 Frobenius 范数。根据定义展开: \[ || V - WH || F^2 = \sum {i=1}^{n} \sum {j=1}^{m} (V {ij} - (WH)_ {ij})^2 \] 这是一个带约束(非负)的优化问题,决策变量是 \( W \) 和 \( H \) 中的所有元素。 第二步:优化策略与交替最小二乘思想 直接同时优化 \( W \) 和 \( H \) 非常困难。一种有效的策略是 交替优化 :固定一个,优化另一个。 固定 \( H \) ,优化 \( W \) :此时目标函数是关于 \( W \) 的二次函数(但带非负约束)。 固定 \( W \) ,优化 \( H \) :此时目标函数是关于 \( H \) 的二次函数(但带非负约束)。 如果我们忽略非负约束,这个问题就变成了普通的线性最小二乘(Least Squares),可以直接求导得到解析解(例如 \( W = VH^T(HH^T)^{-1} \))。但问题在于,这样求出的 \( W \) 可能包含负数,破坏了约束。 第三步:从梯度下降到乘性更新规则的推导(以更新 \( H \) 为例,固定 \( W \)) 假设我们暂时抛开非负约束,使用朴素的 梯度下降法 来最小化目标函数。目标函数 \( f(H) = ||V - WH||_ F^2 \) 关于 \( H \) 的梯度 \( \nabla_ H f \) 为: \[ \nabla_ H f = -2W^T(V - WH) = 2(W^TWH - W^TV) \] (这里的系数2可以并入学习率,不影响算法本质) 梯度下降的更新公式是:\( H_ {new} = H_ {old} - \eta \odot \nabla_ H f \),其中 \( \eta \) 是学习率矩阵(通常是一个标量学习率乘以全1矩阵),\( \odot \) 表示逐元素乘法。 为了保证更新后 \( H \) 的非负性,一个巧妙的思路是: 精心设计学习率 \( \eta \) 。李和海南提出,将学习率设置为一个与当前 \( H \) 成正比的量。具体地,令: \[ \eta_ {ab} = \frac{H_ {ab}}{2(W^TWH)_ {ab}} \] 注意,这里使用了梯度表达式的 \( W^TWH \) 项。 现在,我们进行梯度下降更新: \[ H_ {ab}^{new} = H_ {ab}^{old} - \eta_ {ab} \cdot \frac{\partial f}{\partial H_ {ab}} \] 代入 \( \eta_ {ab} \) 和梯度(为了形式简洁,我们使用去掉系数2的梯度形式 \( W^TWH - W^TV \)): \[ H_ {ab}^{new} = H_ {ab}^{old} - \frac{H_ {ab}^{old}}{(W^TWH) {ab}} \cdot [ (W^TWH) {ab} - (W^TV) {ab} ] \] \[ = H {ab}^{old} - \frac{H_ {ab}^{old} \cdot (W^TWH) {ab}}{(W^TWH) {ab}} + \frac{H_ {ab}^{old} \cdot (W^TV) {ab}}{(W^TWH) {ab}} \] \[ = H_ {ab}^{old} - H_ {ab}^{old} + \frac{H_ {ab}^{old} \cdot (W^TV) {ab}}{(W^TWH) {ab}} \] \[ = H_ {ab}^{old} \cdot \frac{(W^TV) {ab}}{(W^TWH) {ab}} \] 哇! 神奇的事情发生了 :减法更新变成了 乘法更新 !我们得到了 \( H \) 的乘性更新规则: \[ H_ {ab} \leftarrow H_ {ab} \frac{(W^TV) {ab}}{(W^TWH) {ab}} \] 第四步:对称地推导 \( W \) 的更新规则 同理,固定 \( H \),优化 \( W \)。目标函数 \( g(W) = ||V - WH|| F^2 \) 关于 \( W \) 的梯度是: \[ \nabla_ W g = -2(V - WH)H^T = 2(WHH^T - VH^T) \] 采用对称的学习率设计:\( \eta‘ {ia} = \frac{W_ {ia}}{2(WHH^T) {ia}} \)。 按照与第三步完全相同的推导过程,我们可以得到 \( W \) 的乘性更新规则: \[ W {ia} \leftarrow W_ {ia} \frac{(VH^T) {ia}}{(WHH^T) {ia}} \] 第五步:完整的乘性更新算法流程 初始化 :随机或以某种启发式方法初始化非负矩阵 \( W \) 和 \( H \)。 迭代更新 ,直到满足停止条件(如达到最大迭代次数,或重构误差的变化小于某个阈值): a. 更新 \( H \) :对于 \( H \) 中的每个元素 \( H_ {ab} \): \[ H_ {ab} \leftarrow H_ {ab} \frac{(W^TV) {ab}}{(W^TWH) {ab}} \] b. 更新 \( W \) :对于 \( W \) 中的每个元素 \( W_ {ia} \): \[ W_ {ia} \leftarrow W_ {ia} \frac{(VH^T) {ia}}{(WHH^T) {ia}} \] (注意:在更新 \( W \) 后,通常会对 \( W \) 的每一列进行归一化,以避免缩放模糊。这意味着需要相应地对 \( H \) 的行进行调整以保持乘积不变,但为了算法简洁,这一步有时会在所有迭代完成后进行)。 输出 :最终的非负矩阵 \( W \) 和 \( H \)。 第六步:算法特性与直观理解 非负性的自动保持 :更新规则中,分子 \( W^TV \) 和 \( VH^T \) 在 \( W, H, V \) 非负时必然非负。分母 \( W^TWH \) 和 \( WHH^T \) 也非负。只要初始化值为正,整个迭代过程中所有元素始终保持非负。这使得算法极其简洁稳定。 收敛性 :该算法本质上是 梯度下降 的一个特例,只是学习率经过了特殊设计。理论可以证明,该更新规则能保证在每次迭代中目标函数值(Frobenius 误差)不增加,最终收敛到一个局部极小值(由于非凸性,不一定是全局最优)。 直观解释 :更新规则像一个“纠正因子”。如果当前 \( WH \) 在某个位置 \( (i, j) \) 的值 \( (WH) {ij} \) 小于真实值 \( V {ij} \),那么在更新 \( H \)(或 \( W \))时,对应的因子会大于1,从而增大相关的 \( H_ {ab} \)(或 \( W_ {ia} \))。反之,如果估计值过高,因子小于1,则会减小对应的元素。这是一个自调节的过程。 总结 非负矩阵分解(NMF)的乘性更新规则 通过一个巧妙的学习率设计,将带非负约束的梯度下降优化问题,转化为一个纯乘法形式的迭代算法。它优雅地同时保证了 优化方向 (减小重构误差)和 约束条件 (矩阵非负),成为NMF领域最基础和最重要的求解算法之一。其核心公式简洁明了: \[ H \leftarrow H \odot \frac{W^T V}{W^T W H}, \quad W \leftarrow W \odot \frac{V H^T}{W H H^T} \] 其中 \( \odot \) 和 \( / \) 分别表示逐元素乘法和逐元素除法。