🎯 学习目标

  • 理解凸优化与非凸优化
  • 掌握常用优化算法原理
  • 了解学习率调度的作用
  • 学会选择合适的优化器
优化理论
图:优化是寻找最优解的过程

📊 优化问题概述

机器学习中的优化

机器学习的目标是找到一组参数θ,使得损失函数L(θ)最小化。

min L(θ) = (1/n) Σ loss(f(xᵢ; θ), yᵢ)

🎯 凸优化 vs 非凸优化

凸优化

  • 有唯一全局最优解
  • 局部最优即全局最优
  • 线性回归、逻辑回归
  • SVM是凸优化问题
容易求解

非凸优化

  • 存在多个局部最优解
  • 可能陷入局部最优
  • 神经网络是非凸优化
  • 难以找到全局最优
挑战较大

常用优化算法

优化器 核心思想 优点 适用场景
SGD 随机梯度下降 简单、可解释 凸优化问题
Momentum 累积历史梯度 加速收敛 深度网络
Adam 自适应学习率 收敛快、稳定 通用首选
RMSprop 自适应学习率 RNN效果好 循环神经网络
AdamW Adam+权重衰减 正则化更好 Transformer

🔥 Adam优化器详解

Adam = Adaptive Moment Estimation

Adam结合了Momentum和RMSprop的优点,是目前最流行的优化器。

import torch import torch.nn as nn # 创建模型 model = nn.Linear(10, 1) # 使用Adam优化器 optimizer = torch.optim.Adam( model.parameters(), lr=0.001, # 学习率 betas=(0.9, 0.999), # 动量参数 eps=1e-8, # 数值稳定性 weight_decay=0 # 权重衰减 ) # 训练循环 for epoch in range(100): optimizer.zero_grad() output = model(input) loss = criterion(output, target) loss.backward() optimizer.step()

📉 学习率调度

为什么需要调度?

  • 初期大学习率快速下降
  • 后期小学习率精细调整
  • 避免学习率过大震荡
  • 避免学习率过小停滞

常用调度策略

# StepLR: 每step_size个epoch衰减gamma倍 scheduler = torch.optim.lr_scheduler.StepLR( optimizer, step_size=30, gamma=0.1) # CosineAnnealingLR: 余弦退火 scheduler = torch.optim.lr_scheduler.CosineAnnealingLR( optimizer, T_max=100) # ReduceLROnPlateau: 指标停止改善时衰减 scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau( optimizer, mode='min', factor=0.1)
💡
优化器选择建议
  • 通用场景:Adam,开箱即用
  • Transformer:AdamW + Warmup
  • 计算机视觉:SGD + Momentum
  • 微调大模型:AdamW + 低学习率

📝 本节小结

  • • 神经网络优化是非凸优化问题
  • • Adam是最常用的自适应优化器
  • • 学习率调度帮助模型更好地收敛
  • • 选择优化器需要考虑具体任务