最优化算法
背景
通过公式生成ADF之后,根据下层函数库的配置,在结构不变的情形下,ADF是可以通过一系列值在0-1之间的参数进行调节的。也即ADF可表示为固定维数n的实数集,因此需要解决的问题就是在给定的目标下,求一组使目标值最大的参数。
max(f(x0,x1,x2,x3,...,xn)),xi∈[0,1]
由于架构本身并不知道ADF运行的函数实现,因此目标函数是完全未知的,无法用梯度下降/牛顿迭代法等处理,更不用说线性规划的那些解法了。
这时候可选择的,就是穷举法或启发式算法。
最优化算法
穷举——网格搜索
学过支持向量机SVM的人应该都瞄过这个算法,是用来优化RBF核中的两个参数的。
很简单的一个算法,设定精度,n层for循环穷举所有的参数值即可。
直接写段代码说明吧:
//精度设为0.001,两个参数
double maxP = 0.0;
double max_x0 = -1;
double max_x1 = -1;
for (double x0=0.0; x0<=1.0; x0+=0.001)
{
for (double x1=0.0; x1<=1.0; x1+=0.001)
{
double currentP = f(x0, x1);
if (currentP > maxP)
{
maxP = currentP;
max_x0 = x0;
max_x1 = x1;
}
}
}
在具体实现时,由于n是可变的,不能直接写n个for循环,需要用一个进位算法实现,不详述。
全随机——蒙特卡洛算法
完全随机地取若干组参数值,然后取其中最大的一组。