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
db70bd68
Commit
db70bd68
authored
Sep 19, 2020
by
xiaotong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wording (sec 12, why transformer)
parent
59f60902
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
13 行增加
和
13 行删除
+13
-13
Chapter12/Figures/figure-example-of-context-vector-calculation-process.tex
+3
-3
Chapter12/chapter12.tex
+10
-10
没有找到文件。
Chapter12/Figures/figure-example-of-context-vector-calculation-process.tex
查看文件 @
db70bd68
...
...
@@ -56,7 +56,7 @@
\node
[srcnode]
(src6) at ([xshift=0.5
\hnode
]src5.south west)
{
\scriptsize
{$
\langle
$
eos
$
\rangle
$}}
;
% target
\node
[tgtnode]
(tgt1) at (-6.0*0.5*
\hnode
,-1.05*
\hnode
+7.5*0.5*
\hnode
)
{
\scriptsize
{
你
}}
;
\node
[tgtnode]
(tgt1) at (-6.0*0.5*
\hnode
,-1.05*
\hnode
+7.5*0.5*
\hnode
)
{
\scriptsize
{
他
}}
;
\node
[tgtnode]
(tgt2) at ([yshift=-0.5
\hnode
]tgt1.north east)
{
\scriptsize
{
什么
}}
;
\node
[tgtnode]
(tgt3) at ([yshift=-0.5
\hnode
]tgt2.north east)
{
\scriptsize
{
都
}}
;
\node
[tgtnode]
(tgt4) at ([yshift=-0.5
\hnode
]tgt3.north east)
{
\scriptsize
{
没
}}
;
...
...
@@ -105,8 +105,8 @@
{
% coverage score formula node
\node
[anchor=north west] (formula) at ([xshift=-0.3
\hnode
,yshift=-1.5
\hnode
]attn11.south)
{
\small
{
不同
$
\vectorn
{
\emph
{
C
}}_
j
$
所对应的源语言词的权重是不同的
}}
;
\node
[anchor=north west] (example) at (formula.south west)
{
\footnotesize
{$
\vectorn
{
\emph
{
C
}}_
2
=
0
.
4
\times
\vectorn
{
\emph
{
h
}}
(
\textrm
{
“你”
}
)
+
0
.
4
\times
\vectorn
{
\emph
{
h
}}
(
\textrm
{
“什么”
}
)
+
$}}
;
\node
[anchor=north west] (example2) at ([yshift=0.4em]example.south west)
{
\footnotesize
{$
\ \ \ \ \ \ \ \
0
\times
\vectorn
{
\emph
{
h
}}
(
\textrm
{
“都”
}
)
+
0
.
1
\times
\vectorn
{
\emph
{
h
}}
(
\textrm
{
“ 没”
}
)
+
..
$}}
;
\node
[anchor=north west] (example) at (formula.south west)
{
\footnotesize
{$
\vectorn
{
\emph
{
C
}}_
2
=
0
.
4
\times
\vectorn
{
\emph
{
h
}}
(
\textrm
{
他
}
)
+
0
.
4
\times
\vectorn
{
\emph
{
h
}}
(
\textrm
{
什么
}
)
+
$}}
;
\node
[anchor=north west] (example2) at ([yshift=0.4em]example.south west)
{
\footnotesize
{$
\ \ \ \ \ \ \ \
0
\times
\vectorn
{
\emph
{
h
}}
(
\textrm
{
都
}
)
+
0
.
1
\times
\vectorn
{
\emph
{
h
}}
(
\textrm
{
没
}
)
+
..
$}}
;
}
%\visible<3->
...
...
Chapter12/chapter12.tex
查看文件 @
db70bd68
...
...
@@ -64,10 +64,10 @@
\noindent
其中,
$
\vectorn
{
\emph
{
h
}}_
i
$
为源语句子每个位置的表示结果,
$
\alpha
_{
i,j
}$
是目标位置
$
j
$
对
$
\vectorn
{
\emph
{
h
}}_
i
$
的注意力权重。而自注意力机制不仅可以处理两种语言句子之间的对应,它也可以对单语句子进行表示。以源语句子为例,自注意力机制将序列中每个位置的表示
$
\vectorn
{
\emph
{
h
}}_
i
$
看作
$
\mathrm
{
query
}$
(查询),并且将所有位置的表示看作
$
\mathrm
{
key
}$
(键)和
$
\mathrm
{
value
}$
(值)。自注意力模型通过计算当前位置与所有位置的匹配程度,也就是在注意力机制中提到的注意力权重,来对各个位置的
$
\mathrm
{
value
}$
进行加权求和。得到的结果可以被看作是在这个句子中当前位置的抽象表示。这个过程,可以叠加多次,形成多层注意力模型,对输入序列中各个位置进行更深层的表示。
\parinterval
举个例子,如图
\ref
{
fig:12-38
}
所示,一个汉语句子包含5个词。这里,用
$
h
$
(
你)表示“你”当前的表示结果,其中
$
h
(
\cdot
)
$
是一个函数,用于返回输入单词所在位置对应的表示结果(向量)。如果把“你”看作目标,这时
$
\mathrm
{
query
}$
就是
$
h
$
(你),
$
\mathrm
{
key
}$
和
$
\mathrm
{
value
}$
是图中所有位置的表示,即:
{$
h
$
(你)、
$
h
$
(什么)、
$
h
$
(也)、
$
h
$
(没)、
$
h
$
(学)
}
。在自注意力模型中,首先计算
$
\mathrm
{
query
}$
和
$
\mathrm
{
key
}$
的相关度,这里用
$
\alpha
_
i
$
表示
$
h
$
(你)和位置
$
i
$
的表示之间的相关性。然后,把
$
\alpha
_
i
$
作为权重,对不同位置上的
$
\mathrm
{
value
}$
进行加权求和。最终,得到新的表示结果
$
\tilde
{
h
}$
(你
):
\parinterval
举个例子,如图
\ref
{
fig:12-38
}
所示,一个汉语句子包含5个词。这里,用
$
h
$
(
他)表示“他”当前的表示结果,其中
$
h
(
\cdot
)
$
是一个函数,用于返回输入单词所在位置对应的表示结果(向量)。如果把“他”看作目标,这时
$
\mathrm
{
query
}$
就是
$
h
$
(他),
$
\mathrm
{
key
}$
和
$
\mathrm
{
value
}$
是图中所有位置的表示,即:
{$
h
$
(他)、
$
h
$
(什么)、
$
h
$
(也)、
$
h
$
(没)、
$
h
$
(学)
}
。在自注意力模型中,首先计算
$
\mathrm
{
query
}$
和
$
\mathrm
{
key
}$
的相关度,这里用
$
\alpha
_
i
$
表示
$
h
$
(他)和位置
$
i
$
的表示之间的相关性。然后,把
$
\alpha
_
i
$
作为权重,对不同位置上的
$
\mathrm
{
value
}$
进行加权求和。最终,得到新的表示结果
$
\tilde
{
h
}$
(他
):
\begin{eqnarray}
\tilde
{
h
}
(
\textrm
{
你
}
)
&
=
&
\alpha
_
1
{
h
}
(
\textrm
{
你
}
) +
\alpha
_
2
{
h
}
(
\textrm
{
什么
}
) +
\alpha
_
3
{
h
}
(
\textrm
{
也
}
) +
\nonumber
\\
\tilde
{
h
}
(
\textrm
{
他
}
)
&
=
&
\alpha
_
1
{
h
}
(
\textrm
{
他
}
) +
\alpha
_
2
{
h
}
(
\textrm
{
什么
}
) +
\alpha
_
3
{
h
}
(
\textrm
{
也
}
) +
\nonumber
\\
&
&
\alpha
_
4
{
h
}
(
\textrm
{
没
}
) +
\alpha
_
5
{
h
}
(
\textrm
{
学
}
)
\label
{
eq:12-42
}
\end{eqnarray}
...
...
@@ -82,9 +82,9 @@
\end{figure}
%----------------------------------------------
\parinterval
同理,也可以用同样的方法处理这个句子中的其他单词。可以看出,在注意力机制中,并不是使用类似于循环神经网络的记忆能力去访问历史信息。序列中所有单词之间的信息都是通过同一种操作(
$
\mathrm
{
query
}$
和
$
\mathrm
{
key
}$
的相关度)进行处理。这样,表示结果
$
\tilde
{
h
}
(
\textrm
{
你
}
)
$
在包含“你”这个单词的信息的同时,也包含了序列中其他词的信息。也就是,序列中每一个位置的表示结果中,都包含了其他位置的信息。从这个角度说,
$
\tilde
{
h
}
(
\textrm
{
你
}
)
$
已经不再是单词“你”自身的表示结果,而是一种在单词“你
”的位置上的全局信息的表示。
\parinterval
同理,也可以用同样的方法处理这个句子中的其他单词。可以看出,在注意力机制中,并不是使用类似于循环神经网络的记忆能力去访问历史信息。序列中所有单词之间的信息都是通过同一种操作(
$
\mathrm
{
query
}$
和
$
\mathrm
{
key
}$
的相关度)进行处理。这样,表示结果
$
\tilde
{
h
}
(
\textrm
{
他
}
)
$
在包含“他”这个单词的信息的同时,也包含了序列中其他词的信息。也就是,序列中每一个位置的表示结果中,都包含了其他位置的信息。从这个角度说,
$
\tilde
{
h
}
(
\textrm
{
他
}
)
$
已经不再是单词“他”自身的表示结果,而是一种在单词“他
”的位置上的全局信息的表示。
\parinterval
通常,也把生成
\{
$
\tilde
{
h
}
(
\vectorn
{
\emph
{
w
}}_
i
)
$
\}
的过程看作特征提取,而实现这个过程的模型被称为特征提取器。循环神经网络、自注意力模型都是典型的特征提取器。特征提取是神经机器翻译系统的关键步骤,在随后的内容中可以看到自注意力模型是一个非常适合机器翻译任务的特征提取器。
\parinterval
通常,也把生成
$
\tilde
{
h
}
(
w
_
i
)
$
的过程看作特征提取,而实现这个过程的模型被称为特征提取器。循环神经网络、自注意力模型都是典型的特征提取器。特征提取是神经机器翻译系统的关键步骤,在随后的内容中可以看到自注意力模型是一个非常适合机器翻译任务的特征提取器。
%----------------------------------------------------------------------------------------
% NEW SECTION
...
...
@@ -92,17 +92,17 @@
\sectionnewpage
\section
{
Transformer架构
}
本节会对Transformer模型
由来以及总体架构进行介绍。
下面对Transformer模型的
由来以及总体架构进行介绍。
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
%----------------------------------------------------------------------------------------
\subsection
{
为什么需要Transformer
}
\subsection
{
Transformer的优势
}
\parinterval
首先回顾一下
{
\chapterten
}
介绍的循环神经网络,虽然它很强大,但是也存在一些弊端。其中比较突出的问题是,循环神经网络每个循环单元都有向前依赖性,也就是当前时间步的处理依赖前一时间步处理的结果。这个性质可以使序列的“历史”信息不断被传递,但是也造成模型运行效率的下降。特别是对于自然语言处理任务,序列往往较长,无论是传统的RNN结构,还是更为复杂的LSTM结构,都需要很多次循环单元的处理才能够捕捉到单词之间的长距离依赖。由于需要多个循环单元的处理,距离较远的两个单词之间的信息传递变得很复杂。
\parinterval
首先
再来
回顾一下
{
\chapterten
}
介绍的循环神经网络,虽然它很强大,但是也存在一些弊端。其中比较突出的问题是,循环神经网络每个循环单元都有向前依赖性,也就是当前时间步的处理依赖前一时间步处理的结果。这个性质可以使序列的“历史”信息不断被传递,但是也造成模型运行效率的下降。特别是对于自然语言处理任务,序列往往较长,无论是传统的RNN结构,还是更为复杂的LSTM结构,都需要很多次循环单元的处理才能够捕捉到单词之间的长距离依赖。由于需要多个循环单元的处理,距离较远的两个单词之间的信息传递变得很复杂。
\parinterval
针对这些问题,
谷歌的研究人员提出了一种全新的模型
$
\ \dash\
$
Transformer
\upcite
{
NIPS2017
_
7181
}
。与循环神经网络等传统模型不同,Transformer模型仅仅使用一种被称作自注意力机制的方法
和标准的前馈神经网络,完全不依赖任何循环单元或者卷积操作。自注意力机制的优点在于可以直接对序列中任意两个单元之间的关系进行建模,这使得长距离依赖等问题可以更好地被求解。此外,自注意力机制非常适合在GPU 上进行并行化,因此模型训练的速度更快。表
\ref
{
tab:12-11
}
对比了RNN、CNN、Transformer三种模型的时间复杂度。
\parinterval
针对这些问题,
研究人员提出了一种全新的模型
$
\ \dash\
$
Transformer
\index
{
Transformer
}
\upcite
{
NIPS2017
_
7181
}
。与循环神经网络等传统模型不同,Transformer模型仅仅使用自注意力机制
和标准的前馈神经网络,完全不依赖任何循环单元或者卷积操作。自注意力机制的优点在于可以直接对序列中任意两个单元之间的关系进行建模,这使得长距离依赖等问题可以更好地被求解。此外,自注意力机制非常适合在GPU 上进行并行化,因此模型训练的速度更快。表
\ref
{
tab:12-11
}
对比了RNN、CNN、Transformer三种模型的时间复杂度。
%----------------------------------------------
\begin{table}
[htp]
...
...
@@ -118,7 +118,7 @@
\end{table}
%----------------------------------------------
\parinterval
Transformer在被提出之后,很快就席卷了整个自然语言处理领域。实际上,Transformer也可以当作一种表示模型,因此也被大量地使用在自然语言处理的其他领域,甚至图像处理和语音处理中也能看到它的影子。比如,目前非常流行的BERT等预训练模型就是基于Transformer。表
\ref
{
tab:12-12
}
展示了Transformer在WMT英德和英法机器翻译任务上的性能。它能用更少的计算量(FLOPS)达到比其他模型更好的翻译品质
\footnote
{
FLOPS = floating-point operations per second,即每秒浮点运算次数。它是度量计算机运算规模的常用单位
}
。
\parinterval
Transformer在被提出之后,很快就席卷了整个自然语言处理领域。实际上,Transformer也可以当作一种表示模型,因此也被大量地使用在自然语言处理的其他领域,甚至图像处理和语音处理中也能看到它的影子。比如,目前非常流行的BERT等预训练模型就是基于Transformer
(
{
\color
{
red
}
参考文献!
}
)
。表
\ref
{
tab:12-12
}
展示了Transformer在WMT英德和英法机器翻译任务上的性能。它能用更少的计算量(FLOPS)达到比其他模型更好的翻译品质
\footnote
{
FLOPS = floating-point operations per second,即每秒浮点运算次数。它是度量计算机运算规模的常用单位
}
。
%----------------------------------------------
\begin{table}
[htp]
...
...
@@ -126,7 +126,7 @@
\caption
{
不同翻译模型性能对比
\upcite
{
NIPS2017
_
7181
}}
\label
{
tab:12-12
}
\begin{tabular}
{
l l l l
}
\multicolumn
{
1
}{
l|
}{
\multirow
{
2
}{
*
}{
\#
}}
&
\multicolumn
{
2
}{
c
}{
BLEU
}
&
\multirow
{
2
}{
*
}{
\parbox
{
6em
}{
Training Cost
(FLOPs)
}}
\\
\multicolumn
{
1
}{
l|
}{
\multirow
{
2
}{
*
}{
系统
}}
&
\multicolumn
{
2
}{
c
}{
BLEU[
\%
]
}
&
\multirow
{
2
}{
*
}{
\parbox
{
6em
}{
模型训练代价
(FLOPs)
}}
\\
\multicolumn
{
1
}{
l|
}{}
&
EN-DE
&
EN-FR
&
\\
\hline
\multicolumn
{
1
}{
l|
}{
GNMT+RL
}
&
24.6
&
39.92
&
1.4
$
\times
10
^{
20
}$
\\
\multicolumn
{
1
}{
l|
}{
ConvS2S
}
&
25.16
&
40.46
&
1.5
$
\times
10
^{
20
}$
\\
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论