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
29db5a6d
Commit
29db5a6d
authored
Dec 19, 2020
by
zengxin
Browse files
Options
Browse Files
Download
Plain Diff
合并分支 'zengxin' 到 'caorunzhe'
Zengxin 查看合并请求
!642
parents
bbb125bb
621f1eeb
全部展开
显示空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
14 行增加
和
14 行删除
+14
-14
Chapter10/chapter10.tex
+0
-0
Chapter11/chapter11.tex
+9
-9
Chapter12/chapter12.tex
+5
-5
没有找到文件。
Chapter10/chapter10.tex
查看文件 @
29db5a6d
差异被折叠。
点击展开。
Chapter11/chapter11.tex
查看文件 @
29db5a6d
...
...
@@ -87,7 +87,7 @@
\parinterval
在卷积计算中,不同深度下卷积核不同但是执行操作相同,这里以二维卷积核为例展示具体卷积计算。若设输入矩阵为
$
\mathbi
{
x
}$
,输出矩阵为
$
\mathbi
{
y
}$
,卷积滑动步幅为
$
\textrm
{
stride
}$
,卷积核为
$
\mathbi
{
w
}$
,且
$
\mathbi
{
w
}
\in
\mathbb
{
R
}^{
Q
\times
U
}
$
,那么卷积计算过程如公式
\eqref
{
eq:11-1
}
所示:
\begin{eqnarray}
\mathbi
{
y
}_{
i,j
}
=
\sum
\sum
(
\mathbi
{
x
}_{
[j
\times
\textrm
{
stride
}
:j
\times
\textrm
{
stride
}
+U-1,i
\times
\textrm
{
stride
}
:i
\times
\textrm
{
stride
}
+Q-1]
}
\odot
\mathbi
{
w
}
)
\mathbi
{
y
}_{
i,j
}
&
=
&
\sum
\sum
(
\mathbi
{
x
}_{
[j
\times
\textrm
{
stride
}
:j
\times
\textrm
{
stride
}
+U-1,i
\times
\textrm
{
stride
}
:i
\times
\textrm
{
stride
}
+Q-1]
}
\odot
\mathbi
{
w
}
)
\label
{
eq:11-1
}
\end{eqnarray}
...
...
@@ -340,7 +340,7 @@
\parinterval
残差连接是一种训练深层网络的技术,其内容在
{
\chapternine
}
已经进行了介绍,即在多层神经网络之间通过增加直接连接的方式,从而将底层信息直接传递给上层。通过增加这样的直接连接,可以让不同层之间的信息传递更加高效,有利于深层神经网络的训练,其计算如公式
\eqref
{
eq:11-6
}
所示:
\begin{eqnarray}
\mathbi
{
h
}^{
l+1
}
=
F (
\mathbi
{
h
}^
l) +
\mathbi
{
h
}^
l
\mathbi
{
h
}^{
l+1
}
&
=
&
F (
\mathbi
{
h
}^
l) +
\mathbi
{
h
}^
l
\label
{
eq:11-6
}
\end{eqnarray}
...
...
@@ -349,7 +349,7 @@
\parinterval
在ConvS2S中残差连接主要应用于门控卷积神经网络和多跳自注意力机制中,比如在编码器的多层门控卷积神经网络中,在每一层的输入和输出之间增加残差连接,具体的数学描述如公式
\eqref
{
eq:11-7
}
所示:
\begin{eqnarray}
%\mathbi{h}_i^l = \funp{v} (\mathbi{W}^l [\mathbi{h}_{i-\frac{k}{2}}^{l-1},...,\mathbi{h}_{i+\frac{k}{2}}^{l-1}] + b_{\mathbi{W}}^l ) + \mathbi{h}_i^{l-1}
\mathbi
{
h
}^{
l+1
}
=
\mathbi
{
A
}^{
l
}
\otimes
\sigma
(
\mathbi
{
B
}^{
l
}
) +
\mathbi
{
h
}^{
l
}
\mathbi
{
h
}^{
l+1
}
&
=
&
\mathbi
{
A
}^{
l
}
\otimes
\sigma
(
\mathbi
{
B
}^{
l
}
) +
\mathbi
{
h
}^{
l
}
\label
{
eq:11-7
}
\end{eqnarray}
...
...
@@ -383,7 +383,7 @@
\parinterval
在ConvS2S模型中,解码器同样采用堆叠的多层门控卷积网络来对目标语言进行序列建模。区别于编码器,解码器在每一层卷积网络之后引入了注意力机制,用来参考源语言信息。ConvS2S选用了点乘注意力,并且通过类似残差连接的方式将注意力操作的输入与输出同时作用于下一层计算,称为多跳注意力。其具体计算方式如公式
\eqref
{
eq:11-10
}
所示:
\begin{eqnarray}
\alpha
_{
ij
}^
l
=
\frac
{
\textrm
{
exp
}
(
\mathbi
{
d
}_{
j
}^
l
\mathbi
{
h
}_
i)
}{
\sum
_{
i
^{
'
}
=1
}^
m
\textrm
{
exp
}
(
\mathbi
{
d
}_{
j
}^
l
\mathbi
{
h
}_{
i
^{
'
}}
)
}
\alpha
_{
ij
}^
l
&
=
&
\frac
{
\textrm
{
exp
}
(
\mathbi
{
d
}_{
j
}^
l
\mathbi
{
h
}_
i)
}{
\sum
_{
i
^{
'
}
=1
}^
m
\textrm
{
exp
}
(
\mathbi
{
d
}_{
j
}^
l
\mathbi
{
h
}_{
i
^{
'
}}
)
}
\label
{
eq:11-10
}
\end{eqnarray}
...
...
@@ -395,13 +395,13 @@
\noindent
其中,
$
\mathbi
{
z
}_
j
^
l
$
表示第
$
l
$
层卷积网络输出中第
$
j
$
个位置的表示,
$
\mathbi
{
W
}_{
d
}^{
l
}$
和
$
\mathbi
{
b
}_{
d
}^{
l
}$
是模型可学习的参数,
$
\textrm
{
Conv
}
(
\cdot
)
$
表示卷积操作。在获得第
$
l
$
层的注意力权重之后,就可以得到对应的一个上下文表示
$
\mathbi
{
C
}_
j
^
l
$
,具体计算如公式
\eqref
{
eq:11-13
}
所示:
\begin{eqnarray}
\mathbi
{
C
}_
j
^
l
=
\sum
_
i
\alpha
_{
ij
}^
l (
\mathbi
{
h
}_
i +
\mathbi
{
e
}_
i)
\mathbi
{
C
}_
j
^
l
&
=
&
\sum
_
i
\alpha
_{
ij
}^
l (
\mathbi
{
h
}_
i +
\mathbi
{
e
}_
i)
\label
{
eq:11-13
}
\end{eqnarray}
\noindent
模型使用了更全面的源语言信息,同时考虑了源语言端编码表示
$
\mathbi
{
h
}_
i
$
以及词嵌入表示
$
\mathbi
{
e
}_
i
$
。在获得第
$
l
$
层的上下文向量
$
\mathbi
{
C
}_
j
^
l
$
后,模型将其与
$
\mathbi
{
z
}_
j
^
l
$
相加后送入下一层网络,这个过程可以被描述为公式
\eqref
{
eq:11-14
}
:
\begin{eqnarray}
\mathbi
{
s
}_
j
^{
l+1
}
=
\mathbi
{
C
}_
j
^
l +
\mathbi
{
z
}_
j
^
l
\mathbi
{
s
}_
j
^{
l+1
}
&
=
&
\mathbi
{
C
}_
j
^
l +
\mathbi
{
z
}_
j
^
l
\label
{
eq:11-14
}
\end{eqnarray}
...
...
@@ -478,7 +478,7 @@
\parinterval
给定输入序列表示
$
\seq
{
x
}
=
\{
\mathbi
{
x
}_
1
,
\mathbi
{
x
}_
2
,...,
\mathbi
{
x
}_
m
\}
$
,其中
$
m
$
为序列长度,
$
\mathbi
{
x
}_
i
\in
\mathbb
{
R
}^{
O
}
$
,
$
O
$
即输入序列的通道数。为了获得与输入序列长度相同的卷积输出结果,首先需要进行填充。为了方便描述,这里在输入序列尾部填充
$
K
-
1
$
个元素(
$
K
$
为卷积核窗口的长度),其对应的卷积结果为
$
\seq
{
z
}
=
\{
\mathbi
{
z
}_
1
,
\mathbi
{
z
}_
2
,...,
\mathbi
{
z
}_
m
\}
$
。
在标准卷积中,若使用N表示卷积核的个数,也就是标准卷积输出序列的通道数,那么对于第
$
i
$
个位置的第
$
n
$
个通道
$
\mathbi
{
z
}_{
i,n
}^
\textrm
{
\,
std
}$
,其标准卷积具体计算如公式
\eqref
{
eq:11-18
}
所示:
\begin{eqnarray}
\mathbi
{
z
}_{
i,n
}^
\textrm
{
\,
std
}
=
\sum
_{
o=1
}^{
O
}
\sum
_{
k=0
}^{
K-1
}
\mathbi
{
W
}_{
k,o,n
}^
\textrm
{
\,
std
}
\mathbi
{
x
}_{
i+k,o
}
\mathbi
{
z
}_{
i,n
}^
\textrm
{
\,
std
}
&
=
&
\sum
_{
o=1
}^{
O
}
\sum
_{
k=0
}^{
K-1
}
\mathbi
{
W
}_{
k,o,n
}^
\textrm
{
\,
std
}
\mathbi
{
x
}_{
i+k,o
}
\label
{
eq:11-18
}
\end{eqnarray}
...
...
@@ -488,7 +488,7 @@
\parinterval
相应的,深度卷积只考虑不同词之间的依赖性,而不考虑不同通道之间的关系,相当于使用
$
O
$
个卷积核逐个通道对不同的词进行卷积操作。因此深度卷积不改变输出的表示维度,输出序列表示的通道数与输入序列一致,其计算如公式
\eqref
{
eq:11-19
}
所示:
\begin{eqnarray}
\mathbi
{
z
}_{
i,o
}^
\textrm
{
\,
dw
}
=
\sum
_{
k=0
}^{
K-1
}
\mathbi
{
W
}_{
k,o
}^
\textrm
{
\,
dw
}
\mathbi
{
x
}_{
i+k,o
}
\mathbi
{
z
}_{
i,o
}^
\textrm
{
\,
dw
}
&
=
&
\sum
_{
k=0
}^{
K-1
}
\mathbi
{
W
}_{
k,o
}^
\textrm
{
\,
dw
}
\mathbi
{
x
}_{
i+k,o
}
\label
{
eq:11-19
}
\end{eqnarray}
...
...
@@ -564,7 +564,7 @@
\parinterval
在轻量卷积中,模型使用的卷积参数是静态的,与序列位置无关, 维度大小为
$
K
\times
a
$
;而在动态卷积中,为了增强模型的表示能力,卷积参数来自于当前位置输入的变换,具体如公式
\eqref
{
eq:11-22
}
:
\begin{eqnarray}
\funp
{
f
}
(
\mathbi
{
x
}_{
i
}
)
=
\sum
_{
c=1
}^
d
\mathbi
{
W
}_{
:,:,c
}
\odot
\mathbi
{
x
}_{
i,c
}
\funp
{
f
}
(
\mathbi
{
x
}_{
i
}
)
&
=
&
\sum
_{
c=1
}^
d
\mathbi
{
W
}_{
:,:,c
}
\odot
\mathbi
{
x
}_{
i,c
}
\label
{
eq:11-22
}
\end{eqnarray}
...
...
Chapter12/chapter12.tex
查看文件 @
29db5a6d
...
...
@@ -281,7 +281,7 @@
\parinterval
在得到
$
\mathbi
{
Q
}$
,
$
\mathbi
{
K
}$
和
$
\mathbi
{
V
}$
后,便可以进行注意力机制的运算,这个过程可以被形式化为公式
\eqref
{
eq:12-9
}
:
\begin{eqnarray}
\textrm
{
Attention
}
(
\mathbi
{
Q
}
,
\mathbi
{
K
}
,
\mathbi
{
V
}
)
=
\textrm
{
Softmax
}
\textrm
{
Attention
}
(
\mathbi
{
Q
}
,
\mathbi
{
K
}
,
\mathbi
{
V
}
)
&
=
&
\textrm
{
Softmax
}
(
\frac
{
\mathbi
{
Q
}
\mathbi
{
K
}^{
\textrm
{
T
}}}
{
\sqrt
{
d
_
k
}}
+
\mathbi
{
Mask
}
)
\mathbi
{
V
}
\label
{
eq:12-9
}
\end{eqnarray}
...
...
@@ -417,13 +417,13 @@
\parinterval
在Transformer的训练过程中,由于引入了残差操作,将前面所有层的输出加到一起,如公式
\eqref
{
eq:12-12
}
所示:
\begin{eqnarray}
%x_{l+1} = x_l + F (x_l)
\mathbi
{
x
}^{
l+1
}
=
F (
\mathbi
{
x
}^
l) +
\mathbi
{
x
}^
l
\mathbi
{
x
}^{
l+1
}
&
=
&
F (
\mathbi
{
x
}^
l) +
\mathbi
{
x
}^
l
\label
{
eq:12-12
}
\end{eqnarray}
\noindent
其中
$
\mathbi
{
x
}^
l
$
表示第
$
l
$
层网络的输入向量,
$
F
(
\mathbi
{
x
}^
l
)
$
是子层运算,这样会导致不同层(或子层)的结果之间的差异性很大,造成训练过程不稳定、训练时间较长。为了避免这种情况,在每层中加入了层标准化操作
\upcite
{
Ba2016LayerN
}
。图
\ref
{
fig:12-14
}
中的红色方框展示了Transformer中残差和层标准化的位置。层标准化的计算如公式
\eqref
{
eq:12-13
}
所示:
\begin{eqnarray}
\textrm
{
LN
}
(
\mathbi
{
x
}
)
=
g
\cdot
\frac
{
\mathbi
{
x
}
-
\mu
}
{
\sigma
}
+ b
\textrm
{
LN
}
(
\mathbi
{
x
}
)
&
=
&
g
\cdot
\frac
{
\mathbi
{
x
}
-
\mu
}
{
\sigma
}
+ b
\label
{
eq:12-13
}
\end{eqnarray}
...
...
@@ -459,7 +459,7 @@
\parinterval
Transformer使用了全连接网络。全连接网络的作用主要体现在将经过注意力操作之后的表示映射到新的空间中,新的空间会有利于接下来的非线性变换等操作。实验证明,去掉全连接网络会对模型的性能造成很大影响。Transformer的全连接前馈神经网络包含两次线性变换和一次非线性变换(ReLU激活函数:ReLU
$
(
\mathbi
{
x
}
)=
\textrm
{
max
}
(
0
,
\mathbi
{
x
}
)
$
),每层的前馈神经网络参数不共享,具体计算如公式
\eqref
{
eq:12-14
}
:
\begin{eqnarray}
\textrm
{
FFN
}
(
\mathbi
{
x
}
)
=
\textrm
{
max
}
(0,
\mathbi
{
x
}
\mathbi
{
W
}_
1 +
\mathbi
{
b
}_
1)
\mathbi
{
W
}_
2 +
\mathbi
{
b
}_
2
\textrm
{
FFN
}
(
\mathbi
{
x
}
)
&
=
&
\textrm
{
max
}
(0,
\mathbi
{
x
}
\mathbi
{
W
}_
1 +
\mathbi
{
b
}_
1)
\mathbi
{
W
}_
2 +
\mathbi
{
b
}_
2
\label
{
eq:12-14
}
\end{eqnarray}
...
...
@@ -489,7 +489,7 @@
\item
Transformer使用Adam优化器优化参数,并设置
$
\beta
_
1
=
0
.
9
$
,
$
\beta
_
2
=
0
.
98
$
,
$
\epsilon
=
10
^{
-
9
}$
。
\item
Transformer在学习率中同样应用了学习率
{
\small\bfnew
{
预热
}}
\index
{
预热
}
(Warmup)
\index
{
Warmup
}
策略,其计算如公式
\eqref
{
eq:12-15
}
所示:
\begin{eqnarray}
lrate
=
d
_{
\textrm
{
model
}}^{
-0.5
}
\cdot
\textrm
{
min
}
(
\textrm
{
step
}^{
-0.5
}
,
\textrm
{
step
}
\cdot
\textrm
{
warmup
\_
steps
}^{
-1.5
}
)
lrate
&
=
&
d
_{
\textrm
{
model
}}^{
-0.5
}
\cdot
\textrm
{
min
}
(
\textrm
{
step
}^{
-0.5
}
,
\textrm
{
step
}
\cdot
\textrm
{
warmup
\_
steps
}^{
-1.5
}
)
\label
{
eq:12-15
}
\end{eqnarray}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论