⚡机器学习⚡交替方向乘数法(Alternating Direction Method of Multipliers,ADMM)

Posted 府学路18号车神

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了⚡机器学习⚡交替方向乘数法(Alternating Direction Method of Multipliers,ADMM)相关的知识,希望对你有一定的参考价值。

最近研究二次判别分析(Quadratic Discriminant Analysis,QDA),发现运用到了交替方向乘数法(ADMM),就很迷。(关键是太菜

很多博主都是直接翻译或者搬运的,搜罗且了解了很多相关知识,那就来个大总结及其一些自己的想法吧!

内力有限,仅供学习交流)

确实很难,理论性很强,没有虚的,阅读完内容需要有“勇气”!



ADMM

背景

咱们先来了解了解,ADMM到底是个什么东西?

交替方向乘数法(Alternating Direction Method of Multipliers),从字面意思上理解,交替方向?是不是很迷?交替计算?交替求解?。。。难道是对偶问题?对偶求解?

先不管了,再看后半句,乘数法?咦~是不是感觉有点熟悉。

la.la.la…Lagrange乘数法???

(没错,就是Lagrange,直接干起来,等等,这里只说对了一半,具体咱们下面慢慢道来~)

ADMM是一个不算是太新的算法,其实就是一种求解优化问题计算框架, 适用于求解分布式凸优化问题,特别是统计学习问题。 ADMM 通过分解协调(Decomposition-Coordination)过程,将大的全局问题分解为多个较小较容易求解的局部子问题,并通过协调子问题的解而得到大的全局问题的解。

简单的理解就是,整个算法只是整合许多不少经典优化思路,然后结合现代统计学习所遇到的问题,提出了一个比较一般的比较好实施的分布式计算框架。

而他的历史可以追溯到看下面:

ADMM 最早分别由 Glowinski & Marrocco 及 Gabay & Mercier 于 1975 年和 1976年提出,并被 Boyd 等人于 2011 年重新综述并证明其适用于大规模分布式优化问题。由于 ADMM的提出早于大规模分布式计算系统和大规模优化问题的出现,所以在 2011 年以前,这种方法并不广为人知。

作为搞自动化、控制、优化、诊断…的本菜来说,当然是奔着优化求解去学习的。

先来看看一个大佬对目前大数据及其优化的见解,简直是一针见血,说出来我的心声:

业界一直在谈论大数据,对于统计而言,大数据其实意味着要不是样本量增加 n → ∞ n\\rightarrow \\infty n,要不就是维度的增加 p → ∞ p \\rightarrow \\infty p,亦或者两者同时增加,并且维度与样本量的增长速度呈线性或者指数型增长。在稀疏性的假设条件下,再加上一些正则性方法,统计学家可以证明各种加penalty的模型所给出的参数估计具有良好的统计性质,收敛速度也有保证,同时还会给出一些比较好的迭代算法,但是,他们并没有考虑真实环境下的所消耗的计算时间。虽然统计学家也希望尽量寻求迭代数目比较少的算法(比如one-step估计),但是面对真实的Gb级别以上的数据,很多时候我们还是无法直接用这些算法,原因是一般的硬件都无法支撑直接对所有数据进行运算的要求。如果想减少抽样误差,不想抽样,又想提高估计的精度,那么还是需要寻求其他思路,结合已有的模型思想来解决这些问题。在目前条件下,并行化、分布式计算是一种比较好的解决思路,利用多核和多机器的优势,这些好算法便可以大规模应用,处理大数据优势便体现出来了。对于统计而言,数据量越大当然信息越可能充分(假设冗余成分不是特别多),因为大样本性质本身就希望样本越多越好嘛。—源自此处

还需要知道的一点,我们都知道搞优化会遇到很多问题,无非是数据量上和维度的变化,关键词大都为:降维,收敛,迭代等等,而这里的ADMM算法不同于那些梯度下降法或其他改进的SGDM、RMSProp、Adam等等更多高级算法,应用的大多为以GB级别的数据量的数据集,如果与SGDM、Adam这些算法在同样的低维数据(这里指的是较GB级别低的)进行比较,收敛速度绝壁没它们好,很慢,实际的收敛速度往往比那些算法慢得多。ADMM的主要应用,主要是在解空间规模非常大的情况下(比如XY 都是存储空间上GB的超大规模矩阵),这个时候很多传统的方法不好用,强制需要分块求解,而且对解的绝对精度往往要求也没那么高。所以我觉得这是,需要提前知道的一点。

确实,这个算法很难理解,公式也很难,不敢保证,我能将其解释清楚,抱着互相学习的态度写这篇Blog!(望各位大佬批评指正)

具体结构,从ADMM需要用到的背景知识ADMM原理具体应用这几块进行解释。

下面咱们从基本框架结构入手吧~

背景知识

《Distributed Optimization and Statistical Learning via the Alternating Direction Method of Multipliers》文章中提到了一些预备知识,学过最优化或最优估计等优化课程的童鞋应该能够很快能够理解,对偶问题若很陌生的小伙伴,可以补充补充相关的知识。

先来了解一些基本算法思想吧~

对偶上升

对于凸函数的优化问题,对偶上升法核心思想就是引入一个对偶变量,然后利用交替优化的思路,使得两者同时达到optimal

读到这里,让我们想起咱们的主题,“交替方向”,是不是有点感觉了。
对于凸函数,我们只需要知道,凸优化问题有一个良好的性质即:局部最优解便是全局最优解
对凸函数有不解的地方,可看这位大佬的博客。

一个凸函数的对偶函数其实就是原凸函数的一个下界,因此可以证明一个较好的性质:在强对偶性假设下,即最小化原凸函数(primal)等价于最大化对偶函数(dual),两者会同时达到optimal。这种转化可以将原来很多的参数约束条件变得少了很多,以利于做优化。具体表述如下:
min ⁡ f ( x ) s . t . A x = b \\begin{array}{l} \\min \\quad f(x) \\\\s.t.\\quad A x=b \\end{array} minf(x)s.t.Ax=b

其中的s.t.约束项,有些地方可能写成“ A x + B z = C Ax+Bz=C Ax+Bz=C”的形式,原理都是一样的,只是多了一个变量而已,不用过于担心,理解到整个算法的思路就好。(先不透露为什么会出现这个公式,哈哈哈哈)

对于对偶问题有所不解的,可以简单理解成为原函数是Y关于X的函数,那么对偶的函数则为X关于Y的函数,这样理解是不是更容易一点呢。

其中 f ( x ) f(x) f(x)为目标函数也即是凸函数,然后拉格朗日干起来,则为:
L ( x , y ) = f ( x ) + y T ( A x − b ) L(x, y)=f(x)+y^{T}(A x-b) L(x,y)=f(x)+yT(Axb)
其中 y T y^{T} yT为拉格朗日乘子,对偶的 L ( x , y ) L(x,y) L(x,y)函数为:
g ( y ) = inf ⁡ x L ( x , y ) = − f ∗ ( − A T y ) − b T y g(y)=\\inf _{x} L(x, y)=-f^{*}(-A^{T}y)-b^{T}y g(y)=xinfL(x,y)=f(ATy)bTy
对于上式, inf ⁡ \\inf inf 代表的是一个下界,之所以用下确界而不是用min,可能是因为有些函数没有极值(定义域取不到),但有一个下确界。

y y y 相对于原 L ( x , y ) L(x,y) L(x,y)函数来说,是拉格朗日乘子的对偶变量(这里表现为矩阵的转置

现在我们来看我们的原问题(Primal)的对偶(Dual)函数:
max ⁡ y g ( y ) \\max_y \\quad g(y) ymaxg(y)
强对偶的假设下,原问题和对偶问题的解都是一样的,同时达到最优。

什么是强对偶性?就是指原问题的解与对偶问题的解是相同的,也即是: x ∗ = y ∗ x^{*}=y^{*} x=y

知道了原问题和对偶的解都是最优解,那么我们是不是可以从对偶问题入手,找到对偶问题的最优解 y ∗ y^{*} y,这样就能对应的求得原问题的解 x ∗ x^{*} x,
x ∗ = arg ⁡ min ⁡ x L ( x , y ∗ ) x^{*}=\\arg \\min_{x} L(x, y^{*}) x=argxminL(x,y)

arg 是变元(即自变量argument)的英文缩写。
arg min 就是使后面这个式子达到最小值时的变量的取值>
arg max 就是使后面这个式子达到最大值时的变量的取值

假如 g ( y ) g(y) g(y)可求其导数,那么利用梯度上升法交替更新参数,使得同时收敛到最优。迭代如下:
x k + 1 : = arg ⁡ min ⁡ x L ( x , y k ) ( x − 最 小 化 步 ) y k + 1 : = y k + α k ∇ g ( y ) = y k + α k ( A x k + 1 − b ) ( 对 偶 变 量 更 新 , α k 是 步 长 ) x^{k+1}:=\\arg \\min _{x} L\\left(x, y^{k}\\right) \\quad(x -最小化步 ) \\\\ y^{k+1}:=y^{k}+\\alpha^{k} \\nabla g(y)=y^{k}+\\alpha^{k}\\left(A x^{k+1}-b\\right) \\quad (对偶变量更新, \\alpha^{k} 是步长 ) xk+1:=argxminL(x,yk)(x)yk+1:=yk+αkg(y)=yk+αk(Axk+1b)(,αk)

由于以上需要的 f ( x ) 、 α f(x)、\\alpha f(x)α条件都非常的苛刻,难以满足其要求,一般应用中都不会用到对偶上升法。

对偶分解

虽然对偶上升的方法有所缺陷,导致我们在实际操作中会遇到重重困难。

但是世界万物都是存在着两面,有其弊也有其利,就如下面的太极双鱼图


那么,我们可以利用其优秀的一面,当目标函数 f f f可分的(separable)时候(参数亦或feature可分),整个问题可以拆解多个子参数问题,分块优化后汇集起来整体更新。

这也就是快接近咱们的主题了,分布式凸优化问题。

我们可以分块,然后并行化处理。

由此,我们可分离的目标函数为:
min ⁡ f ( x ) = ∑ i = 1 N f i ( x i ) s . t . A x = ∑ i = 1 N A i x i = b \\min \\quad f(x)=\\sum_{i=1}^{N} f_{i}\\left(x_{i}\\right) \\\\ s.t. \\quad Ax=\\sum_{i=1}^{N}A_ix_i=b minf(x)=i=1Nfi(xi)s.t.Ax=i=1NAixi=b
其中,对 A A A矩阵按照列分开。 x = ( x 1 , x 2 , . . . , x N ) , A x=(x_1,x_2,...,x_N),A x=(x1,x2,...,xN)A 可分解为 A = ( A 1 , A 2 , . . . , A N ) A=(A_1,A_2,...,A_N) A=(A<

以上是关于⚡机器学习⚡交替方向乘数法(Alternating Direction Method of Multipliers,ADMM)的主要内容,如果未能解决你的问题,请参考以下文章

深入分析:近端梯度下降法交替方向乘子法牛顿法

ADMM——交替方向乘子法

[ML]交替方向乘子法(ADMM)简明梳理

请问怎样用加法-移位实现定点乘除法?

Gym - 100712D Alternating Strings

拉格朗日乘数法