矩阵熵的约束优化问题


10

我在(Shannon)矩阵熵一个约束优化问题。矩阵可以写成形式为的秩1矩阵之和其中是给定的归一化向量。排名第一的矩阵的系数是我们进行优化的未知数,它们必须大于零且总和为1。 A [ v i(sum(entr(eig(A))))Av [viviT]vi

用类似CVX的语法,问题如下:给定变量c(n)

minimizesum(entr(eig(A)))

subject toA=civiviTci=1ci0

有没有一个想法如何有效地解决这个问题?我已经知道它可能无法转换为半定型编程(SDP)问题。

Answers:


8

编辑:一位同事告诉我,下面的方法是以下论文中通用方法的一个实例,当专门用于熵函数时,

欧弗顿,迈克尔·L和罗伯特·S·沃默斯利。“用于优化对称矩阵特征值的二阶导数。” SIAM矩阵分析和应用杂志16.3(1995):697-718。http://ftp.cs.nyu.edu/cs/faculty/overton/papers/pdffiles/eighess.pdf

总览

在这篇文章中,我证明了优化问题的存在性,并且不等式约束在解中不起作用,然后计算了熵函数的一阶和二阶Frechet导数,然后针对消除了等式约束的问题提出了牛顿法。最后,给出了Matlab代码和数值结果。

优化问题的适切性

首先,正定矩阵的总和是正定的,因此对于,秩1矩阵的总和 是正定的。如果的集合是最高秩,则特征值是正的,因此可以采用特征值的对数。因此,目标函数在可行集的内部得到了很好的定义。A c = N i = 1 c i v i v T i v i Aci>0

A(c):=i=1NciviviT
viA

其次,由于任何,失去排名,所以最小特征值变为零。即作为。由于的导数以爆炸,因此不能有一系列接连不断逼近可行点边界的点。因此,问题被明确定义,并且不等式约束是无效的。σ ÑÇ 0 Ç 0 - σ 日志σ σ 0 Ç 0ci0AAσmin(A(c))0ci0σlog(σ)σ0ci0

熵函数的Frechet导数

在可行区域的内部,熵函数在任何地方都是Frechet可微的,而在没有重复特征值的地方,熵函数是Frechet可微的。要执行牛顿法,我们需要计算矩阵熵的导数,该导数取决于矩阵的特征值。这就需要计算矩阵的特征值分解相对于矩阵变化的敏感性。

回想一下,对于一个矩阵与本征值分解= û Λ ù Ť,该衍生物的特征值矩阵相对于变化在原始矩阵是, d Λ = û Ť d ù 和该衍生物的特征向量矩阵是 其中是Hadamard乘积,系数矩阵 AA=UΛUT

dΛ=I(UTdAU),
Ç = { Ü Ť d ù Ĵ
dU=UC(dA),
C={uiTdAujλjλi,i=j0,i=j

这样的公式是通过微分特征值方程得出的,只要特征值不同,该公式就成立。当存在重复的特征值时,的公式具有可移动的不连续性,只要仔细选择非唯一特征向量,就可以扩展该不连续性。有关此的详细信息,请参见以下演示文稿论文d ΛAU=ΛUdΛ

然后通过再次微分来找到二阶导数

d2Λ=d(I(UTdA1U))=I(dU2TdA1U+UTdA1dU2)=2I(dU2TdA1U).

虽然可以使特征值矩阵的一阶导数在重复的特征值上连续,但由于取决于(取决于,因此二阶导数不能,因为特征值朝彼此退化时爆炸。但是,只要真正的解决方案没有重复的特征值,那就可以了。数值实验表明,通用就是这种情况,尽管我目前没有证据。理解这一点非常重要,因为如果可能的话,最大化熵通常会试图使特征值更接近在一起。d2ΛdU2Cvi

消除平等约束

通过仅处理前系数并将最后一个系数设置为 我们可以消除约束i=1Nci=1N1

cN=1i=1N1ci.

总体而言,经过约4页矩阵计算,目标函数相对于前系数的变化的一阶和二阶导数的下式为: 其中 N1

dF=dC1个Ť中号Ť[一世VŤüüŤV]
ddF=dC1个Ť中号Ť[一世VŤ[2dü2一个üŤ+übüŤ]V]
中号=[1个1个1个-1个-1个-1个]

一个=d一世一个G1个+日志λ1个1个+日志λ21个+日志λñ

b=d一世一个Gd2λ1个λ1个d2λñλñ

消除约束后的牛顿法

由于不等式约束处于非活动状态,因此我们仅从可行集开始,然后运行信任区域或线搜索不精确的Newton-CG,以二次收敛到内部最大值。

方法如下(不包括信任区域/行搜索详细信息)

  1. 从。C=[1个/ñ1个/ñ1个/ñ]
  2. 构造最后一个系数。C=[C1个-一世=1个ñ-1个C一世]
  3. 构造。一个=一世C一世v一世v一世Ť
  4. 查找特征向量和特征值的。üΛ一个
  5. 构造梯度。G=中号Ť[一世VŤüüŤV]
  6. 通过共轭梯度来求解的(仅需要应用的能力,而无需实际输入)。被施加到载体通过找到,,和,然后插入到该式中, p ħ ħ δ c ^ d ü 2 一个b 中号Ť [ V Ť [ 2 d ü 2 一个Ü Ť + Ü b ù Ť ] V ]HG=ppHHδCdü2一个b
    中号Ť[一世VŤ[2dü2一个üŤ+übüŤ]V]
  7. 设置。CC-p
  8. 转到2。

结果

对于随机,通过linesearch查找步长,该方法收敛很快。例如,以下结果为(100)是典型的-该方法二次收敛。 Ñ = 100 v v一世ñ=100v一世

>> N = 100;
>> V = randn(N,N);
>>对于k = 1:NV(:,k)= V(:,k)/ norm(V(:,k)); 结束
>> maxEntropyMatrix(V);
牛顿迭代= 1,范数(grad f)= 0.67748
牛顿迭代= 2,范数(grad f)= 0.03644
牛顿迭代= 3,范数(grad f)= 0.0012167
牛顿迭代= 4,范数(grad f)= 1.3239e-06
牛顿迭代= 5,范数(grad f)= 7.7114e-13

为了看到计算出的最优点实际上是最大,这里是一个图表,说明了当随机扰动最优点时熵如何变化。所有的扰动都会使熵降低。 在此处输入图片说明

Matlab代码

1合1函数可最大程度地减少熵(新添加到此帖子中):https : //github.com/NickAlger/various_scripts/blob/master/maxEntropyMatrix.m


非常感谢你!我自己通过梯度提升简单地解决了它,但这可能更可靠。v必须在matlab文件中排名最高的事实是困扰我的唯一事情。
2014年

@NickAlger提供的链接无效,我可以请您看看吗?
2015年


@NickAlger算法可操作的矩阵是否有约束?该算法适用于具有复杂元素的矩阵吗?在我的情况下,SVD会在一段时间后失败,因为矩阵具有Nan。
2015年

我认为复数应该不是问题。该方法的局限性在于最优解不能具有重复的特征值,我猜这就是这里正在发生的事情。在这种情况下,该方法收敛到C方程中被零除的值。您可以尝试随机干扰输入,看看是否有帮助。上面引用的Overton论文中有解决此问题的方法,但是我的代码没有那么先进。
Nick Alger 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.