专栏名称: 锐多宝
遥感技术教程、资讯与前沿论文
目录
相关文章推荐
四川日报  ·  《哪吒2》紧急发声! ·  8 小时前  
四川日报  ·  痛惜!四川人记忆中的他走了 ·  昨天  
四川发布  ·  四川首批!77个! ·  昨天  
四川发布  ·  早安四川丨花火腾跃 ·  昨天  
51好读  ›  专栏  ›  锐多宝

从零理解梯度下降算法,梯度下降的算法原理

锐多宝  · 公众号  ·  · 2024-07-26 22:41

正文

大家好,在本节课中,我们会基于二元函数求极值问题:

详细说明 梯度下降算法 的原理和执行过程。

首先要明确的是,梯度下降算法的目标,就是求解目标函数的极值点。

例如,函数f(x, y) = x^2 + y^2:

我们可以使用求偏导数的数学方法,求得该函数在x=0, y=0处,取得极小值点0。

也可以使用梯度下降算法,通过循环迭代,找到这个函数的极小值点。

例如,在对f(x, y) = x^2 + y^2,执行梯度下降算法后:

算法会不断调整目标函数中的参数值,使得目标函数的值不断变小。

最后求出目标函数在x=0,y=0的位置,取得极小值0。


1.梯度下降的详细过程

设某个随机的二元函数是f(x),其中x0和x1是自变量,函数有多个深蓝色标记的极小值点。

在梯度下降算法的执行过程中,会一点一点的调整x0和x1的值:

使f(x)变小,直到f(x)到达某一个局部最小值。

例如,经过迭代,x0和x1,到达了图中的三角标记的局部最小值。

此处求得的x0=0.41,x1=0.8,这两个值会作为算法的结果返回。

具体的过程如下:

首先,对自变量x0和x1进行初始化:

我们可以随意的设置自变量的初始值。

例如,这里设置x0=0.88,x1=0.2,对应点A的位置。

接着需要从A点出发,寻找到函数最低点的路径。

行进前,需要选择行进的方向,此时会发现,A点周围360度有无数个方向。

我们要从中选择一个,能使函数值迅速下降的方向,作为前进方向:

这样才能找到函数的极小值。

而该方向,就是自变量在这个位置的梯度的反方向。

计算出负梯度方向后,沿着该方向走一小步。

所谓走一小步,就是基于梯度的反方向,略微的修改x0和x1的值。

例如,从A点沿着黑色箭头的负梯度方向,修改x0和x1:

函数值f(x)减小,到达位置B。

到了位置B后,按照同样的方法,仍然从B周围的无数个方向,选择使函数下降最快的方向前进。

沿着这个方向,略微修改x0和x1,使f(x)减小,到达位置C。

继续按照同样的方法,不断的调整自变量x0和x1,使f(x0, x1)不断减小:

最终到达函数的最低点,也就是用三角标记的地方。

这个位置的x0和x1的取值,就是我们要求的结果。

需要注意的是,这个位置很可能不是函数的全局最小值。

但肯定是从位置A出发,能够一点点找到的 局部最小值

例如,如果一开始初始化x0和x1的时候,我们不选择位置A,而是A旁边的某个点P:

在这个基础上进行梯度下降搜索,很可能就会找到另一个局部最优解。


2.基于代码理解梯度下降

接下来我们会用Python实现一个,求函数f(x, y) = x^2 + y^2极小值的梯度下降算法:

最终我们要求出,当x=0,y=0时,函数f(x, y)取得极小值0。

在运行梯度下降算法前,首先需要求出该函数在任意一点的梯度向量:

也就是求出函数f(x, y)关于自变量x和y的偏导数。

其结果分别是2x和2y,然后组成梯度向量。

代码实现如下:

首先随意设置自变量x和y的初始值为1.1与2.1。

然后定义迭代轮数n与迭代速率alpha,alpha用于控制“一小步”的大小。

梯度下降是一个迭代的过程,对应这里的for循环。







请到「今天看啥」查看全文