浅谈梯度算法

浅谈梯度算法,第1张

目录

1、概念

2、梯度下降算法

2.1场景

2.2梯度概念

3、梯度算法

3.1基本思路:

3.2 length:

3.3正负梯度:

4、代码实现:

4.1Python

 4.2C++

5、结尾


1、概念

梯度下降在机器学习中应用十分广泛,可以运用到线性拟合等领域里。本文采用下山的方法来帮助大家理解梯度算法的原理。

2、梯度下降算法 2.1场景

我们需要从山上到山谷。但此时山上的浓雾很大,导致可视度很低;因此,下山的路径就无法确定,必须利用自己周围的信息一步一步地找到下山的路。这个时候,便可利用梯度下降算法来帮助自己下山。怎么做呢,首先以他当前的所处的位置为基准,寻找这个位置最陡峭的地方,然后朝着下降方向走一步,然后又继续以当前位置为基准,再找最陡峭的地方,再走直到最后到达最低处。

2.2梯度概念

在高等数学中梯度是这样定义的:梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。

一元函数中梯度是:

而多元函数(以二元函数为列)梯度是:

3、梯度算法 3.1基本思路:

        通过迭代求出最小值,基本公式如下:

 梯度算法需要的参数:length(η):步长、accuracy:精确度(误差所容忍的值)、x0:初始值

3.2 length:

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

3.3正负梯度:

        由梯度的知识点我们很容易知道当我们要上山时就应该是正号,而我们下山时应该时负号。因为梯度是函数变化最快快的方向。

4、代码实现: 4.1Python
def f(x):
    return (x*x)/2-2*x
def f_1(x):
    return x-2
length,accuracy,x =eval(input("请输入步长和精确度已经初始位置:"))
# length=0.9
# accuracy=0.01
# x=-4
i =0
while (-1)*(length * f_1(x))>accuracy:
    i=i+1
    x=x-length*f_1(x)
    print("第%d次迭代\nx=%f\ny=%f\n"%(i,x,f(x)))

运行结果:

        

 

 4.2C++
#include
using namespace std;
//定义初始函数
double fun(double x){
    return (x*x)/2-2*x;
}
//定义初始函数的导数
double der_fun(double x){
    return x-2.0;
}
int main(){
    //取三个变量分别为步长、精确度和初始位置(此处可以是任意值)
    double length,accuracy,x0;
    cout<<"请输入步长以及精确度和初始值"<>length>>accuracy>>x0;
    cout<<"初始时的位置为x:"<accuracy){
        x0-=length*der_fun(x0);
        i++;
        cout<<"第"<

运行结果如下:

5、结尾

        其实梯度算法并没有我写的这么简单,我的知识简单的介绍了梯度算法的原理。梯度算法可以进行直线拟合等操作。大家可以参考这位大佬如何求直线拟合的方法链接如下:https://blog.csdn.net/qq_41800366/article/details/86583789

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1498038.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-25
下一篇 2022-06-25

发表评论

登录后才能评论

评论列表(0条)