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
b4cb5733
Commit
b4cb5733
authored
Jan 26, 2021
by
单韦乔
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
15章更新
parent
d20babe2
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
28 行增加
和
28 行删除
+28
-28
Chapter15/Figures/figure-attention-distribution-based-on-gaussian-distribution.tex
+3
-3
Chapter15/chapter15.tex
+25
-25
没有找到文件。
Chapter15/Figures/figure-attention-distribution-based-on-gaussian-distribution.tex
查看文件 @
b4cb5733
...
...
@@ -90,12 +90,12 @@
\draw
[-,dotted]
([xshift=-1em,yshift=-3.5em]c1.south)--([xshift=9.3em,yshift=-3.5em]c1.south);
\draw
[-,dotted]
([xshift=-1em,yshift=-5em]c1.south)--([xshift=9.3em,yshift=-5em]c1.south);
\node
[anchor=south,colnode,minimum height=0.
1
5em,minimum width=1em] (b1) at ([xshift=0em,yshift=-5em]c1.south)
{}
;
\node
[anchor=south,colnode,minimum height=0.
8
5em,minimum width=1em] (b1) at ([xshift=0em,yshift=-5em]c1.south)
{}
;
\node
[anchor=south,colnode,minimum height=4.2em,minimum width=1em] (b2) at ([xshift=1.67em,yshift=0em]b1.south)
{}
;
\node
[anchor=south,colnode,minimum height=3.
7
em,minimum width=1em] (b3) at ([xshift=1.67em,yshift=0em]b2.south)
{}
;
\node
[anchor=south,colnode,minimum height=3.
2
em,minimum width=1em] (b3) at ([xshift=1.67em,yshift=0em]b2.south)
{}
;
\node
[anchor=south,colnode,minimum height=4.2em,minimum width=1em] (b4) at ([xshift=1.67em,yshift=0em]b3.south)
{}
;
\node
[anchor=south,colnode,minimum height=1.4em,minimum width=1em] (b5) at ([xshift=1.67em,yshift=0em]b4.south)
{}
;
\node
[anchor=south,colnode,minimum height=0.
1
5em,minimum width=1em] (b6) at ([xshift=1.67em,yshift=0em]b5.south)
{}
;
\node
[anchor=south,colnode,minimum height=0.
3
5em,minimum width=1em] (b6) at ([xshift=1.67em,yshift=0em]b5.south)
{}
;
{
\scriptsize
\node
[anchor=center] (n1) at ([xshift=0em,yshift=-1em]b1.south)
{
\color
{
orange
}
It
}
;
...
...
Chapter15/chapter15.tex
查看文件 @
b4cb5733
...
...
@@ -71,7 +71,7 @@
\label
{
eq:15-3
}
\end{eqnarray}
\noindent
其中,
$
\mathbi
{
x
}$
为上一层的输出
\footnote
[2]
{
这里,
$
\mathbi
{
K
}$
、
$
\mathbi
{
Q
}$
、
$
\mathbi
{
V
}$
的定义与
{
\chaptertwelve
}
略有不同,因为在这里的
$
\mathbi
{
K
}$
、
$
\mathbi
{
Q
}$
、
$
\mathbi
{
V
}$
是指对注意力模型输入进行线性变换后的结果,而
{
\chaptertwelve
}
中
$
\mathbi
{
K
}$
、
$
\mathbi
{
Q
}$
、
$
\mathbi
{
V
}$
直接表示输入。但是,这两种描述方式本质上是一样的,区别仅仅在于对输入的线性变化是放在输入自身中描述,还是作为输入之后的一个额外操作。
}
,
$
\mathbi
{
W
}_
Q
$
、
$
\mathbi
{
W
}_
K
$
、
$
\mathbi
{
W
}_
V
$
为模型参数,它们可以通过自动学习得到。此时,对于整个模型输入的向量序列
$
\
seq
{
x
}
=
\{\mathbi
{
x
}_
1
,
\ldots
,
\mathbi
{
x
}_
m
\}
${
\red
(序列x和上面的x是一个东西?)
}
,通过点乘计算,可以得到当前位置
$
i
$
和序列中所有位置间的关系,记为
$
\mathbi
{
z
}_{
i
}
$
,计算公式如下:
\noindent
其中,
$
\mathbi
{
x
}$
为上一层的输出
\footnote
[2]
{
这里,
$
\mathbi
{
K
}$
、
$
\mathbi
{
Q
}$
、
$
\mathbi
{
V
}$
的定义与
{
\chaptertwelve
}
略有不同,因为在这里的
$
\mathbi
{
K
}$
、
$
\mathbi
{
Q
}$
、
$
\mathbi
{
V
}$
是指对注意力模型输入进行线性变换后的结果,而
{
\chaptertwelve
}
中
$
\mathbi
{
K
}$
、
$
\mathbi
{
Q
}$
、
$
\mathbi
{
V
}$
直接表示输入。但是,这两种描述方式本质上是一样的,区别仅仅在于对输入的线性变化是放在输入自身中描述,还是作为输入之后的一个额外操作。
}
,
$
\mathbi
{
W
}_
Q
$
、
$
\mathbi
{
W
}_
K
$
、
$
\mathbi
{
W
}_
V
$
为模型参数,它们可以通过自动学习得到。此时,对于整个模型输入的向量序列
$
\
mathbi
{
x
}
=
\{\mathbi
{
x
}_
1
,
\ldots
,
\mathbi
{
x
}_
m
\}
$
,通过点乘计算,可以得到当前位置
$
i
$
和序列中所有位置间的关系,记为
$
\mathbi
{
z
}_{
i
}
$
,计算公式如下:
\begin{eqnarray}
\mathbi
{
z
}_{
i
}
&
=
&
\sum
_{
j=1
}^
m
\alpha
_{
ij
}
(
\mathbi
{
x
}_
j
\mathbi
{
W
}_
V)
\label
{
eq:15-4
}
...
...
@@ -79,7 +79,7 @@
\noindent
这里,
$
\mathbi
{
z
}_{
i
}$
可以被看做是输入序列的线性加权表示结果。权重
$
\alpha
_{
ij
}$
通过Softmax函数得到:
\begin{eqnarray}
\alpha
_{
ij
}
&
=
&
\frac
{
\exp
\mathbi
{
e
}_{
ij
}}{
\sum
_{
k=1
}^{
m
}
\mathbi
{
e
}_{
ik
}
}
\alpha
_{
ij
}
&
=
&
\frac
{
\exp
(
\mathbi
{
e
}_{
ij
}
)
}{
\sum
_{
k=1
}^{
m
}
\exp
(
\mathbi
{
e
}_{
ik
}
)
}
\label
{
eq:15-5
}
\end{eqnarray}
...
...
@@ -95,7 +95,7 @@
\begin{itemize}
\vspace
{
0.5em
}
\item
{
\small\bfnew
{
相对位置编码
}}
\index
{
相对位置编码
}
(Relative Positional Representation)
\index
{
Relative Positional Representation
}
\upcite
{
Shaw2018SelfAttentionWR
}
。核心思想是在能够捕获全局依赖的自注意力机制中引入相对位置信息。该方法可以有效补充绝对位置编码的不足,甚至完全取代绝对位置编码。对于Transformer模型中的任意一层,假设
$
\mathbi
{
x
}_
i
$
和
$
\mathbi
{
x
}_
j
$
是位置
$
i
$
和
$
j
$
的输入向量(也就是来自上一层位置
$
i
$
和
$
j
$
的输出向量),二者的位置关系可以通过向量
$
\mathbi
{
a
}_{
ij
}^
V
$
和
$
\mathbi
{
a
}_{
ij
}^
K
$
来表示,定义如下:
\item
{
\small\bfnew
{
相对位置编码
}}
\index
{
相对位置编码
}
(Relative Positional Representation)
\index
{
Relative Positional Representation
}
\upcite
{
Shaw2018SelfAttentionWR
}
。核心思想是在能够捕获全局依赖的自注意力机制中引入相对位置信息。该方法可以有效补充绝对位置编码的不足,甚至完全取代绝对位置编码。对于Transformer模型中的任意一层,假设
$
\mathbi
{
x
}_
i
$
和
$
\mathbi
{
x
}_
j
$
是位置
$
i
$
和
$
j
$
的输入向量(也就是来自上一层位置
$
i
$
和
$
j
$
的输出向量),二者的位置关系可以通过向量
$
\mathbi
{
a
}_{
ij
}^
V
$
和
$
\mathbi
{
a
}_{
ij
}^
K
$
来表示,定义如下:
{
\red
(下面的wk和上面的wk是一个东西吗?)
}
\begin{eqnarray}
\mathbi
{
a
}_{
ij
}^
K
&
=
&
\mathbi
{
w
}^
K
_{
\textrm
{
clip
}
(j-i,k)
}
\label
{
eq:15-7
}
\\
\mathbi
{
a
}_{
ij
}^
V
&
=
&
\mathbi
{
w
}^
V
_{
\textrm
{
clip
}
(j-i,k)
}
\label
{
eq:15-8
}
\\
...
...
@@ -168,7 +168,7 @@ A_{ij}^{\rm rel} &=& \underbrace{\mathbi{E}_{x_i}\mathbi{W}_Q\mathbi{W}_{K}^{T}\
\begin{itemize}
\vspace
{
0.5em
}
\item
{
\small\bfnew
{
引入高斯约束
}}
\upcite
{
Yang2018ModelingLF
}
。如图
\ref
{
fig:15-3
}
所示,这类方法的核心思想是引入可学习的高斯分布
$
\mathbi
{
G
}$
作为局部约束,与注意力权重进行融合。
{
\red
(曲线再问问?)
}
\item
{
\small\bfnew
{
引入高斯约束
}}
\upcite
{
Yang2018ModelingLF
}
。如图
\ref
{
fig:15-3
}
所示,这类方法的核心思想是引入可学习的高斯分布
$
\mathbi
{
G
}$
作为局部约束,与注意力权重进行融合。
%----------------------------------------------
\begin{figure}
[htp]
...
...
@@ -181,17 +181,17 @@ A_{ij}^{\rm rel} &=& \underbrace{\mathbi{E}_{x_i}\mathbi{W}_Q\mathbi{W}_{K}^{T}\
\noindent
具体的形式如下:
\begin{eqnarray}
\mathbi
{
e
}_{
ij
}
&
=
&
\frac
{
(
\mathbi
{
x
}_
i
\mathbi
{
W
}_
Q)
{
(
\mathbi
{
x
}_
j
\mathbi
{
W
}_
K)
}^{
T
}}{
\sqrt
{
d
_
k
}}
+
\mathbi
{
G
}
\mathbi
{
e
}_{
ij
}
&
=
&
\frac
{
(
\mathbi
{
x
}_
i
\mathbi
{
W
}_
Q)
{
(
\mathbi
{
x
}_
j
\mathbi
{
W
}_
K)
}^{
T
}}{
\sqrt
{
d
_
k
}}
+
G
_{
ij
}
\label
{
eq:15-15
}
\end{eqnarray}
\noindent
其中,
$
\mathbi
{
G
}
\in
\mathbb
{
R
}^{
m
\times
m
}$
。
$
\mathbi
{
G
}$
中的每个元素
$
G
_{
ij
}$
表示位置
$
j
$
和预测的中心位置
$
P
_
i
$
之间的关联程度,
计算公式如下:
\noindent
其中,
$
G
_{
ij
}$
表示位置
$
j
$
和预测的中心位置
$
P
_
i
$
之间的关联程度,
$
G
_{
ij
}$
是
$
\mathbi
{
G
}$
中的一个元素,
$
\mathbi
{
G
}
\in
\mathbb
{
R
}^{
m
\times
m
}$
。
计算公式如下:
\begin{eqnarray}
G
_{
ij
}
&
=
&
-
\frac
{{
(j - P
_
i)
}^
2
}{
2
\sigma
_
i
^
2
}
\label
{
eq:15-16
}
\end{eqnarray}
\noindent
其中,
$
\sigma
_
i
$
表示偏差,被定义为
局部建模窗口大小
$
D
_
i
$
的一半
{
\red
(第i个词?)
}
,即
$
\sigma
_
i
=
\frac
{
D
_
i
}{
2
}$
。中心位置
$
P
_
i
$
和
$
D
_
i
$
的计算方式如下:
{
\red
(局部建模窗口?)
}
\noindent
其中,
$
\sigma
_
i
$
表示偏差,被定义为
{
\red
第
$
i
$
个词的
}
局部建模窗口大小
$
D
_
i
$
的一半,即
$
\sigma
_
i
=
\frac
{
D
_
i
}{
2
}$
。中心位置
$
P
_
i
$
和
{
\red
局部建模窗口
}$
D
_
i
$
的计算方式如下:
\begin{eqnarray}
\begin{pmatrix}
P
_
i
\\
D
_
i
\end{pmatrix}
&
=
&
m
\cdot
\textrm
{
Sigmoid
}
(
\begin{pmatrix}
p
_
i
\\
v
_
i
\end{pmatrix}
)
\label
{
eq:15-17
}
...
...
@@ -218,19 +218,19 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\end{figure}
%-------------------------------------------
\noindent
于是,注意力每个头的计算过程如下:
\noindent
于是,注意力每个头的计算过程如下
{
\red
(20的分子维度是否对应?)
}
:
\begin{eqnarray}
\mathbi
{
e
}_{
ij
}
&
=
&
\frac
{
(
\mathbi
{
x
}_
i
\mathbi
{
W
}_
Q)
{
(C(
\mathbi
{
x
}_
j
\mathbi
{
W
}_
K,
\omega
))
}^{
T
}}{
\sqrt
{
d
_
k
}}
\label
{
eq:15-20
}
\end{eqnarray}
\noindent
其中,
$
C
(
\mathbi
{
x
}_
j
\mathbi
{
W
}_
K,
\omega
)
$
表示根据超参数
$
\omega
$
自适应的Key
:
{
\red
(这块的反馈是什么意思?)
}
\noindent
其中,
$
C
(
\mathbi
{
x
}_
j
\mathbi
{
W
}_
K,
\omega
)
$
表示根据超参数
$
\omega
$
自适应的Key
{
\red
(这里确实容易有歧义,因为一般xj这种都是第j列,或者第j个,但是这里取得应该是K的第j-w到第j+w行,最好加点维度说明)
}
:
\begin{eqnarray}
C(
\mathbi
{
x
}_
j
\mathbi
{
W
}_
K,
\omega
)
&
=
&
(
\mathbi
{
x
}_{
j-
\omega
}
,
\ldots
,
\mathbi
{
x
}_{
j+
\omega
}
)
C(
\mathbi
{
x
}_
j
\mathbi
{
W
}_
K,
\omega
)
&
=
&
(
\mathbi
{
K
}_{
j-
\omega
}
,
\ldots
,
\mathbi
{
K
}_{
j+
\omega
}
)
\label
{
eq:15-21
}
\end{eqnarray}
\noindent
之后在计算注意力输出时同样利用上述思想进行局部约束:
\noindent
{
\red
其中,
$
\mathbi
{
K
}
=
\mathbi
{
x
}
\mathbi
{
W
}_
K
$
,
$
\mathbi
{
x
}_
j
$
表示输入向量序列
$
\mathbi
{
x
}$
中的第
$
j
$
个词,
$
\mathbi
{
K
}_{
j
}$
表示第
$
j
$
个词对应的key。
}
之后在计算注意力输出时同样利用上述思想进行局部约束:
\begin{eqnarray}
\mathbi
{
z
}_
i
&
=
&
\sum
_{
j=1
}^
m
\alpha
_{
ij
}
C(
\mathbi
{
x
}_
j
\mathbi
{
W
}_
V,
\omega
)
\label
{
eq:15-22
}
...
...
@@ -239,7 +239,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\vspace
{
0.5em
}
\end{itemize}
\parinterval
{
\red
(这块的反馈是什么意思?)
}
值得注意的是上述两种添加局部约束的方法都更适用于Transformer模型的底层网络。这是由于模型离输入更近的层更倾向于捕获局部信息
{
\red
(是否需要引用论文,或者使用公式证明)
}
,伴随着神经网络的加深,模型更倾向于逐渐加强全局建模的能力。类似的结论在针对BERT模型的解释性研究工作中也有论述
\upcite
{
Jawahar2019WhatDB,DBLP:conf/emnlp/Ethayarajh19
}
。
\parinterval
值得注意的是上述两种添加局部约束的方法都更适用于Transformer模型的底层网络。这是由于模型离输入更近的层更倾向于捕获局部信息
{
\red
(是否需要引用论文,或者使用公式证明)
}
,伴随着神经网络的加深,模型更倾向于逐渐加强全局建模的能力。类似的结论在针对BERT模型的解释性研究工作中也有论述
\upcite
{
Jawahar2019WhatDB,DBLP:conf/emnlp/Ethayarajh19
}
。
%----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION
...
...
@@ -253,9 +253,9 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\vspace
{
0.5em
}
\item
{
\small\bfnew
{
使用轻量卷积和动态卷积神经网络
}}
\upcite
{
Wu2019PayLA,DBLP:conf/interspeech/GulatiQCPZYHWZW20
}
。比如,分别在编码器和解码器利用轻量卷积或动态卷积神经网络(见
{
\chapternine
}
)替换Transformer的自注意力机制,同时保留解码器的编码-解码注意力机制,一定程度上加强了模型对局部信息的建模能力,同时提高了计算效率。
\vspace
{
0.5em
}
\item
{
\small\bfnew
{
使用1维卷积注意力网络
}}
(图
\ref
{
fig:15-5
}
(b))
{
\red
(没引用?)
}
。可以使用一维的卷积自注意力网络(1D-CSAN)将关注的范围限制在相近的元素窗口中。其形式上十分简单,只需预先设定好局部建模的窗口大小
$
D
$
,并在进行注意力权重计算和对Value值进行加权求和时,将其限制在设定好的窗口范围内。
\item
{
\small\bfnew
{
使用1维卷积注意力网络
}}
\upcite
{
DBLP:journals/corr/abs-1904-03107
}
(图
\ref
{
fig:15-5
}
(b))
。可以使用一维的卷积自注意力网络(1D-CSAN)将关注的范围限制在相近的元素窗口中。其形式上十分简单,只需预先设定好局部建模的窗口大小
$
D
$
,并在进行注意力权重计算和对Value值进行加权求和时,将其限制在设定好的窗口范围内。
\vspace
{
0.5em
}
\item
{
\small\bfnew
{
使用2维卷积注意力网络
}}
(图
\ref
{
fig:15-5
}
(c))。在一维卷积注意力网络的基础上,对多个注意力头之间的信息进行交互建模,打破了注意力头之间的界限。
1D-CDAN
{
\red
(S?)
}
的关注区域为
$
1
\times
D
$
,当将其扩展为二维矩形
$
D
\times
N
$
,长和宽分别为局部窗口的大小和参与建模的自注意力头的个数。这样,模型可以计算某个头中的第
$
i
$
个元素和另一个头中的第
$
j
$
个元素之间的相关性系数,实现了对不同子空间之间关系的建模,所得到的注意力分布
{
\red
(哪里得到了?)
}
表示了头之间的依赖关系。
\item
{
\small\bfnew
{
使用2维卷积注意力网络
}}
(图
\ref
{
fig:15-5
}
(c))。在一维卷积注意力网络的基础上,对多个注意力头之间的信息进行交互建模,打破了注意力头之间的界限。
1D-CSAN
的关注区域为
$
1
\times
D
$
,当将其扩展为二维矩形
$
D
\times
N
$
,长和宽分别为局部窗口的大小和参与建模的自注意力头的个数。这样,模型可以计算某个头中的第
$
i
$
个元素和另一个头中的第
$
j
$
个元素之间的相关性系数,实现了对不同子空间之间关系的建模,所得到的注意力分布
{
\red
(哪里得到了?)
}
表示了头之间的依赖关系。
%----------------------------------------------
\begin{figure}
[htp]
...
...
@@ -281,9 +281,9 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\begin{itemize}
\vspace
{
0.5em
}
\item
{
\
small\bfnew
{
Weighted Transformer
}}
\upcite
{
DBLP:journals/corr/abs-1711-02132
}
。其主要思想是在多头自注意力机制的基础上保留不同表示空间的特征。传统方法使用级联操作并通过线性映射矩阵来融合不同头之间的信息,而Weighted
Transformer直接利用线性映射将维度为
$
d
_
k
$
的向量表示映射到
$
d
_{
\rm
model
}$
维的向量。之后,将这个
$
d
_{
\rm
model
}$
维向量分别送入每个分支中的前馈神经网络,最后对不同分支的输出进行线性加权。但是,这种模型的计算复杂度要大于标准的Transformer模型。
\item
{
\
red
{
\small\bfnew
{
基于权重的方法
}}}
\upcite
{
DBLP:journals/corr/abs-1711-02132
}
。其主要思想是在多头自注意力机制的基础上保留不同表示空间的特征。传统方法使用级联操作并通过线性映射矩阵来融合不同头之间的信息,而
{
\red
基于权重的
}
Transformer直接利用线性映射将维度为
$
d
_
k
$
的向量表示映射到
$
d
_{
\rm
model
}$
维的向量。之后,将这个
$
d
_{
\rm
model
}$
维向量分别送入每个分支中的前馈神经网络,最后对不同分支的输出进行线性加权。但是,这种模型的计算复杂度要大于标准的Transformer模型。
\vspace
{
0.5em
}
\item
{
\
small\bfnew
{
多分支注意力模型
}}
\upcite
{
DBLP:journals/corr/abs-2006-10270
}
。不同于Weighted
Transformer模型,多分支注意力模型直接利用每个分支独立地进行自注意力模型的计算(图
\ref
{
fig:15-6
}
)。同时为了避免结构相同的多个多头注意力机制之间的协同适应,这种模型使用Dropout方法在训练过程中以一定的概率随机地丢弃一些分支。
\item
{
\
red
{
\small\bfnew
{
基于多分支注意力的方法
}}}
\upcite
{
DBLP:journals/corr/abs-2006-10270
}
。不同于
{
\red
基于权重的
}
Transformer模型,多分支注意力模型直接利用每个分支独立地进行自注意力模型的计算(图
\ref
{
fig:15-6
}
)。同时为了避免结构相同的多个多头注意力机制之间的协同适应,这种模型使用Dropout方法在训练过程中以一定的概率随机地丢弃一些分支。
%----------------------------------------------
\begin{figure}
[htp]
...
...
@@ -295,7 +295,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
%-------------------------------------------
\vspace
{
0.5em
}
\item
{
\
small\bfnew
{
多模型集成
}}{
\red
(多模型还是多单元?)
}
。例如,为了进一步加强不同分支的作用,基于多单元的Transformer模型进行了序列不同位置表示结果的交换,或使用不同的掩码策略对不同分支的输入进行扰动,保证分支间的多样性与互补性
\upcite
{
DBLP:conf/emnlp/YanMZ20
}
。本质上,所谓的多单元思想与集成学习十分相似,类似于在训练过程中同时训练多个编码器。此外,通过增大子单元之间的结构差异性也能够进一步增大分支之间的多样性
\upcite
{
李北2019面向神经机器翻译的集成学习方法分析
}
。
\item
{
\
red
{
\small\bfnew
{
基于多单元的方法
}}
}
。例如,为了进一步加强不同分支的作用,基于多单元的Transformer模型进行了序列不同位置表示结果的交换,或使用不同的掩码策略对不同分支的输入进行扰动,保证分支间的多样性与互补性
\upcite
{
DBLP:conf/emnlp/YanMZ20
}
。本质上,所谓的多单元思想与集成学习十分相似,类似于在训练过程中同时训练多个编码器。此外,通过增大子单元之间的结构差异性也能够进一步增大分支之间的多样性
\upcite
{
李北2019面向神经机器翻译的集成学习方法分析
}
。
\vspace
{
0.5em
}
\end{itemize}
...
...
@@ -318,7 +318,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\parinterval
虽然Transformer模型完全摒弃了循环单元与卷积单元,仅通过位置编码来区分序列中的不同位置。但是,循环神经网络也非常适用于处理序列结构,且其结构成熟、易于优化。因此,有研究人员尝试将其与Transformer模型融合。这种方式一方面能够发挥循环神经网络简单高效的特点,另一方面也能够发挥Transformer模型在特征提取方面的优势,是一种非常值得探索的思路
\upcite
{
Chen2018TheBO
}
。
\parinterval
在Transformer模型中引入循环神经网络的一种方法是,对深层网络的不同层使用循环机制。早在残差网络提出时,研究人员已经开始尝试探讨残差网络成功背后的原因
\upcite
{
DBLP:conf/nips/VeitWB16,DBLP:journals/corr/GreffSS16,DBLP:conf/iclr/ChangMHTB18
}
。本质上,在卷积神经网络中引入残差连接后,神经网络从深度上隐性地利用了循环的特性。也就是,多层Transformer的不同层本身也可以被看作是一个处理序列,只是序列中不同位置(对应不同层)的模型参数独立,而非共享。Transformer编码器与解码器分别由
$
N
$
个结构相同但参数独立的
块
{
\red
(块还是层?)
}
堆叠而成,其中编码块与解码块中分别包含2和3个子层。同时,子层之间引入了残差连接保证了网络信息传递的高效性。因此,一个自然的想法是通过共享不同块
{
\red
(块还是层?)
}
之间的参数,引入循环神经网络中的归纳偏置
\upcite
{
DBLP:conf/iclr/DehghaniGVUK19
}
。其中每层的权重是共享的
{
\red
(块还是层?)
}
,并引入了基于时序的编码向量用于显著区分不同深度下的时序信息,如图
\ref
{
fig:15-8
}
所示。在训练大容量预训练模型时同样也采取了共享层间参数的方式
\upcite
{
Lan2020ALBERTAL
}
。
\parinterval
在Transformer模型中引入循环神经网络的一种方法是,对深层网络的不同层使用循环机制。早在残差网络提出时,研究人员已经开始尝试探讨残差网络成功背后的原因
\upcite
{
DBLP:conf/nips/VeitWB16,DBLP:journals/corr/GreffSS16,DBLP:conf/iclr/ChangMHTB18
}
。本质上,在卷积神经网络中引入残差连接后,神经网络从深度上隐性地利用了循环的特性。也就是,多层Transformer的不同层本身也可以被看作是一个处理序列,只是序列中不同位置(对应不同层)的模型参数独立,而非共享。Transformer编码器与解码器分别由
$
N
$
个结构相同但参数独立的
{
\red
层
}
堆叠而成,
{
\red
其中编码器包含2个子层,解码器包含3个子层
}
。同时,子层之间引入了残差连接保证了网络信息传递的高效性。因此,一个自然的想法是通过共享不同
{
\red
层
}
之间的参数,引入循环神经网络中的归纳偏置
\upcite
{
DBLP:conf/iclr/DehghaniGVUK19
}
。其中每层的权重是共享的
,并引入了基于时序的编码向量用于显著区分不同深度下的时序信息,如图
\ref
{
fig:15-8
}
所示。在训练大容量预训练模型时同样也采取了共享层间参数的方式
\upcite
{
Lan2020ALBERTAL
}
。
%----------------------------------------------
\begin{figure}
[htp]
...
...
@@ -345,7 +345,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\vspace
{
0.5em
}
\item
分块注意力:顾名思义,就是将序列划分为固定大小的片段,注意力模型只在对应的片段内执行。这样,每一个片段内的注意力计算成本是固定的,可以大大降低处理长序列时的总体计算时间
\upcite
{
DBLP:conf/emnlp/QiuMLYW020,DBLP:conf/iclr/LiuSPGSKS18
}
。
\vspace
{
0.5em
}
\item
跨步注意力:该模型是一种稀疏的注意力机制,通常会设置一个固定的间隔,也就是说在计算注意力表示时,每隔固定数量的词后将下一个词纳入所需考虑的范围内,参与注意力的计算
\upcite
{
DBLP:journals/corr/abs-2004-05150
}
。和分片段进行注意力计算类似,
假设最终参与注意力计算的间隔长度为
$
B
${
\red
(单词数还是间隔长度?)
}
,共需要执行
$
N
/
B
$
次注意力计算,可以将计算复杂度从
$
O
(
N
^
2
)
$
缩减为
$
O
(
NB
)
$
。
\item
跨步注意力:该模型是一种稀疏的注意力机制,通常会设置一个固定的间隔,也就是说在计算注意力表示时,每隔固定数量的词后将下一个词纳入所需考虑的范围内,参与注意力的计算
\upcite
{
DBLP:journals/corr/abs-2004-05150
}
。和分片段进行注意力计算类似,
{
\red
假设最终参与注意力计算的间隔长度为
$
N
/
B
$
,每次参与注意力计算的单词数为
$
B
$
,那么注意力的计算复杂度将从
$
O
(
N
^
2
)
$
缩减为
$
O
(
N
/
B
\times
B
^
2
)
$
,即
$
O
(
NB
)
$}
。
\vspace
{
0.5em
}
\item
内存压缩注意力:这种方式的主要的思想是使用一些操作,如卷积、池化等对序列进行下采样,来缩短序列长度。例如,使用
{
\small\bfnew
{
跨步卷积
}}
\index
{
跨步卷积
}
(Stride Convolution)
\index
{
Stride Convolution
}
来减少Key和Value的数量,即减少表示序列长度的维度的大小,Query的数量保持不变,从而减少了注意力权重计算时的复杂度
\upcite
{
DBLP:conf/iclr/LiuSPGSKS18
}
。其具体的计算复杂度取决于跨步卷积时步幅的大小
$
K
$
,形式上可以理解为每
$
K
$
个单元做一次特征融合后,将关注的目标缩减为
$
N
/
K
$
,整体的计算复杂度为
$
N
^
2
/
K
$
。相比于使用前两种方式对局部进行注意力计算,该方式仍是对全局的建模。
\vspace
{
0.5em
}
...
...
@@ -357,7 +357,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\begin{itemize}
\vspace
{
0.5em
}
\item
Reformer模型在计算Key和Value时使用相同的线性映射,共享Key和Value的值
\upcite
{
Kitaev2020ReformerTE
}
,降低了自注意力机制的复杂度。进一步,Reformer引入了一种
{
\small\bfnew
{
局部哈希敏感注意力机制
}}
\index
{
局部哈希敏感注意力机制
}
(LSH Attention)
\index
{
LSH Attention
}
,其提高效率的方式和固定模式中的局部建模一致,减少注意力机制的计算范围。对于每一个Query,通过局部哈希敏感机制找出和其较为相关的Key,并进行注意力的计算。其基本思路就是距离相近的向量以较大的概率被哈希分配到一个桶内,距离较远的向量被分配到一个桶内的概率则较低。此外,Reformer中还采用了一种
{
\small\bfnew
{
可逆残差网络结构
}}
\index
{
可逆残差网络结构
}
(The Reversible Residual Network)
\index
{
The Reversible Residual Network
}
和分块计算前馈神经网络层的机制,即将前馈层的隐层维度拆分为多个块并独立的进行计算,最后进行拼接操作,得到前馈层的输出
。这种方式大幅度减少了内存(显存)占用,但由于在反向过程中需要重复计算某些节点,牺牲了一定的计算时间
{
\red
(那这个时间到底是少了还是多了?)
}
。
\item
Reformer模型在计算Key和Value时使用相同的线性映射,共享Key和Value的值
\upcite
{
Kitaev2020ReformerTE
}
,降低了自注意力机制的复杂度。进一步,Reformer引入了一种
{
\small\bfnew
{
局部哈希敏感注意力机制
}}
\index
{
局部哈希敏感注意力机制
}
(LSH Attention)
\index
{
LSH Attention
}
,其提高效率的方式和固定模式中的局部建模一致,减少注意力机制的计算范围。对于每一个Query,通过局部哈希敏感机制找出和其较为相关的Key,并进行注意力的计算。其基本思路就是距离相近的向量以较大的概率被哈希分配到一个桶内,距离较远的向量被分配到一个桶内的概率则较低。此外,Reformer中还采用了一种
{
\small\bfnew
{
可逆残差网络结构
}}
\index
{
可逆残差网络结构
}
(The Reversible Residual Network)
\index
{
The Reversible Residual Network
}
和分块计算前馈神经网络层的机制,即将前馈层的隐层维度拆分为多个块并独立的进行计算,最后进行拼接操作,得到前馈层的输出
,这种方式大幅度减少了内存(显存)
{
\red
占用。
}
\vspace
{
0.5em
}
\item
Routing Transformer通过聚类算法对序列中的不同单元进行分组,分别在组内进行自注意力机制的计算
\upcite
{
DBLP:journals/corr/abs-2003-05997
}
。首先是将Query和Key映射到聚类矩阵
$
\mathbi
{
S
}$
:
...
...
@@ -443,7 +443,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\label
{
eq:15-29
}
\end{eqnarray}
\parinterval
对比公式
\eqref
{
eq:15-28
}
和公式
\eqref
{
eq:15-29
}
可以看出,Pre-Norm结构直接把顶层的梯度
$
\frac
{
\partial
Loss
}{
\partial
\mathbi
{
x
}_
L
}$
传递给下层,并且如果将公式
\eqref
{
eq:15-29
}
右侧展开,可以发现
$
\frac
{
\partial
Loss
}{
\partial
\mathbi
{
x
}_
l
}$
中直接含有
$
\frac
{
\partial
Loss
}{
\partial
\mathbi
{
x
}_
L
}$
部分。这个性质弱化了梯度计算对模型深度
$
L
$
的依赖;而如公式
\eqref
{
eq:15-28
}
右侧所示,Post-Norm结构则包含一个与
$
L
$
相关的多项导数的积,伴随着
$
L
$
的增大更容易发生梯度消失和梯度爆炸问题。因此,Pre-Norm结构更适于堆叠多层神经网络的情况。比如,使用Pre-Norm 结构可以很轻松地训练一个30层(60个子层)编码器的Transformer网络,并带来可观的BLEU提升。这个结果相当于标准Transformer编码器深度的6倍,相对的,用Post-Norm结构训练深层网络的时候,训练结果很不稳定,当编码器深度超过12层后很难完成有效训练
\upcite
{
WangLearning
}
,尤其是在低精度设备环境下损失函数
出现发散情况
{
\red
(更容易?)
}
。这里把使用Pre-Norm的深层Transformer模型称为Transformer-Deep。
\parinterval
对比公式
\eqref
{
eq:15-28
}
和公式
\eqref
{
eq:15-29
}
可以看出,Pre-Norm结构直接把顶层的梯度
$
\frac
{
\partial
Loss
}{
\partial
\mathbi
{
x
}_
L
}$
传递给下层,并且如果将公式
\eqref
{
eq:15-29
}
右侧展开,可以发现
$
\frac
{
\partial
Loss
}{
\partial
\mathbi
{
x
}_
l
}$
中直接含有
$
\frac
{
\partial
Loss
}{
\partial
\mathbi
{
x
}_
L
}$
部分。这个性质弱化了梯度计算对模型深度
$
L
$
的依赖;而如公式
\eqref
{
eq:15-28
}
右侧所示,Post-Norm结构则包含一个与
$
L
$
相关的多项导数的积,伴随着
$
L
$
的增大更容易发生梯度消失和梯度爆炸问题。因此,Pre-Norm结构更适于堆叠多层神经网络的情况。比如,使用Pre-Norm 结构可以很轻松地训练一个30层(60个子层)编码器的Transformer网络,并带来可观的BLEU提升。这个结果相当于标准Transformer编码器深度的6倍,相对的,用Post-Norm结构训练深层网络的时候,训练结果很不稳定,当编码器深度超过12层后很难完成有效训练
\upcite
{
WangLearning
}
,尤其是在低精度设备环境下损失函数
{
\red
更容易出现
}
发散情况
。这里把使用Pre-Norm的深层Transformer模型称为Transformer-Deep。
\parinterval
另一个有趣的发现是,使用深层网络后,网络可以更有效地利用较大的学习率和较大的批量训练,大幅度缩短了模型达到收敛状态的时间。相比于Transformer-Big等宽网络,Transformer-Deep并不需要太大的隐藏层维度就可以取得更优的翻译品质
\upcite
{
WangLearning
}
。也就是说,Transformer-Deep是一个更“窄”更“深”的神经网络。这种结构的参数量比Transformer-Big少,系统运行效率更高。
...
...
@@ -500,7 +500,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\label
{
eq:15-32
}
\end{eqnarray}
\noindent
其中,
$
[
\cdot
]
$
表示级联操作。这种方式具有比权重平均更强的拟合能力。
\noindent
其中,
$
[
\cdot
]
$
表示级联操作
{
\red
(点代表级联不太对)
}
。这种方式具有比权重平均更强的拟合能力。
\vspace
{
0.5em
}
\item
基于多跳的自注意力机制。如图
\ref
{
fig:15-11
}
所示,其做法与前馈神经网络类似,首先将不同层的表示拼接成2维的句子级矩阵表示
\upcite
{
DBLP:journals/corr/LinFSYXZB17
}
。之后利用类似于前馈神经网络的思想将维度为
$
\mathbb
{
R
}^{
d
_{
\textrm
{
model
}}
\times
L
}$
的矩阵映射到维度为
$
\mathbb
{
R
}^{
d
_{
\textrm
{
model
}}
\times
n
_{
\rm
hop
}}$
的矩阵,如下:
\begin{eqnarray}
...
...
@@ -556,7 +556,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\label
{
eq:15-37
}
\end{eqnarray}
\noindent
这里,
$
\mathbi
{
h
}^
0
${
\red
(h0到底要不要改一下,上下文也是)
}
表示词嵌入层的输出,
$
\mathbi
{
h
}^
l
$
(
$
l>
0
$
)
)
代表Transformer模型第
$
l
$
层的
{
\red
(隐藏层?)
}
表示。
\noindent
这里,
$
\mathbi
{
h
}^
0
${
\red
(h0到底要不要改一下,上下文也是)
}
表示词嵌入层的输出,
$
\mathbi
{
h
}^
l
$
(
$
l>
0
$
)代表Transformer模型第
$
l
$
层的
{
\red
(隐藏层?)
}
表示。
\vspace
{
0.5em
}
\item
定义一个维度为
$
(
L
+
1
)
\times
(
L
+
1
)
$
的权值矩阵
$
\mathbi
{
W
}$
,矩阵中每一行表示之前各层对当前层的贡献度。令
$
\mathbi
{
W
}_{
l,i
}$
代表权值矩阵
$
\mathbi
{
W
}$
第
$
l
$
行第
$
i
$
列的权重,则第
$
0
\sim
l
$
层的聚合结果为
$
\mathbi
{
h
}_
i
$
的线性加权和:
...
...
@@ -639,7 +639,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\label
{
eq:15-43
}
\end{eqnarray}
\noindent
其中,
$
l
$
为对应的神经网络的深度,
$
\alpha
$
为预先设定的超参数来控制缩放的比例。这样,可以通过缩减顶层神经网络输出与输入之间的差异,
{
\red
减少顶层神经网络参数的梯度范数,从而缓解由于神经网络过深所带来的梯度消失问题(有问题?)
}
。
\noindent
其中,
$
l
$
为对应的神经网络的深度,
$
\alpha
$
为预先设定的超参数来控制缩放的比例。这样,可以通过缩减顶层神经网络输出与输入之间的差异,
{
\red
让激活函数的输入分布保持在一个稳定状态,以此来尽可能避免它们陷入梯度饱和区
}
。
%----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION
...
...
@@ -1196,7 +1196,7 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5}
\vspace
{
0.5em
}
\item
{
\small\bfnew
{
数据以及超参数的调整
}}
。具体来说,可以用少量的数据训练模型,以便快速评估其性能
\upcite
{
DBLP:conf/aistats/KleinFBHH17,DBLP:journals/corr/ChrabaszczLH17
}
。在超参数的调整方面,也可以通过减少模型训练轮数、减少模型的层数等方式来简化模型参数,达到加速训练、评估的目的
\upcite
{
DBLP:conf/cvpr/ZophVSL18,Real2019AgingEF,DBLP:journals/corr/abs-1807-06906
}
。
\vspace
{
0.5em
}
\item
{
\small\bfnew
{
现有参数的继承及复用
}}
。通过在现有的模型参数基础上,继续优化中间过程产生的模型结构,来加快待评价模型的收敛进程
\upcite
{
DBLP:conf/icml/RealMSSSTLK17,DBLP:conf/iclr/ElskenMH19,DBLP:conf/aaai/CaiCZYW18
}
。这种方式无需从头训练搜索过程
{
\red
中
间过程
}
产生的模型结构
,通过“热启动”的方式对模型参数进行优化,能够大幅减少性能评估过程的时间消耗。
\item
{
\small\bfnew
{
现有参数的继承及复用
}}
。通过在现有的模型参数基础上,继续优化中间过程产生的模型结构,来加快待评价模型的收敛进程
\upcite
{
DBLP:conf/icml/RealMSSSTLK17,DBLP:conf/iclr/ElskenMH19,DBLP:conf/aaai/CaiCZYW18
}
。这种方式无需从头训练搜索过程
{
\red
中
产生的中间结构
}
,通过“热启动”的方式对模型参数进行优化,能够大幅减少性能评估过程的时间消耗。
\vspace
{
0.5em
}
\item
{
\small\bfnew
{
模型性能的预测
}}
。这种方式使用训练过程中的性能变化曲线来预估模型是否具有潜力,从而快速终止低性能模型的训练过程
\upcite
{
DBLP:conf/ijcai/DomhanSH15,DBLP:conf/iclr/KleinFSH17,DBLP:conf/iclr/BakerGRN18
}
。
\vspace
{
0.5em
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论