查了一下网上的收敛性证明,看的我头大,我觉得原因就是那些博客都是抄来抄去的,理解的也不一定到位。
此处来简单清晰的证明一下,原理就用数学上的单调收敛定理之一:举个例子,如果一个实数序列是递减且有下界,则它的最大下界就是它的极限。
单调收敛定理的证明,数学教材上(数理统计相关的书应该有)。
换句话说,只要证明迭代算法:1)单调;2)有界,就可以说明目标函数最终一定会收敛,当然收敛数值不一定是这个界。
再举个例子,比如一个函数每次迭代都递减,且这个函数恒大于0,经过无数次迭代,函数就会收敛,收敛值一定不小于0
好了,定理的解释就到这里,怎么证明和理解都是数学教材上的,也可以网上查到不多说了。
这一系类优化思路,本质上通俗说是优化函数 m i n f ( x 1 , x 2 , . . . x n ) min\ f(x_1,x_2,...x_n) min f(x1,x2,...xn)时,每次固定一部分参数,然后把另外参数当做变量求极值/下降,然后变动的参数固定住,原本固定的参数当做变量去求极值/下降。西瓜书讲SVM的啥啥啥smo算法就是这个逻辑。
仍然不耍公式,但是我想应该很清晰,公式自己纸上画画应该轻松,当然严谨会丢失一些,道理是一样的!
下面以K-means来说说收敛性,直观一些,就以平方损失和为例,问题:
m i n J ( u 1 , u 2 , . . . u k ) = 1 / 2 ∑ i = 1 m ∑ j = 1 k ( x i − u j ) 2 min\ J(u_1,u_2,...u_k)\ =\ 1/2\sum_{i=1}^{m}\sum_{j=1}^{k}(x_i-u_j)^2 min J(u1,u2,...uk) = 1/2∑i=1m∑j=1k(xi−uj)2
求驻点
u j = 1 / N j ∑ i = 1 N j x i u_j =1/N_j\sum_{i=1}^{N_j}x_i uj=1/Nj∑i=1Njxi,其余类中心同理可得
文字表述:找到k个中心,使得m个点到这k个中心的距离整体最小
咱们来看下分解步骤:
(1)更新m个点的归属类别:将m个点归属到已有的k个中心,其中的判定就是离哪个中心点近,就归属到那一类,此时损失函数为 J 0 ( u 1 , u 2 , . . . u k ) J_0(u_1,u_2,...u_k) J0(u1,u2,...uk)。
这里想想,在中心确定的情况下,如果不归属到最近的中心,归属到其他中心,此刻损失函数假设为 J 1 ( u 1 , u 2 , . . . u k ) J_1(u_1,u_2,...u_k) J1(u1,u2,...uk),一定有 J 0 ( u 1 , u 2 , . . . u k ) ≤ J 1 ( u 1 , u 2 , . . . u k ) J_0(u_1,u_2,...u_k)\leq J_1(u_1,u_2,...u_k) J0(u1,u2,...uk)≤J1(u1,u2,...uk)。
方便理解下,举个例子(公式自己也好写,我敲latex太不熟练),比如其中m-1个点都归属到最近的中心了,某一个点没有归属到最近中心,那么如果把这个点放到最近的那个中心,损失函数是不是就降低了呢?
也就是说,这个步骤实现了一次坐标下降,也就是在固定中心时,通过判断m个点的最近归属,降低了 J ( u 1 , u 2 , . . . u k ) J(u_1,u_2,...u_k) J(u1,u2,...uk)
(2)在步骤(1)的基础上,这个时候归属类别已经确定了,此时的损失函数为 J 0 ( u 1 , u 2 , . . . u k ) J_0(u_1,u_2,...u_k) J0(u1,u2,...uk),这里假设第一个类别有 N 1 N_1 N1个点,中心为 u j u_j uj,这个类别的损失函数部分为 1 / 2 ∑ i = 1 N 1 ( x i − u 1 ) 2 1/2\sum_{i=1}^{N_1}(x_i-u_1)^2 1/2∑i=1N1(xi−u1)2
不难证明不等式:
1 / 2 ∑ i = 1 N 1 ( x i − u 1 ) 2 ≥ 1 / 2 ∑ i = 1 N 1 ( x i − x a v e ) 2 1/2\sum_{i=1}^{N_1}(x_i-u_1)^2\geq1/2\sum_{i=1}^{N_1}(x_i-x_{ave} )^2 1/2∑i=1N1(xi−u1)2≥1/2∑i=1N1(xi−xave)2其中 x a v e x_{ave} xave为 N 1 N_1 N1个点的均值中心。
(展开,移到左边,恰好可以配成平方和形式,可以拿 N 1 = 2 N_1=2 N1=2这种简单情况试试)
也就是说,固定归属类别,通过把均值中心作为类别中心,降低了 J ( u 1 , u 2 , . . . u k ) J(u_1,u_2,...u_k) J(u1,u2,...uk)
重复(1)和(2),另外其实这每一步不仅仅是降低了 J ( u 1 , u 2 , . . . u k ) J(u_1,u_2,...u_k) J(u1,u2,...uk),而且是在那一步限制条件下,最大化降低,求了极值
emmm, J ( u 1 , u 2 , . . . u k ) ≥ 0 J(u_1,u_2,...u_k) \geq0 J(u1,u2,...uk)≥0
emmm,单调,有界,收敛。结束
我觉得对于理解算法核心的人来说,应该比那些疯狂的公式推导足够让人理解了。