Dive into Deep Learning 超参数优化入门:配置空间、目标函数与随机搜索全解析

发布时间:2026/10/1 2:06:24

Dive into Deep Learning 超参数优化入门:配置空间、目标函数与随机搜索全解析 文档教程人工智能深度学习NLP计算机视觉强化学习【免费下载链接】d2l-enInteractive deep learning book with multi-framework code, math, and discussions. Adopted at 500 universities from 70 countries including Stanford, MIT, Harvard, and Cambridge.项目地址https://gitcode.com/gh_mirrors/d2/d2l-en点击查看免费下载超参数优化Hyperparameter Optimization, HPO是把人工反复试参这一机器学习工作流中最耗时、最依赖经验的部分转化为一个可自动化求解的全局优化问题。本篇以《动手学深度学习》Dive into Deep Learning, D2L仓库chapter_hyperparameter-optimization/hyperopt-intro.md为骨架完整讲解 HPO 的两大核心构件——目标函数与配置空间并逐步实现第一个 HPO 算法随机搜索在 Fashion-MNIST 上的 softmax 多分类任务中自动搜索学习率。读完本文你将掌握 HPO 的形式化定义、SciPy 分布驱动的搜索空间设计以及随机搜索的完整可运行代码与源码级原理。为什么需要超参数优化深度神经网络拥有大量在训练过程中学习的参数parameters / weights除此之外每个网络还带有许多必须由使用者预先配置的超参数hyperparameters。例如为了让随机梯度下降收敛到训练损失函数的局部最优见 优化章节需要调节学习率learning rate与批大小batch size为了避免在训练集上过拟合需要设置正则化参数如权重衰减或dropout通过设置层数、每层的单元数或卷积核数量即有效参数量可以刻画模型的容量与归纳偏置。不幸的是超参数并不能通过最小化训练损失来直接调节——因为这样做必然导致在训练数据上的过拟合。例如把 dropout 或权重衰减设为零虽然能得到很小的训练损失却可能严重损害模型的泛化性能。这正是超参数与普通参数的本质区别普通参数由优化器在训练集上自动学习而超参数必须基于训练集之外的验证数据进行选择。手动调参的成本与不可迁移性如果没有自动化手段超参数只能靠试错法trial-and-error人工设置这是机器学习工作流中既耗时又困难的部分。本文档给出了一个直观的例子在 AWS EC2g4dn.xlarge实例上训练一个 ResNet见 ResNet 一节识别 CIFAR-10单次训练耗时超过 2 小时——即使只顺序尝试 10 组超参数配置也要花费大约一天的时间。更糟的是超参数通常不能跨架构、跨数据集直接迁移每面对一个新任务都得重新优化一遍而且对大多数超参数而言并不存在可靠的经验法则找到合理取值往往依赖领域专家的经验。HPO 与 AutoML 的定位超参数优化HPO算法正是为了以规范且自动化的方式解决上述问题而设计。它把超参数选择建模为一个全局优化问题默认的优化目标是模型在**留出验证集hold-out validation dataset**上的误差原则上也可以是任何业务指标它还可以与次要目标如训练时间、推理时间、模型复杂度组合或受其约束。近年来HPO 还被推广到了神经架构搜索Neural Architecture Search, NAS——目标是搜索全新的神经网络架构。与经典 HPO 相比NAS 计算开销更大实践中需要额外的策略才能保持可行。HPO 与 NAS 都可以视为AutoML的子领域AutoML 的目标是自动化整个机器学习流水线。D2L 仓库 超参数优化章节索引 即围绕这一主题展开先介绍 HPO 基础再讲解更高效的算法异步随机搜索、successive halving 等。本节作为入门将以 softmax 回归简洁实现 中介绍的多类逻辑回归模型为例演示如何自动寻找其最优超参数。HPO 的形式化一个全局优化问题先从一个小玩具问题开始为 softmax 回归简洁实现 中的多类逻辑回归模型SoftmaxRegression搜索学习率目标是最小化它在 Fashion-MNIST 上的验证误差。批大小、训练轮数等超参数同样值得调优但为了简洁本节只聚焦学习率。首先导入依赖PyTorch 框架下from d2l import torch as d2l import numpy as np import torch from torch import nn from scipy import stats运行 HPO 之前需要先定义两个要素目标函数objective function与配置空间configuration space。目标函数把训练验证包装成可优化的黑盒学习算法的性能可以视为一个函数 $f: \mathcal{X} \rightarrow \mathbb{R}$它把超参数空间 $\mathbf{x} \in \mathcal{X}$ 映射到验证损失。每次评估 $f(\mathbf{x})$ 都需要完整地训练并验证一次模型——对于在大数据集上训练的深度神经网络这可能是极其耗时、耗算力的操作。给定准则 $f(\mathbf{x})$我们的目标是找到$$\mathbf{x}{\star} \in \mathrm{argmin}{\mathbf{x} \in \mathcal{X}} f(\mathbf{x})$$关于目标函数有以下三个关键事实这也是 HPO 算法设计的基本出发点没有简单的梯度可用$f$ 对 $\mathbf{x}$ 的梯度需要贯穿整个训练过程反向传播。虽然已有基于近似超梯度hypergradients驱动 HPO 的研究工作但目前尚无一种方法能与现有最优 HPO 算法竞争本文不展开讨论。评估代价高昂$f$ 的每次求值都涉及完整训练这迫使 HPO 算法必须用尽可能少的样本逼近全局最优。观测带噪声神经网络训练本身是随机的权重随机初始化、小批量随机采样因此观测值满足 $y \sim f(\mathbf{x}) \epsilon$通常假设噪声 $\epsilon \sim N(0, \sigma)$ 服从高斯分布。面对这些挑战实践中我们通常追求快速找出一小组表现良好的配置而非精确命中全局最优——即便如此对大多数神经网络模型而言这个过程也可能需要数天乃至数周的算力。关于通过分布式搜索或使用更便宜的近似目标来加速优化见后续章节多保真度超参数优化successive halving。计算模型验证误差的方法如下。仓库在 d2l/torch.py 中实现了HPOTrainer它继承自基础Trainer新增的validation_error方法将模型切到评估模式model.eval()在无梯度上下文torch.no_grad()中遍历验证集累加各批次的准确率后返回1 - accuracy / val_batch_idxclass HPOTrainer(d2l.Trainer): #save def validation_error(self): self.model.eval() accuracy 0 val_batch_idx 0 for batch in self.val_dataloader: with torch.no_grad(): x, y self.prepare_batch(batch) y_hat self.model(x) accuracy self.model.accuracy(y_hat, y) val_batch_idx 1 return 1 - accuracy / val_batch_idx有了验证误差计算器就可以定义 HPO 的目标函数针对配置config目前只含learning_rate用max_epochs轮训练模型然后返回其验证误差def hpo_objective_softmax_classification(config, max_epochs8): learning_rate config[learning_rate] trainer d2l.HPOTrainer(max_epochsmax_epochs) data d2l.FashionMNIST(batch_size16) model d2l.SoftmaxRegression(num_outputs10, lrlearning_rate) trainer.fit(modelmodel, datadata) return d2l.numpy(trainer.validation_error())这段代码涉及的底层实现均可在仓库源码中核实SoftmaxRegression类定义在 d2l/torch.py内部由nn.Flatten()加nn.LazyLinear(num_outputs)构成FashionMNIST数据模块定义在 d2l/torch.pyTrainer.fit训练循环、优化器配置与逐轮fit_epoch调度定义在 d2l/torch.py。配置空间定义可搜索的范围与目标函数 $f(\mathbf{x})$ 相伴的还需要定义可行集 $\mathbf{x} \in \mathcal{X}$即配置空间configuration space也叫搜索空间。对本例的逻辑回归搜索空间定义为config_space {learning_rate: stats.loguniform(1e-4, 1)}这里使用 SciPy 的loguniform对象它表示对数空间内 $-4$ 到 $-1$即 $10^{-4}$ 到 $10^{0}$上的均匀分布并允许我们从中采样随机变量。每个超参数都有数据类型data type如learning_rate是float闭有界范围closed bounded range即下界与上界先验分布prior distribution如均匀分布或对数均匀分布用于采样。设计要点在于缩放尺度。一些正参数如学习率最优取值可能相差多个数量级因此最适合用**对数尺度log scale表示而另一些参数如动量 momentum则用线性尺度linear scale**即可。下面的表格给出一个多层感知机典型超参数的配置空间示例包含类型与常用取值范围NameTypeHyperparameter Rangeslog-scalelearning ratefloat$[10^{-6},10^{-1}]$yesbatch sizeinteger$[8,256]$yesmomentumfloat$[0,0.99]$noactivation functioncategorical${\textrm{tanh}, \textrm{relu}}$-number of unitsinteger$[32, 1024]$yesnumber of layersinteger$[1, 6]$no配置空间的结构可以很复杂未必等同于 $\mathbb{R}^d$。实践中某些超参数的取值可能依赖其他超参数例如同时调节多层感知机的层数与每层单元数时第 $l$ 层的单元数仅在网络至少包含 $l1$ 层时才相关。这类条件依赖的高级 HPO 问题超出了本章范围。配置空间对 HPO 成败至关重要原因有二上限效应没有任何算法能找出配置空间中不存在的配置——搜索空间必须覆盖可能的最优解预算效应若范围过大找到良好配置所需的计算预算可能变得不可行。随机搜索第一个 HPO 算法随机搜索random search是我们要考虑的第一个 HPO 算法。其核心思想非常简单独立地从配置空间中采样直到预先定义的预算如最大迭代次数耗尽然后返回观测到的最佳配置。所有评估彼此独立、可以并行执行详见 异步随机搜索但这里为简单起见使用顺序循环errors, values [], [] num_iterations 5 for i in range(num_iterations): learning_rate config_space[learning_rate].rvs() print(fTrial {i}: learning_rate {learning_rate}) y hpo_objective_softmax_classification({learning_rate: learning_rate}) print(f validation_error {y}) values.append(learning_rate) errors.append(y)config_space[learning_rate].rvs()即从stats.loguniform(1e-4, 1)中抽取一个随机学习率rvs是 SciPy 分布对象提供的随机变量采样方法。之后最优学习率就是验证误差最低的那个best_idx np.argmin(errors) print(foptimal learning rate {values[best_idx]})随机搜索的优势凭借简单性与通用性随机搜索是使用最频繁的 HPO 算法之一实现零门槛不需要任何复杂的实现适用范围广只要能为每个超参数定义某种概率分布就可应用于任意配置空间。随机搜索的固有缺陷随机搜索也有两个明显的短板不利用历史观测它不会根据已收集的观测结果调整采样分布因此采样到差配置与采样到好配置的概率相同缺乏越搜越准的自适应能力资源分配无差别所有配置被分配相同的资源即使某些配置初始表现就很差、几乎不可能超越已见过的配置也要完整跑完。在后续章节中HPO APIsearcher/scheduler/tuner 接口 将展示如何用模型引导搜索如贝叶斯优化来克服第一个缺陷而 多保真度 HPO 则通过自动提前终止表现差的配置来克服第二个缺陷。随机搜索为何优于网格搜索虽然随机搜索非常简单但它是对网格搜索grid search的更好替代。网格搜索为每个超参数定义一个等距网格然后遍历网格的组合爆炸式的笛卡尔积来提出配置。随机搜索之所以更优关键在于它在一定程度上缓解了维度灾难curse of dimensionality当优化准则主要取决于超参数中的一小部分子集时随机搜索可以比网格搜索高效得多。直觉上网格搜索把大量采样点浪费在对结果影响很小的维度上而随机搜索能在每个维度上都以非零概率触及好配置所在区域。完整的理由可参考经典文献《Algorithms for Hyper-Parameter Optimization》Bergstra Bengio, 2011。完整实践在 Fashion-MNIST 上自动调学习率把上面的构件组合起来完整的 HPO 流程是定义配置空间config_space {learning_rate: stats.loguniform(1e-4, 1)}定义目标函数hpo_objective_softmax_classification(config, max_epochs8)内部用d2l.HPOTrainer训练 8 轮并返回验证误差运行随机搜索循环每轮从配置空间采样学习率 → 训练并评估 → 记录(learning_rate, validation_error)用np.argmin(errors)挑出验证误差最低的学习率。需要留意的是这也是 练习 1 的核心本节的d2l.FashionMNIST中trainTrue对应原始 Fashion-MNIST 的 60000 个训练样本而验证集用的是原始测试集 10000 个样本源码见 d2l/torch.py 中self.train与self.val的构造。在超参数选择中用测试集反复做模型选择会导致对测试集的间接过拟合规范做法是再划分出一块独立的验证集。小结HPO 的本质通过定义配置空间与目标函数把超参数选择表述为一个全局优化问题目标函数$f(\mathbf{x})$ 把超参数映射到验证误差评估一次就要完整训练验证一个模型观测带噪声、无法求梯度因此 HPO 算法必须样本高效配置空间每个超参数需要数据类型、闭界与先验分布正参数如学习率适合对数尺度随机搜索从配置空间独立采样直到预算耗尽、返回最佳观测配置简单通用但不会利用历史观测、资源分配无差别随机搜索 vs 网格搜索随机搜索缓解维度灾难当目标主要取决于少数几个超参数时效率远高于网格搜索。后续进阶路径超参数优化 APIHPOSearcher、HPOScheduler、HPOTuner三层接口以及 LeNet 上同时调学习率与批大小的完整示例对应源码见 d2l/torch.py异步随机搜索借助 Syne Tune 在多个 worker 上并行评估获得相对 worker 数的线性加速多保真度 HPOsuccessive halving把目标函数扩展为 $f(\mathbf{x}, r)$将更多资源分配给有潜力的配置、尽早淘汰差配置。练习与自检验证集划分问题本章在训练集上训练模型、在验证集上计算验证误差。请结合代码确认Trainer.val_dataloader对应FashionMNIST.val——即训练用原始 60000 个训练样本、验证用原始 10000 个测试样本。思考这一做法为什么可能有问题提示回顾泛化与模型选择正确做法应该是什么梯度式 HPO 为何困难考虑在 Fashion-MNIST批大小 256上训练两层感知机一个 epoch 后最小化某个验证指标尝试用梯度法调 SGD 学习率。思考为什么不能用验证误差做优化目标提示不可导、非光滑应改用哪个指标粗略画出该验证指标的计算图初始权重与学习率作为输入节点参考反向传播估算一次前向传播需要存储的浮点数数量级Fashion-MNIST 有 60000 个样本内存主要由各层激活值主导除算力与存储外梯度式 HPO 还会遇到什么困难提示数值稳定性与梯度消失/爆炸。网格搜索 vs 随机搜索网格搜索为每个超参数定义等距网格后遍历笛卡尔积。请解释为什么当优化准则主要取决于少数几个超参数时随机搜索会远胜于网格搜索提示阅读 Bergstra Bengio 关于高维网格点分布的论述。赞分享文档教程人工智能深度学习NLP计算机视觉强化学习【免费下载链接】d2l-enInteractive deep learning book with multi-framework code, math, and discussions. Adopted at 500 universities from 70 countries including Stanford, MIT, Harvard, and Cambridge.项目地址https://gitcode.com/gh_mirrors/d2/d2l-en点击查看免费下载相关推荐超参数优化终极指南Python机器学习实战中的网格搜索与随机搜索技巧超参数优化终极指南Python机器学习实战中的网格搜索与随机搜索技巧 超参数优化是提升机器学习模型性能的关键步骤而 python machine learn示例工程机器学习深度学习Hyperopt 入门指南目标函数、搜索空间与 fmin 搜索算法全解析Hyperopt 入门指南目标函数、搜索空间与 fmin 搜索算法全解析 Hyperopt 是一个用于 分布式异步超参数优化 的 Python 库。本文以官方机器学习AutoML《Dive into Deep Learning》项目解析深度学习入门指南《Dive into Deep Learning》项目解析深度学习入门指南 深度学习的发展历程 深度学习在短短几年内从学术界的边缘课题发展成为推动技术进步的核文档教程人工智能深度学习NLP计算机视觉强化学习上一篇LLM Cookbook 社区指南贡献者行为准则与规范下一篇Mars中的PWA图标设计资源免费工具与模板推荐创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/1 2:06:24

172张螺丝螺母数据集:YOLOv8小样本工业检测实战指南

简介:本资源是一份面向计算机视觉初学者与目标检测实践者的轻量级工业零件检测数据集,专为螺丝与螺母两类小目标的识别、定位与模型训练设计,适用于YOLO系列、Faster R-CNN等主流检测框架的入门实验与课程作业。压缩包共518个文件&#xff0c…

2026/10/1 3:16:26

肺炎胸片4分类实战:从数据处理到迁移学习与模型评估

简介:面向医学图像分类任务的肺炎胸片四分类数据集,适合深度学习初学者与医疗影像研究人员直接用于模型训练与验证。数据涵盖COVID(新型冠状肺炎)、Lung_Opacity(肺部浑浊)、Normal(正常&#x…

2026/10/1 3:16:26

图神经网络不确定性建模:双谱随机展开方法

1. 这不是又一个“不确定性”噱头:它到底在解决图神经网络里哪个真实痛点?“A Unified Uncertainty Representation for Graph Neural Networks via Doubly-Spectral Stochastic Expansion”——光看这个标题,很多人第一反应是:“…

2026/10/1 3:16:26

FPGA配置文件详解:SOF、POF、JIC的区别与转换

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 3:16:26

RIDE:基于扩散模型的推理时骨架跃迁技术

1. 这不是“修图”,是药物分子骨架的精准外科手术如果你在药物发现实验室里待过,一定见过这样的场景:项目组盯着一个活性不错的先导化合物发愁——它确实能结合靶点,但水溶性差、代谢太快、或者有潜在脱靶毒性。化学家们反复尝试在…

2026/10/1 3:11:26

从提示词到模型部署:AI跃迁时代的内容生产与工程实践

1. AI浪潮背后的逻辑:为什么说这是一次“跃迁”我算是国内最早一批把AI当“正经生产力工具”来折腾的人,从早期的图像生成、文案辅助,到后来的智能体编排、模型微调和部署,一路踩坑一路填坑。这几年最直观的感受是:AI带…

2026/9/29 11:07:23

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/9/29 21:48:03

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/29 7:00:49

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑