在深度学习的优化过程中,梯度下降法及其变体是必不可少的工具。通过对梯度下降法的理论学习,我们能够更好地理解深度学习模型的训练过程。本篇文章将介绍梯度下降的基本原理,并通过代码实现展示其具体应用。我们会从二维平面的简单梯度下降开始,逐步过渡到三维,再对比多种优化器的效果。
一、梯度下降法简介
梯度下降法(Gradient Descent)是一种常用的优化算法,广泛应用于机器学习和深度学习中。其基本思想是通过迭代更新参数,使得损失函数逐步减小,最终找到最优解。常见的梯度下降法包括随机梯度下降(SGD)、动量法(Momentum)、自适应学习率方法(Adagrad、RMSprop、Adadelta)和Adam等。
二、梯度下降的二维实现
首先,我们来实现一个简单的二维平面内的梯度下降法。目标是找到函数 \(f(x) = x^2 + 4x + 1\) 的最小值。
import torch
import matplotlib.pyplot as plt
# 定义目标函数
def f(x):
return x**2 + 4*x + 1
# 初始化参数
x = torch.tensor([2.0], requires_grad=True)
learning_rate = 0.7
# 记录每次梯度下降的值
xs, ys = [], []
# 梯度下降迭代
for i in range(100):
y = f(x)
y.backward()
with torch.no_grad():
x -= learning_rate * x.grad
x.grad.zero_()
xs.append(x.item())
ys.append(y.item())
# 打印最终结果
print(f"最终x值: {x.item()}")
# 可视化
x_vals = torch.linspace(-4, 2, 100)
y_vals = f(x_vals)
plt.plot(x_vals.numpy(), y_vals.numpy(),