【问题标题】:Can I provide multiple targets to a seq2seq model?我可以为 seq2seq 模型提供多个目标吗?
【发布时间】:2019-08-29 02:16:11
【问题描述】:

我正在 MSR-VTT 数据集上制作视频字幕

在这个数据集中,我有 10,000 个视频,每个视频都有 20 个不同的字幕

我的模型由一个 seq2seq RNN 组成。编码器的输入是视频特征,解码器的输入是嵌入的目标字幕,解码器的输出是预测的字幕。

我想知道多次使用带有不同字幕的相同视频是否有用。


由于找不到明确的信息,我尝试对其进行基准测试

基准测试:

模型 1:每个视频一个字幕

我在 1108 个运动视频上训练了它,批量大小为 5,超过 60 个 epoch。此配置每个 epoch 大约需要 211 秒。

Epoch 1/60 ; Batch loss: 5.185806 ; Batch accuracy: 14.67% ; Test accuracy: 17.64%
Epoch 2/60 ; Batch loss: 4.453338 ; Batch accuracy: 18.51% ; Test accuracy: 20.15%
Epoch 3/60 ; Batch loss: 3.992785 ; Batch accuracy: 21.82% ; Test accuracy: 54.74%
...
Epoch 10/60 ; Batch loss: 2.388662 ; Batch accuracy: 59.83% ; Test accuracy: 58.30%
...
Epoch 20/60 ; Batch loss: 1.228056 ; Batch accuracy: 69.62% ; Test accuracy: 52.13%
...
Epoch 30/60 ; Batch loss: 0.739343; Batch accuracy: 84.27% ; Test accuracy: 51.37%
...
Epoch 40/60 ; Batch loss: 0.563297 ; Batch accuracy: 85.16% ; Test accuracy: 48.61%
...
Epoch 50/60 ; Batch loss: 0.452868 ; Batch accuracy: 87.68% ; Test accuracy: 56.11%
...
Epoch 60/60 ; Batch loss: 0.372100 ; Batch accuracy: 91.29% ; Test accuracy: 57.51%

模型 2:每个视频 12 个字幕

然后我训练了 相同 1108 个运动视频,批量大小为 64。
此配置每个 epoch 大约需要 470 秒。

由于每个视频都有 12 个字幕,因此我的数据集中的样本总数为 1108*12。
这就是我采用这个批量大小(64 ~= 12*old_batch_size)的原因。所以这两个模型启动优化器的次数相同。

Epoch 1/60 ; Batch loss: 5.356736 ; Batch accuracy: 09.00% ; Test accuracy: 20.15%
Epoch 2/60 ; Batch loss: 4.435441 ; Batch accuracy: 14.14% ; Test accuracy: 57.79%
Epoch 3/60 ; Batch loss: 4.070400 ; Batch accuracy: 70.55% ; Test accuracy: 62.52%
...
Epoch 10/60 ; Batch loss: 2.998837 ; Batch accuracy: 74.25% ; Test accuracy: 68.07%
...
Epoch 20/60 ; Batch loss: 2.253024 ; Batch accuracy: 78.94% ; Test accuracy: 65.48%
...
Epoch 30/60 ; Batch loss: 1.805156 ; Batch accuracy: 79.78% ; Test accuracy: 62.09%
...
Epoch 40/60 ; Batch loss: 1.449406 ; Batch accuracy: 82.08% ; Test accuracy: 61.10%
...
Epoch 50/60 ; Batch loss: 1.180308 ; Batch accuracy: 86.08% ; Test accuracy: 65.35%
...
Epoch 60/60 ; Batch loss: 0.989979 ; Batch accuracy: 88.45% ; Test accuracy: 63.45%

这是我的数据集的直观表示:


我如何解释这个结果?

当我手动查看测试预测时,模型 2 的预测看起来比模型 1 的预测更准确。

此外,我为模型 2 使用了 64 的批量大小。这意味着我可以通过选择更小的批量大小来获得更好的结果。看来我无法为模式 1 提供更好的训练方法,因为批量大小已经非常低了

另一方面,模型 1 有更好的损失和训练准确度结果...

我应该得出什么结论?
Model 2 是否会不断用新的字幕覆盖之前训练的字幕,而不是添加新的可能字幕?

【问题讨论】:

    标签: tensorflow deep-learning recurrent-neural-network seq2seq


    【解决方案1】:

    我想知道多次使用具有不同标题的相同视频是否有用。

    我认为这是肯定的。它可以解释为视频到字幕不是一对一映射。因此,权重会更多地根据视频上下文进行训练。

    由于视频到字幕不是一对一映射的。因此,即使神经网络无限密集,它也应该永远不会达到 100% 的训练准确度(或损失为零),从而显着减少过拟合。

    当我手动查看测试预测时,模型 2 的预测看起来比模型 1 的预测更准确。

    不错!在这里也可以看到:

    Model1; Batch accuracy: 91.29% ; Test accuracy: 57.51%
    Model2; Batch accuracy: 88.45% ; Test accuracy: 63.45%
            Increasing Generalization!!
    

    此外,我为模型 2 使用了 64 的批量大小。这意味着我可以通过选择更小的批量大小来获得更好的结果。看来我无法为模式 1 提供更好的训练方法,因为批量大小已经非常小了。

    我可能不是在这里评论 batch_size 值的合适人选,但再增加一点应该值得一试。

    batch_size 是在将先前的知识向当前批次移动(尝试根据学习率在一段时间后向不同方向收敛)与尝试一次又一次地学习相似知识(几乎相同方向收敛)之间的平衡。

    请记住,还有很多其他方法可以改善结果。

    另一方面,模型 1 具有更好的损失和训练准确度结果... 我应该得出什么结论? ?

    训练准确度结果和损失值说明了模型在训练数据上的表现,而不是在验证/测试数据上的表现。换句话说,损失值非常小可能意味着记忆。

    Model 2 是否会不断用新的字幕覆盖之前训练的字幕,而不是添加新的可能字幕。

    取决于如何将数据拆分为批次。 是同一批次中同一视频的多个字幕还是分布在多个批次中。

    请记住,模型 2 有多个标题,这可能是泛化背后的主要因素。从而增加训练损失值。

    谢谢!

    【讨论】:

    • 非常感谢您的回答。那么在 Model 1 中损失更少并不意味着我的训练更有效率?我目前在模型 2 中打乱数据,因此,多个字幕不应该都在同一个批次中。
    • 我可能错过了。所以我的一个快速问题是,你是如何计算损失的,是训练损失还是验证损失?这可能取决于,仍然不完全。
    • 我的帖子显示了训练损失,但我会更新以显示验证损失。对于损失计算,我使用交叉熵的相反平均值。 (tf.contrib.seq2seq.sequence_loss 使用掩码)
    猜你喜欢
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 2021-05-11
    相关资源
    最近更新 更多