optimizer
简介
本仓库中包含dkl,dropout bo和saas三种优化算法
使用说明
将本项目拷贝到HEMT自动提参平台的autofitting_hemt/src/optimizer目录下,即可配合HEMT自动提参平台使用。
作为函数库单独使用,可以将对应算法文件的optimizer.jl文件包含到您的脚本中
算法介绍
- Deep Kernel Learning (DKL)
对于一般的基于GP过程的Bayesian Optimization,使用GP过程对黑盒函数进行预测,GP过程的一个重要假设就是位置区域的值的分布概率服从高斯分布。DKL通过结合深度神经网络(DNN)和高斯过程(GP),利用DNN的复杂函数近似能力和GP的灵活不确定性估计框架。DKL框架中的DNN用于学习嵌入,然后通过径向基函数(rbf)作用于GP核,使得核表示非参数化,能够潜在地模拟比标准GP公式中使用的核更丰富的核族。在我们的DKL算法中,创建一个两层的神经网络模型,令高斯过程在神经网络映射后的空间进行拟合,其余步骤与传统的贝叶斯优化相同。
通过包含DKL算法所在的文件“dkl_optimizer.jl”,调用如下函数
function dkl_optimize(
objective_function,
lb::Vector{Float64},
ub::Vector{Float64},
iterations::Int=100)
end
其中objective_function为待优化的函数,参数类型为一个函数句柄。lb为函数参数取值的下界,ub为函数参数取值的上界,这里会通过lb和ub的大小去推断待优化函数的参数个数,这两个参数的类型均为Vector{Float64}类型。 iterations参数控制迭代次数,类型为Int,越大的iterations会导致程序的用时更长。
- Dropout-BO
贝叶斯优化方法在处理高维目标函数时会面临计算成本高昂且往往不可行的挑战。Dropout-BO通过引入神经网络中的dropout策略来优化高维贝叶斯优化问题,该策略在每次迭代中只优化变量的一个子集。Dropout-BO的核心思想是随机选择一部分维度(d个维度中的D个总维度)进行优化,而将其余维度的变量暂时“丢弃”,即不参与当前迭代的优化过程。这种方法有效地减少了每次迭代中需要考虑的变量数量,从而降低了优化的复杂度。
将BayesianOptimization文件夹整个拷贝到工程中,在代码中包含“dbo.jl”文件,调用如下函数
function dropout_bo_optimize(
objective_function,
lb::Vector{Float64},
ub::Vector{Float64},
iterations::Int;
d_sub::Int=5,
fill_strategy::Symbol = :best)
end
其中objective_function为待优化的函数,参数类型为一个函数句柄。lb为函数参数取值的下界,ub为函数参数取值的上界,这里会通过lb和ub的大小去推断待优化函数的参数个数,这两个参数的类型均为Vector{Float64}类型。 iterations参数控制迭代次数,类型为Int,越大的iterations会导致程序的用时更长。d_sub为要对多少个维度进行冻结,被冻结的维度在这一轮次中将不参与优化,该参数类型为Int,默认值为5(注意,该参数一定要大于目标函数的参数数量)。fill_strategy参数表示未选中的维度的填充策略,支持:best和:random两种类型的填充策略。
- Sparse Axis-Aligned Subspace BO (SAASBO)
在处理高维贝叶斯优化(BO)问题时,传统的BO方法往往会受到“维数灾难”的影响,这是因为随着维度的增加,所需的样本量呈指数级增长,使得优化过程变得低效。SAASBO通过引入稀疏轴对齐子空间的概念,为高维BO问题提供了一种有效的解决方案。SAASBO的核心思想是,在高维空间中,真正影响目标函数的维度往往是稀疏的,即只有少数几个维度对函数值有显著影响。
SAASBO通过在稀疏轴对齐子空间上定义高斯过程(GP)代理模型,实现了在保持模型灵活性的同时,显著减少了模型复杂度。这种方法允许算法快速识别出对目标函数有重要影响的低维子空间,从而实现样本高效的高维BO。
通过在代码中包含“saas_optimizer.jl”文件,调用如下函数
function saas_optimize(objective_function::Function,
lb::Vector{Float64},
ub::Vector{Float64},
iterations::Int)
end
其中objective_function为待优化的函数,参数类型为一个函数句柄。lb为函数参数取值的下界,ub为函数参数取值的上界,这里会通过lb和ub的大小去推断待优化函数的参数个数,这两个参数的类型均为Vector{Float64}类型。 iterations参数控制迭代次数,类型为Int,越大的iterations会导致程序的用时更长。
版本说明
V0.0.1,2024-12-29 15:03
- 初始版本
使用许可
本模型库版权由BIANGXIN版权所有,未经许可,不得用于商业用途。