迁移学习|ResNet18

一、导入库

二、设置随机种子

三、数据增强和数据加载

四、加载预训练模型

五、定义损失函数和优化器

六、学习率调度器

七、训练模型

八、可视化训练过程

九、总结

1. 常见优化器概述

1.1 随机梯度下降(SGD: Stochastic Gradient Descent)

简介: SGD 是最基本的优化算法,通过在每个小批量(mini-batch)数据上计算梯度并更新模型参数。

优点:

  • 简单易实现。
  • 对大规模数据集和高维参数空间表现良好。

缺点:

  • 对学习率敏感,需要精心调整。
  • 可能在鞍点和局部最优点处停滞。
  • 收敛速度较慢,尤其是在非凸优化问题中。

适用场景:

  • 基础模型训练。
  • 需要精细控制训练过程的场景。

1.2 带动量的 SGD(SGD with Momentum)

简介: 在标准 SGD 的基础上引入动量概念,利用之前梯度的累积来加速收敛并减少震荡。

优点:

  • 提高了收敛速度。
  • 有助于跨越鞍点和陡峭的局部最优点。

缺点:

  • 需要调节动量参数,增加了超参数的复杂性。

适用场景:

  • 大多数深度学习任务,尤其是卷积神经网络(CNN)等。

1.3 自适应矩估计(Adam: Adaptive Moment Estimation)

简介: Adam 结合了动量和 RMSProp 的优点,利用一阶矩(均值)和二阶矩(未中心化的方差)来动态调整学习率。

优点:

  • 对学习率不敏感,适合各种网络结构。
  • 通常具有较快的收敛速度。
  • 内部有偏差校正,适用于小批量数据。

缺点:

  • 在某些情况下可能导致收敛到次优点。
  • 需要更多的内存来存储一阶和二阶矩。

适用场景:

  • 各类深度学习任务,特别是自然语言处理(NLP)和生成对抗网络(GAN)等需要快速收敛的场景。

1.4 RMSProp

简介: RMSProp 通过对每个参数使用不同的学习率,适应性地调整学习率大小,解决了 Adagrad 的学习率单调下降的问题。

优点:

  • 适用于非平稳目标。
  • 通常比 SGD 收敛更快。

缺点:

  • 对超参数(如学习率和衰减率)敏感。
  • 可能在某些任务上表现不如 Adam。

适用场景:

  • 循环神经网络(RNN)和需要处理非平稳数据的任务。

1.5 AdamW

简介: AdamW 改进了 Adam 的权重衰减方式,将权重衰减从梯度更新中分离出来,解决了 Adam 在使用 L2 正则化时的一些问题。

优点:

  • 更好地结合了权重衰减和 Adam 的自适应学习率特性。
  • 在一些任务上表现优于 Adam。

缺点:

  • 类似于 Adam,需要更多的内存。
  • 需要调节额外的权重衰减参数。

适用场景:

  • Transformer 模型和需要严格控制正则化的场景。

2. 如何选择合适的优化器

选择优化器时,需要根据具体任务、模型结构、数据集特点以及训练资源等因素进行权衡。以下是一些建议:

2.1 模型复杂度和规模

  • 大型模型(如 ResNet、Transformer):通常推荐使用 Adam 或 AdamW,因其自适应学习率特性能更有效地处理大规模参数。
  • 中小型模型:SGD 或带动量的 SGD 也是不错的选择,尤其是在需要严格控制训练过程时。

2.2 数据集大小和特性

  • 大规模数据集:SGD 和带动量的 SGD 更加适合,因其在大数据集上表现稳定。
  • 小规模或稀疏数据集:Adam 更具优势,因其在小批量数据上能更好地调整学习率。

2.3 训练速度和资源

  • 需要快速原型验证:Adam 是理想选择,因其收敛速度快,适合快速实验。
  • 资源有限:SGD 相对更节省内存,适合资源受限的环境。

2.4 收敛性质

  • 需要精确收敛:SGD 和带动量的 SGD 通常能更好地收敛到更优解。
  • 对超参数敏感度低:Adam 具有较强的自适应能力,对学习率不敏感。

3. 超参数调节建议

不同优化器有不同的超参数,需要根据具体情况进行调节:

3.1 学习率(Learning Rate)

  • SGD:常用范围在 0.01 到 0.1。可以使用学习率调度器(如 StepLR、ReduceLROnPlateau)动态调整。
  • Adam:常用初始学习率为 0.001,可以在需要时调低。
  • RMSProp:初始学习率通常设置为 0.01。

3.2 动量(Momentum)

  • 仅适用于带动量的 SGD。
  • 常用值在 0.8 到 0.99 之间。

3.3 权重衰减(Weight Decay)

  • 控制正则化强度,常用值在 1e-4 到 1e-3 之间。
  • AdamW 中的权重衰减与 L2 正则化结合更为有效。

3.4 其他参数总结

  • Adam 的 β 参数:常用默认值 β1=0.9, β2=0.999。
  • RMSProp 的 α 参数:通常设置为 0.99 或 0.9。
  • SGD:适用于需要严格控制训练过程的大规模模型,具有良好的收敛性质,但对学习率敏感。
  • Adam:具有自适应学习率特性,适用于快速实验和各种模型,但可能在某些情况下收敛到次优点。
  • AdamW:改进了 Adam 的权重衰减方式,适用于需要严格控制正则化的场景。
  • RMSProp:适用于处理非平稳目标的问题,如循环神经网络(RNN)。
  • 学习率调度器早停等技术可以进一步提升训练效果和稳定性。
相关推荐
遇码11 分钟前
大语言模型开发框架——LangChain
人工智能·语言模型·langchain·llm·大模型开发·智能体
在狂风暴雨中奔跑11 分钟前
使用AI开发Android界面
android·人工智能
飞哥数智坊12 分钟前
AI编程实战:30分钟实现Web 3D船舶航行效果
人工智能·three.js
誉鏐15 分钟前
从零开始设计Transformer模型(1/2)——剥离RNN,保留Attention
人工智能·深度学习·transformer
Ai野生菌17 分钟前
工具介绍 | SafeLLMDeploy教程来了 保护本地LLM安全部署
网络·人工智能·安全·大模型·llm
雾月5522 分钟前
LeetCode 914 卡牌分组
java·开发语言·算法·leetcode·职场和发展
契合qht53_shine22 分钟前
OpenCV 从入门到精通(day_05)
人工智能·opencv·计算机视觉
想跑步的小弱鸡25 分钟前
Leetcode hot 100(day 4)
算法·leetcode·职场和发展
Fantasydg26 分钟前
DAY 35 leetcode 202--哈希表.快乐数
算法·leetcode·散列表
jyyyx的算法博客27 分钟前
Leetcode 2337 -- 双指针 | 脑筋急转弯
算法·leetcode