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
8112aa29
Commit
8112aa29
authored
Mar 10, 2021
by
孟霞
Browse files
Options
Browse Files
Download
Plain Diff
合并分支 'master' 到 'mengxia'
Master 查看合并请求
!1060
parents
1466c358
d6accf60
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
30 行增加
和
30 行删除
+30
-30
Chapter10/Figures/figure-the-whole-of-lstm.tex
+3
-3
Chapter10/chapter10.tex
+9
-9
Chapter11/chapter11.tex
+6
-6
Chapter13/Figures/figure-computation-of-dropout.tex
+3
-3
Chapter15/chapter15.tex
+9
-9
没有找到文件。
Chapter10/Figures/figure-the-whole-of-lstm.tex
查看文件 @
8112aa29
...
...
@@ -170,11 +170,11 @@
\begin{scope}
{
% forget gate formula
\node
[formulanode,anchor=south east,text width=10em]
() at ([shift=
{
(4
\base
,1.5
\base
)
}
]aux51)
{
遗忘门
\\
$
\mathbi
{
f
}_
t
=
\sigma
(
\mathbi
{
W
}_
f
[
\mathbi
{
h
}_{
t
-
1
}
,
\mathbi
{
x
}_
t
]
+
\mathbi
{
b
}_
f
)
$}
;
\node
[formulanode,anchor=south east,text width=10em]
() at ([shift=
{
(4
\base
,1.5
\base
)
}
]aux51)
{
遗忘门
\\
$
\mathbi
{
f
}_
t
=
\sigma
(
[
\mathbi
{
h
}_{
t
-
1
}
,
\mathbi
{
x
}_
t
]
\mathbi
{
W
}_
f
+
\mathbi
{
b
}_
f
)
$}
;
}
{
% input gate formula
\node
[formulanode,anchor=north east,text width=10em]
() at ([shift=
{
(4
\base
,-1.5
\base
)
}
]aux21)
{
输入门
\\
$
\mathbi
{
i
}_
t
=
\sigma
(
\mathbi
{
W
}_
i
[
\mathbi
{
h
}_{
t
-
1
}
,
\mathbi
{
x
}_
t
]+
\mathbi
{
b
}_
i
)
$
\\
$
\hat
{
\mathbi
{
c
}}_
t
=
\mathrm
{
Tanh
}
(
\mathbi
{
W
}_
c
[
\mathbi
{
h
}_{
t
-
1
}
,
\mathbi
{
x
}_
t
]
+
\mathbi
{
b
}_
c
)
$}
;
\node
[formulanode,anchor=north east,text width=10em]
() at ([shift=
{
(4
\base
,-1.5
\base
)
}
]aux21)
{
输入门
\\
$
\mathbi
{
i
}_
t
=
\sigma
(
[
\mathbi
{
h
}_{
t
-
1
}
,
\mathbi
{
x
}_
t
]
\mathbi
{
W
}_
i
+
\mathbi
{
b
}_
i
)
$
\\
$
\hat
{
\mathbi
{
c
}}_
t
=
\mathrm
{
Tanh
}
([
\mathbi
{
h
}_{
t
-
1
}
,
\mathbi
{
x
}_
t
]
\mathbi
{
W
}_
c
+
\mathbi
{
b
}_
c
)
$}
;
}
{
% cell update formula
...
...
@@ -182,7 +182,7 @@
}
{
% output gate formula
\node
[formulanode,anchor=north west,text width=10em]
() at ([shift=
{
(-4
\base
,-1.5
\base
)
}
]aux29)
{
输出门
\\
$
\mathbi
{
o
}_
t
=
\sigma
(
\mathbi
{
W
}_
o
[
\mathbi
{
h
}_{
t
-
1
}
,
\mathbi
{
x
}_
t
]
+
\mathbi
{
b
}_
o
)
$
\\
$
\mathbi
{
h
}_{
t
}
=
\mathbi
{
o
}_
t
\cdot
\mathrm
{
Tanh
}
(
\mathbi
{
c
}_{
t
}
)
$}
;
\node
[formulanode,anchor=north west,text width=10em]
() at ([shift=
{
(-4
\base
,-1.5
\base
)
}
]aux29)
{
输出门
\\
$
\mathbi
{
o
}_
t
=
\sigma
(
[
\mathbi
{
h
}_{
t
-
1
}
,
\mathbi
{
x
}_
t
]
\mathbi
{
W
}_
o
+
\mathbi
{
b
}_
o
)
$
\\
$
\mathbi
{
h
}_{
t
}
=
\mathbi
{
o
}_
t
\cdot
\mathrm
{
Tanh
}
(
\mathbi
{
c
}_{
t
}
)
$}
;
}
\end{scope}
\end{tikzpicture}
...
...
Chapter10/chapter10.tex
查看文件 @
8112aa29
...
...
@@ -530,7 +530,7 @@ $\funp{P}({y_j | \mathbi{s}_{j-1} ,y_{j-1},\mathbi{C}})$由Softmax实现,Softm
\vspace
{
0.5em
}
\item
{
\small\bfnew
{
遗忘
}}
\index
{
遗忘
}
。顾名思义,遗忘的目的是忘记一些历史,在LSTM中通过遗忘门实现,其结构如图
\ref
{
fig:10-11
}
(a)所示。
$
\mathbi
{
x
}_{
t
}$
表示时刻
$
t
$
的输入向量,
$
\mathbi
{
h
}_{
t
-
1
}$
是时刻
$
t
-
1
$
的循环单元的输出,
$
\mathbi
{
x
}_{
t
}$
和
$
\mathbi
{
h
}_{
t
-
1
}$
都作为
$
t
$
时刻循环单元的输入。
$
\sigma
$
将对
$
\mathbi
{
x
}_{
t
}$
和
$
\mathbi
{
h
}_{
t
-
1
}$
进行筛选,以决定遗忘的信息,其计算如下:
\begin{eqnarray}
\mathbi
{
f
}_
t
&
=
&
\sigma
(
\mathbi
{
W
}_
f [
\mathbi
{
h
}_{
t-1
}
,
\mathbi
{
x
}_{
t
}
]
+
\mathbi
{
b
}_
f )
\mathbi
{
f
}_
t
&
=
&
\sigma
(
[
\mathbi
{
h
}_{
t-1
}
,
\mathbi
{
x
}_{
t
}
]
\mathbi
{
W
}_
f
+
\mathbi
{
b
}_
f )
\label
{
eq:10-6
}
\end{eqnarray}
...
...
@@ -538,8 +538,8 @@ $\funp{P}({y_j | \mathbi{s}_{j-1} ,y_{j-1},\mathbi{C}})$由Softmax实现,Softm
\vspace
{
0.5em
}
\item
{
\small\bfnew
{
记忆更新
}}
\index
{
记忆更新
}
。首先,要生成当前时刻需要新增加的信息,该部分由输入门完成,其结构如图
\ref
{
fig:10-11
}
(b)红色线部分,图中“
$
\bigotimes
$
”表示进行点乘操作。输入门的计算分为两部分,首先利用
$
\sigma
$
决定门控参数
$
\mathbi
{
i
}_
t
$
,如公式
\eqref
{
eq:10-7
}
,然后通过Tanh函数得到新的信息
$
\hat
{
\mathbi
{
c
}}_
t
$
,如公式
\eqref
{
eq:10-8
}
:
\begin{eqnarray}
\mathbi
{
i
}_
t
&
=
&
\sigma
(
\mathbi
{
W
}_
i [
\mathbi
{
h
}_{
t-1
}
,
\mathbi
{
x
}_{
t
}
]
+
\mathbi
{
b
}_
i )
\label
{
eq:10-7
}
\\
\hat
{
\mathbi
{
c
}}_
t
&
=
&
\textrm
{
Tanh
}
(
\mathbi
{
W
}_
c [
\mathbi
{
h
}_{
t-1
}
,
\mathbi
{
x
}_{
t
}
]
+
\mathbi
{
b
}_
c )
\label
{
eq:10-8
}
\mathbi
{
i
}_
t
&
=
&
\sigma
(
[
\mathbi
{
h
}_{
t-1
}
,
\mathbi
{
x
}_{
t
}
]
\mathbi
{
W
}_
i
+
\mathbi
{
b
}_
i )
\label
{
eq:10-7
}
\\
\hat
{
\mathbi
{
c
}}_
t
&
=
&
\textrm
{
Tanh
}
(
[
\mathbi
{
h
}_{
t-1
}
,
\mathbi
{
x
}_{
t
}
]
\mathbi
{
W
}_
c
+
\mathbi
{
b
}_
c )
\label
{
eq:10-8
}
\end{eqnarray}
之后,用
$
\mathbi
{
i
}_
t
$
点乘
$
\hat
{
\mathbi
{
c
}}_
t
$
,得到当前需要记忆的信息,记为
$
\mathbi
{
i
}_
t
\cdot
\hat
{
\mathbi
{
c
}}_
t
$
。接下来需要更新旧的信息
$
\mathbi
{
c
}_{
t
-
1
}$
,得到新的记忆信息
$
\mathbi
{
c
}_
t
$
,更新的操作如图
\ref
{
fig:10-11
}
(c)红色线部分所示,“
$
\bigoplus
$
”表示相加。具体规则是通过遗忘门选择忘记一部分上文信息
$
\mathbi
{
f
}_
t
$
,通过输入门计算新增的信息
$
\mathbi
{
i
}_
t
\cdot
\hat
{
\mathbi
{
c
}}_
t
$
,然后根据“
$
\bigotimes
$
”门与“
$
\bigoplus
$
”门进行相应的乘法和加法计算,如公式
\eqref
{
eq:10-9
}
:
...
...
@@ -550,7 +550,7 @@ $\funp{P}({y_j | \mathbi{s}_{j-1} ,y_{j-1},\mathbi{C}})$由Softmax实现,Softm
\vspace
{
-1.0em
}
\item
{
\small\bfnew
{
输出
}}
\index
{
输出
}
。该部分使用输出门计算最终的输出信息
$
\mathbi
{
h
}_
t
$
,其结构如图
\ref
{
fig:10-11
}
(d)红色线部分所示。在输出门中,首先将
$
\mathbi
{
x
}_
t
$
和
$
\mathbi
{
h
}_{
t
-
1
}$
通过
$
\sigma
$
函数变换得到
$
\mathbi
{
o
}_
t
$
,如公式
\eqref
{
eq:10-10
}
。其次,将上一步得到的新记忆信息
$
\mathbi
{
c
}_
t
$
通过Tanh函数进行变换,得到值在[-1,1]范围的向量。最后将这两部分进行点乘,具体如公式
\eqref
{
eq:10-11
}
:
\begin{eqnarray}
\mathbi
{
o
}_
t
&
=
&
\sigma
(
\mathbi
{
W
}_
o [
\mathbi
{
h
}_{
t-1
}
,
\mathbi
{
x
}_{
t
}
]
+
\mathbi
{
b
}_
o )
\label
{
eq:10-10
}
\\
\mathbi
{
o
}_
t
&
=
&
\sigma
(
[
\mathbi
{
h
}_{
t-1
}
,
\mathbi
{
x
}_{
t
}
]
\mathbi
{
W
}_
o
+
\mathbi
{
b
}_
o )
\label
{
eq:10-10
}
\\
\mathbi
{
h
}_
t
&
=
&
\mathbi
{
o
}_
t
\cdot
\textrm
{
Tanh
}
(
\mathbi
{
c
}_
t)
\label
{
eq:10-11
}
\end{eqnarray}
\vspace
{
0.5em
}
...
...
@@ -589,19 +589,19 @@ $\funp{P}({y_j | \mathbi{s}_{j-1} ,y_{j-1},\mathbi{C}})$由Softmax实现,Softm
\parinterval
GRU的输入和RNN是一样的,由输入
$
\mathbi
{
x
}_
t
$
和
$
t
-
1
$
时刻的状态
$
\mathbi
{
h
}_{
t
-
1
}$
组成。GRU只有两个门信号,分别是重置门和更新门。重置门
$
\mathbi
{
r
}_
t
$
用来控制前一时刻隐藏状态的记忆程度,其结构如图
\ref
{
fig:10-13
}
(a),其计算如公式
\eqref
{
eq:10-12
}
。更新门用来更新记忆,使用一个门同时完成遗忘和记忆两种操作,其结构如图
\ref
{
fig:10-13
}
(b),其计算如公式
\eqref
{
eq:10-13
}
。
\begin{eqnarray}
\mathbi
{
r
}_
t
&
=
&
\sigma
(
\mathbi
{
W
}_
r [
\mathbi
{
h
}_{
t-1
}
,
\mathbi
{
x
}_{
t
}
]
)
\label
{
eq:10-12
}
\\
\mathbi
{
u
}_
t
&
=
&
\sigma
(
\mathbi
{
W
}_
u [
\mathbi
{
h
}_{
t-1
}
,
\mathbi
{
x
}_{
t
}
]
)
\label
{
eq:10-13
}
\mathbi
{
r
}_
t
&
=
&
\sigma
(
[
\mathbi
{
h
}_{
t-1
}
,
\mathbi
{
x
}_{
t
}
]
\mathbi
{
W
}_
r
)
\label
{
eq:10-12
}
\\
\mathbi
{
u
}_
t
&
=
&
\sigma
(
[
\mathbi
{
h
}_{
t-1
}
,
\mathbi
{
x
}_{
t
}
]
\mathbi
{
W
}_
u
)
\label
{
eq:10-13
}
\end{eqnarray}
\parinterval
当完成了重置门和更新门计算后,就需要更新当前隐藏状态,如图
\ref
{
fig:10-13
}
(c)所示。在计算得到了重置门的权重
$
\mathbi
{
r
}_
t
$
后,使用其对前一时刻的状态
$
\mathbi
{
h
}_{
t
-
1
}$
进行重置(
$
\mathbi
{
r
}_
t
\cdot
\mathbi
{
h
}_{
t
-
1
}$
),将重置后的结果与
$
\mathbi
{
x
}_
t
$
拼接,通过Tanh激活函数将数据变换到[-1,1]范围内,具体计算为:
\begin{eqnarray}
\hat
{
\mathbi
{
h
}}_
t
&
=
&
\textrm
{
Tanh
}
(
\mathbi
{
W
}_
h [
\mathbi
{
r
}_
t
\cdot
\mathbi
{
h
}_{
t-1
}
,
\mathbi
{
x
}_{
t
}
]
)
\hat
{
\mathbi
{
h
}}_
t
&
=
&
\textrm
{
Tanh
}
(
[
\mathbi
{
r
}_
t
\cdot
\mathbi
{
h
}_{
t-1
}
,
\mathbi
{
x
}_{
t
}
]
\mathbi
{
W
}_
h
)
\label
{
eq:10-14
}
\end{eqnarray}
\parinterval
$
\hat
{
\mathbi
{
h
}}_
t
$
在包含了输入信息
$
\mathbi
{
x
}_
t
$
的同时,引入了
$
\mathbi
{
h
}_{
t
-
1
}$
的信息,可以理解为,记忆了当前时刻的状态。下一步是计算更新后的隐藏状态也就是更新记忆,如下:
\begin{eqnarray}
\mathbi
{
h
}_
t
&
=
&
(1-
\mathbi
{
u
}_
t)
\cdot
\mathbi
{
h
}_{
t-1
}
+
\mathbi
{
u
}_
t
\cdot
\hat
{
\mathbi
{
h
}}_
t
\mathbi
{
h
}_
t
&
=
&
\mathbi
{
h
}_{
t-1
}
\cdot
(1-
\mathbi
{
u
}_
t) +
\hat
{
\mathbi
{
h
}}_
t
\cdot
\mathbi
{
u
}_
t
\label
{
eq:10-15
}
\end{eqnarray}
...
...
@@ -753,7 +753,7 @@ a (\mathbi{s},\mathbi{h}) &=& \left\{ \begin{array}{ll}
\mathbi
{
s
}
\mathbi
{
h
}^{
\textrm
{
T
}}
&
\textrm
{
向量乘
}
\\
\textrm
{
cos
}
(
\mathbi
{
s
}
,
\mathbi
{
h
}
)
&
\textrm
{
向量夹角
}
\\
\mathbi
{
s
}
\mathbi
{
W
}
\mathbi
{
h
}^{
\textrm
{
T
}}
&
\textrm
{
线性模型
}
\\
\textrm
{
Tanh
}
(
\mathbi
{
W
}
[
\mathbi
{
s
}
,
\mathbi
{
h
}
]
)
\mathbi
{
v
}^{
\textrm
{
T
}}
&
\textrm
{
拼接
}
[
\mathbi
{
s
}
,
\mathbi
{
h
}
]+
\textrm
{
单层网络
}
\textrm
{
Tanh
}
(
[
\mathbi
{
s
}
,
\mathbi
{
h
}
]
\mathbi
{
W
}
)
\mathbi
{
v
}^{
\textrm
{
T
}}
&
\textrm
{
拼接
}
[
\mathbi
{
s
}
,
\mathbi
{
h
}
]+
\textrm
{
单层网络
}
\end{array}
\right
.
\label
{
eq:10-18
}
...
...
Chapter11/chapter11.tex
查看文件 @
8112aa29
...
...
@@ -382,13 +382,13 @@
\parinterval
在ConvS2S模型中,解码器同样采用堆叠的多层门控卷积网络来对目标语言进行序列建模。区别于编码器,解码器在每一层卷积网络之后引入了注意力机制,用来参考源语言信息。ConvS2S选用了点乘注意力,并且通过类似残差连接的方式将注意力操作的输入与输出同时作用于下一层计算,称为多步注意力。其具体计算方式如下:
\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
{
h
}_
i
\mathbi
{
d
}_{
j
}^
l)
}{
\sum
_{
i
^{
'
}
=1
}^
m
\textrm
{
exp
}
(
\mathbi
{
h
}_{
i
^{
'
}}
\mathbi
{
d
}_{
j
}^
l
)
}
\label
{
eq:11-10
}
\end{eqnarray}
\noindent
不同于公式
\eqref
{
eq:11-9
}
中使用的目标语言端隐藏层表示
$
\mathbi
{
s
}_{
j
-
1
}$
,公式
\eqref
{
eq:11-10
}
中的
$
\mathbi
{
d
}_{
j
}^
l
$
同时结合了
$
\mathbi
{
s
}_{
j
}$
的卷积计算结果和目标语言端的词嵌入
$
\mathbi
{
g
}_
j
$
,其具体计算如公式
\eqref
{
eq:11-11
}
和
\eqref
{
eq:11-12
}
所示:
\begin{eqnarray}
\mathbi
{
d
}_{
j
}^
l
&
=
&
\mathbi
{
W
}_{
d
}^{
l
}
\mathbi
{
z
}_{
j
}^{
l
}
+
\mathbi
{
b
}_{
d
}^{
l
}
+
\mathbi
{
g
}_
j
\label
{
eq:11-11
}
\\
\mathbi
{
d
}_{
j
}^
l
&
=
&
\mathbi
{
z
}_{
j
}^{
l
}
\mathbi
{
W
}_{
d
}^{
l
}
+
\mathbi
{
b
}_{
d
}^{
l
}
+
\mathbi
{
g
}_
j
\label
{
eq:11-11
}
\\
\mathbi
{
z
}_
j
^
l
&
=
&
\textrm
{
Conv
}
(
\mathbi
{
s
}_
j
^
l)
\label
{
eq:11-12
}
\end{eqnarray}
...
...
@@ -477,7 +477,7 @@
\parinterval
给定输入序列表示
$
\seq
{
x
}
=
\{
\mathbi
{
x
}_
1
,...,
\mathbi
{
x
}_
m
\}
$
,其中
$
m
$
为序列长度,
$
\mathbi
{
x
}_
i
\in
\mathbb
{
R
}^{
O
}
$
,
$
O
$
即输入序列的通道数。为了获得与输入序列长度相同的卷积输出结果,首先需要进行填充。为了方便描述,这里在输入序列尾部填充
$
K
-
1
$
个元素(
$
K
$
为卷积核窗口的长度),其对应的卷积结果为
$
\seq
{
z
}
=
\{
\mathbi
{
z
}_
1
,...,
\mathbi
{
z
}_
m
\}
$
。
在标准卷积中,若使用N表示卷积核的个数,也就是标准卷积输出序列的通道数,那么对于第
$
i
$
个位置的第
$
n
$
个通道
$
\mathbi
{
z
}_{
i,n
}^
\textrm
{
\,
std
}$
,其标准卷积具体计算如下:
\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
{
x
}_{
i+k,o
}
\mathbi
{
W
}_{
k,o,n
}^
\textrm
{
\,
std
}
\label
{
eq:11-18
}
\end{eqnarray}
...
...
@@ -487,7 +487,7 @@
\parinterval
相应的,深度卷积只考虑不同词之间的依赖性,而不考虑不同通道之间的关系,相当于使用
$
O
$
个卷积核逐个通道对不同的词进行卷积操作。因此深度卷积不改变输出的表示维度,输出序列表示的通道数与输入序列一致,其计算如下:
\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
{
x
}_{
i+k,o
}
\mathbi
{
W
}_{
k,o
}^
\textrm
{
\,
dw
}
\label
{
eq:11-19
}
\end{eqnarray}
...
...
@@ -548,7 +548,7 @@
\parinterval
此外,和标准卷积不同的是,轻量卷积之前需要先对卷积参数进行归一化,具体计算过程为:
\begin{eqnarray}
\mathbi
{
z
}_{
i,o
}^
\textrm
{
\,
lw
}
&
=
&
\sum
_{
k=0
}^{
K-1
}
\
textrm
{
Softmax
}
(
\mathbi
{
W
}^
\textrm
{
\,
lw
}
)
_{
k,[
\frac
{
oa
}{
d
}
]
}
\mathbi
{
x
}_{
i+k,o
}
\mathbi
{
z
}_{
i,o
}^
\textrm
{
\,
lw
}
&
=
&
\sum
_{
k=0
}^{
K-1
}
\
mathbi
{
x
}_{
i+k,o
}
\textrm
{
Softmax
}
(
\mathbi
{
W
}^
\textrm
{
\,
lw
}
)
_{
k,[
\frac
{
oa
}{
d
}
]
}
\label
{
eq:11-21
}
\end{eqnarray}
...
...
@@ -563,7 +563,7 @@
\parinterval
在轻量卷积中,模型使用的卷积参数是静态的,与序列位置无关, 维度大小为
$
K
\times
a
$
;而在动态卷积中,为了增强模型的表示能力,卷积参数来自于当前位置输入的变换,具体计算为:
\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
{
x
}_{
i,c
}
\odot
\mathbi
{
W
}_{
:,:
,c
}
\label
{
eq:11-22
}
\end{eqnarray}
...
...
Chapter13/Figures/figure-computation-of-dropout.tex
查看文件 @
8112aa29
...
...
@@ -15,7 +15,7 @@
\node
[neuronnode] (neuron
_
y') at (2.4 *
\nodespace
,-1.5 *
\neuronsep
)
{
\scriptsize
{$
x
_{
i
}^{
l
+
1
}$}}
;
\node
[anchor=north,align=left,font=
\scriptsize
] (standard) at ([xshift=2em,yshift=-3em]neuron
_
z.south)
{
使用Dropout前的
\\
一层神经网络
}
;
\node
[] (standard) at ([xshift=-1em]neuron
_
z.west)
{
\scriptsize
{$
\mathbi
{
w
}
_{
i
}^{
l
}$}}
;
\node
[] (standard) at ([xshift=-1em]neuron
_
z.west)
{
\scriptsize
{$
w
_{
i
}^{
l
}$}}
;
\node
[] (standard) at ([xshift=0.6em,yshift=0.3em]neuron
_
z.east)
{
\scriptsize
{$
f
$}}
;
\draw
[->,line width=0.3mm] (neuron
_
b.east) -- (neuron
_
z.130);
...
...
@@ -41,7 +41,7 @@
\node
[neuronnode] (drop
_
neuron
_
r1) at (4.4*
\nodespace
,-2.5*
\neuronsep
)
{
\scriptsize
{$
r
_{
1
}^{
l
}$}}
;
\node
[anchor=north,align=left,font=
\scriptsize
] (standard) at ([xshift=2em,yshift=-3em]drop
_
neuron
_
z.south)
{
使用Dropout后的
\\
一层神经网络
}
;
\node
[] (standard) at ([xshift=-1em]drop
_
neuron
_
z.west)
{
\scriptsize
{$
\mathbi
{
w
}
_{
i
}^{
l
}$}}
;
\node
[] (standard) at ([xshift=-1em]drop
_
neuron
_
z.west)
{
\scriptsize
{$
w
_{
i
}^{
l
}$}}
;
\node
[] (standard) at ([xshift=0.6em,yshift=0.3em]drop
_
neuron
_
z.east)
{
\scriptsize
{$
f
$}}
;
%structure
\draw
[->,line width=0.3mm] (drop
_
neuron
_
b.east) -- (drop
_
neuron
_
z.130);
...
...
@@ -64,7 +64,7 @@
\node
[anchor=north west,inner sep = 2pt] (line3) at (line2.south west)
{$
x
_{
i
}^{
l
+
1
}
=
f
\left
(
z
_{
i
}^{
l
+
1
}
\right
)
$}
;
\node
[anchor=north west,inner sep = 2pt] (line4) at (line3.south west)
{
应用Dropout:
}
;
\node
[anchor=north west,inner sep = 2pt] (line5) at (line4.south west)
{$
r
_{
i
}^{
l
}
\sim
$
Bernoulli
$
(
1
-
p
)
$}
;
\node
[anchor=north west,inner sep = 2pt] (line6) at (line5.south west)
{$
\tilde
{
\mathbi
{
x
}}
=
\mathbi
{
r
}
*
\mathbi
{
x
}$}
;
\node
[anchor=north west,inner sep = 2pt] (line6) at (line5.south west)
{$
\tilde
{
\mathbi
{
x
}}
=
\mathbi
{
r
}
\mathbi
{
x
}$}
;
\node
[anchor=north west,inner sep = 2pt] (line7) at (line6.south west)
{$
z
_{
i
}^{
l
+
1
}
=
\mathbi
{
w
}^{
l
}
\widetilde
{
\mathbi
{
x
}}^{
l
}
+
b
^{
l
}$}
;
\node
[anchor=north west,inner sep = 2pt] (line8) at (line7.south west)
{$
x
_{
i
}^{
l
+
1
}
=
f
\left
(
z
_{
i
}^{
l
+
1
}
\right
)
$}
;
...
...
Chapter15/chapter15.tex
查看文件 @
8112aa29
...
...
@@ -79,17 +79,17 @@
\noindent
这里,
$
\mathbi
{
z
}_{
i
}$
可以被看做是输入序列的线性加权表示结果。权重
$
\alpha
_{
ij
}$
通过Softmax函数得到:
\begin{eqnarray}
\alpha
_{
ij
}
&
=
&
\frac
{
\exp
(
\mathbi
{
e
}_{
ij
}
)
}{
\sum
_{
k=1
}^{
m
}
\exp
(
\mathbi
{
e
}_{
ik
}
)
}
\alpha
_{
ij
}
&
=
&
\frac
{
\exp
(
{
e
}_{
ij
}
)
}{
\sum
_{
k=1
}^{
m
}
\exp
(
{
e
}_{
ik
}
)
}
\label
{
eq:15-5
}
\end{eqnarray}
\noindent
进一步,
$
\mathbi
{
e
}_{
ij
}$
被定义为:
\noindent
进一步,
${
e
}_{
ij
}$
被定义为:
\begin{eqnarray}
\mathbi
{
e
}_{
ij
}
&
=
&
\frac
{
(
\mathbi
{
x
}_
i
\mathbi
{
W
}_
Q)
{
(
\mathbi
{
x
}_
j
\mathbi
{
W
}_
K)
}^{
\textrm
{
T
}}}{
\sqrt
{
d
_
k
}}
{
e
}_{
ij
}
&
=
&
\frac
{
(
\mathbi
{
x
}_
i
\mathbi
{
W
}_
Q)
{
(
\mathbi
{
x
}_
j
\mathbi
{
W
}_
K)
}^{
\textrm
{
T
}}}{
\sqrt
{
d
_
k
}}
\label
{
eq:15-6
}
\end{eqnarray}
\noindent
其中,
$
d
_
k
$
为模型中隐藏层的维度
\footnote
[3]
{
在多头注意力中,
$
d
_
k
$
为经过多头分割后每个头的维度。
}
。
$
\mathbi
{
e
}_{
ij
}$
实际上就是
$
\mathbi
{
Q
}$
和
$
\mathbi
{
K
}$
的向量积缩放后的一个结果。
\noindent
其中,
$
d
_
k
$
为模型中隐藏层的维度
\footnote
[3]
{
在多头注意力中,
$
d
_
k
$
为经过多头分割后每个头的维度。
}
。
${
e
}_{
ij
}$
实际上就是
$
\mathbi
{
Q
}$
和
$
\mathbi
{
K
}$
的向量积缩放后的一个结果。
\parinterval
基于上述描述,相对位置模型可以按如下方式实现:
...
...
@@ -616,20 +616,20 @@ v_i &=& \mathbi{I}_d^{\textrm{T}}\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\noindent
其中,
$
u
(-
\gamma
,
\gamma
)
$
表示
$
-
\gamma
$
与
$
\gamma
$
间的均匀分布,
$
n
_
i
$
和
$
n
_
o
$
分别为线性变换
$
\mathbi
{
W
}$
中输入和输出的维度,也就是上一层神经元的数量和下一层神经元的数量。通过使用这种初始化方式,即可维持神经网络在前向与反向计算过程中,每一层的输入与输出方差的一致性
\upcite
{
DBLP:conf/iccv/HeZRS15
}
。
\parinterval
令模型中某层神经元的输出表示为
$
\mathbi
{
Z
}
=
\sum
_{
j
=
1
}^{
n
_
i
}{
w
_
j x
_
j
}$
。可以看出,
$
\mathbi
{
Z
}
$
的核心是计算两个变量
$
w
_
j
$
和
$
x
_
j
$
乘积。两个变量乘积的方差的展开式为:
\parinterval
令模型中某层神经元的输出表示为
$
Z
=
\sum
_{
j
=
1
}^{
n
_
i
}{
w
_
j x
_
j
}$
。可以看出,
$
Z
$
的核心是计算两个变量
$
w
_
j
$
和
$
x
_
j
$
乘积。两个变量乘积的方差的展开式为:
\begin{eqnarray}
\textrm
{
Var
}
(w
_
j x
_
j)
&
=
&
E[w
_
j]
^
2
\textrm
{
Var
}
(x
_
j) + E[x
_
j]
^
2
\textrm
{
Var
}
(w
_
j) +
\textrm
{
Var
}
(w
_
j)
\textrm
{
Var
}
(x
_
j)
\label
{
eq:15-41
}
\end{eqnarray}
\parinterval
其中
$
\textrm
{
Var
}
(
\cdot
)
$
表示求方差操作,由于在大多数情况下,现有模型中的各种标准化方法可以维持
$
E
[
w
_
j
]
^
2
$
和
$
E
[
x
_
j
]
^
2
$
等于或者近似为0。因此,模型中一层神经元输出的方差可以表示为:
\parinterval
其中
$
\textrm
{
Var
}
(
\cdot
)
$
表示求方差操作,由于在大多数情况下,现有模型中的各种标准化方法可以维持
$
E
[
w
_
j
]
^
2
$
和
$
E
[
x
_
j
]
^
2
$
等于或者近似为0。
由于输入
$
x
_
j
(
1
<j<n
_
i
)
$
独立同分布,此处可以使用
$
x
$
表示输入服从的分布,对于参数
$
w
_
j
$
也可以有同样的表示
$
w
$
。
因此,模型中一层神经元输出的方差可以表示为:
\begin{eqnarray}
\textrm
{
Var
}
(
\mathbi
{
Z
}
)
&
=
&
\sum
_{
j=1
}^{
n
_
i
}{
\textrm
{
Var
}
(x
_
j)
\textrm
{
Var
}
(w
_
j)
}
\nonumber
\\
&
=
&
{
n
_
i
}
\textrm
{
Var
}
(
\mathbi
{
W
}
)
\textrm
{
Var
}
(
\mathbi
{
X
}
)
\textrm
{
Var
}
(
Z
)
&
=
&
\sum
_{
j=1
}^{
n
_
i
}{
\textrm
{
Var
}
(x
_
j)
\textrm
{
Var
}
(w
_
j)
}
\nonumber
\\
&
=
&
{
n
_
i
}
\textrm
{
Var
}
(
{
w
}
)
\textrm
{
Var
}
(
{
x
}
)
\label
{
eq:15-42
}
\end{eqnarray}
\parinterval
通过观察公式
\eqref
{
eq:15-42
}
可以发现,在前向传播的过程中,当
$
\textrm
{
Var
}
(
\mathbi
{
W
}
)=
\frac
{
1
}{
n
_
i
}$
时,可以保证每层的输入和输出的方差一致。类似的,通过相关计算可以得知,为了保证模型中每一层的输入和输出的方差一致,反向传播时应有
$
\textrm
{
Var
}
(
\mathbi
{
W
}
)=
\frac
{
1
}{
n
_
o
}$
,通过对两种情况取平均值,控制参数
$
\mathbi
{
W
}$
的方差为
$
\frac
{
2
}{
n
_
i
+
n
_
o
}$
,则可以维持神经网络在前向与反向计算过程中,每一层的输入与输出方差的一致性。若将参数初始化为一个服从边界为
$
[-
a,b
]
$
的均匀分布,那么其方差为
$
\frac
{{
(
b
+
a
)
}^
2
}{
12
}$
,为了达到
$
\mathbi
{
W
}
$
的取值要求,初始化时应有
$
a
=
b
=
\sqrt
{
\frac
{
6
}{
n
_
i
+
n
_
o
}}$
。
\parinterval
通过观察公式
\eqref
{
eq:15-42
}
可以发现,在前向传播的过程中,当
$
\textrm
{
Var
}
(
w
)=
\frac
{
1
}{
n
_
i
}$
时,可以保证每层的输入和输出的方差一致。类似的,通过相关计算可以得知,为了保证模型中每一层的输入和输出的方差一致,反向传播时应有
$
\textrm
{
Var
}
(
w
)=
\frac
{
1
}{
n
_
o
}$
,通过对两种情况取平均值,控制参数
$
w
$
的方差为
$
\frac
{
2
}{
n
_
i
+
n
_
o
}$
,则可以维持神经网络在前向与反向计算过程中,每一层的输入与输出方差的一致性。若将参数初始化为一个服从边界为
$
[-
a,b
]
$
的均匀分布,那么其方差为
$
\frac
{{
(
b
+
a
)
}^
2
}{
12
}$
,为了达到
$
w
$
的取值要求,初始化时应有
$
a
=
b
=
\sqrt
{
\frac
{
6
}{
n
_
i
+
n
_
o
}}$
。
\parinterval
但是随着神经网络层数的增加,上述初始化方法已经不能很好地约束基于Post-Norm的Transformer模型的输出方差。当神经网络堆叠很多层时,模型顶层输出的方差较大,同时反向传播时顶层的梯度范数也要大于底层。因此,一个自然的想法是根据网络的深度对不同层的参数矩阵采取不同的初始化方式,进而强化对各层输出方差的约束,可以描述为:
\begin{eqnarray}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论