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
485ac716
Commit
485ac716
authored
Nov 30, 2020
by
zengxin
Browse files
Options
Browse Files
Download
Plain Diff
合并分支 'zengxin' 到 'caorunzhe'
10 11 12 查看合并请求
!521
parents
d94fa2ec
d9550b40
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
11 行增加
和
11 行删除
+11
-11
Chapter10/chapter10.tex
+0
-0
Chapter11/chapter11.tex
+0
-0
Chapter12/chapter12.tex
+11
-11
没有找到文件。
Chapter10/chapter10.tex
查看文件 @
485ac716
差异被折叠。
点击展开。
Chapter11/chapter11.tex
查看文件 @
485ac716
差异被折叠。
点击展开。
Chapter12/chapter12.tex
查看文件 @
485ac716
...
...
@@ -56,7 +56,7 @@
\end{figure}
%----------------------------------------------
\parinterval
自注意力机制也可以被看作是一个序列表示模型。比如,对于每个目标位置
$
j
$
,都生成一个与之对应的源语句子表示,它的形式
为
:
\parinterval
自注意力机制也可以被看作是一个序列表示模型。比如,对于每个目标位置
$
j
$
,都生成一个与之对应的源语句子表示,它的形式
如公式
\eqref
{
eq:12-1
}
所示
:
\begin{eqnarray}
\mathbi
{
C
}_
j
&
=
&
\sum
_
i
\alpha
_{
i,j
}
\mathbi
{
h
}_
i
\label
{
eq:12-1
}
...
...
@@ -73,7 +73,7 @@
\end{figure}
%----------------------------------------------
\parinterval
举个例子,如图
\ref
{
fig:12-3
}
所示,一个汉语句子包含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-3
}
所示,一个汉语句子包含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
}$
(他)
,其具体计算如公式
\eqref
{
eq:12-2
}
所示
:
\begin{eqnarray}
\tilde
{
h
}
(
\textrm
{
他
}
)
&
=
&
\alpha
_
1
{
h
}
(
\textrm
{
他
}
) +
\alpha
_
2
{
h
}
(
\textrm
{
什么
}
) +
\alpha
_
3
{
h
}
(
\textrm
{
也
}
) +
\nonumber
\\
...
...
@@ -215,7 +215,7 @@
\end{figure}
%----------------------------------------------
\parinterval
位置编码的计算方式有很多种,Transformer使用不同频率的正余弦函数:
\parinterval
位置编码的计算方式有很多种,Transformer使用不同频率的正余弦函数
,如公式
\eqref
{
eq:12-3
}
和
\eqref
{
eq:12-4
}
所示
:
\begin{eqnarray}
\textrm
{
PE
}
(
\textrm
{
pos
}
,2i)
&
=
&
\textrm
{
sin
}
(
\frac
{
\textrm
{
pos
}}{
10000
^{
2i/d
_{
\textrm
{
model
}}}}
)
\label
{
eq:12-3
}
\\
\textrm
{
PE
}
(
\textrm
{
pos
}
,2i+1)
&
=
&
\textrm
{
cos
}
(
\frac
{
\textrm
{
pos
}}{
10000
^{
2i/d
_{
\textrm
{
model
}}}}
)
\label
{
eq:12-4
}
...
...
@@ -232,14 +232,14 @@
\end{figure}
%----------------------------------------------
\parinterval
那么为什么通过这种计算方式可以很好的表示位置信息?有几方面原因。首先,正余弦函数是具有上下界的周期函数,用正余弦函数可将长度不同的序列的位置编码的范围都固定到
$
[-
1
,
1
]
$
,这样在与词的编码进行相加时,不至于产生太大差距。另外位置编码的不同维度对应不同的正余弦曲线,这为多维的表示空间赋予一定意义。最后,根据三角函数的性质:
\parinterval
那么为什么通过这种计算方式可以很好的表示位置信息?有几方面原因。首先,正余弦函数是具有上下界的周期函数,用正余弦函数可将长度不同的序列的位置编码的范围都固定到
$
[-
1
,
1
]
$
,这样在与词的编码进行相加时,不至于产生太大差距。另外位置编码的不同维度对应不同的正余弦曲线,这为多维的表示空间赋予一定意义。最后,根据三角函数的性质
,如公式
\eqref
{
eq:12-5
}
和
\eqref
{
eq:12-6
}
:
\begin{eqnarray}
\textrm
{
sin
}
(
\alpha
+
\beta
)
&
=
&
\textrm
{
sin
}
\alpha
\cdot
\textrm
{
cos
}
\beta
+
\textrm
{
cos
}
\alpha
\cdot
\textrm
{
sin
}
\beta
\label
{
eq:12-5
}
\\
\textrm
{
cos
}
(
\alpha
+
\beta
)
&
=
&
\textrm
{
cos
}
\alpha
\cdot
\textrm
{
cos
}
\beta
-
\textrm
{
sin
}
\alpha
\cdot
\textrm
{
sin
}
\beta
\label
{
eq:12-6
}
\end{eqnarray}
\parinterval
可以得到第
$
pos
+
k
$
个位置的编码
为
:
\parinterval
可以得到第
$
pos
+
k
$
个位置的编码
,如公式
\eqref
{
eq:12-7
}
和
\eqref
{
eq:12-8
}
:
\begin{eqnarray}
\textrm
{
PE
}
(
\textrm
{
pos
}
+k,2i)
&
=
&
\textrm
{
PE
}
(
\textrm
{
pos
}
,2i)
\cdot
\textrm
{
PE
}
(k,2i+1) +
\nonumber
\\
&
&
\textrm
{
PE
}
(
\textrm
{
pos
}
,2i+1)
\cdot
\textrm
{
PE
}
(k,2i)
\label
{
eq:12-7
}
\\
...
...
@@ -279,7 +279,7 @@
\parinterval
在自注意力机制中,
$
\mathbi
{
Q
}$
、
$
\mathbi
{
K
}$
、
$
\mathbi
{
V
}$
都是相同的,对应着源语言或目标语言序列的表示。而在编码-解码注意力机制中,由于要对双语之间的信息进行建模,因此,将目标语每个位置的表示视为编码-解码注意力机制的
$
\mathbi
{
Q
}$
,源语言句子的表示视为
$
\mathbi
{
K
}$
和
$
\mathbi
{
V
}$
。
\parinterval
在得到
$
\mathbi
{
Q
}$
,
$
\mathbi
{
K
}$
和
$
\mathbi
{
V
}$
后,便可以进行注意力机制的运算,这个过程可以被形式化为:
\parinterval
在得到
$
\mathbi
{
Q
}$
,
$
\mathbi
{
K
}$
和
$
\mathbi
{
V
}$
后,便可以进行注意力机制的运算,这个过程可以被形式化为
公式
\eqref
{
eq:12-9
}
:
\begin{eqnarray}
\textrm
{
Attention
}
(
\mathbi
{
Q
}
,
\mathbi
{
K
}
,
\mathbi
{
V
}
) =
\textrm
{
Softmax
}
(
\frac
{
\mathbi
{
Q
}
\mathbi
{
K
}^{
\textrm
{
T
}}}
{
\sqrt
{
d
_
k
}}
+
\mathbi
{
Mask
}
)
\mathbi
{
V
}
...
...
@@ -342,7 +342,7 @@
\end{figure}
%----------------------------------------------
\parinterval
多头机制可以被形式化描述为
如下公式
:
\parinterval
多头机制可以被形式化描述为
公式
\eqref
{
eq:12-10
}
和
\eqref
{
eq:12-11
}
:
\begin{eqnarray}
\textrm
{
MultiHead
}
(
\mathbi
{
Q
}
,
\mathbi
{
K
}
,
\mathbi
{
V
}
)
&
=
&
\textrm
{
Concat
}
(
\mathbi
{
head
}_
1, ... ,
\mathbi
{
head
}_
h )
\mathbi
{
W
}^{
\,
o
}
\label
{
eq:12-10
}
\\
\mathbi
{
head
}_
i
&
=
&
\textrm
{
Attention
}
(
\mathbi
{
Q
}
\mathbi
{
W
}_
i
^{
\,
Q
}
,
\mathbi
{
K
}
\mathbi
{
W
}_
i
^{
\,
K
}
,
\mathbi
{
V
}
\mathbi
{
W
}_
i
^{
\,
V
}
)
...
...
@@ -414,14 +414,14 @@
\end{figure}
%----------------------------------------------
\parinterval
在Transformer的训练过程中,由于引入了残差操作,将前面所有层的输出加到一起,如公式:
\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
\label
{
eq:12-12
}
\end{eqnarray}
\noindent
其中
$
\mathbi
{
x
}^
l
$
表示第
$
l
$
层网络的输入向量,
$
F
(
\mathbi
{
x
}^
l
)
$
是子层运算,这样会导致不同层(或子层)的结果之间的差异性很大,造成训练过程不稳定、训练时间较长。为了避免这种情况,在每层中加入了层标准化操作
\upcite
{
Ba2016LayerN
}
。图
\ref
{
fig:12-14
}
中的红色方框展示了Transformer中残差和层标准化的位置。层标准化的计算
公式如下
:
\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
\label
{
eq:12-13
}
...
...
@@ -457,7 +457,7 @@
\end{figure}
%----------------------------------------------
\parinterval
Transformer使用了全连接网络。全连接网络的作用主要体现在将经过注意力操作之后的表示映射到新的空间中,新的空间会有利于接下来的非线性变换等操作。实验证明,去掉全连接网络会对模型的性能造成很大影响。Transformer的全连接前馈神经网络包含两次线性变换和一次非线性变换(ReLU激活函数:ReLU
$
(
\mathbi
{
x
}
)=
\textrm
{
max
}
(
0
,
\mathbi
{
x
}
)
$
),每层的前馈神经网络参数不共享,
计算公式如下
:
\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
\label
{
eq:12-14
}
...
...
@@ -487,7 +487,7 @@
\begin{itemize}
\vspace
{
0.5em
}
\item
Transformer使用Adam优化器优化参数,并设置
$
\beta
_
1
=
0
.
9
$
,
$
\beta
_
2
=
0
.
98
$
,
$
\epsilon
=
10
^{
-
9
}$
。
\item
Transformer在学习率中同样应用了学习率
{
\small\bfnew
{
预热
}}
\index
{
预热
}
(Warmup)
\index
{
Warmup
}
策略,其计算
公式如下
:
\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
}
)
\label
{
eq:12-15
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论