Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

From gradient decent to CDN

2,512 views

Published on

optimize algorithm

Published in: Data & Analytics
  • Be the first to comment

From gradient decent to CDN

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

×