熵函数的凸性
假设随机变量
x
=
x
i
,
i
=
1
,
2
,
.
.
.
N
x=x_i,i=1,2,...N
x=xi,i=1,2,...N 的概率为
p
i
,
i
=
1
,
2
,
.
.
.
N
p_i,i=1,2,...N
pi,i=1,2,...N ,则熵可以表示为:
H
(
p
1
,
p
2
,
.
.
.
p
N
)
=
−
∑
n
=
1
N
p
i
log
2
(
p
i
)
,
∑
n
=
1
N
p
i
=
1
,
p
i
≥
0
H(p_1,p_2,...p_N)=-\sum_{n=1}^Np_i\log_2(p_i),\quad\sum_{n=1}^Np_i=1,p_i\geq0
H(p1,p2,...pN)=−n=1∑Npilog2(pi),n=1∑Npi=1,pi≥0
极大化熵等价于极小化
−
H
-H
−H ,原优化问题可以表示为:
m
i
n
i
m
i
z
e
−
H
(
p
1
,
p
2
,
.
.
.
p
N
)
s
u
b
j
e
c
t
t
o
∑
n
=
1
N
p
i
=
1
p
i
≥
0
\quad\quad\quad{\rm{minimize} } \quad -H(p_1,p_2,...p_N)\\ {\rm{subject \; to}} \quad \sum_{n=1}^Np_i=1\\ \quad\quad\quad p_i\geq0
minimize−H(p1,p2,...pN)subjectton=1∑Npi=1pi≥0
根据凸函数的性质,通过证明
∇
p
2
(
−
H
)
⪰
0
\nabla_p^2(-H)\succeq0
∇p2(−H)⪰0即可证明
−
H
-H
−H 的凸性:
∇
p
1
(
−
H
)
=
1
ln
(
2
)
(
1
+
ln
(
p
1
)
0
0
⋯
0
0
1
+
ln
(
p
2
)
0
⋯
0
⋮
⋮
⋮
⋱
⋮
0
0
0
⋯
1
+
ln
(
p
N
)
)
\nabla_p^1(-H)=\frac{1}{\ln(2)}\left( \begin{matrix} 1+\ln(p_1)& 0 &0 &\cdots &0 \\ 0 &1+\ln(p_2)& 0 &\cdots &0 \\ \vdots &\vdots &\vdots &\ddots &\vdots\\ 0 & 0&0 &\cdots &1+\ln(p_N)\\ \end{matrix} \right)
∇p1(−H)=ln(2)1⎝⎜⎜⎜⎛1+ln(p1)0⋮001+ln(p2)⋮000⋮0⋯⋯⋱⋯00⋮1+ln(pN)⎠⎟⎟⎟⎞
∇
p
2
(
−
H
)
=
1
ln
2
(
1
p
1
0
0
⋯
0
0
1
p
2
0
⋯
0
⋮
⋮
⋮
⋱
⋮
0
0
0
⋯
1
p
N
)
⪰
0
\nabla_p^2(-H)=\frac{1}{\ln2}\left( \begin{matrix} \frac{1}{p_1} & 0 &0 &\cdots &0 \\ 0 &\frac{1}{p_2} & 0 &\cdots &0 \\ \vdots &\vdots &\vdots &\ddots &\vdots\\ 0 & 0&0 &\cdots &\frac{1}{p_N} \\ \end{matrix} \right)\succeq0
∇p2(−H)=ln21⎝⎜⎜⎜⎛p110⋮00p21⋮000⋮0⋯⋯⋱⋯00⋮pN1⎠⎟⎟⎟⎞⪰0
由上可知,
−
H
-H
−H 是一个凸函数,且约束为线性约束,则该问题是凸优化问题。
求解凸优化问题
利用Matlab CVX工具箱求解这个凸优化问题。
clc
clear all
n_p = 32; %假设概率值的个数为32
cvx_begin
variable p(n_p)
minimize sum(rel_entr(p,1))
subject to
p>=0
sum(p)==1
cvx_end
result = -p'*log(p)/log(2)
其中 r e l _ e n t r ( x , y ) = x log ( x y ) {rel\_entr}(x,y)=x\log(\frac{x}{y}) rel_entr(x,y)=xlog(yx)。
求得熵的最大值: r e s u l t = 5 , p i = 1 32 {result}=5,p_i=\frac{1}{32} result=5,pi=321。
注意
若直接
m
i
n
i
m
i
z
e
s
u
m
(
p
.
∗
l
o
g
(
p
)
)
{\rm{minimize}} \quad {\rm{sum}}(p.*log(p))
minimizesum(p.∗log(p)),则工具箱会报错:
总结
首先证明了熵函数的凸性,之后通过CVX工具箱求解了这个凸优化问题。