AI调参炼丹之法

简介: AI调参炼丹之法

1  超参数优化



image.png

编辑调参即超参数优化,是指从超参数空间中选择一组合适的超参数,以权衡好模型的偏差(bias)和方差(variance),从而提高模型效果及性能。常用的调参方法有:


  • 人工手动调参
  • 网格/随机搜索(Grid / Random Search)
  • 贝叶斯优化(Bayesian Optimization)


image.png

注:超参数 vs 模型参数差异 超参数是控制模型学习过程的(如网络层数、学习率);模型参数是通过模型训练学习后得到的(如网络最终学习到的权重值)。


2  人工调参



手动调参需要结合数据情况及算法的理解,选择合适调参的优先顺序及参数的经验值。

不同模型手动调参思路会有差异,如随机森林是一种bagging集成的方法,参数主要有n_estimators(子树的数量)、max_depth(树的最大生长深度)、max_leaf_nodes(最大叶节点数)等。(此外其他参数不展开说明) 对于n_estimators:通常越大效果越好。参数越大,则参与决策的子树越多,可以消除子树间的随机误差且增加预测的准度,以此降低方差与偏差。对于max_depth或max_leaf_nodes:通常对效果是先增后减的。取值越大则子树复杂度越高,偏差越低但方差越大。


image.png

3 网格/随机搜索



image.png

  • 网格搜索(grid search),是超参数优化的传统方法,是对超参数组合的子集进行穷举搜索,找到表现最佳的超参数子集。
  • 随机搜索(random search),是对超参数组合的子集简单地做固定次数的随机搜索,找到表现最佳的超参数子集。对于规模较大的参数空间,采用随机搜索往往效率更高。


import numpy as np
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import RandomizedSearchCV
from sklearn.ensemble import RandomForestClassifier
# 选择模型 
model = RandomForestClassifier()
# 参数搜索空间
param_grid = {
    'max_depth': np.arange(1, 20, 1),
    'n_estimators': np.arange(1, 50, 10),
    'max_leaf_nodes': np.arange(2, 100, 10)
}
# 网格搜索模型参数
grid_search = GridSearchCV(model, param_grid, cv=5, scoring='f1_micro')
grid_search.fit(x, y)
print(grid_search.best_params_)
print(grid_search.best_score_)
print(grid_search.best_estimator_)
# 随机搜索模型参数
rd_search = RandomizedSearchCV(model, param_grid, n_iter=200, cv=5, scoring='f1_micro')
rd_search.fit(x, y)
print(rd_search.best_params_)
print(rd_search.best_score_)
print(rd_search.best_estimator_)


4 贝叶斯优化



贝叶斯优化,是一种使用贝叶斯定理来指导搜索以找到目标函数的最小值或最大值的方法,就是在每次迭代的时候,利用之前观测到的历史信息(先验知识)来进行下一次优化, 通俗点讲,就是在进行一次迭代的时候,先回顾下之前的迭代结果,结果太差的 x 附近就不去找了,尽量往结果好一点的 x 附近去找最优解,这样一来搜索的效率就大大提高了,这其实和人的思维方式也有点像,每次在学习中试错,并且在下次的时候根据这些经验来找到最优的策略。


贝叶斯优化(Bayesian Optimization) 与网格/随机搜索最大的不同,在于考虑了历史调参的信息,使得调参更有效率。(但在高维参数空间下,贝叶斯优化复杂度较高,效果会近似随机搜索。)


image.png

4.1 算法简介


贝叶斯优化思想简单可归纳为两部分:


  • 高斯过程(GP):以历史的调参信息(Observation)去学习目标函数的后验分布(Target)的过程。
  • 采集函数(AC):由学习的目标函数进行采样评估,分为两种过程:1、开采过程:在最可能出现全局最优解的参数区域进行采样评估。2、勘探过程:兼顾不确定性大的参数区域的采样评估,避免陷入局部最优。


4.2 算法流程


for循环n次迭代:
    采集函数依据学习的目标函数(或初始化)给出下个开采极值点 Xn+1;
    评估超参数Xn+1得到表现Yn+1;
    加入新的Xn+1、Yn+1数据样本,并更新高斯过程模型;


image.png

"""
随机森林分类Iris使用贝叶斯优化调参
"""
import numpy as np
from hyperopt import hp, tpe, Trials, STATUS_OK, Trials, anneal
from functools import partial
from hyperopt.fmin import fmin
from sklearn.metrics import f1_score
from sklearn.ensemble import RandomForestClassifier
def model_metrics(model, x, y):
    """ 评估指标 """
    yhat = model.predict(x)
    return  f1_score(y, yhat,average='micro')
def bayes_fmin(train_x, test_x, train_y, test_y, eval_iters=50):
    """
    bayes优化超参数
    eval_iters:迭代次数
    """
    
    def factory(params):
        """
        定义优化的目标函数
        """
        fit_params = {
            'max_depth':int(params['max_depth']),
            'n_estimators':int(params['n_estimators']),
            'max_leaf_nodes': int(params['max_leaf_nodes'])
            }
        # 选择模型
        model = RandomForestClassifier(**fit_params)
        model.fit(train_x, train_y)
        # 最小化测试集(- f1score)为目标
        train_metric = model_metrics(model, train_x, train_y)
        test_metric = model_metrics(model, test_x, test_y)
        loss = - test_metric
        return {"loss": loss, "status":STATUS_OK}
    # 参数空间
    space = {
        'max_depth': hp.quniform('max_depth', 1, 20, 1),
        'n_estimators': hp.quniform('n_estimators', 2, 50, 1), 
        'max_leaf_nodes': hp.quniform('max_leaf_nodes', 2, 100, 1)
            }
    # bayes优化搜索参数
    best_params = fmin(factory, space, algo=partial(anneal.suggest,), max_evals=eval_iters, trials=Trials(),return_argmin=True)
    # 参数转为整型
    best_params["max_depth"] = int(best_params["max_depth"])
    best_params["max_leaf_nodes"] = int(best_params["max_leaf_nodes"])
    best_params["n_estimators"] = int(best_params["n_estimators"])
    return best_params
#  搜索最优参数
best_params = bayes_fmin(train_x, test_x, train_y, test_y, 100)
目录
相关文章
|
8月前
|
机器学习/深度学习 算法 TensorFlow
深度学习调参和炼丹 1
深度学习调参和炼丹
42 0
|
8月前
|
机器学习/深度学习
深度学习调参和炼丹 2
深度学习调参和炼丹
65 0
|
4天前
|
机器学习/深度学习 人工智能 自动驾驶
【AI 初识】强化学习是如何工作
【5月更文挑战第3天】【AI 初识】强化学习是如何工作
|
4天前
|
机器学习/深度学习 数据采集 人工智能
【AI 初识】机器学习中维度的诅咒是什么?
【5月更文挑战第2天】【AI 初识】机器学习中维度的诅咒是什么?
|
4天前
|
机器学习/深度学习 人工智能 算法
AI大模型学习理论基础
本文探讨了AI大模型学习的理论基础,包括深度学习(模拟神经元工作原理,通过多层非线性变换提取特征)、神经网络结构(如前馈、循环和卷积网络)、训练方法(监督、无监督、强化学习)、优化算法(如SGD及其变种)、正则化(L1、L2和dropout防止过拟合)以及迁移学习(利用预训练模型加速新任务学习)。这些理论基础推动了AI大模型在复杂任务中的应用和人工智能的发展。
|
4天前
|
机器学习/深度学习 人工智能 算法
AI特征分析和机器学习有什么区别
AI特征分析和机器学习有什么区别
|
4天前
|
机器学习/深度学习 人工智能 自然语言处理
极智AI | 详解ViT算法实现
大家好,我是极智视界,本文详细介绍一下 ViT 算法的设计与实现,包括代码。
96 0
|
6月前
|
人工智能
【2023】COMAP美赛数模中的大型语言模型LLM和生成式人工智能工具的使用
【2023】COMAP美赛数模中的大型语言模型LLM和生成式人工智能工具的使用
98 0
|
7月前
|
算法
|
机器学习/深度学习 人工智能 算法
一文归纳Ai调参炼丹之法
一文归纳Ai调参炼丹之法