Pytorch 如何 优化/调整 模型参数

本文介绍了如何在Pytorch中优化模型参数,重点讲解了贝叶斯优化方法,包括其原理和在深度学习框架下的应用。文章提到了Google Vizier和Pytorch AX (Botorch)作为优化平台,并提供了安装和使用示例。
摘要由CSDN通过智能技术生成

Pytorch 如何自动优化/调整 模型超参

背景

对于优化模型性能表现而言,主要可归纳为两种方式:

  • 采用NAS的方式搜索,获得某个任务上最优的模型结构以及模型参数设置
  • 优化模型参数

诚然,对于第一种方式来说,NAS对算力的消耗是巨大的,因而需要具备巨量计算资源才能够进行,因此具有较高的门槛;而第二种方式来说,消耗的资源要小很多,因而对于本钱小的用户来说,采用第二种是比较合理的方式;尤其是在诸如kaggle等比赛上,很多团队并不具备类似于google那样的算力,因而采用第二种方法提高模型表现是最重要的手段。

优化模型参数

首先需要搞清楚,这里所指的优化模型参数是指在深度学习时代优化模型的超参。什么是超参了?超参是指,必须由人工设定的模型参数,比如学习率,比如mini-batch 的batch size,比如衰减率等等。参数优化特指的是这一类超参。


通常而言,在传统机器学习时代,针对一些结构较为简单的模型,比如随机数森林;其超参数量有限,并且超参的取值范围一般来说比较小,且并非连续数字;比如随机森林的depth参数只能是取整数;因而在这种情况下主要采用的是 网格搜索的方法即grid search 的方法进行合适超参的选取,即超参的优化。
很明显的是,采用grid search的方法不但浪费大量计算资源,并且效率无法保障。经过前人的验证,在传统机器学习时代形成了三种主要的调参方法:

  • grid search
  • random search(随机调参)
  • bayesian optimize (贝叶斯调参/贝叶斯优化)

其中普遍来说,后两者的效果要更好;尤其是bayesian optimzie 性能更好,更加优异;在当时广泛用在诸如kaggle等比赛上(我曾经见过有kaggle的比赛团队使用贝叶斯调参将模型accuracy从76% 调到95%)。

贝叶斯优化

贝叶斯优化的主体思想是基于贝叶斯原理,即根据现有发生的事情(一组超参下模型表现情况)来推断如果采用另一组超参模型会是什么样的表现;简而言之就是基于少量的现有超参组合来估计整个超参组合空间,从中挑选出最为合适的超参组合;这个过程常常采用基于高斯回归来做估计;具体的原理可以参考[1]链接。如果需要尝试下贝叶斯优化的效果,在使用传统算法时可以参考链接,这里有使用案例,可以配合sklearn 进行测试。我这里提供一段代码以供测试

# coding:utf-8

from sklearn.datasets import make_classification
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
import numpy as np
from bayes_opt import BayesianOptimization

x,y = make_classification(n_samples=1000,n_features=10,n_classes=2)
rf = RandomForestClassifier()
#rf.fit(x,y)
print(np.mean(cross_val_score(rf,x,y,cv=20,scoring='
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值