通过调整Java中的输入参数来最小化迭代次数

时间:2016-03-11 08:39:14

标签: java nonlinear-optimization minimization

我受到这个问题的启发XOR Neural Network in Java 简而言之,训练XOR神经网络并且完成训练所需的迭代次数取决于七个参数(α,γ3_min_cutoff,gamma3_max_cutoff,gamma4_min_cutoff,gamma4_max_cutoff,gamma4_min_cutoff,gamma4_max_cutoff)。我想通过调整这些参数来最小化训练所需的迭代次数。

所以,我想从

重写程序
private static double alpha=0.1, g3min=0.2, g3max=0.8; 
int iteration= 0;  
loop {
    do_something;  
    iteration++; 
    if (error < threshold){break}
    }
System.out.println( "iterations: " + iteration) 

for (double alpha = 0.01; alpha < 10; alpha+=0.01){
    for (double g3min = 0.01; g3min < 0.4; g3min += 0.01){   
        //Add five more loops to optimize other parameters  
        int iteration = 1; 
        loop {
            do_something;  
            iteration++; 
            if (error < threshold){break}
            }
        System.out.println( inputs ); 
        //number of iterations, alpha, cutoffs,etc  
            //Close five more loops here
        }
    } 

但是这种强制方法效率不高。给定7个参数和每次计算的数百次迭代,即使每个参数有10个点,也可以进行数十亿次操作。非线性拟合应该做,但那些通常需要偏导数,在这种情况下我不会有。

是否有用于此类优化的Java包?

提前谢谢你, 斯泰潘

1 个答案:

答案 0 :(得分:0)

您有一些选择 - 取决于管理error参数的公式。

  1. 在参数空间中选择一个点并使用迭代过程走向最小值。基本上,为每个参数添加一个增量并选择最大的减少错误 - rince - repeat。
  2. 选择每个pareameter并在其限制之间执行二进制搜索,以找到它的最小值。仅在参数的效果为线性时才有效。
  3. 使用某种形式的Operations-Research技术解决系统问题,以追踪最低限度。