Pytorch 测试损失增加而准确度增加

Pytorch Test Loss increases while accuracy increases

我正在尝试实施 使用 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 来显示,但行为与其他任务相同。

你知道这种行为吗?

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

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

过度拟合:当您的模型有足够的能力来适应您的训练数据的特殊性时,它不会泛化到来自同一分布的新数据。

欠拟合:当你的模型没有足够的容量来拟合你的训练数据时(你不能使你的训练损失"close"为零)。

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