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
59f60902
Commit
59f60902
authored
Sep 19, 2020
by
xiaotong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wording (sec 12, introduction)
parent
f29a2a61
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
16 行增加
和
10 行删除
+16
-10
Chapter12/chapter12.tex
+16
-10
没有找到文件。
Chapter12/chapter12.tex
查看文件 @
59f60902
...
@@ -23,6 +23,10 @@
...
@@ -23,6 +23,10 @@
\chapter
{
基于自注意力的模型
}
\chapter
{
基于自注意力的模型
}
循环神经网络和卷积神经网络是两种经典的神经网络结构,在机器翻译中进行应用也是较为自然的想法。但是,这些模型在处理文字序列时也有问题:它们对序列中不同位置之间的依赖关系的建模并不直接。以卷积神经网络为例,如果要对长距离依赖进行描述,需要多层卷积操作,而且不同层之间信息传递也可能有损失,这些都限制了模型的能力。
为了更好地描述文字序列,研究人员提出了一种新的模型Transformer。Transformer并不依赖任何循环单元或者卷积单元,而是使用一种被称作自注意力网络的结构来对序列进行表示。自注意力可以非常高效的描述任意距离之间的依赖关系,因此非常适合处理语言文字序列。Transformer一经提出就受到的了广泛关注,现在已经成为了机器翻译中最先进的架构之一。本章将会对Transformer的基本结构和实现技术进行介绍。这部分知识也会在本书的前沿部分(
{
\chapterthirteen
}$
\sim
${
\chaptereighteen
}
)中大量使用。
%----------------------------------------------------------------------------------------
%----------------------------------------------------------------------------------------
% NEW SECTION 12.1
% NEW SECTION 12.1
%----------------------------------------------------------------------------------------
%----------------------------------------------------------------------------------------
...
@@ -41,7 +45,7 @@
...
@@ -41,7 +45,7 @@
\end{figure}
\end{figure}
%----------------------------------------------
%----------------------------------------------
\parinterval
那么能否摆脱这种顺序传递信息的方式,直接对不同位置单词之间的关系进行建模,即将信息传递的距离拉近为1?
{
\small\sffamily\bfseries
{
自注意力机制
}}
\index
{
自注意力机制
}
(Self-Attention
)
\index
{
Self-Attention
}
的提出便有效解决了这个问题
\upcite
{
DBLP:journals/corr/LinFSYXZB17
}
。图
\ref
{
fig:12-37
}
给出了自注意力机制对序列进行建模的示例。对于单词
$
w
_
m
$
,自注意力机制直接建立它与前
$
m
-
1
$
个单词之间的关系。也就是说,
$
w
_
m
$
与序列中所有其他单词的距离都是1。这种方式很好地解决了长距离依赖问题,同时由于单词之间的联系都是相互独立的,因此也大大提高了模型的并行度。
\parinterval
那么能否摆脱这种顺序传递信息的方式,直接对不同位置单词之间的关系进行建模,即将信息传递的距离拉近为1?
{
\small\sffamily\bfseries
{
自注意力机制
}}
\index
{
自注意力机制
}
(Self-Attention
Mechanism)
\index
{
Self-Attention Mechanism
}
的提出便有效解决了这个问题
\upcite
{
DBLP:journals/corr/LinFSYXZB17
}
。图
\ref
{
fig:12-37
}
给出了自注意力机制对序列进行建模的示例。对于单词
$
w
_
m
$
,自注意力机制直接建立它与前
$
m
-
1
$
个单词之间的关系。也就是说,
$
w
_
m
$
与序列中所有其他单词的距离都是1。这种方式很好地解决了长距离依赖问题,同时由于单词之间的联系都是相互独立的,因此也大大提高了模型的并行度。
%----------------------------------------------
%----------------------------------------------
\begin{figure}
[htp]
\begin{figure}
[htp]
...
@@ -58,7 +62,16 @@
...
@@ -58,7 +62,16 @@
\label
{
eq:12-4201
}
\label
{
eq:12-4201
}
\end{eqnarray}
\end{eqnarray}
\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
}$
进行加权求和。得到的结果可以被看作是在这个句子中当前位置的抽象表示。这个过程,可以叠加多次,形成多层注意力模型,对输入序列中各个位置进行更深层的表示。
\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
}$
(你):
\begin{eqnarray}
\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}
%----------------------------------------------
%----------------------------------------------
\begin{figure}
[htp]
\begin{figure}
[htp]
...
@@ -69,16 +82,9 @@
...
@@ -69,16 +82,9 @@
\end{figure}
\end{figure}
%----------------------------------------------
%----------------------------------------------
\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
\\
&
&
\alpha
_
4
{
h
}
(
\textrm
{
没
}
) +
\alpha
_
5
{
h
}
(
\textrm
{
学
}
)
\label
{
eq:12-42
}
\end{eqnarray}
\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
)
$
\}
的过程
称为
{
\small\sffamily\bfseries
{
特征提取
}}
\index
{
特征提取
}
,而实现这个过程的模型被称为特征提取器。循环神经网络、自注意力模型都是典型的特征提取器。特征提取是神经机器翻译系统的关键步骤,在随后的内容中可以看到自注意力模型是一个非常适合机器翻译任务的特征提取器。
\parinterval
通常,也把生成
\{
$
\tilde
{
h
}
(
\vectorn
{
\emph
{
w
}}_
i
)
$
\}
的过程
看作特征提取
,而实现这个过程的模型被称为特征提取器。循环神经网络、自注意力模型都是典型的特征提取器。特征提取是神经机器翻译系统的关键步骤,在随后的内容中可以看到自注意力模型是一个非常适合机器翻译任务的特征提取器。
%----------------------------------------------------------------------------------------
%----------------------------------------------------------------------------------------
% NEW SECTION
% NEW SECTION
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论