优化算法小记

算法=模型+评估+优化算法
不同的模型的模型采用不同的损失函数,不同的损失函数优化难度不同
常用的损失函数:

  • 0/1 error:Loss= I(f,y),I是指示函数。简单直观;不可微,往往不能直接优化
  • Hinge:L=max{0,1-fy}。是0/1 error的一个凸上界。往往通过优化Hinge来代替优化0/1 error。也叫代理损失函数
  • 在fy=1处不可微,不能使用梯度下降法,往往使用次梯度下降法
  • 对于fy>1的点损失函数才为0,即不仅要求分类正确,而且要求有足够的确信度
  • 在SVM在有使用。引入松弛变量的最大边界优化等价于优化Hinge+L2
  • 交叉熵损失函数:
    • 总共有两种形式:
      • L o s s = − [ y ln ⁡ y ^ + ( 1 − y ) ln ⁡ ( 1 − y ^ ) ] Loss=-[y\ln\hat y+(1-y)\ln(1-\hat y)] Loss=[ylny^+(1y)ln(1y^)]这是最熟悉常用的形式
      • L o s s = ln ⁡ ( 1 + exp ⁡ ( − f y ) ) Loss=\ln(1+\exp(-fy)) Loss=ln(1+exp(fy))可以证明两种形式等价
    • 是0/1 error的一个凸上界。
    • 处处可微、可使用梯度下降求解;对所有点都做惩罚,对outlier敏感
  • 似然损失函数:使出现的事件概率最大
  • 对数损失函数。从数学上来说,这个没什么特别的。对损失函数取对数的原因:
    • 不影响单调性

    • 对机器来说,加法运算比乘法运算快;如果表达式里含有指数形式,也可能加快运算。

    • 通常是似然函数取对数,似然函数是一系列概率的乘积,当相乘的项数量足够大时,乘积接近于0,计算机会出现浮点数下溢,使结果偏差大。甚至直接取到0从而导致不能计算。

    • 平方损失函数: L o s s = ( y − f ) 2 Loss= (y-f)^2 Loss=(yf)2。处处可微,可使用梯度下降求解;距离真实值越远,惩罚越大,容易受到outlier的影响。从鲁棒性上来说,平均绝对百分比误差会更好: ∑ ∣ y − f ∣ y ∗ 100 / n \sum\frac{|y-f|}{y}*100/n yyf100/n

    • 绝对损失函数: L o s s = ∣ y − f ∣ Loss= |y-f| Loss=yf。在y=f处不可微。相当于做中值回归,对outlier的鲁棒性会更好

    • Huber损失函数: L o s s = { ( f − y ) 2 , ∣ f − y ∣ ≤ δ 2 δ ∣ f − y ∣ − δ 2 , ∣ f − y ∣ > δ Loss= \{\begin{aligned} & (f-y)^2,& |f-y|\leq\delta\\ & 2\delta|f-y|-\delta^2,&|f-y|>\delta\\ \end{aligned} Loss={(fy)2,2δfyδ2,fyδfy>δ

      • 这样处理后,就会处处可微了。和泄露的relu一个道理。
      • 同时考虑了可导性和鲁棒性

优化类型

  • 凸优化,目标函数是凸函数。一般比较容易求解,通常可以直接使用随机梯度下降求解。
  • 非凸优化,例如PCA中的优化问题,一般非凸比较难解。不过PCA可以通过奇异值分解直接求解

常见优化算法

  • 有约束的优化算法:通常通过引入拉格朗日乘子转换为无约束的优化
  • 无约束:
    • 直接求解:需要是凸函数、梯度为0处的导数有解析解
    • 迭代近似求解:利用泰勒展开,近似估计逼近最佳解。通常有取一阶展开的梯度下降、取二阶的牛顿法
    • 牛顿法通常比梯度下降快。牛顿法在高维度下的Hessian矩阵求逆运算复杂大;牛顿法容易收敛到鞍点

梯度验证:计算梯度时,如果式子比较复杂,很可能会计算错误。利用泰勒展开和拉格朗日余项可得梯度的误差估计约为 ∣ L ( θ + ϵ ) − L ( θ − ϵ ) 2 ϵ − ∂ L ( θ ) ∂ θ ∣ ≈ M h k , k = 1 , 2 |\frac{L(\theta+\epsilon)-L(\theta-\epsilon)}{2\epsilon}-\frac{\partial L(\theta)}{\partial \theta}|\approx Mh^k,\quad k=1,2 2ϵL(θ+ϵ)L(θϵ)θL(θ)Mhk,k=1,2当使用k是迭代所取的泰勒展开阶数。
实际中,我们通常通过下式做梯度验证: ∣ L ( θ + ϵ ) − L ( θ − ϵ ) 2 ϵ − ∂ L ( θ ) ∂ θ ∣ &lt; h |\frac{L(\theta+\epsilon)-L(\theta-\epsilon)}{2\epsilon}-\frac{\partial L(\theta)}{\partial \theta}|&lt; h 2ϵL(θ+ϵ)L(θϵ)θL(θ)<h如果出现等号,则可能

  1. M较大。把h取为原来的十分之一,如果上式成立,此时使用更新后的h
  2. 梯度计算错误

梯度下降法:每次更新时都需要遍历计算训练集,运算量大、耗时长,精确度高
随机梯度下降法:每次只更新一个随机的不满足目标效果的样本。分类时是更新错误样本,回归时则是更新y-f较大的样本。大大加快了收敛速度,且适用于在线学习系统
小批量梯度下降法:随机梯度下降法每次只随机更新一个样本点,容易收到outlier和随机性的影响,算法不稳定。我们可以每次更新若干个数量的样本。通常16,32,64,512。这样在速度和精确度上衡量,不仅加快了运算速度还能增加算法稳定性。同时还能使用高度优化的矩阵运算。

随机梯度下降和小批量梯度下降收敛都不够稳定,甚至不收敛。很可能模型本身没有任何问题。
如果梯度下降比作球往山下滚。则最怕山谷和鞍点。山谷两边的比较陡峭,梯度大,很可能球在两个山壁间来回碰撞,导致下山慢甚至不下山。鞍点是当前点梯度为0,附近梯度接近0,且附近有梯度下降的点,当前点远不是最低点,这时球到这个地方就很可能停下来了,就在半山腰的某个较为平坦的地方。

为了解决这两个情形,有以下优化算法:动量算法(Momentum)、AdaGrad、Adam
对于山谷,我们还可以通过数据标准化来加速收敛。

Momentum:现实中球在滚下山的时候是有惯性的,惯性更可能使球快速通过山谷和冲过鞍点。迭代公式变为: v t = γ v t − 1 + η g t v_t=\gamma v_{t-1}+\eta g_t vt=γvt1+ηgt θ t + 1 = θ t − v t \theta_{t+1}=\theta_t-v_t θt+1=θtvt v t v_t vt相当于当前的速度,当前速度受到前一时刻速度 v t − 1 v_{t-1} vt1、加速度 g t g_t gt、阻力系数 γ \gamma γ的共同影响。
下山过程中重力加速度一直存在,故球始终有向下的加速度,很可能冲过鞍点。在山谷中左右碰撞时的弹力加速度互相抵消,球向下的加速度不变,故速度受到的影响很小,
所以能快速通过山谷。
由于刻画惯性的物理变量是动量,故称为动量算法。

AdaGrad:使用梯度下降时,我们希望刚开始的时候步长大,加快学习速度;一定时间后希望步长小,避免冲过最低点太多。则我们可以使用自适应的步长调节方法。进一步,如果数据是稀疏的,则参数也很可能是稀疏的。我们希望稀疏的特征更新较大的步长、越不稀疏的特征更新的步长越小。例如文本问题中有的词出现频率接近0,更新频率低,更新步长可以大点;有的词频率很高,更新频率高,更新步长小点。AdaGrad采用历史梯度的平方和来表示稀疏性,值越小,稀疏性越强。更新公式为: θ t + 1 , i = θ t , i − η ∑ k = 0 t g k , i 2 + ϵ g t , i \theta_{t+1,i}=\theta_{t,i}-\frac{\eta}{\sqrt{ \sum_{k=0}^tg_{k,i}^2+\epsilon}}g_{t,i} θt+1,i=θt,ik=0tgk,i2+ϵ ηgt,i
其中 θ t , i \theta_{t,i} θt,i中的i表示第i个分量, ϵ \epsilon ϵ是为了使分母不为0。由于第二式的分母越来越大,相当于变相的使步长越来越小,实现了自动调节步长的功能。又由于是各自计算各个分量的,故实现了更新次数多的步长小,更新次数少的步长大。

Adam:动量考虑了惯性保持、AdaGrad考虑了环境感知。都能加快收敛。Adam综合了他们两者的有点。具体公式如下: m t = β 1 m t − 1 + ( 1 − β 1 ) g t m_t=\beta_1m_{t-1}+(1-\beta_1)g_t mt=β1mt1+(1β1)gt v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 v_t=\beta_2v_{t-1}+(1-\beta_2)g_t^2 vt=β2vt1+(1β2)gt2 m ^ t = m t 1 − β 1 t \hat m_t=\frac{m_t}{1-\beta_1^t} m^t=1β1tmt v ^ t = v t 1 − β 2 t \hat v_t=\frac{v_t}{1-\beta_2^t} v^t=1β2tvt θ t + 1 = θ t − η m t v t + ϵ \theta_{t+1}=\theta_t-\frac{\eta m_t}{\sqrt{v_t+\epsilon}} θt+1=θtvt+ϵ ηmt第一式考虑了即惯性,第二式考虑了梯度的平方类似于adagram中的平方和,考虑了环境感知。这两式都使用了移动指数衰减平均的思想:即离现在越近的信息对现在的影响越大,这里指考虑了前一时刻。第三、四式考虑了对0初始值情形的偏置修正,否则矩估计值偏向于0。最后一式把惯性和环境感知结合起来。

正则化
提到优化算法不得不提到正则化。

为什么使用正则化?
我们都知道高阶多项式能更好的拟合数据,但是也更容易出现过拟合。一种方法是降阶,相当于令高阶项的系数为0,但是不够灵活。另一种方法是不指定哪些高阶的项系数为0,但是指定多少项为0,但是不容易求解。这个差不多等价于L1了。再进一步,我们不指定多少项为0,我们令权重平方和为0,即 ∣ ∣ W T W ∣ ∣ &lt; C ||W^TW||&lt;C WTW<C,限制参数的大小。和第二种方法得到的参数空间有交集,但不完全相同,也不一定相等。

加上以上约束后,目标函数无约束优化转变为有约束优化。利用拉格朗日乘子求解可得 ∇ W L + 2 λ N W = 0 \nabla_W L+\frac{2\lambda}NW=0 WL+N2λW=0从另一个方向来解释这个式子:约束相当于把解限制了,构造了一个半径为 C \sqrt C C 的球,这时解要么在球内,要么在球面上。解的优化过程相当于移动方向为球上点的切线方向向量和负梯度向量相加后所得的向量方向。则只有当切线方向向量和负梯度向量平行时才会停止迭代。
以上就是正则化的思路推导过程。通常使用的正则化有L1、L2。
对于L2正则化,处处可微,容易求解。
对于L1正则化:由于是绝对值,故解空间是约束在一个多边形内,对于多边形,顶脚处的点不可微。如果点出现在多边形上,则除了顶点,同一条直线上的切线方向都是一样的,随着解的移动,解更容易出现在顶点处。而顶点处W的某些分量为0。出现稀疏解,现在了解参数的个数。
加了正则项的假设集仅仅是假设空间中一个满足某些条件的某些条件的特定假设集,满足VC理论,故优化得到的解仍然是模型参数的解。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值