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
bf725b04
Commit
bf725b04
authored
Nov 30, 2020
by
孟霞
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
更新 chapter14.tex
parent
8bcacdc6
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
9 行增加
和
9 行删除
+9
-9
Chapter14/chapter14.tex
+9
-9
没有找到文件。
Chapter14/chapter14.tex
查看文件 @
bf725b04
...
...
@@ -296,7 +296,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\subsection
{
消除冗余计算
}
\parinterval
消除不必要的计算是加速机器翻译的常用技术。比如,在统计机器翻译时代,假设重组就是一种典型的避免冗余计算的手段(
\chapterfour
)。对于神经机器翻译中的Transformer 模型,一种简单有效的方法是对解码端的注意力结果进行缓存。在生成每个目标语译文时,Transformer 模型会对当前位置之前的所有位置进行自注意力操作,但是这些计算里只有和当前位置相关的计算是“新” 的,前面位置之间的注意力结果已经在之前的解码步骤里计算过,因此可以对其进行缓存。
\parinterval
消除不必要的计算是加速机器翻译的常用技术。比如,在统计机器翻译时代,假设重组就是一种典型的避免冗余计算的手段(
\chapterfour
)。对于神经机器翻译中的Transformer 模型,
消除冗余计算的
一种简单有效的方法是对解码端的注意力结果进行缓存。在生成每个目标语译文时,Transformer 模型会对当前位置之前的所有位置进行自注意力操作,但是这些计算里只有和当前位置相关的计算是“新” 的,前面位置之间的注意力结果已经在之前的解码步骤里计算过,因此可以对其进行缓存。
\parinterval
此外,由于Transformer 模型较为复杂,还存在很多冗余。比如,Transformer 的每一层会包含自注意力机制、层正则化、残差连接、前馈神经网络等多种不同的结构。同时,不同结构之间还会包含一些线性变换。多层Transformer(通常为6 层)模型会更加复杂。但是,这些层可能在做相似的事情,甚至有些计算根本就是重复的。图
\ref
{
fig:14-5
}
中展示了解码端自注意力和编码-解码注意力中不同层的注意力权重的相似性,这里的相似性利用JensenShannon散度进行度量
\upcite
{
61115
}
。可以看到,自注意力中,2-5层之间的注意力权重的分布非常相似。编码-解码注意力也有类似的现象,临近的层之间有非常相似的注意力权重。这个现象说明:在多层神经网络中有些计算是冗余的,因此很自然的想法是消除这些冗余使得机器翻译变得更“轻”。
...
...
@@ -321,7 +321,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\parinterval
另一种方法是对不同层的参数进行共享。这种方法虽然不能带来直接的提速,但是可以大大减小模型的体积。比如,可以重复使用同一层的参数完成多层的计算。极端一些的情况下,六层网络可以只使用一层网络的参数
\upcite
{
DBLP:conf/aaai/DabreF19
}
。不过,在深层模型中(层数> 20),浅层部分的差异往往较大,而深层(远离输出)之间的相似度会更高。这时可以考虑对深层的部分进行更多的共享。
\parinterval
减少冗余计算也代表了一种剪枝的思想。本质上,是
在
利用模型参数的稀疏性假设
\upcite
{
Narang2017BlockSparseRN,Gale2019TheSO
}
:一部分参数对模型整体的行为影响不大,因此可以直接被抛弃掉。这类方法也被使用在神经机器翻译模型的不同部分。比如,对于Transformer模型,也有研究发现多头注意力中的有些头是有冗余的
\upcite
{
Michel2019AreSH
}
,因此可以直接对其进行剪枝
\upcite
{
DBLP:journals/corr/abs-1905-09418
}
。
\parinterval
减少冗余计算也代表了一种剪枝的思想。本质上,是利用模型参数的稀疏性假设
\upcite
{
Narang2017BlockSparseRN,Gale2019TheSO
}
:一部分参数对模型整体的行为影响不大,因此可以直接被抛弃掉。这类方法也被使用在神经机器翻译模型的不同部分。比如,对于Transformer模型,也有研究发现多头注意力中的有些头是有冗余的
\upcite
{
Michel2019AreSH
}
,因此可以直接对其进行剪枝
\upcite
{
DBLP:journals/corr/abs-1905-09418
}
。
%----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION
...
...
@@ -331,13 +331,13 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\parinterval
在推断时,神经机器翻译的解码端是最耗时的,因为每个目标语位置需要单独输出单词的分布,同时在搜索过程中每一个翻译假设都要被扩展成多个翻译假设,进一步增加了计算量。因此,另一种加速系统的思路是使用更加轻量的解码器
\upcite
{
DBLP:journals/corr/HintonVD15,Munim2019SequencelevelKD
}
。
\parinterval
比较简单的做法是把解码端的网络变得更“浅”、更“窄”。所谓浅网络是指使用更少的层构建神经网络,比如,使用3 层,甚至1 层网络的Transformer 解码器。所谓窄网络是指将网络中某些层中神经元的数量减少。不过,直接训练这样的小模型会带来翻译品质的下降。这时会考虑使用知识
精炼
等技术来提升小模型的品质。
\parinterval
比较简单的做法是把解码端的网络变得更“浅”、更“窄”。所谓浅网络是指使用更少的层构建神经网络,比如,使用3 层,甚至1 层网络的Transformer 解码器。所谓窄网络是指将网络中某些层中神经元的数量减少。不过,直接训练这样的小模型会带来翻译品质的下降。这时会考虑使用知识
蒸馏(也称作知识精炼)
等技术来提升小模型的品质。
\parinterval
另一种思路是化简Transformer
的解码端神经网络。比如,可以使用平均注意力机制代替原始的Transformer
自注意力机制
\upcite
{
DBLP:journals/corr/abs-1805-00631
}
,也可以使用运算更轻的卷积操作代替注意力模块
\upcite
{
Wu2019PayLA
}
。前面提到的基于共享注意力机制的模型也是一种典型的轻量模型
\upcite
{
Xiao2019SharingAW
}
。
\parinterval
另一种思路是化简Transformer
解码端的神经网络。比如,可以使用平均注意力机制代替原始Transformer 中的
自注意力机制
\upcite
{
DBLP:journals/corr/abs-1805-00631
}
,也可以使用运算更轻的卷积操作代替注意力模块
\upcite
{
Wu2019PayLA
}
。前面提到的基于共享注意力机制的模型也是一种典型的轻量模型
\upcite
{
Xiao2019SharingAW
}
。
\parinterval
此外,使用异构神经网络也是一种平衡精度和速度的有效方法。在很多研究中发现,基于Transformer 的编码器对翻译品质的影响更大,而解码端的作用会小一些。因此,一种想法是
用更快速的解码端结构,比如,用基于循环神经网络的解码端替换
基于Transformer 的解码端
\upcite
{
Chen2018TheBO
}
。这样,既能发挥Transformer 在编码上的优势,同时也能利用循环神经网络在解码端速度上的优势。使用类似的思想,也可以用卷积网络等结构进行解码端网络的设计。此外,也有研究者对注意力机制进行优化,以达到加速Transformer模型的目的
\upcite
{
DBLP:journals/corr/abs-1805-00631,Kitaev2020ReformerTE,Katharopoulos2020TransformersAR,DBLP:journals/corr/abs-2006-04768
}
。
\parinterval
此外,使用异构神经网络也是一种平衡精度和速度的有效方法。在很多研究中发现,基于Transformer 的编码器对翻译品质的影响更大,而解码端的作用会小一些。因此,一种想法是
使用更快速的解码端结构,比如,用基于循环神经网络的解码端代替
基于Transformer 的解码端
\upcite
{
Chen2018TheBO
}
。这样,既能发挥Transformer 在编码上的优势,同时也能利用循环神经网络在解码端速度上的优势。使用类似的思想,也可以用卷积网络等结构进行解码端网络的设计。此外,也有研究者对注意力机制进行优化,以达到加速Transformer模型的目的
\upcite
{
DBLP:journals/corr/abs-1805-00631,Kitaev2020ReformerTE,Katharopoulos2020TransformersAR,DBLP:journals/corr/abs-2006-04768
}
。
\parinterval
针对轻量级Transformer模型的设计也包括层级的结构剪枝,这类方法试图通过跳过某些操作或者某些层来降低计算量。典型的相关工作是样本自适应网络结构,如 FastBERT
\upcite
{
Liu2020FastBERTAS
}
、Depth Adaptive Transformer
\upcite
{
Elbayad2020DepthAdaptiveT
}
和LayerDrop
\upcite
{
DBLP:conf/iclr/FanGJ20
}
等,与传统的Transformer的解码过程不同,这类网络结构在推断时不需要计算全部
解码层,而是根据输入自动选择模型的部分层进行计算,达到加速和减少参数量的目的。此外,矩阵分解也是一种轻量级模型解决方案,这类方法通过矩阵分解的方法提升计算效率,通过简化复杂的矩阵计算来达到加速模型训练和推断的目的。例如 Adaptive Input Representations
\upcite
{
DBLP:conf/iclr/BaevskiA19
}
提出词频自适应表示,词频越高则对应的词向量维度越大,反之越小,显著减少了
词向量矩阵大小。此外还有一些工作尝试消除注意力机制中的冗余计算,对层与层之间的参数进行共享
\upcite
{
Xiao2019SharingAW
}
或者是对跨层参数进行共享
\upcite
{
Lan2020ALBERTAL
}
,以达到加速Transformer模型的目的
\upcite
{
DBLP:journals/corr/abs-1805-00631,Kitaev2020ReformerTE,Katharopoulos2020TransformersAR,DBLP:journals/corr/abs-2006-04768
}
。
\parinterval
针对轻量级Transformer模型的设计也包括层级的结构剪枝,这类方法试图通过跳过某些操作或者某些层来降低计算量。典型的相关工作是样本自适应网络结构,如 FastBERT
\upcite
{
Liu2020FastBERTAS
}
、Depth Adaptive Transformer
\upcite
{
Elbayad2020DepthAdaptiveT
}
和LayerDrop
\upcite
{
DBLP:conf/iclr/FanGJ20
}
等,与传统的Transformer的解码过程不同,这类网络结构在推断时不需要计算全部
的解码层,而是根据输入自动选择模型的部分层进行计算,达到加速和减少参数量的目的。此外,矩阵分解也是一种轻量级模型解决方案,这类方法通过矩阵分解的方法提升计算效率,通过简化复杂的矩阵计算来达到加速模型训练和推断的目的。例如 Adaptive Input Representations
\upcite
{
DBLP:conf/iclr/BaevskiA19
}
提出词频自适应表示,词频越高则对应的词向量维度越大,反之越小,该方法可以显著减少
词向量矩阵大小。此外还有一些工作尝试消除注意力机制中的冗余计算,对层与层之间的参数进行共享
\upcite
{
Xiao2019SharingAW
}
或者是对跨层参数进行共享
\upcite
{
Lan2020ALBERTAL
}
,以达到加速Transformer模型的目的
\upcite
{
DBLP:journals/corr/abs-1805-00631,Kitaev2020ReformerTE,Katharopoulos2020TransformersAR,DBLP:journals/corr/abs-2006-04768
}
。
%----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION
...
...
@@ -347,13 +347,13 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\parinterval
深度学习时代下,使用GPU(图形处理单元)已经成为绝大多数神经网络模型研究的基本要求。特别是对于机器翻译这样的复杂任务,GPU 的并行运算能力会带来明显的速度提升。为了充分利用GPU 的并行能力,可以同时对多个句子进行翻译,即
{
\small\sffamily\bfseries
{
批量推断
}}
\index
{
批量推断
}
(Batch Inference)
\index
{
Batch Inference
}
。
\parinterval
在
\chaptersix
已经介绍了神经机器翻译中
{
\small\sffamily\bfseries
{
批量处理
}}
\index
{
批量处理
}
(Batching)
\index
{
Batching
}
的基本概念
。
其实现并不困难,不过有两方面问题需要注意:
\parinterval
在
\chaptersix
已经介绍了神经机器翻译中
{
\small\sffamily\bfseries
{
批量处理
}}
\index
{
批量处理
}
(Batching)
\index
{
Batching
}
的基本概念
,
其实现并不困难,不过有两方面问题需要注意:
\begin{itemize}
\vspace
{
0.5em
}
\item
批次生成策略。对于源语言文本预先给定的情况,通常是按句子长度组织每个批次,即:把长度相似的句子放到一个批次里。这样做的好处是可以尽可能保证一个批次中的内容是“满” 的,否则如果句长差异过大会造成批次中有很多位置用占位符填充,产生无用计算。对于实时翻译的情况,批次的组织较为复杂。由于有翻译
延时
的限制,可能无法等到有足够多的句子就要进行翻译。常见的做法是,设置一个等待的时间,在同一个时间段中的句子可以放到一个批次中(或者几个批次中)。对于高并发的情况,也可以考虑使用不同的Bucket保存不同长度范围的句子,之后将同一个Bucket 中的句子进行批量推断。
\item
批次生成策略。对于源语言文本预先给定的情况,通常是按句子长度组织每个批次,即:把长度相似的句子放到一个批次里。这样做的好处是可以尽可能保证一个批次中的内容是“满” 的,否则如果句长差异过大会造成批次中有很多位置用占位符填充,产生无用计算。对于实时翻译的情况,批次的组织较为复杂。由于有翻译
时延
的限制,可能无法等到有足够多的句子就要进行翻译。常见的做法是,设置一个等待的时间,在同一个时间段中的句子可以放到一个批次中(或者几个批次中)。对于高并发的情况,也可以考虑使用不同的Bucket保存不同长度范围的句子,之后将同一个Bucket 中的句子进行批量推断。
\vspace
{
0.5em
}
\item
批次大小的选择。一个批次中的句子数量越多,GPU 设备的利用率越高,系统吞吐越大。但是,一个批次中所有句子翻译结束后才能拿到翻译结果,因此批次中有些句子即使已经翻译结束也要等待其它没有完成的句子。也就是说,从单个句子来看,批次越大翻译的延时越长,这也导致在翻译实时性要求较高的场景中,不能使用过大的批次。而且,大批次对GPU 显存的消耗更大,因此也需要根据具体任务合理选择批次大小。为了说明这些问题,图
\ref
{
fig:14-7
}
展示了不同批次大小下的吞吐、
延时
和显存消耗。
\item
批次大小的选择。一个批次中的句子数量越多,GPU 设备的利用率越高,系统吞吐越大。但是,一个批次中所有句子翻译结束后才能拿到翻译结果,因此批次中有些句子即使已经翻译结束也要等待其它没有完成的句子。也就是说,从单个句子来看,批次越大翻译的延时越长,这也导致在翻译实时性要求较高的场景中,不能使用过大的批次。而且,大批次对GPU 显存的消耗更大,因此也需要根据具体任务合理选择批次大小。为了说明这些问题,图
\ref
{
fig:14-7
}
展示了不同批次大小下的吞吐、
时延
和显存消耗。
\vspace
{
0.5em
}
\end{itemize}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论