1. 深度学习优化器概述
在深度学习模型的训练过程中,优化器扮演着至关重要的角色。作为一名长期从事AI研发的工程师,我深刻体会到优化器选择对模型训练效果的决定性影响。优化器的本质是通过调整模型参数(权重w和偏置b)来最小化损失函数,使模型预测结果尽可能接近真实值。
传统梯度下降方法面临的主要挑战是"数据量困境"——当处理数万甚至上亿规模的样本时,计算所有样本的梯度均值会导致内存/显存不足(OOM)和计算效率低下的问题。这促使了梯度下降的三种核心变体发展:
- 批量梯度下降(BGD):每次迭代使用全部样本计算梯度
- 随机梯度下降(SGD):每次迭代仅使用1个样本
- 小批量梯度下降(MBGD):折中方案,使用固定大小的mini-batch
实际应用中常将MBGD误称为SGD,但严格来说MBGD使用多个样本(mini-batch),而SGD仅用1个样本。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础优化器原理与实现
2.1 随机梯度下降(SGD)的核心机制
SGD作为优化器的基石,其参数更新公式简单直接:
code复制w = w - lr × dw
b = b - lr × db
其中lr是学习率,控制更新步长;dw/db是当前mini-batch样本对参数的梯度。
在实现上,SGD有几个关键点需要注意:
- 样本需要随机打乱,避免顺序影响
- batch_size的选择影响训练稳定性
- 学习率需要谨慎设置,过大易震荡,过小收敛慢
python复制# SGD核心实现示例
def SGD(points, w, b, lr, batch_size=2):
np.random.shuffle(points) # 关键步骤:打乱数据
for num_batch in range(0, len(points), batch_size):
batch_points = points[num_batch:num_batch + batch_size, :]
batch_X, batch_Y = batch_points[:, 0], batch_points[:, 1]
# 计算当前batch梯度
pre_y = np.dot(batc
