【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. 最后才动网络结构(深/宽/注意力)
相关推荐
阿里云大数据AI技术7 小时前
阿里云 EMR Serverless StarRocks(Stella 2.2.0) 发布:内表与湖表同时支持向量、全文与 AI Function,一条 SQL 完成多模态检索
人工智能
AI人工智能+7 小时前
智能文档抽取系统采用“解析底座+大模型“双引擎架构,突破传统OCR局限
深度学习·ocr·文档抽取
格林威7 小时前
工业相机Chunk功能全解析:图像嵌入时间戳、编码器元数据(附堡盟C#代码)
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机
怪奇云呼军7 小时前
闪电智能Voice Agent:ASR 首字延迟和最终识别延迟怎么测?t0-t3 埋点实战
人工智能·科技·ai·语音识别
冬哥聊AI7 小时前
百万行代码里跑Claude Code?三面这题80%的人答不上来
人工智能
甄同学7 小时前
第二十三篇:Tasks系统,Claude Code如何统一管理7种后台任务
人工智能
独隅7 小时前
IntelliJ IDEA 接入多种AI大模型插件终极指南(2026.1 企业合规版)
java·人工智能·intellij-idea
知识分享小能手7 小时前
统计学学习教程,从入门到精通,参数估计 — 知识点详解与公式推导(10)
学习·机器学习·概率论
有Li8 小时前
EvoMDT:用于多癌种结构化临床决策的自进化多智能体系统文献速递/医学智能体前沿
人工智能·学习·分类·文献·医学生
小大宇8 小时前
Python 集成 Conda
开发语言·python·conda