Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
M
mtbookv2
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
NiuTrans
mtbookv2
Commits
27781c06
Commit
27781c06
authored
Jan 25, 2021
by
单韦乔
Browse files
Options
Browse Files
Download
Plain Diff
合并分支 'shanweiqiao' 到 'caorunzhe'
Shanweiqiao 查看合并请求
!978
parents
d4097cb5
92748b33
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
36 行增加
和
41 行删除
+36
-41
Chapter13/chapter13.tex
+36
-41
没有找到文件。
Chapter13/chapter13.tex
查看文件 @
27781c06
...
...
@@ -76,14 +76,14 @@
\parinterval
但是字符级翻译也面临着新的问题
\ \dash\
使用字符增加了系统捕捉不同语言单元之间搭配的难度。假设平均一个单词由5个字符组成,系统所处理的序列长度便增大5倍。这使得具有独立意义的不同语言单元需要跨越更远的距离才能产生联系。此外,基于字符的方法也破坏了单词中天然存在的构词规律,或者说破坏了单词内字符的局部依赖。比如,英语单词“telephone”中的“tele”和“phone”都是有具体意义的词缀,但是如果把它们打散为字符就失去了这些含义。
\parinterval
那么有没有一种方式能够兼顾基于单词和基于字符方法的优点呢?常用的手段包括两种,一种是采用字词融合的方式构建词表,将未知单词转换为字符的序列并通过特殊的标记将其与普通的单词区分开来
\upcite
{
luong2016acl
_
hybrid
}
。而另一种方式是将单词切分为
{
\small\bfnew
{
子词
}}
\index
{
子词
}
(Sub-word)
\index
{
Sub-word
}
,它是介于单词和字符中间的一种语言单元表示形式。比如,将英语单词“doing”切分为“do”+“ing”。对于形态学丰富的语言来说,子词体现了一种具有独立意义的构词基本单元。如图
\ref
{
fig:13-
2
}
,子词“do”和“new”可以用于组成其他不同形态的单词。
\parinterval
那么有没有一种方式能够兼顾基于单词和基于字符方法的优点呢?常用的手段包括两种,一种是采用字词融合的方式构建词表,将未知单词转换为字符的序列并通过特殊的标记将其与普通的单词区分开来
\upcite
{
luong2016acl
_
hybrid
}
。而另一种方式是将单词切分为
{
\small\bfnew
{
子词
}}
\index
{
子词
}
(Sub-word)
\index
{
Sub-word
}
,它是介于单词和字符中间的一种语言单元表示形式。比如,将英语单词“doing”切分为“do”+“ing”。对于形态学丰富的语言来说,子词体现了一种具有独立意义的构词基本单元。如图
\ref
{
fig:13-
1
}
,子词“do”和“new”可以用于组成其他不同形态的单词。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter13/Figures/figure-word-root
}
\caption
{
不同单词共享相同的子词(前缀)
}
\label
{
fig:13-
2
}
\label
{
fig:13-
1
}
\end{figure}
%----------------------------------------------
...
...
@@ -109,14 +109,14 @@
\parinterval
字节对编码或双字节编码(BPE)是一种常用的子词词表构建方法。BPE方法最早用于数据压缩,该方法将数据中常见的连续字符串替换为一个不存在的字符,之后通过构建一个替换关系的对应表,对压缩后的数据进行还原
\upcite
{
Gage1994ANA
}
。机器翻译借用了这种思想,把子词切分看作是学习对自然语言句子进行压缩编码表示的问题
\upcite
{
DBLP:conf/acl/SennrichHB16a
}
。其目的是,保证编码(即子词切分)后的结果占用的字节尽可能少。这样,子词单元会尽可能被不同单词复用,同时又不会因为使用过小的单元造成子词切分后的序列过长。
\parinterval
使用BPE算法进行子词切分包含两个步骤。首先,通过统计的方法构造符号合并表
,具体的方式为:先对分过词的文本进行统计,得到词表和词频,同时将词表中的单词分割为字符表示;其次统计词表中所有出现的二元组的频次,选择当前频次最高的二元组加入符号合并表,并将所有词表中出现的该二元组合并为一个单元;不断地重复上述过程,直到合并表的大小达到预先设定的大小,或者无法继续合并。图
\ref
{
fig:13-4
}
给出了一个使用字符合并表对单词进行子词切分的实例。红色单元为每次合并后得到的新符号,直至无法合并,或遍历结束,得到最终的合并结果。其中每一个单元为一个子词。
\parinterval
使用BPE算法进行子词切分包含两个步骤。首先,通过统计的方法构造符号合并表
(见图
\ref
{
fig:13-2
}
),具体的方式为:先对分过词的文本进行统计,得到词表和词频,同时将词表中的单词分割为字符表示;其次统计词表中所有出现的二元组的频次,选择当前频次最高的二元组加入符号合并表,并将所有词表中出现的该二元组合并为一个单元;不断地重复上述过程,直到合并表的大小达到预先设定的大小,或者无法继续合并。图
\ref
{
fig:13-3
}
给出了一个使用字符合并表对单词进行子词切分的实例。红色单元为每次合并后得到的新符号,直至无法合并,或遍历结束,得到最终的合并结果。其中每一个单元为一个子词。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter13/Figures/figure-bpe
}
\caption
{
BPE算法中符号合并表的生成过程
}
\label
{
fig:13-
3
}
\label
{
fig:13-
2
}
\end{figure}
%----------------------------------------------
...
...
@@ -125,7 +125,7 @@
\centering
\input
{
./Chapter13/Figures/figure-unk-of-bpe
}
\caption
{
BPE中的子词切分过程
}
\label
{
fig:13-
4
}
\label
{
fig:13-
3
}
\end{figure}
%----------------------------------------------
...
...
@@ -182,14 +182,14 @@ y &=& f(x)
\vspace
{
0.5em
}
\end{itemize}
\parinterval
以上问题体现出来的现象就是过拟合。因为训练数据有限且存在噪声,因此模型参数会过分拟合噪声数据。而且,这样的模型参数又与真实(理想)的模型参数相差很远。正则化正是针对这个问题。有时候,正则化也被称作
{
\small\bfnew
{
降噪
}}
\index
{
降噪
}
(Denoising)
\index
{
Denoising
}
,虽然它的出发点并不只是去除噪声的影响。图
\ref
{
fig:13-
11
}
对比了不同函数对二维空间中一些数据点的拟合情况。在过拟合现象中,函数可以完美的拟合所有的数据点,即使有些数据点是噪声。
\parinterval
以上问题体现出来的现象就是过拟合。因为训练数据有限且存在噪声,因此模型参数会过分拟合噪声数据。而且,这样的模型参数又与真实(理想)的模型参数相差很远。正则化正是针对这个问题。有时候,正则化也被称作
{
\small\bfnew
{
降噪
}}
\index
{
降噪
}
(Denoising)
\index
{
Denoising
}
,虽然它的出发点并不只是去除噪声的影响。图
\ref
{
fig:13-
4
}
对比了不同函数对二维空间中一些数据点的拟合情况。在过拟合现象中,函数可以完美的拟合所有的数据点,即使有些数据点是噪声。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter13/Figures/figure-underfitting-vs-overfitting
}
\caption
{
欠拟合 vs 过拟合
}
\label
{
fig:13-
11
}
\label
{
fig:13-
4
}
\end{figure}
%----------------------------------------------
...
...
@@ -245,14 +245,14 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\
\noindent
这里,
$
\alpha
$
表示一个系数,用于控制分布
$
\mathbi
{
q
}$
的重要性,
$
\mathbi
{
y
}_{
j
}^{
ls
}$
表示使用标签平滑后的学习目标。
\parinterval
标签平滑实际上定义了一种“软”标签,使得所有标签都可以分到一些概率。一方面可以缓解数据中噪声的影响,另一方面目标分布会更合理(显然,真实的分布不应该是One-hot分布)。图
\ref
{
fig:13-
6
}
展示了标签平滑前后的损失函数计算结果的对比。
\parinterval
标签平滑实际上定义了一种“软”标签,使得所有标签都可以分到一些概率。一方面可以缓解数据中噪声的影响,另一方面目标分布会更合理(显然,真实的分布不应该是One-hot分布)。图
\ref
{
fig:13-
5
}
展示了标签平滑前后的损失函数计算结果的对比。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter13/Figures/figure-label-smoothing
}
\caption
{
不使用标签平滑 vs 使用标签平滑
}
\label
{
fig:13-
6
}
\label
{
fig:13-
5
}
\end{figure}
%----------------------------------------------
...
...
@@ -264,29 +264,29 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\
\subsection
{
Dropout
}
\parinterval
神经机器翻译模型是一种典型的多层神经网络模型。每一层都包含若干神经元,负责接收前一层所有神经元的输出,之后进行诸如乘法、加法等变换操作,并有选择地使用非线性的激活函数,最终得到当前层每个神经元的输出。从模型最终预测的角度看,每个神经元都在参与最终的预测。理想的情况下,研究人员希望每个神经元都能相互独立的做出“贡献”。这样的模型会更加健壮,因为即使一部分神经元不能正常工作,其它神经元仍然可以独立做出合理的预测。但是,随着每一层神经元数量的增加以及网络结构的复杂化,神经元之间会出现
{
\small\bfnew
{
相互适应
}}
\index
{
相互适应
}
(Co-
Adaptation)
\index
{
Co-A
daptation
}
的现象。所谓相互适应是指,一个神经元对输出的贡献与同一层其它神经元的行为是相关的,也就是说这个神经元已经适应到它周围的“环境”中。
\parinterval
神经机器翻译模型是一种典型的多层神经网络模型。每一层都包含若干神经元,负责接收前一层所有神经元的输出,之后进行诸如乘法、加法等变换操作,并有选择地使用非线性的激活函数,最终得到当前层每个神经元的输出。从模型最终预测的角度看,每个神经元都在参与最终的预测。理想的情况下,研究人员希望每个神经元都能相互独立的做出“贡献”。这样的模型会更加健壮,因为即使一部分神经元不能正常工作,其它神经元仍然可以独立做出合理的预测。但是,随着每一层神经元数量的增加以及网络结构的复杂化,神经元之间会出现
{
\small\bfnew
{
相互适应
}}
\index
{
相互适应
}
(Co-
adaptation)
\index
{
Co-a
daptation
}
的现象。所谓相互适应是指,一个神经元对输出的贡献与同一层其它神经元的行为是相关的,也就是说这个神经元已经适应到它周围的“环境”中。
\parinterval
相互适应的好处在于神经网络可以处理更加复杂的问题,因为联合使用两个神经元要比单独使用每个神经元的表示能力强。这也类似于传统机器学习任务中往往会设计一些高阶特征,比如自然语言序列标注中对2-gram和3-gram的使用。不过另一方面,相互适应会导致模型变得更加“脆弱”。因为相互适应的神经元可以更好的描述训练数据中的现象,但是在测试数据上,由于很多现象是未见的,细微的扰动会导致神经元无法适应。具体体现出来就是过拟合问题。
\parinterval
Dropout也是解决过拟合问题的一种常用方法
\upcite
{
DBLP:journals/corr/abs-1207-0580
}
。该方法很简单,在训练时随机让一部分神经元停止工作,这样每次参数更新中每个神经元周围的环境都在变化,它就不会过分适应到环境中。图
\ref
{
fig:13-
7
}
中给出了某一次参数更新中使用Dropout之前和之后神经网络的状态对比。
\parinterval
Dropout也是解决过拟合问题的一种常用方法
\upcite
{
DBLP:journals/corr/abs-1207-0580
}
。该方法很简单,在训练时随机让一部分神经元停止工作,这样每次参数更新中每个神经元周围的环境都在变化,它就不会过分适应到环境中。图
\ref
{
fig:13-
6
}
中给出了某一次参数更新中使用Dropout之前和之后神经网络的状态对比。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter13/Figures/figure-network-with-dropout
}
\caption
{
使用Dropout之前(左)和之后(右)神经网络状态的对比
}
\label
{
fig:13-
7
}
\label
{
fig:13-
6
}
\end{figure}
%----------------------------------------------
\parinterval
具体实现时,可以设置一个参数
$
p
\in
(
0
,
1
)
$
。在每次参数更新所使用的前向和反向计算中,每个神经元都以概率
$
p
$
停止工作。相当于每层神经网络会有以
$
p
$
为概率的神经元被“屏蔽”掉。每一次参数更新中会随机屏蔽不同的神经元,图
\ref
{
fig:13-
8
}
给出了Dropout方法和传统方法计算方式的对比。其中,
$
x
_{
i
}^{
l
}$
代表第
$
l
$
层神经网络的第
$
i
$
个输入,
$
w
_{
i
}^{
l
}$
为输入所对应的权重,
$
b
^{
l
}$
表示第
$
l
$
层神经网络输入的偏置,
$
z
_{
i
}^{
l
+
1
}$
表示第
$
l
$
层神经网络的线性运算的结果,
$
f
(
\cdot
)
$
表示激活函数,
$
r
_{
i
}^{
l
}$
的值服从于参数为
$
1
-
p
$
的伯努利分布。
\parinterval
具体实现时,可以设置一个参数
$
p
\in
(
0
,
1
)
$
。在每次参数更新所使用的前向和反向计算中,每个神经元都以概率
$
p
$
停止工作。相当于每层神经网络会有以
$
p
$
为概率的神经元被“屏蔽”掉。每一次参数更新中会随机屏蔽不同的神经元,图
\ref
{
fig:13-
7
}
给出了Dropout方法和传统方法计算方式的对比。其中,
$
x
_{
i
}^{
l
}$
代表第
$
l
$
层神经网络的第
$
i
$
个输入,
$
w
_{
i
}^{
l
}$
为输入所对应的权重,
$
b
^{
l
}$
表示第
$
l
$
层神经网络输入的偏置,
$
z
_{
i
}^{
l
+
1
}$
表示第
$
l
$
层神经网络的线性运算的结果,
$
f
(
\cdot
)
$
表示激活函数,
$
r
_{
i
}^{
l
}$
的值服从于参数为
$
1
-
p
$
的伯努利分布。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter13/Figures/figure-computation-of-dropout
}
\caption
{
使用Dropout之前(左)和之后(右)一层神经网络
}
\label
{
fig:13-
8
}
\label
{
fig:13-
7
}
\end{figure}
%----------------------------------------------
...
...
@@ -380,7 +380,7 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\
\parinterval
在机器翻译中,常用的回译技术也是生成对抗样本的一种有效方式。回译就是,通过反向模型将目标语言翻译成源语言,并将翻译得到的双语数据用于模型训练(见
{
\chaptersixteen
}
)。除了翻译模型,语言模型也可以用于生成对抗样本。
{
\chaptertwo
}
已经介绍过,语言模型可以用于检测句子的流畅度,它根据上文预测当前位置可能出现的单词。因此,此时可以使用语言模型预测出当前位置最可能出现的多个单词,并用这些词替换序列中原本的单词。在机器翻译任务中,可以通过与神经机器翻译系统联合训练,共享词向量矩阵的方式得到语言模型
\upcite
{
DBLP:conf/acl/GaoZWXQCZL19
}
。
\parinterval
此外,
{
\small\bfnew
{
生成对抗网络
}}
\index
{
生成对抗网络
}
(Generative Adversarial Networks
\index
{
Generative Adversarial Networks
}
,
GANs)也可以被用来生成对抗样本
\upcite
{
DBLP:conf/iclr/ZhaoDS18
}
。与回译方法类似,基于生成对抗网络的方法将原始的输入映射为潜在分布
$
\funp
{
P
}$
,并在其中搜索出服从相同分布的文本构成对抗样本。一些研究也对这种方法进行了优化
\upcite
{
DBLP:conf/iclr/ZhaoDS18
}
,在稠密的向量空间中进行搜索,也就是说在定义
$
\funp
{
P
}$
的基础稠密向量空间中找到对抗性表示
$
\mathbi
{
z
}
'
$
,然后利用生成模型将其映射回
$
\mathbi
{
x
}
'
$
,使最终生成的对抗样本在语义上接近原始输入。
\parinterval
此外,
{
\small\bfnew
{
生成对抗网络
}}
\index
{
生成对抗网络
}
(Generative Adversarial Networks
\index
{
Generative Adversarial Networks
}
,
GANs)也可以被用来生成对抗样本
\upcite
{
DBLP:conf/iclr/ZhaoDS18
}
。与回译方法类似,基于生成对抗网络的方法将原始的输入映射为潜在分布
$
\funp
{
P
}$
,并在其中搜索出服从相同分布的文本构成对抗样本。一些研究也对这种方法进行了优化
\upcite
{
DBLP:conf/iclr/ZhaoDS18
}
,在稠密的向量空间中进行搜索,也就是说在定义
$
\funp
{
P
}$
的基础稠密向量空间中找到对抗性表示
$
\mathbi
{
z
}
'
$
,然后利用生成模型将其映射回
$
\mathbi
{
x
}
'
$
,使最终生成的对抗样本在语义上接近原始输入。
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
...
...
@@ -436,7 +436,7 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\
\begin{itemize}
\vspace
{
0.5em
}
\item
{
\small\bfnew
{
曝光偏置问题
}}
。在训练过程中,模型使用标注数据进行训练,因此模型在预测下一个单词时,解码器的输入是正确的译文片段。也就是,预测第
$
j
$
个单词时,系统使用了标准答案
$
\{
{
y
}_
1
,...,
{
y
}_{
j
-
1
}
\}
$
作为历史信息。但是对新的句子进行翻译时,预测第
$
j
$
个单词时使用的是模型自己生成的前
$
j
-
1
$
个单词,即
$
\{\hat
{{
y
}}_
1
,...,
\hat
{{
y
}}_{
j
-
1
}
\}
$
。这意味着,训练时使用的输入数据(目标语言端)与真实翻译时的情况不符,如图
\ref
{
fig:13-
9
}
所示。由于在训练过程中暴露于标注数据,因此模型也适应了标注数据,在推断阶段无法很好地适应模型自动生成的数据,这就是曝光偏置问题
\upcite
{
Bengio2015ScheduledSF,Ranzato2016SequenceLT
}
。
\item
{
\small\bfnew
{
曝光偏置问题
}}
。在训练过程中,模型使用标注数据进行训练,因此模型在预测下一个单词时,解码器的输入是正确的译文片段。也就是,预测第
$
j
$
个单词时,系统使用了标准答案
$
\{
{
y
}_
1
,...,
{
y
}_{
j
-
1
}
\}
$
作为历史信息。但是对新的句子进行翻译时,预测第
$
j
$
个单词时使用的是模型自己生成的前
$
j
-
1
$
个单词,即
$
\{\hat
{{
y
}}_
1
,...,
\hat
{{
y
}}_{
j
-
1
}
\}
$
。这意味着,训练时使用的输入数据(目标语言端)与真实翻译时的情况不符,如图
\ref
{
fig:13-
8
}
所示。由于在训练过程中暴露于标注数据,因此模型也适应了标注数据,在推断阶段无法很好地适应模型自动生成的数据,这就是曝光偏置问题
\upcite
{
Bengio2015ScheduledSF,Ranzato2016SequenceLT
}
。
\vspace
{
0.5em
}
%----------------------------------------------
...
...
@@ -444,7 +444,7 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\
\centering
\input
{
./Chapter13/Figures/figure-exposure-bias
}
\caption
{
曝光偏置问题(基于循环神经网络的翻译模型)
}
\label
{
fig:13-
9
}
\label
{
fig:13-
8
}
\end{figure}
%----------------------------------------------
...
...
@@ -466,14 +466,14 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\
\subsubsection
{
1. 调度采样
}
\parinterval
对于一个目标语言序列
$
\seq
{
y
}
=
\{
{
y
}_
1
,
\ldots
,
{
y
}_
n
\}
$
,在预测第
$
j
$
个单词时,训练过程与推断过程之间的主要区别在于:训练过程中使用标准答案
$
\{
{
y
}_{
1
}
,...,
{
y
}_{
j
-
1
}
\}
$
,而推断过程使用的是来自模型本身的预测结果
$
\{\hat
{{
y
}}_{
1
}
,...,
\hat
{{
y
}}_{
j
-
1
}
\}
$
。此时可以采取一种
{
\small\bfnew
{
调度采样
}}
\index
{
调度采样
}
(Scheduled Sampling
\index
{
Scheduled Sampling
}
)机制
\upcite
{
Bengio2015ScheduledSF
}
。以基于循环神经网络的模型为例,在训练中预测第
$
j
$
个单词时,随机决定使用
${
y
}_{
j
-
1
}$
还是
$
\hat
{{
y
}}_{
j
-
1
}$
作为输入。 假设训练时使用的是基于小批量的随机梯度下降方法,在第
$
i
$
个批次中,对序列每一个位置进行预测时以概率
$
\epsilon
_
i
$
使用标准答案
${
y
}_{
j
-
1
}$
,或以概率
${
1
-
\epsilon
_
i
}$
使用来自模型本身的预测
$
\hat
{{
y
}}_{
j
-
1
}$
。具体到序列中的一个位置
$
j
$
,可以根据模型单词预测的概率进行采样,在
$
\epsilon
_
i
$
控制的调度策略下,同
${
y
}_{
j
-
1
}$
一起作为输入。此过程如图
\ref
{
fig:13-
10
}
所示,并且这个过程可以很好地与束搜索融合。
\parinterval
对于一个目标语言序列
$
\seq
{
y
}
=
\{
{
y
}_
1
,
\ldots
,
{
y
}_
n
\}
$
,在预测第
$
j
$
个单词时,训练过程与推断过程之间的主要区别在于:训练过程中使用标准答案
$
\{
{
y
}_{
1
}
,...,
{
y
}_{
j
-
1
}
\}
$
,而推断过程使用的是来自模型本身的预测结果
$
\{\hat
{{
y
}}_{
1
}
,...,
\hat
{{
y
}}_{
j
-
1
}
\}
$
。此时可以采取一种
{
\small\bfnew
{
调度采样
}}
\index
{
调度采样
}
(Scheduled Sampling
\index
{
Scheduled Sampling
}
)机制
\upcite
{
Bengio2015ScheduledSF
}
。以基于循环神经网络的模型为例,在训练中预测第
$
j
$
个单词时,随机决定使用
${
y
}_{
j
-
1
}$
还是
$
\hat
{{
y
}}_{
j
-
1
}$
作为输入。 假设训练时使用的是基于小批量的随机梯度下降方法,在第
$
i
$
个批次中,对序列每一个位置进行预测时以概率
$
\epsilon
_
i
$
使用标准答案
${
y
}_{
j
-
1
}$
,或以概率
${
1
-
\epsilon
_
i
}$
使用来自模型本身的预测
$
\hat
{{
y
}}_{
j
-
1
}$
。具体到序列中的一个位置
$
j
$
,可以根据模型单词预测的概率进行采样,在
$
\epsilon
_
i
$
控制的调度策略下,同
${
y
}_{
j
-
1
}$
一起作为输入。此过程如图
\ref
{
fig:13-
9
}
所示,并且这个过程可以很好地与束搜索融合。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter13/Figures/figure-of-scheduling-sampling-method
}
\caption
{
调度采样方法的示意图
}
\label
{
fig:13-
10
}
\label
{
fig:13-
9
}
\end{figure}
%----------------------------------------------
...
...
@@ -499,14 +499,14 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\
\parinterval
调度采样解决曝光偏置的方法是,把模型前
$
j
-
1
$
步的预测结果作为输入,来预测第
$
j
$
步的输出。但是,如果模型预测的结果中有错误,再使用错误的结果预测未来的序列也会产生问题。解决这个问题就需要知道模型预测的好与坏,并在训练中有效的使用它们。如果生成好的结果,那么可以使用它进行模型训练,否则就不使用。生成对抗网络就是这样一种技术,它引入了一个额外的模型(判别器)来对原有模型(生成器)的生成结果进行评价,并根据评价结果同时训练两个模型。
\parinterval
在
\ref
{
sec:adversarial-examples
}
小节已经提到了生成对抗网络,这里稍微进行一些展开。 在机器翻译中,基于对抗神经网络的架构被命名为
{
\small\bfnew
{
对抗神经机器翻译
}}
\index
{
对抗神经机器翻译
}
(Adversarial-NMT)
\index
{
Adversarial-NMT
}
\upcite
{
DBLP:conf/acml/WuXTZQLL18
}
。这里,令
$
(
\seq
{
x
}
,
\seq
{
y
}
)
$
表示一个训练样本,令
$
\hat
{
\seq
{
y
}}$
表示神经机器翻译系统对源语言句子
$
\seq
{
x
}$
的翻译结果。此时,对抗神经机器翻译的总体框架可以表示为图
\ref
{
fig:13-1
1
}
,其中。绿色部分表示神经机器翻译模型
$
G
$
,该模型将源语言句子
$
\seq
{
x
}$
翻译为目标语言句子
$
\hat
{
\seq
{
y
}}$
。红色部分是对抗网络
$
D
$
,它的作用是判断目标语言句子是否是源语言句子
$
\seq
{
x
}$
的真实翻译。
$
G
$
和
$
D
$
相互对抗,用
$
G
$
生成的翻译结果
$
\hat
{
\seq
{
y
}}$
来训练
$
D
$
,并生成奖励信号,再使用奖励信号通过策略梯度训练
$
G
$
。
\parinterval
在
\ref
{
sec:adversarial-examples
}
小节已经提到了生成对抗网络,这里稍微进行一些展开。 在机器翻译中,基于对抗神经网络的架构被命名为
{
\small\bfnew
{
对抗神经机器翻译
}}
\index
{
对抗神经机器翻译
}
(Adversarial-NMT)
\index
{
Adversarial-NMT
}
\upcite
{
DBLP:conf/acml/WuXTZQLL18
}
。这里,令
$
(
\seq
{
x
}
,
\seq
{
y
}
)
$
表示一个训练样本,令
$
\hat
{
\seq
{
y
}}$
表示神经机器翻译系统对源语言句子
$
\seq
{
x
}$
的翻译结果。此时,对抗神经机器翻译的总体框架可以表示为图
\ref
{
fig:13-1
0
}
,其中。绿色部分表示神经机器翻译模型
$
G
$
,该模型将源语言句子
$
\seq
{
x
}$
翻译为目标语言句子
$
\hat
{
\seq
{
y
}}$
。红色部分是对抗网络
$
D
$
,它的作用是判断目标语言句子是否是源语言句子
$
\seq
{
x
}$
的真实翻译。
$
G
$
和
$
D
$
相互对抗,用
$
G
$
生成的翻译结果
$
\hat
{
\seq
{
y
}}$
来训练
$
D
$
,并生成奖励信号,再使用奖励信号通过策略梯度训练
$
G
$
。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter13/Figures/figure-framework-of-Adversarial-Neural-machine-translation
}
\caption
{
对抗神经机器翻译框架图
}
\label
{
fig:13-1
1
}
\label
{
fig:13-1
0
}
\end{figure}
%----------------------------------------------
...
...
@@ -543,11 +543,11 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\
\noindent
这里,
$
\hat
{
\seq
{
y
}}$
是模型预测的译文,
$
\chi
(
\seq
{
x
}^{
[
k
]
}
)
$
是
$
\seq
{
x
}^{
[
k
]
}$
所对应的所有候选翻译的集合。损失函数
$
\vartriangle
(
\hat
{
\seq
{
y
}}
,
\seq
{
y
}^{
[
k
]
}
)
$
用来衡量模型预测
$
\hat
{
\seq
{
y
}}$
与标准答案
$
\seq
{
y
}^{
[
k
]
}$
间的差异,损失函数一般用翻译质量评价指标定义,例如,BLEU,TER等
\footnote
{
对于BLEU,损失函数可以被定义为
$
1
-
$
BLEU。
}
。在最小风险训练中,对模型参数
$
\theta
$
的偏导数为:
\begin{eqnarray}
\frac
{
\partial
\funp
{
R
}
(
\theta
)
}{
\partial
\theta
}
&
=
&
\sum
_{
k=1
}^
N
\mathbb
{
E
}_{
\hat
{
\seq
{
y
}}
|
\seq
{
x
}^{
[k]
}
;
\theta
}
[
\vartriangle
(
\hat
{
\seq
{
y
}}
,
\seq
{
y
}^{
[k]
}
)
\times
\frac
{
\partial
\funp
{
P
}
(
\hat
{
\seq
{
y
}}
|
\seq
{
x
}^{
[k]
}
;
\theta
)/
\partial
\theta
}{
\funp
{
P
}
(
\hat
{
\seq
{
y
}}
|
\seq
{
x
}^{
[k]
}
;
\theta
)
}
]
\nonumber
\\
&
=
&
{
\red
\sum
_{
k=1
}^
N
\mathbb
{
E
}_{
\hat
{
\seq
{
y
}}
|
\seq
{
x
}^{
[k]
}
;
\theta
}
[
\vartriangle
(
\hat
{
\seq
{
y
}}
,
\seq
{
y
}^{
[k]
}
)
\times
\frac
{
\partial
\log
{
\funp
{
P
}
(
\hat
{
\seq
{
y
}}
|
\seq
{
x
}^{
[k]
}
;
\theta
)
}}{
\partial
\theta
}
]
}
&
=
&
\sum
_{
k=1
}^
N
\mathbb
{
E
}_{
\hat
{
\seq
{
y
}}
|
\seq
{
x
}^{
[k]
}
;
\theta
}
[
\vartriangle
(
\hat
{
\seq
{
y
}}
,
\seq
{
y
}^{
[k]
}
)
\times
\frac
{
\partial
\log
{
\funp
{
P
}
(
\hat
{
\seq
{
y
}}
|
\seq
{
x
}^{
[k]
}
;
\theta
)
}}{
\partial
\theta
}
]
\label
{
eq:13-15
}
\end{eqnarray}
\noindent
公式
\eqref
{
eq:13-15
}
使用了
{
\small\bfnew
{
策略梯度
}}
\index
{
策略梯度
}
(Policy Gradient
\index
{
Policy Gradient
}
)的手段将
$
\vartriangle
(
\hat
{
\seq
{
y
}}
,
\seq
{
y
}^{
[
k
]
}
)
$
提到微分操作之外
\upcite
{
DBLP:conf/nips/Kakade01,DBLP:journals/corr/abs-1810-02525
}
。这样,就无需对
$
\vartriangle
(
\hat
{
\seq
{
y
}}
,
\seq
{
y
}^{
[
k
]
}
)
$
进行微分,因此最小风险训练允许任意不可微的损失函数,包括BLEU等常用的评价函数。
{
\red
同时,等式右侧将对概率的求导操作转化为了对log函数的求导,更易于模型进行优化。因此,
}
使用公式
\eqref
{
eq:13-15
}
就可以求出模型参数相对于风险函数的损失,进而进行基于梯度的优化。
\noindent
公式
\eqref
{
eq:13-15
}
使用了
{
\small\bfnew
{
策略梯度
}}
\index
{
策略梯度
}
(Policy Gradient
\index
{
Policy Gradient
}
)的手段将
$
\vartriangle
(
\hat
{
\seq
{
y
}}
,
\seq
{
y
}^{
[
k
]
}
)
$
提到微分操作之外
\upcite
{
DBLP:conf/nips/Kakade01,DBLP:journals/corr/abs-1810-02525
}
。这样,就无需对
$
\vartriangle
(
\hat
{
\seq
{
y
}}
,
\seq
{
y
}^{
[
k
]
}
)
$
进行微分,因此最小风险训练允许任意不可微的损失函数,包括BLEU等常用的评价函数。
同时,等式右侧将对概率的求导操作转化为了对log函数的求导,更易于模型进行优化。因此,
使用公式
\eqref
{
eq:13-15
}
就可以求出模型参数相对于风险函数的损失,进而进行基于梯度的优化。
\parinterval
这里需要注意的是,公式
\eqref
{
eq:13-15
}
中求期望的过程是无法直接实现的,因为无法遍历所有的译文句子。通常,会使用采样的方法搜集一定数量的译文,来模拟译文空间。例如,可以使用推断系统生成若干译文。同时,为了保证生成的译文之间具有一定的差异性,也可以对推断过程进行一些“干扰”。从实践的角度看,采样方法是影响强化学习系统的重要因素,因此往往需要对不同的任务设计相适应的采样方法。最简单的方法就是在产生译文的每一个词时候,根据模型产生的下一个词的分布随机选取词当作模型预测,直到选到句子结束符或者达到特定长度的时候停止
\upcite
{
DBLP:conf/emnlp/EdunovOAG18
}
。其他方法还包括随机束搜索,它把束搜索中选取Top-
$
k
$
的操作替换成随机选取
$
k
$
个词。这个方法不会采集到重复的样本。还可以使用基于Gumbel-Top-
$
k
$
的随机束搜索更好地控制了样本里的噪声
\upcite
{
DBLP:conf/icml/KoolHW19
}
。
...
...
@@ -575,13 +575,8 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\
&
&
\sum
_{
i=j
}^
J
\funp
{
r
}_
i(
\hat
{{
y
}}_
i;
\hat
{{
y
}}_{
1
\ldots
j-1
}
a
\hat
{{
y
}}_{
j+1
\ldots
i
}
,
\seq
{
y
}
)]
\label
{
eq:13-16
}
\end{eqnarray}
{
\blue
---------------------------------------------讨论
\\
{{
(学长,
$
\sum
_{
i
=
j
+
1
}^
J
\funp
{
r
}_
i
(
\hat
{{
y
}}_
i;
\hat
{{
y
}}_{
1
\ldots
j
-
1
}
a
\hat
{{
y
}}_{
j
+
1
\ldots
i
}
,
\seq
{
y
}
)
$
想表达的应该是:
\\
$
\funp
{
r
}_{
j
+
1
}
(
\hat
{{
y
}}_{
j
+
1
}
;
\hat
{{
y
}}_{
1
\ldots
j
-
1
}
a,
\seq
{
y
}
)
$
\\
$
\funp
{
r
}_{
j
+
2
}
(
\hat
{{
y
}}_{
j
+
2
}
;
\hat
{{
y
}}_{
1
\ldots
j
-
1
}
a
\hat
{{
y
}}_{
j
+
1
}
,
\seq
{
y
}
)
$
\\
$
\funp
{
r
}_{
j
+
3
}
(
\hat
{{
y
}}_{
j
+
3
}
;
\hat
{{
y
}}_{
1
\ldots
j
-
1
}
a
\hat
{{
y
}}_{
j
+
1
,j
+
2
}
,
\seq
{
y
}
)
$
\\
$
\cdots
$
\\
这些项的加和对吧,那
$
a
$
后面的
$
y
$
的最后一项改成
$
i
-
1
$
也不合理,因为
$
i
-
1
$
就是
$
j
$
,会跟
$
a
$
重复(因为
$
a
$
也是
$
\hat
{{
y
}}_
j
$
,只不过
$
\hat
{{
y
}}_
j
$
是固定的状态,
$
a
$
是任意动作),要不这里就把a改成
$
\hat
{{
y
}}_
j
$
行吗?或者
$
a
_{
\hat
{{
y
}}_
j
}$
这种形式,但是这种形式仍然会和
$
a
$
后面的加和冲突。)
}}
{{
学长觉得这样行吗,公式1.16把a删掉,改成:
$
\sum
_{
i
=
j
}^
J
\funp
{
r
}_
i
(
\hat
{{
y
}}_
i;
\hat
{{
y
}}_{
1
\ldots
j
-
1
}
\hat
{{
y
}}^{
a
}_{
j
\ldots
i
}
,
\seq
{
y
}
)
$
,(下面的段落加说明,此处的
$
\hat
{{
y
}}^{
a
}_{
j
\ldots
i
}$
表示由动作a决定的
$
\hat
{{
y
}}_{
j
\ldots
i
}$
)
\\
}}
---------------------------------------------讨论
\\
}
\noindent
其中,
$
\funp
{
r
}_
j
(
a;
\hat
{{
y
}}_{
1
\ldots
j
-
1
}
,
\seq
{
y
}
)
$
是
$
j
$
时刻做出行动
$
a
$
获得的奖励,
$
\funp
{
r
}_
i
(
\hat
{{
y
}}_
i;
\hat
{{
y
}}_{
1
\ldots
j
-
1
}
a
\hat
{{
y
}}_{
j
+
1
\ldots
i
}
,
\seq
{
y
}
)
$
是在
$
j
$
时刻的行动为
$
a
$
的前提下,
$
i
$
时刻的做出行动
$
\hat
{{
y
}}_
i
$
获得的奖励,
{
\red
$
\hat
{
y
}_{
j
+
1
\ldots
J
}
\sim
\funp
{
p
}
(
\cdot
|
\hat
{
y
}_{
1
\ldots
j
-
1
}
a,
\seq
{
x
}
)
$
表示序列
$
\hat
{
y
}_{
j
+
1
\ldots
J
}$
是根据
$
\funp
{
p
}
(
\cdot
|
\hat
{
y
}_{
1
\ldots
j
-
1
}
a,
\seq
{
x
}
)
$
得到的采样结果,概率函数
$
\funp
{
p
}$
中的
$
\cdot
$
表示序列
$
\hat
{
y
}_{
j
+
1
\ldots
J
}$
服从的随机变量,
}$
\seq
{
x
}$
是源语言句子,
$
\seq
{
y
}$
是正确译文,
$
\hat
{{
y
}}_{
1
\ldots
j
-
1
}$
是策略
$
\funp
{
p
}$
产生的译文的前
$
j
-
1
$
个词,
$
J
$
是生成译文的长度。
{
\red
特别的,对于公式
\ref
{
eq:13-16
}
中
$
\hat
{{
y
}}_{
j
+
1
\ldots
i
}$
来说,如果
$
i<j
+
1
$
,则
$
\hat
{{
y
}}_{
j
+
1
\ldots
i
}$
不存在,
}
对于源语句子
$
x
$
,最优策略
$
\hat
{
p
}$
可以被定义为:
\noindent
其中,
$
\funp
{
r
}_
j
(
a;
\hat
{{
y
}}_{
1
\ldots
j
-
1
}
,
\seq
{
y
}
)
$
是
$
j
$
时刻做出行动
$
a
$
获得的奖励,
$
\funp
{
r
}_
i
(
\hat
{{
y
}}_
i;
\hat
{{
y
}}_{
1
\ldots
j
-
1
}
a
\hat
{{
y
}}_{
j
+
1
\ldots
i
}
,
\seq
{
y
}
)
$
是在
$
j
$
时刻的行动为
$
a
$
的前提下,
$
i
$
时刻的做出行动
$
\hat
{{
y
}}_
i
$
获得的奖励,
$
\hat
{
y
}_{
j
+
1
\ldots
J
}
\sim
\funp
{
p
}
(
\cdot
|
\hat
{
y
}_{
1
\ldots
j
-
1
}
a,
\seq
{
x
}
)
$
表示序列
$
\hat
{
y
}_{
j
+
1
\ldots
J
}$
是根据
$
\funp
{
p
}
(
\cdot
|
\hat
{
y
}_{
1
\ldots
j
-
1
}
a,
\seq
{
x
}
)
$
得到的采样结果,概率函数
$
\funp
{
p
}$
中的
$
\cdot
$
表示序列
$
\hat
{
y
}_{
j
+
1
\ldots
J
}$
服从的随机变量,
$
\seq
{
x
}$
是源语言句子,
$
\seq
{
y
}$
是正确译文,
$
\hat
{{
y
}}_{
1
\ldots
j
-
1
}$
是策略
$
\funp
{
p
}$
产生的译文的前
$
j
-
1
$
个词,
$
J
$
是生成译文的长度。特别的,对于公式
\ref
{
eq:13-16
}
中
$
\hat
{{
y
}}_{
j
+
1
\ldots
i
}$
来说,如果
$
i<j
+
1
$
,则
$
\hat
{{
y
}}_{
j
+
1
\ldots
i
}$
不存在,对于源语句子
$
x
$
,最优策略
$
\hat
{
p
}$
可以被定义为:
\begin{eqnarray}
\hat
{
p
}
&
=
&
\argmax
_{
\funp
{
p
}}
\mathbb
{
E
}_{
\hat
{
\seq
{
y
}}
\sim
\funp
{
p
}
(
\hat
{
\seq
{
y
}}
|
\seq
{
x
}
)
}
\sum
_{
j=1
}^
J
\sum
_{
a
\in
A
}
\funp
{
p
}
(a|
\hat
{{
y
}}_{
1
\ldots
j
}
,
\seq
{
x
}
)
\funp
{
Q
}
(a;
\hat
{{
y
}}_{
1
\ldots
j
}
,
\seq
{
y
}
)
\label
{
eq:13-17
}
...
...
@@ -610,26 +605,26 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\
\label
{
eq:13-19
}
\end{eqnarray}
\parinterval
这个等式也被称为
{
\small\bfnew
{
贝尔曼方程
}}
\index
{
贝尔曼方程
}
(Bellman Equation
\index
{
Bellman Equation
}
)
\upcite
{
sutton2018reinforcement
}
。它表达了
$
j
-
1
$
时刻的动作价值函数
$
\funp
{
Q
}
(
\hat
{{
y
}}_
j;
\hat
{{
y
}}_{
1
\ldots
j
-
1
}
,
\seq
{
y
}
)
$
跟下一时刻
$
j
$
的动作价值函数
$
\funp
{
Q
}
(
a;
\hat
{{
y
}}_{
1
\ldots
j
}
,
\seq
{
y
}
)
$
之间的关系。
{
\red
在理想情况下,动作价值函数
$
\funp
{
Q
}$
应该满足上述等式,因此可以使用该等式作为可学习的函数
$
\tilde
{
\funp
{
Q
}}$
的目标
}{
\red
\sout
{
,因此可以很自然的使用等式右部作为等式左部
$
\funp
{
Q
}
(
\hat
{{
y
}}_
j;
\hat
{{
y
}}_{
1
\ldots
j
-
1
}
,
\seq
{
y
}
)
$
的等价形式
}}
。于是,可以定义
$
j
$
时刻动作价值函数为:
\parinterval
这个等式也被称为
{
\small\bfnew
{
贝尔曼方程
}}
\index
{
贝尔曼方程
}
(Bellman Equation
\index
{
Bellman Equation
}
)
\upcite
{
sutton2018reinforcement
}
。它表达了
$
j
-
1
$
时刻的动作价值函数
$
\funp
{
Q
}
(
\hat
{{
y
}}_
j;
\hat
{{
y
}}_{
1
\ldots
j
-
1
}
,
\seq
{
y
}
)
$
跟下一时刻
$
j
$
的动作价值函数
$
\funp
{
Q
}
(
a;
\hat
{{
y
}}_{
1
\ldots
j
}
,
\seq
{
y
}
)
$
之间的关系。
在理想情况下,动作价值函数
$
\funp
{
Q
}$
应该满足上述等式,因此可以使用该等式作为可学习的函数
$
\tilde
{
\funp
{
Q
}}$
的目标
。于是,可以定义
$
j
$
时刻动作价值函数为:
\begin{eqnarray}
\funp
{
q
}_
j
&
=
&
\funp
{
r
}_
j(
\hat
{{
y
}}_
j;
\hat
{{
y
}}_{
1
\ldots
j-1
}
,
\seq
{
y
}
) +
\sum
_{
a
\in
A
}
\funp
{
p
}
(a|
\hat
{{
y
}}_{
1
\ldots
j
}
,
\seq
{
x
}
)
\tilde
{
\funp
{
Q
}}
(a;
\hat
{{
y
}}_{
1
\ldots
j
}
,
\seq
{
y
}
)
\label
{
eq:13-20
}
\end{eqnarray}
\noindent
{
\red
相应的,
}
评论家对应的目标定义如下:
\noindent
相应的,
评论家对应的目标定义如下:
\begin{eqnarray}
\hat
{
\tilde
{
\funp
{
Q
}}}
&
=
&
\argmin
_{
\tilde
{
\funp
{
Q
}}}
\sum
_{
j=1
}^
J
{
(
\tilde
{
\funp
{
Q
}}
(
\hat
{{
y
}}_
j;
\hat
{{
y
}}_{
1
\ldots
j-1
}
,
\seq
{
y
}
) -
\funp
{
q
}_
j)
}^
2
\label
{
eq:13-21
}
\end{eqnarray}
\parinterval
{
\red
此时,公式
\ref
{
eq:13-20
}
与公式
\ref
{
eq:13-21
}
共同组成了评论家的学习目标,使得可学习的函数
$
\tilde
{
\funp
{
Q
}}$
逼近理想的
$
\funp
{
Q
}$
。
}
最后,通过同时优化演员和评论家直到收敛,获得的演员(也就是策略
$
\funp
{
p
}$
)就是我们期望的翻译模型。图
\ref
{
fig:13-12
}
展示了演员和评论家的关系。
\parinterval
此时,公式
\ref
{
eq:13-20
}
与公式
\ref
{
eq:13-21
}
共同组成了评论家的学习目标,使得可学习的函数
$
\tilde
{
\funp
{
Q
}}$
逼近理想的
$
\funp
{
Q
}$
。最后,通过同时优化演员和评论家直到收敛,获得的演员(也就是策略
$
\funp
{
p
}$
)就是我们期望的翻译模型。图
\ref
{
fig:13-11
}
展示了演员和评论家的关系。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter13/Figures/figure-reinforcement-learning-method-based-on-actor-critic
}
\caption
{
基于演员-评论家的强化学习方法
}
\label
{
fig:13-1
2
}
\label
{
fig:13-1
1
}
\end{figure}
%----------------------------------------------
...
...
@@ -713,7 +708,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\seq{y}} | \seq{x})
\label
{
eq:13-24
}
\end{eqnarray}
这样的损失函数最直接的好处是,知识蒸馏的流程会非常简单。因为只需要利用教师模型将训练数据(源语言)翻译一遍,之后把它的输出替换为训练数据的目标语言部分。之后,利用新得到的双语数据训练学生模型即可。图
\ref
{
fig:13-1
3
}
对比了词级和序列级知识蒸馏方法。
这样的损失函数最直接的好处是,知识蒸馏的流程会非常简单。因为只需要利用教师模型将训练数据(源语言)翻译一遍,之后把它的输出替换为训练数据的目标语言部分。之后,利用新得到的双语数据训练学生模型即可。图
\ref
{
fig:13-1
2
}
对比了词级和序列级知识蒸馏方法。
\vspace
{
0.5em
}
\end{itemize}
...
...
@@ -722,7 +717,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\seq{y}} | \seq{x})
\centering
\input
{
./Chapter13/Figures/figure-difference-between-word-level-and-sequence-level-in-knowledge-distillation
}
\caption
{
词级和序列级知识蒸馏的差异
}
\label
{
fig:13-1
3
}
\label
{
fig:13-1
2
}
\end{figure}
%-------------------------------------------
...
...
@@ -748,14 +743,14 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\seq{y}} | \seq{x})
\vspace
{
0.5em
}
\end{itemize}
\parinterval
此外还可以采用迭代式知识蒸馏的方式。首先,通过模型集成得到较强的教师模型,再将知识迁移到不同的学生模型上,随后继续使用这些学生模型集成新的教师模型。不断的重复上述过程可以逐步提升集成模型的性能,如图
\ref
{
fig:13-
42
}
所示。值得注意的是,随着迭代次数的增加,集成所带来的收益也会随着子模型之间差异性的减小而减少。
\parinterval
此外还可以采用迭代式知识蒸馏的方式。首先,通过模型集成得到较强的教师模型,再将知识迁移到不同的学生模型上,随后继续使用这些学生模型集成新的教师模型。不断的重复上述过程可以逐步提升集成模型的性能,如图
\ref
{
fig:13-
13
}
所示。值得注意的是,随着迭代次数的增加,集成所带来的收益也会随着子模型之间差异性的减小而减少。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter13/Figures/figure-ensemble-knowledge-distillation
}
\caption
{
迭代式知识蒸馏
}
\label
{
fig:13-
42
}
\label
{
fig:13-
13
}
\end{figure}
%-------------------------------------------
...
...
@@ -869,27 +864,27 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\seq{y}} | \seq{x})
\vspace
{
0.5em
}
\end{itemize}
\parinterval
这里,把这两个问题抽象成两个模块:难度评估器和训练调度器,那么课程学习的一个大致的流程如图
\ref
{
fig:13-1
5
}
所示。首先,难度评估器对训练样本按照由易到难的顺序进行排序,最开始调度器从相对容易的数据块中采样训练样本,发送给模型进行训练,随着训练时间的推移,训练调度器将逐渐从更加困难的数据块中进行采样(至于何时,以及选择何种采样方式则取决于设定的策略),持续这个过程,直到从整个训练集进行均匀采样。
\parinterval
这里,把这两个问题抽象成两个模块:难度评估器和训练调度器,那么课程学习的一个大致的流程如图
\ref
{
fig:13-1
4
}
所示。首先,难度评估器对训练样本按照由易到难的顺序进行排序,最开始调度器从相对容易的数据块中采样训练样本,发送给模型进行训练,随着训练时间的推移,训练调度器将逐渐从更加困难的数据块中进行采样(至于何时,以及选择何种采样方式则取决于设定的策略),持续这个过程,直到从整个训练集进行均匀采样。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter13/Figures/figure-curriculum-learning-framework
}
\caption
{
课程学习框架
}
\label
{
fig:13-1
5
}
\label
{
fig:13-1
4
}
\end{figure}
%-------------------------------------------
\parinterval
评估样本的难度和具体的任务相关,在神经机器翻译中,有很多种评估方法,可以利用语言学上的困难准则,比如句子长度、句子平均词频、句法树深度等
\upcite
{
DBLP:conf/naacl/PlataniosSNPM19,DBLP:conf/ranlp/KocmiB17
}
。这些准则本质上属于人类的先验知识,符合人类的直觉,但不一定和模型相匹配。对人类来说简单的句子对模型来说可能并不简单,所以研究人员也提出了基于模型的方法,比如:语言模型
\upcite
{
DBLP:conf/acl/WangCC19,DBLP:conf/naacl/ZhangSKMCD19
}
,或者神经机器翻译模型
\upcite
{
zhang2018empirical,DBLP:conf/coling/XuHJFWHJXZ20
}
都可以用于评价样本的难度。值得注意的是,利用神经机器翻译来打分的方法分为静态和动态两种。静态的方法是利用在小数据集上训练的、更小的翻译模型来打分
\upcite
{
zhang2018empirical
}
。动态的方法则是利用当前模型的状态来打分,这在广义上也叫作
{
\small\bfnew
{
自步学习
}}
\index
{
自步学习
}
(Self-paced Learning
\index
{
Self-paced Learning
}
),通常可以利用模型的训练误差或变化率等指标进行样本难度的估计
\upcite
{
DBLP:conf/coling/XuHJFWHJXZ20
}
。
\parinterval
虽然样本难度的度量在不同任务中有所不同,但课程规划通常与数据和任务无关。在各种场景中,大多数课程学习都利用了类似的调度策略。具体而言,调度策略可以分为预定义的和自动的两种。预定义的调度策略通常将按照难易程度排序好的样本划分为块,每个块中包含一定数量的难度相似的样本。然后按照“先易后难”的原则人工定义一个调度策略,比如,一种较为流行的方法是:在训练早期,模型只在简单块中进行采样,随着训练过程的进行,将下一个块的样本合并到当前训练子集中,继续训练,直到合并了整个数据块,即整个训练集可见为止,之后再继续训练直到收敛。这个过程如图
\ref
{
fig:13-1
6
}
所示。类似的还有一些其他变体,比如,训练到模型可见整个数据集之后,将最难的样本块复制并添加到训练集中,或者是将最容易的数据块逐渐删除,然后再添加回来等,这些方法的基本想法都是想让模型在具备一定的能力之后更多关注于困难样本。
\parinterval
虽然样本难度的度量在不同任务中有所不同,但课程规划通常与数据和任务无关。在各种场景中,大多数课程学习都利用了类似的调度策略。具体而言,调度策略可以分为预定义的和自动的两种。预定义的调度策略通常将按照难易程度排序好的样本划分为块,每个块中包含一定数量的难度相似的样本。然后按照“先易后难”的原则人工定义一个调度策略,比如,一种较为流行的方法是:在训练早期,模型只在简单块中进行采样,随着训练过程的进行,将下一个块的样本合并到当前训练子集中,继续训练,直到合并了整个数据块,即整个训练集可见为止,之后再继续训练直到收敛。这个过程如图
\ref
{
fig:13-1
5
}
所示。类似的还有一些其他变体,比如,训练到模型可见整个数据集之后,将最难的样本块复制并添加到训练集中,或者是将最容易的数据块逐渐删除,然后再添加回来等,这些方法的基本想法都是想让模型在具备一定的能力之后更多关注于困难样本。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter13/Figures/figure-a-predefined-course-planning
}
\caption
{
“先易后难”数据块选择
}
\label
{
fig:13-1
6
}
\label
{
fig:13-1
5
}
\end{figure}
%-------------------------------------------
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论