深度学习:带有 keras 的小型数据集:局部最小值

Posted

技术标签:

【中文标题】深度学习:带有 keras 的小型数据集:局部最小值【英文标题】:Deep Learning: small dataset with keras : local minima 【发布时间】:2017-12-24 13:58:42 【问题描述】:

对于我的论文,我正在运行一个 4 层的深度网络,用于序列到序列的翻译用例 150 x Conv(64,5) x GRU (100) x softmax 在最后阶段激活 loss='categorical_crossentropy'。

训练损失和准确率很快收敛到最佳状态 其中验证损失和准确性似乎停留在 val_acc 97 到 98.2 范围内,无法超过此范围。

我的模型是否过拟合?

已尝试层间的 dropout 为 0.2。

Output after drop-out
    Epoch 85/250
    [==============================] - 3s - loss: 0.0057 - acc: 0.9996 - val_loss: 0.2249 - val_acc: 0.9774
    Epoch 86/250
    [==============================] - 3s - loss: 0.0043 - acc: 0.9987 - val_loss: 0.2063 - val_acc: 0.9774
    Epoch 87/250
    [==============================] - 3s - loss: 0.0039 - acc: 0.9987 - val_loss: 0.2180 - val_acc: 0.9809
    Epoch 88/250
    [==============================] - 3s - loss: 0.0075 - acc: 0.9978 - val_loss: 0.2272 - val_acc: 0.9774
    Epoch 89/250
    [==============================] - 3s - loss: 0.0078 - acc: 0.9974 - val_loss: 0.2265 - val_acc: 0.9774
    Epoch 90/250
    [==============================] - 3s - loss: 0.0027 - acc: 0.9996 - val_loss: 0.2212 - val_acc: 0.9809
    Epoch 91/250
    [==============================] - 3s - loss: 3.2185e-04 - acc: 1.0000 - val_loss: 0.2190 - val_acc: 0.9809
    Epoch 92/250
    [==============================] - 3s - loss: 0.0020 - acc: 0.9991 - val_loss: 0.2239 - val_acc: 0.9792
    Epoch 93/250
    [==============================] - 3s - loss: 0.0047 - acc: 0.9987 - val_loss: 0.2163 - val_acc: 0.9809
    Epoch 94/250
    [==============================] - 3s - loss: 2.1863e-04 - acc: 1.0000 - val_loss: 0.2190 - val_acc: 0.9809
    Epoch 95/250
    [==============================] - 3s - loss: 0.0011 - acc: 0.9996 - val_loss: 0.2190 - val_acc: 0.9809
    Epoch 96/250
    [==============================] - 3s - loss: 0.0040 - acc: 0.9987 - val_loss: 0.2289 - val_acc: 0.9792
    Epoch 97/250
    [==============================] - 3s - loss: 2.9621e-04 - acc: 1.0000 - val_loss: 0.2360 - val_acc: 0.9792
    Epoch 98/250
    [==============================] - 3s - loss: 4.3776e-04 - acc: 1.0000 - val_loss: 0.2437 - val_acc: 0.9774

【问题讨论】:

【参考方案1】:

您提出的案例非常复杂。如果您的情况实际上发生了过度拟合,为了回答您的问题,您需要回答两个问题:

    在验证集上获得的结果令人满意吗?- 验证集的主要目的是让您了解当新数据到达时会发生什么。如果您对验证集的准确性感到满意,那么您应该认为您的模型没有过度拟合。 我应该担心您的模型在训练集上的极高准确度吗?- 您可能很容易注意到您的模型在训练集上几乎是完美的。这可能意味着它背诵了一些模式。通常——你的数据中总是有一些噪音——你的模型在数据上的完美属性——意味着它可能使用了它学习偏差的部分能力。为了测试这一点,我通常更喜欢测试分数最低的正样本或分数最高的负样本 - 因为异常值通常位于这两组中(模型正在努力将它们推高/低于0.5阈值)。

所以 - 在检查了这两个问题之后,如果您的模型过度拟合,您可能会得到答案。您呈现的行为非常好 - 背后的实际原因可能是验证集中的模式很少在训练集中没有正确覆盖。但在设计机器学习解决方案时,您应该始终考虑到这一点。

【讨论】:

花时间检查模型上的不同排列。您对网络正在使用部分学习能力的观察是正确的。尝试了各种模型容量减少百分比来验证。在容量较低的情况下,训练 acc 和验证准确度会同步移动。您对具有独特模式的验证集的第二次观察也是正确的,需要时间手动验证两个数据集【参考方案2】:

不,这不是过度拟合。过度拟合仅在训练损失低且验证损失高时发生。这也可以看作是训练和验证准确度之间的巨大差异(在分类的情况下)。

【讨论】:

我们可以使用哪些参数来检查序列到序列用例中的过度拟合?

以上是关于深度学习:带有 keras 的小型数据集:局部最小值的主要内容,如果未能解决你的问题,请参考以下文章

Keras深度学习实战——使用fastText模型构建单词向量

Keras深度学习实战——神经网络性能优化技术详解

Keras深度学习实战(40)——音频生成

带你测试对比深度学习框架!TensorFlow,Keras,PyTorch...哪家强?(附数据集)

Keras深度学习实战(37)——手写文字识别

Keras深度学习实战——车辆转弯角度预测