更强大的dropout——R-dropout
论文通过实验得出一种改进的正则化方法R-dropout,简单来说,它通过使用若干次(论文中使用了两次)dropout,定义新的损失函数。实验结果表明,尽管结构非常简单,但是却能很好的防止模型过拟合,进一步提高模型的正确率。
模型图如下: 注释 R-Drop 正则化方法的总体框架如图所示。 给定训练数据集
D
=
(
x
i
,
y
i
)
i
=
1
n
D={(x_i,y_i)}^n_{i=1}
D=(xi?,yi?)i=1n?,训练的目标是学习一个模型
P
w
(
y
∣
x
)
P ^w(y|x)
Pw(y∣x),其中
n
n
n 是训练样本的数量,
(
x
i
,
y
i
)
(x_i , y_i)
(xi?,yi?) 是标记数据对。
x
i
x_i
xi? 是输入数据,
y
i
y_i
yi? 是标签。 例如,在 NLP 中,
x
i
x_i
xi? 可以是机器翻译中的源语言句子,而 yi 是对应的目标语言句子。 在 CV 中,
x
i
x_i
xi? 可以是一张图像,
y
i
y_i
yi? 是分类标签。 映射函数的概率分布也表示为
P
w
(
y
∣
x
)
P^w(y|x)
Pw(y∣x),两个分布
P
1
P_1
P1? 和
P
2
P_2
P2? 之间的
K
u
l
l
b
a
c
k
?
L
e
i
b
l
e
r
(
K
L
)
Kullback-Leibler(KL)
Kullback?Leibler(KL) 散度用
D
K
L
(
P
1
∣
∣
P
2
)
DKL(P1||P2)
DKL(P1∣∣P2) 表示。
模型
论文提出的是上图中右侧模型。如图所示,同一数据经过了两次模型,使用了随机dropout后得到了两个不同的子模型,图中
P
1
(
y
∣
x
)
P_1(y|x)
P1?(y∣x)和
P
2
(
y
∣
x
)
P_2(y|x)
P2?(y∣x)为两个子模型的分布。
具体来说,给定每个训练步骤的输入数据
x
i
x_i
xi?,我们两次把
x
i
x_i
xi? 通过网络的前向传递。 因此,我们可以获得模型预测的两个分布,表示为
P
1
w
(
y
i
∣
x
i
)
P ^w _1 (y_i |x_i)
P1w?(yi?∣xi?) 和
P
2
w
(
y
i
∣
x
i
)
P ^w_ 2 (y_i |x_i)
P2w?(yi?∣xi?)。 如上所述,由于 dropout 算子随机丢弃模型中的单元,因此两次前向传递确实基于两个不同的子模型(是基于同一模型做的dropout,只是中间缺失的神经元不一样而已。如图右侧部分所示,输出预测
P
1
w
(
y
i
∣
x
i
)
P ^w _1 (y_i |x_i)
P1w?(yi?∣xi?)的左侧路径的每一层中丢弃的单元与输出分布
P
2
w
(
y
i
∣
x
i
)
P ^w _2 (y_i |x_i)
P2w?(yi?∣xi?) 的右侧路径的丢弃单元不同 )。 因此,对于相同的输入数据对
(
x
i
,
y
i
)
(xi , yi)
(xi,yi),
P
1
w
(
y
i
∣
x
i
)
P ^w _1 (y_i |x_i)
P1w?(yi?∣xi?)和
P
2
w
(
y
i
∣
x
i
)
P ^w _2(y_i |x_i)
P2w?(yi?∣xi?) 的分布是不同的。 然后,在此训练步骤中,我们的 R-Drop 方法尝试通过最小化同一样本的这两个输出分布之间的双向
K
u
l
l
b
a
c
k
?
L
e
i
b
l
e
r
(
K
L
)
Kullback-Leibler (KL)
Kullback?Leibler(KL) 散度来正则化模型预测。
分析
这里看到了知乎一位大神的分享,我也借鉴了他的思考。(这里贴出原帖子) Dropout的问题在于预测与训练的不一致性。这是非常直观的,上述链接中也给出了证明过程。而R-D通过增加一个正则项,来强化模型对Dropout的鲁棒性,使得不同的Dropout下模型的输出基本一致,因此能降低这种不一致性,促进“模型平均”与“权重平均”的相似性,从而使得简单关闭Dropout的效果等价于多Dropout模型融合的结果,提升模型最终性能。 原帖中还指出连续性的优点,这里就不展开了。
总的来说,R-D形式简洁,效果出色,是一个非常具有创新点的想法。但是针对R-D为什么可以做到如此出色的效果,以及如何引导模型找到合适的R-D也是非常值得探究的。
|