From gradient decent to CDN
-
Upload
xiaoerxiaoer -
Category
Data & Analytics
-
view
241 -
download
5
Transcript of From gradient decent to CDN
从梯度下降到 LBFGS2015.01
主要内容 求解问题 求解方法
梯度下降法牛顿法拟牛顿法BFGS,L-BFGS
OWLQN
优化 什么是优化问题?
问题界定:注意这里我们都是无约束优化 即 x的取值为全空间 理论基础: x是否一定有最优解?
若 f为严格凸, x有最优解(凸函数的性质其实很苛刻,很难满足)• Luckily, logistic的 loss function是凸的否则,不一定,这时,我们求个局部最优就好了
优化求解思想 优化算法求解的基本思想:迭代 每次都保证: 问题:
怎么找下一个迭代点?• 不同方法的区别就在于此• 一般拆解成两步:定方向,定步长这样迭代下去一定能找到最优解?• 所有迭代法都只能保证局部最优• 对于凸函数,局部最优等价于最优• (因为凸函数只有一个局部最优) 这里 x为二维,图中圆圈表示等高线
解法思想关系图梯度下降
随机梯度下降
共轭梯度
解决样本太多计算量大的问题
解决狭长区域收敛慢的问题
牛顿法 拟牛顿法
下降方向:贪婪选取局部下降最快
下降方向:用二次泰勒展开在当前点局部拟合目标函数,下降方向为点到二次函数的极值点
解决二次导计算量大的问题BFGS
LBFGS
OWLQN
满足两个条件限制下,frobinious范数最小的一种拟牛顿法
解决 BFGS存储量太大的近似方法
解决 L1范数无法求导CDN
计算量太大
梯度下降法 Step1:定方向
思想:找最陡的方向将函数比作一座山,我们站在某个山坡上,往四周看,从哪个方向向下走一小步,能够下降的最快F在 xn上最陡的方向为在该点的负梯度方向
Step2:定步长( learning rate)下降最快也是有范围,只是在 xn上下降快步长一般人工调节 梯度方向
一元函数的梯度方向只有两个:左和右
只能说明在这个点的“附近”是下降最快
迭代开始
函数:100*X1^2+x2^2
初始点: (1,1)
负梯度:(200*X1,2*X2)
步长如果太大Alpha*200*X1会大于 1,表明迭代的时候跳过了极值点
第 100步
放大x2方向下降非常困难,因为 x1的限制,步长不能取太大步长=0.00001
步长=0.01Overshooting,来回荡来荡去步长=0.00001
梯度下降法伪代码&trick 代码
Trick: feature scaling如果不做 feature scaling,很容易出现右边的很扁的椭圆状等高线,导致低效
从第 100步到第1000步
梯度下降法的优缺点 优点
计算复杂度 O( N*step)空间复杂度 O( N),计算每一个方向的梯度
缺点接近极值点的时候,速度会很慢实操层面, alpha好选么?
共轭梯度法(待补充) Step1:定方向
思想:在负梯度和修正方向张成的平面找一个最优方向
牛顿法 定方向:
思想:用函数在该点的二次泰勒展开的二次函数极值点方向
点: y=x^3曲线: y= 3*(x-0.5)^2+0.25曲线为函数在( 1,1)这个点的二次泰勒展开函数,在(1,1)附近,两个函数取值近似相等
下降方向:红色所示(二维只有向左和向右)在这里和负梯度方向是一致的
二次函数极值点
牛顿法 选步长:不精确一维搜索 Wolfe conditions
Pk为下降方向
充分减小条件:f的减小量至少与 成正比在该区域的点到 0点的直线应该等式右边代表的直线下方
关于 alpha的一条直线
曲线在 0点的斜率
充分减小条件:函数在接受点的斜率要大于等于初始点的斜率的 c2 倍1 20 1c c 4
1 10c
一般
牛顿法 步长迭代方法
a1=0, a2=无穷, a=(a1+a2)/2如 a满足wolfe条件,步长即为 a否则二分重新计算 a(问题??哪个区间计算二分?)
伪代码
二阶 hessian 矩阵,对于大规模机器学习十亿 *十亿的矩阵是无法承受的
拟牛顿法 思想:找个矩阵近似 hessian 矩阵就好了 问题:怎样的相似性度量,能够保证近似矩阵也能同样迭代求导最优解? 条件:
对称 (Hij = Hji),二阶偏导要求Secant condition:gn为在 xn 处的一阶导数Secant condition有点类似于保证在 xn 处的一阶导数这个函数在该点的一阶泰勒展开与 Hessian 矩阵一致
BFGS BFGS是在满足下面两个条件下, forbinious范数最小的近似矩阵
求解结果:
Sn=Xn-Xn-1Yn=Gn-Gn-1
BFGS->LBFGS 代码 {Sk}{Yk}的存储仍然大
因此循环条件改成 For I = n,…,n-m-1Nocedal 1980
OWLQN-思想 前面所有的前提都是函数的一阶导数存在 但是,对于 L1 norm,在 0点处是不可导的 Luckily, L1 norm在每个象限内是存在导数的 同样的方法计算下降方向,但是步长选择必须保证在下降方向满足的那个象限
在该区域是一阶可导的从而可以得到下降方向但是在选取步长的时候,必须保证下一个点还在同一象限 下降方向
只有这一段是可行的
OWLQN- 细节 若当前迭代点有分量为 0,梯度取哪个?
若 xi ! =0, 与 相等,虚梯度等于梯度若 xi=0, 与 不相等注意: C>0故: 一定小于
说明当 x从负方向逼近当前点, f是增加的说明当 x从正方向逼近当前点, f是增加的
X1
X2
f=|x1|+|x2|若 x1=0 =1 = -1该点虚梯度为 0因此在 x1方向不变在 x2方向往下移
OWLQN- 细节 若当前迭代点有分量为 0,梯度取哪个?
若 xi ! =0, 与 相等,虚梯度等于梯度若 xi=0, 与 不相等注意: C>0故: 一定小于
说明当 x从负方向逼近当前点, f是增加的说明当 x从正方向逼近当前点, f是增加的
f= 越靠近中心,越小若 x1=0 小于 0 小于 0该点虚梯度为因此在 x1方向下移
X1
X2
CDN 当前的迭代轮数 ,当前迭代点 循环坐标下降法计算生成一系列的解 表示“第 轮,现在该更新第 个下标了”,也就是 计算第 个维度变量(从 到 )时 求解
二阶泰勒近似这是个二次函数
CDN计算量分析 求解内循环的主要流程在于遍历所有的 instance,计算 和 主要计算量是计算 遍历 instance是无法避免的,但是计算内积并不用遍历所有的 feature 对于所有的 instance,保存 ,然后移动到新点之后,计算 即可
OWLQN 与 CDN比较 OWLQN 计算梯度和目标函数需要遍历所有 instance的所有 feature CDN 为每个 instance保存数据,需要占用额外的大量内存,但是内循环只用把 instance过一遍,计算内积消耗较少,外循环需要遍历所有的 feature OWLQN VS CDN 快在哪?CDN所需迭代轮数较小,OWLQN一般要迭代100次,而 CDN要20次,刚开始,OWLQN收敛会比较慢,找到一个较好的方向后,收敛会比CDN快,CDN是刚开始收敛会快,由于我们不需要那么精确的结果,所以 CDN 总体时间比
OWLQN快
一些数字 OWLQN 单机版本处理的数据量是 20G instance数据和 600 万 feature,迭代约 90 轮,耗时共 10个小时