本人才疏学浅,竟被这个概念折磨了一年之久。研究生生涯,真的是太惭愧了。
本文对聚点的介绍侧重于理解。
1 聚点基本知识
1.1 聚点的定义
聚点,英文叫cluster point,或者limit point,是无穷数列 { x k } \{x^k\} { xk}的一个性质。注意,有限的数列是没有聚点的。
聚点的定义:
翻译一下就是,若c是数列A的一个cluster point,那么对于任意小的 δ > 0 \delta>0 δ>0, c c c的邻域 V δ ( c ) V_\delta(c) Vδ(c)(除了 c c c本身)中至少存在一个数列A集合中的点。
反过来说:所以如果x不是数列A的一个cluster point,那么一定存在一个足够小的 δ > 0 \delta>0 δ>0,x的邻域 V δ ( c ) V_\delta(c) Vδ(c)里不包含数列A集合中的点。
1.2 聚点的性质
1.3 聚点的重要定理
重要定理:任何有界的无限数列至少有一个聚点。
数列的有界指的是数列中元素的最大值最小值都是有界限的。
2 聚点常用在哪些地方
2.1 用在哪里
一个优化问题表现形式如下
min x f ( x ) s.t. x ∈ Ω (1) \min_{x}~f(x) \text{ s.t. }x\in\Omega \quad\quad \text{(1)} xmin f(x) s.t. x∈Ω(1)
其中 Ω \Omega Ω是自变量 x x x的可行域。优化问题经常没有显式解。
要解决这个优化问题,通常要设计一个算法,无论是梯度下降法还是什么方法,算法会经历好多步的迭代,每一步迭代产生的迭代点就是算法产生的数列的元素,记作 { x k } \{x^k\} { xk}。
我们如何判断我们设计的算法会收敛到我们想要的解呢。首先,我们想要什么解。当然是让(1)式的目标函数值 f ( x ) f(x) f(x)最小的 x x x了。如果 Ω \Omega Ω是凸集合且 f ( x ) f(x) f(x)是凸函数,那(1)问题就是凸优化问题了,任何(1)问题的局部最小点都是全局最小点。如果(1)不是凸优化问题,情况就复杂一点。通常,我们求(1)的一阶最优点就可以了。那,这个一阶最优点是个啥。先把(1)问题写成另外一种形式,
min x f ( x ) s.t. g ( x ) ≤ 0 , h ( x ) = 0 (2) \min_{x}~f(x) \text{ s.t. } g(x)\le 0, h(x)=0 \quad\quad \text{(2)} xmin f(x) s.t. g(x)≤0,h(x)=0(2)
这里为了简单,假设(1)问题只有1个不等式约束和1个等式约束。KKT条件是很常见的可以刻画一阶最优点的条件。
∇ f ( x ) + λ g ( x ) + v h ( x ) = 0 (3.1) g ( x ) ≤ 0 (3.2) h ( x ) = 0 (3.3) λ ≥ 0 (3.4) λ g ( x ) = 0 (3.5) \nabla f(x)+\lambda g(x)+v h(x)=0 \text{ (3.1)} \\ g(x)\le0\quad\quad \quad \quad \quad \quad \quad \quad \text{ (3.2)}\\ h(x)=0 \quad \quad \quad \quad \quad \quad \quad \quad \text{ (3.3)}\\ \lambda\ge 0 \quad \quad \quad \quad \quad \quad \quad \quad \quad \text{ (3.4)}\\ \lambda g(x)=0\quad \quad \quad \quad \quad \quad \quad \text{ (3.5)} ∇f(x)+λg(x)+vh(x)=0 (3.1)g(x)≤0 (3.2)h(x)=0 (3.3)λ≥0 (3.4)λg(x)=0 (3.5)
其中(3.2)和(3.3)是原始可行性条件, ( 3.4 ) (3.4) (3.4)是对偶可行性条件,(3.5)是互补松弛条件,(3.1)叫啥突然不是很确定,先叫它拉格朗日条件吧。
我们把原问题(2)满足(3)式的解x称作一阶最优点,或者一阶驻点。我们判断设计的算法有效性的一个重要标准是算法产生的序列 { x k } \{x^k\} { xk}能否收敛到原问题的一阶驻点。或者我们准确的说,若序列 { x k } \{x^k\} { xk}的每一个聚点都是原问题的一阶驻点,那么算法的收敛性就有保证了。
2.2 如何使用
介绍一类使用方式吧。
如果当前迭代点是 x k x^k xk,得到下一个解 x k + 1 x^{k+1} xk+1的过程我们称作是解子问题。比如梯度下降的更新方式是 x k + 1 = x k − α k ∇ f ( x k ) x^{k+1}=x^k-\alpha^k\nabla f(x^k) xk+1=xk−αk∇f(xk),实际上相当于解了
min x f ( x k ) + ∇ f ( x k ) T ( x − x k ) + 1 2 α k ∥ x − x k ∥ 2 2 \min_x f(x^k)+\nabla f(x^k)^T(x-x^k)+\frac{1}{2\alpha^k}\|x-x^k\|_2^2 xminf(xk)+∇f(xk)T(x−xk)+2αk1∥x−xk∥22
这个子问题。
如果算法的更新方式不变,我们得到了 x k + 1 = x k x^{k+1}=x^{k} xk+1=xk,那么 x k + 2 , x k + 3 , … x^{k+2}, x^{k+3},\dots xk+2,xk+3,…都等于 x k x^k xk,迭代就固定不变了。之前我们列了原问题的KKT条件(3),每个子问题也是有KKT条件的。如果迭代点不变了,那么把子问题的KKT条件和原问题的KKT条件对比,如果发现 x k x^k xk是满足原问题的KKT条件的,那很圆满了,我们已经得到了原问题的一阶驻点 x k x^k xk了。
如果算法产生了无限的序列,但是没有那个 k k k是满足 x k + 1 = x k x^{k+1}=x^{k} xk+1=xk的呢。这个时候我们需要证明 { x k } \{x^k\} { xk}的每一个聚点都是原问题的一阶最优点了。
如果 x ∗ x^* x∗是 { x k } \{x^k\} {
xk}的一个聚点,我们只需要证明在 x ∗ x^* x∗处展开的子问题的下一个迭代点依然是 x ∗ x^* x∗就行了,当然,前提是 x ∗ x^* x∗在 x ∗ x^* x∗处展开的子问题的可行域里,一般设计算法都能成立的。通常运用反证法,如果在 x ∗ x^* x∗处展开的子问题的下一个迭代点不是是 x ∗ x^* x∗,是 x ^ \hat{x} x^。我们记 x ∗ x^* x∗处展开的子问题目标函数为 p ( x ; x ∗ ) p(x;x^*) p(x;x∗),那么一定有个足够小的 δ \delta δ满足
p ( x ∗ ; x ∗ ) − p ( x ^ ; x ∗ ) > δ (4) 。 p(x^*;x^*)-p(\hat{x};x^*)>\delta \quad\text{(4)}。 p(x∗;x∗)−p(x^;x∗)>δ(4)。
当 k k k足够大时,一定会有
p ( x k ; x k ) − p ( x k + 1 ; x k ) < δ 4 (5) p(x^k;x^k)-p(x^{k+1};x^k)<\frac{\delta}{4}\quad\text{(5)} p(xk;xk)−p(xk+1;xk)<4δ(5)
我们要证的就是(5)式会出现矛盾。
当 k k k足够大,有 x k → x ∗ x^k\rightarrow x^* xk→x∗,这时会有 p ( x ∗ ; x k ) − p ( x k + 1 ; x k ) < δ 4 (6) p ( x ^ ; x ∗ ) − p ( x ^ ; x k ) < δ 4 (7) p(x^*;x^k)-p(x^{k+1};x^k)<\frac{\delta}{4}\quad\text{(6)}\\ p(\hat{x};x^*)-p(\hat{x};x^k)<\frac{\delta}{4}\quad\text{(7)} p(x∗;xk)−p(xk+1;xk)<4δ(6)p(x^;x∗)−p(x^;xk)<4δ(7)
注意,(6)和(7)你要看具体情况分析得出来的,我不敢保证一定会成立。按 x k → x ∗ x^k\rightarrow x^* xk→x∗一般情况下都能成立的。
根据(4),(6),(7),宗旨就是凑(以下是其中一种凑法),我们会有
p ( x k + 1 ; x k ) − p ( x ^ ; x k ) = p ( x k + 1 ; x k ) − p ( x ∗ ; x k ) + p ( x ∗ ; x k ) − p ( x ^ ; x ∗ ) + p ( x ^ ; x ∗ ) − p ( x ^ ; x k ) > δ 4 + δ − δ 4 = δ 2 \begin{aligned} &p(x^{k+1};x^k)-p(\hat{x};x^k)\\ =&p(x^{k+1};x^k)-p(x^*;x^k)+p(x^*;x^k)-p(\hat{x};x^*)+p(\hat{x};x^*)-p(\hat{x};x^k)\\ \gt &\frac{\delta}{4}+\delta-\frac{\delta}{4}\\=&\frac{\delta}{2} \end{aligned} =>=p(xk+1;xk)−p(x^;xk)p(xk+1;xk)−p(x∗;xk)+p(x∗;xk)−p(x^;x∗)+p(x^;x∗)−p(x^;xk)4δ+δ−4δ2δ
你发现, x k + 1 x^{k+1} xk+1按理说是第k个子问题的最优解,怎么反而 x ^ \hat{x} x^在第k个子问题上的目标函数更低了呢,跟(5)妥妥的就矛盾了。
所以在 x ∗ x^* x∗处展开的子问题得到的解一定是 x ∗ x^* x∗,所以 { x ∗ } \{x^*\} { x∗}的每一个聚点都是原问题的一阶最优点。
以上为个人学习思考,如果错漏,轻喷。