Я тренирую нейронную сеть в Matlab, и у меня возникают некоторые трудности с пониманием полученных результатов.
Например, Matlab представляет в nntraintool значения производительности и градиента, полученные на этапе обучения.
Если я хорошо это понял, нам нужна минимальная производительность, насколько это возможно, то есть значение производительности должно быть близко к параметру net.trainParam.goal = 0.001.
Но я не знаю, как интерпретировать значение градиента. Мы хотим наименьшее или наибольшее возможное значение?
Предположим, что сеть MLP со скрытым слоем с 20 нейронами (сценарий 1.a). Набор данных является
thyroid_dataset. Код следующий:
[InputData,TargetData] = thyroid_dataset;
net = newff(InputData,TargetData,20 ,{'logsig' 'tansig'},'traingd');
net.trainParam.epochs=20000;
net.trainParam.goal=0.001;
net.trainParam.lr=0.05;
net.divideParam.trainRatio=0.7;
net.divideParam.valRatio=0;
net.divideParam.testRatio=0.3;
[net,tr] = train(net,InputData,TargetData);
OutputData = net(InputData);
errors = gsubtract(TargetData, OutputData);
performance = perform(net, TargetData, OutputData);
Предположим также, что был добавлен новый скрытый слой с 20 нейронами, поэтому новый MLP (сценарий 1.b):
net = newff(InputData,TargetData,[20 20],{'logsig' 'logsig' 'tansig'},'traingd');
Затем я запустил оба сценария и получил следующие результаты:
Scenario 1.a
Gradient: 0.00111 / Performance: 0.00443 / Epoch: 20000
Scenario 1.b
Gradient: 0.00070 / Performance: 0.04460 / Epoch: 20000
Какой сценарий самый лучший?
Теперь давайте предположим, что алгоритмы обучения были изменены. В сценарии 2.a у нас есть Левенберг-Марквардт, а в сценарии 2.b - градиентный спуск с обратным распространением адаптивной скорости обучения.
Результаты были:
Scenario 2.a
Gradient: 3.14e-08 / Performance: 0.00205 / Epoch: 174
Scenario 2.b
Gradient: 3.08e-08 / Performance: 0.04580 / Epoch: 212
В сценариях 2.a и 2.b эпохи были намного меньше, чем в сценариях 1.a и 1.b. Кроме того, градиенты были также меньше.
Что это значит?
Сценарии 2.a и 2.b лучше, чем 1.a и 1.b? Или нет?
Спасибо!