神经网络基础-神经网络补充概念-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])
相关推荐
编码小哥4 小时前
OpenCV Haar级联分类器:人脸检测入门
人工智能·计算机视觉·目标跟踪
程序员:钧念4 小时前
深度学习与强化学习的区别
人工智能·python·深度学习·算法·transformer·rag
数据与后端架构提升之路4 小时前
TeleTron 源码揭秘:如何用适配器模式“无缝魔改” Megatron-Core?
人工智能·python·适配器模式
Chef_Chen5 小时前
数据科学每日总结--Day44--机器学习
人工智能·机器学习
这张生成的图像能检测吗5 小时前
(论文速读)FR-IQA:面向广义图像质量评价:放松完美参考质量假设
人工智能·计算机视觉·图像增强·图像质量评估指标
KG_LLM图谱增强大模型5 小时前
本体论与知识图谱:揭示语义技术的核心差异
人工智能·知识图谱·本体论
JicasdC123asd6 小时前
黄瓜植株目标检测:YOLOv8结合Fasternet与BiFPN的高效改进方案
人工智能·yolo·目标检测
爱吃泡芙的小白白6 小时前
深入解析:2024年AI大模型核心算法与应用全景
人工智能·算法·大模型算法
哥布林学者7 小时前
吴恩达深度学习课程五:自然语言处理 第二周:词嵌入(二)词嵌入模型原理
深度学习·ai
小程故事多_807 小时前
攻克RAG系统最后一公里 图文混排PDF解析的挑战与实战方案
人工智能·架构·pdf·aigc