我正在构建一个用于时间序列预测(回归)的 LSTM 神经网络,并且我正在将自定义损失函数整合到训练中。我试图确定哪个成本函数(3 个成本函数)给出了“最佳”模型,换句话说,试图定义“最佳”的含义。
3 个成本函数产生的结果都在不同的尺度上,另外 2 个产生正数,而最后一个产生负数。
我有 5 个数据集,每个数据集都训练一个模型。损失 3 次,这给了我 3 * 5 = 15 次损失。在验证数据上,结果如下所示。
| loss1 | loss2 | loss3
==================================
data1 | 1.106 | 5.074 | -1.872
==================================
data2 | 1.067 | 2.390 | -1.903
==================================
data3 | 0.823 | 4.724 | -1.892
==================================
data4 | 1.157 | 4.809 | -2.233
==================================
data5 | 0.583 | 2.854 | -2.120
==================================
Average | x | x | x
==================================
我的目标是以某种方式比较训练过的loss1模型与训练过的模型loss2预测样本数据的有效性。
我尝试过的一个程序是标准化每个损失:(loss - mean(loss)) / std(loss)跨数据集,然后对每个损失的数据集取平均值,并检查哪个是最小的。但是,对于 5 的小样本量,我不知道这是否有效。标准化后的平均值可以是简单平均,也可以是几何平均,也可以是调和平均。如果我将此方法应用于上表,我会得到这些结果
| loss1 | loss2 | loss3
========================================================
Simple Average | -3.9e-16 | -3.9e-16 | -9.7e-16
========================================================
Geometric Average | 0.82 | 0.93 | 0.90
========================================================
Harmonic Average | 2.69 | 2.36 | 2.55
========================================================
我们可以看到,根据选择的平均值类型,不同的损失被认为是最好的。简单平均loss3是最好的,几何loss1是最好的,谐波loss2是最好的……有点令人困惑。
这是比较不同损失函数的模型性能的有效方法,还是有另一种更适合确定“最佳”模型的方法?
另一种方法是查看跨模型的准确度指标(所有损失和数据集的准确度指标相同)并检查哪个损失产生最高准确度。