设置 Encog EarlyStoppingStrategy 参数的正确方法
Proper way to set Encog EarlyStoppingStrategy parameters
我目前正在使用 Encog 3.3(Java 实现)以使用 BPROP 和 RPROP(在两个不同的场景中)训练 2^N-10-10-2 MLP 网络。
我已将我的数据集分成 40/20/40 (training/validation/test) 个随机子集。
因为我有一个验证集,所以我可以将 Encog 的 EarlyStoppingStrategy 添加到我的训练中。
碰巧我对如何设置这3个参数有点困惑:
- theStripLength(当前设置为 trainingSet.size())
- theAlpha(当前设置为 1)
- theMinEfficiency(当前设置为 0.01)
该方法经常卡在局部最小值处。
训练方式配置如下:
// configure learning rule (backpropagation)
Backpropagation train = new Backpropagation(network, trainingSet, 1e-6, 0.9);
// configure training strategy
EarlyStoppingStrategy early = new EarlyStoppingStrategy(validationSet, trainingSet, trainingSet.size(), 1, 0.01);
train.addStrategy(early);
有proper/recommended设置这些参数的方法吗?
如果您的训练卡在局部最小值,我认为您的问题不在于 EarlyStoppingStrategy。相反,您的问题与反向传播算法的动量有关。
EarlyStoppingStrategy 在交叉验证错误增加时停止训练,这是您不希望随着训练错误减少而发生的,因为这意味着您 "overtraining"。但是,EarlyStoppingStrategy 与减少训练过程的全局训练误差无关。
很难为反向传播算法同时设置 "Learning Rate" 和动量。
我建议您先尝试ResilientPropagation算法,因为它更容易使用,并且不需要您设置这些参数。您也可以考虑使用 QuickPropagation 训练算法。
如果这不是一个选项,那么我建议您使用 "Smart Momentum" 反向传播,如下所示:
Backpropagation train = new Backpropagation(network, trainingSet);
train.addStrategy(new SmartMomentum());
SmartMomentum 使用前一次训练迭代的误差梯度以及当前训练迭代的误差梯度来帮助训练过程避免局部最小值。
如果您仍然无法将全局误差降低到所需的水平,您也可以尝试添加 SmartLearningRate 策略,发现 here.
我目前正在使用 Encog 3.3(Java 实现)以使用 BPROP 和 RPROP(在两个不同的场景中)训练 2^N-10-10-2 MLP 网络。
我已将我的数据集分成 40/20/40 (training/validation/test) 个随机子集。
因为我有一个验证集,所以我可以将 Encog 的 EarlyStoppingStrategy 添加到我的训练中。
碰巧我对如何设置这3个参数有点困惑:
- theStripLength(当前设置为 trainingSet.size())
- theAlpha(当前设置为 1)
- theMinEfficiency(当前设置为 0.01)
该方法经常卡在局部最小值处。
训练方式配置如下:
// configure learning rule (backpropagation)
Backpropagation train = new Backpropagation(network, trainingSet, 1e-6, 0.9);
// configure training strategy
EarlyStoppingStrategy early = new EarlyStoppingStrategy(validationSet, trainingSet, trainingSet.size(), 1, 0.01);
train.addStrategy(early);
有proper/recommended设置这些参数的方法吗?
如果您的训练卡在局部最小值,我认为您的问题不在于 EarlyStoppingStrategy。相反,您的问题与反向传播算法的动量有关。
EarlyStoppingStrategy 在交叉验证错误增加时停止训练,这是您不希望随着训练错误减少而发生的,因为这意味着您 "overtraining"。但是,EarlyStoppingStrategy 与减少训练过程的全局训练误差无关。
很难为反向传播算法同时设置 "Learning Rate" 和动量。
我建议您先尝试ResilientPropagation算法,因为它更容易使用,并且不需要您设置这些参数。您也可以考虑使用 QuickPropagation 训练算法。
如果这不是一个选项,那么我建议您使用 "Smart Momentum" 反向传播,如下所示:
Backpropagation train = new Backpropagation(network, trainingSet);
train.addStrategy(new SmartMomentum());
SmartMomentum 使用前一次训练迭代的误差梯度以及当前训练迭代的误差梯度来帮助训练过程避免局部最小值。
如果您仍然无法将全局误差降低到所需的水平,您也可以尝试添加 SmartLearningRate 策略,发现 here.