以下是一篇笔记,主要将Optuna超参数优化工具,欢迎指正!
截止到2024年,在深度学习和机器学习领域,最受欢迎的超参数优化工具主要包括以下几种:
1. Optuna:Optuna 是近年来广受欢迎的超参数优化工具,因其灵活性和高效性在学术界和工业界得到了广泛应用。它支持先进的优化算法如 TPE(Tree-structured Parzen Estimator)和 CMA-ES(Covariance Matrix Adaptation Evolution Strategy),同时提供诸如早停(pruning)和分布式优化等特性,使得其在深度学习模型的超参数调优中非常强大。(我现在用的是这个)
2. Ray Tune:Ray Tune 因其出色的可扩展性和分布式计算能力在工业界受到青睐,尤其适用于大规模的超参数优化任务。它能够无缝集成多种机器学习框架,如 PyTorch、TensorFlow 和 XGBoost,适合大规模分布式深度学习任务。
3. Hyperopt:作为一款经典的超参数优化工具,Hyperopt 使用 TPE 算法并支持分布式并行优化。尽管推出较早,它在优化大规模机器学习任务时仍然表现优异,尤其在 Spark 和 MongoDB 等框架的支持下。
4. 微软 NNI (Neural Network Intelligence):NNI 是微软推出的用于超参数优化和自动化机器学习(AutoML)的工具,集成了包括贝叶斯优化(Bayesian Optimization)和 Hyperband 等多种搜索算法,并支持分布式训练和大规模优化。
5. HpBandSter:这款工具结合了 Hyperband 算法和贝叶斯优化方法,特别适合分布式环境下的超参数优化任务。
一.Optuna的优势
Optuna 在深度学习与神经网络领域的超参数优化方面占有非常重要的地位,特别是在以下几个方面有着明显的优势:
a. 自动化的超参数搜索
Optuna 提供了自动化的超参数搜索流程,不需要手动调整超参数。它可以根据用户设定的优化目标,使用不同的算法(如 TPE 和 CMA-ES)来自动探索最优的超参数组合。这对于深度学习任务中的大规模神经网络调参非常有效,特别是对于大型数据集和复杂模型。
b. 灵活的搜索空间定义
Optuna 可以定义多种不同类型的搜索空间,如连续值(浮点型学习率)、离散值(层数、单元数)、分类值(激活函数类型、优化器种类)等。相比其他工具,Optuna 提供了非常灵活的搜索空间定义方式,这使得它在复杂的深度学习任务中显得更为灵活。
c. 高效的贝叶斯优化 (TPE)
Optuna 默认使用的 TPE 算法是一种基于贝叶斯优化的超参数搜索方法。它能够根据之前的超参数试验结果,动态调整后续的搜索策略,找到更有潜力的超参数组合。对于大多数深度学习任务,TPE 相较于随机搜索和网格搜索能够更快地找到性能最优的超参数。
d. 支持异步并行搜索
在深度学习任务中,训练一个神经网络模型可能需要消耗大量的时间和计算资源。Optuna 支持并行化搜索和分布式计算,可以在多个 GPU 或计算节点上同时进行多个超参数试验,这大大缩短了找到最优参数的时间。
5. 持久化与断点续传
在实际的深度学习项目中,超参数优化可能耗时很长,特别是对于大规模神经网络的训练。Optuna 支持持久化存储(例如 SQLite 或 MySQL 数据库),当训练中途被打断时,可以从断点继续优化,这使得其在大规模神经网络任务中非常实用。
6. 深度学习框架的无缝集成
Optuna 可以无缝集成到 PyTorch、TensorFlow、Keras 等深度学习框架中。用户可以非常方便地将 Optuna 嵌入到自己的训练循环中,动态调整学习率、优化器参数、网络结构等。
7. 广泛的应用与社区支持
由于其灵活性和高效性,Optuna 已被广泛应用于深度学习、神经网络、自动机器学习(AutoML)等领域。它的活跃社区和不断更新的功能也进一步推动了它在深度学习调参领域的地位。
二.Optuna 的持久化功能
通过将 study 存储在 SQLite 数据库中,即使程序中断,Optuna 会自动保存已经完成的试验。也就是说,当你程序因为断电或其他原因中断后,只要再次运行 train.py
,Optuna 会从上次中断的进度基础上继续优化。
(1)首先,在 import
语句之后,为 Optuna Study 的存储路径添加变量 optuna_db
。你可以将它放在代码文件的全局变量部分。
(2)在 main()
函数中,修改 optuna.create_study
,确保在每次运行代码时能够正确加载持久化的 Study 而不是重新开始。