我正在尝试使用Pytorch和BabI数据集实现 End to End Memory Network。 网络架构是:
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来显示,但行为与其他任务相同。
你对这种行为有什么看法吗?
答案 0 :(得分:2)
当训练损失继续减少但是测试损失开始增加时,那就是您开始overfit的那一刻,这意味着您的网络权重适合您正在训练的数据越来越好,但这额外拟合不会推广到新的看不见的数据。这意味着你应该停止训练。
你在120个维度中嵌入80个单词,所以你根本就没有信息瓶颈,你只有80个单词的维度太多了。你有这么多的免费参数,你可以适应任何东西,甚至噪音。尝试改变120为10,可能你不会再适合。如果你尝试使用2个维度而不是120个维度,那么你可能会不合适。
过度拟合:当您的模型具有足够的容量来适应您的训练数据的特殊性时,这些特征不会推广到来自同一分布的新数据。
适合不足:当您的模型没有足够的容量来适应您的训练数据时(您无法将训练损失"关闭"为零)。
在您的情况下,我猜测您的模型对您的训练数据过于自信(输出概率太接近1或0),这在训练数据的情况下是合理的,但对您的测试数据过于自信(或您没有训练的任何其他数据)。