分布式计算、统计学习与ADMM算法

在整理旧电脑时,才发现13年下半年电脑里有不少残文。老师说,东西搁下了再拿起来花费的时间和之前可能差不多。我一眼看过去这篇关于分布式计算的文章,貌似还真的没有了当时理解的深度和感觉。当时还想利用ADMM算法,把统计中常见的带惩罚的高维问题在此框架下用R重写一下,但是中途多种事情一耽搁,就早已抛之脑后。看来任何事情,真的还是需要坚持,哪怕拨点时间都是好的。先把一篇残文扔出来祭奠下过去的13年吧。公式多文字长,慎入!

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

本文是基于Stephen Boyd 2011年的文章《Distributed Optimization and Statistical Learning via the Alternating Direction Method of Multipliers》进行的翻译和总结。Boyd也给出了利用matlab的CVX包实现的多种优化问题的matlab示例。

1. 优化的一些基本算法思想

ADMM算法并不是一个很新的算法,他只是整合许多不少经典优化思路,然后结合现代统计学习所遇到的问题,提出了一个比较一般的比较好实施的分布式计算框架。因此必须先要了解一些基本算法思想。

1.1 Dual Ascent

对于凸函数的优化问题,对偶上升法核心思想就是引入一个对偶变量,然后利用交替优化的思路,使得两者同时达到optimal。一个凸函数的对偶函数其实就是原凸函数的一个下界,因此可以证明一个较好的性质:在强对偶性假设下,即最小化原凸函数(primal)等价于最大化对偶函数(dual),两者会同时达到optimal。这种转化可以将原来很多的参数约束条件变得少了很多,以利于做优化。具体表述如下:

minf(x)

s.t.Ax=b           ?L(x,y)=f(x)+yT(Ax?b)?对偶函数(下界)g(y)=infL(x,y)

在强对偶性的假设下,primal和dual问题同时达到最优。

x?=argminL(x,y?)

因此,若对偶函数g(y)g(y)可导,便可以利用梯度上升法,交替更新参数,使得同时收敛到最优。迭代如下:

xk+1:yk+1:=argminxL(x,yk)(x-最小化步)=yk+αk?g(y)=yk+αk(Axk+1?b)(对偶变量更新,αk是步长)xk+1:=arg?minxL(x,yk)(x-最小化步)yk+1:=yk+αk?g(y)=yk+αk(Axk+1?b)(对偶变量更新,αk是步长)

当gg不可微的时候也可以将其转化下,成为一个所谓的subgradient的方法,虽然看起来不错,简单证明下即可知道xkxk和ykyk同时可达到optimal,但是上述条件要求很苛刻:f(x)f(x)要求严格凸,并且要求αα选择有比较合适。一般应用中都不会满足(比如f(x)f(x)是一个非零的仿射函数),因此dual ascent不会直接应用。

时间: 2024-12-24 21:55:05

分布式计算、统计学习与ADMM算法的相关文章

?统计学习精要(The Elements of Statistical Learning)?课堂笔记(一)

前两天微博上转出来的,复旦计算机学院的吴立德吴老师在开?统计学习精要(The Elements of Statistical Learning)?这门课,还在张江...大牛的课怎能错过,果断请假去蹭课...为了减轻心理压力,还拉了一帮同事一起去听,eBay浩浩荡荡的十几人杀过去好不壮观!总感觉我们的人有超过复旦本身学生的阵势,五六十人的教室坐的满满当当,壮观啊. 这本书正好前阵子一直在看,所以才会屁颠屁颠的跑过去听.确实是一本深入浅出讲data mining models的好书.作者网站上提供免

?统计学习精要(The Elements of Statistical Learning)?课堂笔记(三)

照例文章第一段跑题,先附上个段子(转载的哦~): I hate CS people. They don't know linear algebra but want to teach projective geometry. They don't know any probability but want to use graphical models. They don't understand stats at all but still do machine learning like c

统计学习概念

统计学习是基于数据构建统计模型从而对数据进行预测与分析,统计学习由监督学习,非监督学习,半监督学习和强化学习等组成 统计学习由模型的假设空间(学习的模型属于某个函数的集合),模型选择的准则,及模型学习的算法 统计学习方法步骤如下: (1)得到一个有限的训练数据集合 (2)确定包含所有可能的模型的假设空间(学习模型的集合) (3)确定模型选择的准则,即学习的策略 (4)实现求解最优模型的算法即学习的算法 (5)通过学习方法选择最优模型 (6)利用学习的最优模型对新数据进行预测或分析 1.监督学习

统计学习方法一:基础

对统计学习方法中的基础概念和理论做一个总结.逐步更新. 内容摘自<统计学习方法>第一章,第一章内容基本全是重要内容,因此此篇部落格算是一个加入了自己理解思路的读书笔记. 一.统计学习方法包含哪几种? 监督学习:用于学习的数据集都是输入\输出数据对(有标记的样本),学习的任务是找到输入与输出的对应规则.主要用于分类.标注.回归分析. 非监督学习:用于学习的数据集只有输入(未标记的样本),学习的任务是对于数据进行分析,找到输出.主要用于聚类. 半监督学习:是监督学习和非监督学习的结合,它主要考虑如

?统计学习精要(The Elements of Statistical Learning)?课堂笔记(二)

继续一周一次的课堂笔记 :D 昨天去晚了站着听讲,感觉好好啊,注意各种集中.想想整个教室里面就是我和老师是站着的,自豪感油然而生. 第二次课讲的东西依旧比较简单,是这本书第二章的前半部分.作为一个好久之前已经预习过的孩子,我表示万分的得意(最小二乘法难道不是三四年前就学过的?话说以后我再面人的时候,就让他推导最小二乘估计量,嘻嘻...考验一下基本功). ------------原谅我的废话,笔记开始------------ 简单预测方法:最小二乘法(以下沿用计量经济学的习惯,简称OLS) OLS

统计学习基础(HGL的读书笔记)

统计学习:统计学习是关于计算机基于数据构建概率统计模型并运用模型对数据进行预测与分析的一门学科,统计学习也成为统计机器人学习[1]. 统计学习分类:有监督学习与无监督学习[2]. 统计学习三要素:模型.策略与算法[1]. 统计学习的对象:统计学习的对象是数据.统计学习从数据出发,提取数据的特征,抽取数据的模型,发现数据中的指示,又回到对数据的分析与预测中去[1]. 统计学习的目的:建立输入与输出的关系,评价输入与输出的关系,即Y = f(X) + ε.其中输入变量X可以称为预测变量.自变量.属性

统计学习精要

统计学习精要(The Elements of Statistical Learning)课堂笔记系列 Posted at January 2nd, 2014 Filed under 课程教材:The Elements of Statistical Learning http://www-stat.stanford.edu/~tibs/ElemStatLearn/ 授课人:复旦大学计算机学院 吴立德教授 分节课堂笔记: 统计学习精要(The Elements of Statistical Lear

模式匹配之surf----特征点检测学习_2(surf算法)

在上篇博客特征点检测学习_1(sift算法) 中简单介绍了经典的sift算法,sift算法比较稳定,检测到的特征点也比较多,其最大的确定是计算复杂度较高.后面有不少学者对其进行了改进,其中比较出名的就是本文要介绍的surf算法,surf的中文意思为快速鲁棒特征.本文不是专门介绍surf所有理论(最好的理论是作者的论文)的,只是对surf算法进行了下整理,方便以后查阅. 网上有些文章对surf做了介绍,比如: http://wuzizhang.blog.163.com/blog/static/78

scikit-learning教程(二)统计学习科学数据处理的教程

统计学习:scikit学习中的设置和估计对象 数据集 Scikit学习处理来自以2D数组表示的一个或多个数据集的学习信息.它们可以被理解为多维观察的列表.我们说这些阵列的第一个轴是样本轴,而第二个轴是 特征轴. scikit:iris数据集附带的一个简单示例 >>> >>> from sklearn import datasets >>> iris = datasets.load_iris() >>> data = iris.data