Python 如何实现梯度下降以找到局部最小值

Python 如何实现梯度下降以找到局部最小值

梯度下降是机器学习中一种著名的优化方法,用于最小化模型的损失函数。简而言之,它通过反复改变模型的参数,直到发现最小化损失函数的理想值范围。该方法通过沿着损失函数的负梯度,或者更具体地说是沿着最陡下降的路径,迈出微小的步伐。学习率是一种超参数,调节算法在速度和准确性之间的权衡,影响步伐的大小。许多机器学习方法,包括线性回归、逻辑回归和神经网络等,都使用梯度下降。它主要应用于模型训练,目标是最小化目标变量的预期值与实际值之间的差异。在本文中,我们将介绍如何在Python中实现梯度下降以找到局部最小值。

现在是时候在Python中实现梯度下降了。下面是我们将如何实现它的基本指令:

  • 首先,我们导入必要的库。

  • 定义函数及其导数。

  • 接下来,我们将应用梯度下降函数。

  • 应用函数后,我们将设置参数以找到局部最小值。

  • 最后,我们将绘制输出的图形。

在Python中实现梯度下降

导入库

import numpy as np
import matplotlib.pyplot as plt

我们定义函数f(x)及其导数f'(x) −

def f(x):
   return x**2 - 4*x + 6

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

F(x)是需要减小的函数,df是它的导数(x)。梯度下降方法利用导数沿途揭示函数的斜率来引导自己朝向最小值。

然后定义梯度下降函数。

def gradient_descent(initial_x, learning_rate, num_iterations):
   x = initial_x
   x_history = [x]

   for i in range(num_iterations):
       gradient = df(x)
       x = x - learning_rate * gradient
       x_history.append(x)

   return x, x_history

将起始值 x、学习率和所需迭代次数发送给梯度下降函数。为了在每次迭代后保存 x 的值,它将 x 初始化为其原始值并生成一个空列表。然后,该方法根据方程 x = x – 学习率 * 梯度,在所提供的迭代次数中执行梯度下降,每次迭代都会改变 x 的值。该函数产生一个包含每次迭代的 x 值以及最终 x 值的列表。

现在可以使用梯度下降函数来寻找 f(x) 的局部最小值。

示例

initial_x = 0
learning_rate = 0.1
num_iterations = 50

x, x_history = gradient_descent(initial_x, learning_rate, num_iterations)

print("Local minimum: {:.2f}".format(x))

输出

Local minimum: 2.00

在这个示例中,x在开始时设置为0,学习率为0.1,进行50次迭代。最后,我们公布了x的值,应该接近于x=2的局部最小值。

绘制函数f(x)和每次迭代的x值可以让我们看到梯度下降过程的实际情况 –

示例

# Create a range of x values to plot
x_vals = np.linspace(-1, 5, 100)

# Plot the function f(x)
plt.plot(x_vals, f(x_vals))

# Plot the values of x at each iteration
plt.plot(x_history, f(np.array(x_history)), 'rx')

# Label the axes and add a title
plt.xlabel('x')
plt.ylabel('f(x)')
plt.title('Gradient Descent')

# Show the plot
plt.show()

输出

Python 如何实现梯度下降以找到局部最小值

结论

总之,为了找到一个函数的局部最小值,Python利用了一种被称为梯度下降的有效优化过程。梯度下降反复更新输入值,沿着最陡的下降方向,计算每一步中函数的导数,直到达到最低点。在Python中实现梯度下降需要指定要优化的函数及其导数,初始化输入值,并确定算法的学习率和迭代次数。优化完成后,可以通过跟踪其步骤到达最小值并观察它是如何到达的来评估这种方法。由于Python可以处理大型数据集和复杂函数,梯度下降在机器学习和优化应用中可以是一种有用的技术。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程