【NLP 11、Adam优化器】

祝你先于春天,

翻过此间铮铮山峦

------ 24.12.8

一、Adam优化器的基本概念

定义

Adam(Adaptive Moment Estimation)是一种基于梯度的优化算法,用于更新神经网络等机器学习模型中的参数。它结合了动量法(Momentum)和自适应学习率方法(如Adagrad和RMSProp)的优点,能够在训练过程中自适应地调整每个参数的学习率,并且利用动量来加速收敛和抑制震荡。


应用场景

广泛应用于深度学习中的各种任务,包括但不限于图像识别、自然语言处理、语音识别等。

例如,在训练卷积神经网络(CNN)进行图像分类任务时,或者在训练循环神经网络(RNN)和Transformer架构的模型用于自然语言处理任务时,Adam优化器都能有效地更新模型参数,使模型更快地收敛并获得较好的性能。


二、Adam优势:

Adam 优化算法应用在非凸优化问题中所获得的优势:

实现简单,计算高效,对内存需求少

参数的更新不受梯度的伸缩变换影响

超参数具有很好的解释性,且通常无需调整或仅需很少的微调

更新的步长能够被限制在大致的范围内(初始学习率)

能自然地实现步长退火过程(自动调整学习率)

很适合应用于大规模的数据及参数的场景

适用于不稳定目标函数

适用于梯度稀疏或梯度存在很大噪声的问题


三、基本机制

Adam 算法和传统的随机梯度下降不同。

随机梯度下降保持单一的学习率(即 alpha)更新所有的权重,学习率在训练过程中并不会改变。

而 Adam 通过计算梯度的一阶矩估计和二阶矩估计而为不同的参数设计独立的自适应性学习率。

记录前几次梯度的值,然后第一层进行求均值,第二层进行求均值的平方,再与当下轮次的梯度进行复合,得到这一轮的loss值,这个目的就是结合一些历史数据,然后自动调节当下轮次模型参数的学习率,对于不平稳的梯度进行更新


四、手动实现Adam算法

python 复制代码
#adam梯度更新
def diy_adam(grad, weight):
    #参数应当放在外面,此处为保持后方代码整洁简单实现一步
    alpha = 1e-3  #学习率
    beta1 = 0.9   #超参数
    beta2 = 0.999 #超参数
    eps = 1e-8    #超参数
    t = 0         #初始化
    mt = 0        #初始化
    vt = 0        #初始化
    #开始计算
    t = t + 1
    gt = grad
    mt = beta1 * mt + (1 - beta1) * gt
    vt = beta2 * vt + (1 - beta2) * gt ** 2
    mth = mt / (1 - beta1 ** t)
    vth = vt / (1 - beta2 ** t)
    weight = weight - (alpha * mth/ (np.sqrt(vth) + eps))
    return weight
相关推荐
非优秀程序员10 分钟前
10分钟,用qclaw打造你的AI选股系统--官方每天送4百万token
人工智能·微信·产品经理
清空mega10 分钟前
动手学深度学习——卷积层详解:卷积核是怎么被学出来的?
人工智能·深度学习
沸点小助手13 分钟前
「百虾大战 & 晒晒你的Token账单」沸点获奖名单公示|本周互动话题上新🎊
人工智能·ai编程·沸点
cyyt16 分钟前
深度学习周报(3.23~3.29)
人工智能·深度学习
badhope27 分钟前
10个高星GitHub项目推荐
python·深度学习·计算机视觉·数据挖掘·github
科威舟的代码笔记30 分钟前
OpenClaw 权限风险深度剖析与 AI Agent 授权治理的技术思考
人工智能·openclaw
DeepModel37 分钟前
【特征选择】嵌入法(Embedded)
人工智能·python·深度学习·算法
云烟成雨TD37 分钟前
Spring AI 1.x 系列【14】三月双版本连发!Spring AI 最新功能全掌握
java·人工智能·spring
LaughingZhu41 分钟前
Product Hunt 每日热榜 | 2026-03-28
数据库·人工智能·经验分享·神经网络·chatgpt
nimadan121 小时前
**Minimax写小说软件2025推荐,AI辅助创作提升故事流畅度与情节合理性**
人工智能·python