最优化算法

在推荐和广告等需要处理大数据的领域里,经常需要用到的一项基础理论知识是最优化理论和方法。这些具体应用领域的很多问题都可以抽象为一个数学上的最优化问题,例如推荐领域的排序问题,广告领域的CTR估计问题,等等。

最优化理论研究的目标是在给定的约束条件下,如何找到一个目标函数的最优值。具体来说,可以用下列下面的形式来表示最优化问题:

m i n F ( x ) s . t G ( x ) ⪯ 0 , H ( x ) = 0 minF(\boldsymbol x) \quad s.t \quad G(\boldsymbol x) \preceq 0, H(\boldsymbol x) = 0 minF(x)s.tG(x)0,H(x)=0

其中 F ( x ) F(\boldsymbol x) F(x)是关于自变量 x \boldsymbol x x的函数,也是需要我们找到最优值的目标函数; G ( x ) ⪯ 0 , H ( x ) = 0 \quad G(\boldsymbol x) \preceq 0, H(\boldsymbol x) = 0 G(x)0,H(x)=0是自变量 x \boldsymbol x x需要满足的约束条件。

最优化的方法有很多,其中有些适合带约束的最优化问题,有些适合不带约束的最优化问题,这里简单介绍几类最常用算法:

  • 拉格朗日法
  • 梯度下降法
  • 牛顿法

拉格朗日法

在介绍拉格朗日法之前,先介绍一个关于凸优化相关的概念

凸集合 :给定一个集合 D D D,对于其中任意的两个元素 x ∈ D , y ∈ D x\in D, y\in D xD,yD,以及任意一个实数 θ ∈ R , 0 ≤ θ ≤ 1 \theta\in R, 0\leq\theta \leq1 θR0θ1,满足 θ x + ( 1 − θ ) y ∈ D \theta x + (1-\theta)y \in D θx+(1θ)yD,则称集合 D D D为凸集合(convex set)

凸函数 :如果一个函数 f ( x ) f(\boldsymbol x) f(x)的定义域 D ( f ) D(f) D(f)是一个凸集合,并且对于任意实数 0 ≤ θ ≤ 1 0\leq \theta \leq 1 0θ1满足:

θ f ( x ) + ( 1 − θ ) f ( y ) ≥ f ( θ x + ( 1 − θ ) y ) \theta f(x) + (1-\theta)f(y) \geq f(\theta x + (1-\theta) y) θf(x)+(1θ)f(y)f(θx+(1θ)y)

则称此函数为凸函数。

凸优化 :凸优化问题形式化定义如下:

m i n f ( x ) s . t g i ( x ) ≤ 0 , h j ( x ) = 0 , i ∈ [ 1 , m ] , j ∈ [ 1 , n ] minf(x)\quad s.t \quad g_i(x)\leq 0, h_j(x)=0, i\in[1,m], j\in[1,n] minf(x)s.tgi(x)0,hj(x)=0,i[1,m],j[1,n]

其中目标函数 f ( x ) f(x) f(x)和不等式约束函数 g i ( x ) g_i(x) gi(x)是凸函数,等式约束函数 h i ( x ) h_i(x) hi(x)是仿射函数。

实际在求解以上带约束的凸优化问题的时候,可以通过一定的方式将其转化称为一个不带约束的最优化问题,那么如果进行转换呢?首先我们引入拉格朗日函数,其具体形式如下:

L ( x , λ , ν ) = f ( x ) + ∑ i = 1 m λ i g i ( x ) + ∑ i = 1 n ν i h i ( x ) L(x,\lambda, \nu)=f(x) + \sum_{i=1}^m\lambda_ig_i(x)+\sum_{i=1}^n\nu_ih_i(x) L(x,λ,ν)=f(x)+i=1mλigi(x)+i=1nνihi(x)

其中 λ , ν \lambda, \nu λ,ν被称为拉格朗日乘子。

引入拉格朗日函数之后了,很容易可以证明,求解原问题等价与求解下面的问题:

m i n x f ( x ) min_xf(x) minxf(x)
= m i n x m a x λ , ν : λ i ≥ 0 L ( x , λ , ν ) =min_xmax_{\lambda,\nu:\lambda_i\geq0}L(x,\lambda,\nu) =minxmaxλ,ν:λi0L(x,λ,ν)
= m i n x J ( x ) =min_xJ(x) =minxJ(x)

其中 J ( x ) = m a x λ , ν : λ i ≥ 0 L ( x , λ , ν ) . J(x)=max_{\lambda,\nu:\lambda_i\geq 0}L(x,\lambda,\nu). J(x)=maxλ,ν:λi0L(x,λ,ν).

如此,原始的带约束的凸优化问题就转化成立不带约束的最优化问题。

继续推导,我们还可以证明:

m i n x m a x λ , ν : λ i ≥ 0 L ( x , λ , ν ) min_xmax_{\lambda,\nu:\lambda_i\geq0}L(x,\lambda,\nu) minxmaxλ,ν:λi0L(x,λ,ν)

≥ m a x λ , ν : λ ≥ 0 m i n x L ( x , λ , ν ) \geq max_{\lambda,\nu:\lambda\geq0}min_xL(x,\lambda,\nu) maxλ,ν:λ0minxL(x,λ,ν)

= m a x λ , ν : λ ≥ 0 L ( λ , ν ) =max_{\lambda,\nu:\lambda\geq0}L(\lambda,\nu) =maxλ,ν:λ0L(λ,ν)

也就是:

m i n x f ( x ) = m i n x J ( x ) ≥ m a x λ , ν : λ ≥ 0 L ( λ , ν ) min_xf(x)=min_xJ(x)\geq max_{\lambda,\nu:\lambda\geq0}L(\lambda,\nu) minxf(x)=minxJ(x)maxλ,ν:λ0L(λ,ν)

我们把其中 L ( λ , ν ) = m i n x L ( x , λ , ν ) L(\lambda,\nu)=min_xL(x,\lambda,\nu) L(λ,ν)=minxL(x,λ,ν)称为目标函数 f ( x ) f(x) f(x)的对偶函数。可以看出,对偶函数的最优值是原函数最优值的下界。

当等号成立的时候,称之为强对偶,否则称之为弱对偶。可以证明当原问题是凸优化问题的时候,强对偶总是满足的。

另外,即使原问题不是凸优化问题,只要满足一定的条件,强对偶也是会满足的,这个条件被称为KKT条件:

∇ x L ( x , λ , ν ) = 0 \nabla_xL(x,\lambda,\nu)=0 xL(x,λ,ν)=0
λ i g i ( x ) = 0 \lambda_ig_i(x)=0 λigi(x)=0
g i ( x ) ≤ 0 g_i(x)\leq0 gi(x)0
λ ≥ 0 \lambda\geq0 λ0

梯度下降法

我们用下山的例子来介绍梯度下降优化法,比如我们在山上的某个位置,目的是要下到山下,但是因为身处山中,视野有限,只能看到周围情况,那么如何才能下到山下呢?

一个比较直观的想法就是,观察当前位置上哪个方向高度下降的最大,我们便朝这个方向移动一步,接着我们继续观察移动后的位置上,高度下降最大的方向,再继续朝这个方向移动一步;如此不断重复上面的步骤,直到到达一个位置后,所有的方向上的高度都不再下降为止。

函数 F ( x ) F(\boldsymbol x) F(x)的最小值求解过程可以类比下山的过程,自变量 x \boldsymbol x x表示我们当前所在的位置的坐标,函数值 F ( x ) F(\boldsymbol x) F(x)表示当前位置的高度。那么问题就转化为如何找到高度变化最大的方向了。

由此引入梯度(gradient)的概念,梯度的定义如下:

g r a d F ( x 1 , x 2 , . . . , x n ) = ( ∂ F ∂ x 1 , ∂ F ∂ x 2 , . . . , ∂ F ∂ x n ) gradF(x_1,x_2,...,x_n)=(\frac{\partial F}{\partial x_1},\frac{\partial F}{\partial x_2},...,\frac{\partial F}{\partial x_n}) gradF(x1,x2,...,xn)=(x1F,x2F,...,xnF)

并且梯度就有一个很重要的性质,那就是函数再沿梯度的方向上值增长率最大,所以在优化目的函数值的时候,一个很自然的方法就是沿着梯度的反方向去改变自变量的值,表示为:

x n + 1 = x n − η ∇ \boldsymbol x_{n+1} = \boldsymbol x_n - \eta \nabla xn+1=xnη

其中 ∇ \nabla 表示函数F(x)的梯度, η \eta η称为学习步长或学习速率;学习步长是训练模型的超参之一。

以上便是梯度下降算法的基本思想,但是也很容易发现,基本的梯度下降法的一些缺点,比如目标函数如果不是凸函数的话,不能保证收敛到全局的最优值,可能会陷入局部的最优值。

为了克服这一缺点,一系列的基于梯度下降的优化算法被提出来,比如基于动量的梯度下降法,ADAGRAD, ADAM等,这里就不逐一介绍了。

牛顿法

牛顿法是一种近似求解方程根的方法,例如求解一元方程 f ( x ) = 0 f(x)=0 f(x)=0的根,牛顿法的求解步骤是:

  • 初始化自变量的值 x = x 0 x=x_0 x=x0, 计算函数值 f ( x 0 ) f(x_0) f(x0)以及函数导数值 f ′ ( x 0 ) f'(x_0) f(x0).
  • 求经过点 ( x 0 , f ( x 0 ) ) (x_0,f(x_0)) (x0,f(x0))并且斜率为 f ′ ( 0 ) f'(0) f(0)的直线与 x x x轴的交点的横坐标 x 1 x_1 x1, 也就是求解方程:

( x 0 − x 1 ) f ′ ( x 0 ) = f ( x 0 ) − 0 (x_0-x_1)f'(x_0) = f(x_0) - 0 (x0x1)f(x0)=f(x0)0

得到 x 1 x_1 x1为:

x 1 = x 0 − f ( x 0 ) f ′ x 0 x_1=x_0 - \frac{f(x_0)}{f'{x_0}} x1=x0fx0f(x0)

  • 重复步骤以上两个步骤,直到 x n + 1 , x n x_{n+1}, x_{n} xn+1,xn足够接近为止,其中自变量的更新方式为:

x n + 1 = x n − f ( x n ) f ′ ( x n ) x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)} xn+1=xnf(xn)f(xn)

那么就牛顿法怎么运用到函数值的优化过程呢?其实目标函数 F ( x ) F(x) F(x)的最优化的过程也就是寻找函数 F ( x ) F(x) F(x)极值的过程,而函数的极值可以通过求职方程 F ′ ( x ) = 0 F'(x)=0 F(x)=0根的方式求得。所以可以看出,我们把最优化的问题转化为了求解方程根的问题,然后可以用牛顿法求解。

牛顿法的最大优点在于它的收敛速度很快。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值