☰
超参数的调节方法——随机搜索
2026/9/28 20:51:55 网站建设 项目流程

训练神经网络之前,我们需要先确定一些设置,例如学习率、批量大小、隐藏层神经元数量。这些设置叫作超参数。(“超参数”可以理解为训练开始前由人设定的选项;它和神经网络在训练中学到的权重不是一回事。)

问题是:我们通常不知道哪组超参数效果最好。于是就要换着设置训练模型,再比较结果。(比如先用学习率 0.01 训练一次,再用学习率 0.001 训练一次,看看哪个模型在验证集上表现更好。)这个尝试和比较的过程,就叫超参数搜索。

在搜索范围很大时,为什么考虑随机搜索?

在超参数搜索空间较大的情况下,采用随机搜索,会优于网格搜索。
(“搜索空间”就是所有可能尝试的超参数组合。“网格搜索”是预先列出一些值,再把它们的组合按表格逐一尝试;“随机搜索”是从规定的范围里随机抽取若干组来尝试。当组合太多、训练时间有限时,随机搜索往往能更有效地探索不同的值,但不保证每次都比网格搜索好。)

假设我们只调整两个超参数:

超参数准备尝试的值
学习率0.1、0.01、0.001、0.0001
批量大小16、32、64、128

用网格搜索,就要把每个学习率与每个批量大小搭配:学习率 0.1 分别搭配四种批量大小,学习率 0.01 也分别搭配四种批量大小,以此类推。这样一共要训练16 次。

只调整两个设置,就已经要训练 16 次。如果再加入“网络层数”“神经元数量”等设置,组合会迅速增多,可能没有足够的时间全部试完。

这时我们可以限定训练预算,例如“只允许训练 10 次”,然后随机抽取 10 组设置。随机搜索的目的不是把所有可能性试遍,而是在有限次数内,尽量找到效果不错的组合。

“从分布中取样”是什么意思?

随机搜索实现了对参数的随机搜索,其中每个设置都是从可能的参数值的分布中进行取样,试图找出最佳的参数子集。
(先为每个超参数规定“可以取哪些值、按什么规则抽取”,然后随机抽出一整组设置。每抽出一组,就用这组设置训练模型并检查效果。“分布”可以先理解为抽取规则,“取样”就是按规则抽一次。这里要找的,是表现较好的超参数组合。)

可以把它想成配套餐:

  • 主食从米饭、面条中抽一个;
  • 饮料从水、茶、果汁中抽一个。

抽一次,得到“米饭+茶”;再抽一次,可能得到“面条+水”。每次抽到的都是一整套搭配。

随机搜索也是这样。一次可能抽到:

学习率 0.01 + 批量大小 32 + 隐藏层神经元数量 64

下一次可能抽到:

学习率 0.002 + 批量大小 128 + 隐藏层神经元数量 32

接着分别训练模型,看看哪一组设置的效果更好。这里的“随机”并不是毫无规则地乱填数字;抽取范围和抽取方式需要先由我们设定。

还要注意:“找出最佳”通常是指在已经尝试过的组合中,找出表现最好的一组。没有试过所有组合,就不能保证它是所有可能设置中的绝对最优。

为什么要“先粗搜,再细搜”?

首先在一个粗范围内搜索,然后根据最佳结果出现的位置,缩小范围。
(先在较宽的范围里试,判断哪一片区域有希望;再围绕效果较好的区域多试几个值。就像找东西时,先确定它大概在哪个房间,再到那个房间里仔细找。)

假设你不知道合适的学习率是多少,第一轮先试得宽一些:

尝试的学习率验证效果
0.1 附近较差
0.01 附近一般
0.001 附近较好
0.0001 附近一般

从这些结果看,0.001 附近比较有希望。下一轮就可以在它附近多试一些值,例如 0.0007、0.0012、0.0018,而不是继续把尝试次数平均分散到整个大范围。

这就是“先粗搜,再细搜”:

  1. 粗搜:找大概方向。
  2. 细搜:在有希望的区域里继续寻找。

不过,如果效果最好的值恰好落在搜索范围的边界,就要小心。例如你只允许学习率最大到 0.01,结果 0.01 最好,那么更好的值也许是 0.02。这时应考虑向外扩大范围,而不是急着缩小范围。

为什么要关注“哪个超参数更重要”?

某些超参数比其他的更加重要,随机搜索过程中会影响搜索的偏向。
(不同设置对模型效果的影响可能不一样。如果某个设置影响很大,就值得认真设计它的搜索范围,让搜索充分覆盖它的可能取值;如果另一个设置的影响较小,就不必把大量尝试次数都花在它上面。“偏向”可以理解为搜索要有重点。)

比如,在某个任务中:

  • 学习率设得不合适,模型可能学得很慢,甚至训练不稳定;
  • 批量大小从 32 改成 64,结果可能变化不大。

如果只有少量训练机会,就应重点考虑学习率该在哪些范围内尝试,而不是把大部分次数用来比较相近的批量大小。

这也是随机搜索常常比固定网格更实用的原因之一:假如网格只选了少数几个学习率,却把它们分别与许多批量大小搭配,你虽然训练了很多次,实际探索过的学习率却很少。

用一个完整过程把它串起来

假设你的目标是训练一个识别手写数字的模型,可以这样调参:

第一步:规定范围。
(例如,决定学习率大致在哪个范围内抽,批量大小从哪些候选值中抽。)

第二步:随机抽取几组设置。
(每组都包含模型训练所需的全部超参数,而不是只抽一个学习率。)

第三步:分别训练并比较。
(用每一组设置训练模型,再看它们在验证集上的表现。)

第四步:观察较好结果出现在哪里。
(例如,发现表现较好的配置大多使用 0.001 附近的学习率。)

第五步:调整范围,继续尝试。
(在有希望的区域多抽几组;如果好结果落在边界,也要考虑扩大范围。)

最后记住这个区别就够了:

网格搜索:先列好表格,按表格尝试组合。
随机搜索:先规定抽取规则,再随机尝试若干组合;找到有希望的区域后,继续在那里尝试。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询