ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

梯度下降法+python代码实现解释

2021-07-28 20:57:51  阅读:199  来源: 互联网

标签:函数 迭代 python 梯度 代码 波谷 x0 x1


梯度下降法在统计学习还是深度学习中都得到了广泛的应用,我们通过构建合理的模型,将模型预测的输出和正确结果进行误差计算,通过优化模型参数使得输出的结果和正确结果的误差最小,我们往往会把误差损失函数构建成一个凸函数,这样使得参数的求解比较单一化,就像一元二次函数只有一个波峰或者波谷,那么求解答案就是寻找这个波峰或者波谷,如果把误差损失函数表达成类似sinx的函数,存在多个波峰波谷,那么求解的答案就会有多个,显然求解的众多个答案并非都是最优解。

我们现在来解释梯度下降法。
以一个一元二次函数举例。

y=-10*x+x**2

画图如下:
在这里插入图片描述

假设这个表示我们模型的损失函数,现在我们的波谷,就是我们模型误差最小的参数点,此时认为x就是我们未知的参数,如何寻找x取值为多少才能达到这个波谷呢?

这就需要用到梯度下降法。
我们先对关于x的函数y求关于x的导函数,得到为

dy=-10+2*x

于是我们初始化x为一个随机值a

x=a

然后不断迭代下面的过程

x1=x0-dy=x0-lr*(-10+2*x0)
x0=x1

上面的lr为学习率,也叫步长,意思为每次x更新变动的数据大小。因为这是一个不断迭代的过程,我们有两种方法让这个迭代结束,一种是设置误差方法,让这个误差小于某个阈值就结束,当然这种方法容易陷入死循环,因为你无法判断一个模型最终拟合的数据误差有多大,第二种方法就是设置迭代次数,这也是比较合理的目前为止深度学习还是机器学习都比较常用的迭代结束判断条件。

好,现在解释下上面的迭代函数为啥可以找到这个波谷的近似位置,原因是,比如在波谷右边,波谷右边的函数曲线上的任意点斜率大于0,此时x1=x0-lrdy,会让点x向左移,直到找到左边的波谷位置,如果在波谷左边,波谷左边的函数曲线斜率小于0,那么x1=x0-lrdy,就会使得x数值增大,位置向右移,不断移动找到右边的波谷位置。

先利用我们的一元二次函数顶点公式求解出顶点的x=5,现在利用梯度下降法去找一下这个结果是否和我们的标准结果一致。

代码实现

import matplotlib.pyplot as plt
import numpy as np
import random
step=10000#设置迭代次数为10000
x0=random.randint(-10,10)#随机初始化一个数值
lr=0.001#设置学习率为0.001
for i in range(step):
    x1=x0-lr*(-10+2*x0)#梯度下降迭代
    x0=x1
print('梯度下降法求解结果:',x0)

在这里插入图片描述

梯度下降法结果可以说非常接近我们的答案5了。

标签:函数,迭代,python,梯度,代码,波谷,x0,x1
来源: https://blog.csdn.net/weixin_43918046/article/details/119189057

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有