乐趣区

关于深度学习:恒源云Teacher-Forcing训练小技巧来啦~

文章起源 | 恒源云社区

原文地址 | Teacher Forcing

原文作者 | Mathor


年底啦年底啦~要放假啦放假了~
不整大活,搞点小内容分享一下吧!

注释开始

本文次要介绍一下 Teacher Forcing 这个训练过程中的技巧

以 Seq2Seq 为例,在训练过程中,\(t_0 \)​ 时刻 Decoder 的输出是 ”<SOS>“,输入可能并不是正确的后果 ”the”,比方说输入了一个谬误的后果 ”like”。那么问题就来了,到了 \(t_1 \)时刻,应该持续以正确的单词 ”the” 作为输出,还是将上一时刻 \(t_0 \)的输入 ”like” 作为输出呢?

其实下面的问题,波及到两种齐全不同的训练形式

  1. 不论上一时刻输入是什么,以后时刻的输出总是规定好的,依照给定的 target 进行输出
  2. 以后时刻的输出和上一时刻的输入,是有关联的。具体来说就是,以后时刻的输出就是上一时刻的输入

如果要用比拟不太谨严的比喻来说,第一种训练形式相当于就是小明学习的时候旁边坐了一位学霸,当发现小明在做序列生成题目的时候,每一步都把上一步的正确答案给他偷看。那么小明当然只须要顺着上一步的答案的思路,计算出这一步的后果就行了。这种做法,比起本人每一步都瞎猜,当然可能无效的防止误差进一步放大,同时在学习后期还能通过学霸辅导的这种形式疾速学到很多的常识。

然而第一种训练形式存在以下的问题:

  1. 在解码的时候生成的字符都会受到 Ground-Truth 的束缚,心愿模型生成的后果都必须和参考句一一对应。这种束缚在训练过程中缩小模型发散,放慢收敛速度。然而一方面也扼杀了翻译多样性的可能
  2. 在这种束缚下,还会导致一种叫做 Overcorrect(矫枉过正) 的问题。例如:
  1. 待生成句的 Reference 为:“We should comply with the rule.”
  2. 模型在解码阶段中途预测进去:“We should abide”
  3. 然而依照规定,将第三个 ground-truth“comply”作为第四步的输出。那么模型依据以往学习的 pattern,有可能在第四步预测到的是“with”
  4. 模型最终的生成变成了“We should abide with”
  5. 事实上,“abide with”用法是不正确的,然而因为 ground-truth“comply”的烦扰,模型处于矫枉过正的状态,生成了不通顺的语句

如果应用第二种形式,其中只有一步预测错,前面的预测就会越来越跑偏,很难收敛

Teacher Forcing 正好介于上述两种训练方法之间。具体来说就是, 训练过程中的每个时刻,有肯定概率应用上一时刻的输入作为输出,也有肯定概率应用正确的 target 作为输出

能够参考上面的伪代码

teacher_forcing_ratio = 0.5
teacher_forcing = random.random() < teacher_forcing_ratio
if teacher_forcing:
    pass
else:
    pass
退出移动版