Pytorch 测试损耗增加,同时准确性提高



我正在尝试实现 使用Pytorch和BabI数据集的端到端内存网络。 网络架构为:

MemN2N (
(embedding_A): Embedding(85, 120, padding_idx=0)
(embedding_B): Embedding(85, 120, padding_idx=0)
(embedding_C): Embedding(85, 120, padding_idx=0)
(match): Softmax ()
)

85 是词汇大小,120 是嵌入大小。 损失函数是交叉熵,优化器是RmsProp。 结果是

Epoch    Train Loss  Test Loss  TrainAcc TestAcc
10       0.608         11.213       1.0     0.99
20       0.027         11.193       1.0     0.99
30       0.0017        11.740       1.0     0.99
40       0.0006        12.190       1.0     0.99
50       5.597e-05     12.319       1.0     0.99
60       3.366-05      12.379       1.0     0.99
70       2.72e-05      12.361       1.0     0.99
80       2.64e-05      12.333       1.0     0.99
90       2.63e-05      12.329       1.0     0.99
100      2.63e-05      12.329       1.0     0.99
110      2.63e-05      12.329       1.0     0.99
120      2.63e-05      12.329       1.0     0.99
Final TrainAcc TestAcc
1.0     0.999

我知道准确性很好,但我想知道测试损失的行为。 由于训练损失减少,因此测试损失增加。 每个损失值的计算是相同的。它不应该也减少吗?我使用任务 1 进行显示,但行为与其他任务相同。

你对这种行为有任何想法吗?

当训练损失继续减少但测试损失开始增加时,也就是你开始过度拟合的那一刻,这意味着你的网络权重越来越适合你正在训练的数据,但这种额外的拟合不会推广到新的看不见的数据。这意味着这是您应该停止训练的时刻。

你在120个维度上嵌入了80个单词,所以你根本没有信息瓶颈,你只有80个单词的维度太多了。你有这么多的自由参数,你可以适应任何东西,甚至是噪音。尝试将 120 更改为 10,可能您不会再过度适合了。如果您尝试使用 2 维而不是 120 维,那么您可能会拟合不足。

过拟合:当您的模型具有足够的容量来拟合训练数据的特殊性时,该特性不会泛化为来自同一分布的新数据。

欠拟合:当您的模型没有足够的容量来拟合您的训练数据时(您无法使训练损失"接近"于零)。

在您的情况下,我猜测您的模型对训练数据(输出概率太接近 1 或 0)变得过于自信,这在训练数据的情况下是合理的,但对您的测试数据(或任何其他您没有训练的数据)来说太有信心了。

最新更新