当前位置: 首页 > news >正文

与学习相关的技巧(超参数的验证)

超参数的验证

神经网络中,除了权重和偏置等参数,超参数(hyper-parameter)也经
常出现。这里所说的超参数是指,比如各层的神经元数量、batch 大小、参
数更新时的学习率或权值衰减等。如果这些超参数没有设置合适的值,模型
的性能就会很差。虽然超参数的取值非常重要,但是在决定超参数的过程中
一般会伴随很多的试错。本节将介绍尽可能高效地寻找超参数的值的方法。

验证数据

之前我们使用的数据集分成了训练数据和测试数据,训练数据用于学习,
测试数据用于评估泛化能力。由此,就可以评估是否只过度拟合了训练数据
(是否发生了过拟合),以及泛化能力如何等。

下面我们要对超参数设置各种各样的值以进行验证。这里要注意的是,
不能使用测试数据评估超参数的性能。这一点非常重要,但也容易被忽视。

为什么不能用测试数据评估超参数的性能呢?这是因为如果使用测试数
据调整超参数,超参数的值会对测试数据发生过拟合。换句话说,用测试数
据确认超参数的值的“好坏”,就会导致超参数的值被调整为只拟合测试数据。
这样的话,可能就会得到不能拟合其他数据、泛化能力低的模型。

因此,调整超参数时,必须使用超参数专用的确认数据。用于调整超参
数的数据,一般称为验证数据(validation data)。我们使用这个验证数据来
评估超参数的好坏。

训练数据用于参数(权重和偏置)的学习,验证数据用于超参数的性
能评估。为了确认泛化能力,要在最后使用(比较理想的是只用一次)
测试数据。

根据不同的数据集,有的会事先分成训练数据、验证数据、测试数据三
部分,有的只分成训练数据和测试数据两部分,有的则不进行分割。在这种
情况下,用户需要自行进行分割。如果是MNIST数据集,获得验证数据的
最简单的方法就是从训练数据中事先分割20%作为验证数据,代码如下所示。

(x_train,t_train),(x_test,t_test)=load_mnist()# 打乱训练数据x_train,t_train=shuffle_dataset(x_train,t_train)# 分割验证数据validation_rate=0.20validation_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:]

这里,分割训练数据前,先打乱了输入数据和教师标签。这是因为数据
集的数据可能存在偏向(比如,数据从“0”到“10”按顺序排列等)。这里使
用的shuffle_dataset函数利用了np.random.shuffle,在common/util.py中有
它的实现。

接下来,我们使用验证数据观察超参数的最优化方法。

超参数的最优化

进行超参数的最优化时,逐渐缩小超参数的“好值”的存在范围非常重要。
所谓逐渐缩小范围,是指一开始先大致设定一个范围,从这个范围中随机选
出一个超参数(采样),用这个采样到的值进行识别精度的评估;然后,多次
重复该操作,观察识别精度的结果,根据这个结果缩小超参数的“好值”的范围。
通过重复这一操作,就可以逐渐确定超参数的合适范围。

超参数的范围只要“大致地指定”就可以了。所谓“大致地指定”,是指
像0.001(10−310^{−3}103)到1000(10310^3103)这样,以“10 的阶乘”的尺度指定范围(也表述
为“用对数尺度(log scale)指定”)。

在超参数的最优化中,要注意的是深度学习需要很长时间(比如,几天
或几周)。因此,在超参数的搜索中,需要尽早放弃那些不符合逻辑的超参数。
于是,在超参数的最优化中,减少学习的epoch,缩短一次评估所需的时间
是一个不错的办法。

以上就是超参数的最优化的内容,简单归纳一下,如下所示。

步骤0

设定超参数的范围。

步骤1

从设定的超参数范围中随机采样。

步骤2

使用步骤1 中采样到的超参数的值进行学习,通过验证数据评估识别精
度(但是要将epoch 设置得很小)。

步骤3

重复步骤1 和步骤2(100 次等),根据它们的识别精度的结果,缩小超参
数的范围。

反复进行上述操作,不断缩小超参数的范围,在缩小到一定程度时,从
该范围中选出一个超参数的值。这就是进行超参数的最优化的一种方法。

反复进行上述操作,不断缩小超参数的范围,在缩小到一定程度时,从
该范围中选出一个超参数的值。这就是进行超参数的最优化的一种方法。

超参数最优化的实现

如前所述,通过从0.001(10−310^−3103)到1000(10310^3103)这样的对数尺度的范围
中随机采样进行超参数的验证。这在Python 中可以写成10 ** np.random.
uniform(-3, 3)。在该实验中,权值衰减系数的初始范围为10−810^{−8}10810−410^{−4}104,学
习率的初始范围为10−610^−610610−210^−2102。此时,超参数的随机采样的代码如下所示。

weight_decay=10**np.random.uniform(-8,-4)lr=10**np.random.uniform(-6,-2)

像这样进行随机采样后,再使用那些值进行学习。之后,多次使用各种
超参数的值重复进行学习,观察合乎逻辑的超参数在哪里。这里省略了具体
实现,只列出了结果。进行超参数最优化的源代码在ch06/hyperparameter_
optimization.py中,请大家自由参考。

下面我们就以权值衰减系数为10−810^{−8}10810−410^{−4}104、学习率为$10^{−6} $到10−210^{−2}102的范围
进行实验,结果如图6-24 所示。

图6-24 中,按识别精度从高到低的顺序排列了验证数据的学习的变化。
从图中可知,直到“Best-5”左右,学习进行得都很顺利。因此,我们来
观察一下“Best-5”之前的超参数的值(学习率和权值衰减系数),结果如下
所示。

Best-1(val acc:0.83)|lr:0.0092,weight decay:3.86e-07Best-2(val acc:0.78)|lr:0.00956,weight decay:6.04e-07Best-3(val acc:0.77)|lr:0.00571,weight decay:1.27e-06Best-4(val acc:0.74)|lr:0.00626,weight decay:1.43e-05Best-5(val acc:0.73)|lr:0.0052,weight decay:8.97e-06

从这个结果可以看出,学习率在0.001 到0.01、权值衰减系数在10−810^{−8}108
10−610^{−6}106之间时,学习可以顺利进行。像这样,观察可以使学习顺利进行的超参
数的范围,从而缩小值的范围。然后,在这个缩小的范围中重复相同的操作。

这样就能缩小到合适的超参数的存在范围,然后在某个阶段,选择一个最终
的超参数的值。

http://www.jsqmd.com/news/361750/

相关文章:

  • 非标机械设计中设备的三伤验证
  • P0926GU FBM230通信模块
  • 霍尔传感器:绿电追溯困局的破局之钥
  • 2026年2月随州招聘/随州找工作/随州进厂/随州劳务外包服务TOP5品牌深度评测与选型指南 - 2026年企业推荐榜
  • 六 非标设备项目
  • 318. Java Stream API - 深入理解 Java Stream 的中间 Collector —— mapping、filtering 和 flatMapping
  • 2026年期货量化交易文档编写_代码注释与文档规范
  • 不怕行业冷,就怕找不到厂!天下工厂400万数据库,覆盖所有细分赛道
  • 基于python的麻辣烫餐馆管理系统[python]-计算机毕业设计源码+LW文档
  • 2026年期货量化交易最佳实践_从开发到部署的完整流程
  • 四川旅游旅行社怎么挑?认准这家老牌国企!2026成都出境游、九寨沟旅游首选指南 - 深度智识库
  • 基于python的猫眼电影数据可视化分析系统[python]-计算机毕业设计源码+LW文档
  • 编写阅读助手APP,上传书籍/文章,自动生成阅读摘要,提取核心观点,好词好句,支持标注阅读笔记,还能记录阅读时间,生成阅读打卡日历,适合阅读爱好者。
  • 2026 东莞英语雅思培训教育机构推荐、雅思培训课程中心权威口碑榜单 - 老周说教育
  • 编写编程学习助手,根据用户编程水平(新手/入门/进阶),编程语言(python/Java/C++),推荐合适的学习课程,练习题,项目,生成编程学习计划,还能在线运行代码。
  • PHP 8.x时代:性能、类型安全与开发者体验的革命性飞跃
  • 2026年期货量化交易代码重构_提升代码质量的实践方法
  • AI编程经验总结
  • 基于python的路面缺陷监测系统[python]-计算机毕业设计源码+LW文档
  • 【瑞芯微平台实时Linux方案系列】第三十八篇 - 瑞芯微平台实时Linux网络中断优化方案
  • 2026年期货量化交易单元测试_策略代码质量保障
  • 异步函数安全调用方式, 可以当成库或者当成main
  • 大数据基于Python小说数据分析及可视化
  • 2026年期货量化交易版本控制_Git工作流实践
  • 收藏!中欧AI论坛干货笔记|小白程序员必看,AI领导力的迷思与真相
  • USACO历年白银组真题解析 | 2008年1月
  • 工程建筑中大文件上传插件如何实现断点续传和目录结构上传?
  • 基于大数据的电子产品电商平台主数据分析可视化系统的设计与实现
  • 【Security】基于安全建设视角的安全运营的技术内核与实践演进
  • 【瑞芯微平台实时Linux方案系列】第三十九篇 - 瑞芯微平台实时Linux批量部署方案