从梯度下降到 Adam 优化器:掌握神经网络参数优化的核心原理

目录

一、前言

二、神经网络训练的本质

三、什么是梯度

[四、梯度下降(Gradient Descent)](#四、梯度下降(Gradient Descent))

五、梯度下降的缺陷

六、随机梯度下降(SGD)

[七、Mini-Batch SGD](#七、Mini-Batch SGD)

八、Momentum优化器

九、RMSProp优化器

十、Adam优化器

十一、为什么Adam这么强

十二、PyTorch使用Adam

十三、实战案例

十四、常见优化器对比

十五、面试高频问题

什么是梯度?

梯度下降的目的是什么?

SGD和GD区别?

Momentum解决什么问题?

Adam为什么效果好?

当前大模型常用什么优化器?

十六、总结


一、前言

在学习神经网络时,我们经常会看到这样的代码:

python 复制代码
optimizer = torch.optim.Adam(
    model.parameters(),
    lr=0.001
)

或者:

python 复制代码
optimizer = torch.optim.SGD(
    model.parameters(),
    lr=0.01
)

很多初学者会疑惑:

复制代码
为什么训练神经网络需要优化器?

优化器到底在优化什么?

SGD和Adam有什么区别?

为什么现在大家都在用Adam?

事实上:

复制代码
神经网络训练的本质

就是不断优化参数

而优化器的作用就是:

复制代码
找到一组最优权重

让模型误差最小

从最早的梯度下降(GD),到随机梯度下降(SGD),再到 Momentum、RMSProp 和 Adam,神经网络优化算法经历了数十年的发展。

本文将系统讲解:

复制代码
什么是梯度下降

梯度是什么

SGD原理

Momentum原理

RMSProp原理

Adam原理

PyTorch实战

帮助你彻底理解神经网络训练的核心机制。


二、神经网络训练的本质

神经网络本质上是在寻找:

复制代码
最优参数W

例如:

复制代码
输入图片

↓

神经网络

↓

预测结果

↓

真实结果

如果预测错误:

复制代码
产生损失(Loss)

例如:

复制代码
真实值:1

预测值:0.7

误差:0.3

训练目标:

复制代码
让Loss越来越小

整个过程如下:


三、什么是梯度

梯度(Gradient)可以理解为:

复制代码
函数增长最快的方向

例如:

假设损失函数:

复制代码
Loss = x²

当:

复制代码
x = 3

时:

复制代码
Loss = 9

如果想让Loss变小:

复制代码
x必须向0靠近

而梯度正好告诉我们:

复制代码
应该朝哪个方向移动

可以理解为:

复制代码
梯度

=

下山时坡度最大的方向

四、梯度下降(Gradient Descent)

假设你站在山顶:

复制代码
目标:

走到山谷最低点

过程:

神经网络训练也是如此。

参数更新公式:

复制代码
W = W - 学习率 × 梯度

其中:

复制代码
W

模型参数

Learning Rate

学习率

Gradient

梯度

代码实现:

python 复制代码
w = 10

lr = 0.1

for i in range(10):

    grad = 2 * w

    w = w - lr * grad

    print(w)

输出:

复制代码
8.0
6.4
5.12
...

逐渐逼近最优解。


五、梯度下降的缺陷

假设:

复制代码
训练集有100万条数据

传统梯度下降每次都需要:

复制代码
计算全部样本

然后更新一次参数

流程:

缺点:

复制代码
速度慢

内存消耗大

训练效率低

因此出现:

复制代码
SGD

六、随机梯度下降(SGD)

SGD:

复制代码
Stochastic Gradient Descent

思想:

复制代码
每次只用一个样本更新参数

例如:

复制代码
样本1

更新参数

↓

样本2

更新参数

↓

样本3

更新参数

代码:

python 复制代码
for x, y in dataset:

    grad = compute_gradient(x, y)

    w = w - lr * grad

优点:

复制代码
速度快

内存占用低

缺点:

复制代码
更新方向波动大

容易震荡

七、Mini-Batch SGD

现代深度学习几乎都采用:

复制代码
Mini Batch

例如:

复制代码
一次训练32条

一次训练64条

一次训练128条

代码:

复制代码
train_loader = DataLoader(
    dataset,
    batch_size=32
)

优点:

复制代码
稳定

训练效率高

GPU利用率高

八、Momentum优化器

SGD的问题:

复制代码
容易左右摇摆

如下图:

复制代码
左

右

左

右

左

右

收敛很慢。

于是提出:

复制代码
Momentum

思想:

复制代码
增加惯性

类似:

复制代码
滚雪球下山

速度越来越快。

参数更新:

复制代码
当前梯度

+

历史梯度

PyTorch代码:

python 复制代码
optimizer = torch.optim.SGD(
    model.parameters(),
    lr=0.01,
    momentum=0.9
)

优点:

复制代码
收敛更快

减少震荡

九、RMSProp优化器

研究人员发现:

复制代码
不同参数

梯度大小不同

例如:

复制代码
参数A梯度很大

参数B梯度很小

统一学习率效果不好。

于是提出:

复制代码
RMSProp

思想:

复制代码
不同参数

使用不同学习率

特点:

复制代码
梯度大

学习率变小

梯度小

学习率变大

PyTorch实现:

python 复制代码
optimizer = torch.optim.RMSprop(
    model.parameters(),
    lr=0.001
)

优点:

复制代码
收敛更稳定

十、Adam优化器

Adam:

复制代码
Adaptive Moment Estimation

目前最流行的优化器之一。

核心思想:

复制代码
Momentum

+

RMSProp

同时拥有:

复制代码
历史梯度记忆

自适应学习率

工作流程:

因此:

复制代码
Adam

=

Momentum

+

RMSProp

十一、为什么Adam这么强

Adam同时解决:

复制代码
梯度震荡

学习率固定

收敛慢

等问题。

优点:

复制代码
收敛快

训练稳定

参数调节简单

适合大多数任务

因此:

复制代码
Transformer

BERT

GPT

LLaMA

DeepSeek

等模型大量使用Adam变种。


十二、PyTorch使用Adam

创建优化器:

python 复制代码
import torch

optimizer = torch.optim.Adam(
    model.parameters(),
    lr=0.001
)

训练代码:

python 复制代码
for epoch in range(100):

    optimizer.zero_grad()

    output = model(x)

    loss = criterion(output, y)

    loss.backward()

    optimizer.step()

执行流程:

复制代码
前向传播

↓

计算损失

↓

反向传播

↓

Adam更新参数

十三、实战案例

训练一个简单线性回归:

python 复制代码
import torch
import torch.nn as nn

x = torch.tensor([[1.0],[2.0],[3.0]])
y = torch.tensor([[2.0],[4.0],[6.0]])

model = nn.Linear(1,1)

criterion = nn.MSELoss()

optimizer = torch.optim.Adam(
    model.parameters(),
    lr=0.1
)

for epoch in range(200):

    pred = model(x)

    loss = criterion(pred,y)

    optimizer.zero_grad()

    loss.backward()

    optimizer.step()

    if epoch % 20 == 0:
        print(epoch, loss.item())

输出:

复制代码
0 12.56
20 0.63
40 0.08
60 0.01
...

Loss不断下降。

说明:

复制代码
Adam成功找到最优参数

十四、常见优化器对比

优化器 特点 优点 缺点
GD 全量梯度 稳定 非常慢
SGD 单样本更新 震荡大
MiniBatch 小批量更新 常用 需要调Batch
Momentum 加入惯性 收敛快 参数更多
RMSProp 自适应学习率 稳定 较复杂
Adam Momentum+RMSProp 综合最强 占用内存更多

十五、面试高频问题

什么是梯度?

复制代码
损失函数增长最快的方向

梯度下降的目的是什么?

复制代码
最小化Loss

SGD和GD区别?

复制代码
GD使用全部样本

SGD使用单个样本

Momentum解决什么问题?

复制代码
减少震荡

加快收敛

Adam为什么效果好?

复制代码
结合Momentum

和RMSProp优点

当前大模型常用什么优化器?

复制代码
Adam

AdamW

十六、总结

神经网络训练的本质就是:

复制代码
不断寻找更优参数

优化算法的发展路线:

复制代码
梯度下降 GD
        ↓
随机梯度下降 SGD
        ↓
Momentum
        ↓
RMSProp
        ↓
Adam

每一次优化器的升级,都是为了解决:

复制代码
收敛速度慢

震荡严重

学习率难调整

等问题。

如今,Adam及其改进版 AdamW 已成为深度学习领域的事实标准。

可以说:

神经网络决定模型的上限,而优化器决定模型能否真正达到这个上限。从梯度下降到 Adam 的演进史,本质上就是深度学习训练效率不断提升的发展史。

相关推荐
笨蛋©1 小时前
基于Infra CONVERT 正版授权的图纸识别与FAI自动化实务
ai·数字化·cad·制造业·图纸识别
maosheng11461 小时前
基于AI 文本生成的自动化Linux 运维文档系统
运维·人工智能·自动化
armwind1 小时前
openISP学习6-CFA -Color Filter Array Interpolation(去马赛克)
图像处理·计算机视觉
cxr8281 小时前
分享新疆应急决策大脑功能特性简报
人工智能·应急响应管理
Raink老师1 小时前
【AI面试临阵磨枪-98】前端如何展示多模态流式输出:文字打字机 + 图片渐进 + 音频播放?
前端·人工智能·面试
Jelena157795857921 小时前
主流电商平台(淘宝/1688/京东/拼多多)商品比价与数据分析实战指南
大数据·人工智能·数据分析
ShareBeHappy_Qin1 小时前
AI —— Agent相关概念-1
人工智能·ai·agent
小雨下雨的雨1 小时前
鸿蒙PC Electron框架实现流体气泡模拟器
前端·人工智能·算法·华为·electron·鸿蒙
morning_judger1 小时前
Agent开发系列(七)-可观测性Agent的设计
运维·人工智能