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
5d7f9b1f
Commit
5d7f9b1f
authored
Jan 05, 2021
by
xiaotong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wording (sec 13)
parent
519548b8
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
14 行增加
和
17 行删除
+14
-17
Chapter13/chapter13.tex
+14
-17
没有找到文件。
Chapter13/chapter13.tex
查看文件 @
5d7f9b1f
...
...
@@ -526,7 +526,7 @@ Translation}嚗砲蝑霈支蛹摮虫砲敺芸蝘
% NEW SUBSUB-SECTION
%----------------------------------------------------------------------------------------
\subsubsection
{
1. 基
于策略
的强化学习方法
}
\subsubsection
{
1. 基于策略的方法
}
\parinterval
{
\small\bfnew
{
最小风险训练
}}
\index
{
最小风险训练
}
(Minimum Risk Training
\index
{
Minimum Risk Training
}
,MRT)可以被看作是一种基于策略的方法。与极大似然估计不同,最小风险训练引入了评价指标作为损失函数,并优化模型将预期风险降至最低
\upcite
{
DBLP:conf/acl/ShenCHHWSL16
}
。
...
...
@@ -570,7 +570,7 @@ Where did my optimum go?: An empiricalanalysis of gradient descent optimization
% NEW SUBSUB-SECTION
%----------------------------------------------------------------------------------------
\subsubsection
{
2.
基于演员-评论家的
强化学习方法
}
\subsubsection
{
2.
演员-评论家
方法
}
\parinterval
基于策略的强化学习是要寻找一个策略
$
\funp
{
p
}
(
a|
\tilde
{{
y
}}_{
1
\ldots
j
}
,
\seq
{
x
}
)
$
,使得该策略选择的行动
$
a
$
未来可以获得的奖励期望(也被称为
{
\small\bfnew
{
动作价值函数
}}
\index
{
动作价值函数
}
(Action-value Function)
\index
{
Action-value Function
}
)最大化。这个过程通常用函数
$
Q
$
来描述:
\begin{eqnarray}
...
...
@@ -585,7 +585,7 @@ Where did my optimum go?: An empiricalanalysis of gradient descent optimization
\label
{
eq:13-15
}
\end{eqnarray}
\noindent
其中,
$
A
$
表示所有可能的行动组成的空间,也就是词表
$
V
$
。公式
\eqref
{
eq:13-15
}
的含义是,最优的策略
$
\hat
{
p
}$
选择需要同时考虑当前决策的“信心”(即
$
\funp
{
p
}
(
a|
\tilde
{{
y
}}_{
1
\ldots
j
}
,
\seq
{
x
}
)
$
)和未来可以获得的“价值”(即
$
\funp
{
Q
}
(
a;
\tilde
{{
y
}}_{
1
\ldots
j
}
,
\seq
{
y
}
)
$
)。
\noindent
其中,
$
A
$
表示所有可能的行动组成的空间,也就是词表
$
V
$
。公式
\eqref
{
eq:13-15
}
的含义是,最优策略
$
\hat
{
p
}$
的选择需要同时考虑当前决策的“信心”(即
$
\funp
{
p
}
(
a|
\tilde
{{
y
}}_{
1
\ldots
j
}
,
\seq
{
x
}
)
$
)和未来可以获得的“价值”(即
$
\funp
{
Q
}
(
a;
\tilde
{{
y
}}_{
1
\ldots
j
}
,
\seq
{
y
}
)
$
)。
\parinterval
计算动作价值函数
$
\funp
{
Q
}$
需要枚举
$
j
$
时刻以后所有可能的序列,而可能的序列数目是随着其长度呈指数级增长,因此只能估计的方法计算
$
\funp
{
Q
}$
的值。基于策略的强化学习方法,如最小风险训练(风险
$
\vartriangle
=-
\funp
{
Q
}$
)等都使用了采样的方法来估计
$
\funp
{
Q
}$
。尽管采样估计的结果是
$
\funp
{
Q
}$
的无偏估计,但是它的缺点在于估计的方差比较大。而
$
\funp
{
Q
}$
直接关系到梯度更新的大小,不稳定的数值会导致模型更新不稳定,难以优化。
...
...
@@ -653,11 +653,9 @@ Where did my optimum go?: An empiricalanalysis of gradient descent optimization
\sectionnewpage
\section
{
知识蒸馏
}
\label
{
subsection-7.5.3
}
\parinterval
理想的机器翻译系统应该是品质好、速度块、存储占用少
。不过,为了追求更好的翻译品质,往往需要更
大的模型以及更慢的翻译速度,例如,可以通过增加模型参数量来达到更好的函数拟合效果,但是这也导致系统变得更加笨拙。在很多场景下,这样的模型甚至无法使用。比如,Transformer-Big等“大”模型通常在专用GPU服务器上运行,在手机等受限环境下仍很难应用。
\parinterval
理想的机器翻译系统应该是品质好、速度块、存储占用少
。不过,为了追求更好
的翻译品质,往往需要更大的模型,但是相应的翻译速度会降低。在很多场景下,这样的模型无法直接使用。比如,Transformer-Big等“大”模型通常在专用GPU服务器上运行,在手机等受限环境下仍很难应用。
\parinterval
另一方面,直接训练“小”模型的效果往往并不理想,其翻译品质与“大”模型相比仍有比较明显的差距。比如,在Transformer中,使用一个48层的编码器要比传统的6层编码器有更好的品质。
\parinterval
既然直接训练小模型无法达到更好的效果,一种有趣的想法是把“大”模型的知识传递给“小”模型,让“小”模型可以更好的进行学习。这类似于,教小孩子学习数学,是请一个权威数学家(数据中的标准答案),还是请一个小学数学教师(“大”模型)。这就是知识蒸馏的基本思想。
\parinterval
另一方面,直接训练“小”模型的效果往往并不理想,其翻译品质与“大”模型相比仍有比较明显的差距。既然直接训练小模型无法达到更好的效果,一种有趣的想法是把“大”模型的知识传递给“小”模型。这类似于,教小孩子学习数学,是请一个权威数学家(数据中的标准答案),还是请一个小学数学教师(“大”模型)。这就是知识蒸馏的基本思想。
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
...
...
@@ -677,7 +675,7 @@ Where did my optimum go?: An empiricalanalysis of gradient descent optimization
\vspace
{
0.5em
}
\end{itemize}
\parinterval
这里所说的第二个假设对应了机器学习中的一大类问题
\ \dash
\
{
\small\bfnew
{
学习难度
}}
\index
{
学习难度
}
(Learning Difficulty)
\index
{
Learning Difficulty
}
。所谓难度是指:在给定一个模型的情况下,需要花费多少代价对目标任务进行学习。如果目标任务很简单,同时模型与任务很匹配,那学习难度就会降低。如果目标任务很复杂,同时模型与其匹配程度很低,那学习难度就会很大。在自然语言处理任务中,这
个问
题的一种表现是:在很好的数据中学习的模型的翻译质量可能仍然很差。即使训练数据是完美的,但是模型仍然无法做到完美的学习。这可能是因为建模的不合理,导致模型无法描述目标任务中复杂的规律。也就是,纵然数据很好,但是模型学不到其中的“知识”。在机器翻译中这个问题体现的尤为明显。比如,在机器翻译系统
$
n
$
-best结果中挑选最好的译文(成为Oracle)作为训练样本让系统重新学习,系统仍然达不到Oracle的水平。
\parinterval
这里所说的第二个假设对应了机器学习中的一大类问题
\ \dash
\
{
\small\bfnew
{
学习难度
}}
\index
{
学习难度
}
(Learning Difficulty)
\index
{
Learning Difficulty
}
。所谓难度是指:在给定一个模型的情况下,需要花费多少代价对目标任务进行学习。如果目标任务很简单,同时模型与任务很匹配,那学习难度就会降低。如果目标任务很复杂,同时模型与其匹配程度很低,那学习难度就会很大。在自然语言处理任务中,这
个问题
的一种表现是:在很好的数据中学习的模型的翻译质量可能仍然很差。即使训练数据是完美的,但是模型仍然无法做到完美的学习。这可能是因为建模的不合理,导致模型无法描述目标任务中复杂的规律。也就是,纵然数据很好,但是模型学不到其中的“知识”。在机器翻译中这个问题体现的尤为明显。比如,在机器翻译系统
$
n
$
-best结果中挑选最好的译文(称为Oracle)作为训练样本让系统重新学习,系统仍然达不到Oracle的水平。
\parinterval
知识蒸馏本身也体现了一种“自学习”的思想。即利用模型(自己)的预测来教模型(自己)。这样既保证了知识可以向更轻量的模型迁移,同时也避免了模型从原始数据中学习难度大的问题。虽然“大”模型的预测中也会有错误,但是这种预测是更符合建模的假设的,因此“小”模型反倒更容易从不完美的信息中学习到更多的知识
\footnote
[15]
{
很多时候,“大”模型和“小”模型都是基于同一种架构,因此二者对问题的假设和模型结构都是相似的。
}
。类似于,刚开始学习围棋的人从职业九段身上可能什么也学不到,但是向一个业余初段的选手学习可能更容易入门。另外,也有研究表明:在机器翻译中,相比于“小”模型,“大”模型更容易进行优化,也更容易找到更好的模型收敛状态。因此在需要一个性能优越,存储较小的模型时,也会考虑将大模型压缩得到更轻量模型
\upcite
{
DBLP:journals/corr/abs-2002-11794
}
。
...
...
@@ -689,7 +687,7 @@ Where did my optimum go?: An empiricalanalysis of gradient descent optimization
\subsection
{
知识蒸馏的基本方法
}
\parinterval
知识蒸馏的基本
思路是让学生模型所表
示的函数尽可能去拟合教师模型所表示的函数
\upcite
{
Hinton2015Distilling
}
,通常有两种实现方式
\upcite
{
kim-rush-2016-sequence
}
:
\parinterval
知识蒸馏的基本
思路
是让学生模型尽可能去拟合教师模型
\upcite
{
Hinton2015Distilling
}
,通常有两种实现方式
\upcite
{
kim-rush-2016-sequence
}
:
\begin{itemize}
\vspace
{
0.5em
}
...
...
@@ -699,21 +697,21 @@ L_{\textrm{word}} = - \sum_{j=1}^n \sum_{y_j \in V} \textrm{P}_{\textrm{t}} (y_{
\label
{
eq:13-28
}
\end{eqnarray}
这里,
$
\textrm
{
P
}_{
\textrm
{
s
}}
(
y
_
j|
\seq
{
x
}
)
$
和
$
\textrm
{
P
}_{
\textrm
{
t
}}
(
y
_
i|
\seq
{
x
}
)
$
分别表示学生模型和
教
师模型在
$
j
$
位置的输出的概率。公式
\ref
{
eq:13-28
}
实际上在最小化教师模型和学生模型输出分布之间的交叉熵。
这里,
$
\textrm
{
P
}_{
\textrm
{
s
}}
(
y
_
j|
\seq
{
x
}
)
$
和
$
\textrm
{
P
}_{
\textrm
{
t
}}
(
y
_
i|
\seq
{
x
}
)
$
分别表示学生模型和
教师模型
在
$
j
$
位置输出的概率。公式
\eqref
{
eq:13-28
}
实际上在最小化教师模型和学生模型输出分布之间的交叉熵。
\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}
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-29
}
\end{eqnarray}
公式
\ref
{
eq:13-29
}
要求遍历所有可能的译文序列,并进行求和,当词表大小为
$
V
$
,序列长度为
$
n
$
时,则可能的序列的数量有
$
V
$
的
$
n
$
次幂,这么多的译文将消耗大量的计算资源。因此,会考虑用教师模型的真实输出序列
$
\tilde
{
\seq
{
y
}}$
来代替整个空间,即假设
$
\textrm
{
P
}_{
\textrm
{
t
}}
(
\tilde
{
\seq
{
y
}}
|
\seq
{
x
}
)=
1
$
。于是,目标函数变为:
公
式
\
eqref
{
eq:13-29
}
要求遍历所有可能的译文序列,并进行求和,当词表大小为
$
V
$
,序列长度为
$
n
$
时,则序列的数量有
$
V
$
的
$
n
$
次幂,这么多的译文将消耗大量的计算资源。因此,会考虑用教师模型的真实输出序列
$
\tilde
{
\seq
{
y
}}$
来代替整个空间,即假设
$
\textrm
{
P
}_{
\textrm
{
t
}}
(
\tilde
{
\seq
{
y
}}
|
\seq
{
x
}
)=
1
$
。于是,目标函数变为:
\begin{eqnarray}
L
_{
\textrm
{
seq
}}
= -
\textrm
{
logP
}_{
\textrm
{
s
}}
(
\tilde
{
\seq
{
y
}}
|
\seq
{
x
}
)
\label
{
eq:13-30
}
\end{eqnarray}
这样
的损失函数带来最直接的好处是,知识蒸馏的流程会非常简单。因为只需要利用教师模型将训练数据(源语言)翻译一遍,之后把它的输出替换为训练数据的目标语言部分。之后,利用得到的新的双语数据训练学
生模型即可,图
\ref
{
fig:13-41
}
展示了简化后词级和序列级的不同,其中词级知识蒸馏的解码端输入为真实双语数据的目标语言,并以教师模型输出的概率分布作为学习目标,而序列级则直接将教师模型推断后得到的结果作为解码端的输入,并将解码结果的One-hot向量作为学习目标。
这样
的损失函数最直接的好处是,知识蒸馏的流程会非常简单。因为只需要利用教师模型将训练数据(源语言)翻译一遍,
之后把它的输出替换为训练数据的目标语言部分。之后,利用得到的新的双语数据训练学生模型即可。图
\ref
{
fig:13-41
}
对比了词级和序列级知识蒸馏方法。
\vspace
{
0.5em
}
\end{itemize}
...
...
@@ -726,10 +724,9 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\tilde{\seq{y}} | \seq{x})
\end{figure}
%-------------------------------------------
\parinterval
本质上,基于单词的知识蒸馏和语言建模等问题的建模方式是一致的。在传统方法中,训练数据中的答案会被看作是一个One-hot分布,之后让模型去尽可能拟合这种分布。而这里,答案不再是一个One-hot分布,而是由教师模型生成的真实分布,但是损失函数的形式是一模一样的。在具体实现时,一个容易出现的问题是在词级别的知识蒸馏中,教师模型的Softmax可能会生成非常尖锐的分布。这时需要考虑对分布进行平滑,提高模型的泛化能力
\footnote
[16]
{
比如,可以在Softmax函数中加入一个参数
$
\alpha
$
,如
$
\textrm
{
Softmax
}
(
s
_
i
)=
\frac
{
\exp
(
s
_
i
/
\alpha
)
}{
\sum
_
j
\exp
(
s
_
i
/
\alpha
)
}$
。这样可以通过
$
\alpha
$
控制分布的平滑程度。
}
。
\parinterval
本质上,基于单词的知识蒸馏与语言建模等问题的建模方式是一致的。在传统方法中,训练数据中的答案会被看作是一个One-hot分布,之后让模型去尽可能拟合这种分布。而这里,答案不再是一个One-hot分布,而是由教师模型生成的真实分布,但是损失函数的形式是一模一样的。在具体实现时,一个容易出现的问题是在词级别的知识蒸馏中,教师模型的Softmax可能会生成非常尖锐的分布。这时需要考虑对分布进行平滑,提高模型的泛化能力,比如,可以在Softmax函数中加入一个参数
$
\alpha
$
,如
$
\textrm
{
Softmax
}
(
s
_
i
)=
\frac
{
\exp
(
s
_
i
/
\alpha
)
}{
\sum
_
j
\exp
(
s
_
j
/
\alpha
)
}$
。这样可以通过
$
\alpha
$
控制分布的平滑程度。
\parinterval
除了在模型最后输出的分布上
进行知识蒸馏,同样可以使用教师模型对学生模型的
{
\small\bfnew
{
中间层输出
}}
\index
{
中间层输出
}
(Hint-based Knowledge Transfer)
\index
{
Hint-based Knowledge Transfer
}
和
{
\small\bfnew
{
注意力分布
}}
\index
{
注意力分布
}
(Attention To Attention Transfe
r)
\index
{
Attention To Attention Transfer
}
进行约束。而对翻译常用的Transformer架构,也可以使用更精细的精炼方式对模型各个位置的知识重新设计了知识迁移的方法
\upcite
{
Jiao2020TinyBERTDB
}
。
\parinterval
除了在模型最后输出的分布上
进行知
识蒸馏,同样可以使用教师模型对学生模型的中间层输出和注意力分布进行约束。而对翻译常用的Transformer架构,也可以使用更精细的精炼方式对模型各个位置的知识重新设计了知识迁移的方法
\upcite
{
Jiao2020TinyBERTDB
}
。
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
...
...
@@ -737,7 +734,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\tilde{\seq{y}} | \seq{x})
\subsection
{
机器翻译中的知识蒸馏
}
\parinterval
在神经机器翻译中,通常使用公式
\ref
{
eq:13-30
}
的方法进行知识蒸馏,即通过教师模型构造伪数据,之后让学生模型从伪数据中学习。这样做的好处在于,系统研发人员不需要对系统进行任何修改,整个过程只需要调用教师模型和学生模型标准的训练和推断模块即可。
\parinterval
在神经机器翻译中,
通常
使用公式
\eqref
{
eq:13-30
}
的方法进行知识蒸馏,即通过教师模型构造伪数据,之后让学生模型从伪数据中学习。这样做的好处在于,系统研发人员不需要对系统进行任何修改,整个过程只需要调用教师模型和学生模型标准的训练和推断模块即可。
\parinterval
另一个问题是如何构造教师模型和学生模型。以Transformer为例,通常有两种思路:
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论