【AI课程领学】第十二课 · 超参数设定与网络训练(课时1) 网络超参数设定:从“要调什么”到“怎么系统地调”(含 PyTorch 可复用模板)

【AI课程领学】第十二课 · 超参数设定与网络训练(课时1) 网络超参数设定:从"要调什么"到"怎么系统地调"(含 PyTorch 可复用模板)

【AI课程领学】第十二课 · 超参数设定与网络训练(课时1) 网络超参数设定:从"要调什么"到"怎么系统地调"(含 PyTorch 可复用模板)


文章目录

  • [【AI课程领学】第十二课 · 超参数设定与网络训练(课时1) 网络超参数设定:从"要调什么"到"怎么系统地调"(含 PyTorch 可复用模板)](#【AI课程领学】第十二课 · 超参数设定与网络训练(课时1) 网络超参数设定:从“要调什么”到“怎么系统地调”(含 PyTorch 可复用模板))
  • 前言
    • [1. 超参数是什么?它和模型参数有什么不同?](#1. 超参数是什么?它和模型参数有什么不同?)
    • [2. 超参数的"工程分类"(非常实用)](#2. 超参数的“工程分类”(非常实用))
      • [A. 优化相关(最关键)](#A. 优化相关(最关键))
      • [B. 正则化相关(决定泛化)](#B. 正则化相关(决定泛化))
      • [C. 模型结构相关(决定上限与成本)](#C. 模型结构相关(决定上限与成本))
      • [D. 数据与训练过程相关(决定稳定与效率)](#D. 数据与训练过程相关(决定稳定与效率))
    • [3. 强基线:不同任务的"默认超参数起点"](#3. 强基线:不同任务的“默认超参数起点”)
      • [3.1 图像分类(CNN/ViT,数据增强适中)](#3.1 图像分类(CNN/ViT,数据增强适中))
      • [3.2 语义分割(U-Net/DeepLab/SegFormer)](#3.2 语义分割(U-Net/DeepLab/SegFormer))
      • [3.3 回归(地学变量/AOD/SM 等)](#3.3 回归(地学变量/AOD/SM 等))
    • [4. 学习率:最重要的超参数,没有之一](#4. 学习率:最重要的超参数,没有之一)
      • [4.1 学习率过大/过小的典型表现](#4.1 学习率过大/过小的典型表现)
      • [4.2 经验规律:batch 越大,lr 可以越大(线性缩放近似)](#4.2 经验规律:batch 越大,lr 可以越大(线性缩放近似))
    • [5. 一次就能省很多时间:Learning Rate Range Test(简化版)](#5. 一次就能省很多时间:Learning Rate Range Test(简化版))
    • [6. weight_decay、dropout、label_smoothing:正则化三件套怎么定?](#6. weight_decay、dropout、label_smoothing:正则化三件套怎么定?)
    • [7. 验证集划分:很多"效果提升"其实来自更正确的划分](#7. 验证集划分:很多“效果提升”其实来自更正确的划分)
    • [8. 本篇小结:一个"最省试验次数"的调参流程](#8. 本篇小结:一个“最省试验次数”的调参流程)

欢迎铁子们点赞、关注、收藏!
祝大家逢考必过!逢投必中!上岸上岸上岸!upupup

大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可扫描博文下方二维码 "学术会议小灵通"或参考学术信息专栏:https://ais.cn/u/mmmiUz
详细免费的AI课程可在这里获取→www.lab4ai.cn


前言

  • 深度学习里最现实的困难之一是:模型结构写出来只是开始,真正决定效果的往往是超参数(hyperparameters)。超参数不是"玄学",它可以用一套工程化方法高效缩小搜索空间。

本篇你将掌握:

  • 超参数的分类与作用机制
  • 从数据与任务出发的初始设定(strong defaults)
  • 如何用最少试验找到合适区间(learning rate range test、逐层冻结等)
  • 避免"空间/时间泄漏"的验证策略(尤其适合遥感/地学任务)

1. 超参数是什么?它和模型参数有什么不同?

  • 模型参数 :训练过程中通过梯度下降学习出来,如权重 W W W、偏置 b b b。
  • 超参数:训练开始前人为设定或搜索得到,如学习率、batch size、weight decay、网络深度、dropout 等。

超参数决定了:

  • 优化轨迹(能不能收敛、收敛到哪里)
  • 泛化强弱(过拟合/欠拟合)
  • 训练效率(速度、稳定性、显存)

2. 超参数的"工程分类"(非常实用)

A. 优化相关(最关键)

  • 学习率 lr
  • 优化器:SGD/AdamW
  • 学习率调度:cosine、step、onecycle、warmup
  • 动量 momentumbetas
  • 梯度裁剪 clip_grad_norm

B. 正则化相关(决定泛化)

  • weight decay(L2)
  • dropout
  • label smoothing(分类)
  • 数据增强强度(第七课)

C. 模型结构相关(决定上限与成本)

  • 深度/宽度(layers、channels)
  • 激活函数
  • 归一化(BatchNorm/LayerNorm)
  • 注意力头数、embedding 维度等(Transformer)

D. 数据与训练过程相关(决定稳定与效率)

  • batch size
  • 输入分辨率/patch size
  • 训练轮数 epochs
  • 混合精度 AMP
  • num_workers、prefetch 等 DataLoader 参数

3. 强基线:不同任务的"默认超参数起点"

下面这些是我建议你写进博客的"开箱即用默认值",很适合读者直接照抄:

3.1 图像分类(CNN/ViT,数据增强适中)

  • optimizer:AdamW
  • lr:3e-4(batch 64 左右)
  • weight_decay:1e-2(ViT 常用),CNN 可从 1e-4~1e-2
  • epochs:50--200(看数据量)
  • label_smoothing:0.0--0.1
  • warmup:5% epochs + cosine

3.2 语义分割(U-Net/DeepLab/SegFormer)

  • optimizer:AdamW
  • lr:1e-4 ~ 3e-4
  • weight_decay:1e-4 ~ 1e-2
  • loss:CE + Dice(或 BCE + Dice)
  • batch:尽量大(显存不足用梯度累积)

3.3 回归(地学变量/AOD/SM 等)

  • optimizer:AdamW
  • lr:1e-3 起,若不稳降到 3e-4
  • loss:Huber(delta=1)或 MSE(噪声小)
  • 标准化:训练集 mean/std 统计

4. 学习率:最重要的超参数,没有之一

4.1 学习率过大/过小的典型表现

  • 过大:loss 不降、震荡、NaN、梯度爆炸
  • 过小:loss 降得很慢,训练时间浪费,容易陷入次优

4.2 经验规律:batch 越大,lr 可以越大(线性缩放近似)

  • 如果你把 batch 从 32 改到 256,lr 可以尝试相应放大(如×8),但需要 warmup。

5. 一次就能省很多时间:Learning Rate Range Test(简化版)

  • 思路:在一个 epoch 内让 lr 从很小到很大增长,找到 loss 开始爆炸前的最大可用 lr。
csharp 复制代码
import torch
import torch.nn.functional as F

def lr_range_test(model, loader, optimizer, device,
                  start_lr=1e-7, end_lr=1, num_iters=200):
    model.train()
    lrs, losses = [], []

    # 设置起始lr
    for pg in optimizer.param_groups:
        pg["lr"] = start_lr

    mult = (end_lr / start_lr) ** (1 / max(1, num_iters - 1))

    it = iter(loader)
    for i in range(num_iters):
        try:
            x, y = next(it)
        except StopIteration:
            it = iter(loader)
            x, y = next(it)

        x, y = x.to(device), y.to(device)
        optimizer.zero_grad()
        logits = model(x)
        loss = F.cross_entropy(logits, y)
        loss.backward()
        optimizer.step()

        lr = optimizer.param_groups[0]["lr"]
        lrs.append(lr)
        losses.append(loss.item())

        # 更新lr
        for pg in optimizer.param_groups:
            pg["lr"] *= mult

    return lrs, losses
  • 你可以把 loss 最快下降的区间中间值作为初始 lr(例如"爆炸前 1/10")。

6. weight_decay、dropout、label_smoothing:正则化三件套怎么定?

  • weight_decay:从 1e-4 试到 1e-2
  • dropout:小数据集 0.3--0.5;大数据 0.1--0.2
  • label_smoothing:0--0.1(分类),过大可能损伤可分性

建议调参顺序:

  1. 先把 lr 调到能稳定收敛且较快
  2. 再调 weight_decay(泛化差就加大)
  3. 再调增强与 dropout

7. 验证集划分:很多"效果提升"其实来自更正确的划分

尤其对你常见的遥感/地学时空数据:

  • 随机切 patch 容易空间泄漏(相邻像素同源)
  • 正确做法:按区域/流域/影像块划分 train/val/test

否则指标会虚高,模型上线后崩。

8. 本篇小结:一个"最省试验次数"的调参流程

你可以直接给读者一张流程:

  1. 选 strong defaults(AdamW + cosine + warmup)
  2. lr range test 找 lr 合理区间
  3. 固定 lr,调 weight_decay(先看 val gap)
  4. 调数据增强强度与 dropout
  5. 最后才动网络结构(深/宽/注意力)
相关推荐
gongfuyd2 小时前
赵世钰《强化学习的数学原理》第十章重点总结
人工智能
水如烟2 小时前
孤能子视角:“宋“
人工智能
陈天伟教授2 小时前
人工智能应用-机器视觉:AI 鉴伪 08.虚假图片鉴别
人工智能·神经网络·数码相机·生成对抗网络·dnn
YMLT花岗岩2 小时前
Python学习之-函数-入门训练-在函数中修改全局变量
python·学习
花月mmc2 小时前
CanMV K230 波形识别——数据分析(2)
python·数据挖掘·数据分析·信号处理
dixiuapp2 小时前
校园后勤管理平台,如何选择与规划
大数据·人工智能·工单管理系统·院校工单管理系统·物业报修系统
Pith_2 小时前
模式识别与机器学习复习笔记(下-深度学习篇)
笔记·深度学习·机器学习
DS随心转APP2 小时前
ChatGPT和Gemini做表格
人工智能·ai·chatgpt·deepseek·ds随心转
Deepoch2 小时前
Deepoc具身大模型机械狗:重新定义四足机器人智能交互新范式
人工智能·科技·机器人·具身智能·机器狗·deepoc·机械狗