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

Minimization of number of itererations by adjusting input parameters in Java

我被这个问题启发了XOR Neural Network in Java 简而言之,训练一个 XOR 神经网络,完成训练所需的迭代次数取决于七个参数 (alpha, gamma3_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 包?

提前谢谢你, 斯捷潘

您有一些选择 - 取决于控制 error 参数的方程式。

  1. 在参数 space 中选择一个点并使用迭代过程走向最小值。从本质上讲,为每个参数添加一个增量,然后选择最能减少误差的那个 - rince - 重复。
  2. 选择每个参数并在其限制之间执行二进制搜索以找到它的最小值。仅当参数的效果是线性的时才有效。
  3. 使用某种形式的 Operations-Research 技术求解系统以追踪最小值。