神经网络基础-神经网络补充概念-47-动量梯度下降法

概念

动量梯度下降法(Momentum Gradient Descent)是一种优化算法,用于加速梯度下降的收敛速度,特别是在存在高曲率、平原或局部最小值的情况下。动量法引入了一个称为"动量"(momentum)的概念,它模拟了物体在运动中积累的速度,使得参数更新更具有惯性,从而更平稳地更新参数并跳过一些不必要的波动。

基本原理和步骤

1初始化参数:初始化模型的参数。

2初始化速度:初始化速度为零向量。

3计算梯度:计算当前位置的梯度。

4更新速度:根据当前梯度和先前速度,计算新的速度。

python 复制代码
velocity = beta * velocity + (1 - beta) * gradient

其中,beta 是动量的超参数,通常取值在0到1之间。

5更新参数:根据新的速度,更新模型的参数。

6重复迭代:重复执行步骤 3 到 5,直到达到预定的迭代次数(epochs)或收敛条件。

动量梯度下降法可以帮助算法跳过较为平坦的区域,加速收敛,并减少参数在局部最小值附近的震荡。这在深度学习中特别有用,因为神经网络的参数空间通常很复杂。

代码实现

python 复制代码
import numpy as np
import matplotlib.pyplot as plt

# 生成随机数据
np.random.seed(0)
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)

# 添加偏置项
X_b = np.c_[np.ones((100, 1)), X]

# 初始化参数
theta = np.random.randn(2, 1)

# 学习率
learning_rate = 0.01

# 动量参数
beta = 0.9
velocity = np.zeros_like(theta)

# 迭代次数
n_iterations = 1000

# 动量梯度下降
for iteration in range(n_iterations):
    gradients = 2 / 100 * X_b.T.dot(X_b.dot(theta) - y)
    velocity = beta * velocity + (1 - beta) * gradients
    theta = theta - learning_rate * velocity

# 绘制数据和拟合直线
plt.scatter(X, y)
plt.plot(X, X_b.dot(theta), color='red')
plt.xlabel('X')
plt.ylabel('y')
plt.title('Linear Regression with Momentum Gradient Descent')
plt.show()

print("Intercept (theta0):", theta[0][0])
print("Slope (theta1):", theta[1][0])
相关推荐
做个文艺程序员5 分钟前
Hermes Agent 深度解析:会自我进化的开源 AI 智能体
人工智能·开源
黎阳之光5 分钟前
非视距·自愈·广覆盖|黎阳之光1.4&5.8GHz宽带自愈网无线基站,重构工业级无线通信
大数据·人工智能·算法·安全·数字孪生
weixin_416660077 分钟前
告别格式烦恼:如何让AI内容转换到Word后不乱码
人工智能·word·数学公式
byte轻骑兵10 分钟前
Apache IoTDB 技术特性与大数据时序数据库选型实践
大数据·数据库·人工智能·物联网·时序数据库
天地沧海13 分钟前
企业 AI 应用完整技术架构图:模型、RAG、Agent、工作流怎么放在一起
人工智能
咚咚王者14 分钟前
人工智能之知识蒸馏 第二章 知识蒸馏的核心原理与核心架构
人工智能·架构
人道领域17 分钟前
2026年3月大模型全景深度解析:国产登顶、百万上下文落地、Agent工业化,AI实用时代全面来临[特殊字符]
大数据·人工智能·chatgpt·大模型
User_芊芊君子17 分钟前
2026 Python+AI入门|0基础速通,吃透热门轻量化玩法
开发语言·人工智能·python
一个天蝎座 白勺 程序猿18 分钟前
AI入门系列:AI入门者的困惑:常见术语解释与误区澄清
人工智能·学习·ai
羑悻的小杀马特19 分钟前
AI创作不再高冷!脉脉AMA第二期:普通人如何靠“提问”和“评论”逆袭?
人工智能·ai·ama