对梯度下降的理解

概念


梯度下降法是一种常用的迭代方法,其目的是让输入向量找到一个合适的迭代方向,使得输出值能达到局部最小值。在拟合线性回归方程时,我们把损失函数视为以参数向量为输入的函数,找到其梯度下降的方向并进行迭代,就能找到最优的参数值。

梯度下降算法过程如下:

1)随机初始值对梯度下降的理解

2)迭代对梯度下降的理解,直至收敛。对梯度下降的理解表示在对梯度下降的理解处的负梯度方向,对梯度下降的理解表示学习率。

 

举例

我们已经基本了解了梯度下降算法的计算过程,那么我们就来看几个梯度下降算法的小实例,首先从单变量的函数开始,然后介绍多变量的函数。

单变量函数的梯度下降


我们假设有一个单变量的函数:对梯度下降的理解

函数的微分,直接求导就可以得到:对梯度下降的理解

初始化,也就是起点,起点可以随意的设置,这里设置为1:对梯度下降的理解

学习率也可以随意的设置,这里设置为0.4:对梯度下降的理解

根据梯度下降的计算公式:对梯度下降的理解

我们开始进行梯度下降的迭代计算过程:

对梯度下降的理解

如图,经过四次的运算,也就是走了四步,基本就抵达了函数的最低点,也就是山底

对梯度下降的理解


多变量函数的梯度下降


我们假设有一个目标函数:对梯度下降的理解

现在要通过梯度下降法计算这个函数的最小值。我们通过观察就能发现最小值其实就是 (0,0)点。但是接下来,我们会从梯度下降算法开始一步步计算到这个最小值!
我们假设初始的起点为:对梯度下降的理解

初始的学习率为:对梯度下降的理解

函数的梯度为:对梯度下降的理解

进行多次迭代:

对梯度下降的理解

我们发现,已经基本靠近函数的最小值点:

对梯度下降的理解

通俗讲解

梯度下降有什么用?

 

其实梯度下降不是一个机器学习算法,而是一种基于搜索的最优化方法。因为很多算法都没有闭式解的,所以需要通过一次一次的迭代来找到找到一组参数能让我们的损失函数最小。损失函数的大概套路可以参看这个图:

对梯度下降的理解

 

所以说,如果用人话来描述梯度下降是干嘛的,就是。。。我不断的洗澡(寻找),油腻(靠谱)的师姐(权重)在哪里(是多少)

 

怎么搜索?

刚刚我们已经知道了梯度下降就是用来找权重的,那怎么找权重捏?瞎XX玄学猜?不可能的。。这辈子都不可能玄学猜的。想想都知道,权重的取值范围可以看成是个实数空间,那100个特征就对应着100个权重,10000个特征就对应着10000个权重。如果靠瞎XX玄学猜权重的话。嗯,应该这辈子都猜不中了。所以找权重的找个套路来找。这个套路就是梯度!!!

那么梯度是啥?如果撸公式出来那就是酱紫:
对梯度下降的理解

是不是有点眼熟,如果翻译成中文就是这样:

对梯度下降的理解

这个时候可以明显的看出来梯度,无非就是把权重对损失函数的偏导算出来排成一个向量而已。而且梯度还有个性质,就是梯度方向是函数值增长最快的的方向。

现在我们知道了梯度的方向是函数增长最快的方向,那我在梯度前面取个负号(反方向),那不就是函数下降最快的方向了么。(还是可以根据郊区王者这个图来自行脑补= =)所以哇,梯度下降它的本质无非就是更新权重的时候是沿着梯度的反方向更新。好比下面这个图,假如我是个瞎子,然后莫名其妙的来到了一个山谷里。现在我要做的事情就是走到山谷的谷底。因为我是瞎子,所以我只能一点一点的挪。要挪的话,那我肯定是那我的脚在我四周扫一遍,觉得哪里感觉起来更像是在下山那我就往哪里走。然后这样循环反复一发我最终就能走到山谷的谷底。
 

对梯度下降的理解

循环干的事情就相当于我下山的时候在迈步子,代码里的α装逼点叫学习率,实际上就是代表我下山的时候步子迈多大。值越小就代表我越苟,步子迈得小,深怕掉坑里。值越大就代表我越骚,但是容易扯着蛋

 

参考:

https://blog.csdn.net/alw_123/article/details/83065764

https://blog.csdn.net/Neuf_Soleil/article/details/82285497

https://blog.csdn.net/Hubz131/article/details/78309629

https://www.cnblogs.com/pinard/p/5970503.html