Bayesian Adaptive Direct Search (BADS) 优化算法教程
1. 项目介绍
Bayesian Adaptive Direct Search (BADS) 是一个快速混合贝叶斯优化算法,专门设计用于解决困难的优化问题,特别是与拟合计算模型(例如通过最大似然估计)相关的问题。BADS 最初在 NeurIPS 2017 上发表,并在行为、认知和神经模型拟合中得到了广泛测试,目前被全球许多计算实验室使用。
BADS 在处理无梯度信息且目标函数非解析或噪声(例如通过数值近似或模拟评估)的情况下表现出色。它不需要特定调整,可以直接运行,类似于 MATLAB 中的其他内置优化器,如 fminsearch
。
2. 项目快速启动
安装
- 下载最新版本的 BADS 作为 ZIP 文件。
- 解压或克隆仓库到你希望的位置。
- 运行
install.m
脚本,这将把 BADS 基础文件夹添加到 MATLAB 搜索路径。 - 运行
bads('test')
以检查是否一切正常。
基本使用
BADS 的接口类似于其他 MATLAB 优化器。以下是基本用法:
[X, FVAL] = bads(FUN, X0, LB, UB, PLB, PUB)
FUN
: 目标函数句柄,通常是给定输入参数向量的数据和模型的负对数似然。X0
: 优化的起始点(行向量)。LB
和UB
: 硬性上下界。PLB
和PUB
: 合理上下界,即你期望找到几乎所有解决方案的盒子。
输出参数:
X
: 找到的最优解。FVAL
: 在最优解处的(估计)函数值。
示例代码
以下是一个简单的示例代码:
% 定义目标函数
FUN = @(x) (1-x(1))^2 + 100*(x(2)-x(1)^2)^2;
% 设置初始点
X0 = [0, 0];
% 设置硬性上下界
LB = [-5, -5];
UB = [5, 5];
% 设置合理上下界
PLB = [-2, -2];
PUB = [2, 2];
% 运行 BADS 优化
[X, FVAL] = bads(FUN, X0, LB, UB, PLB, PUB);
% 输出结果
disp('最优解:');
disp(X);
disp('最优解处的函数值:');
disp(FVAL);
3. 应用案例和最佳实践
应用案例
BADS 已被广泛用于拟合行为、认知和神经模型。例如,在心理学实验中,BADS 可以用于优化实验参数以最大化被试的反应时间或准确性。在神经科学中,BADS 可以用于拟合神经元放电模型以解释实验数据。
最佳实践
- 多次运行:由于 BADS 是一种半局部优化算法,建议从多个不同的起始点运行算法以获得最佳性能。
- 合理上下界:合理上下界(
PLB
和PUB
)的设置非常重要,它们应该包含你期望找到的几乎所有解决方案。 - 调试和优化:如果遇到问题,可以查看 BADS 的 FAQ 或在
acerbilab
讨论论坛中提问。
4. 典型生态项目
Variational Bayesian Monte Carlo (VBMC)
VBMC 是一个用于贝叶斯后验和模型推断的工具箱,可以与 BADS 协同使用。VBMC 提供了一种简单且用户友好的方法来估计参数的后验分布(即不确定性和误差范围),而不仅仅是点估计。
PyBADS
PyBADS 是 BADS 的 Python 移植版本,预计将于 2022 年底发布。PyBADS 将使 BADS 的强大功能在 Python 生态系统中可用,进一步扩展其应用范围。
通过本教程,你应该能够快速上手使用 BADS 进行模型拟合和优化。如果你有任何问题或需要进一步的帮助,请参考 BADS 的官方文档或在 acerbilab
讨论论坛中提问。