[机器学习必知必会]梯度下降法

前言

梯度下降法(gradient descent)是求解无约束最优化问题的一种最常用的方法,它是一种迭代算法,每一步需要求解目标函数的梯度向量。

问题抽象

f(x)R^n上具有一阶连续偏导数的函数,要求解的无约束问题是:\min f(x), x\in R^n, 其中x^*表示目标函数f(x)的极小值点

关键概念

  • 迭代:选取适当初始值x^{(0)},不断迭代更新x的 值,直至收敛
  • 梯度下降:负梯度方向是使函数值下降最快的方向,我们在迭代的每一步都以负梯度方向更新x的值
  • 收敛:给定一个精度\epsilon,在迭代的每一轮根据梯度函数g(x)=▽f(x)计算梯度g_k=f(x^k)||g_k||<\epsilon时认为收敛
  • 学习率:也叫做步长,表示在每一步迭代中沿着负梯度方向前进的距离

直观理解

以下图为例,开始时我们处于黑色圆点的初始值(记为x^{(0)}),我们需要尽快找到函数的最小值点,最快的方法就是沿着坡度最陡的方向往下走

13946199-8f410ee22b95fb9a.png
图源:https://www.nxpic.org/article/id-330329

算法细节

由于f(x)具有一阶连续导函数,若第k次迭代值为x^{(k)},则可将f(x)x^{(k)}附近进行一阶泰勒展开:
f(x)=f(x^{(k)})+g_k^T(x-x^{(k)})
其中g_k=g(x^{(k)})=▽f(x^{(k)})x^{(k)}的梯度。
接着我们求出第k+1次的迭代值x^{(k+1)}:
x^{(k+1)}←x^{(k)}+\lambda_kp_k
其中p_k是搜索方向,取负梯度方向p_k=-▽f(x^{(k)})\lambda_k是步长,需满足:
f(x^{(k)}+\lambda_kp_k)=\min_{\lambda\geq0}f(x^{(k)}+\lambda p_k)

算法实现

  • 输入:目标函数f(x),梯度函数g(x)=▽f(x),计算精度\epsilon
  • 输出:f(x) 的极小值点x^*
  • 步骤:
    • 1)取初始值 x^{(0)}\in R^n,置k为0
    • 2)计算f(x^{(k)})
    • 3)计算梯度g_k=g(x^{(k)}),当||g_k||<\epsilon时停止迭代,令 x^*=x^{(k)};否则,令p_k=-g(x^{(k)}),求\lambda_k,使f(x^{(k)}+\lambda_kp_k)=\min_{\lambda \geq0}f(x^{(k)}+\lambda p_k)
    • 4)令x^{(k+1)}←x^{(k)}+\lambda_k p_k,计算f(x^{(k+1)}),当|f(x^{(k+1)})-f(x^{(k)})|<\epsilon|x^{x(k+1)-x^{(k)}}|<\epsilon时停止迭代,令x^*=x^{(k+1)}
    • 5)否则,令k=k+1,回到3)

算法调优

  • 学习率:学习率太小时收敛过慢,但太大时又会偏离最优解
  • 初始值:当损失函数是凸函数时,梯度下降法得到的解是全局最优解;当损失函数是非凸函数时,得到的解可能是局部最优解,需要随机选取初始值并在多个局部最优解之间比较
  • 归一化:如果不归一化,会收敛得比较慢,典型的情况就是出现“之”字型的收敛路径

注意事项

  • 当目标函数是凸函数时,梯度下降法是全局的最优解,一般情况下梯度下降法的解不一定是全局最优解
  • 梯度下降法的收敛速度未必是最快的

Reference

图源:https://www.nxpic.org/article/id-330329
《统计学习方法》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值