Python 梯度下降法:简单函数的梯度理解&实现梯度下降

梯度下降一般用来求解优化问题,我们引入一个非常简单的函数来解释梯度下降。

f(x)=(x-1)^2+1

根据定义,梯度就是函数对自变量的偏导数所组成的向量,这个向量指向函数的最大增长方向,他的模长就是最快增速。(方向导数指函数在某个方向上的变化率,梯度指向最大变化率的方向,它的模长也就是最大的方向导数。在上述方程中只存在平面,所以方向导数是固定的斜率方向上的向量的模长,可以直接理解为导数)

我们随便选取某点,并通过梯度下降进行迭代,以找到极值点。

import random
a=random.uniform(0.01,0.05) ## a denotes learning rate 学习率可以是固定的,也可以是随机的
g=2*x-2  # g denotes gradient
x=x-a*g
print(x)

这段代码清晰地展示了怎样实现一次迭代。我们重复这个过程可以完成迭代。

我们将这段代码进行上千次迭代,并将移动点进行绘图。

import matplotlib.pyplot as plt
import numpy as np

X=5.5
Y=(X-1)**2+1
all_X=[]
all_Y=[]

for each in range(10000):
    gradient=2*(X-1)
    r=random.uniform(0.01,0.05)
    X=X-gradient*0.01
    Y=(X-1)**2+1
    all_X.append(X)
    all_Y.append(Y)
    print(X)

plotx = np.linspace(-5, 7, 100)
ploty=(plotx-1)**2+1
plt.plot(plotx,ploty)  ## 把整体的函数图像画出来
plt.axis([-10,11,0,50]) ## 关于坐标轴
plt.scatter(np.array(all_X), np.array(all_Y), color='red')
plt.show()  ## 绘制并展示我们的迭代点

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值