Commit ccc9dbb8 by xiaotong

updates of section 7

parent b3263c4b
...@@ -1155,14 +1155,14 @@ b &=& \omega_{\textrm{high}}\cdot |\mathbf{x}| ...@@ -1155,14 +1155,14 @@ b &=& \omega_{\textrm{high}}\cdot |\mathbf{x}|
\subsection{深层模型} \subsection{深层模型}
\label{subsection-7.5.1} \label{subsection-7.5.1}
\parinterval \ref{subsection-7.3.2}节已经指出增加神经网络的深度有助于对句子进行更充分的表示、同时增加模型的容量。但是,简单地堆叠很多层Transformer网络并不能带来性能上的提升,反而会面临更加严重的梯度消失/梯度爆炸的问题。这是由于伴随神经网络变深,梯度无法有效地从输出层回传到底层网络,造成网络浅层部分地参数无法充分训练\cite{WangLearning}\cite{DBLP:conf/cvpr/YuYR18}。针对这些问题,已经有研究者开始尝试进行求解,并取得了很好的效果。比如,设计更有利于深层信息传递的网络连接\cite{DBLP:conf/emnlp/BapnaCFCW18}\cite{WangLearning}和恰当的参数初始化方法\cite{DBLP:conf/emnlp/ZhangTS19} \parinterval \ref{subsection-7.3.2}节已经指出:增加神经网络的深度有助于对句子进行更充分的表示、同时增加模型的容量。但是,简单地堆叠很多层Transformer网络并不能带来性能上的提升,反而会面临更加严重的梯度消失/梯度爆炸的问题。这是由于伴随神经网络变深,梯度无法有效地从输出层回传到底层网络,造成网络浅层部分的参数无法得到充分训练\cite{WangLearning}\cite{DBLP:conf/cvpr/YuYR18}。针对这些问题,已经有研究者开始尝试进行求解,并取得了很好的效果。比如,设计更有利于深层信息传递的网络连接和恰当的参数初始化方法等\cite{DBLP:conf/emnlp/BapnaCFCW18,WangLearning,DBLP:conf/emnlp/ZhangTS19}
\parinterval 但是,如何设计一个足够``深''的机器翻译模型仍然是业界关注的热点问题之一。此外,伴随着网络的继续变深,将会面临一些新的问题,例如,如何加速深层网络的训练,如何解决深层网络的过拟合问题等。下面将会对以上问题展开讨论。 \parinterval 但是,如何设计一个足够``深''的机器翻译模型仍然是业界关注的热点问题之一。此外,伴随着网络的继续变深,将会面临一些新的问题,例如,如何加速深层网络的训练,如何解决深层网络的过拟合问题等。下面将会对以上问题展开讨论。
%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%
\subsubsection{Post-Norm vs Pre-Norm} \subsubsection{Post-Norm vs Pre-Norm}
\parinterval 为了探究为何深层的Transformer模型很难直接训练,首先对Transformer的模型结构进行简单的回顾。以Transformer的编码端为例,在多头自注意力网络和前馈神经网络中间利用残差连接和层正则化操作来提高信息的传递效率。根据信息流的计算顺序可以将Transformer模型大致分为图\ref{fig:7.5-1}中两种结构\ \dash \ 后作方式的残差单元(Post-Norm)和前作方式的残差单元(Pre-Norm)。 \parinterval 为了探究为何深层的Transformer模型很难直接训练,首先对Transformer的模型结构进行简单的回顾。以Transformer的编码端为例,在多头自注意力网络和前馈神经网络中间,Transformer模型利用残差连接和层正则化操作来提高信息的传递效率。Transformer模型大致分为图\ref{fig:7.5-1}中两种结构\ \dash \ 后作方式的残差单元(Post-Norm)和前作方式的残差单元(Pre-Norm)。
%---------------------------------------------- %----------------------------------------------
% 图7.5.1 % 图7.5.1
...@@ -1174,15 +1174,15 @@ b &=& \omega_{\textrm{high}}\cdot |\mathbf{x}| ...@@ -1174,15 +1174,15 @@ b &=& \omega_{\textrm{high}}\cdot |\mathbf{x}|
\end{figure} \end{figure}
%------------------------------------------- %-------------------------------------------
\parinterval 这里$x_l$$x_{l+1}$表示第$l$子层的输入和输出\footnote[13]{这里沿用Transformer中的定义,每一层(Layer)包含多个子层(Sub-layer)。比如,对于Transformer编码器,每一层包含一个自注意力子层和一个前馈神经网络子层。所有子层都需要进行层归一化和残差连接。}$y_l$表示中间的临时输出;$\textrm{LN}(\cdot)$表示层归一化操作\cite{ba2016layer},帮助减少子层输出分布的方差。从而让训练变得更稳定;$\mathcal{F}(\cdot)$表示子层所对应的函数,比如前馈神经网络、自注意力网络等。下面分别对Post-Norm和Pre-Norm进行简单的描述。 \parinterval$x_l$$x_{l+1}$表示第$l$子层的输入和输出\footnote[13]{这里沿用Transformer中的定义,每一层(Layer)包含多个子层(Sub-layer)。比如,对于Transformer编码器,每一层包含一个自注意力子层和一个前馈神经网络子层。所有子层都需要进行层归一化和残差连接。}$y_l$表示中间的临时输出;$\textrm{LN}(\cdot)$表示层归一化操作\cite{ba2016layer},帮助减少子层输出分布的方差。从而让训练变得更稳定;$\mathcal{F}(\cdot)$表示子层所对应的函数,比如前馈神经网络、自注意力网络等。下面分别对Post-Norm和Pre-Norm进行简单的描述。
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
\item Post-Norm:Vaswani等人早期提出的Transformer遵循的是Post-Norm结构\cite{vaswani2017attention}。也就是,层正则化作用于 每一子层的输入和输出的残差结果上,如图\ref{fig:7.5-1}(a)所示。可以表示如下: \item Post-Norm:早期的Transformer遵循的是Post-Norm结构\cite{vaswani2017attention}。也就是,层正则化作用于 每一子层的输入和输出的残差结果上,如图\ref{fig:7.5-1}(a)所示。可以表示如下:
\begin{eqnarray} \begin{eqnarray}
x_{l+1}=\textrm{LN}(x_l+\mathcal{F}(x_l;\theta_l)) x_{l+1}=\textrm{LN}(x_l+\mathcal{F}(x_l;\theta_l))
\label{eq:7.5-1} \label{eq:7.5-1}
\end{eqnarray} \end{eqnarray}
其中,$\theta_l$是子层l的参数。 其中,$\theta_l$是子层$l$的参数。
\vspace{0.5em} \vspace{0.5em}
\item Pre-Norm:通过调整层正则化的位置,将其放置于每一子层的输入之前,得到了Pre-Norm结构,如图\ref{fig:7.5-1}(b)所示。其思想与He等人的思想一致\cite{DBLP:conf/eccv/HeZRS16},也被广泛应用于最新的Transformer开源系统中\cite{VaswaniTensor2Tensor}\cite{Ottfairseq}\cite{KleinOpenNMT},公式如下: \item Pre-Norm:通过调整层正则化的位置,将其放置于每一子层的输入之前,得到了Pre-Norm结构,如图\ref{fig:7.5-1}(b)所示。其思想与He等人的思想一致\cite{DBLP:conf/eccv/HeZRS16},也被广泛应用于最新的Transformer开源系统中\cite{VaswaniTensor2Tensor}\cite{Ottfairseq}\cite{KleinOpenNMT},公式如下:
\begin{eqnarray} \begin{eqnarray}
...@@ -1191,20 +1191,20 @@ x_{l+1}=x_l+\mathcal{F}(\textrm{LN}(x_l);\theta_l) ...@@ -1191,20 +1191,20 @@ x_{l+1}=x_l+\mathcal{F}(\textrm{LN}(x_l);\theta_l)
\end{eqnarray} \end{eqnarray}
\end{itemize} \end{itemize}
\parinterval 从上述公式可以看到Pre-Norm结构下的Transformer可以通过残差路径将底层的信息直接暴露给上层网络;另一方面从反向传播的角度看,使用Pre-Norm结构,顶层的梯度可以更容易地反馈到底层网络。这里以一个含有$L$个子层的结构为例。令\textrm{E}表示整个神经网络输出上的损失,$x_L$为顶层的输出。对于Post-Norm结构,根据链式法则,损失\textrm{E}相对于$x_l$的梯度可以表示为: \parinterval 从上述公式可以看到Pre-Norm结构可以通过残差路径将底层网络的输出直接暴露给上层网络;另一方面从反向传播的角度看,使用Pre-Norm结构,顶层的梯度可以更容易地反馈到底层网络。这里以一个含有$L$个子层的结构为例。令$Loss$表示整个神经网络输出上的损失,$x_L$为顶层的输出。对于Post-Norm结构,根据链式法则,损失$Loss$相对于$x_l$的梯度可以表示为:
\begin{eqnarray} \begin{eqnarray}
\frac{\partial \textrm{E}}{\partial x_l}=\frac{\partial \textrm{E}}{\partial x_L} \times \prod_{k=l}^{L-1}\frac{\partial \textrm{LN}(y_k)}{\partial y_k} \times \prod_{k=l}^{L-1}(1+\frac{\partial \mathcal{F}(x_k;\theta_k)}{\partial x_k}) \frac{\partial Loss}{\partial x_l}=\frac{\partial Loss}{\partial x_L} \times \prod_{k=l}^{L-1}\frac{\partial \textrm{LN}(y_k)}{\partial y_k} \times \prod_{k=l}^{L-1}(1+\frac{\partial \mathcal{F}(x_k;\theta_k)}{\partial x_k})
\label{eq:7.5-3} \label{eq:7.5-3}
\end{eqnarray} \end{eqnarray}
其中$\prod_{k=l}^{L-1}\frac{\partial \textrm{LN}(y_k)}{\partial y_k}$表示在反向传播过程中经过层正则化得到的复合函数导数,$\prod_{k=l}^{L-1}(1+\frac{\partial \mathcal{F}(x_k;\theta_k)}{\partial x_k})$代表每个子层间的残差连接导数。 其中$\prod_{k=l}^{L-1}\frac{\partial \textrm{LN}(y_k)}{\partial y_k}$表示在反向传播过程中经过层正则化得到的复合函数导数,$\prod_{k=l}^{L-1}(1+\frac{\partial \mathcal{F}(x_k;\theta_k)}{\partial x_k})$代表每个子层间残差连接的导数。
\parinterval 类似的,也能得到Pre-Norm结构的梯度计算结果,如下式所示: \parinterval 类似的,也能得到Pre-Norm结构的梯度计算结果,如下式所示:
\begin{eqnarray} \begin{eqnarray}
\frac{\partial \textrm{E}}{\partial x_l}=\frac{\partial \textrm{E}}{\partial x_L} \times (1+\sum_{k=l}^{L-1}\frac{\partial \mathcal{F}(\textrm{LN}(x_k);\theta_k)}{\partial x_l}) \frac{\partial Loss}{\partial x_l}=\frac{\partial Loss}{\partial x_L} \times (1+\sum_{k=l}^{L-1}\frac{\partial \mathcal{F}(\textrm{LN}(x_k);\theta_k)}{\partial x_l})
\label{eq:7.5-4} \label{eq:7.5-4}
\end{eqnarray} \end{eqnarray}
\parinterval 对比公式\ref{eq:7.5-3}和公式\ref{eq:7.5-4}可以明显发现Pre-Norm结构直接把顶层的梯度$\frac{\partial \textrm{E}}{\partial x_L}$传递给下层,也就是$\frac{\partial \textrm{E}}{\partial x_l}$中直接含有$\frac{\partial \textrm{E}}{\partial x_L}$的部分。这个性质弱化了梯度计算对模型深度$L$的依赖;而Post-Norm结构会导致一个与$L$相关的多项导数的积(见公式\ref{eq:7.5-3}右侧),伴随着$L$的增大更容易发生梯度消失和梯度爆炸问题。因此基于Pre-Norm结构的模型更适于堆叠多层神经网络的情况。比如,使用Pre-Norm结构可以很轻松的训练一个30层(60个子层)的Transformer编码器网络,并带来可观的BLEU提升。这个结果相当于标准Transformer编码器深度的6倍\cite{WangLearning}。相对的,用Pre-Norm结构训练深网络的时候,训练结果很不稳定,甚至有时候无法完成有效训练。这里把使用Pre-Norm的深层Transformer称为Transformer-Deep。 \parinterval 对比公式\ref{eq:7.5-3}和公式\ref{eq:7.5-4}可以明显发现Pre-Norm结构直接把顶层的梯度$\frac{\partial Loss}{\partial x_L}$传递给下层,也就是$\frac{\partial Loss}{\partial x_l}$中直接含有$\frac{\partial Loss}{\partial x_L}$的部分。这个性质弱化了梯度计算对模型深度$L$的依赖;而Post-Norm结构会导致一个与$L$相关的多项导数的积(见公式\ref{eq:7.5-3}右侧),伴随着$L$的增大更容易发生梯度消失和梯度爆炸问题。因此,Pre-Norm结构更适于堆叠多层神经网络的情况。比如,使用Pre-Norm结构可以很轻松的训练一个30层(60个子层)的Transformer编码器网络,并带来可观的BLEU提升。这个结果相当于标准Transformer编码器深度的6倍\cite{WangLearning}。相对的,用Pre-Norm结构训练深网络的时候,训练结果很不稳定,甚至有时候无法完成有效训练。这里把使用Pre-Norm的深层Transformer称为Transformer-Deep。
\parinterval 另一个有趣的发现是,使用深层网络后,训练模型收敛的时间大大缩短。相比于Transformer-Big等宽网络,Transformer-Deep并不需要太大的隐藏层大小就可以取得相当甚至更优的翻译品质。也就是说,Transformer-Deep是一个更``窄''更``深''的网络。这种结构的参数量比Transformer-Big少,系统运行效率更高。表\ref{tab:7.5-1}对比了不同模型的参数量和训练/推断时间。 \parinterval 另一个有趣的发现是,使用深层网络后,训练模型收敛的时间大大缩短。相比于Transformer-Big等宽网络,Transformer-Deep并不需要太大的隐藏层大小就可以取得相当甚至更优的翻译品质。也就是说,Transformer-Deep是一个更``窄''更``深''的网络。这种结构的参数量比Transformer-Big少,系统运行效率更高。表\ref{tab:7.5-1}对比了不同模型的参数量和训练/推断时间。
...@@ -1213,17 +1213,17 @@ x_{l+1}=x_l+\mathcal{F}(\textrm{LN}(x_l);\theta_l) ...@@ -1213,17 +1213,17 @@ x_{l+1}=x_l+\mathcal{F}(\textrm{LN}(x_l);\theta_l)
\centering \centering
\caption{不同Transformer结构的训练/推断时间对比(WMT14英德任务)} \caption{不同Transformer结构的训练/推断时间对比(WMT14英德任务)}
\label{tab:7.5-1} \label{tab:7.5-1}
\begin{tabular}{l | l l l} \begin{tabular}{l | r r r}
\rule{0pt}{15pt} 系统 & 参数量 & 训练时间 & 推断时间 \\ \rule{0pt}{15pt} 系统 & 参数量 & 训练时间 & 推断时间 \\
\hline \hline
\rule{0pt}{15pt} Base & 63M & 4.6h & 19.4s \\ \rule{0pt}{15pt} Base & 63M & 4.6h & 19.4s \\
\rule{0pt}{15pt} Big & 210M & 36.1h & 29.3s \\ \rule{0pt}{15pt} Big & 210M & 36.1h & 29.3s \\
\rule{0pt}{15pt} DLCL-30 & 137M & 9.8h & 24.6 \\ \rule{0pt}{15pt} DLCL-30 & 137M & 9.8h & 24.6s \\
\end{tabular} \end{tabular}
\end{table} \end{table}
%表1-------------------------------------------------------------------- %表1--------------------------------------------------------------------
\parinterval 还有一个有趣的发现是,当编码器端使用深层网络之后,解码器端使用更浅的网络依然能够维持相当的翻译品质。这是由于解码器端的计算仍然会有对源语言端信息的加工和抽象,当编码器变深之后,解码器对源语言端的加工不那么重要了,因此可以减少解码网络的深度。这样做的一个直接好处是可以通过减少解码器的深度加速翻译系统。对于一些延时敏感的场景,这种架构是极具潜力的。 \parinterval 还有一个有趣的发现是,当编码器端使用深层网络之后,解码器端使用更浅的网络依然能够维持相当的翻译品质。这是由于解码器端的计算仍然会有对源语言端信息的加工和抽象,当编码器变深之后,解码器对源语言端的加工不那么重要了,因此可以减少解码网络的深度。这样做的一个直接好处是可以通过减少解码器的深度加速翻译系统。对于一些延时敏感的场景,这种架构是极具潜力的。
%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%
\subsubsection{层聚合} \subsubsection{层聚合}
...@@ -1238,7 +1238,7 @@ z_{l}=\textrm{LN}(x_{l+1}) ...@@ -1238,7 +1238,7 @@ z_{l}=\textrm{LN}(x_{l+1})
\end{eqnarray} \end{eqnarray}
注意,$z_0$表示词嵌入层的输出,$z_l(l>0)$表示Transformer网络中的各个子层。 注意,$z_0$表示词嵌入层的输出,$z_l(l>0)$表示Transformer网络中的各个子层。
\vspace{0.5em} \vspace{0.5em}
\item 定义一个维度为$(N+1)\times(N+1)$的权值矩阵$\mathbf{W}$,矩阵中每一行表示之前各子层对当前子层计算的贡献度,其中$N$的大小是编码端(或解码端)的层数。令$\mathbf{W}_{l,i}$代表权值矩阵$\mathbf{W}$$l$行第$i$列的权重,则层聚合的输出为$z_i$的线性加权和: \item 定义一个维度为$(L+1)\times(L+1)$的权值矩阵$\mathbf{W}$,矩阵中每一行表示之前各子层对当前子层计算的贡献度,其中$L$是编码端(或解码端)的层数。令$\mathbf{W}_{l,i}$代表权值矩阵$\mathbf{W}$$l$行第$i$列的权重,则层聚合的输出为$z_i$的线性加权和:
\begin{eqnarray} \begin{eqnarray}
g_l=\sum_{i=0}^{l}z_i\times \mathbf{W}_{l,i} g_l=\sum_{i=0}^{l}z_i\times \mathbf{W}_{l,i}
\label{eq:7.5-6} \label{eq:7.5-6}
...@@ -1256,7 +1256,7 @@ $g_l$会作为输入的一部分送入第$l+1$个子层。其网络的结构图\ ...@@ -1256,7 +1256,7 @@ $g_l$会作为输入的一部分送入第$l+1$个子层。其网络的结构图\
\end{figure} \end{figure}
%------------------------------------------- %-------------------------------------------
\parinterval 可以看到,权值矩阵$\mathbf{W}$是一个下三角矩阵。开始时,对矩阵参数的每行进行平均初始化,即初始化矩阵$\mathbf{W}_0$的每一行各个位置的值为$1/M,M \in (1,2,3 \cdots N+1)$。 伴随着神经网络的训练,网络通过反向传播算法来不断更新$\mathbf{W}$中每一行不同位置权重的大小。 \parinterval 可以看到,权值矩阵$\mathbf{W}$是一个下三角矩阵。开始时,对矩阵参数的每行进行平均初始化,即初始化矩阵$\mathbf{W}_0$的每一行各个位置的值为$1/M,M \in (1,2,3 \cdots L+1)$。 伴随着神经网络的训练,网络通过反向传播算法来不断更新$\mathbf{W}$中每一行不同位置权重的大小。
\parinterval 动态线性层聚合的一个好处是,系统可以自动学习不同子层对当前子层的贡献度。在实验中也发现,离当前子层更近的部分贡献度(权重)会更大,这也是符合直觉的。 \parinterval 动态线性层聚合的一个好处是,系统可以自动学习不同子层对当前子层的贡献度。在实验中也发现,离当前子层更近的部分贡献度(权重)会更大,这也是符合直觉的。
...@@ -1395,19 +1395,6 @@ p_l=\frac{l}{2L}\cdot \varphi ...@@ -1395,19 +1395,6 @@ p_l=\frac{l}{2L}\cdot \varphi
\end{figure} \end{figure}
%------------------------------------------- %-------------------------------------------
% !Mode:: "TeX:UTF-8"
% !TEX encoding = UTF-8 Unicode
%----------------------------------------------------------------------------------------
% CHAPTER 7
%----------------------------------------------------------------------------------------
\renewcommand\figurename{}%将figure改为图
\renewcommand\tablename{}%将figure改为图
\definecolor{ublue}{rgb}{0.152,0.250,0.545}
\definecolor{ugreen}{rgb}{0,0.5,0}
\chapterimage{chapter_head_1} % Chapter heading image
%------------------------------------------------
%--7.5.2 单语数据的使用--------------------- %--7.5.2 单语数据的使用---------------------
\subsection{单语数据的使用}\label{subsection-4.2.6} \subsection{单语数据的使用}\label{subsection-4.2.6}
......
...@@ -131,12 +131,12 @@ ...@@ -131,12 +131,12 @@
\indexentry{Student Model|hyperpage}{63} \indexentry{Student Model|hyperpage}{63}
\indexentry{基于单词的知识精炼|hyperpage}{63} \indexentry{基于单词的知识精炼|hyperpage}{63}
\indexentry{Word-level Knowledge Distillation|hyperpage}{63} \indexentry{Word-level Knowledge Distillation|hyperpage}{63}
\indexentry{基于序列的知识精炼|hyperpage}{63} \indexentry{基于序列的知识精炼|hyperpage}{64}
\indexentry{Sequence-level Knowledge Distillation|hyperpage}{63} \indexentry{Sequence-level Knowledge Distillation|hyperpage}{64}
\indexentry{中间层输出|hyperpage}{64} \indexentry{中间层输出|hyperpage}{65}
\indexentry{Hint-based Knowledge Transfer|hyperpage}{64} \indexentry{Hint-based Knowledge Transfer|hyperpage}{65}
\indexentry{注意力分布|hyperpage}{64} \indexentry{注意力分布|hyperpage}{65}
\indexentry{Attention To Attention Transfer|hyperpage}{64} \indexentry{Attention To Attention Transfer|hyperpage}{65}
\indexentry{循环一致性|hyperpage}{67} \indexentry{循环一致性|hyperpage}{67}
\indexentry{Circle Consistency|hyperpage}{67} \indexentry{Circle Consistency|hyperpage}{67}
\indexentry{翻译中回译|hyperpage}{68} \indexentry{翻译中回译|hyperpage}{68}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论