郭震 AI公众号:郭震AI

18 模型超参数调优

发布日期:

最近更新:

分类: Pytorch小白

预计阅读: 4 分钟

阅读次数: 0

预计阅读4 分钟
结构重点7 个
图文要点6 张
正文规模1.4k 字
模型超参数调优流程图查看大图
模型超参数调优流程图

PyTorch 调参不应该一上来做大范围搜索。先用小实验确认学习率、batch size、模型容量和训练轮数的大致范围。

模型超参数调优核对图查看大图
模型超参数调优核对图

我会用少量数据跑短实验,先看 loss 是否能下降。小实验都不稳,完整训练通常也不会好。

在机器学习中,模型的性能往往取决于多个因素,其中之一就是超参数的选择。在上一篇文章中,我们讨论了过拟合与正则化的内容,了解了如何通过正则化技术来防止模型的过拟合。而在本篇中,我们将深入探讨如何通过超参数调优来进一步提升模型的性能。

什么是超参数?

超参数是指在模型训练过程之前设置的参数,这些参数不是通过学习得到的,而是由开发者手动指定的。常见的超参数包括:

PyTorch超参数调优判断卡查看大图
PyTorch超参数调优判断卡

调优 PyTorch 模型时,先看学习率、batch size、优化器、权重衰减、训练轮数和验证曲线。

  • 学习率(learning rate)
  • 批大小(batch size)
  • 网络层数(number of layers)
  • 每层的神经元数量(number of neurons per layer)
  • 正则化强度(regularization strength)

选择合适的超参数可以显著提升模型的准确性,而错误的选择则可能导致欠拟合或过拟合。

超参数调优的方法

PyTorch阅读地图卡查看大图
PyTorch阅读地图卡

开始读《模型超参数调优》前,可以先看图中从问题到结果的路径。读完后再对照正文,确认自己能不能照着复现。

网格搜索是最常用的超参数调优方法之一。它通过定义一个可能的超参数值列表并穷举所有可能的组合来寻找最佳的超参数配置。

from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC

# 定义参数网格
param_grid = {
    'C': [0.1, 1, 10],
    'kernel': ['linear', 'rbf']
}

# 创建支持向量机模型
svc = SVC()

# 创建网格搜索对象
grid_search = GridSearchCV(svc, param_grid, cv=5)

# 拟合数据
grid_search.fit(X_train, y_train)

# 输出最佳参数
print("Best parameters:", grid_search.best_params_)

与网格搜索相比,随机搜索并不是遍历所有参数的组合,而是在指定的参数空间中随机选择一定数量的组合进行评估。这种方法在参数空间较大时更加高效。

from sklearn.model_selection import RandomizedSearchCV
import numpy as np

# 定义随机参数分布
param_dist = {
    'C': np.logspace(-3, 3, 7),
    'kernel': ['linear', 'rbf']
}

# 创建随机搜索对象
random_search = RandomizedSearchCV(svc, param_distributions=param_dist, n_iter=10, cv=5)

# 拟合数据
random_search.fit(X_train, y_train)

# 输出最佳参数
print("Best parameters:", random_search.best_params_)

贝叶斯优化(Bayesian Optimization)

贝叶斯优化是一种基于贝叶斯推断的智能搜索方法。与网格搜索和随机搜索不同,贝叶斯优化通过学习超参数与模型性能之间的关系来逐步优化超参数。

虽然贝叶斯优化的实现相对复杂,但可以使用库如 BayesianOptimization 来简化这个过程。

from bayes_opt import BayesianOptimization

# 定义目标函数
def black_box_function(C, gamma):
    model = SVC(C=C, gamma=gamma)
    model.fit(X_train, y_train)
    return model.score(X_test, y_test)

# 设置参数空间
pbounds = {'C': (0.1, 10), 'gamma': (0.01, 1)}

# 创建贝叶斯优化对象
optimizer = BayesianOptimization(f=black_box_function, pbounds=pbounds, verbose=2)

# 进行优化
optimizer.maximize(init_points=5, n_iter=25)

# 输出最佳参数
print("Best parameters:", optimizer.max)

调优的注意事项

  1. 交叉验证:在超参数调优时,使用交叉验证是非常重要的。通过交叉验证,你可以有效评估模型在未见数据上的性能,从而避免过拟合。

  2. 评估指标选择:选择合适的评估指标来衡量模型的性能非常关键。对于分类任务,可以使用准确率、F1-score、ROC-AUC等,而对于回归任务,可以使用均方误差(MSE)、均方根误差(RMSE)等。

  3. 超参数之间的关系:某些超参数可能相互影响,因此在调优时应该同时关注它们的组合效果。

  4. 学习曲线:绘制学习曲线有助于观察模型在不同超参数下的表现,从而选择出最佳的超参数设置。

模型超参数调优应用复盘卡查看大图
模型超参数调优应用复盘卡

学完《模型超参数调优》后,不妨换一个自己的场景试一次,重点观察输入、处理和输出是否能对应起来。

模型超参数调优应用检查卡查看大图
模型超参数调优应用检查卡

如果想把《模型超参数调优》用到自己的任务里,可以先缩小场景,只验证一个最关键的判断点。

总结

在模型评估与调优的过程中,超参数的选择是至关重要的一步。在本文中,我们介绍了多种超参数调优的方法,包括网格搜索、随机搜索和贝叶斯优化。每种方法都有其适用的场景和优缺点。

运用这些技术后,接下来我们将步入学习的总结阶段,回顾在整个学习过程中的心得与收获,帮助我们更好地掌握 PyTorch。

请继续关注下一篇文章,探讨我们在学习过程中的总结与体会。

相关教程

相关入口

AI 教程总索引

分享文章

转发到常用平台

微信/朋友圈可先复制链接

相关教程

AI 教程总索引

相关内容

相关 AI 教程

返回栏目

Reader Messages

读者留言

有问题、补充资料或实测结果,可以直接留下。这里不需要登录。

最多 800 字

为了防刷,每条留言会做长度、链接数量和提交频率限制。

0/800

留言列表

0
正在加载留言...