【发布时间】:2018-12-03 10:41:01
【问题描述】:
我正在 Matlab 中训练一个神经网络,但在理解获得的结果时遇到了一些麻烦。
例如,Matlab 在 nntraintool 中呈现了在训练阶段获得的 Performance 和 Gradient 值。
如果我理解的很好,我们希望性能尽可能小,也就是性能值应该接近 net.trainParam.goal=0.001 参数。
但是,我不知道如何解释梯度值。我们想要最小或最大的可能值?
假设一个 MLP 网络具有一个包含 20 个神经元的隐藏层(场景 1.a)。数据集是 甲状腺数据集。代码如下:
[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 中,我们有 Levenberg-Marquardt,在场景 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?还是不行?
谢谢!
【问题讨论】:
标签: matlab neural-network gradient-descent