机器学习初探-常用优化算法介绍

目的:简单介绍机器学习中常用的一些优化算法,主要用于无约束最优化问题的求解。具体包括梯度下降法(最速梯度下降),牛顿法,几个拟牛顿法(包括DFP,BFGS,LBFGS等,共轭方向法,共轭梯度法,信赖域方法等不在本次做讨论)。

概述

一般的有监督的机器学习问题中,有了带有标注的数据之后,我们往往会先假设一个模型(比如在二分类问题中,我们可以假设有一个超平面把不同类别的case分开),这些假设的模型的数学表达中会有一些未定的参数。然后,我们会设计一个函数,来衡量会这个模型的输出和我们期望的输出之间的“差距”,这个函数一般被叫做损失函数。之后在将这个损失函数和正则化项组合成目标函数(obj)。最后对obj函数进行最优化(一般也就是求极值),来确定模型中的各个参数,最终完成模型假设。这个过程也就是我们常说的机器学习的过程,也就是参数估计的过程。

这当中的最优化问题,说直白点,就是有一个函数,我们要找到它的极值(全局或者局部)。如果我们找到这些极值,就可以用这些取得极值时的数据,来确定我们假设模型中的参数。总体来说,我们的目标就是当obj确定了之后,通过一些方法,来确定极值在哪里,是多少。

本文后面的部分,就是来讨论一下针对最优化这一问题,一般有哪些常用的方法。

 

问题抽象

确定函数下找最值(以下我们以找最小值为例),就是一般的通用无约束最优化问题:

 

怎么找呢?如果f本身连续,又可导,可微,而且f比较简单(比如说单变量二次函数),那么我们可能直接可以通过解方程的方式得到解析解,从而找到最小值。但是在一般情况下,f(x)都比较复杂(尤其是维度很大,f本身非凸的情况下),有可能会不可导,不可微分,或者求导困难,所以针对更一般的情况,我们采取的通用方法是迭代法。迭代法大体是如下一种方法:是先猜一个点(估计点),之后根据这个点x0,再附近(比较近的范围内)再找一个点x1,让f(x1)<f(x0),之后再根据x1找到一个 x2,让f(x2)<f(x1),就这样一值找下去,直到找到一个点,使得基本没办法再找到新的,使得了,或者周边的f(x)差距非常非常小了,那么这个点可能就是我们希望找到的f(x)取得最小值的x的取值点(全局或者局部最小点)。

用数学一点的话来讲,我们希望找到一个序列 x0,x1,x2.....(或者找到一个算法生成这样的序列),使得在定义域上,f(x0)>f(x1)>f(x2).....>f(),如果f() 基本上等于f(x)的最小值,或者说lim  == X*,lim ||-X*|| == 0(在k趋近于无穷时,X*为极值点的x取值),那我们就说这个算法产生的迭代,收敛于f(x)的最小值取值点X*。

 

一般做法

我们希望找到一个算法,或者找到一个迭代,使得上面的过程成立,从而找到最小值。具体怎么做呢?

我们聚焦到一步,来看看一般情况下的做法。假设我们目前更新到的Xk,那下面就有2种情况:第一种情况,无论向周边怎么移动,也没有比f()更小的值了,那么时就取得了f(x)的最小值;第二种,如果至少还有1个方向P(||P||==1),使得向这个方向移动,可以使f(x)的值变小,那么我们让+aP,使得f()<f()即可。这里我们称P为方向,也就是X要往哪里走,a为步长,也就是走多少。如果算法是有效的,那么最终我们就会找到X*。

所以,优化问题基本可以看成2个阶段的抉择:1.选取一个方向P;2.选取一个步长a。其中选取P比较重要,各种各样不同的算法,基本上就是根据选取P的策略不同而不同的。对a的选择也有很多方法,最简单的方法是固定选取一个固定的,较小的a(比如a=0.005 ~ 0.01);有的时候可以先选一个a,之后根据迭代后P的大小,来动态的调整a;另外就是line search类a选取方法等等,我们下面会有详细的涉及。

 

下面我们就来看看几个常用的无约束问题的优化算法。


梯度下降法(最速下降法)

梯度下降(Gradient Descent) 也被称之为最快下降法(Steepest Descent),可用于寻找函数的最小值(局部最小值)。梯度下降法的思路,是利用函数值在梯度反方向来作为X的迭代方向,也就是。只要沿着函数的梯度反方向移动足够小的距离到一个新的点,那么函数值必定是非递增的,而且在梯度下降法的假设前提下,负的梯度方向是下降是最快的方向。

梯度下降法,顾名思义,就是利用obj函数的一阶导数来寻找最小值。对于f(x),我们根据泰勒公式的一阶展开,可以得到如下的拟合(对应向量的情况):

其中的高阶无穷小,忽略。并且是我们要找的方向,且==1,是步长,且>0。

我们先来看看如何找到。我么你要找一个,使。我们根据,要达到,只要 <0即可。

根据向量夹角公式,我们可以把写成 。cos的最小值是-1,即theta的取值为π时,当

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值