【机器学习】梯度下降法与牛顿法【Ⅰ】梯度下降法概述

参考了各路神仙的资料,包含自己的理解。
有任何的书写错误、排版错误、概念错误等,希望大家包含指正。

由于字数限制,分成三篇博客。
【机器学习】梯度下降法与牛顿法【Ⅰ】梯度下降法概述
【机器学习】梯度下降法与牛顿法【Ⅱ】牛顿法与修正牛顿法
【机器学习】梯度下降法与牛顿法【Ⅲ】拟牛顿法

1. 梯度下降法

梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。目标函数沿梯度的负方向下降最快。

梯度下降法(Gradient Descent,GD)又称最速下降法,其基本思想是选择目标函数当前迭代点处的负梯度方向作为迭代方向,即
d t = − ∇ f ( x t ) d_t=-\nabla f(x_t) dt=f(xt)
因此,下一个迭代点为
x t + 1 = x t + d t x_{t+1}=x_t+d_t xt+1=xt+dt
在梯度下降法中,一般会引入“步长”来控制沿迭代方向前进的距离。步长太大,会导致迭代过快,甚至有可能错过最优解,出现在极值点两侧来回跳跃的现象,这种现象被称为“震荡现象”。步长太小,迭代速度太慢,很长时间算法都不能结束。每次迭代的步长可以固定不变,也可以通过一些方法动态确定比较合理的值,一般采用比较迅速的线搜索,关于步长的具体内容见后文“修正牛顿法”部分。引入步长后的梯度下降法实现如下。

输入:  初始值  x 0                                        精度阈值  ε 过程: \begin{array}{ll} \textbf{输入:}&\space初始值\space x_0 \space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space \\ &\space精度阈值 \space \varepsilon \\ \textbf{过程:} \end{array} 输入:过程: 初始值 x0                                      精度阈值 ε

1 : t = 0 2 : while   true   do 3 :     计算梯度  g t 4 :      if   ∣ ∣ g t ∣ ∣ 2   < ε   then 5 :          return   6 :      end   if 7 :     计算搜索方向  d t = − g t 8 :     确定最佳步长  λ t 9 :     计算新的迭代点  x t + 1 = x t + λ t d t 10 :      t = t + 1 11 : end   while \begin{array}{rl} 1:&t=0\\ 2:&\textbf{while} \space \textbf{true} \space \textbf{do} \\ 3:&\space\space\space\space 计算梯度\space g_t \\ 4:&\space\space\space\space \textbf{if}\space \left|\left|g_t\right|\right|_2\space \lt \varepsilon \space \textbf{then}\\ 5:&\space\space\space\space \space\space\space\space \textbf{return } \\ 6:&\space\space\space\space \textbf{end}\space \textbf{if} \\ 7:&\space\space\space\space 计算搜索方向 \space d_t=-g_t \\ 8:&\space\space\space\space 确定最佳步长 \space\lambda_t \\ 9:&\space\space\space\space 计算新的迭代点 \space x_{t+1}=x_t+ \lambda_td_t \\ 10:&\space\space\space\space t=t+1 \\ 11:&\textbf{end}\space\textbf{while} \end{array} 1:2:3:4:5:6:7:8:9:10:11:t=0while true do    计算梯度 gt    if gt2 <ε then        return     end if    计算搜索方向 dt=gt    确定最佳步长 λt    计算新的迭代点 xt+1=xt+λtdt    t=t+1end while

输出:  极值点  x t                                       \begin{array}{ll} \textbf{输出:} &\space 极值点\space x_t \space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space \end{array} 输出: 极值点 xt                                     

算法 1     梯度下降法迭代算法

在梯度下降法中会存在前一次迭代方向与后一次迭代方向垂直的情况。证明如下。

若迭代步长为 λ t \lambda_t λt ϕ ( λ ) = f ( x t + λ d t ) \phi(\lambda)=f(x_t+\lambda d_t) ϕ(λ)=f(xt+λdt) 的精确最小点,则 ϕ ′ ( λ t ) = 0 \phi'(\lambda_t)=0 ϕ(λt)=0,即
ϕ ′ ( λ t ) = ∇ f ( x t + λ t d t ) T d t = − ∇ f ( x t + 1 ) ∇ f ( x t ) = 0 \phi'(\lambda_t)=\nabla f(x_t+\lambda_t d_t)^Td_t=-\nabla f(x_{t+1})\nabla f(x_t)=0 ϕ(λt)=f(xt+λtdt)Tdt=f(xt+1)f(xt)=0
其中, ∇ f ( x t + 1 ) \nabla f(x_{t+1}) f(xt+1) ∇ f ( x t ) \nabla f(x_t) f(xt) 的内积为 0 0 0,说明二者垂直。 − ∇ f ( x t + 1 ) -\nabla f(x_{t+1}) f(xt+1) − ∇ f ( x t ) -\nabla f(x_t) f(xt) 分别为第 t + 1 t+1 t+1 次迭代和第 t t t 次迭代的方向,可见,前一次迭代方向与后一次迭代方向垂直,这种现象被称为“Zigzag现象”。

本文只讨论了广义上的梯度下降法,没有详细讨论机器学习中的梯度下降法,这是因为在机器学习中需要考虑迭代方向 d t d_t dt 的具体度量方式。按照计算 d t d_t dt 时使用样本的数量不同,梯度下降法可以分为“批量梯度下降法”、“随机梯度下降法”和“小批量梯度下降法”,迭代方向分别对应着由全部样本的梯度均值计算、由随机一个样本的梯度计算和由少数几个样本的梯度均值计算。本文不对三种方法进行探讨,详细内容可见 机器学习基础

注意,本文都是在介绍广义上的梯度下降法和牛顿法,或者说是从数学角度出发讲解。本文中的 x t x_t xt 在机器学习中为模型参数,并非样本,因为训练的目的是获取更好的模型参数,也就是让目标(损失)函数值尽可能小。

你可能感兴趣的:(【机器学习】,矩阵,线性代数,算法)