#机器学习 (1) 梯度下降

文章介绍了梯度下降算法的基本原理和步骤,包括随机选择初始值、设定误差和学习率,以及如何通过函数导数反方向更新自变量来逐步逼近函数的极小值。提供了一个使用Python实现的示例,通过绘制曲线图和散点图展示算法的执行过程和结果。
摘要由CSDN通过智能技术生成

梯度下降算法用于:求函数的极小值

我们要从山坡上下来,首先要决定好自变量X的方向,然后迈出步伐。重复多次,就能到达山谷的底部(极小值)。

1.首先,我们在函数定义域里面随机选取X的值。

2.然后,我们需要定义误差e和学习率\eta的值。

e:到达某个位置时,山坡已经足够平滑(坡度小于e),我们可以认为到达了谷底,即收敛到了极小值

\eta:决定好方向后,迈出的步长。常用的做法是,依次尝试如下取值:

0.001, 0.003,0.01, 0.03,0.1, 0.3,1

3.确定好了现在的位置(设定初始值),我们开始迈出第一步:

当前函数下降最快的方向,也就是函数梯度的反方向,是最快抵达山谷的方向。

求当前位置的导数值:\frac{\partial f}{\partial {x}_0 },新位置:

x_1 = x_0 - \eta \cdot\frac{\partial f}{\partial {x}_0 }         (1)

这样,我们就离山谷进了一步。

4.重复第三步,也就是迭代式(1),直到坡度足够平滑时(当前坡度\frac{\partial f}{\partial {x}_n }小于可以接受的误差e),

x_n即为梯度下降算法收敛至函数极小值时,自变量的值。

代码实现:

import numpy as np
import matplotlib.pyplot as plt


def f(x):
    return pow(x - 2.5, 2) + 3


def df(x):
    return 2 * x - 5


n = 0.01  #学习率
e = 0.001  #误差
x0 = -7.5  #初值
x = x0  #自变量
xs = []  #x的迭代过程记录
while 1:
    dy = df(x)
    if abs(dy) < e: break
    x = x - n * dy
    xs.append(x)

print(f"极小值点x={x}, 极小值为f(x)={f(x)}")

xs1 = np.arange(-7.5, 12.5)
xs2 = np.array(xs)
plt.plot(xs1, f(xs1))  #曲线图
plt.scatter(xs2, f(xs2), color="red", marker=".")  #散点图
plt.show()

运行结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值