神经网络基础-神经网络补充概念-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])
相关推荐
AIGCmagic社区4 分钟前
Show-Harness拆读,语义动作单元让VLM直接控机械臂,零样本跨任务89%
人工智能·aigc·具身智能·ai多模态
ZYJCSZKJ4 分钟前
GEO 服务技术能力评估模型:交付体系、内容架构与持续运维的工程对比
人工智能
尘世中一位迷途小书童5 分钟前
我为什么在 Windows 上做了一个翻译软件:SnapLingo
前端·人工智能·机器学习
Java后端的Ai之路6 分钟前
大模型LLM评估完全指南
开发语言·人工智能·python·llm·评估
Kapaseker13 分钟前
看完 AI 一天做出游戏,我只想问:你愿意掏钱吗?
人工智能
Xuantong_9016 分钟前
WAIC2026 深度观察:玄同科技 × 润建股份,共建中国东盟 AI 跨境 Token 产业生态,开启数字出海新范式
人工智能·ai·智能体
vicky051717 分钟前
Anaconda管理
深度学习
yxlalm22 分钟前
零基础快速上手Trae创建Java项目
java·人工智能
a努力。22 分钟前
三种Agent架构选型指南:从ReAct到Multi-Agent
人工智能
dfbz12345623 分钟前
山茶油礼盒包装工程手记:材质、结构与工艺的参数化拆
大数据·人工智能·经验分享