问题描述
现有 { H i } \{\rm H_i\} {Hi}需要优化使得它们的行列式尽量接近0,并且尽量稀疏。
直接思路
添加能量项 M a t r i x _ l o s s = ∑ i ∣ H i ∣ \rm Matrix\_loss=\sum_i |\rm H_i| Matrix_loss=∑i∣Hi∣,然后直接优化。
结果
收敛速度有点慢,而且没有想象中那么稀疏。
低秩优化
优化 { H i } \{\rm H_i\} {Hi}的秩,使得它的秩小于它的行列数的最小值,此时行列式必然为0。
- 对其进行svd分解,得到奇异值。
- 惩罚其最小奇异值,使其尽量接近0。
难点:找到最小奇异值需要用的min操作,其本身不可微分。
转化思路:
- 设 u i , z i , v i = s v d ( H i ) \mathbf u_i, \mathbf z_i, \mathbf v_i=svd(\rm H_i) ui,zi,vi=svd(Hi),将 z i \mathbf z_i zi中最小值设为0,得到 z ^ i \mathbf {\hat{z}_i} z^i
- 计算 H ^ i = u i ∗ z ^ i ∗ v i T \mathbf {\hat{\rm H}_i}=\mathbf u_i * \mathbf {\hat{z}_i} * \mathbf {v_i}^T H^i=ui∗z^i∗viT
- 设 M a t r i x _ l o s s = ∑ i ∣ H i − H ^ i ∣ F \rm Matrix\_loss=\sum_i |\rm H_i-\mathbf {\hat{\rm H}_i}|_F Matrix_loss=∑i∣Hi−H^i∣F
结果
下降速度很快,而且效果很好。