算法既要对又要稳
2026-05-25
31

论文的题目表面上很数学,名字叫“非正交近似联合对角化”。其实在解决一个很实在的问题:很多算法都能把一组矩阵“尽量变成对角形”,可最后算出来的变换矩阵未必好用,可能病态、退化、一碰噪声就不稳定,放到盲源分离这种实际任务里,分出来的结果会变得很难看。
做联合对角化时不能只盯着“误差小不小”,还得观察“矩阵是不是一个好脾气、站得住、抗噪声的矩阵”。作者给这个“好脾气”找了一个统一指标,叫条件数。条件数越大,说明这个矩阵越容易不稳定;条件数越小,说明更稳。
为什么这件事重要?因为在盲源分离里,最后是在反推一个“解混矩阵”。如果矩阵条件数很大,输入里有一点点噪声,输出也可能被放大得很厉害。论文把这个逻辑说得很清楚:一个矩阵即便不是严格退化的,也可能因为条件数太大导致实际应用里很难用。换句话说:得“足够稳”。
论文的第一个推进是把很多零碎的限制条件重新统一了起来。以前的一些联合对角化算法,会用各种各样的约束防止结果太离谱,比如限制列向量长度、某个矩阵必须是正定的,或者用别的手段避免退化。说到底,大家都是在想办法让最后的对角化矩阵别太病态。于是,论文第一次把这个问题明确改写成一个“多目标优化”问题,不只追求对角化误差小,还同时追求条件数小。
只加一些常见的范数约束够不够?图1给了答案。作者指出,这类方法在一些情况下会得到退化解。看起来算出了结果,实际上矩阵已经坏掉了。图 1 展示的就是这种退化现象。对非专业读者来说,可以理解成:有些老算法不是不会算,是有时会算出一个“数学上成立、工程上不可信”的结果。

在列向量都做了归一化以后,行列式和条件数之间到底是什么关系?论文的观察是行列式越大,通常对应的条件数越小,也就越稳。于是作者顺着这个思路,把目标函数重新设计成压低对角化误差的同时,尽量把矩阵往“条件数更小”的方向推。

基于这个思路,作者提出了一个新算法,叫 FlexJD。“Flex” 可以理解成“灵活”。它的意思不是随便调,是不会死板地只顾一头。论文反复强调,FlexJD 的目标不是只把对角化误差压到最低,也不是只追求条件数最小,是在这两个目标之间找一个合理平衡。作者把这件事讲得很像一个帕累托最优问题:有的算法误差很小,但矩阵条件数很大;有的算法条件数漂亮,但对角化误差又变差。FlexJD 想做的是在这两个目标之间找一个更均衡的结果。
这篇论文不只给了算法,还补了理论结论。作者证明了一个很关键的点:如果一组矩阵本来就可以被精确联合对角化,那么这个问题没有局部最小值陷阱,只有全局最优;在比较温和的条件下,解本质上还是唯一的。说明 FlexJD 在理想场景下不是在一堆坏解里瞎碰运气,而是朝一个结构上清楚、结果上可靠的问题走。
图 3 回答的问题是:噪声水平变大时,各算法的对角化误差和条件数会怎么变。论文的总结很明确:FlexJD 在保持很低对角化误差的同时,也能把条件数控制在一个比较理想的范围里。图 4 进一步把几类算法在“误差”和“条件数”上的位置关系讲清楚了。不是所有“误差低”的解都值得要,因为可能是拿一个很差的条件数换来的。


日常应用的结果如何?看后面的盲源分离实验。论文先拿四路语音信号做实验,再拿四路 16-QAM 数字通信信号做实验。图 6、7 和8可以看出FlexJD 在这些场景下比对比算法更稳,尤其当混合矩阵条件数很大时,它的优势更明显。



这篇论文抓住了一个特别普遍的经验:很多算法的问题是“在理想情况下看着没问题,一到噪声和病态条件下就不太可信”。这篇工作真正往前推的一步是把“结果要合理”这件事从一种经验判断,变成了一个明确描述的问题。
作者简介:谢胜利,广东工业大学自动化学院教授、博士生导师。长期从事控制、信号处理与智能信息处理等领域的教学与研究,研究工作涉及无线通信与网络、物联网信息技术等方向。现为国家杰出青年科学基金获得者、国家自然科学二等奖第一完成人。
DOI:10.1109/TNN.2009.2030586