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
4761a6d1
Commit
4761a6d1
authored
Jan 10, 2021
by
单韦乔
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
13章文字
parent
7e336068
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
22 行增加
和
21 行删除
+22
-21
Chapter13/chapter13.tex
+22
-21
没有找到文件。
Chapter13/chapter13.tex
查看文件 @
4761a6d1
...
@@ -659,7 +659,8 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\
...
@@ -659,7 +659,8 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\
\parinterval
理想的机器翻译系统应该是品质好、速度块、存储占用少。不过,为了追求更好的翻译品质,往往需要更大的模型,但是相应的翻译速度会降低。在很多场景下,这样的模型无法直接使用。比如,Transformer-Big等“大”模型通常在专用GPU服务器上运行,在手机等受限环境下仍很难应用。
\parinterval
理想的机器翻译系统应该是品质好、速度块、存储占用少。不过,为了追求更好的翻译品质,往往需要更大的模型,但是相应的翻译速度会降低。在很多场景下,这样的模型无法直接使用。比如,Transformer-Big等“大”模型通常在专用GPU服务器上运行,在手机等受限环境下仍很难应用。
\parinterval
另一方面,直接训练“小”模型的效果往往并不理想,其翻译品质与“大”模型相比仍有比较明显的差距。既然直接训练小模型无法达到更好的效果,一种有趣的想法是把“大”模型的知识传递给“小”模型。这类似于,教小孩子学习数学,是请一个权威数学家(数据中的标准答案),还是请一个小学数学教师(“大”模型)。这就是知识蒸馏的基本思想。
\parinterval
另一方面,直接训练“小”模型的效果往往并不理想,其翻译品质与“大”模型相比仍有比较明显的差距。既然直接训练小模型无法达到更好的效果,一种有趣的想法是把“大”模型的知识传递给“小”模型。这类似于,教小孩子学习数学,是请一个权威数学家(数据中的标准答案)进行教学,而是会请一个小学数
学教师(“大”模型)来教小孩子。这就是知识蒸馏的基本思想。
%----------------------------------------------------------------------------------------
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
% NEW SUB-SECTION
...
@@ -698,24 +699,24 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\
...
@@ -698,24 +699,24 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\
\item
{
\small\bfnew
{
基于单词的知识蒸馏
}}
\index
{
基于单词的知识蒸馏
}
(Word-level Knowledge Distillation)
\index
{
Word-level Knowledge Distillation
}
。该方法的目标是使得学生模型的预测(分布)尽可能逼近教师模型的预测(分布)。令
$
\seq
{
x
}
=
\{
x
_
1
,
\ldots
,x
_
m
\}
$
和
$
\seq
{
y
}
=
\{
y
_
1
,
\ldots
,y
_
n
\}
$
分别表示输入和输出(数据中的答案)序列,
$
V
$
表示目标语言词表,则基于单词的知识蒸馏的损失函数被定义为:
\item
{
\small\bfnew
{
基于单词的知识蒸馏
}}
\index
{
基于单词的知识蒸馏
}
(Word-level Knowledge Distillation)
\index
{
Word-level Knowledge Distillation
}
。该方法的目标是使得学生模型的预测(分布)尽可能逼近教师模型的预测(分布)。令
$
\seq
{
x
}
=
\{
x
_
1
,
\ldots
,x
_
m
\}
$
和
$
\seq
{
y
}
=
\{
y
_
1
,
\ldots
,y
_
n
\}
$
分别表示输入和输出(数据中的答案)序列,
$
V
$
表示目标语言词表,则基于单词的知识蒸馏的损失函数被定义为:
\begin{eqnarray}
\begin{eqnarray}
L
_{
\textrm
{
word
}}
= -
\sum
_{
j=1
}^
n
\sum
_{
y
_
j
\in
V
}
\textrm
{
P
}_{
\textrm
{
t
}}
(y
_{
\textrm
{
j
}}
|
\seq
{
x
}
)
\textrm
{
logP
}_{
\textrm
{
s
}}
(y
_
j|
\seq
{
x
}
)
L
_{
\textrm
{
word
}}
= -
\sum
_{
j=1
}^
n
\sum
_{
y
_
j
\in
V
}
\textrm
{
P
}_{
\textrm
{
t
}}
(y
_{
\textrm
{
j
}}
|
\seq
{
x
}
)
\textrm
{
logP
}_{
\textrm
{
s
}}
(y
_
j|
\seq
{
x
}
)
\label
{
eq:13-2
8
}
\label
{
eq:13-2
2
}
\end{eqnarray}
\end{eqnarray}
这里,
$
\textrm
{
P
}_{
\textrm
{
s
}}
(
y
_
j|
\seq
{
x
}
)
$
和
$
\textrm
{
P
}_{
\textrm
{
t
}}
(
y
_
i|
\seq
{
x
}
)
$
分别表示学生模型和教师模型在
$
j
$
位置输出的概率。公式
\eqref
{
eq:13-28
}
实际上在最小化教师模型和学生模型输出分布之间的交叉熵。
这里,
$
\textrm
{
P
}_{
\textrm
{
s
}}
(
y
_
j|
\seq
{
x
}
)
$
和
$
\textrm
{
P
}_{
\textrm
{
t
}}
(
y
_
j|
\seq
{
x
}
)
$
分别表示学生模型和教师模型在
$
j
$
位置输出的概率。公式
\eqref
{
eq:13-22
}
实际上在最小化教师模型和学生模型输出分布之间的交叉熵。
\vspace
{
0.5em
}
\vspace
{
0.5em
}
\item
{
\small\bfnew
{
基于序列的知识蒸馏
}}
\index
{
基于序列的知识蒸馏
}
(Sequence-level Knowledge Distillation)
\index
{
Sequence-level Knowledge Distillation
}
。除了单词一级输出的拟合,基于序列的知识蒸馏希望在序列整体上进行拟合。其损失函数被定义为:
\item
{
\small\bfnew
{
基于序列的知识蒸馏
}}
\index
{
基于序列的知识蒸馏
}
(Sequence-level Knowledge Distillation)
\index
{
Sequence-level Knowledge Distillation
}
。除了单词一级输出的拟合,基于序列的知识蒸馏希望在序列整体上进行拟合。其损失函数被定义为:
\begin{eqnarray}
\begin{eqnarray}
L
_{
\textrm
{
seq
}}
= -
\sum
_{
\seq
{
y
}}
\textrm
{
P
}_{
\textrm
{
t
}}
(
\seq
{
y
}
|
\seq
{
x
}
)
\textrm
{
logP
}_{
\textrm
{
s
}}
(
\seq
{
y
}
|
\seq
{
x
}
)
L
_{
\textrm
{
seq
}}
= -
\sum
_{
\seq
{
y
}}
\textrm
{
P
}_{
\textrm
{
t
}}
(
\seq
{
y
}
|
\seq
{
x
}
)
\textrm
{
logP
}_{
\textrm
{
s
}}
(
\seq
{
y
}
|
\seq
{
x
}
)
\label
{
eq:13-2
9
}
\label
{
eq:13-2
3
}
\end{eqnarray}
\end{eqnarray}
公式
\eqref
{
eq:13-2
9
}
要求遍历所有可能的译文序列,并进行求和,当词表大小为
$
V
$
,序列长度为
$
n
$
时,则序列的数量有
$
V
$
的
$
n
$
次幂,这么多的译文将消耗大量的计算资源。因此,会考虑用教师模型的真实输出序列
$
\tilde
{
\seq
{
y
}}$
来代替整个空间,即假设
$
\textrm
{
P
}_{
\textrm
{
t
}}
(
\tilde
{
\seq
{
y
}}
|
\seq
{
x
}
)=
1
$
。于是,目标函数变为:
公式
\eqref
{
eq:13-2
3
}
要求遍历所有可能的译文序列,并进行求和,当词表大小为
$
V
$
,序列长度为
$
n
$
时,则序列的数量有
$
V
$
的
$
n
$
次幂,这么多的译文将消耗大量的计算资源。因此,会考虑用教师模型的真实输出序列
$
\hat
{
\seq
{
y
}}$
来代替整个空间,即假设
$
\textrm
{
P
}_{
\textrm
{
t
}}
(
\hat
{
\seq
{
y
}}
|
\seq
{
x
}
)=
1
$
。于是,目标函数变为:
\begin{eqnarray}
\begin{eqnarray}
L
_{
\textrm
{
seq
}}
= -
\textrm
{
logP
}_{
\textrm
{
s
}}
(
\
tilde
{
\seq
{
y
}}
|
\seq
{
x
}
)
L
_{
\textrm
{
seq
}}
= -
\textrm
{
logP
}_{
\textrm
{
s
}}
(
\
hat
{
\seq
{
y
}}
|
\seq
{
x
}
)
\label
{
eq:13-
30
}
\label
{
eq:13-
24
}
\end{eqnarray}
\end{eqnarray}
这样的损失函数最直接的好处是,知识蒸馏的流程会非常简单。因为只需要利用教师模型将训练数据(源语言)翻译一遍,之后把它的输出替换为训练数据的目标语言部分。之后,利用得到的新的双语数据训练学生模型即可。图
\ref
{
fig:13-
41
}
对比了词级和序列级知识蒸馏方法。
这样的损失函数最直接的好处是,知识蒸馏的流程会非常简单。因为只需要利用教师模型将训练数据(源语言)翻译一遍,之后把它的输出替换为训练数据的目标语言部分。之后,利用得到的新的双语数据训练学生模型即可。图
\ref
{
fig:13-
13
}
对比了词级和序列级知识蒸馏方法。
\vspace
{
0.5em
}
\vspace
{
0.5em
}
\end{itemize}
\end{itemize}
...
@@ -724,7 +725,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\tilde{\seq{y}} | \seq{x})
...
@@ -724,7 +725,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\tilde{\seq{y}} | \seq{x})
\centering
\centering
\input
{
./Chapter13/Figures/figure-difference-between-word-level-and-sequence-level-in-knowledge-distillation
}
\input
{
./Chapter13/Figures/figure-difference-between-word-level-and-sequence-level-in-knowledge-distillation
}
\caption
{
词级和序列级知识蒸馏的差异
}
\caption
{
词级和序列级知识蒸馏的差异
}
\label
{
fig:13-
41
}
\label
{
fig:13-
13
}
\end{figure}
\end{figure}
%-------------------------------------------
%-------------------------------------------
...
@@ -738,7 +739,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\tilde{\seq{y}} | \seq{x})
...
@@ -738,7 +739,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\tilde{\seq{y}} | \seq{x})
\subsection
{
机器翻译中的知识蒸馏
}
\subsection
{
机器翻译中的知识蒸馏
}
\parinterval
在神经机器翻译中,通常使用公式
\eqref
{
eq:13-
30
}
的方法进行知识蒸馏,即通过教师模型构造伪数据,之后让学生模型从伪数据中学习。这样做的好处在于,系统研发人员不需要对系统进行任何修改,整个过程只需要调用教师模型和学生模型标准的训练和推断模块即可。
\parinterval
在神经机器翻译中,通常使用公式
\eqref
{
eq:13-
24
}
的方法进行知识蒸馏,即通过教师模型构造伪数据,之后让学生模型从伪数据中学习。这样做的好处在于,系统研发人员不需要对系统进行任何修改,整个过程只需要调用教师模型和学生模型标准的训练和推断模块即可。
\parinterval
另一个问题是如何构造教师模型和学生模型。以Transformer为例,通常有两种思路:
\parinterval
另一个问题是如何构造教师模型和学生模型。以Transformer为例,通常有两种思路:
...
@@ -778,9 +779,9 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\tilde{\seq{y}} | \seq{x})
...
@@ -778,9 +779,9 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\tilde{\seq{y}} | \seq{x})
\subsection
{
数据选择
}
\subsection
{
数据选择
}
\parinterval
模型学习目的就是要学习训练数据的分布,以期望模型学到的分布和真实数据的分布越接近越好。然而训练数据是从真实世界中采样得来的,这导致了训练数据无法完整地描述客观世界的真实规律。这种分布的不匹配有许多不同的表现形式,例如,类别不平衡、领域差异、存在标签噪声等,这导致模型在实践中表现不佳。
\parinterval
模型学习
的
目的就是要学习训练数据的分布,以期望模型学到的分布和真实数据的分布越接近越好。然而训练数据是从真实世界中采样得来的,这导致了训练数据无法完整地描述客观世界的真实规律。这种分布的不匹配有许多不同的表现形式,例如,类别不平衡、领域差异、存在标签噪声等,这导致模型在实践中表现不佳。
\parinterval
类别不平衡在分类任务中更为常见,可以通过重采样、代价敏感训练等手段来解决。数据选择则是缓解领域差异和标签噪声等问题的一种有效手段,它的学习策略是让模型有选择的使用样本进行学习。此外,在一些稀缺资源场景下还会面临标注数据稀少的情况,此时可以利用主动学习选择那些最有价值的样本
让人工优先进行
标注,从而降低标注成本。
\parinterval
类别不平衡在分类任务中更为常见,可以通过重采样、代价敏感训练等手段来解决。数据选择则是缓解领域差异和标签噪声等问题的一种有效手段,它的学习策略是让模型有选择的使用样本进行学习。此外,在一些稀缺资源场景下还会面临标注数据稀少的情况,此时可以利用主动学习选择那些最有价值的样本
优先进行人工
标注,从而降低标注成本。
\parinterval
显然,上述方法都基于一个假设:在训练过程中,每个样本都是有价值的,且这种价值可以计算。价值在不同任务背景下有不同的含义,这与任务的特性有关。比如,在领域相关数据选择中,样本的价值表示这个样本与领域的相关性;在数据降噪中,价值表示样本的可信度;在主动学习中,价值表示样本的难易程度。
\parinterval
显然,上述方法都基于一个假设:在训练过程中,每个样本都是有价值的,且这种价值可以计算。价值在不同任务背景下有不同的含义,这与任务的特性有关。比如,在领域相关数据选择中,样本的价值表示这个样本与领域的相关性;在数据降噪中,价值表示样本的可信度;在主动学习中,价值表示样本的难易程度。
...
@@ -849,7 +850,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\tilde{\seq{y}} | \seq{x})
...
@@ -849,7 +850,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\tilde{\seq{y}} | \seq{x})
\subsection
{
课程学习
}
\subsection
{
课程学习
}
\label
{
sec:curriculum-learning
}
\label
{
sec:curriculum-learning
}
\parinterval
课程学习(Curriculum Learning)
的基本思想是:先学习简单的、普适性的知识,然后逐渐增加难度,学习更复杂、更专业化的知识。在统计模型训练中,这种思想可以体现在让模型按照由“易”到”难“ 的顺序对样本进行学习
\upcite
{
DBLP:conf/icml/BengioLCW09
}
,这本质上是一种样本使用策略。以神经机器翻译翻译使用的随机梯度下降为例,在传统的方法中,所有训练样本都是随机呈现给模型的,换句话说,就是让模型平等地对待所有的训练样本,这忽略了数据样本的各种复杂性和当前模型的学习状态。所以模拟人类由易到难的学习过程就是一种很自然的想法,这样做的好处在于:
\parinterval
{
\small\bfnew
{
课程学习
}}
\index
{
课程学习
}
(Curriculum Learning)
\index
{
Curriculum Learning
}
的基本思想是:先学习简单的、普适性的知识,然后逐渐增加难度,学习更复杂、更专业化的知识。在统计模型训练中,这种思想可以体现在让模型按照由“易”到”难“ 的顺序对样本进行学习
\upcite
{
DBLP:conf/icml/BengioLCW09
}
,这本质上是一种样本使用策略。以神经机器翻译翻译使用的随机梯度下降为例,在传统的方法中,所有训练样本都是随机呈现给模型的,换句话说,就是让模型平等地对待所有的训练样本,这忽略了数据样本的各种复杂性和当前模型的学习状态。所以模拟人类由易到难的学习过程就是一种很自然的想法,这样做的好处在于:
\begin{itemize}
\begin{itemize}
\vspace
{
0.5em
}
\vspace
{
0.5em
}
...
@@ -859,7 +860,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\tilde{\seq{y}} | \seq{x})
...
@@ -859,7 +860,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\tilde{\seq{y}} | \seq{x})
\vspace
{
0.5em
}
\vspace
{
0.5em
}
\end{itemize}
\end{itemize}
\parinterval
课程学习是符合直觉的,可以想象,对于一个数学零基础的人来说,如果一开始就同时学习加减乘除和高等数学,效率自然是比较低下的。而如果按照正常的学习顺序,比如先学习加减乘除,然后学习各种函数,最后再学习高等数学,有了前面的基础,再学习后面的知识,效率就可以更高。事实上,课程学习自从被提出就受到了研究人员的极大关注,除了想法本身有趣之外,还因为它作为一种和模型无关的训练策略,具有即插即用的特点。神经机器翻译就一种很契合课程学习的任务,这是因为神经机器翻译往往需要大规模的平行语料来训练模型,训练成本很高,所以使用课程学习来加快收敛是一个很自然的想法。
\parinterval
课程学习是符合直觉的,可以想象,对于一个数学零基础的人来说,如果一开始就同时学习加减乘除和高等数学,效率自然是比较低下的。而如果按照正常的学习顺序,比如先学习加减乘除,然后学习各种函数,最后再学习高等数学,有了前面的基础,再学习后面的知识,效率就可以更高。事实上,课程学习自从被提出就受到了研究人员的极大关注,除了想法本身有趣之外,还因为它作为一种和模型无关的训练策略,具有即插即用的特点。神经机器翻译就
是
一种很契合课程学习的任务,这是因为神经机器翻译往往需要大规模的平行语料来训练模型,训练成本很高,所以使用课程学习来加快收敛是一个很自然的想法。
\parinterval
那么如何设计课程学习方法呢?有两个核心问题:
\parinterval
那么如何设计课程学习方法呢?有两个核心问题:
...
@@ -871,27 +872,27 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\tilde{\seq{y}} | \seq{x})
...
@@ -871,27 +872,27 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\tilde{\seq{y}} | \seq{x})
\vspace
{
0.5em
}
\vspace
{
0.5em
}
\end{itemize}
\end{itemize}
\parinterval
这里,把这两个问题抽象成两个模块:难度评估器和训练调度器,那么课程学习的一个大致的流程如图
\ref
{
fig:13-
53
}
所示。首先,难度评估器对训练样本按照由易到难的顺序进行排序,最开始调度器从相对容易的数据块中采样训练样本,发送给模型进行训练,随着训练时间的推移,训练调度器将逐渐从更加困难的数据块中进行采样(至于何时,以及
何种采样方式则取决于设定的策略),持续这个过程,直到从整个训练集进行均匀采样。
\parinterval
这里,把这两个问题抽象成两个模块:难度评估器和训练调度器,那么课程学习的一个大致的流程如图
\ref
{
fig:13-
15
}
所示。首先,难度评估器对训练样本按照由易到难的顺序进行排序,最开始调度器从相对容易的数据块中采样训练样本,发送给模型进行训练,随着训练时间的推移,训练调度器将逐渐从更加困难的数据块中进行采样(至于何时,以及选择
何种采样方式则取决于设定的策略),持续这个过程,直到从整个训练集进行均匀采样。
%----------------------------------------------
%----------------------------------------------
\begin{figure}
[htp]
\begin{figure}
[htp]
\centering
\centering
\input
{
./Chapter13/Figures/figure-curriculum-learning-framework
}
\input
{
./Chapter13/Figures/figure-curriculum-learning-framework
}
\caption
{
课程学习框架
}
\caption
{
课程学习框架
}
\label
{
fig:13-
53
}
\label
{
fig:13-
15
}
\end{figure}
\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-P
aced Learning
}
),通常可以利用模型的训练误差或变化率等指标进行样本难度的估计
\upcite
{
DBLP:conf/coling/XuHJFWHJXZ20
}
。
\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-p
aced Learning
}
),通常可以利用模型的训练误差或变化率等指标进行样本难度的估计
\upcite
{
DBLP:conf/coling/XuHJFWHJXZ20
}
。
\parinterval
虽然样本难度的度量在不同任务中有所不同,但课程规划通常与数据和任务无关。在各种场景中,大多数课程学习都利用了类似的调度策略。具体而言,调度策略可以分为预定义的和自动两种。预定义的调度策略通常按照难易程度排序好的样本划分为块,每个块中包含一定数量的难度相似的样本。然后按照“先易后难”的原则人工定义一个调度策略,比如,一种较为流行的方法是:在训练早期,模型只在简单块中进行采样,随着训练过程的进行,将下一个块的样本合并到当前训练子集中,继续训练,直到合并了整个数据块,即整个训练集可见为止,之后再继续进行几个额外轮次的训练直到收敛。这个过程如图
\ref
{
fig:13-
55
}
所示。类似的还有一些其他变体,比如,训练到模型可见整个数据集之后,将最难的样本块复制并添加到训练集中,或者是将最容易的数据块逐渐删除,然后再添加回来等,这些方法的基本想法都是想让模型在具备一定的能力之后更多关注于困难样本。
\parinterval
虽然样本难度的度量在不同任务中有所不同,但课程规划通常与数据和任务无关。在各种场景中,大多数课程学习都利用了类似的调度策略。具体而言,调度策略可以分为预定义的和自动两种。预定义的调度策略通常按照难易程度排序好的样本划分为块,每个块中包含一定数量的难度相似的样本。然后按照“先易后难”的原则人工定义一个调度策略,比如,一种较为流行的方法是:在训练早期,模型只在简单块中进行采样,随着训练过程的进行,将下一个块的样本合并到当前训练子集中,继续训练,直到合并了整个数据块,即整个训练集可见为止,之后再继续进行几个额外轮次的训练直到收敛。这个过程如图
\ref
{
fig:13-
16
}
所示。类似的还有一些其他变体,比如,训练到模型可见整个数据集之后,将最难的样本块复制并添加到训练集中,或者是将最容易的数据块逐渐删除,然后再添加回来等,这些方法的基本想法都是想让模型在具备一定的能力之后更多关注于困难样本。
%----------------------------------------------
%----------------------------------------------
\begin{figure}
[htp]
\begin{figure}
[htp]
\centering
\centering
\input
{
./Chapter13/Figures/figure-a-predefined-course-planning
}
\input
{
./Chapter13/Figures/figure-a-predefined-course-planning
}
\caption
{
“先易后难”数据块选择
}
\caption
{
“先易后难”数据块选择
}
\label
{
fig:13-
55
}
\label
{
fig:13-
16
}
\end{figure}
\end{figure}
%-------------------------------------------
%-------------------------------------------
...
@@ -903,7 +904,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\tilde{\seq{y}} | \seq{x})
...
@@ -903,7 +904,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\tilde{\seq{y}} | \seq{x})
\subsection
{
持续学习
}
\subsection
{
持续学习
}
\parinterval
人类具有不断学习、调整和转移知识的能力,这种能力被称为
{
\small\bfnew
{
持续学习
}}
\index
{
持续学习
}
(Continual Learning
\index
{
Continual Learning
}
),也叫
{
\small\bfnew
{
终生学习
}}
(Lifelong Learning
\index
{
Lifelong Learning
}
)
、
{
\small\bfnew
{
增量式学习
}}
\index
{
增量式学习
}
(Incremental Learning
\index
{
Incremental Learning
}
)。人类学习的新任务时,会很自然的利用以前的知识并将新学习的知识整合到以前的知识中。然而对于机器学习系统来说,尤其在连接主义的范式下(如深度神经网络模型),这是一个很大的挑战,这是由神经网络的特性所决定的。当前的神经网络模型依赖于标注的训练样本,通过反向传播算法对模型参数进行训练更新,最终达到拟合数据分布的目的。当把模型切换到新的任务时,本质上是数据的分布发生了变化,从这种分布差异过大的数据中不断增量获取可用信息很容易导致
{
\small\bfnew
{
灾难性遗忘
}}
\index
{
灾难性遗忘
}
(Catastrophic Forgetting
\index
{
Catastrophic Forgetting
}
)问题,即用新数据训练模型的时候会干扰先前学习的知识。这是因为模型在学习新任务时,会用新训练数据对整个网络权重进行更新,这很容易造成模型过分拟合新的数据,忘记旧数据中的知识。甚至,这在最坏的情况下会导致旧知识被新知识完全重写。在机器翻译领域,类似的问题经常发生在不断增加数据的场景中,因为当用户使用少量数据对模型进行更新之后,发现在旧数据上的性能下降了(见
{
\chaptereighteen
}
)。
\parinterval
人类具有不断学习、调整和转移知识的能力,这种能力被称为
{
\small\bfnew
{
持续学习
}}
\index
{
持续学习
}
(Continual Learning
\index
{
Continual Learning
}
),也叫
{
\small\bfnew
{
终生学习
}}
(Lifelong Learning
\index
{
Lifelong Learning
}
)
或
{
\small\bfnew
{
增量式学习
}}
\index
{
增量式学习
}
(Incremental Learning
\index
{
Incremental Learning
}
)。人类学习的新任务时,会很自然的利用以前的知识并将新学习的知识整合到以前的知识中。然而对于机器学习系统来说,尤其在连接主义的范式下(如深度神经网络模型),这是一个很大的挑战,这是由神经网络的特性所决定的。当前的神经网络模型依赖于标注的训练样本,通过反向传播算法对模型参数进行训练更新,最终达到拟合数据分布的目的。当把模型切换到新的任务时,本质上是数据的分布发生了变化,从这种分布差异过大的数据中不断增量获取可用信息很容易导致
{
\small\bfnew
{
灾难性遗忘
}}
\index
{
灾难性遗忘
}
(Catastrophic Forgetting
\index
{
Catastrophic Forgetting
}
)问题,即用新数据训练模型的时候会干扰先前学习的知识。这是因为模型在学习新任务时,会用新训练数据对整个网络权重进行更新,这很容易造成模型过分拟合新的数据,忘记旧数据中的知识。甚至,这在最坏的情况下会导致旧知识被新知识完全重写。在机器翻译领域,类似的问题经常发生在不断增加数据的场景中,因为当用户使用少量数据对模型进行更新之后,发现在旧数据上的性能下降了(见
{
\chaptereighteen
}
)。
\parinterval
为克服灾难性遗忘问题,学习系统一方面必须能连续获取新知识和完善现有知识,另一方面,还应防止新数据输入明显干扰现有的知识,这个问题称作
{
\small\bfnew
{
稳定性-可塑性
}}
\index
{
稳定性- 可塑性
}
(Stability-Plasticity
\index
{
Stability-Plasticity
}
)问题。可塑性指整合新知识的能力,稳定性指保留先前的知识不至于遗忘。要解决这些问题,就需要模型在保留先前任务的知识与学习当前任务的新知识之间取得平衡。目前的解决方法可以分为以下几类:
\parinterval
为克服灾难性遗忘问题,学习系统一方面必须能连续获取新知识和完善现有知识,另一方面,还应防止新数据输入明显干扰现有的知识,这个问题称作
{
\small\bfnew
{
稳定性-可塑性
}}
\index
{
稳定性- 可塑性
}
(Stability-Plasticity
\index
{
Stability-Plasticity
}
)问题。可塑性指整合新知识的能力,稳定性指保留先前的知识不至于遗忘。要解决这些问题,就需要模型在保留先前任务的知识与学习当前任务的新知识之间取得平衡。目前的解决方法可以分为以下几类:
...
@@ -917,7 +918,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\tilde{\seq{y}} | \seq{x})
...
@@ -917,7 +918,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\tilde{\seq{y}} | \seq{x})
\vspace
{
0.5em
}
\vspace
{
0.5em
}
\end{itemize}
\end{itemize}
\parinterval
从某种程度上看,多领域、多语言机器翻译等都属于持续学习的场景。在多领域神经机器翻译中,我们期望模型既有通用领域的性能,并且在特定领域也表现良好,然而事实上,适应特定领域往往是以牺牲通用领域的性能为代价的
\upcite
{
DBLP:conf/naacl/ThompsonGKDK19,DBLP:conf/coling/GuF20
}
。在多语言神经翻译中,最理想的情况是一个模型就能够实现在多个语言之间的映射,然而由于数据分布的极大不同,实际情况往往是:多语言模型能够提高低资源语言对互译的性能,但同时也会降低高资源语言对的性能。因此如何让模型从多语言训练数据中持续受益就是一个关键的问题。以上这些问题在
{
\chaptersixteen
}
和
{
\chaptereighteen
}
中还会有详细讨论。
\parinterval
从某种程度上看,多领域、多语言机器翻译等都属于持续学习的场景。在多领域神经机器翻译中,我们期望模型既有通用领域的性能,并且在特定领域也表现良好,然而事实上,适应特定领域往往是以牺牲通用领域的性能为代价的
\upcite
{
DBLP:conf/naacl/ThompsonGKDK19,DBLP:conf/coling/GuF20
}
。在多语言神经
机器
翻译中,最理想的情况是一个模型就能够实现在多个语言之间的映射,然而由于数据分布的极大不同,实际情况往往是:多语言模型能够提高低资源语言对互译的性能,但同时也会降低高资源语言对的性能。因此如何让模型从多语言训练数据中持续受益就是一个关键的问题。以上这些问题在
{
\chaptersixteen
}
和
{
\chaptereighteen
}
中还会有详细讨论。
%----------------------------------------------------------------------------------------
%----------------------------------------------------------------------------------------
% NEW SECTION
% NEW SECTION
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论