神经网络 | ⑬ 超参数验证:找到最佳学习超参数

引言

在神经网络中,参数分为两类:

  • 参数 ------ 通过训练自动学习的参数,如权重和偏置
  • 超参数 ------ 通过人工设定的配置值,如各层神经元数量、batch\text{batch}batch 大小、学习率、权值衰减系数等

为什么需要超参数?因为神经网络的学习过程本身也需要配置 ------ 多大力气学(学习率)、每次看多少数据(batch\text{batch}batch 大小)、网络搭多深多宽(层数和神经元数)、要不要约束权重(权值衰减系数)等

这些问题没有标准答案,不同任务、不同数据的最优配置各不相同。超参数设得不好,模型可能完全不收敛,性能天差地别 ------ 偏偏它们没有自动学习的捷径,无法通过梯度下降来优化,只能靠人工调试。

如何高效地找到合适的超参数?核心策略可以概括为十二个字:随机采样、对数尺度、由粗到精。下面详细展开这套实践方法。



超参数验证数据集

调试超参数时,有一个极易被忽视却至关重要的原则:绝对不能拿测试数据来评估超参数的好坏

如果把测试数据用于挑选超参数,超参数的值就会对测试数据产生过拟合 ------ 相当于看着答案调整策略,最后得到的模型只对这套答案有效,换一批数据就露馅了,泛化能力无从谈起。

因此,数据通常需要划分为三份,各司其职:

数据集 英文 用途 使用频率
训练数据 train\text{train}train 学习权重和偏置 每个 epoch\text{epoch}epoch 反复使用
验证数据 validation\text{validation}validation 评估并挑选超参数 每次调参时使用
测试数据 test\text{test}test 最终评估泛化能力 理想情况只用一次

以 MNIST\text{MNIST}MNIST 为例,若未预先划分验证集,可从训练数据中分割 20%20\%20%:

python 复制代码
# 读取并打乱数据集,防止数据顺序有偏向
(x_train, t_train), (x_test, t_test) = load_mnist()
x_train, t_train = shuffle_dataset(x_train, t_train)

# 设置分割参数
validation_rate = 0.20
validation_num = int(x_train.shape[0] * validation_rate)

# 分割验证数据
x_val = x_train[:validation_num]
t_val = t_train[:validation_num]
x_train = x_train[validation_num:]
t_train = t_train[validation_num:]

打乱数据是必要操作------原始数据集可能按类别顺序排列(如先排完所有的 000,再排 1⋯1\cdots1⋯),直接分割会导致验证集和训练集分布不一致。



超参数优化策略

设定范围

超参数搜索的第一步是大致设定初始范围 ,而非精确指定。所谓"大致",是指像 10−310^{-3}10−3 到 10310^3103 这样,以 101010 的阶乘来粗略框定。

这个阶段不需要纠结边界是否精确 ------ 后续迭代会逐步缩小范围,初始范围过窄反而可能遗漏最优解所在的区域。


采样方式:随机优于网格

超参数搜索有两种基本思路:

  • 网格搜索 ------ 按固定间隔遍历所有超参数组合

    例如学习率取 [0.001, 0.01, 0.1],隐藏层数取 [2, 3, 4],逐个组合尝试

  • 随机采样 ------ 在设定范围内随机抽取一组超参数进行训练,每次取值不可预测。

研究表明,随机采样效果更好。原因在于:不同超参数对最终精度的影响程度差异悬殊------有些参数调不调影响巨大,有些几乎无关紧要。

网格搜索把计算资源均匀分配给所有参数,大量浪费在对结果影响甚微的参数上;随机采样则为每个参数探索了更多不同取值,更有可能覆盖重要参数的"甜点"区域。


采样尺度:对数优于线性

超参数的合适范围往往跨越多个数量级,以学习率为例,合理取值可能从 0.00010.00010.0001 到 0.10.10.1,跨度高达三个数量级。面对这种跨量级的搜索空间,有两种采样方式:

  • 线性尺度 ------ 在目标区间内均匀采样

    np.random.uniform(0.0001, 0.1)

  • 对数尺度 ------ 先对区间边界取对数,在指数空间均匀采样,再还原

    10 ** np.random.uniform(-6, -2)

研究表明,对数尺度采样效果更好。原因在于:

线性尺度在量级上极不均匀。学习率区间 0.0001,0.10.0001, 0.10.0001,0.1 中,0.05∼0.10.05 \sim 0.10.05∼0.1 占据区间一半,0.0001∼0.0010.0001 \sim 0.0010.0001∼0.001 只有千分之几的长度。用线性采样,绝大多数点会落在 0.05∼0.10.05 \sim 0.10.05∼0.1 之间,10−410^{-4}10−4 级别几乎不可能被抽到 ------ 这意味着整整一个数量级根本没有被探索的机会。

对数尺度把 10−410^{-4}10−4 到 10−110^{-1}10−1 映射为 −4-4−4 到 −1-1−1 的均匀采样,0.0001,0.0010.0001, 0.0010.0001,0.0010.001,0.010.001, 0.010.001,0.010.01,0.10.01, 0.10.01,0.1 这三个数量级各获得三分之一的抽样概率,每个数量级获得同等的关注度。


整体流程

超参数搜索不是一蹴而就的,而是由粗到精、逐步聚焦的迭代过程:

步骤 操作
000 大致设定超参数的初始范围(对数尺度
111 从设定范围中随机采样一组超参数
222 用这组超参数训练,通过验证数据 评估精度(需要把 epoch\text{epoch}epoch 设小,快速筛选)
333 重复步骤 111、222 多次,根据验证精度结果缩小超参数范围

反复迭代上述步骤,不断缩小搜索范围,在最终缩窄的区间内选定最优超参数

深度学习一次训练可能耗时数天,因此快速筛除不合理候选至关重要 ------ 先用少量 epoch\text{epoch}epoch 粗筛,找到有潜力的区间后再精细训练



实验示例

在 MNIST\text{MNIST}MNIST 上搜索最优学习率权值衰减系数 ,范围分别为 10−6∼10−210^{-6} \sim 10^{-2}10−6∼10−2 和 10−8∼10−410^{-8} \sim 10^{-4}10−8∼10−4。经过多轮随机采样和训练后,按验证精度从高到低排列,表现最好的前五组超参数如下:

排名 学习率 权值衰减系数 验证精度
Best-1\text{Best-1}Best-1 0.00920.00920.0092 3.86×10−73.86 \times 10^{-7}3.86×10−7 0.830.830.83
Best-2\text{Best-2}Best-2 0.009560.009560.00956 6.04×10−76.04 \times 10^{-7}6.04×10−7 0.780.780.78
Best-3\text{Best-3}Best-3 0.005710.005710.00571 1.27×10−61.27 \times 10^{-6}1.27×10−6 0.770.770.77
Best-4\text{Best-4}Best-4 0.006260.006260.00626 1.43×10−51.43 \times 10^{-5}1.43×10−5 0.740.740.74
Best-5\text{Best-5}Best-5 0.00520.00520.0052 8.97×10−68.97 \times 10^{-6}8.97×10−6 0.730.730.73

可以看出,学习率在 0.001∼0.010.001\sim0.010.001∼0.01、权值衰减系数在 10−8∼10−610^{-8} \sim 10^{-6}10−8∼10−6 之间时学习最顺利。

下一步便可以在这个更窄的范围内重复相同的搜索操作,进一步逼近最优值。



相关推荐
未知违规用户3 小时前
大模型项目:RAG项目实战与FlagEmbedding模型
人工智能·windows·python·深度学习
李燚9 小时前
RAG 流水线设计:Eino 的 Loader → Transformer → Indexer → Retriever(第60篇-E46)
人工智能·深度学习·transformer·agent·rag·aiagent·eino
一只小菜鸡..11 小时前
南京大学 操作系统 (JYY) 学习笔记:进程、系统调用与状态机管理
笔记·学习
天国梦14 小时前
2026英语教学系统选型实战:AI如何让备课效率提升42%?天学网技术落地全解析
人工智能·学习
hoLzwEge15 小时前
CLAUDE.md:为 Claude Code 注入项目记忆
深度学习·程序员·代码规范
维克兜率天15 小时前
【维克】大数定律与中心极限定理:为什么长期均值终将回归?
经验分享·学习·金融·概率论
中微极客15 小时前
降维算法75倍加速:从PCA到稀疏字典学习的工程实践
人工智能·学习·算法
金斗潼关17 小时前
使用MLP神经网络模型预测质数
人工智能·深度学习·神经网络
吃好睡好便好17 小时前
MATLAB中图像的读取、写入和显示
开发语言·图像处理·学习·计算机视觉·matlab