欢迎大家扫码关注MindSpore Quantum Gitee社区
目录
内容简介
黑盒优化指的是一些没有具体数学表达的优化问题,一种解决方案是引入代理模型去近似目标黑盒函数。通常假定代理模型是一个二阶或高阶交叉特征模型(形式与QUBO、HUBO相同)则可以使用量子算法求解。因子分解机(FMs)是一种监督学习方法,可以用于代理模型中特征系数的训练。本文将介绍利用交叉熵改进的因子分解机量子退火算法,以及高阶因子分解机对黑盒优化算法的可能改进。
相关论文1
标题:Black box optimization using QUBO and the cross entropy method
作者:Jonas N¨ußlein, Christoph Roch, Thomas Gabor, Jonas Stein, Claudia Linnhoff-Popien, and Sebastian Feld
期刊: Springer Nature Switzerland, 2023: 48-55
相关论文2
标题:Higher-Order Factorization Machines
作者:Mathieu Blondel, Akinori Fujino, Naonori Ueda, Masakazu Ishihata
会议: Advances in Neural Information Processing Systems, 2016, 29
01 因子分解机+量子退火(FMQA)
二阶交叉特征模型定义为
待训练的是参数 ,每个 都是独立变量。在处理稀疏矩阵时由于交叉项太少,参数训练容易不充分。如果借助矩阵分解的思路将 看成是两个矩阵的乘积,重构特征系数后独立变量变少就可以达到用较少的数据得到特征矩阵的目的
其中
是一个n维向量; , 是低维向量(k维),V是由 组成的矩阵, 为两个k维向量的内积:
k是一个超参。根据线性代数,对于任意对称正半定矩阵W,只要k足够大,一定存在矩阵V使得
。对于黑盒问题,往往是我们预先设定代理模型为QUBO问题的形式,然后借助因子分解机训练得到交叉项的信息。当我们的模型重写为上式之后,每个 都是两个向量的内积因此一定是对称的,此外只要对角元素足够大,就能保证W是半正定的。
对于交叉项可以做一些变换简化计算
原项求解的就是矩阵上三角之和,上式第1步就是整个矩阵之和减去矩阵的迹,然后求一半。经过这样的推导之后二阶FM最终表达为:
由此可以推导出FM对参数的梯度公式
有了梯度公式,就可以用各种基于梯度的算法来训练模型了,FMQA算法流程为:
-
随机初始化若干个解作为初始训练集
-
FM训练得到初始QUBO模型
-
在当前的QUBO模型(代理模型)下计算得到最优解
-
计算黑盒模型的损失函数
-
将新的解加入训练集并且重新训练更新QUBO模型
重复循环3-5步直到结束。
02 基于交叉熵的BOX-QUBO算法
交叉熵模型:交叉熵方法是一种通用的迭代优化方法。基本思想是给定一个参数的概率分布 和一个目标函数 ,在从该概率分布采样 ~ 和优化这个概率分布之间迭代。从随机参数v开始,然后对解 ~ 进行采样,并按其值 按递增顺序对其进行排序,最后调整参数v使得 更大并获得新的概率分布 。
Main idea:QUBO矩阵是一种低容量的代理模型,对于n个变量仅有 可训练的变量,通常是对所有的训练数据做回归(如前文的FMQA)。然而随着问题规模的增大,因为其能训练的参数有限,表达能力也有限,损失函数的值往往会增大。本文的亮点是提出一种新的策略,仅对一小部分的训练数据做回归,对剩下的数据只做分类,因为分类对模型的表达能力要求更低。为此需要将训练集根据其解得质量(也就是能量) 划分为两个集合:能量高的解 和能量低的解 :
注意我们的目标是找到一个解 始得能量最小。分类任务的目标就是将解集 分为高能和低能的部分,并且对低能解的集合 做回归。 的大小有超参 决定,例如 则 为所有样本的百分之3,因此回归会更加精准。
BOX-QUBO算法流程:
-
随机初始化QUBO的矩阵Q
-
在当前的QUBO模型(代理模型)下,解出最好的k个解 (用QA等算法)
-
计算黑盒模型的损失函数
-
将这些解加入训练集 并且重新训练得到QUBO的矩阵Q,训练Q的过程则如上文所说,将训练集分为高能和低能两个部分,对低能部分进行回归。
在分类结束之后,Q会训练n个循环,这里n是一个超参文章中选取5-10之间。在每个循环中临时训练集T是动态创建的:所有低能矢量
都在T内,而高能部分的矢量
仅有一部分当前预测值小于阈值的
属于T。临时训练集的损失函数是
和
的均方误差,对低能部分其损失函数为 ,高能部分为
使用梯度下降来优化Q。
图1 BOX-QUBO算法伪代码(来源:Springer Nature Switzerland, 2023: 48-55)
03 效果测试
文章在四个问题上测试对比了BOX-QUBO和FMQA方法:两个MAX-k-SAT、FVS和MaxClique。测试问题简介:
- MAX-SAT
令
为一组布尔变量且 为如下形式的布尔表达式:
该问题的任务是找到一组
使
。MAX-SAT问题是SAT的变种,它所要求的是尽可能多的子句被满足,MAX-k-SAT中的k指子句的长度。
- Feedback Vertex Set (FVS)
假设
是一个包含V个顶点E条边,且有圈的有向图。圈的定义为从顶点 出发并在 结束的路径。FVS问题的目标是找到最小的子集
使得图
是不包含圈的,即
- MaxClique
假设
是一个包含V个顶点E条边的无向图。图G的一个集团定义为一个子集
中的任意两个顶点都被一条边相连,即
。MaxClique的任务是找到给定图中最大的集团。
在测试中,将上述三个问题封装成Oracles以模拟黑盒问题的情形(即不知道具体的布尔表达式或者具体的图)。
求解的四个问题:
-
Max-4-SAT , V=20, C=300
-
Max-4-SAT , V=30, C=400
-
FVS , V=25, E=200
-
MaxClique , V=30, E=350
在MAX-k-SAT问题中,V为变量个数,C为子句个数;在FVS和MaxClique问题中,V为顶点个数,E为边数。对于每个问题都随机生成了15个例子使用进行求解。
首先先随机生成了2000个(问题1),和1000个(问题234)QUBO解作为初始训练集,两种算法都使用相同的初始训练集,将其中最好的结果做为基线(base)。同时每个例子都会使用白盒模型求解出一个最优解(optimum)。为了更好的衡量BOX-QUBO和FMQA两种方法的求解表现,定义了以下公式:
当
时说明
与白盒模型求解出的最优解一致。
图2 测试结果。x轴表示迭代次数,y轴表示15个实例上
的平均值(来源:Springer Nature Switzerland, 2023: 48-55)
上图中的x轴表示迭代次数,y轴表示15个实例上
的平均值:
,其中
是在当前迭代中实例 找到的最佳解的值。
除了BOX-QUBO和FMQA之外,还将各自的实例使用白盒模型的算法进行了求解以便进行比较。结果中有两点值得一提。首先可以看到在两个Max-4-SAT问题的结果中黑盒优化(包括BOX-QUBO和FMQA)找到的解决方案明显优于崔的白盒解决方案。但不是所有问题使用黑盒方法求解都比白盒方法更好,在FVS和MaxClique两个问题是白盒求解更有,但BOX-QUBO的结果要比FMQA更好。下表还展示了黑盒算法所用到的QUBO矩阵维数和白盒算法的对比。
图3 黑盒算法所用到的QUBO矩阵维数和白盒算法变量数列表(来源:Springer Nature Switzerland, 2023: 48-55)
04 高阶因子分解机
另一种提升黑盒优化效果的思路则是提高代理模型容量,QUBO模型由于参数太少,在面对更复杂的问题时会越来越无力。高阶因子分解机+HUBO模型可能是一个有用的方案。首先定义m阶因子分解机
其中定义
( 按位相乘求和)。对于高阶项这种很复杂的形式,可以使用核函数来处理,对于阶数
定义ANOVA核
并定义
以及
,则高阶因子分解机可改写为如下形式:
其中
是
的第s列。从这个角度看,我们可以将二阶及高阶因子分解机看作一种直接从数据中学习“支持向量”的核机器。
从上文的分析可知,对于训练高阶FM,ANOVA是主要的计算单元。论文2发展了一种动力学算法(Dynamic Programming, DP)来计算ANOVA核函数,并且在线性时间
计算其梯度。ANOVA核的一个特点是有如下递推关系
为
去掉一维后的
维矢量,
同理。也就是说当其他项固定时
是
的放射函数。记
的一个子矢量为
,
同理,定义
,则前述递推关系写为
使用自下而上的方法在DP表中组织计算,从左上角开始初始化递归然后遍历表,得出右下角的最终结果。这个过程需要
的时间和内存。
图4 通过递推得到
的示意图(来源:Advances in Neural Information Processing Systems, 2016, 29)
在计算梯度时则利用反向传播,根据链式规则
整个梯度
图5 计算
及其梯度的伪代码(来源:Advances in Neural Information Processing Systems, 2016, 29)
05 总结
1.通过在BOX-QUBO方法中同时使用分类和回归而不是单独的回归,对代理模型的容量提出了更低的要求,这提高了对未知解的泛化能力,从而使黑盒优化整体上更成功(找到更好的解)。
2.对于部分问题,将白盒问题也考虑为黑盒求解能得到更好的解。
3.使用HUBO表示的代理模型提高容量是另一种可能的优化思路,高阶因子分解机能帮助我们训练高阶的模型。
BOX-QUBO的代码:https: //github.com/JonasNuesslein/BOX-QUBO
FMQA代码:https://github.com/tsudalab/fmqa
欢迎大家订阅“量子计算HiQ”,查看更多论文分享和学术活动信息
· End ·
期待您成为新时代的开源贡献者
加入MindSpore Quantum的开发者行列,携手推进量子计算新发展!
长按下方二维码加入MindSpore Quantum项目↓
MindSpore Quantum官方资料
Gitee社区:https://gitee.com/mindspore/mindquantum
HiQ官网:https://hiq.huaweicloud.com/tutorial
MindSpore官网:https://www.mindspore.cn/mindquantum/docs/zh-CN/r0.8/index.html