A-02 梯度下降法

梯度下降法

在这里插入图片描述
  在求解机器学习算法模型参数的时候,梯度下降法(gradient descent)和最小二乘法(least squares)是最经常使用的方法,由于梯度下降法衍生出的分支较多,所以在这里对梯度下降法单独做一个总结。

梯度下降法详解

梯度

  梯度是在微积分中对多元函数的各个参数求偏导数,并且把求得的各个参数的偏导数用向量的形式表达出来。

  例如函数 L ( ω , b ) L(\omega,b) L(ω,b),分别对 ω \omega ω b b b求偏导数,梯度向量就是 ( ∂ L ∂ ω , ∂ L ∂ b ) T ({\frac{\partial{L}}{\partial{\omega}}},{\frac{\partial{L}}{\partial{b}}})^T (ωL,bL)T,简称 g r a d L ( ω , b ) grad{L(\omega,b)} gradL(ω,b)或者 ∇ L ( ω , b ) \nabla{L(\omega,b)} L(ω,b)。对于某个具体的点 ( ω i , b i ) (\omega_i,b_i) (ωi,bi)的具体梯度向量就是 ( ∂ L ∂ ω i , ∂ L ∂ b i ) T ({\frac{\partial{L}}{\partial{\omega_i}}},{\frac{\partial{L}}{\partial{b_i}}})^T (ωiL,biL)T或者 ∇ L ( ω i , b i ) \nabla{L(\omega_i,b_i)} L(ωi,bi),如果是多参数的函数则是 ( ∂ L ∂ x , ∂ L ∂ y , ∂ L ∂ z ) T ({\frac{\partial{L}}{\partial{x}}},{\frac{\partial{L}}{\partial{y}}},{\frac{\partial{L}}{\partial{z}}})^T (xL,yL,zL)T

梯度下降法和梯度上升法

  在机器学习算法中,如果需要最小化目标函数时,则可以通过梯度下降法一步一步的迭代求解,得到最小化的目标函数和模型参数值;如果要最大化目标函数时,则可以通过梯度上升法迭代求解。

  梯度下降算法和梯度上升法之间也可以互相转化,可以通过梯度下降迭代最小化目标函数,同时也可以反向梯度上升迭代最小化目标函数;同理也可以反向梯度下降迭代最大化目标函数。

梯度下降

  假设我们处在某座不知名的大山上的某处位置,由于我们不知道该怎么下山,于是决定走一步算一步,即每走到一个位置的时候便求解当前位置的梯度,沿着梯度的负方向即当前最陡峭的位置向下走一步,然后继续求解当前位置的梯度……直到我们认为我们已经到了山脚才停下来。从下图可以看出,通过该方法我们有可能走到了这座大山的某一个局部的最低处(山腰处),而没有走到真正的山脚。

在这里插入图片描述

  从下山这个实例中可以得出:梯度下降不一定能够找到全局的最优解,有可能会找到局部最优解。

  但是如果代价函数为凸函数的时候梯度下降得到的则一定是全局最优解。

相关概念

步长

  步长决定了梯度下降迭代的时候每一步沿梯度负方向前进的长度,下山实例中则表示每一步的长度。

  如果步长过长,则可能会错过最优解;如果步长过小,迭代速度会变慢,很长时间算法都不会结束。因此可以从大到小的尝试步长的大小,如果目标函数值在变小,说明取值有效,否则需要增大步长。

假设函数

  以线性模型举例,线性模型的假设函数为预测值的预测函数,即通过输入特征 ( x 1 , x 2 , … , x n ) (x_1,x_2,\ldots,x_n) (x1,x2,,xn)输出一个对应的预测值 y ^ \hat{y} y^,线性模型的假设函数为
y ^ = f ( x ) = ω 1 x 1 + ω 2 x 2 + ⋯ + ω n x n + b \hat{y} = f(x) = \omega_1x_1 + \omega_2x_2 + \cdots + \omega_nx_n + b y^=f(x)=ω1x1+ω2x2++ωnxn+b

目标函数

  目标函数常用来度量模型拟合的程度,以线性模型举例,线性模型一般使用均方误差度量模型性能,线性模型的目标函数为
J ( ω , b ) = ∑ i = 1 m ( y i − y i ^ ) 2 J(\omega,b) = \sum_{i=1}^m (y_i - \hat{y_{i}})^2 J(ω,b)=i=1m(yiyi^)2

梯度下降法流程

梯度下降法——代数法

在这里插入图片描述

  假设现有一个目标函数 J ( ω 0 , ω 1 , … , ω n ) J(\omega_0,\omega_1,\ldots,\omega_n) J(ω0,ω1,,ωn)

  1. 初始化参数 ω 0 = 0 , ω 1 = 0 , … , ω n = 0 \omega_0=0,\omega_1=0,\ldots,\omega_n=0 ω0=0,ω1=0,,ωn=0,也可以初始化成趋近于 0 0 0的较小值;自定义步长 α = 1 \alpha=1 α=1;自定义阈值 ϵ \epsilon ϵ
  2. 计算当前位置的目标函数的梯度 ∂ ∂ ω i J ( ω 0 , ω 1 , … , ω n ) {\frac{\partial}{\partial{\omega_i}}J(\omega_0,\omega_1,\ldots,\omega_n)} ωiJ(ω0,ω1,,ωn)
  3. 使用步长乘以目标函数的梯度得 α ∂ ∂ ω i J ( ω 0 , ω 1 , … , ω n ) \alpha{\frac{\partial}{\partial{\omega_i}}J(\omega_0,\omega_1,\ldots,\omega_n)} αωiJ(ω0,ω1,,ωn)
  4. 如果所有的 ω i \omega_i ωi的梯度下降的距离都小于阈值,则算法停止,当前的 ω 0 , ω 1 , … , ω n \omega_0,\omega_1,\ldots,\omega_n ω0,ω1,,ωn即为最终结果;否则继续下一步
  5. 更新所有的 ω \omega ω,更新公式为 ω i = ω i − α ∂ ∂ ω i J ( ω 0 , ω 1 , … , ω n ) \omega_i = \omega_i - \alpha{\frac{\partial}{\partial{\omega_i}}J(\omega_0,\omega_1,\ldots,\omega_n)} ωi=ωiαωiJ(ω0,ω1,,ωn)更新成功后从步骤2继续开始

梯度下降法——矩阵法

  这一部分主要用到了矩阵的基本计算和求导,首先对假设函数和目标函数矩阵化。

  假设现有一个假设函数
y ^ = ω 1 x 1 + ω 2 x 2 + ⋯ + ω n x n + b = X T ω \hat{y} = \omega_1x_1 + \omega_2x_2 + \cdots + \omega_nx_n + b = X^T\omega y^=ω1x1+ω2x2++ωnxn+b=XTω
其中 X T ω X^T\omega XTω是假设函数的矩阵表达(把 b b b看做 ω 0 x 0 , x 0 = 1 \omega_0x_0, \quad x_0=1 ω0x0,x0=1),其中 X T X^T XT m ∗ ( n + 1 ) m*(n+1) m(n+1)维的特征矩阵( m m m为样本数, n n n为特征数), ω \omega ω ( n + 1 ) ∗ 1 (n+1)*1 (n+1)1维的向量,则通过矩阵的计算得知 X T ω X^T\omega XTω是一个 m ∗ 1 m*1 m1维的向量。

  假设函数的转换即可得矩阵表达的目标函数,即
J ( θ ) = 1 2 ( X ω − Y ) T ( X ω − Y ) J(\theta)={\frac{1}{2}}(X\omega-Y)^T(X\omega-Y) J(θ)=21(XωY)T(XωY)
其中 Y Y Y m ∗ 1 m*1 m1维的样本向量。

  1. 初始化向量 ω \omega ω的每个元素为0,也可以初始化成趋近于 0 0 0的较小值;自定义步长 α = 1 \alpha=1 α=1;自定义阈值 ϵ \epsilon ϵ
  2. 计算当前位置的目标函数的梯度,对于向量 ω \omega ω,其梯度表达式为 ∂ ∂ ω J ( ω ) {\frac{\partial}{\partial\omega}}J(\omega) ωJ(ω)
  3. 使用步长乘以目标函数的梯度得 α ∂ ∂ ω J ( ω ) \alpha{\frac{\partial}{\partial\omega}}J(\omega) αωJ(ω)
  4. 如果向量 ω \omega ω内的每个元素都梯度下降的距离都小于阈值,则算法停止,当前的 ω \omega ω即为最终结果;否则继续下一步
  5. 更新所有的 ω \omega ω,更新公式为 ω = ω − α ∂ ∂ ω J ( ω ) \omega = \omega - \alpha{\frac{\partial}{\partial\omega}}J(\omega) ω=ωαωJ(ω)更新成功后从步骤2继续开始

三种不同形式的梯度下降法

  三种不同形式的梯度下降法步骤都是相同的,只是在更新参数的时候选择的样本数量不同,如果不关心样本数量,梯度下降法的更新公式为
ω i = ω i − α ∂ ∂ ω i J ( ω 0 , ω 1 , … , ω n ) \omega_i = \omega_i - \alpha{\frac{\partial}{\partial{\omega_i}}J(\omega_0,\omega_1,\ldots,\omega_n)} ωi=ωiαωiJ(ω0,ω1,,ωn)
  接下来的参数更新公式以均方误差线性回归模型举例,均方误差线性回归模型的目标函数对参数 ω \omega ω的求偏导公式为
∇ L ( ω i ) = ∑ j = 0 m ( y j ^ − y j ) x i ( j ) \nabla{L(\omega_i)}=\sum_{j=0}^m(\hat{y_j}-y_j){x_i}^{(j)} L(ωi)=j=0m(yj^yj)xi(j)
其中 m m m是样本数, x j i {x_j}^{i} xji是第 j j j个样本的第 i i i个特征。

批量梯度下降法

  批量梯度下降法(batch gradient descent)是最常用的做法,它使用所有的样本更新参数,它的参数更新公式为
ω i = ω i − α ∑ j = 0 m ( y j ^ − y j ) x i ( j ) \omega_i = \omega_i - \alpha\sum_{j=0}^m(\hat{y_j}-y_j){x_i}^{(j)} ωi=ωiαj=0m(yj^yj)xi(j)

随机梯度下降法

  随机梯度下降法(stochastic gradient descent)类似于批量梯度下降法,但是它随机的使用第 j j j个样本更新参数,它的参数更新公式为
ω i = ω i − α ( y j ^ − y j ) x i ( j ) \omega_i = \omega_i - \alpha(\hat{y_j}-y_j){x_i}^{(j)} ωi=ωiα(yj^yj)xi(j)

小批量梯度下降法

  小批量梯度下降法(mini-batch gradient descent)属于批量下降法和随机梯度下降法的折中方法,即对于 m m m样本,随机选定 x x x个样本更新参数,一般 x = 10 x=10 x=10。假设这 x x x样本的集合为 D D D,它的参数更新公式为
ω i = ω i − α ∑ j ∈ D ( y j ^ − y j ) x i ( j ) \omega_i = \omega_i - \alpha\sum_{j\in{D}} (\hat{y_j}-y_j){x_i}^{(j)} ωi=ωiαjD(yj^yj)xi(j)

  批量梯度下降法使用所有的样本更新参数,计算量大,准确度高,但是更新速度慢。

  随机梯度下降法随机使用一个样本更新参数,计算量小,更新速度快,但是准确度不高,并且由于使用一个样本更新参数,算法收敛速度慢。

  小批量梯度下降法属于批量梯度下降法和随机梯度下降法的折中方法,但是采用的错误样本数需要具体问题去分析,否则采用错误的样本数量容易导致更新速度慢而且准确度也不高。

在这里插入图片描述

梯度下降法优缺点

优点

  1. 如果目标函数是凸函数,可以获得全局最小值
  2. 样本量很大的时候可以选择随机梯度下降法或者小批量梯度下降法,相对于最小二乘法灵活
  3. 迭代时间相较于牛顿法更快

缺点

  1. 步长需要人为控制,如果步长小了则目标函数收敛速度会变慢;步长大了容易错过最优解
  2. 初始值设定不同获得的最小值也有可能不同,即梯度下降法只能获得局部最小值
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
小批量梯度下降法是一种介于批量梯度下降法和随机梯度下降法之间的优化算法。它在每次迭代时不仅考虑单个样本(随机梯度下降法),也不是考虑全部样本(批量梯度下降法),而是选择一个适当的小批量样本进行梯度计算和参数更新。 下面我将通过一个例题来解释小批量梯度下降法的过程: 假设我们有一个包含m个训练样本的数据集,目标是通过线性回归模型来拟合这些数据。我们的模型参数为w和b,损失函数为均方误差函数。 1. 初始化模型参数w和b为随机值或0。 2. 设置学习率α和小批量大小batch_size。 3. 将训练数据集随机打乱,并将其分成大小为batch_size的小批量。 4. 对于每个小批量数据,执行以下步骤: a. 计算当前小批量数据的预测值y_pred。 b. 计算当前小批量数据的损失函数值loss。 c. 计算损失函数对参数w和b的梯度grad_w和grad_b。 d. 更新参数w和b:w = w - α * grad_w,b = b - α * grad_b。 5. 重复步骤4直到达到指定的迭代次数或损失函数满足收敛条件。 通过不断迭代更新参数,小批量梯度下降法可以逐渐调整模型参数,使得模型能够更好地拟合训练数据。由于每次迭代只使用部分样本,因此它的计算效率相对于批量梯度下降法有所提升,同时也具有一定的随机性,有助于避免陷入局部最优解。 希望这个例题能够帮助你理解小批量梯度下降法的过程!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值