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()  ## 绘制并展示我们的迭代点

 

Python实现梯度下降法的步骤如下: 1. 首先,导入所需的库,例如numpy和matplotlib.pyplot。这些库将帮助我们进行数值计算和可视化。 2. 声明要优化的目标函数。这个函数可以是任何可微函数,我们希望通过梯度下降法找到它的极小值/极大值。 3. 初始化模型参数(例如权重和偏置)和学习率。学习率控制每次更新参数时的步长。 4. 在一个循环中,迭代更新参数直到满足停止条件。停止条件可以是达到最大迭代次数或参数变化的阈值。 5. 在每次迭代中,计算目标函数关于参数的梯度。这可以通过利用链式法则和导数规则来实现。 6. 使用计算得到的梯度和学习率,更新参数的值。根据梯度的方向和学习率的大小,我们可以向极小值或极大值方向移动。 7. 在每次迭代后,可以计算并记录目标函数的值,以便在训练过程中进行可视化或评估模型的性能。 8. 最后,返回最优参数的值,并可选地进行进一步的分析或使用。 需要注意的是,在使用梯度下降法时,我们通常需要对特征进行标准化,以保证它们的大小比例差不多。这可以使用sklearn中的StandartScaler类来实现。 下面是一个简单的示例代码,演示了如何在Python中使用梯度下降法: ```python import numpy as np import matplotlib.pyplot as plt # 定义目标函数 def target_function(x): return (x - 2.5)**2 - 1 # 初始化参数和学习率 theta = 0 learning_rate = 0.1 # 迭代更新参数 for _ in range(100): # 计算梯度 gradient = 2 * (theta - 2.5) # 更新参数 theta = theta - learning_rate * gradient # 可选:绘制目标函数和优化后的结果 plot_x = np.linspace(-1, 6, 141) plot_y = target_function(plot_x) plt.plot(plot_x, plot_y) plt.scatter(theta, target_function(theta), color='red') plt.show() # 返回最优参数的值 print("Optimal theta:", theta) ``` 通过以上代码,我们可以看到在迭代更新参数后,我们得到了最优参数的值。这就是使用梯度下降法Python求解目标函数极小值的过程。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值