2015-12-08 3 views
0

В настоящее время я использую Encog 3.3 (реализация Java) для обучения сети 2^N-10-10-2 MLP с помощью BPROP и RPROP (в двух отдельных сценариях).Правильный способ установки параметров Encog EarlyStoppingStrategy

Я разделил свои данные в 40/20/40 (тренировка/проверка/тестирование) рандомизированных подмножеств.

Поскольку у меня есть набор валидаций, я могу добавить EarlyStoppingStrategy от Encog к моей тренировке.

Случается, что я немного запутался о том, как установить эти 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); 

Есть правильный/рекомендуемый способ задать эти параметры?

ответ

1

Если ваше обучение застряло в локальных минимумах, я не думаю, что ваша проблема связана с раннейStoppingStrategy. Вместо этого ваша проблема связана с импульсом алгоритма обратного распространения.

EarlyStoppingStrategy останавливает тренировку, когда увеличивается ошибка проверки перекрестка, которую вы не хотите, так как ошибка обучения уменьшается, так как это означает, что вы «перетренированы». Тем не менее, EarlyStoppingStrategy не имеет ничего общего с уменьшением глобальной ошибки обучения вашего учебного процесса.

Очень сложно установить как «скорость обучения», так и импульс для алгоритма обратного распространения.

Я предлагаю вам сначала попробовать алгоритм ResilientPropagation, поскольку он проще в использовании и не требует установки этих параметров. Вы также можете рассмотреть алгоритм обучения QuickPropagation.

Если это не является вариантами, то я хотел бы предложить вам использовать «Smart Momentum» с обратным распространением, как показано ниже:

Backpropagation train = new Backpropagation(network, trainingSet); 
train.AddStrategy(new SmartMomentum()); 

SmartMomentum использует градиент ошибки от предыдущей тренировочной итерации, а также ошибки градиент от текущей итерации обучения, чтобы помочь процессу обучения избежать локальных минимумов.

Если у вас по-прежнему возникают проблемы с получением глобальной ошибки до нужного уровня, вы также можете попробовать добавить стратегию SmartLearningRate.