神经网络基础-神经网络补充概念-49-adam优化算法

概念

Adam(Adaptive Moment Estimation)是一种优化算法,结合了动量梯度下降法和RMSProp的优点,用于在训练神经网络等深度学习模型时自适应地调整学习率。Adam算法在深度学习中广泛应用,通常能够加速收敛并提高模型性能。

Adam算法综合了动量(momentum)和均方梯度的移动平均(RMSProp)来更新模型参数。与传统的梯度下降法不同,Adam维护了一个每个参数的动量变量和均方梯度的移动平均变量,并在每个迭代步骤中使用这些变量来调整学习率。

步骤

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

2初始化动量变量和均方梯度的移动平均:初始化动量变量为零向量,初始化均方梯度的移动平均为零向量。

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

4更新动量变量:计算动量变量的移动平均。

python 复制代码
momentum = beta1 * momentum + (1 - beta1) * gradient

其中,beta1 是用于计算动量变量移动平均的超参数。

5更新均方梯度的移动平均:计算均方梯度的移动平均。

python 复制代码
moving_average = beta2 * moving_average + (1 - beta2) * gradient^2

其中,beta2 是用于计算均方梯度的移动平均的超参数

6修正偏差

对动量变量和均方梯度的移动平均进行偏差修正,以减轻初始迭代的影响。

python 复制代码
corrected_momentum = momentum / (1 - beta1^t)
corrected_moving_average = moving_average / (1 - beta2^t)

7更新参数

python 复制代码
parameter = parameter - learning_rate * corrected_momentum / (sqrt(corrected_moving_average) + epsilon)

其中,epsilon 是一个小的常数,防止分母为零。

8重复迭代:重复执行步骤 3 到 7,直到达到预定的迭代次数(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.1

# Adam参数
beta1 = 0.9
beta2 = 0.999
epsilon = 1e-8
momentum = np.zeros_like(theta)
moving_average = np.zeros_like(theta)

# 迭代次数
n_iterations = 1000

# Adam优化
for iteration in range(n_iterations):
    gradients = 2 / 100 * X_b.T.dot(X_b.dot(theta) - y)
    momentum = beta1 * momentum + (1 - beta1) * gradients
    moving_average = beta2 * moving_average + (1 - beta2) * gradients**2
    corrected_momentum = momentum / (1 - beta1**(iteration+1))
    corrected_moving_average = moving_average / (1 - beta2**(iteration+1))
    theta = theta - learning_rate * corrected_momentum / (np.sqrt(corrected_moving_average) + epsilon)

# 绘制数据和拟合直线
plt.scatter(X, y)
plt.plot(X, X_b.dot(theta), color='red')
plt.xlabel('X')
plt.ylabel('y')
plt.title('Linear Regression
相关推荐
MARS_AI_7 分钟前
人工智能外呼系统:重构智能交互的全维度进化
人工智能·自然语言处理·重构·交互·语音识别·信息与通信
lingxiao1688814 分钟前
双目立体视觉
图像处理·算法·机器学习·计算机视觉
JNU freshman19 分钟前
和为target问题汇总
算法
2401_8590490823 分钟前
MSPM0--Timer(一口一口喂版)
arm开发·单片机·mcu·算法
赵青临的辉24 分钟前
基础数学:线性代数与概率论在AI中的应用
人工智能·线性代数·概率论
寂空_28 分钟前
【算法笔记】ACM数论基础模板
c++·笔记·算法
小众AI34 分钟前
Void: Cursor 的开源平替
人工智能·ai编程
ggabb37 分钟前
当九九乘法口诀“出海”英国:文化碰撞下的数学教育变革
算法
资深の小白40 分钟前
一个基于 Spring Boot 的实现,用于代理百度 AI 的 OCR 接口
人工智能·spring boot·百度
爱coding的橙子43 分钟前
每日算法刷题计划Day7 5.15:leetcode滑动窗口4道题,用时1h
算法·leetcode