最优化问题——梯度下降/上升法

来源:互联网 发布:特价机票全额退款 知乎 编辑:程序博客网 时间:2024/05/17 07:36

前言

在各种应用场景下我们经常会遇到一些求最优解的问题,在计算机中我们可以利用梯度下降法/上升法来求解局部最优解。

梯度下降:向函数上当前点对应梯度(或近似梯度)的反方向,按照规定步长进行迭代搜索,接近函数的局部极小值。

梯度上升:向函数上当前点对应梯度(或近似梯度)正方向,按照规定步长进行迭代搜索,接近函数的局部极大值。

在机器学习中梯度下降法被广泛用来最小化目标函数(求目标函数取最小值时所对应自变量的值)

正文

梯度

以三元函数f(x,y,z)为例,设其上某点P(x,y,z)可微,则其所对应的梯度为:

(fx,fy,fz)

梯度的意义:在该点处函数值增加最快的方向(反方向为函数值减少最快的方向)

算法描述

梯度下降法是基于上述梯度的意义对局部极小值进行迭代查找的方法。假设我们从 x0 开始寻找函数 F 的一个局部极小值,我们对于 x 的序列有如下递推的定义:

xn+1=xnγnF(xn)n0

基于这样的 x 的序列就能得到递减的 F 序列:

F(x0)F(x1)F(x2)

当迭代到前后差值小于某个阈值之后,停止迭代,此时就得到了目标函数 F 的最优化解。

值得注意的是,递推式中步长 γn 是在每次迭代中可变的,假定 F 可微且 F 连续,则 γ 一般按照如下公式进行定义:

γn=(xnxn1)T[F(xn)F(xn1)]F(xn)F(xn1)2

其中:
F(xn)F(xn1)2 为两向量间距离的平方
(xnxn1)T 为两点对应向量的差的转置

优点

下降快(也被称为最速下降法)

缺点

1、得到的解可能不是全局最优解(根据初始点选取不同,得到的解也不尽相同)*

2、接近局部最优解时下降速度变慢(步长γ逐渐减小)

*对于缺点1:当函数是凹函数(国外教材叫凸函数/convex)时,得到的最优解便是全局最优解。为了尽量保证得到的解是全局最优解,可以多次选取不同的初始值来执行算法,选其最小值为最优解。

分类

批量梯度下降法(Batch Gradient Descent, BGD)

该方法使用整个数据集去计算代价函数的梯度,收敛所需时间长(慢……),并且对于不能载入内存的数据集很难处理。但是得到的数据是最准确的

θi=θiα1nj=1n(hθ(xj)yj)xji

随机梯度下降法(Stochastic Gradient Descent, SGD)

该方法第一步先随机化整个数据集。在每次迭代仅选择一个训练样本去计算代价函数的梯度,然更新参数,收敛快。
虽然它的精度不是特别好,但是它的速度非常快,即使对于大数据集也可以收敛的十分快。

θi=θiα1nj=1nhj(θj)

小批量梯度下降法(Mini-Batch Gradient Descent, MBGD)

该方法对于批量梯度下降和随机梯度下降进行了折中,每次使用一批(m,50~256个之间)样本进行训练,能够较快的得到比较准确的答案

θi=θiα1mj=tt+m1(hθ(xjj)yj)xji