什么是贝叶斯优化(Bayesian Optimization)?

article/2025/8/15 1:26:52

贝叶斯最优化(Bayesian Optimization)是一种用于函数全局最优化的策略,特别适用于那些计算代价昂贵的黑箱函数(如机器学习模型的超参数调优)。其核心思想是通过构建一个代理模型(通常是高斯过程或随机森林),逐步选择最优的参数,从而有效地找到全局最优解。贝叶斯最优化能够在不需要大量计算资源的情况下,有效探索参数空间,具有更高效、更严密的特点。

贝叶斯最优化的原理

  1. 初始采样

    • 随机选择一些参数点,并计算对应的目标函数值。
    • 这些点和目标函数值将用于初始化代理模型。
  2. 构建代理模型

    • 使用高斯过程(Gaussian Process, GP)或随机森林(Random Forest)等方法,构建目标函数的代理模型。高斯过程常用,因为它不仅能预测函数值,还能提供预测不确定性。
  3. 代理模型优化

    • 使用代理模型预测新的参数点的目标函数值和不确定性。
    • 基于这些预测,计算一个采集函数(Acquisition Function),如期望改进(Expected Improvement, EI),上置信界(Upper Confidence Bound, UCB)等。采集函数用来平衡探索(exploration)和开发(exploitation)之间的权衡。
      • 探索:选择那些不确定性较大的点,希望发现新的好点。
      • 开发:选择那些预计目标函数值较好的点,利用已有信息改进最优解。
  4. 更新代理模型

    • 在采集函数的指导下选择下一个参数点,计算其目标函数值。
    • 将新的数据点加入已有的数据集中,更新代理模型。
  5. 重复迭代

    • 重复步骤3和4,逐步缩小参数空间,找到最优参数。
    • 迭代过程在达到预设的迭代次数或收敛条件时结束。

贝叶斯最优化的优势

  1. 高效性

    • 贝叶斯最优化通过代理模型有效地探索参数空间,减少了直接计算目标函数的次数,适合计算昂贵的优化问题。
  2. 平衡探索与开发

    • 通过采集函数,贝叶斯最优化能很好地平衡探索未知区域和利用已知好区域,避免陷入局部最优。
  3. 不确定性量化

    • 高斯过程能提供预测不确定性,这有助于更好地指导采样过程。

应用领域

贝叶斯最优化广泛应用于机器学习中的超参数调优,如:

  • 深度学习模型中的超参数调优(学习率、批量大小、网络结构等)。
  • 机器学习算法(如支持向量机、随机森林等)的参数设置。
  • 强化学习中的策略优化。

总之,贝叶斯最优化在处理高维、非凸、计算代价昂贵的优化问题时,提供了一种高效且严密的方法。

示例

# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import Matern
from scipy.optimize import minimize
from scipy.stats import norm# 目标函数:f(x, y) = \sin(x) + \cos(y)
def objective_function(x):return np.sin(x[0]) + np.cos(x[1])# 采集函数:期望改进
def acquisition_function(x, gp, y_max):mean, std = gp.predict(np.array([x]), return_std=True)z = (mean - y_max - 0.01) / stdreturn (mean - y_max - 0.01) * norm.cdf(z) + std * norm.pdf(z)# 绘制目标函数热力图
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) + np.cos(Y)plt.figure(figsize=(10, 7))
plt.contourf(X, Y, Z, levels=50, cmap='viridis')
plt.colorbar(label='Objective Function Value')
plt.title('Objective Function Heatmap')
plt.xlabel('x')
plt.ylabel('y')# 初始化随机采样点
initial_points = np.random.uniform(-5, 5, (5, 2))
initial_values = np.array([objective_function(x) for x in initial_points])# 高斯过程模型
kernel = Matern(nu=2.5)
gp = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=10)
gp.fit(initial_points, initial_values)# 贝叶斯优化过程
n_iter = 15
for i in range(n_iter):y_max = max(initial_values)res = minimize(lambda x: -acquisition_function(x, gp, y_max), x0=np.random.uniform(-5, 5, 2), bounds=[(-5, 5), (-5, 5)])next_sample = res.xnext_value = objective_function(next_sample)initial_points = np.vstack((initial_points, next_sample))initial_values = np.append(initial_values, next_value)gp.fit(initial_points, initial_values)plt.scatter(next_sample[0], next_sample[1], c='red')plt.scatter(initial_points[:, 0], initial_points[:, 1], c='black', label='Samples')
plt.legend()
plt.show()

这段代码实现了贝叶斯优化算法,用于优化一个二维目标函数 f ( x , y ) = sin ⁡ ( x ) + cos ⁡ ( y ) f(x, y) = \sin(x) + \cos(y) f(x,y)=sin(x)+cos(y)。下面是代码的具体实现步骤及其功能:

代码实现步骤及功能

  1. 导入必要的库

    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn.gaussian_process import GaussianProcessRegressor
    from sklearn.gaussian_process.kernels import Matern
    from scipy.optimize import minimize
    from scipy.stats import norm
    
    • 导入用于数值计算、绘图、构建高斯过程模型和优化的库。
  2. 定义目标函数

    def objective_function(x):return np.sin(x[0]) + np.cos(x[1])
    
    • 目标函数 f ( x , y ) = sin ⁡ ( x ) + cos ⁡ ( y ) f(x, y) = \sin(x) + \cos(y) f(x,y)=sin(x)+cos(y)
  3. 定义采集函数

    def acquisition_function(x, gp, y_max):mean, std = gp.predict(np.array([x]), return_std=True)z = (mean - y_max - 0.01) / stdreturn (mean - y_max - 0.01) * norm.cdf(z) + std * norm.pdf(z)
    
    • 采集函数(期望改进):用于选择下一个采样点,平衡探索和开发。
  4. 绘制目标函数热力图

    x = np.linspace(-5, 5, 100)
    y = np.linspace(-5, 5, 100)
    X, Y = np.meshgrid(x, y)
    Z = np.sin(X) + np.cos(Y)plt.figure(figsize=(10, 7))
    plt.contourf(X, Y, Z, levels=50, cmap='viridis')
    plt.colorbar(label='Objective Function Value')
    plt.title('Objective Function Heatmap')
    plt.xlabel('x')
    plt.ylabel('y')
    
    • 绘制目标函数在二维参数空间中的热力图。
  5. 初始化随机采样点

    initial_points = np.random.uniform(-5, 5, (5, 2))
    initial_values = np.array([objective_function(x) for x in initial_points])
    
    • 随机选择一些初始采样点,并计算其目标函数值。
  6. 构建高斯过程模型

    kernel = Matern(nu=2.5)
    gp = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=10)
    gp.fit(initial_points, initial_values)
    
    • 使用高斯过程回归模型拟合初始采样点及其目标函数值。
  7. 贝叶斯优化过程

    n_iter = 15
    for i in range(n_iter):y_max = max(initial_values)res = minimize(lambda x: -acquisition_function(x, gp, y_max), x0=np.random.uniform(-5, 5, 2), bounds=[(-5, 5), (-5, 5)])next_sample = res.xnext_value = objective_function(next_sample)initial_points = np.vstack((initial_points, next_sample))initial_values = np.append(initial_values, next_value)gp.fit(initial_points, initial_values)plt.scatter(next_sample[0], next_sample[1], c='red')plt.scatter(initial_points[:, 0], initial_points[:, 1], c='black', label='Samples')
    plt.legend()
    plt.show()
    
    • 迭代优化过程
      • 每次迭代中,基于当前模型选择下一个采样点。
      • 计算新采样点的目标函数值。
      • 更新采样点和对应的目标函数值。
      • 重新拟合高斯过程模型。
      • 将新采样点绘制在热力图上(红色点表示新的采样点,黑色点表示所有采样点)。
    • 采集函数最小化:选择最大期望改进的点作为下一个采样点。

结果

在这里插入图片描述
这个热力图展示了目标函数 ( f(x, y) = \sin(x) + \cos(y) ) 在二维空间中的值分布。以下是图中的一些要点及其与代码的关系:

热力图的解释

  1. 颜色表示目标函数值

    • 颜色从紫色到黄色,表示目标函数值从低到高。紫色区域表示目标函数值较低的区域,而黄色区域表示目标函数值较高的区域。
    • 图右侧的颜色条显示了目标函数值的范围,从大约 -1.92 到 1.92。
  2. 坐标轴

    • x 轴和 y 轴分别表示参数 ( x ) 和 ( y ) 的取值范围,从 -5 到 5。
    • 这个范围内的每个点都有一个对应的目标函数值 ( f(x, y) ),其大小由图中的颜色表示。
  3. 采样点

    • 图中的黑色点表示采样点,即在优化过程中实际计算了目标函数值的点。
    • 初始的几个采样点是随机选择的,而后续的采样点是通过贝叶斯优化过程选择的。

代码的解释与图结合

代码通过以下步骤生成了这个热力图并选择采样点:

  1. 目标函数的热力图

    • 代码生成了一组 ( x ) 和 ( y ) 值的网格(通过 np.meshgrid),并计算了每个网格点的目标函数值 ( \sin(x) + \cos(y) )。
    • 使用 plt.contourf 绘制目标函数值的等高线图,颜色表示目标函数值的大小。
  2. 初始化随机采样点

    • 初始采样点通过 np.random.uniform 在范围 [-5, 5] 内随机生成,代码中的 initial_pointsinitial_values 保存了这些点及其对应的目标函数值。
    • 图中的一些黑色点表示这些初始采样点。
  3. 高斯过程模型拟合和更新

    • 使用高斯过程回归模型拟合初始采样点及其目标函数值。
    • 在每次迭代中,通过最小化采集函数(期望改进函数)选择下一个采样点,这个采样点是优化过程中认为可能改进最大的点。
  4. 采样点的可视化

    • 在每次新的采样点被选择并计算其目标函数值后,代码通过 plt.scatter 将新的采样点绘制在图上(红色点)。
    • 最后使用黑色点(plt.scatter(initial_points[:, 0], initial_points[:, 1], c='black', label='Samples'))表示所有采样点。

总结

  • 热力图展示了目标函数在二维空间中的值分布。

  • 黑色点表示在贝叶斯优化过程中计算目标函数值的采样点。

  • 贝叶斯优化过程通过代理模型(高斯过程)逐步选择新的采样点,以高效找到目标函数的全局最优解。

  • 通过可视化,可以直观地看到采样点如何逐步分布在目标函数的高值区域。

  • 代码通过贝叶斯优化算法在目标函数的二维参数空间中逐步逼近最优值。

  • 初始随机采样点经过高斯过程模型的拟合和采集函数的引导,逐步找到目标函数的最优解。

  • 可视化部分展示了采样点如何逐步逼近最优区域。

通过这个过程,贝叶斯优化有效地减少了目标函数评估次数,同时能够在计算代价昂贵的情况下找到全局最优解。


http://www.hkcw.cn/article/oeyiabURVW.shtml

相关文章

Spring AI+DeepSeek快速构建AI智能机器人

引言 在AI技术蓬勃发展的当下,Spring生态推出了Spring AI项目,为Java开发者提供了便捷的AI集成方案。本文将演示如何用Spring AIDeepSeek V3 快速搭建一个具备自然语言处理能力的智能对话机器人。 一、环境准备 JDK 17 Maven/Gradle构建工具 DeepSe…

【大模型科普】大模型:人工智能的前沿(一文读懂大模型)

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈人工智能与大模型应用 ⌋ ⌋ ⌋ 人工智能(AI)通过算法模拟人类智能,利用机器学习、深度学习等技术驱动医疗、金融等领域的智能化。大模型是千亿参数的深度神经网络(如ChatGPT&…

借用AI工具(cursor/vscode) 调试matlab代码(2025.4最新实测)

本文实测环境:MATLAB 2025a Windows 11 本文亮点:无需重写Python!用AI直接优化现有MATLAB工程 一、AI调试MATLAB的紧迫性 因为matlab无法内置ai 工具 ,别人都有的不能out了 另外说一声matlba2025a已经很改版很多了,与…

5 分钟用满血 DeepSeek R1 搭建个人 AI 知识库(含本地部署)

最近很多朋友都在问:怎么本地部署 DeepSeek 搭建个人知识库。 老实说,如果你不是为了研究技术,或者确实需要保护涉密数据,我真不建议去折腾本地部署。 为什么呢? 目前 Ollama 从 1.5B 到 70B 都只是把 R1 的推理能力提炼到 Qwen 和 Llama 的蒸馏版本上。 虽说性能是提升…

灰狼优化算法(GWO)(含ai创作)

GWO简介 灰狼优化算法(Grey Wolf Optimizer,GWO)是一种模仿灰狼狩猎行为的群体智能优化算法,由Seyedali Mirjalili等人在2014年提出。这种算法主要模拟了灰狼的社会等级结构和狩猎策略,用于解决各种优化问题。 在灰狼…

5步掌握MCP HTTP模式部署:从零开始搭建你的AI“邮局”!

🔥关注墨瑾轩,带你探索编程的奥秘!🚀 🔥超萌技术攻略,轻松晋级编程高手🚀 🔥技术宝库已备好,就等你来挖掘🚀 🔥订阅墨瑾轩,智趣学习不…

基于DeepSeek-Coder,实现Microi吾码低代码平台AI代码辅助生成的思路设想【辅助代码生成】

文章目录 引言一、整体架构设计二、实现流程与关键技术1. 构建领域数据集2. 模型训练与微调3. 生成代码的安全控制4. 平台集成与交互设计 三、效果优化与评估1. 效果展示2. 评估指标 四、未来优化方向结语 引言 低代码开发平台(Microi吾码)通过可视化交…

【DeepSeek+即梦AI:零基础生成专业级AI图片全流程指南(2025实战版)】

第一部分:工具认知篇——认识你的数字画笔 1.1 工具定位与核心价值 (讲师开场白)各位同学好,今天我们要解锁的是AI创作领域最具生产力的组合工具——DeepSeek+即梦AI。就像画家需要画笔与颜料,这对组合就是你的数字创作套装: • DeepSeek:国内顶尖的智能提示词工程师 …

【Ai学习】利用扣子(Coze)简单搭建图像生成工作流(小白初学版)

开始之前我们先了解一下我们准备使用的工具。 什么是扣子(Coze)? 官网链接:扣子 扣子(Coze)是一个开源的AI工具开发平台,提供了丰富的API和简单易用的界面,帮助用户快速搭建各种A…

AIGC时代——语义化AI驱动器:提示词的未来图景与技术深潜

文章目录 一、技术范式重构:从指令集到语义认知网络1.1 多模态语义解析器的进化路径1.2 提示词工程的认知分层 二、交互革命:从提示词到意图理解2.1 自然语言交互的认知进化2.2 专业领域的认知增强 三、未来技术图谱:2025-2030演进路线3.1 20…

【AI 大模型】LlamaIndex 大模型开发框架 ② ( LlamaIndex 可配置的 LLM 类型 | LlamaIndex 可配置的 文本向量模型 类型 )

文章目录 一、LlamaIndex 可配置的 LLM 类型1、云端 API 类型 LLM2、本地部署 类型 LLM3、混合部署 LLM4、错误示例 - 设置 云端 DeepSeek 大模型 二、LlamaIndex 可配置的 文本向量模型 类型1、云端 文本向量模型2、本地部署 文本向量模型3、适配器微调模型 AdapterEmbeddingM…

云端微光,AI启航:低代码开发的智造未来

文章目录 前言一、引言:技术浪潮中的个人视角初次体验腾讯云开发 Copilot1.1 低代码的时代机遇1.1.1 为什么低代码如此重要? 1.2 AI 的引入:革新的力量1.1.2 Copilot 的亮点 1.3 初学者的视角1.3.1 Copilot 带来的改变 二、体验记录&#xff…

OCR+AI双引擎驱动:手把手教学构建智能财报分析系统

在金融行业中,财报分析是帮助企业和投资者做出决策的关键环节。随着科技的快速发展,自动化、智能化的财报分析变得越来越重要。传统的人工财报分析不仅费时费力,而且容易受到人为错误的影响,因此企业急需借助先进的技术来提高效率…

秒杀系统—4.第二版升级优化的技术文档二

大纲 7.秒杀系统的秒杀活动服务实现 (1)数据库表设计 (2)秒杀活动状态机 (3)添加秒杀活动 (4)删除秒杀活动 (5)修改秒杀活动 (6)后台查询秒杀活动 (7)前台查询秒杀活动 (8)查询秒杀商品的销售进度 (9)秒杀活动添加秒杀商品 (10)秒杀活动删除秒杀商品 (11)触发渲染秒…

“苏超”10元门票被炒到500元 散装江苏的足球狂热

端午假期,当全球球迷的目光聚焦在欧冠决赛时,江苏人正为自己的“苏超”联赛沸腾。尽管没有大牌外援和全网转播,但场均上座率接近万人,比赛门票一票难求,这场江苏省内的业余联赛迅速走红。“苏超”有多火?10元的门票被炒到500元,上座率甚至超过了一些职业联赛。实际上,“…

【Leetcode】vector刷题

🔥个人主页:Quitecoder 🔥专栏:Leetcode刷题 目录 1.只出现一次的数字2.杨辉三角3.删除有序数组中的重复项4.只出现一次的数字II5.只出现一次的数字III6.电话号码的字母组合 1.只出现一次的数字 题目链接:136.只出现一…

深入解析yolov5,为什么算法都是基于yolov5做改进的?(一)

YOLOv5简介 YOLOv5是一种单阶段目标检测算法,它在YOLOv4的基础上引入了多项改进,显著提升了检测的速度和精度。YOLOv5的设计哲学是简洁高效,它有四个版本:YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x,分别对应不同的模型大小…

【数据结构】手撕AVL树(万字详解)

目录 AVL树的概念为啥要有AVL树?概念 AVL树节点的定义AVL树的插入AVL树的旋转左单旋右单旋左右双旋右左双旋 AVL树的查找AVL树的验证end AVL树的概念 为啥要有AVL树? 在上一章节的二叉搜索树中,我们在插入节点的操作中。有可能一直往一边插…

2024年信息素养大赛 C++小学组初赛 算法创意实践挑战赛 真题详细解析

2024年信息素养大赛初赛C真题解析 选择题&#xff08;共15题&#xff0c;每题5分&#xff0c;共75分&#xff09; 1、运行下列程序段&#xff0c;输出的结果是( ) int n572765; cout <<n/10%10; A、5 B、6 C、4 D、1 答案&#xff1a;B 考点分析&#xff1a;考察…

GPIO子系统层次与数据结构详解

往期内容 本专栏往期内容&#xff1a; Pinctrl子系统和其主要结构体引入Pinctrl子系统pinctrl_desc结构体进一步介绍Pinctrl子系统中client端设备树相关数据结构介绍和解析inctrl子系统中Pincontroller构造过程驱动分析&#xff1a;imx_pinctrl_soc_info结构体Pinctrl子系统中c…