python pytorch 损失器与优化器

目录

  • 前言
  • 损失函数(Loss Function)—— 老师的评分标准
    • 常见类型及适用场景:
  • 优化器(Optimizer)—— 学生的学习策略
    • 常见类型及特点:
    • 优化器参数调整指南表
    • 参数调整优先级(从高到低)
  • 搭配使用示例
    • 关键注意事项


前言

书接上回
我们谈到损失器与优化器,这一章我们细谈一下
接下来我用「老师教学生」的比喻来总结,保证清晰易懂:

损失函数(Loss Function)—— 老师的评分标准

作用:量化模型预测结果与真实答案的差距(就像老师给学生打分)

常见类型及适用场景:

  1. nn.MSELoss() (均方误差)

    • 场景:回归任务(预测连续值)
      例如:预测房价、温度、销售额
    • 计算方式(预测值 - 真实值)^2 的平均值
    • 通俗理解:老师严格惩罚大错误(平方放大误差)
  2. nn.CrossEntropyLoss() (交叉熵损失)

    • 场景:多分类任务(如图像分类、文本分类)
      例如:识别猫狗图片、新闻分类
    • 计算方式:比较预测概率分布与真实标签的差异
    • 通俗理解:老师关注「概率分配是否合理」
  3. nn.L1Loss() (绝对误差)

    • 场景:回归任务,对异常值不敏感
      例如:预测年龄、库存量
    • 计算方式|预测值 - 真实值| 的平均值
    • 通俗理解:老师对大小错误一视同仁
  4. nn.BCELoss() (二分类交叉熵)

    • 场景:二分类任务(是/否问题)
      例如:垃圾邮件检测、疾病诊断
    • 计算方式:专门处理0/1两种结果的概率差异
    • 通俗理解:老师只判断对错,不关心其他可能性

优化器(Optimizer)—— 学生的学习策略

作用:根据损失函数的反馈,调整模型参数(就像学生根据错题改进学习方法)

常见类型及特点:

  1. torch.optim.SGD (随机梯度下降)

    • 特点:基础方法,直接沿梯度反方向调整参数
    • 超参数lr(学习率,即每次调整的步长)
    • 适用场景:简单任务,需要精细调参时
    • 比喻:学生每次订正错题时,固定修改量
  2. torch.optim.Adam (自适应矩估计)

    • 特点:自动调整学习率,结合动量(惯性)
    • 超参数lr(默认0.001通常可用)
    • 适用场景:大多数任务的默认选择
    • 比喻:学生会根据错题类型动态调整订正力度
  3. torch.optim.RMSprop

    • 特点:对频繁出现的特征减小学习率
    • 适用场景:RNN等循环网络
    • 比喻:学生发现某类题总错,就重点攻克这类题
  4. torch.optim.Adagrad

    • 特点:为每个参数分配不同的学习率
    • 适用场景:稀疏数据(如推荐系统)
    • 比喻:学生为不同科目(如数学/语文)制定不同学习计划

优化器参数调整指南表

优化器 关键参数 调整建议 适用场景 注意事项
SGD lr (学习率) 0.1 开始尝试,逐步缩小(如0.01→0.001) 简单任务、精细调参 太大→震荡;太小→收敛慢
momentum (动量) 通常设为 0.9,模拟物理惯性 配合大学习率使用 避免与Adam同时用
Adam lr 默认 0.001 通常有效,复杂任务可尝试 0.0001 绝大多数任务默认选择 资源消耗略高
weight_decay 正则化强度,常用 1e-4 防止过拟合 太大导致欠拟合
RMSprop lr 类似Adam,从 0.001 开始 RNN/LSTM等循环网络 对学习率敏感
alpha 衰减率,默认 0.99,调整范围 0.9~0.999 处理非平稳目标 值越大历史影响越久
Adagrad lr 初始值需较大(如 0.1),因会自动衰减 稀疏数据(如推荐系统) 后期学习率趋近于0
AdamW lr 类似Adam,但更稳定(推荐 0.001 搭配权重衰减正则化 比Adam更现代
betas 动量参数,默认 (0.9, 0.999) 通常不需改 需要稳定训练时 调整需谨慎

参数调整优先级(从高到低)

  1. 学习率(lr)「控制步伐大小」

    • 太大:错过最低点(损失震荡)
    • 太小:走得慢(收敛时间长)
    • 技巧:用学习率探测(如 lr=0.1 开始,每10轮减半直到稳定)
  2. 动量(momentum)「保持方向惯性」

    • 高值(0.9):加速收敛,但可能冲过最优解
    • 低值(0.5):更谨慎,适合噪声多的数据
  3. 权重衰减(weight_decay)「防止肌肉过度发达(过拟合)」

    • 典型值:1e-4(轻量正则)到 1e-2(强正则)
    • 与Dropout同时使用时需降低强度

搭配使用示例

# 场景:预测房价(回归任务)
model = ...  # 定义模型
criterion = nn.MSELoss()          # 均方误差
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)  # Adam优化器

# 场景:图像分类(10类别)
model = ...  
criterion = nn.CrossEntropyLoss()  # 交叉熵损失
optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)  # 带动量的SGD

关键注意事项

  1. 分类任务必须用CrossEntropyLoss等专用损失函数,不能用MSE
  2. 学习率过大 → 模型震荡不收敛;过小 → 学习速度慢
  3. Adam通常作为默认优化器,效果比SGD稳定
  4. 二分类任务如果用BCELoss,模型最后一层需要Sigmoid激活函数

你可能感兴趣的:(python,pytorch,人工智能)