机器学习——梯度下降


前言

最近准备开始学习机器学习,后续将对学习内容进行记录,该文主要记录机器学习中的优化方法梯度下降!

一、引入梯度下降与梯度上升

通过前面线性回归算法的学习,我们知道,模型最佳参数的求解往往是在损失函数最小时取得(线性回归算法中的损失函数可理解为 J ( θ ) J(\theta) J(θ)函数),但是需要注意损失函数求解最小问题并不一定可解,线性回归可当作一个特例。
 
这时就需要引入梯度下降方法,可以通过梯度下降来进行一步步迭代求解,得到最小化的损失函数,和模型参数值。与梯度下降相反的方法则是梯度上升,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭代了。
 
梯度下降法和梯度上升法是可以互相转化的。比如我们需要求解损失函数f(θ)的最小值,这时我们需要用梯度下降法来迭代求解。但是实际上,我们可以反过来求解损失函数 -f(θ)的最大值,问题就转化成了使用梯度上升法求解。下面就针对梯度下降算法进行详细说明。


二、梯度下降的理解

1.形象解释

梯度下降的迭代求解可以理解为下山问题,想象一下我们此刻位于山的某一个位置,我们的目标是下到山底(目标函数),但是我们并不清楚具体的路途,只能走一步看一步,那么怎么走才能保证我们下山的效率最高呢?很容易想到我们求解当前所处位置的梯度(表示某一函数在该点处的方向导数沿着该方向取得最大值),然后沿着梯度的负方向也就是最陡峭的地方走一步,然后继续求解当前位置梯度,这样一步步地走下去(迭代过程),一直走到我们觉得到了山底。
 
通过上面的理解,相信大家对于梯度下降已经有了自己的理解,这里还需要注意到的问题是,梯度下降不一定能够保证我们走到了真正的山底,我们可能到了某一个山峰低处就误认为我们到了山底,也就是说梯度下降不一定能够找到全局的最优解,有可能是一个局部的最优解。当然,如果损失函数是凸函数,梯度下降法得到的解就一定是全局最优解。

2.梯度下降家族BGD、SGD、MBGD

将根据线性回归算法中的目标函数进行说明。
损失函数为 J ( θ ) = 1 2 ∑ i = 1 m ( y ( i ) − h θ ( x i ) ) 2 J(\theta)=\frac{1}{2}\sum_{i=1}^m(y^{(i)}-h_\theta(x^i))^2 J(θ)=21i=1m(y(i)hθ(xi))2,当这个函数取最小值时,求得模型参数。对每一个特征 θ \theta θ求偏导有
∂ J ( θ ) ∂ θ j = − ∑ i = 1 m ( y ( i ) − h θ ( x i ) ) x j i \frac{\partial J(\theta)}{\partial \theta_j}=-\sum_{i=1}^m(y^{(i)}-h_\theta(x^i))x_j^i θjJ(θ)=i=1m(y(i)hθ(xi))xji
1.批量梯度下降BGD
具体做法也就是在更新参数时使用所有的样本来进行更新。以线性回归算法为例
θ j ′ = θ j + 1 m ∑ i = 1 m ( y ( i ) − h θ ( x i ) ) x j i \theta_j'=\theta_j+\frac{1}{m}\sum_{i=1}^m(y^{(i)}-h_\theta(x^i))x_j^i θj=θj+m1i=1m(y(i)hθ(xi))xji
由于是根据使用得所有样本进行更新,故这个m代表样本的数量
优缺点:
①一次迭代运用了所有样本进行计算,实现了并行。
②全数据集确定的方向能更好代表样本总体。当目标函数为凸函数时,BGD一定能够得到全局最优。
③当样本数目m很大时,每迭代一步都需要对所有样本进行计算,训练过程会很慢。
 
2.随机梯度下降SGD
区别在与求梯度时没有用所有的样本的数据,而是仅仅选取一个样本来求梯度。以线性回归算法为例
θ j ′ = θ j + ( y ( i ) − h θ ( x i ) ) x j i \theta_j'=\theta_j+(y^{(i)}-h_\theta(x^i))x_j^i θj=θj+(y(i)hθ(xi))xji
优缺点:
①随机梯度下降法训练速度很快,而批量梯度下降法在样本量很大的时候训练速度不能让人满意。
②对于准确度来说,随机梯度下降法仅仅用一个样本决定梯度方向,导致解很有可能不是最优。对于收敛速度来说,随机梯度下降法一次迭代一个样本,导致迭代方向变化大(可能出现变化一会大一会小,取决于所选取的那一个样本),不能很快的收敛到局部最优解。
 
3.小批量梯度下降MBGD
小批量梯度下降法是批量梯度下降法和随机梯度下降法的折中,首先根据内存和效率设定batchSize,一般为16,32,64等。在更新参数时使用设定的batchSize数来进行更新。
θ j ′ = θ j + 1 m ∑ i = 1 m ( y ( i ) − h θ ( x i ) ) x j i \theta_j'=\theta_j+\frac{1}{m}\sum_{i=1}^m(y^{(i)}-h_\theta(x^i))x_j^i θj=θj+m1i=1m(y(i)hθ(xi))xji
由于是根据使用得设定的batchSize进行更新,故这个m等于batchSize。
优缺点:
①通过矩阵运算,每次在一个batch上优化参数并不会比单个数据慢太多。
②每次使用一个batch可以大大减少收敛所需要的迭代次数,同时可以使收敛到的结果更加接近梯度下降的效果。
③可实现并行化

3.学习率(步长)

前面的讲解已经能够确定下山的方向,接下来就是该走多远的问题了,这就引入了学习率(步长)这个概念,步长决定了在梯度下降迭代的过程中,每一步沿梯度负方向前进的长度。
若步长选择过大,可能会导致迭代不平稳,步长选择过小,则会带来更多的迭代次数,故需要选择合理的步长。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
梯度下降算法是机器学习中一种广泛应用的最优化算法,其主要目的是通过迭代找到目标函数的最小值,或者收敛到最小值。梯度下降算法的原理可以从一个下山的场景开始理解。算法的基本思想是沿着目标函数梯度的方向更新参数值,以期望达到目标函数的最小值。 在机器学习中,梯度下降算法常常用于求解损失函数的最小值。在简单的线性回归中,我们可以使用最小二乘法来求解损失函数的最小值。然而,在绝大多数情况下,损失函数是非线性的且复杂。因此,梯度下降算法在机器学习领域得到了广泛的应用。实际上,许多优秀的算法都是在梯度下降算法的启发下诞生的,例如AdaGrad、RMSProp、Momentum等等。 梯度下降算法的核心思想是通过计算目标函数的梯度来确定参数更新的方向。梯度表示了函数在某一点上的变化率,沿着梯度的方向可以使函数值快速减小。因此,梯度下降算法沿着梯度的反方向更新参数值,朝着目标函数的最小值靠近。算法的迭代过程会持续更新参数值,直到收敛到最小值或达到停止条件。 在实际应用中,为了提高算法的效率和准确性,通常会对梯度下降算法进行改进和优化。例如,可以使用学习率来控制参数值的更新步长,或者采用批量梯度下降来同时计算多个样本的梯度。这些改进可以帮助算法更快地收敛并找到更好的解。 总之,梯度下降算法是一种重要的最优化算法,在机器学习中被广泛应用。其原理是通过计算目标函数的梯度来更新参数值,以期望达到最小值。通过迭代的方式,梯度下降算法可以找到目标函数的最优解或者接近最优解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值