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
aca89026
Commit
aca89026
authored
Nov 27, 2020
by
zengxin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
12
parent
92200683
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
13 行增加
和
13 行删除
+13
-13
Chapter12/Figures/figure-different-regularization-methods.tex
+4
-4
Chapter12/chapter12.tex
+9
-9
没有找到文件。
Chapter12/Figures/figure-different-regularization-methods.tex
查看文件 @
aca89026
...
@@ -7,15 +7,15 @@
...
@@ -7,15 +7,15 @@
\tikzstyle
{
standard
}
= [rounded corners=3pt]
\tikzstyle
{
standard
}
= [rounded corners=3pt]
\node
[lnode,anchor=west] (l1) at (0,0)
{
\scriptsize
{
子层
}}
;
\node
[lnode,anchor=west] (l1) at (0,0)
{
\scriptsize
{
子层
}}
;
\node
[lnode,anchor=west] (l2) at ([xshift=3em]l1.east)
{
\scriptsize
{
层
正则
化
}}
;
\node
[lnode,anchor=west] (l2) at ([xshift=3em]l1.east)
{
\scriptsize
{
层
标准
化
}}
;
\node
[lnode,anchor=west] (l3) at ([xshift=4em]l2.east)
{
\scriptsize
{
层
正则
化
}}
;
\node
[lnode,anchor=west] (l3) at ([xshift=4em]l2.east)
{
\scriptsize
{
层
标准
化
}}
;
\node
[lnode,anchor=west] (l4) at ([xshift=1.5em]l3.east)
{
\scriptsize
{
子层
}}
;
\node
[lnode,anchor=west] (l4) at ([xshift=1.5em]l3.east)
{
\scriptsize
{
子层
}}
;
\node
[anchor=west] (plus1) at ([xshift=0.9em]l1.east)
{
\scriptsize
{$
\mathbf
{
\oplus
}$}}
;
\node
[anchor=west] (plus1) at ([xshift=0.9em]l1.east)
{
\scriptsize
{$
\mathbf
{
\oplus
}$}}
;
\node
[anchor=west] (plus2) at ([xshift=0.9em]l4.east)
{
\scriptsize
{$
\mathbf
{
\oplus
}$}}
;
\node
[anchor=west] (plus2) at ([xshift=0.9em]l4.east)
{
\scriptsize
{$
\mathbf
{
\oplus
}$}}
;
\node
[anchor=north] (label1) at ([xshift=3em,yshift=-0.5em]l1.south)
{
\scriptsize
{
(a)后
正则
化
}}
;
\node
[anchor=north] (label1) at ([xshift=3em,yshift=-0.5em]l1.south)
{
\scriptsize
{
(a)后
标准
化
}}
;
\node
[anchor=north] (label2) at ([xshift=3em,yshift=-0.5em]l3.south)
{
\scriptsize
{
(b)前
正则
化
}}
;
\node
[anchor=north] (label2) at ([xshift=3em,yshift=-0.5em]l3.south)
{
\scriptsize
{
(b)前
标准
化
}}
;
\draw
[->,thick] ([xshift=-1.5em]l1.west) -- ([xshift=-0.1em]l1.west);
\draw
[->,thick] ([xshift=-1.5em]l1.west) -- ([xshift=-0.1em]l1.west);
\draw
[->,thick] ([xshift=0.1em]l1.east) -- ([xshift=0.2em]plus1.west);
\draw
[->,thick] ([xshift=0.1em]l1.east) -- ([xshift=0.2em]plus1.west);
...
...
Chapter12/chapter12.tex
查看文件 @
aca89026
...
@@ -163,13 +163,13 @@
...
@@ -163,13 +163,13 @@
\vspace
{
0.5em
}
\vspace
{
0.5em
}
\item
{
\small\sffamily\bfseries
{
残差连接
}}
(标记为“Add”):对于自注意力子层和前馈神经网络子层,都有一个从输入直接到输出的额外连接,也就是一个跨子层的直连。残差连接可以使深层网络的信息传递更为有效;
\item
{
\small\sffamily\bfseries
{
残差连接
}}
(标记为“Add”):对于自注意力子层和前馈神经网络子层,都有一个从输入直接到输出的额外连接,也就是一个跨子层的直连。残差连接可以使深层网络的信息传递更为有效;
\vspace
{
0.5em
}
\vspace
{
0.5em
}
\item
{
\small\sffamily\bfseries
{
层
正则化
}}
\index
{
层正则化
}
(Layer Normalization):自注意力子层和前馈神经网络子层进行最终输出之前,会对输出的向量进行层正则
化,规范结果向量取值范围,这样易于后面进一步的处理。
\item
{
\small\sffamily\bfseries
{
层
标准化
}}
\index
{
层标准化
}
(Layer Normalization):自注意力子层和前馈神经网络子层进行最终输出之前,会对输出的向量进行层标准
化,规范结果向量取值范围,这样易于后面进一步的处理。
\vspace
{
0.5em
}
\vspace
{
0.5em
}
\end{itemize}
\end{itemize}
\parinterval
以上操作就构成了Transformer的一层,各个模块执行的顺序可以简单描述为:Self-Attention
$
\to
$
Residual Connection
$
\to
$
Layer Normalization
$
\to
$
Feed Forward Network
$
\to
$
Residual Connection
$
\to
$
Layer Normalization。编码器可以包含多个这样的层,比如,可以构建一个六层编码器,每层都执行上面的操作。最上层的结果作为整个编码的结果,会被传入解码器。
\parinterval
以上操作就构成了Transformer的一层,各个模块执行的顺序可以简单描述为:Self-Attention
$
\to
$
Residual Connection
$
\to
$
Layer Normalization
$
\to
$
Feed Forward Network
$
\to
$
Residual Connection
$
\to
$
Layer Normalization。编码器可以包含多个这样的层,比如,可以构建一个六层编码器,每层都执行上面的操作。最上层的结果作为整个编码的结果,会被传入解码器。
\parinterval
解码器的结构与编码器十分类似。它也是由若干层组成,每一层包含编码器中的所有结构,即:自注意力子层、前馈神经网络子层、残差连接和层
正则
化模块。此外,为了捕捉源语言的信息,解码器又引入了一个额外的
{
\small\sffamily\bfseries
{
编码-解码注意力子层
}}
\index
{
编码-解码注意力子层
}
(Encoder-Decoder Attention Sub-layer)
\index
{
Encoder-Decoder Attention Sub-layer
}
。这个新的子层,可以帮助模型使用源语言句子的表示信息生成目标语不同位置的表示。编码-解码注意力子层仍然基于自注意力机制,因此它和自注意力子层的结构是相同的,只是
$
\mathrm
{
query
}$
、
$
\mathrm
{
key
}$
、
$
\mathrm
{
value
}$
的定义不同。比如,在解码端,自注意力子层的
$
\mathrm
{
query
}$
、
$
\mathrm
{
key
}$
、
$
\mathrm
{
value
}$
是相同的,它们都等于解码端每个位置的表示。而在编码-解码注意力子层中,
$
\mathrm
{
query
}$
是解码端每个位置的表示,此时
$
\mathrm
{
key
}$
和
$
\mathrm
{
value
}$
是相同的,等于编码端每个位置的表示。图
\ref
{
fig:12-40
}
给出了这两种不同注意力子层输入的区别。
\parinterval
解码器的结构与编码器十分类似。它也是由若干层组成,每一层包含编码器中的所有结构,即:自注意力子层、前馈神经网络子层、残差连接和层
标准
化模块。此外,为了捕捉源语言的信息,解码器又引入了一个额外的
{
\small\sffamily\bfseries
{
编码-解码注意力子层
}}
\index
{
编码-解码注意力子层
}
(Encoder-Decoder Attention Sub-layer)
\index
{
Encoder-Decoder Attention Sub-layer
}
。这个新的子层,可以帮助模型使用源语言句子的表示信息生成目标语不同位置的表示。编码-解码注意力子层仍然基于自注意力机制,因此它和自注意力子层的结构是相同的,只是
$
\mathrm
{
query
}$
、
$
\mathrm
{
key
}$
、
$
\mathrm
{
value
}$
的定义不同。比如,在解码端,自注意力子层的
$
\mathrm
{
query
}$
、
$
\mathrm
{
key
}$
、
$
\mathrm
{
value
}$
是相同的,它们都等于解码端每个位置的表示。而在编码-解码注意力子层中,
$
\mathrm
{
query
}$
是解码端每个位置的表示,此时
$
\mathrm
{
key
}$
和
$
\mathrm
{
value
}$
是相同的,等于编码端每个位置的表示。图
\ref
{
fig:12-40
}
给出了这两种不同注意力子层输入的区别。
%----------------------------------------------
%----------------------------------------------
\begin{figure}
[htp]
\begin{figure}
[htp]
...
@@ -184,7 +184,7 @@
...
@@ -184,7 +184,7 @@
\parinterval
在进行更详细的介绍前,先利用图
\ref
{
fig:12-39
}
简单了解一下Transformer模型是如何进行翻译的。首先,Transformer将源语言句子“我/很/好”的词嵌入融合位置编码后作为输入。然后,编码器对输入的源语句子进行逐层抽象,得到包含丰富的上下文信息的源语表示并传递给解码器。解码器的每一层,使用自注意力子层对输入解码端的表示进行加工,之后再使用编码-解码注意力子层融合源语句子的表示信息。就这样逐词生成目标语译文单词序列。解码器每个位置的输入是当前单词(比如,“I”),而这个位置的输出是下一个单词(比如,“am”),这个设计和标准的神经语言模型是完全一样的。
\parinterval
在进行更详细的介绍前,先利用图
\ref
{
fig:12-39
}
简单了解一下Transformer模型是如何进行翻译的。首先,Transformer将源语言句子“我/很/好”的词嵌入融合位置编码后作为输入。然后,编码器对输入的源语句子进行逐层抽象,得到包含丰富的上下文信息的源语表示并传递给解码器。解码器的每一层,使用自注意力子层对输入解码端的表示进行加工,之后再使用编码-解码注意力子层融合源语句子的表示信息。就这样逐词生成目标语译文单词序列。解码器每个位置的输入是当前单词(比如,“I”),而这个位置的输出是下一个单词(比如,“am”),这个设计和标准的神经语言模型是完全一样的。
\parinterval
当然,这里可能还有很多疑惑,比如,什么是位置编码?Transformer的自注意力机制具体是怎么进行计算的,其结构是怎样的?层
正则
化又是什么?等等。下面就一一展开介绍。
\parinterval
当然,这里可能还有很多疑惑,比如,什么是位置编码?Transformer的自注意力机制具体是怎么进行计算的,其结构是怎样的?层
标准
化又是什么?等等。下面就一一展开介绍。
%----------------------------------------------------------------------------------------
%----------------------------------------------------------------------------------------
% NEW SECTION
% NEW SECTION
...
@@ -381,7 +381,7 @@
...
@@ -381,7 +381,7 @@
% NEW SECTION
% NEW SECTION
%----------------------------------------------------------------------------------------
%----------------------------------------------------------------------------------------
\section
{
残差网络和层
正则
化
}
\section
{
残差网络和层
标准
化
}
\parinterval
Transformer编码器、解码器分别由多层网络组成(通常为6层),每层网络又包含多个子层(自注意力网络、前馈神经网络)。因此Transformer实际上是一个很深的网络结构。再加上点乘注意力机制中包含很多线性和非线性变换;且注意力函数Attention(
$
\cdot
$
)的计算也涉及多层网络,整个网络的信息传递非常复杂。从反向传播的角度来看,每次回传的梯度都会经过若干步骤,容易产生梯度爆炸或者消失。解决这个问题的一种办法就是使用残差连接
\upcite
{
DBLP:journals/corr/HeZRS15
}
,此部分内容已经在
{
\chapternine
}
进行了介绍,这里不再赘述。
\parinterval
Transformer编码器、解码器分别由多层网络组成(通常为6层),每层网络又包含多个子层(自注意力网络、前馈神经网络)。因此Transformer实际上是一个很深的网络结构。再加上点乘注意力机制中包含很多线性和非线性变换;且注意力函数Attention(
$
\cdot
$
)的计算也涉及多层网络,整个网络的信息传递非常复杂。从反向传播的角度来看,每次回传的梯度都会经过若干步骤,容易产生梯度爆炸或者消失。解决这个问题的一种办法就是使用残差连接
\upcite
{
DBLP:journals/corr/HeZRS15
}
,此部分内容已经在
{
\chapternine
}
进行了介绍,这里不再赘述。
...
@@ -408,7 +408,7 @@
...
@@ -408,7 +408,7 @@
\begin{figure}
[htp]
\begin{figure}
[htp]
\centering
\centering
\input
{
./Chapter12/Figures/figure-position-of-difference-and-layer-regularization-in-the-model
}
\input
{
./Chapter12/Figures/figure-position-of-difference-and-layer-regularization-in-the-model
}
\caption
{
残差和层
正则
化在模型中的位置
}
\caption
{
残差和层
标准
化在模型中的位置
}
\label
{
fig:12-50
}
\label
{
fig:12-50
}
\end{figure}
\end{figure}
%----------------------------------------------
%----------------------------------------------
...
@@ -420,7 +420,7 @@
...
@@ -420,7 +420,7 @@
\label
{
eq:12-50
}
\label
{
eq:12-50
}
\end{eqnarray}
\end{eqnarray}
\noindent
其中
$
\mathbi
{
x
}^
l
$
表示第
$
l
$
层网络的输入向量,
$
F
(
\mathbi
{
x
}^
l
)
$
是子层运算,这样会导致不同层(或子层)的结果之间的差异性很大,造成训练过程不稳定、训练时间较长。为了避免这种情况,在每层中加入了层
正则化操作
\upcite
{
Ba2016LayerN
}
。图
\ref
{
fig:12-50
}
中的红色方框展示了Transformer中残差和层正则化的位置。层正则
化的计算公式如下:
\noindent
其中
$
\mathbi
{
x
}^
l
$
表示第
$
l
$
层网络的输入向量,
$
F
(
\mathbi
{
x
}^
l
)
$
是子层运算,这样会导致不同层(或子层)的结果之间的差异性很大,造成训练过程不稳定、训练时间较长。为了避免这种情况,在每层中加入了层
标准化操作
\upcite
{
Ba2016LayerN
}
。图
\ref
{
fig:12-50
}
中的红色方框展示了Transformer中残差和层标准化的位置。层标准
化的计算公式如下:
\begin{eqnarray}
\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-51
}
\label
{
eq:12-51
}
...
@@ -428,13 +428,13 @@
...
@@ -428,13 +428,13 @@
\noindent
该公式使用均值
$
\mu
$
和方差
$
\sigma
$
对样本进行平移缩放,将数据规范化为均值为0,方差为1的标准分布。
$
g
$
和
$
b
$
是可学习的参数。
\noindent
该公式使用均值
$
\mu
$
和方差
$
\sigma
$
对样本进行平移缩放,将数据规范化为均值为0,方差为1的标准分布。
$
g
$
和
$
b
$
是可学习的参数。
\parinterval
在Transformer中经常使用的层
正则化操作有两种结构,分别是
{
\small\bfnew
{
后正则化
}}
\index
{
后正则化
}
(Post-norm)
\index
{
Post-norm
}
和
{
\small\bfnew
{
前正则化
}}
\index
{
前正则化
}
(Pre-norm)
\index
{
Pre-norm
}
,结构如图
\ref
{
fig:12-51
}
所示。后正则化中先进行残差连接再进行层正则化,而前正则化则是在子层输入之前进行层正则化操作。在很多实践中已经发现,前正则
化的方式更有利于信息传递,因此适合训练深层的Transformer模型
\upcite
{
WangLearning
}
。
\parinterval
在Transformer中经常使用的层
标准化操作有两种结构,分别是
{
\small\bfnew
{
后标准化
}}
\index
{
后标准化
}
(Post-norm)
\index
{
Post-norm
}
和
{
\small\bfnew
{
前标准化
}}
\index
{
前标准化
}
(Pre-norm)
\index
{
Pre-norm
}
,结构如图
\ref
{
fig:12-51
}
所示。后标准化中先进行残差连接再进行层标准化,而前标准化则是在子层输入之前进行层标准化操作。在很多实践中已经发现,前标准
化的方式更有利于信息传递,因此适合训练深层的Transformer模型
\upcite
{
WangLearning
}
。
%----------------------------------------------
%----------------------------------------------
\begin{figure}
[htp]
\begin{figure}
[htp]
\centering
\centering
\input
{
./Chapter12/Figures/figure-different-regularization-methods
}
\input
{
./Chapter12/Figures/figure-different-regularization-methods
}
\caption
{
不同
正则
化方式
}
\caption
{
不同
标准
化方式
}
\label
{
fig:12-51
}
\label
{
fig:12-51
}
\end{figure}
\end{figure}
%----------------------------------------------
%----------------------------------------------
...
@@ -535,7 +535,7 @@ lrate = d_{\textrm{model}}^{-0.5} \cdot \textrm{min} (\textrm{step}^{-0.5} , \te
...
@@ -535,7 +535,7 @@ lrate = d_{\textrm{model}}^{-0.5} \cdot \textrm{min} (\textrm{step}^{-0.5} , \te
\vspace
{
0.5em
}
\vspace
{
0.5em
}
\item
Transformer Big:为了提升网络的容量,使用更宽的网络。在Base的基础上增大隐层维度至1024,前馈神经网络的维度变为4096,多头注意力机制为16头,Dropout设为0.3。
\item
Transformer Big:为了提升网络的容量,使用更宽的网络。在Base的基础上增大隐层维度至1024,前馈神经网络的维度变为4096,多头注意力机制为16头,Dropout设为0.3。
\vspace
{
0.5em
}
\vspace
{
0.5em
}
\item
Transformer Deep:加深编码器网络层数可以进一步提升网络的性能,它的参数设置与Transformer Base基本一致,但是层数增加到48层,同时使用Pre-Norm作为层
正则
化的结构。
\item
Transformer Deep:加深编码器网络层数可以进一步提升网络的性能,它的参数设置与Transformer Base基本一致,但是层数增加到48层,同时使用Pre-Norm作为层
标准
化的结构。
\vspace
{
0.5em
}
\vspace
{
0.5em
}
\end{itemize}
\end{itemize}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论