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
5182fb51
Commit
5182fb51
authored
Jan 31, 2021
by
单韦乔
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
2、15章版式调整
parent
6fa39daf
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
42 行增加
和
40 行删除
+42
-40
Chapter15/Figures/figure-dynamic-linear-aggregation-network-structure.tex
+1
-1
Chapter15/chapter15.tex
+26
-24
Chapter2/Figures/figure-the-dice-game-model.tex
+6
-6
Chapter2/chapter2.tex
+9
-9
没有找到文件。
Chapter15/Figures/figure-dynamic-linear-aggregation-network-structure.tex
查看文件 @
5182fb51
...
...
@@ -20,7 +20,7 @@
\node
[anchor=north,rectangle,draw, inner sep=0mm,minimum height=1.2em,minimum width=15em,fill=purple!30,rounded corners=5pt,thick] (n9) at ([xshift=0em,yshift=-1em]n8.south)
{$
\mathbi
{
X
}
\ \quad
\mathbi
{
h
}^
1
\ \quad
\mathbi
{
h
}^
2
\quad
\ldots
\quad\ \mathbi
{
h
}^
l
$}
;
\node
[anchor=north,rectangle,draw, inner sep=0mm,minimum height=1.2em,minimum width=15em,fill=teal!30,rounded corners=5pt,thick] (n10) at ([xshift=0em,yshift=-2em]n9.south)
{
权重累加
\
{
\red
$
\mathbi
{
g
}^
l
$}
}
;
\node
[anchor=north,rectangle,draw, inner sep=0mm,minimum height=1.2em,minimum width=15em,fill=teal!30,rounded corners=5pt,thick] (n10) at ([xshift=0em,yshift=-2em]n9.south)
{
权重累加
\
$
\mathbi
{
g
}^
l
$
}
;
\node
[anchor=west,rectangle, inner sep=0mm,minimum height=1.2em, rounded corners=5pt,thick] (n11) at ([xshift=0em,yshift=-4.5em]n1.west)
{
聚合网络
}
;
...
...
Chapter15/chapter15.tex
查看文件 @
5182fb51
...
...
@@ -112,8 +112,10 @@
%----------------------------------------------
\begin{figure}
[htp]
\centering
\vspace
{
-1em
}
\input
{
./Chapter15/Figures/figure-relative-position-weight
}
\caption
{
相对位置权重
$
\mathbi
{
a
}_{
ij
}$
\upcite
{
DBLP:conf/emnlp/HuangLXX20
}}
\setlength
{
\belowcaptionskip
}{
-2em
}
\label
{
fig:15-2
}
\end{figure}
%-------------------------------------------
...
...
@@ -128,7 +130,7 @@
\noindent
可以注意到,公式
\eqref
{
eq:15-10
}
和公式
\eqref
{
eq:15-11
}
将位置编码信息直接暴露给每一层注意力机制的计算,而不是像标准Transformer中只将其作为整个模型的输入。
\vspace
{
0.5em
}
\item
Transformer-XL
\upcite
{
Dai2019TransformerXLAL
}
。在Transformer中,模型的输入由词嵌入表示与绝对位置编码组成,例如,对于输入层有,
$
\mathbi
{
x
}_
i
=
\mathbi
{
E
}_{
x
_
i
}
+
\mathbi
{
U
}_
i
$
,
$
\mathbi
{
x
}_
j
=
\mathbi
{
E
}_{
x
_
j
}
+
\mathbi
{
U
}_
j
$
,其中
$
\mathbi
{
E
}_{
x
_
i
}
$
和
$
\mathbi
{
E
}_{
x
_
j
}
$
表示词嵌入,
$
\mathbi
{
U
}_
i
$
和
$
\mathbi
{
U
}_
j
$
表示绝对位置编码(正余弦函数)。将
$
\mathbi
{
x
}_
i
$
与
$
\mathbi
{
x
}_
j
$
代入公式
\eqref
{
eq:15-6
}
中可以得到:
\item
{
\small\bfnew
{
Transformer-XL
}}
\upcite
{
Dai2019TransformerXLAL
}
。在Transformer中,模型的输入由词嵌入表示与绝对位置编码组成,例如,对于输入层有,
$
\mathbi
{
x
}_
i
=
\mathbi
{
E
}_{
x
_
i
}
+
\mathbi
{
U
}_
i
$
,
$
\mathbi
{
x
}_
j
=
\mathbi
{
E
}_{
x
_
j
}
+
\mathbi
{
U
}_
j
$
,其中
$
\mathbi
{
E
}_{
x
_
i
}
$
和
$
\mathbi
{
E
}_{
x
_
j
}
$
表示词嵌入,
$
\mathbi
{
U
}_
i
$
和
$
\mathbi
{
U
}_
j
$
表示绝对位置编码(正余弦函数)。将
$
\mathbi
{
x
}_
i
$
与
$
\mathbi
{
x
}_
j
$
代入公式
\eqref
{
eq:15-6
}
中可以得到:
\begin{eqnarray}
\mathbi
{
e
}_{
ij
}
&
=
&
\frac
{
(
\mathbi
{
E
}_{
x
_
i
}
+
\mathbi
{
U
}_
i)
\mathbi
{
W
}_
Q
{
((
\mathbi
{
E
}_{
x
_
j
}
+
\mathbi
{
U
}_
j)
\mathbi
{
W
}_
K)
}^{
T
}}{
\sqrt
{
d
_
k
}}
\label
{
eq:15-12
}
...
...
@@ -154,7 +156,7 @@ A_{ij}^{\rm rel} &=& \underbrace{\mathbi{E}_{x_i}\mathbi{W}_Q\mathbi{W}_{K}^{T}\
\item
{
\small\bfnew
{
结构化位置编码
}}
\index
{
基于结构化位置编码
}
(Structural Position Representations)
\index
{
Structural Position Representations
}
\upcite
{
DBLP:conf/emnlp/WangTWS19a
}
。 例如,可以通过对输入句子进行依存句法分析得到句法树,根据叶子结点在句法树中的深度来表示其绝对位置,并在此基础上利用相对位置编码的思想计算节点之间的相对位置信息。
\vspace
{
0.5em
}
\item
基于
{
\small\bfnew
{
连续动态系统
}}
\index
{
基于连续动态系统
}
(Continuous Dynamic Model)
\index
{
Continuous Dynamic Model
}
的位置编码
\upcite
{
Liu2020LearningTE
}
。使用神经常微分方程
{
\small\bfnew
{
求解器
}}
\index
{
求解器
}
(Solver)
\index
{
Solver
}
来建模位置信息
\upcite
{
DBLP:conf/nips/ChenRBD18
}
,模型具有更好的归纳偏置能力,可以处理变长的输入序列,同时能够从不同的数据中进行自适应学习。
\item
{
\small\bfnew
{
基于连续动态系统
}}
\index
{
基于连续动态系统
}
(Continuous Dynamic Model)
\index
{
Continuous Dynamic Model
}{
\small\bfnew
{
的位置编码
}}
\upcite
{
Liu2020LearningTE
}
。使用神经常微分方程
{
\small\bfnew
{
求解器
}}
\index
{
求解器
}
(Solver)
\index
{
Solver
}
来建模位置信息
\upcite
{
DBLP:conf/nips/ChenRBD18
}
,模型具有更好的归纳偏置能力,可以处理变长的输入序列,同时能够从不同的数据中进行自适应学习。
\vspace
{
0.5em
}
\end{itemize}
...
...
@@ -339,11 +341,11 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\begin{itemize}
\vspace
{
0.5em
}
\item
分块注意力
:顾名思义,就是将序列划分为固定大小的片段,注意力模型只在对应的片段内执行。这样,每一个片段内的注意力计算成本是固定的,可以大大降低处理长序列时的总体计算时间
\upcite
{
DBLP:conf/emnlp/QiuMLYW020,DBLP:conf/iclr/LiuSPGSKS18
}
。
\item
{
\small\bfnew
{
分块注意力
}}
:顾名思义,就是将序列划分为固定大小的片段,注意力模型只在对应的片段内执行。这样,每一个片段内的注意力计算成本是固定的,可以大大降低处理长序列时的总体计算时间
\upcite
{
DBLP:conf/emnlp/QiuMLYW020,DBLP:conf/iclr/LiuSPGSKS18
}
。
\vspace
{
0.5em
}
\item
跨步注意力
:该模型是一种稀疏的注意力机制,通常会设置一个固定的间隔,也就是说在计算注意力表示时,每隔固定数量的词后将下一个词纳入所需考虑的范围内,参与注意力的计算
\upcite
{
DBLP:journals/corr/abs-2004-05150
}
。和分片段进行注意力计算类似,假设最终参与注意力计算的间隔长度为
$
N
/
B
$
,每次参与注意力计算的单词数为
$
B
$
,那么注意力的计算复杂度将从
$
O
(
N
^
2
)
$
缩减为
$
O
(
N
/
B
\times
B
^
2
)
$
,即
$
O
(
NB
)
$
。
\item
{
\small\bfnew
{
跨步注意力
}}
:该模型是一种稀疏的注意力机制,通常会设置一个固定的间隔,也就是说在计算注意力表示时,每隔固定数量的词后将下一个词纳入所需考虑的范围内,参与注意力的计算
\upcite
{
DBLP:journals/corr/abs-2004-05150
}
。和分片段进行注意力计算类似,假设最终参与注意力计算的间隔长度为
$
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
$
。相比于使用前两种方式对局部进行注意力计算,该方式仍是对全局的建模。
\item
{
\small\bfnew
{
内存压缩注意力
}}
:这种方式的主要的思想是使用一些操作,如卷积、池化等对序列进行下采样,来缩短序列长度。例如,使用
{
\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
}
\end{itemize}
...
...
@@ -410,7 +412,7 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\parinterval
令
$
\mathbi
{
x
}_
l
$
和
$
\mathbi
{
x
}_{
l
+
1
}$
表示第
$
l
$
个子层的输入和输出
\footnote
[4]
{
这里沿用Transformer中的定义,每一层(Layer)包含多个子层(Sub-layer)。比如,对于Transformer编码器,每一层包含一个自注意力子层和一个前馈神经网络子层。所有子层都需要进行层标准化和残差连接。
}
,
$
\mathbi
{
y
}_
l
$
表示中间的临时输出;
$
\textrm
{
LN
}
(
\cdot
)
$
表示层标准化操作,帮助减小子层输出的方差,从而让训练变得更稳定;
$
F
(
\cdot
)
$
表示子层所对应的函数,比如前馈神经网络、自注意力等。下面分别对Post-Norm和Pre-Norm进行简单的描述。
\begin{itemize}
\vspace
{
0.5em
}
\item
Post-Norm
:早期的Transformer遵循的是Post-Norm结构
\upcite
{
vaswani2017attention
}
。也就是层标准化作用于每一子层的输入和输出的残差结果上,如图
\ref
{
fig:15-9
}
(a)所示。可以表示如下:
\item
{
\small\bfnew
{
Post-Norm
}}
:早期的Transformer遵循的是Post-Norm结构
\upcite
{
vaswani2017attention
}
。也就是层标准化作用于每一子层的输入和输出的残差结果上,如图
\ref
{
fig:15-9
}
(a)所示。可以表示如下:
\begin{eqnarray}
\mathbi
{
x
}_{
l+1
}
&
=
&
\textrm
{
LN
}
(
\mathbi
{
x
}_
l+F(
\mathbi
{
x
}_
l;
{
\bm
\theta
_
l
}
))
\label
{
eq:15-26
}
...
...
@@ -418,7 +420,7 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\noindent
其中,
$
\bm
\theta
_
l
$
是子层
$
l
$
的参数。
\vspace
{
0.5em
}
\item
Pre-Norm
:通过调整层标准化的位置,将其放置于每一子层的输入之前,得到了Pre-Norm结构
\upcite
{
DBLP:conf/eccv/HeZRS16
}
,如图
\ref
{
fig:15-9
}
(b)所示。这种结构也被广泛应用于最新的Transformer开源系统中
\upcite
{
Vaswani2018Tensor2TensorFN,Ottfairseq,KleinOpenNMT
}
,公式如下:
\item
{
\small\bfnew
{
Pre-Norm
}}
:通过调整层标准化的位置,将其放置于每一子层的输入之前,得到了Pre-Norm结构
\upcite
{
DBLP:conf/eccv/HeZRS16
}
,如图
\ref
{
fig:15-9
}
(b)所示。这种结构也被广泛应用于最新的Transformer开源系统中
\upcite
{
Vaswani2018Tensor2TensorFN,Ottfairseq,KleinOpenNMT
}
,公式如下:
\begin{eqnarray}
\mathbi
{
x
}_{
l+1
}
&
=
&
\mathbi
{
x
}_
l+F(
\textrm
{
LN
}
(
\mathbi
{
x
}_
l);
{
\bm
\theta
_
l
}
)
\label
{
eq:15-27
}
...
...
@@ -476,29 +478,29 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\begin{itemize}
\vspace
{
0.5em
}
\item
线性平均
。即平均池化,通过对各层中间表示进行累加之后取平均值,表示如下:
\item
{
\small\bfnew
{
线性平均
}}
。即平均池化,通过对各层中间表示进行累加之后取平均值,表示如下:
\begin{eqnarray}
\mathbi
{
g
}
&
=
&
\frac
{
1
}{
L
}
\sum
_{
l=1
}^{
L
}{
\mathbi
{
h
}^
l
}
\label
{
eq:15-30
}
\end{eqnarray}
\vspace
{
0.5em
}
\item
权重平均
。在线性平均的基础上,为每一个中间层表示赋予一个相应的权重。权重的值通常采用可学习的参数矩阵
$
\mathbi
{
W
}_
l
$
表示。这种方法通常会略优于线性平均方法。可以用如下方式描述:
\item
{
\small\bfnew
{
权重平均
}}
。在线性平均的基础上,为每一个中间层表示赋予一个相应的权重。权重的值通常采用可学习的参数矩阵
$
\mathbi
{
W
}_
l
$
表示。这种方法通常会略优于线性平均方法。可以用如下方式描述:
\begin{eqnarray}
\mathbi
{
g
}
&
=
&
\sum
_{
l=1
}^{
L
}{
\mathbi
{
W
}_
l
\mathbi
{
h
}^
l
}
\label
{
eq:15-31
}
\end{eqnarray}
\vspace
{
0.5em
}
\item
前馈神经网络
。将之前中间层的表示进行级联,之后利用前馈神经网络得到融合的表示,如下:
\item
{
\small\bfnew
{
前馈神经网络
}}
。将之前中间层的表示进行级联,之后利用前馈神经网络得到融合的表示,如下:
\begin{eqnarray}
\mathbi
{
g
}
&
=
&
\textrm
{
FNN
}
([
\mathbi
{
h
}^
1,
{
\red
\ldots
}
,
\mathbi
{
h
}^
L])
\mathbi
{
g
}
&
=
&
\textrm
{
FNN
}
([
\mathbi
{
h
}^
1,
\ldots
,
\mathbi
{
h
}^
L])
\label
{
eq:15-32
}
\end{eqnarray}
\noindent
其中,
$
[
\cdot
]
$
表示级联操作。这种方式具有比权重平均更强的拟合能力。
\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
}}$
的矩阵,如下:
\item
{
\small\bfnew
{
基于多跳的自注意力机制
}}
。如图
\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}
\mathbi
{
o
}
&
=
&
\sigma
([
\mathbi
{
h
}^
1,
\ldots
,
\mathbi
{
h
}^
L]
^{
T
}
\cdot
\mathbi
{
W
}_
1)
\mathbi
{
W
}_
2
\label
{
eq:15-33
}
...
...
@@ -647,11 +649,11 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\begin{itemize}
\vspace
{
0.5em
}
\item
计算均值
:
${
\bm
\mu
}
=
\textrm
{
mean
}
(
\mathbi
{
x
}_
l
+
\mathbi
{
y
}_
l
)
$
\item
{
\small\bfnew
{
计算均值
}}
:
${
\bm
\mu
}
=
\textrm
{
mean
}
(
\mathbi
{
x
}_
l
+
\mathbi
{
y
}_
l
)
$
\vspace
{
0.5em
}
\item
计算方差
:
${
\bm
\sigma
}
=
\textrm
{
std
}
(
\mathbi
{
x
}_
l
+
\mathbi
{
y
}_
l
)
$
\item
{
\small\bfnew
{
计算方差
}}
:
${
\bm
\sigma
}
=
\textrm
{
std
}
(
\mathbi
{
x
}_
l
+
\mathbi
{
y
}_
l
)
$
\vspace
{
0.5em
}
\item
根据均值和方差对输入进行放缩
,如下:
\item
{
\small\bfnew
{
根据均值和方差对输入进行放缩
}}
,如下:
\begin{eqnarray}
\mathbi
{
x
}_{
l+1
}^{
\textrm
{
post
}}
&
=
&
\frac
{
\mathbi
{
x
}_
l+
\mathbi
{
y
}_
l-
{
\bm
\mu
}}{
\bm
\sigma
}
\cdot
\mathbi
{
w
}
+
\mathbi
{
b
}
\label
{
eq:15-44
}
...
...
@@ -710,9 +712,9 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\begin{itemize}
\vspace
{
0.5em
}
\item
Profiling阶段
:
${
\bm
\omega
_{
l
+
1
}}
=
1
$
,只进行前向计算,无需进行梯度计算。在训练样本上计算
$
F
_{
l
+
1
}
(
\mathbi
{
x
}_
l
)
$
的方差
\item
{
\small\bfnew
{
Profiling阶段
}}
:
${
\bm
\omega
_{
l
+
1
}}
=
1
$
,只进行前向计算,无需进行梯度计算。在训练样本上计算
$
F
_{
l
+
1
}
(
\mathbi
{
x
}_
l
)
$
的方差
\vspace
{
0.5em
}
\item
Initialization阶段
:通过Profiling阶段得到的
$
F
_{
l
+
1
}
(
\mathbi
{
x
}_
l
)
$
的方差来初始化
$
\bm
\omega
_{
l
+
1
}$
:
\item
{
\small\bfnew
{
Initialization阶段
}}
:通过Profiling阶段得到的
$
F
_{
l
+
1
}
(
\mathbi
{
x
}_
l
)
$
的方差来初始化
$
\bm
\omega
_{
l
+
1
}$
:
\begin{eqnarray}
{
\bm
\omega
_{
l+1
}}
&
=
&
\sqrt
{
\sum
_{
j<l
}
\textrm
{
Var
}
[F
_{
l+1
}
(
\mathbi
{
x
}_
l)]
}
\label
{
eq:15-48
}
...
...
@@ -758,8 +760,6 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\parinterval
很多研究工作已经发现深层模型不同层之间的稠密连接能够很明显地提高信息传递的效率
\upcite
{
WangLearning,DBLP:conf/cvpr/HuangLMW17,Dou2018ExploitingDR,DBLP:conf/acl/WuWXTGQLL19
}
。与此同时,对之前层信息的不断复用有助于得到更好的表示,但也带来了计算代价过大的问题。在动态线性层聚合方法(DLCL)中,每一次聚合时都需要重新计算之前每一层表示对当前层输入的贡献度,因此伴随着编码器整体深度的增加,这部分的计算代价变得不可忽略。例如,一个基于动态层聚合的48层Transformer模型比不使用动态层聚合的模型在进行训练时慢近2倍。同时,缓存中间结果也增加了显存的使用量。比如,即使在使用半精度计算的情况下,每张12G显存的GPU上计算的词也不能超过2048个,这导致训练开销急剧增大。
\parinterval
缓解这个问题的一种方法是使用更稀疏的层间连接方式。其核心思想与动态线性层聚合是类似的,不同点在于可以通过调整层之间连接的稠密程度来降低训练代价。比如,可以将每
$
p
$
层分为一组,之后动态线性层聚合只在不同组之间进行。这样,通过调节
$
p
$
值的大小可以控制神经网络中连接的稠密程度,作为一种训练代价与翻译性能之间的权衡。显然,标准的Transformer模型
\upcite
{
vaswani2017attention
}
和DLCL模型
\upcite
{
WangLearning
}
都可以看作是该方法的一种特例。如图
\ref
{
fig:15-16
}
所示:当
$
p
=
1
$
时,每一个单独的块被看作一个独立的组,它等价于基于动态层聚合的DLCL模型;当
$
p
=
\infty
$
时,它等价于正常的Transformer模型。值得注意的是,如果配合渐进式训练。在分组稠密连接中可以设置
$
p
$
等于模型层数。
%----------------------------------------------
\begin{figure}
[htp]
\centering
...
...
@@ -769,6 +769,8 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\end{figure}
%-------------------------------------------
\parinterval
缓解这个问题的一种方法是使用更稀疏的层间连接方式。其核心思想与动态线性层聚合是类似的,不同点在于可以通过调整层之间连接的稠密程度来降低训练代价。比如,可以将每
$
p
$
层分为一组,之后动态线性层聚合只在不同组之间进行。这样,通过调节
$
p
$
值的大小可以控制神经网络中连接的稠密程度,作为一种训练代价与翻译性能之间的权衡。显然,标准的Transformer模型
\upcite
{
vaswani2017attention
}
和DLCL模型
\upcite
{
WangLearning
}
都可以看作是该方法的一种特例。如图
\ref
{
fig:15-16
}
所示:当
$
p
=
1
$
时,每一个单独的块被看作一个独立的组,它等价于基于动态层聚合的DLCL模型;当
$
p
=
\infty
$
时,它等价于正常的Transformer模型。值得注意的是,如果配合渐进式训练。在分组稠密连接中可以设置
$
p
$
等于模型层数。
%----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION
%----------------------------------------------------------------------------------------
...
...
@@ -1046,6 +1048,7 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5}
\centering
\input
{
./Chapter15/Figures/figure-parallel-RNN-structure
}
\caption
{
词预测模型和动作模型
}
\setlength
{
\abovecaptionskip
}{
-1em
}
\label
{
fig:15-26
}
\end{figure}
%-------------------------------------------
...
...
@@ -1069,6 +1072,10 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5}
\parinterval
网络结构搜索属于
{
\small\bfnew
{
自动机器学习
}}
\index
{
自动机器学习
}
(Automated Machine Learning)
\index
{
Automated Machine Learning
}
的范畴,其目的是根据对应任务上的数据找到最合适的模型结构。在这个过程中,模型结构就像神经网络中的参数一样被自动地学习出来。图
\ref
{
fig:15-27
}
(a) 展示了人工设计的Transformer编码器的局部结构,图
\ref
{
fig:15-27
}
(b) 给出对该结构使用进化算法优化后得到的结构
\upcite
{
DBLP:conf/icml/SoLL19
}
。可以看到,使用网络结构搜索方法得到的模型中,出现了与人工设计的结构不同的跨层连接,同时还搜索到了全新的多分支结构,这种结构也是人工不易设计出来的。
\parinterval
那么网络结构搜索究竟是一种什么样的技术呢?如图
\ref
{
fig:15-28
}
所示,在传统机器学习方法中,研究人员需要设计大量的特征来描述待解决的问题,即“特征工程”。在深度学习时代,神经网络模型可以完成特征的抽取和学习,但是却需要人工设计神经网络结构,这项工作仍然十分繁重。因此一些科研人员开始思考,能否将设计模型结构的工作也交由机器自动完成?深度学习方法中模型参数能够通过梯度下降等方式进行自动优化,那么模型结构是否可以也看做是一种特殊的参数,使用搜索算法自动找到最适用于当前任务的模型结构?基于上述想法,网络结构搜索应运而生。
\parinterval
早在上世纪八十年代,研究人员就开始使用进化算法对神经网络结构进行设计
\upcite
{
DBLP:conf/icga/MillerTH89
}
,也引发了之后的很多探索
\upcite
{
koza1991genetic,DBLP:conf/nips/HarpSG89,DBLP:journals/compsys/Kitano90
}
。近些年,随着深度学习技术的发展,网络结构搜索技术在很多任务中受到关注。例如,网络结构搜索就很好地应用在语言建模上,并取得了很好的结果
\upcite
{
DBLP:conf/iclr/LiuSY19,DBLP:conf/acl/LiHZXJXZLL20,DBLP:conf/emnlp/JiangHXZZ19
}
。下面将对网络结构搜索的基本方法和其在机器翻译中的应用进行介绍。
%----------------------------------------------
\begin{figure}
[htp]
\centering
...
...
@@ -1078,8 +1085,6 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5}
\end{figure}
%-------------------------------------------
\parinterval
那么网络结构搜索究竟是一种什么样的技术呢?如图
\ref
{
fig:15-28
}
所示,在传统机器学习方法中,研究人员需要设计大量的特征来描述待解决的问题,即“特征工程”。在深度学习时代,神经网络模型可以完成特征的抽取和学习,但是却需要人工设计神经网络结构,这项工作仍然十分繁重。因此一些科研人员开始思考,能否将设计模型结构的工作也交由机器自动完成?深度学习方法中模型参数能够通过梯度下降等方式进行自动优化,那么模型结构是否可以也看做是一种特殊的参数,使用搜索算法自动找到最适用于当前任务的模型结构?基于上述想法,网络结构搜索应运而生。
%----------------------------------------------
\begin{figure}
[htp]
\centering
...
...
@@ -1089,8 +1094,6 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5}
\end{figure}
%-------------------------------------------
\parinterval
早在上世纪八十年代,研究人员就开始使用进化算法对神经网络结构进行设计
\upcite
{
DBLP:conf/icga/MillerTH89
}
,也引发了之后的很多探索
\upcite
{
koza1991genetic,DBLP:conf/nips/HarpSG89,DBLP:journals/compsys/Kitano90
}
。近些年,随着深度学习技术的发展,网络结构搜索技术在很多任务中受到关注。例如,网络结构搜索就很好地应用在语言建模上,并取得了很好的结果
\upcite
{
DBLP:conf/iclr/LiuSY19,DBLP:conf/acl/LiHZXJXZLL20,DBLP:conf/emnlp/JiangHXZZ19
}
。下面将对网络结构搜索的基本方法和其在机器翻译中的应用进行介绍。
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
%----------------------------------------------------------------------------------------
...
...
@@ -1098,7 +1101,6 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5}
\subsection
{
结构搜索的基本方法
}
\parinterval
对于网络结构搜索任务来说,目标是通过数据驱动的方式自动地找到最合适的模型结构。以有监督学习为例,给定训练集合
$
\{
(
\mathbi
{
x
}_{
1
}
,
\mathbi
{
y
}_{
1
}
)
,
\ldots
,
(
\mathbi
{
x
}_{
n
}
,
\mathbi
{
y
}_{
n
}
)
\}
$
(其中
$
\mathbi
{
x
}_{
i
}$
表示的是第
$
i
$
个样本的输入,
$
\mathbi
{
y
}_{
i
}$
表示该样本的答案,并假设
$
\mathbi
{
x
}_{
i
}$
和
$
\mathbi
{
y
}_{
i
}$
均为向量表示),网络结构搜索过程可以被建模为根据数据找到最佳模型结构
$
\hat
{
a
}$
的过程,如下所示:
\begin{eqnarray}
\hat
{
a
}
&
=
&
\arg\max
_{
a
}
\sum
_{
i=1
}^{
n
}{
\funp
{
P
}
(
\mathbi
{
y
}_{
i
}
|
\mathbi
{
x
}_{
i
}
;a)
}
\label
{
eq:15-57
}
...
...
Chapter2/Figures/figure-the-dice-game-model.tex
查看文件 @
5182fb51
...
...
@@ -8,7 +8,7 @@
\begin{tikzpicture}
[scale=0.6]
\begin{scope}
{
\
footnotesize
{
\
small
\foreach
\i
in
{
1,...,5
}{
\node
[draw,thick,minimum size=10pt] at (1.2*
\i
,0)
{
1
}
;
}
...
...
@@ -17,7 +17,7 @@
\end{scope}
\begin{scope}
[yshift=-2.5em]
{
\
footnotesize
{
\
small
\foreach
\i
in
{
1,...,4
}{
\node
[draw,thick,minimum size=10pt] at (1.2*
\i
,0)
{{
\color
{
red
}
2
}}
;
}
...
...
@@ -26,7 +26,7 @@
\end{scope}
\begin{scope}
[yshift=-5.0em]
{
\
footnotesize
{
\
small
\foreach
\i
in
{
1,...,6
}{
\node
[draw,thick,minimum size=10pt] at (1.2*
\i
,0)
{{
\color
{
ublue
}
3
}}
;
}
...
...
@@ -35,7 +35,7 @@
\end{scope}
\begin{scope}
[yshift=-7.5em]
{
\
footnotesize
{
\
small
\foreach
\i
in
{
1,...,12
}{
\node
[draw,thick,minimum size=10pt] at (1.2*
\i
,0)
{{
\color
{
ugreen
}
4
}}
;
}
...
...
@@ -44,7 +44,7 @@
\end{scope}
\begin{scope}
[yshift=-10.0em]
{
\
footnotesize
{
\
small
\foreach
\i
in
{
1,...,2
}{
\node
[draw,thick,minimum size=10pt] at (1.2*
\i
,0)
{{
\color
{
purple
}
5
}}
;
}
...
...
@@ -53,7 +53,7 @@
\end{scope}
\begin{scope}
[yshift=-12.5em]
{
\
footnotesize
{
\
small
\foreach
\i
in
{
1,...,1
}{
\node
[draw,thick,minimum size=10pt] at (1.2*
\i
,0)
{{
\color
{
orange
}
6
}}
;
}
...
...
Chapter2/chapter2.tex
查看文件 @
5182fb51
...
...
@@ -118,11 +118,11 @@ F(x)=\int_{-\infty}^x f(x)\textrm{d}x
\begin{itemize}
\vspace
{
0.5em
}
\item
边缘概率
:矩形
$
A
$
或者矩形
$
B
$
的面积。
\item
{
\small\bfnew
{
边缘概率
}}
:矩形
$
A
$
或者矩形
$
B
$
的面积。
\vspace
{
0.5em
}
\item
联合概率
:矩形
$
C
$
的面积。
\item
{
\small\bfnew
{
联合概率
}}
:矩形
$
C
$
的面积。
\vspace
{
0.5em
}
\item
条件概率
:联合概率/对应的边缘概率,如:
$
\funp
{
P
}
(
A
\mid
B
)
$
=矩形
$
C
$
的面积/矩形B的面积。
\item
{
\small\bfnew
{
条件概率
}}
:联合概率/对应的边缘概率,如:
$
\funp
{
P
}
(
A
\mid
B
)
$
=矩形
$
C
$
的面积/矩形B的面积。
\vspace
{
0.5em
}
\end{itemize}
...
...
@@ -277,9 +277,9 @@ F(x)=\int_{-\infty}^x f(x)\textrm{d}x
\begin{itemize}
\vspace
{
0.5em
}
\item
非负性
,即
$
\funp
{
D
}_{
\textrm
{
KL
}}
(
\funp
{
P
}
\parallel
\funp
{
Q
}
)
\ge
0
$
,等号成立条件是
$
\funp
{
P
}$
和
$
\funp
{
Q
}$
相等。
\item
{
\small\bfnew
{
非负性
}}
,即
$
\funp
{
D
}_{
\textrm
{
KL
}}
(
\funp
{
P
}
\parallel
\funp
{
Q
}
)
\ge
0
$
,等号成立条件是
$
\funp
{
P
}$
和
$
\funp
{
Q
}$
相等。
\vspace
{
0.5em
}
\item
不对称性
,即
$
\funp
{
D
}_{
\textrm
{
KL
}}
(
\funp
{
P
}
\parallel
\funp
{
Q
}
)
\neq
\funp
{
D
}_{
\textrm
{
KL
}}
(
\funp
{
Q
}
\parallel
\funp
{
P
}
)
$
,所以
$
\textrm
{
KL
}$
距离并不是常用的欧式空间中的距离。为了消除这种不确定性,有时也会使用
$
\funp
{
D
}_{
\textrm
{
KL
}}
(
\funp
{
P
}
\parallel
\funp
{
Q
}
)+
\funp
{
D
}_{
\textrm
{
KL
}}
(
\funp
{
Q
}
\parallel
\funp
{
P
}
)
$
作为度量两个分布差异性的函数。
\item
{
\small\bfnew
{
不对称性
}}
,即
$
\funp
{
D
}_{
\textrm
{
KL
}}
(
\funp
{
P
}
\parallel
\funp
{
Q
}
)
\neq
\funp
{
D
}_{
\textrm
{
KL
}}
(
\funp
{
Q
}
\parallel
\funp
{
P
}
)
$
,所以
$
\textrm
{
KL
}$
距离并不是常用的欧式空间中的距离。为了消除这种不确定性,有时也会使用
$
\funp
{
D
}_{
\textrm
{
KL
}}
(
\funp
{
P
}
\parallel
\funp
{
Q
}
)+
\funp
{
D
}_{
\textrm
{
KL
}}
(
\funp
{
Q
}
\parallel
\funp
{
P
}
)
$
作为度量两个分布差异性的函数。
\vspace
{
0.5em
}
\end{itemize}
...
...
@@ -850,13 +850,13 @@ c(\cdot) & \textrm{当计算最高阶模型时} \\
\begin{itemize}
\vspace
{
0.5em
}
\item
完备性
:当问题有解时,使用该策略能否找到问题的解。
\item
{
\small\bfnew
{
完备性
}}
:当问题有解时,使用该策略能否找到问题的解。
\vspace
{
0.5em
}
\item
最优性
:搜索策略能否找到最优解。
\item
{
\small\bfnew
{
最优性
}}
:搜索策略能否找到最优解。
\vspace
{
0.5em
}
\item
时间复杂度
:找到最优解需要多长时间。
\item
{
\small\bfnew
{
时间复杂度
}}
:找到最优解需要多长时间。
\vspace
{
0.5em
}
\item
空间复杂度
:执行策略需要多少内存。
\item
{
\small\bfnew
{
空间复杂度
}}
:执行策略需要多少内存。
\vspace
{
0.5em
}
\end{itemize}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论