通俗易懂讲透贝叶斯优化
通俗易懂讲透贝叶斯优化本科生/研究生都能看懂本文用大白话生活比喻公式拆解可运行代码对比总结把贝叶斯优化从原理、流程、优缺点到适用场景讲得明明白白适合机器学习、AutoML、超参数调优、面试复习。一、先搞懂我们为什么需要贝叶斯优化在机器学习里我们经常要做一件事找一组最好的超参数让模型效果最好。传统方法很笨网格搜索把所有参数组合全跑一遍慢到爆炸随机搜索瞎猜浪费算力问题在于训练一次模型太贵、太慢不能随便乱试。于是就有了贝叶斯优化用最少的试验次数找到最优解的全局黑盒优化算法一句话总结贝叶斯优化 聪明地试错边试边学越试越准。二、贝叶斯优化是什么超形象比喻你要找全城最好吃的拉面店但不能每家都吃太贵太费时间。贝叶斯优化就是这个策略先随机试几家初始采样根据吃过的店预测没吃过的店好不好吃代理模型选下一家最值得试的店采集函数不断更新预测直到找到最好吃的迭代优化对应到算法里代理模型高斯过程GP用已测点预测未知点带不确定性采集函数平衡“ exploit 吃好吃的”和“ explore 找新店”目标最少次数找到全局最优三、贝叶斯优化核心三要素必懂1. 黑盒函数我们不知道内部结构只知道输入→输出且计算很贵超参数组合 → 模型准确率无法求导、非凸、高维2. 代理模型高斯过程 GP用已有的采样点预测任意点的函数值 不确定性。输出预测均值μ好不好、预测方差σ准不准3. 采集函数最关键决定下一个点去哪试平衡两个目标利用Exploitation去预测值高的地方探索Exploration去不确定的地方可能有惊喜常用采集函数EI期望提升最常用自动平衡UCB置信上界可调探索强度PI概率提升求“有提升”的概率四、贝叶斯优化完整流程4步背会初始化随机选几个点计算真实目标值训练代理模型用高斯过程拟合已有数据最大化采集函数选出下一个最值得试的点评估真实值→更新数据→重复直到达到迭代次数或找到满意解五、公式极简看懂不复杂1. 高斯过程预测对新点 x输出均值μ(x)\mu(x)μ(x)→ 预测分数方差σ(x)\sigma(x)σ(x)→ 不确定度2. 采集函数 EI最常用αEI(x)E[max(f(x)−f(x),0)]\alpha_{EI}(x) \mathbb{E}\left[\max(f(x)-f(x^),0)\right]αEI(x)E[max(f(x)−f(x),0)]f(x)f(x^)f(x)当前最好值含义这个点能带来多少预期提升3. 采集函数 UCBαUCB(x)μ(x)κ⋅σ(x)\alpha_{UCB}(x) \mu(x) \kappa \cdot \sigma(x)αUCB(x)μ(x)κ⋅σ(x)κ越大越爱探索κ越小越爱利用六、代码实战贝叶斯优化黑盒函数直接复制可运行用bayes_opt库带4张可视化图。importnumpyasnpimportmatplotlib.pyplotaspltfrombayes_optimportBayesianOptimization# 1. 定义黑盒函数要优化的目标defblack_box_function(x,y):# 一个复杂非凸函数我们想最大化它return-np.sin(3*x)-x**20.7*xnp.cos(2*y)y**2-0.5*y# 2. 设置参数范围 pbounds{x:(-2,2),y:(-2,2)}# 3. 初始化贝叶斯优化器 optimizerBayesianOptimization(fblack_box_function,pboundspbounds,random_state42,)# 4. 开始优化 # init_points初始随机点# n_iter迭代次数optimizer.maximize(init_points10,n_iter30,)# 5. 输出最优结果 print(*50)print(最优参数,optimizer.max[params])print(最优目标值,optimizer.max[target])print(*50)# 6. 提取优化历史 x_list[res[params][x]forresinoptimizer.res]y_list[res[params][y]forresinoptimizer.res]target_list[res[target]forresinoptimizer.res]# 7. 可视化 x_gridnp.linspace(-2,2,100)y_gridnp.linspace(-2,2,100)X,Ynp.meshgrid(x_grid,y_grid)Zblack_box_function(X,Y)plt.figure(figsize(12,10))# 子图1等高线 采样点plt.subplot(2,2,1)plt.contourf(X,Y,Z,20,cmapviridis)plt.scatter(x_list,y_list,cred,s20,label采样点)plt.title(目标函数等高线与采样点)plt.legend()# 子图2优化过程plt.subplot(2,2,2)plt.plot(target_list,b-o,markersize3)plt.title(优化过程目标值变化)plt.xlabel(迭代次数)plt.ylabel(目标值)plt.grid()# 子图3参数变化plt.subplot(2,2,3)plt.plot(x_list,r-s,labelx,markersize3)plt.plot(y_list,g-^,labely,markersize3)plt.title(参数迭代趋势)plt.xlabel(迭代次数)plt.ylabel(参数值)plt.legend()plt.grid()# 子图43D视图axplt.subplot(2,2,4,projection3d)ax.plot_surface(X,Y,Z,cmapplasma,alpha0.7)ax.scatter(x_list,y_list,target_list,cblack,s20)ax.set_title(3D 目标函数与优化路径)plt.tight_layout()plt.show()七、贝叶斯优化优点面试必背极高效率比网格/随机搜索少几十~几百次试验黑盒可用不需要梯度、不要求函数凸自带不确定性知道哪里预测不准自动权衡探索/利用越学越聪明超参调优神器XGBoost、LightGBM、神经网络首选八、贝叶斯优化缺点必须知道高维灾难参数20维效果变差、速度变慢假设函数平滑剧烈震荡函数不友好不能并行一步一步来无法批量跑高斯过程计算慢数据点变多时复杂度升高九、超参搜索方法对比速记表方法优点缺点适用场景网格搜索简单、全局极慢、维度爆炸维度5随机搜索可并行、简单盲目、浪费算力高维、并行集群贝叶斯优化高效、智能、少试验高维差、不可并行训练昂贵、中等维度TPE高维友好、支持离散不如GP平滑超参20维进化算法非凸、复杂空间试验次数多结构搜索十、什么时候用贝叶斯优化✅一定要用贝叶斯优化模型训练很慢XGBoost、神经网络、大模型超参数不多5~20维算力有限、想少跑实验AutoML、自动调参❌不要用参数30维 → 用TPE能并行大规模集群 → 用随机搜索函数极不光滑、噪声极大 → 用进化算法十一、一句话总结贝叶斯优化是昂贵黑盒函数的最优全局优化方法用代理模型采集函数实现“少试错、找最优”是机器学习超参数调优的第一选择。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2500133.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!