在基于KL散度的图正则化非负矩阵分解(GNMF_KL)中,乘性更新规则是最常用且稳定的优化方式。它通过精心设计的迭代公式,确保目标函数(KL散度 + 图正则项)单调下降,同时严格保持U和V的非负性,无需引入学习率等超参数,收敛可靠。
今天分享的这个函数GNMF_KL_Multi正是GNMF_KL算法的核心迭代实现。它支持稠密和稀疏矩阵输入、大规模数据分块处理、多次随机初始化选优、NCW权重以及K-means智能初始化,工程细节非常完善,适合处理从几千到几十万样本的真实场景。
乘性更新的核心原理
GNMF_KL的目标函数为:
D(X || UV^T) + α Tr(V^T L V)通过拉格朗日乘子法并应用KKT条件,可以推导出以下乘性更新规则:
更新V时:固定U,使用加权最小二乘求解带正则的线性系统
更新U时:使用标准的KL-NMF乘性公式(考虑NCW权重时稍作调整)
关键在于:
对于V的更新,当有图正则(α>0)时,需要逐列求解 (αL + diag(tmpNCWeight * sumU(i))) * V(:,i) = Y(:,i)
对于U的更新,直接乘性:U = U .* (Y * V) ./ (sumV 的列扩展)
这些更新保证了非负性,且目标函数严格下降。