深度解析梯度下降及其详细知识(Gradient Descent)

本文深入解析梯度下降,探讨凸优化问题,介绍梯度下降的原理、过程及参数设置,并通过一元和多元函数实例展示梯度下降的运用。
摘要由CSDN通过智能技术生成

深度解析梯度下降及其详细知识(Gradient Descent)

本篇文章侧重于解析机器学习中梯度下降的原理。

前言:

在开始之前我们先笼统的描述一下什么是梯度下降,简单来说梯度下降用来解决机器学习中的模型优化问题。优化问题又分为凸优化问题和非凸优化问题:一个问题如果是凸优化问题,意味着其可以被彻底解决,而非凸优化问题常常无法解决。在实际问题中,我们常常将非凸优化问题转换为凸优化问题,凸优化问题的局部最优解就是全是最优解。

1. 什么是凸优化问题

凸集

  • 首先我们要了解下什么是凸集,其表示一个区域内任意两点间的线段都可以包含在该区域内。
    图片来自维基百科
    维基百科:什么是凸集

其次什么是凸函数

  • 判断依据:f((x1+x2)/2)<=(f(x1)+f(x2))/2
  • 简单来说如果任意两点连接而成的线段与函数没有交点,则可以说此函数为凸函数。
  • a是凸函数,b是非凸函数

(a)是凸函数,(b)是非凸函数(原谅手画图不是太好hh)。

2. 解析梯度下降

在机器学习中,我们之所以寻找凸函数是因为凸函数的局部极小值就是全局最小值。
而对于非凸函数我们常常将其转化为凸函数,因为非凸函数不能保证我们找到的一个
相对局部极小值就是全局最小值。

很多机器学习算法都可以归结为凸优化问题,所以解决凸优化问题是非常重要的,而梯度下降
是最简单也是最常见的最优化问题求解方法,也可以说求函数极小值。

梯度下降过程

梯度下降过程

  1. 首先选取任意参数(w和b)作为起始点,因为我们并不知道使损失函数取得最小值的参数是多少。

  2. 其次明确迭代方向,找到一个最陡的方向下山,在数学上表现就是梯度,也就是负梯度方向下降 最能够到达山谷。

  3. 最后明确迭代步长,如果步子太大,虽然能快速到达山谷,但是容易错过最优点;反之步子太小会延长到达山谷的时间,会消耗计算资源和时间。通常控制步长的也就是我们说的学习率。

明确梯度是什么

在梯度下降的过程中,为什么是沿着负梯度下降方向最快呢。
在微分中,梯度就是对多变量微分的一种表示。

例如:
例子
所以梯度就是一个向量,表示函数在该点处的方向导数沿该方向取最大值,即函数在该点处
变化率最大,变化最快。

因此我们可以说,梯度就是定义一个函数在某一个点的全部偏导数构成的向量。

  1. 单变量函数中,梯度就是函数的导数,表示在某一个点的切线斜率。
  2. 多变量函数中,梯度就是函数在某一点对各个变量进行微分的结果。表示函数在该点上升最快,所以我们说负梯度方向

梯度下降及其参数

梯度下降是求解凸函数的方法,以损失函数作为基础。损失函数是模型预测值与真实值的差距也就是模型参数(w和b)的函数。有时候损失函数是训练数据中单个样本的预测值与真实值的差距,而有时候指代的是训练数据中所有样本的预测值与真实值的差距,简称成本函数
成本函数描述的是样本总体的预测偏差情况,可以是损失函数之和也可以是其平均值之和。
实践中,我们应该考虑总体情况,例如有10个样本,我们得到一个损失函数对样本1最小,但是对其他最大,我们不能考虑决定这个损失函数的参数(w和b)。

梯度下降公式

梯度下降公式
简单描述:给定一组初始值 θ0,沿着损失函数J(θ)方向前进一段距离a,就可以得到新的参数θ1.
(θ0,θ1)就是模型参数(w和b)。

在梯度下降中,我们常设置阈值来控制迭代结束和迭代次数,当迭代次数达到时,迭代结束。一般来说只要设置的足够大,损失函数会在极值点附近徘徊。

3.梯度下降演练

一元函数梯度下降

我们尝试对 f(x) =x^2 +1进行梯度下降。这里原函数比较简单就不放原函数图了。

代码:

# f(x) =x^2 +1 的梯度为 2x
def my_gradient(x,iters,precision,learning_rate):
    
    for i in range(iters):
        print ('第',i,'次迭代x值为:',x)
        grad_current = 2*x # 求梯度
        if abs(grad_current)< precision:
            break # 当梯度小于阈值
        else:
            x = x - learning_rate * grad_current
    print ('极小值处x为:' ,x) 
    return x

if __name__=='__main__':
    my_gradient(x=5,iters=10000,precision=0.000001,learning_rate=0.1)
0 次迭代x值为: 51 次迭代x值为: 4.02 次迭代x值为: 3.23 次迭代x值为: 2.564 次迭代x值为: 2.0485 次迭代x值为: 1.63846 次迭代x值为: 1.310727 次迭代x值为: 1.04857600000000028 次迭代x值为: 0.83886080000000029 次迭代x值为: 0.671088640000000110 次迭代x值为: 0.536870912000000111 次迭代x值为: 0.429496729600000112 次迭代x值为: 0.343597383680000113 次迭代x值为: 0.2748779069440000514 次迭代x值为: 0.2199023255552000315 次迭代x值为: 0.1759218604441600316 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Not_Today.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值