我正在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?还是不?
谢谢!
答案 0 :(得分:0)
用于训练神经网络的梯度方法是基于梯度的。
这是什么意思?这些方法使用梯度在解空间中移动。当它们在解空间中移动时,它们的值将改变,因为解空间中每个点的梯度都不同。
梯度与性能之间有任何关系。