神经网络基础-神经网络补充概念-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
相关推荐
AI Echoes5 分钟前
LangChain Runnable组件重试与回退机制降低程序错误率
人工智能·python·langchain·prompt·agent
Fleshy数模7 分钟前
从欠拟合到正则化:用逻辑回归破解信用卡失信检测的召回率困境
算法·机器学习·逻辑回归
ZCXZ12385296a11 分钟前
【计算机视觉】基于YOLO13-C3k2-ConvAttn的电动汽车充电桩车位线自动检测与定位系统
人工智能·计算机视觉
im_AMBER12 分钟前
Leetcode 111 两数相加
javascript·笔记·学习·算法·leetcode
qwerasda12385214 分钟前
游戏场景中的敌方目标检测与定位实战使用mask-rcnn_regnetx模型实现
人工智能·目标检测·游戏
TracyCoder12316 分钟前
LeetCode Hot100(21/100)——234. 回文链表
算法·leetcode·链表
硅基流动17 分钟前
从云原生到 AI 的跃迁探索之路|开发者说
大数据·人工智能·云原生
jackywine622 分钟前
零样本学习(Zero-Shot Learning)和少样本学习(Few-Shot Learning)有何区别?AI 是怎么“猜“出来的
人工智能·机器学习
可涵不会debug25 分钟前
Redis魔法学院——第四课:哈希(Hash)深度解析:Field-Value 层级结构、原子性操作与内部编码优化
数据库·redis·算法·缓存·哈希算法
犀思云25 分钟前
构建全球化多云网格:FusionWAN NaaS 在高可用基础设施中的工程实践
运维·网络·人工智能·系统架构·机器人