凸集的定义是:集合C内任意两点间的线段任然包含在集合中,则此集合称为凸集。形式化的方法描述:以任意一点作为原点,对于集合内任意两点 x 1 ⃗ \vec{x_1} x1, x 2 ⃗ \vec{x_2} x2,和任意一个处于[0,1]的实数 θ \theta θ,都有: θ x 1 ⃗ + ( 1 − θ ) x 2 ⃗ ∈ C \theta \vec{x_1}+(1-\theta)\vec{x_2}\in C θx1+(1−θ)x2∈C
凸函数在优化中经常用到,这因为凸函数的局部最优点就是全局最优点。因此在机器学习中,我们的优化目标通常是凸函数。凸函数的定义域是凸集,类似于凸集的性质它满足: f ( θ x 1 + ( 1 − θ ) x 2 ) ≤ θ f ( x 1 ) + ( 1 − θ ) f ( x 2 ) f(\theta x_1+(1-\theta)x_2)\leq\theta f(x_1)+(1-\theta)f(x_2) f(θx1+(1−θ)x2)≤θf(x1)+(1−θ)f(x2)如下图所示:
这是一个典型的凸函数, f ( x 1 ) ≤ f ( x 2 ) 且 x 1 ≤ x 2 f(x_1)\leq f(x_2)且x_1\leq x_2 f(x1)≤f(x2)且x1≤x2,所以有
f ( x 2 ) ≥ θ f ( x 1 ) + ( 1 − θ ) f ( x 2 ) ≥ f ( x 1 ) f(x_2)\geq \theta f(x_1)+(1-\theta)f(x_2)\geq f(x_1) f(x2)≥θf(x1)+(1−θ)f(x2)≥f(x1) x 2 ≥ θ x 1 + ( 1 − θ ) x 2 ≥ x 1 x_2\geq \theta x_1+(1-\theta)x_2\geq x_1 x2≥θx1+(1−θ)x2≥x1,
所以有 f ( θ x 1 + ( 1 − θ ) x 2 ) ≤ θ f ( x 1 ) + ( 1 − θ ) f ( x 2 ) f(\theta x_1+(1-\theta)x_2)\leq\theta f(x_1)+(1-\theta)f(x_2) f(θx1+(1−θ)x2)≤θf(x1)+(1−θ)f(x2)
此外凸函数还有两个重要导数性质: x 1 , x 2 x_1,x_2 x1,x2是定义域上任意两个值,则有: f ( x 2 ) ≥ f ( x 1 ) + ▽ f ( x ) ( x 2 − x 1 ) f(x_2)\geq f(x_1)+\bigtriangledown f(x)(x_2-x_1) f(x2)≥f(x1)+▽f(x)(x2−x1)
凸函数二阶导还满足: ▽ 2 f ( x ) ≥ 0 \bigtriangledown^2f(x)\geq 0 ▽2f(x)≥0
我们可以通过凸函数性质来证明KL散度的非负性,KL散度表示为 K L ( p ∣ ∣ q ) = − ∑ x p ( x ) l o g ( p ( x ) q ( x ) ) KL(p||q)=-\sum_x p(x)log(\frac{p(x)}{q(x)}) KL(p∣∣q)=−x∑p(x)log(q(x)p(x))表示两个分布的接近程度,越接近,KL散度越小。由于log是凸函数,所以有:
K L ( p ∣ ∣ q ) ≥ − l o g [ ∑ x p ( x ) l o g p ( x ) q ( x ) ] = − l o g ( ∑ x q ( x ) ) = 0 KL(p||q)\geq-log[\sum_x p(x)log\frac{p(x)}{q(x)}]=-log(\sum_x q(x))=0 KL(p∣∣q)≥−log[x∑p(x)logq(x)p(x)]=−log(x∑q(x))=0