浅谈梯度算法

目录

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<iostream>
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<<"请输入步长以及精确度和初始值"<<endl;
    cin>>length>>accuracy>>x0;
    cout<<"初始时的位置为x:"<<x0<<"\ty:"<<fun(x0)<<endl;
    int i=0;//记录迭代次数
    while((-1)*length*der_fun(x0)>accuracy){
        x0-=length*der_fun(x0);
        i++;
        cout<<"第"<<i<<"次迭代时的位置为x:"<<x0<<"\ty:"<<fun(x0)<<endl;
    }
    return 0;
}

运行结果如下:

5、结尾

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值