梯度下降算法学习总结——机器学习

目录

1.引言

1.1算法的个人印象

1.2为什么用这个算法

2.梯度下降算法

2.1场景设定

 2.2梯度下降

2.2.1梯度

2.2.2梯度指出了定点上升的最快方向

2.3数学解释

2.3.1

2.3.2 η

 2.3.3 怎么停下来——阈值/迭代次数

2.4 梯度下降法的一般步骤

 2.5实例

3.简单代码

1.引言

1.1算法的个人印象

所谓小马过河是摸着石头过河,而所谓梯度下降,就是探着山坡下山。“下山本没有路,探过的山坡多了,便有了路”(doge)。

咳咳~,严肃点。

机器学习的一种算法,目的求函数的最小值特点是通过梯度下降方法找最小值,前提初始位置步长(学习率)确定。当然这里还是附个图印象更深(嫖的图)。

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODAwMzY2,size_16,color_FFFFFF,t_70#pic_center

1.2为什么用这个算法

1.刚才已经说过,该算法的目的是求函数的最小值。

2.该算法在深度学习中应用广泛,在最小化损失函数函数和线性回归等问题中都需要用到该算法。(不知道比喻是否恰当,我想就像格林公式对于多元函数积分问题的重要性一样)

3.很多已经对该算法由颇深了解的大佬已经会认为这是理所当然,但作为一个小白,我其实并没有被以上两点所说服。既然求函数最小值,那直接求不就行了,高数不都学了,就算计算量大,那也可以用计算机算对吧?为什么有这个算法,后来想想,我确实是个傻叉。对于求函数的最小值,如果按书上的知识结合技巧来求,也许确实很快,但每个不同类型函数的最小值的求法不同,那么求法不一,程序也就千变万化,而该算法恰恰就是一个通用的算法,可以对任意函数求最小值(尽管是接近的),就是说我所不明白的点是该算法对于求任意函数最小值的通用性

2.梯度下降算法

2.1场景设定

我们把梯度下降比作人下山的场景。

话说一位爬山爱好者爬到了山上,突然天空乌云密布,山上大雾重重,于是他不得不下山。然而由于大雾,山上能见度较低,无法确定长久的路径,所以他只得充分利用周围的信息来探索出下山的路。

首先,他以当前位置为基准,疯狂试探,找到了最陂的地方,然后顺着这个方向往下走两步,然后,他又以当前位置为基准,疯狂试探,又找到了最陂的地方,反反覆覆,最终下了山。

68f34f711806da3b0067d12dcbec22ac.png

 2.2梯度下降

梯度下降就如这下山一般。

我们把山看作一个函数,这人就是函数上的一个点,我们的目的是使人走到函数的最低点。开始的时候,人在的位置称为当前的初始点,我们需要找到该点的梯度,然后顺着梯度的反方向下降,到达下一个点,此时当前初始点变化,接着找当前点的梯度,直到函数最小值。

有梯度下降,我们想也有梯度上升吧,当然梯度上升就是上山。

2.2.1梯度

我们反复说到的梯度是什么?初学该算法的我,掏出来积灰已久的高数书,哦,我竟然学过。

对于一元函数,梯度就是函数在该点导数的值

对于多元函数,梯度就是函数在该点对每一个变量求导的值组成的向量

三位坐标中,函数的梯度表示

f0a2f15b028b66fd3831e713ba49f4a2.png

 举个计算例子(嫖的):

7a0bae67e9a84dd8846f12e64655da30.png  

2.2.2梯度指出了定点上升的最快方向

在下山的时候,那位大佬每走几步就要疯狂试探,寻找当前位置最陡的坡,而梯度的反方向恰好就是最陡的那个坡,指出了函数下降最快的方向。

​​​​​​这里就不再证明为什么了,打字不易,请看高数书。

b271111b0efd9416e2ae4baa9c410b29.png

ps:这里又嫖了个图。

2.3数学解释

2.3.1 核心公式:

ee4449685270457eb223c23ba788cd43.png

解释:f是关于Θ的一个函数,(Θ是函数上一点的坐标,比如(Θ=(x,y,z))),Θ0是初始位置,η是步长(后有解释),η后面乘了Θ0的梯度,Θ是下降后的位置。整个函数描述了下山的一个循环过程,确定初始点,求出初始点的梯度,下降相应步长,到达下一个点。

2.3.2 η

在梯度下降算法η中被称作为学习率或者步长,意味着我们可以通过η来控制每一步走的距离,以保证不要步子跨的太大扯着蛋,哈哈,其实就是不要走太快,错过了最低点。同时也要保证不要走的太慢,导致太阳下山了,还没有走到山下。所以η的选择在梯度下降法中往往是很重要的!η不能太大也不能太小,太小的话,可能导致迟迟走不到最低点,太大的话,会导致错过最低点!

 2.3.3 怎么停下来——阈值/迭代次数

其实不难发现,梯度下降求出的最小值只是接近实际最小值,就像下山一样,我们不是非要到山最低处,我只要看一眼“欢迎下次再来”的标语,就知道我们下山了。那么,梯度下降求出的最小值有多小才能看作是最小值呢?

1.我们可以定个阈值,当(Θn - Θn-1)的绝对值=步长*Θn的梯度 < 阈值时,我们将认为求出来最小值。

2.我们定个迭代次数,当程序循环次数达到该迭代次数时,我们认为求出了最大值。

2.4 梯度下降法的一般步骤

1.对于给定函数,求偏导数

2.确定初始值,步长,阈值或迭代次数

3.进行循环,判断是否满足结束条件

 2.5实例

用梯度下降法求给定一元函数的最小值。(这里非常不好意思的嫖了学长的实例)

d3ca26c50e56433297fe72c583825cd2.png

ecdaa91c29b64e81a8317637e68ec3cc.png

3.简单代码

#引用库
import numpy as np
#定义原函数 f(x) = x^2
def f(x) :
    return np.power(x,2)
#定义原函数求导公式1
def d_f_1(x) :
    return 2.0 * x
#定义原函数求导公式2
def d_f_2(f,x,delta = 1e-4) :
    return (f(x+delta)-f(x-delta)) / (2 * delta)

xs = np.arange(-10,11) #限制变量x的范围
learning_rate = 0.1#学习率
max_loop = 30#迭代次数
x_init = 10.0#x初始值
x = x_init
lr = 0.01#ε值,不过我们下面用的是迭代次数限制
for i in range(max_loop) :
    #修改参数
    d_f_x = d_f_2(f,x)
    x = x - learning_rate * d_f_x
    print(x)
print('inittial x =',x_init)
print('arg min f(x) of x =',x)
print('f(x) =',f(x))

效果:

beba9b4ba48449a7934c5926fccff4c9.png

 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值