Commit 93fe50af by zengxin

合并分支 'caorunzhe' 到 'zengxin'

Caorunzhe

查看合并请求 !1019
parents 80911497 ff80b1bc
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
\node [anchor=west,mnode] (n8) at ([xshift=5em,yshift=0em]n7.east) {}; \node [anchor=west,mnode] (n8) at ([xshift=5em,yshift=0em]n7.east) {};
\node [anchor=north,align=center,font=\footnotesize] (n81) at ([xshift=0em,yshift=-0.2em]n8.north) {{\small 符号合并表}\\(e,s)}; \node [anchor=north,align=center,font=\footnotesize] (n81) at ([xshift=0em,yshift=-0.2em]n8.north) {{\small 符号合并表}\\(e,s)};
\node [anchor=west,align=left,font=\footnotesize] (nt3) at ([xshift=0.1em,yshift=0em]n6.east) {统计二元组\\[0.5ex]的频次}; \node [anchor=west,align=left,font=\footnotesize] (nt3) at ([xshift=0.1em,yshift=0em]n6.east) {统计二元组\\[0.5ex]出现的频次};
\node [anchor=west,align=left,font=\footnotesize] (nt4) at ([xshift=0em,yshift=-0.4em]n7.east) {频次最高的\\[0.5ex](e,s)加入表\\}; \node [anchor=west,align=left,font=\footnotesize] (nt4) at ([xshift=0em,yshift=-0.4em]n7.east) {频次最高的\\[0.5ex](e,s)加入表\\};
\draw [->,thick,ublue] ([xshift=0em,yshift=0em]n6.east)--([xshift=0em,yshift=0em]n7.west); \draw [->,thick,ublue] ([xshift=0em,yshift=0em]n6.east)--([xshift=0em,yshift=0em]n7.west);
\draw [->,thick,ublue] ([xshift=0em,yshift=0em]n7.east)--([xshift=0em,yshift=0em]n8.west); \draw [->,thick,ublue] ([xshift=0em,yshift=0em]n7.east)--([xshift=0em,yshift=0em]n8.west);
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
\node [anchor=west,mnode] (n11) at ([xshift=5em,yshift=0em]n10.east) {}; \node [anchor=west,mnode] (n11) at ([xshift=5em,yshift=0em]n10.east) {};
\node [anchor=north,align=center,font=\footnotesize] (n111) at ([xshift=0em,yshift=-0.2em]n11.north) {{\small 符号合并表}\\(e,s)\\(es,t)}; \node [anchor=north,align=center,font=\footnotesize] (n111) at ([xshift=0em,yshift=-0.2em]n11.north) {{\small 符号合并表}\\(e,s)\\(es,t)};
\node [anchor=west,align=left,font=\footnotesize] (nt5) at ([xshift=0.1em,yshift=0em]n9.east) {统计二元组\\[0.5ex]的频次}; \node [anchor=west,align=left,font=\footnotesize] (nt5) at ([xshift=0.1em,yshift=0em]n9.east) {统计二元组\\[0.5ex]出现的频次};
\node [anchor=west,align=left,font=\footnotesize] (nt6) at ([xshift=0em,yshift=-0.4em]n10.east) {频次最高的\\[0.5ex](es,t)加入表\\}; \node [anchor=west,align=left,font=\footnotesize] (nt6) at ([xshift=0em,yshift=-0.4em]n10.east) {频次最高的\\[0.5ex](es,t)加入表\\};
\draw [->,thick,ublue] ([xshift=0em,yshift=0em]n9.east)--([xshift=0em,yshift=0em]n10.west); \draw [->,thick,ublue] ([xshift=0em,yshift=0em]n9.east)--([xshift=0em,yshift=0em]n10.west);
\draw [->,thick,ublue] ([xshift=0em,yshift=0em]n10.east)--([xshift=0em,yshift=0em]n11.west); \draw [->,thick,ublue] ([xshift=0em,yshift=0em]n10.east)--([xshift=0em,yshift=0em]n11.west);
...@@ -72,7 +72,7 @@ ...@@ -72,7 +72,7 @@
\node [anchor=north,ublue] (cd) at ([xshift=0em,yshift=-2.0em]n10.south) {$\cdots$}; \node [anchor=north,ublue] (cd) at ([xshift=0em,yshift=-2.0em]n10.south) {$\cdots$};
\draw [->,thick,ublue] ([xshift=-0em,yshift=-0em]n11.south) .. controls +(south:2em) and +(north:2em) .. ([xshift=-0em,yshift=-0em]cd.north); \draw [->,thick,ublue] ([xshift=-0em,yshift=-0em]n11.south) .. controls +(south:2em) and +(north:2em) .. ([xshift=-0em,yshift=-0em]cd.north);
\node [anchor=north west,ublue,font=\footnotesize,align=left] (l2) at ([xshift=1em,yshift=-1.0em]n10.south east) {在词表中\\[0.8ex]合并(es,t)}; \node [anchor=north west,ublue,font=\footnotesize,align=left] (l2) at ([xshift=1em,yshift=-1.0em]n10.south east) {在词表中\\[0.8ex]合并(es,t)};
\node [anchor=east,ublue,align=left,font=\footnotesize] (l3) at ([xshift=-0.5em,yshift=0em]cd.west) {直至达到设定的符号合\\并表大小或无法合并}; \node [anchor=east,ublue,align=left,font=\footnotesize] (l3) at ([xshift=-0.5em,yshift=0em]cd.west) {直至达到预设的符号合并表\\大小,或没有二元组可以被\\合并};
\begin{pgfonlayer}{background} \begin{pgfonlayer}{background}
\node [rectangle,inner sep=0.7em,draw,orange!40,dashed,thick,rounded corners=7pt] [fit = (n5) (n8) (l3) (cd)] (box2) {}; \node [rectangle,inner sep=0.7em,draw,orange!40,dashed,thick,rounded corners=7pt] [fit = (n5) (n8) (l3) (cd)] (box2) {};
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
\node [neuronnode] (neuron_z) at (1.2 * \nodespace,-1.5 * \neuronsep) {\scriptsize{$z_{i}^{l+1}$}}; \node [neuronnode] (neuron_z) at (1.2 * \nodespace,-1.5 * \neuronsep) {\scriptsize{$z_{i}^{l+1}$}};
\node [neuronnode] (neuron_y') at (2.4 * \nodespace,-1.5 * \neuronsep) {\scriptsize{$x_{i}^{l+1}$}}; \node [neuronnode] (neuron_y') at (2.4 * \nodespace,-1.5 * \neuronsep) {\scriptsize{$x_{i}^{l+1}$}};
\node [anchor=north] (standard) at ([yshift=-4em]neuron_z.south) {\scriptsize{标准网络}}; \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{$\mathbi{w}_{i}^{l}$}};
\node [] (standard) at ([xshift=0.6em,yshift=0.3em]neuron_z.east) {\scriptsize{$f$}}; \node [] (standard) at ([xshift=0.6em,yshift=0.3em]neuron_z.east) {\scriptsize{$f$}};
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
\node [neuronnode] (drop_neuron_r2) at (4.4*\nodespace,-1.5*\neuronsep) {\scriptsize{$r_{2}^{l}$}}; \node [neuronnode] (drop_neuron_r2) at (4.4*\nodespace,-1.5*\neuronsep) {\scriptsize{$r_{2}^{l}$}};
\node [neuronnode] (drop_neuron_r1) at (4.4*\nodespace,-2.5*\neuronsep) {\scriptsize{$r_{1}^{l}$}}; \node [neuronnode] (drop_neuron_r1) at (4.4*\nodespace,-2.5*\neuronsep) {\scriptsize{$r_{1}^{l}$}};
\node [anchor=north] (standard) at ([xshift=2em,yshift=-4em]drop_neuron_z.south) {\scriptsize{应用Dropout后的网络}}; \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{$\mathbi{w}_{i}^{l}$}};
\node [] (standard) at ([xshift=0.6em,yshift=0.3em]drop_neuron_z.east) {\scriptsize{$f$}}; \node [] (standard) at ([xshift=0.6em,yshift=0.3em]drop_neuron_z.east) {\scriptsize{$f$}};
%structure %structure
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
\node [anchor=north west,inner sep = 2pt] (line2) at (line1.south west) {$z_{i}^{l+1}=\mathbi{w}^{l} \mathbi{x}^{l} + b^{l}$}; \node [anchor=north west,inner sep = 2pt] (line2) at (line1.south west) {$z_{i}^{l+1}=\mathbi{w}^{l} \mathbi{x}^{l} + b^{l}$};
\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] (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] (line4) at (line3.south west) {应用Dropout:};
\node [anchor=north west,inner sep = 2pt] (line5) at (line4.south west) {$r_{j}^{l} \sim$ Bernoulli $(1-p)$}; \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] (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)$}; \node [anchor=north west,inner sep = 2pt] (line8) at (line7.south west) {$x_{i}^{l+1}=f\left(z_{i}^{l+1}\right)$};
......
...@@ -4,10 +4,10 @@ ...@@ -4,10 +4,10 @@
\tikzstyle{node}=[inner sep=0mm, draw,thick,minimum height=3em,minimum width=6em,rounded corners=5pt] \tikzstyle{node}=[inner sep=0mm, draw,thick,minimum height=3em,minimum width=6em,rounded corners=5pt]
\node[anchor=west,node,fill=ugreen!15] (n1) at (0,0) {训练集}; \node[anchor=west,node,fill=ugreen!30] (n1) at (0,0) {训练集};
\node[anchor=west,node,fill=yellow!15] (n2) at ([xshift=4em,yshift=0em]n1.east) {难度评估器}; \node[anchor=west,node,fill=yellow!30] (n2) at ([xshift=4em,yshift=0em]n1.east) {难度评估器};
\node[anchor=west,node,fill=red!15] (n3) at ([xshift=4em,yshift=0em]n2.east) {训练调度器}; \node[anchor=west,node,fill=red!30] (n3) at ([xshift=4em,yshift=0em]n2.east) {训练调度器};
\node[anchor=west,node,fill=blue!15] (n4) at ([xshift=4em,yshift=0em]n3.east) {模型训练器}; \node[anchor=west,node,fill=blue!30] (n4) at ([xshift=4em,yshift=0em]n3.east) {模型训练器};
\draw [->,very thick] ([xshift=0em,yshift=0em]n1.east) -- ([xshift=0em,yshift=0em]n2.west); \draw [->,very thick] ([xshift=0em,yshift=0em]n1.east) -- ([xshift=0em,yshift=0em]n2.west);
\draw [->,very thick] ([xshift=0em,yshift=0em]n2.east) -- ([xshift=0em,yshift=0em]n3.west); \draw [->,very thick] ([xshift=0em,yshift=0em]n2.east) -- ([xshift=0em,yshift=0em]n3.west);
......
...@@ -109,7 +109,7 @@ ...@@ -109,7 +109,7 @@
\parinterval 字节对编码或双字节编码(BPE)是一种常用的子词词表构建方法。BPE方法最早用于数据压缩,该方法将数据中常见的连续字符串替换为一个不存在的字符,之后通过构建一个替换关系的对应表,对压缩后的数据进行还原\upcite{Gage1994ANA}。机器翻译借用了这种思想,把子词切分看作是学习对自然语言句子进行压缩编码表示的问题\upcite{DBLP:conf/acl/SennrichHB16a}。其目的是,保证编码(即子词切分)后的结果占用的字节尽可能少。这样,子词单元会尽可能被不同单词复用,同时又不会因为使用过小的单元造成子词切分后的序列过长。 \parinterval 字节对编码或双字节编码(BPE)是一种常用的子词词表构建方法。BPE方法最早用于数据压缩,该方法将数据中常见的连续字符串替换为一个不存在的字符,之后通过构建一个替换关系的对应表,对压缩后的数据进行还原\upcite{Gage1994ANA}。机器翻译借用了这种思想,把子词切分看作是学习对自然语言句子进行压缩编码表示的问题\upcite{DBLP:conf/acl/SennrichHB16a}。其目的是,保证编码(即子词切分)后的结果占用的字节尽可能少。这样,子词单元会尽可能被不同单词复用,同时又不会因为使用过小的单元造成子词切分后的序列过长。
\parinterval 使用BPE算法进行子词切分包含两个步骤。首先,通过统计的方法构造符号合并表(见图\ref{fig:13-2}),具体的方式为:先对分过词的文本进行统计,得到词表和词频,同时将词表中的单词分割为字符表示;其次统计词表中所有出现的二元组的频次,选择当前频次最高的二元组加入符号合并表,并将所有词表中出现的该二元组合并为一个单元;不断地重复上述过程,直到合并表的大小达到预先设定的大小,或者无法继续合并。图\ref{fig:13-3}给出了一个使用字符合并表对单词进行子词切分的实例。红色单元为每次合并后得到的新符号,直至无法合并,或遍历结束,得到最终的合并结果。其中每一个单元为一个子词。 \parinterval 使用BPE算法进行子词切分包含两个步骤。首先,通过统计的方法构造符号合并表(见图\ref{fig:13-2}),具体的方式为:先对分过词的文本进行统计,得到词表和词频,同时将词表中的单词分割为字符表示;其次统计词表中所有出现的二元组的频次,选择当前频次最高的二元组加入符号合并表,并将所有词表中出现的该二元组合并为一个单元;不断地重复上述过程,直到合并表的大小达到预先设定的大小,或没有二元组可以被合并。图\ref{fig:13-3}给出了一个使用字符合并表对单词进行子词切分的实例。红色单元为每次合并后得到的新符号,直至无法合并,或遍历结束,得到最终的合并结果。其中每一个单元为一个子词。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -149,7 +149,7 @@ ...@@ -149,7 +149,7 @@
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
\item {\small\bfnew{子词规范化方法}}\upcite{DBLP:conf/acl/Kudo18}。其做法是根据1-gram语言模型采样出多种子词切分候选。之后,最大化整个句子的概率为目标来构建词表。 \item {\small\bfnew{子词规范化方法}}\upcite{DBLP:conf/acl/Kudo18}。其做法是根据1-gram语言模型采样出多种子词切分候选。之后,最大化整个句子的概率为目标来构建词表。
\vspace{0.5em} \vspace{0.5em}
\item {\small\bfnew{BPE-Dropout}}\upcite{provilkov2020bpe}。在训练时,按照一定概率$p$随机丢弃一些可行的合并操作,从而产生不同的子词切分结果。而在推断阶段,将$p$设置为0,等同于标准的BPE。总的来说,上述方法相当于在子词的粒度上对输入的序列进行扰动,进而达到增加训练健壮性的目的。 \item {\small\bfnew{BPE-Dropout}}\upcite{provilkov2020bpe}。在训练时,按照一定概率$p$随机丢弃一些可行的合并操作,从而产生不同的子词切分结果。而在推断阶段,将$p$设置为0,等同于标准的BPE。总的来说,上述方法相当于在子词的粒度上对输入的序列进行扰动,进而达到增加训练健壮性的目的。
\vspace{0.5em} \vspace{0.5em}
...@@ -182,7 +182,7 @@ y &=& f(x) ...@@ -182,7 +182,7 @@ y &=& f(x)
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
\parinterval 以上问题体现出来的现象就是过拟合。因为训练数据有限且存在噪声,因此模型参数会过分拟合噪声数据。而且,这样的模型参数又与真实(理想)的模型参数相差很远。正则化正是针对这个问题。有时候,正则化也被称作{\small\bfnew{降噪}}\index{降噪}(Denoising)\index{Denoising},虽然它的出发点并不只是去除噪声的影响。图\ref{fig:13-4}对比了不同函数对二维空间中一些数据点的拟合情况。在过拟合现象中,函数可以完美的拟合所有的数据点,即使有些数据点是噪声。 \parinterval 以上问题带来的现象就是过拟合。因为训练数据有限且存在噪声,因此模型参数会过分拟合噪声数据。而且,这样的模型参数又与真实(理想)的模型参数相差很远。正则化正是一种解决过拟合现象的方法。有时候,正则化也被称作{\small\bfnew{降噪}}\index{降噪}(Denoising)\index{Denoising},虽然它的出发点并不只是去除噪声的影响。图\ref{fig:13-4}对比了不同函数对二维空间中一些数据点的拟合情况。在过拟合现象中,函数可以完美的拟合所有的数据点,即使有些数据点是噪声。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -223,7 +223,7 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\ ...@@ -223,7 +223,7 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\
\label{eq:13-4} \label{eq:13-4}
\end{eqnarray} \end{eqnarray}
\parinterval {\chapternine}已经介绍了L1和L2正则化方法,这里做一些展开。从几何的角度看,L1和L2正则项都是有物理意义的。二者都可以被看作是空间上的一个区域,比如,在二维平面上,$l_1$范数表示一个以0点为中心的菱形,$l_2$范数表示一个以0点为中心的圆。此时,$L(\mathbi{w})$$R(\mathbi{w})$叠加在一起构成了一个新的区域,优化问题可以被看作是在这个新的区域上进行优化。由于L1和L2正则项都是在0点(坐标原点)附近形成的区域,因此优化的过程可以确保参数不会偏离0点太多。也就是说,L1和L2正则项引入了一个先验:模型的解不应该离0点太远。而L1和L2正则项实际上是在度量这个距离。 \parinterval {\chapternine}已经介绍了L1和L2正则化方法,这里做一些展开。从几何的角度看,L1和L2正则项都是有物理意义的。二者都可以被看作是空间上的一个区域,比如,在二维平面上,$l_1$范数表示一个以0点为中心的菱形,$l_2$范数表示一个以0点为中心的圆。此时,$L(\mathbi{w})$$R(\mathbi{w})$叠加在一起构成了一个新的区域,优化问题可以被看作是在这个新的区域上进行优化。由于L1和L2正则项在解空间中形成的区域都在0点(坐标原点)附近,因此优化的过程可以确保参数不会偏离0点太多。也就是说,L1和L2正则项引入了一个先验:模型的解不应该离0点太远。而L1和L2正则项实际上是在度量这个距离。
\parinterval 那为什么要用L1和L2正则项惩罚离0点远的解呢?这还要从模型复杂度谈起。实际上,对于神经机器翻译这样的模型来说,模型的容量是足够的。所谓容量可以被简单的理解为独立参数的个数 \footnote{另一种定义是把容量看作神经网络所能表示的假设空间大小\upcite{DBLP:journals/nature/LeCunBH15},也就是神经网络能表示的不同函数所构成的空间。}。也就是说,理论上存在一种模型可以完美的描述问题。但是,从目标函数拟合的角度来看,如果一个模型可以拟合很复杂的目标函数,那模型所表示的函数形态也会很复杂。这往往体现在模型中参数的值“偏大”。比如,用一个多项式函数拟合一些空间中的点,如果希望拟合得很好,各个项的系数往往是非零的。而且为了对每个点进行拟合,通常需要多项式中的某些项具有较大的系数,以期望函数在局部有较大的斜率。显然,这样的模型是很复杂的。模型的复杂度可以用函数中参数(比如多项式中各项的系数)的“值”进行度量,这也体现在模型参数的范数上。 \parinterval 那为什么要用L1和L2正则项惩罚离0点远的解呢?这还要从模型复杂度谈起。实际上,对于神经机器翻译这样的模型来说,模型的容量是足够的。所谓容量可以被简单的理解为独立参数的个数 \footnote{另一种定义是把容量看作神经网络所能表示的假设空间大小\upcite{DBLP:journals/nature/LeCunBH15},也就是神经网络能表示的不同函数所构成的空间。}。也就是说,理论上存在一种模型可以完美的描述问题。但是,从目标函数拟合的角度来看,如果一个模型可以拟合很复杂的目标函数,那模型所表示的函数形态也会很复杂。这往往体现在模型中参数的值“偏大”。比如,用一个多项式函数拟合一些空间中的点,如果希望拟合得很好,各个项的系数往往是非零的。而且为了对每个点进行拟合,通常需要多项式中的某些项具有较大的系数,以期望函数在局部有较大的斜率。显然,这样的模型是很复杂的。模型的复杂度可以用函数中参数(比如多项式中各项的系数)的“值”进行度量,这也体现在模型参数的范数上。
...@@ -266,9 +266,9 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\ ...@@ -266,9 +266,9 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\
\parinterval 神经机器翻译模型是一种典型的多层神经网络模型。每一层都包含若干神经元,负责接收前一层所有神经元的输出,之后进行诸如乘法、加法等变换操作,并有选择地使用非线性的激活函数,最终得到当前层每个神经元的输出。从模型最终预测的角度看,每个神经元都在参与最终的预测。理想的情况下,研究人员希望每个神经元都能相互独立的做出“贡献”。这样的模型会更加健壮,因为即使一部分神经元不能正常工作,其它神经元仍然可以独立做出合理的预测。但是,随着每一层神经元数量的增加以及网络结构的复杂化,神经元之间会出现{\small\bfnew{相互适应}}\index{相互适应}(Co-adaptation)\index{Co-adaptation}的现象。所谓相互适应是指,一个神经元对输出的贡献与同一层其它神经元的行为是相关的,也就是说这个神经元已经适应到它周围的“环境”中。 \parinterval 神经机器翻译模型是一种典型的多层神经网络模型。每一层都包含若干神经元,负责接收前一层所有神经元的输出,之后进行诸如乘法、加法等变换操作,并有选择地使用非线性的激活函数,最终得到当前层每个神经元的输出。从模型最终预测的角度看,每个神经元都在参与最终的预测。理想的情况下,研究人员希望每个神经元都能相互独立的做出“贡献”。这样的模型会更加健壮,因为即使一部分神经元不能正常工作,其它神经元仍然可以独立做出合理的预测。但是,随着每一层神经元数量的增加以及网络结构的复杂化,神经元之间会出现{\small\bfnew{相互适应}}\index{相互适应}(Co-adaptation)\index{Co-adaptation}的现象。所谓相互适应是指,一个神经元对输出的贡献与同一层其它神经元的行为是相关的,也就是说这个神经元已经适应到它周围的“环境”中。
\parinterval 相互适应的好处在于神经网络可以处理更加复杂的问题,因为联合使用两个神经元要比单独使用每个神经元的表示能力强。这也类似于传统机器学习任务中往往会设计一些高阶特征,比如自然语言序列标注中对2-gram和3-gram的使用。不过另一方面,相互适应会导致模型变得更加“脆弱”。因为相互适应的神经元可以更好的描述训练数据中的现象,但是在测试数据上,由于很多现象是未见的,细微的扰动会导致神经元无法适应。具体体现出来就是过拟合问题。 \parinterval 一方面来说,相互适应的好处在于神经网络可以处理更加复杂的问题,因为联合使用两个神经元要比单独使用每个神经元的表示能力强。这也类似于传统机器学习任务中往往会设计一些高阶特征,比如自然语言序列标注中对2-gram和3-gram的使用。不过另一方面,相互适应会导致模型变得更加“脆弱”。因为相互适应的神经元可以更好的描述训练数据中的现象,但是在测试数据上,由于很多现象是未见的,细微的扰动会导致神经元无法适应。具体体现出来就是过拟合问题。
\parinterval Dropout也是解决过拟合问题的一种常用方法\upcite{DBLP:journals/corr/abs-1207-0580}。该方法很简单,在训练时随机让一部分神经元停止工作,这样每次参数更新中每个神经元周围的环境都在变化,它就不会过分适应到环境中。图\ref{fig:13-6}中给出了某一次参数更新中使用Dropout之前和之后神经网络的状态对比。 \parinterval Dropout也是解决过拟合问题的一种常用方法\upcite{DBLP:journals/corr/abs-1207-0580}。该方法很简单,在训练时随机让一部分神经元停止工作,这样在每次进行参数更新时,神经网络中每个神经元周围的环境都在变化,因此它就不会过分适应到环境中。图\ref{fig:13-6}中给出了某一次参数更新中使用Dropout之前和之后神经网络的状态对比。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -279,7 +279,7 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\ ...@@ -279,7 +279,7 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\
\end{figure} \end{figure}
%---------------------------------------------- %----------------------------------------------
\parinterval 具体实现时,可以设置一个参数$p \in (0,1)$。在每次参数更新所使用的前向和反向计算中,每个神经元都以概率$p$停止工作。相当于每层神经网络会有以$p$为概率的神经元被“屏蔽”掉。每一次参数更新中会随机屏蔽不同的神经元,图\ref{fig:13-7}给出了Dropout方法和传统方法计算方式的对比。其中,$x_{i}^{l}$代表第$l$层神经网络的第$i$个输入,$w_{i}^{l}$为输入所对应的权重,$b^{l}$表示第$l$层神经网络输入的偏置,$z_{i}^{l+1}$表示第$l$层神经网络的线性运算的结果,$f(\cdot)$表示激活函数,$r_{i}^{l}$的值服从于参数为$1-p$的伯努利分布。 \parinterval 具体实现时,可以设置一个参数$p \in (0,1)$。在每次参数更新所使用的前向和反向计算中,每个神经元都以概率$p$停止工作。相当于每层神经网络会有以$p$为概率的神经元被“屏蔽”掉,每一次参数更新中会随机屏蔽不同的神经元。图\ref{fig:13-7}展示了使用Dropout方法之前和使用该方法之后的一层神经网络在计算方式上的不同。其中,$x_{i}^{l}$代表第$l$层神经网络的第$i$个输入,$w_{i}^{l}$为输入所对应的权重,$b^{l}$表示第$l$层神经网络输入的偏置,$z_{i}^{l+1}$表示第$l$层神经网络的线性运算的结果,$f(\cdot)$表示激活函数,$r_{i}^{l}$的值服从于参数为$1-p$的伯努利分布。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -304,7 +304,7 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\ ...@@ -304,7 +304,7 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\
\section{对抗样本训练} \section{对抗样本训练}
\label{sec:adversarial-examples} \label{sec:adversarial-examples}
\parinterval 同其它基于神经网络的方法一样,提高{\small\bfnew{健壮性}}\index{健壮性}(Robustness)\index{Robustness}也是神经机器翻译研发中需要关注的。比如,大容量模型可以很好地拟合训练数据,但是当测试样本与训练样本差异较大时,会导致很糟糕的翻译结果\upcite{JMLR:v15:srivastava14a,DBLP:conf/amta/MullerRS20}。另一方面,实践中也发现,有些情况下即使输入中有微小的扰动,神经网络模型的输出也会产生巨大变化。或者说,神经网络模型在输入样本上容易受到攻击(Attack)\upcite{DBLP:conf/sp/Carlini017,DBLP:conf/cvpr/Moosavi-Dezfooli16,DBLP:conf/acl/ChengJM19}。表\ref{tab:13-1}展示了一个神经机器翻译系统的翻译结果,可以看到,把输入句子中的单词“jumped”换成“sunk”会得到完全不同的译文。这时神经机器翻译系统就存在健壮性问题。 \parinterval 同其它基于神经网络的方法一样,提高{\small\bfnew{健壮性}}\index{健壮性}(Robustness)\index{Robustness}也是神经机器翻译研发中需要关注的。虽然大容量模型可以很好地拟合训练数据,但是当测试样本与训练样本差异较大时,翻译结果可能会很糟糕\upcite{JMLR:v15:srivastava14a,DBLP:conf/amta/MullerRS20}。甚至有时输入只受到微小的扰动,神经网络模型的输出也会产生巨大变化。或者说,神经网络模型在输入样本上容易受到攻击(Attack)\upcite{DBLP:conf/sp/Carlini017,DBLP:conf/cvpr/Moosavi-Dezfooli16,DBLP:conf/acl/ChengJM19}。表\ref{tab:13-1}展示了一个神经机器翻译系统的翻译结果,可以看到,把输入句子中的单词“jumped”换成“sunk”会得到完全不同的译文。这时神经机器翻译系统就存在健壮性问题。
%---------------------------------------------- %----------------------------------------------
\begin{table}[htp]{ \begin{table}[htp]{
...@@ -329,11 +329,11 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\ ...@@ -329,11 +329,11 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\
% NEW SUB-SECTION % NEW SUB-SECTION
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
\subsection{对抗样本对抗攻击} \subsection{对抗样本对抗攻击}
\parinterval 在图像识别领域,研究人员就发现,对于输入图像的细小扰动,如像素变化等,会使模型以高置信度给出错误的预测\upcite{DBLP:conf/cvpr/NguyenYC15,DBLP:journals/corr/SzegedyZSBEGF13,DBLP:journals/corr/GoodfellowSS14},但是这种扰动并不会造成人类的错误判断。也就是说,样本中的微小变化“欺骗”了图像识别系统,但是“欺骗”不了人类。这种现象背后的原因有很多,一种可能的原因是:系统并没有理解图像,而是在拟合数据,因此拟合能力越强,反而对数据中的微小变化更加敏感。从统计学习的角度看,既然新的数据中可能会有扰动,那更好的学习方式就是在训练中显性地把这种扰动建模出来,让模型对输入的细微变化表现得更加健壮。 \parinterval 在图像识别领域,研究人员就发现,对于输入图像的细小扰动,如像素变化等,会使模型以高置信度给出错误的预测\upcite{DBLP:conf/cvpr/NguyenYC15,DBLP:journals/corr/SzegedyZSBEGF13,DBLP:journals/corr/GoodfellowSS14},但是这种扰动并不会造成人类的错误判断。也就是说,样本中的微小变化“欺骗”了图像识别系统,但是“欺骗”不了人类。这种现象背后的原因有很多,一种可能的原因是:系统并没有理解图像,而是在拟合数据,因此拟合能力越强,反而对数据中的微小变化更加敏感。从统计学习的角度看,既然新的数据中可能会有扰动,那更好的学习方式就是在训练中显性地把这种扰动建模出来,让模型对输入样本中包含的细微变化表现得更加健壮。
\parinterval 这种通过在原样本上增加一些难以察觉的扰动,从而使模型得到错误判断的样本被称为对抗样本。对于模型的输入$\mathbi{x}$和输出$\mathbi{y}$,对抗样本形式上可以被描述为: \parinterval 这种通过在原样本上增加一些难以察觉的扰动,从而使模型得到错误输出的样本被称为对抗样本。对于模型的输入$\mathbi{x}$和输出$\mathbi{y}$,对抗样本形式上可以被描述为:
\begin{eqnarray} \begin{eqnarray}
\funp{C}(\mathbi{x}) &=& \mathbi{y} \funp{C}(\mathbi{x}) &=& \mathbi{y}
\label{eq:13-6}\\ \label{eq:13-6}\\
...@@ -343,7 +343,7 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\ ...@@ -343,7 +343,7 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\
\label{eq:13-8} \label{eq:13-8}
\end{eqnarray} \end{eqnarray}
\noindent 其中,$(\mathbi{x}',\mathbi{y})$为输入中含有扰动的对抗样本,函数$\funp{C}(\cdot)$为模型。公式\eqref{eq:13-8}$\Psi(\mathbi{x},\mathbi{x}')$表示扰动后的输入$\mathbi{x}'$和原输入$\mathbi{x}$之间的距离,$\varepsilon$表示扰动的受限范围。当模型对包含噪声的数据容易给出较差的结果时,往往意味着该模型的抗干扰能力差,因此可以利用对抗样本检测现有模型的健壮性\upcite{DBLP:conf/emnlp/JiaL17}。同时,采用类似数据增强的方式将对抗样本混合至训练数据中,能够使模型得到稳定的预测能力,这种方式也被称为对抗训练\upcite{DBLP:journals/corr/GoodfellowSS14,DBLP:conf/emnlp/BekoulisDDD18,DBLP:conf/naacl/YasunagaKR18} \noindent 其中,$(\mathbi{x}',\mathbi{y})$为输入中含有扰动的对抗样本,函数$\funp{C}(\cdot)$为模型。公式\eqref{eq:13-8}$\Psi(\mathbi{x},\mathbi{x}')$表示扰动后的输入$\mathbi{x}'$和原输入$\mathbi{x}$之间的距离,$\varepsilon$表示扰动的受限范围。当模型无法对包含噪声的输入给出正确的输出时,往往意味着该模型的抗干扰能力差,因此可以利用对抗样本检测现有模型的健壮性\upcite{DBLP:conf/emnlp/JiaL17}。同时,采用类似数据增强的方式将对抗样本混合至训练数据中,能够使模型得到稳定的预测能力,这种方式也被称为对抗训练\upcite{DBLP:journals/corr/GoodfellowSS14,DBLP:conf/emnlp/BekoulisDDD18,DBLP:conf/naacl/YasunagaKR18}
\parinterval 通过对抗样本训练来提升模型健壮性的首要问题是:如何生成对抗样本。通过当前模型$\funp{C}$和样本$(\mathbi{x},\mathbi{y})$,生成对抗样本的过程被称为{\small\bfnew{对抗攻击}}\index{对抗攻击}(Adversarial Attack)\index{Adversarial Attack}。对抗攻击可以被分为黑盒攻击和白盒攻击。在白盒攻击中,攻击算法可以访问模型的完整信息,包括模型结构、网络参数、损失函数、激活函数、输入和输出数据等。黑盒攻击通常依赖启发式方法来生成对抗样本\upcite{DBLP:conf/emnlp/JiaL17},由于这种攻击方式不需要知道神经网络的详细信息,仅仅通过访问模型的输入和输出就可以达到攻击的目的。并且由于神经网络其本身便是一个黑盒模型,因此在神经网络的相关应用中黑盒攻击方法更加实用。 \parinterval 通过对抗样本训练来提升模型健壮性的首要问题是:如何生成对抗样本。通过当前模型$\funp{C}$和样本$(\mathbi{x},\mathbi{y})$,生成对抗样本的过程被称为{\small\bfnew{对抗攻击}}\index{对抗攻击}(Adversarial Attack)\index{Adversarial Attack}。对抗攻击可以被分为黑盒攻击和白盒攻击。在白盒攻击中,攻击算法可以访问模型的完整信息,包括模型结构、网络参数、损失函数、激活函数、输入和输出数据等。黑盒攻击通常依赖启发式方法来生成对抗样本\upcite{DBLP:conf/emnlp/JiaL17},由于这种攻击方式不需要知道神经网络的详细信息,仅仅通过访问模型的输入和输出就可以达到攻击的目的。并且由于神经网络其本身便是一个黑盒模型,因此在神经网络的相关应用中黑盒攻击方法更加实用。
...@@ -388,7 +388,7 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\ ...@@ -388,7 +388,7 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\
\subsection{基于白盒攻击的方法} \subsection{基于白盒攻击的方法}
\parinterval 除了在单词级别增加扰动以外,还可以在模型内部增加扰动。一种简单的方法是在每一个词的词嵌入上,累加一个正态分布的变量,之后将其作为模型的最终输入。同时,可以在训练阶段增加额外的训练目标。比如,迫使模型在接收到被扰动的输入后,编码器能够生成与正常输入类似的表示,解码器输出正确的翻译结果\upcite{DBLP:conf/acl/LiuTMCZ18} \parinterval 除了在单词级别增加扰动以外,还可以在模型内部增加扰动。一种简单的方法是在每一个词的词嵌入上,累加一个正态分布的变量,之后将其作为模型的最终输入。同时,可以在训练阶段增加额外的训练目标。比如,迫使模型在接收到被扰动的输入后,编码器能够生成与正常输入类似的表示,同时解码器也能够输出正确的翻译结果\upcite{DBLP:conf/acl/LiuTMCZ18}
\parinterval 还可以根据机器翻译的具体问题增加扰动。例如,针对同音字错误问题,可以将单词的发音转换为一个包含$n$个发音单元的发音序列,如音素,音节等,并训练相应的嵌入矩阵将每一个发音单元转换为对应的向量表示。对发音序列中发音单元的嵌入表示进行平均后,得到当前单词的发音表示。最后将词嵌入与单词的发音表示进行加权求和,并将结果作为模型的输入\upcite{DBLP:conf/acl/LiuMHXH19}。通过这种方式可以提高模型对同音异形词的处理能力。除了在词嵌入层增加扰动,也可以在编码器输出中引入额外的噪声,能起到与在层输入中增加扰动相类似的效果\upcite{DBLP:conf/acl/LiLWJXZLL20} \parinterval 还可以根据机器翻译的具体问题增加扰动。例如,针对同音字错误问题,可以将单词的发音转换为一个包含$n$个发音单元的发音序列,如音素,音节等,并训练相应的嵌入矩阵将每一个发音单元转换为对应的向量表示。对发音序列中发音单元的嵌入表示进行平均后,得到当前单词的发音表示。最后将词嵌入与单词的发音表示进行加权求和,并将结果作为模型的输入\upcite{DBLP:conf/acl/LiuMHXH19}。通过这种方式可以提高模型对同音异形词的处理能力。除了在词嵌入层增加扰动,也可以在编码器输出中引入额外的噪声,能起到与在层输入中增加扰动相类似的效果\upcite{DBLP:conf/acl/LiLWJXZLL20}
...@@ -409,7 +409,7 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\ ...@@ -409,7 +409,7 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\
\label{eq:13-11} \label{eq:13-11}
\end{eqnarray} \end{eqnarray}
\noindent 其中,$\textrm{Loss}_{\textrm{clean}}(\theta_{\textrm{mt}})$为正常情况下的损失,$\textrm{Loss}_{\textrm{lm}}(\theta_{\textrm{lm}}^{\mathbi{x}})$$\textrm{Loss}_{\textrm{lm}}(\theta_{\textrm{lm}}^{\mathbi{y}})$为生成对抗样本所用到的源语言与目标语言的模型的损失,$\textrm{Loss}_{\textrm{robust}}(\theta_{\textrm{mt}})$使用修改后得到的对抗样本作为输入,并以原始的译文$\mathbi{y}$作为答案时计算得到的损失。假设有$N$个样本,则损失函数的具体形式如下: \noindent 其中,$\textrm{Loss}_{\textrm{clean}}(\theta_{\textrm{mt}})$为正常情况下的损失,$\textrm{Loss}_{\textrm{lm}}(\theta_{\textrm{lm}}^{\mathbi{x}})$$\textrm{Loss}_{\textrm{lm}}(\theta_{\textrm{lm}}^{\mathbi{y}})$为生成对抗样本所用到的源语言与目标语言的模型的损失,$\textrm{Loss}_{\textrm{robust}}(\theta_{\textrm{mt}})$以修改后的源语言$\mathbi{x}'$为输入,以原始的译文$\mathbi{y}$作为答案时计算得到的损失。假设有$N$个样本,则损失函数的具体形式如下:
\begin{eqnarray} \begin{eqnarray}
\textrm{Loss}_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\mathbi{y})}-\log \funp{P}(\mathbi{y}|\mathbi{x}',\mathbi{y}';\theta_{\textrm{mt}}) \textrm{Loss}_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\mathbi{y})}-\log \funp{P}(\mathbi{y}|\mathbi{x}',\mathbi{y}';\theta_{\textrm{mt}})
\label{eq:13-12} \label{eq:13-12}
...@@ -432,11 +432,11 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\ ...@@ -432,11 +432,11 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\
\subsection{极大似然估计的问题}\label{subsec-13.3.1} \subsection{极大似然估计的问题}\label{subsec-13.3.1}
\parinterval 极大似然估计已成为机器翻译乃至整个自然语言处理领域中使用最广泛的训练用目标函数。但是,使用极大似然估存在{\small\bfnew{曝光偏置}}\index{曝光偏置}(Exposure Bias\index{Exposure Bias})问题和训练-推断评价指标不一致问题,具体体现在如下两个方面。 \parinterval 极大似然估计已成为机器翻译乃至整个自然语言处理领域中使用最广泛的训练用目标函数。但是,使用极大似然估存在{\small\bfnew{曝光偏置}}\index{曝光偏置}(Exposure Bias\index{Exposure Bias})问题和训练目标函数与任务评价指标不一致问题,具体体现在如下两个方面。
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
\item {\small\bfnew{曝光偏置问题}}。在训练过程中,模型使用标注数据进行训练,因此模型在预测下一个单词时,解码器的输入是正确的译文片段。也就是,预测第$j$个单词时,系统使用了标准答案$\{{y}_1,...,{y}_{j-1}\}$作为历史信息。但是对新的句子进行翻译时,预测第$j$个单词时使用的是模型自己生成的前$j-1$个单词,即$\{\hat{{y}}_1,...,\hat{{y}}_{j-1}\}$。这意味着,训练时使用的输入数据(目标语言端)与真实翻译时的情况不符,如图\ref{fig:13-8}所示。由于在训练过程中暴露于标注数据,因此模型也适应了标注数据,在推断阶段无法很好地适应模型自动生成的数据,这就是曝光偏置问题\upcite{Bengio2015ScheduledSF,Ranzato2016SequenceLT} \item {\small\bfnew{曝光偏置问题}}。在训练过程中,模型使用标注数据进行训练,因此模型在预测下一个单词时,解码器的输入是正确的译文片段。也就是,预测第$j$个单词时,系统使用了标准答案$\{{y}_1,...,{y}_{j-1}\}$作为历史信息。但是对新的句子进行翻译时,预测第$j$个单词时使用的是模型自己生成的前$j-1$个单词,即$\{\hat{{y}}_1,...,\hat{{y}}_{j-1}\}$。这意味着,训练时使用的输入数据(目标语言端)与真实翻译时的情况不符,如图\ref{fig:13-8}所示。由于模型在训练过程中一直使用标注数据作为解码器的输入,使得模型逐渐适应了标注数据。因此在推断阶段,模型无法很好地适应模型本身生成的数据,这就是曝光偏置问题\upcite{Bengio2015ScheduledSF,Ranzato2016SequenceLT}
\vspace{0.5em} \vspace{0.5em}
%---------------------------------------------- %----------------------------------------------
...@@ -466,7 +466,7 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\ ...@@ -466,7 +466,7 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\
\subsubsection{1. 调度采样} \subsubsection{1. 调度采样}
\parinterval 对于一个目标语言序列$\seq{y}=\{{y}_1,\ldots,{y}_n\}$,在预测第$j$个单词时,训练过程与推断过程之间的主要区别在于:训练过程中使用标准答案$\{{y}_{1},...,{y}_{j-1}\}$,而推断过程使用的是来自模型本身的预测结果$\{\hat{{y}}_{1},...,\hat{{y}}_{j-1}\}$。此时可以采取一种{\small\bfnew{调度采样}}\index{调度采样}(Scheduled Sampling\index{Scheduled Sampling})机制\upcite{Bengio2015ScheduledSF}。以基于循环神经网络的模型为例,在训练中预测第$j$个单词时,随机决定使用${y}_{j-1}$还是$\hat{{y}}_{j-1}$作为输入。 假设训练时使用的是基于小批量的随机梯度下降方法,在第$i$ 个批次中,对序列每一个位置进行预测时以概率$\epsilon_i$使用标准答案${y}_{j-1}$,或以概率${1-\epsilon_i}$使用来自模型本身的预测$\hat{{y}}_{j-1}$。具体到序列中的一个位置$j$,可以根据模型单词预测的概率进行采样,在$\epsilon_i$控制的调度策略下,同${y}_{j-1}$一起作为输入。此过程如图\ref{fig:13-9}所示,并且这个过程可以很好地与束搜索融合。 \parinterval 对于一个目标语言序列$\seq{y}=\{{y}_1,\ldots,{y}_n\}$,在预测第$j$个单词时,训练过程与推断过程之间的主要区别在于:训练过程中使用标准答案$\{{y}_{1},...,{y}_{j-1}\}$,而推断过程使用的是来自模型本身的预测结果$\{\hat{{y}}_{1},...,\hat{{y}}_{j-1}\}$。此时可以采取一种{\small\bfnew{调度采样}}\index{调度采样}(Scheduled Sampling\index{Scheduled Sampling})机制\upcite{Bengio2015ScheduledSF}。以基于循环神经网络的模型为例,在训练中预测第$j$个单词时,随机决定使用${y}_{j-1}$还是$\hat{{y}}_{j-1}$作为输入。 假设训练时使用的是基于小批量的随机梯度下降方法,在第$i$ 个批次中对序列每一个位置进行预测时,会以概率$\epsilon_i$使用标准答案${y}_{j-1}$,或以概率${1-\epsilon_i}$使用来自模型本身的预测$\hat{{y}}_{j-1}$。具体到序列中的一个位置$j$,可以根据模型单词预测的概率进行采样,在$\epsilon_i$控制的调度策略下,同${y}_{j-1}$一起作为输入。此过程如图\ref{fig:13-9}所示,并且这个过程可以很好地与束搜索融合。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -518,7 +518,7 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\ ...@@ -518,7 +518,7 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\
\subsection{强化学习方法} \subsection{强化学习方法}
\parinterval {\small\bfnew{强化学习}}\index{强化学习}(Reinforcement Learning\index{Reinforcement Learning},RL)方法是机器学习中的经典方法,它可以同时解决\ref{subsec-13.3.1}节提到的曝光偏置问题和训练-推断评价指标不一致问题。本节主要介绍基于策略的方法和基于演员-评论家的方法\upcite{DBLP:conf/iclr/BahdanauBXGLPCB17} \parinterval {\small\bfnew{强化学习}}\index{强化学习}(Reinforcement Learning\index{Reinforcement Learning},RL)方法是机器学习中的经典方法,它可以同时解决\ref{subsec-13.3.1}节提到的曝光偏置问题和训练目标函数与任务评价指标不一致问题。本节主要介绍基于策略的方法和基于演员-评论家的方法\upcite{DBLP:conf/iclr/BahdanauBXGLPCB17}
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION % NEW SUBSUB-SECTION
...@@ -540,7 +540,7 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\ ...@@ -540,7 +540,7 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\
\label{eq:13-14} \label{eq:13-14}
\end{eqnarray} \end{eqnarray}
\noindent 这里,$\hat{\seq{y}}$是模型预测的译文,$\chi(\seq{x}^{[k]})$$\seq{x}^{[k]}$所对应的所有候选翻译的集合。损失函数$\vartriangle(\hat{\seq{y}},\seq{y}^{[k]})$用来衡量模型预测$\hat{\seq{y}}$与标准答案$\seq{y}^{[k]}$间的差异,损失函数一般用翻译质量评价指标定义,例如,BLEU,TER等\footnote{对于BLEU,损失函数可以被定义为$1-$BLEU。}。在最小风险训练中,对模型参数$\theta$的偏导数为: \noindent 这里,$\hat{\seq{y}}$是模型预测的译文,$\chi(\seq{x}^{[k]})$$\seq{x}^{[k]}$所对应的所有候选翻译的集合。损失函数$\vartriangle(\hat{\seq{y}},\seq{y}^{[k]})$用来衡量模型预测$\hat{\seq{y}}$与标准答案$\seq{y}^{[k]}$间的差异,损失函数一般用翻译质量评价指标定义,例如,BLEU,TER等\footnote{当选择BLEU作为损失函数时,损失函数可以被定义为$1-$BLEU。}。在最小风险训练中,对模型参数$\theta$的偏导数为:
\begin{eqnarray} \begin{eqnarray}
\frac{\partial \funp{R}(\theta)}{\partial \theta} & = & \sum_{k=1}^N \mathbb{E}_{\hat{\seq{y}}|\seq{x}^{[k]};\theta}[\vartriangle(\hat{\seq{y}},\seq{y}^{[k]}) \times \frac{\partial \funp{P}(\hat{\seq{y}}|\seq{x}^{[k]};\theta)/\partial \theta}{\funp{P}(\hat{\seq{y}}|\seq{x}^{[k]};\theta)}] \nonumber \\ \frac{\partial \funp{R}(\theta)}{\partial \theta} & = & \sum_{k=1}^N \mathbb{E}_{\hat{\seq{y}}|\seq{x}^{[k]};\theta}[\vartriangle(\hat{\seq{y}},\seq{y}^{[k]}) \times \frac{\partial \funp{P}(\hat{\seq{y}}|\seq{x}^{[k]};\theta)/\partial \theta}{\funp{P}(\hat{\seq{y}}|\seq{x}^{[k]};\theta)}] \nonumber \\
& = & \sum_{k=1}^N \mathbb{E}_{\hat{\seq{y}}|\seq{x}^{[k]};\theta}[\vartriangle(\hat{\seq{y}},\seq{y}^{[k]}) \times \frac{\partial \log{\funp{P}(\hat{\seq{y}}|\seq{x}^{[k]};\theta)}}{\partial \theta}] & = & \sum_{k=1}^N \mathbb{E}_{\hat{\seq{y}}|\seq{x}^{[k]};\theta}[\vartriangle(\hat{\seq{y}},\seq{y}^{[k]}) \times \frac{\partial \log{\funp{P}(\hat{\seq{y}}|\seq{x}^{[k]};\theta)}}{\partial \theta}]
...@@ -557,7 +557,7 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\ ...@@ -557,7 +557,7 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\
\vspace{0.5em} \vspace{0.5em}
\item 最小风险训练使用模型自身产生的数据进行训练,从而避免了曝光偏置问题。 \item 最小风险训练使用模型自身产生的数据进行训练,从而避免了曝光偏置问题。
\vspace{0.5em} \vspace{0.5em}
\item 最小风险训练直接优化BLEU等评价指标,从而解决了训练-推断评价指标不一致问题。 \item 最小风险训练直接优化BLEU等评价指标,从而解决了训练目标函数与任务评价指标不一致问题。
\vspace{0.5em} \vspace{0.5em}
\item 最小风险训练方法不涉及具体的模型结构,可以应用于任意的机器翻译模型。 \item 最小风险训练方法不涉及具体的模型结构,可以应用于任意的机器翻译模型。
\vspace{0.5em} \vspace{0.5em}
...@@ -649,9 +649,9 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\ ...@@ -649,9 +649,9 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\
\sectionnewpage \sectionnewpage
\section{知识蒸馏}\label{subsection-7.5.3} \section{知识蒸馏}\label{subsection-7.5.3}
\parinterval 理想的机器翻译系统应该是品质好、速度快、存储占用少。不过,为了追求更好的翻译品质,往往需要更大的模型,但是相应的翻译速度会降低,模型的体积会变大。在很多场景下,这样的模型无法直接使用。比如,Transformer-Big等“大”模型通常在专用GPU服务器上运行,在手机等受限环境下仍很难应用。 \parinterval 理想的机器翻译系统应该是品质好、速度快、存储占用少。不过,为了追求更好的翻译品质,往往需要更大的模型,但是相应的翻译速度会降低,模型的体积会变大。在很多场景下,这样的模型无法直接使用。比如,Transformer-Big等“大”模型通常在专用服务器上运行,在手机等受限环境下仍很难应用。
\parinterval 另一方面,直接训练“小”模型的效果往往并不理想,其翻译品质与“大”模型相比仍有比较明显的差距。既然直接训练小模型无法达到很好的效果,一种有趣的想法是把“大”模型的知识传递给“小”模型。这类似于,教小孩子学习数学,是请一个权威数学家(数据中的标准答案)进行教学,而是会请一个小学数 \parinterval 但是,直接训练“小”模型的效果往往并不理想,其翻译品质与“大”模型相比仍有比较明显的差距。既然直接训练小模型无法达到很好的效果,一种有趣的想法是把“大”模型的知识传递给“小”模型。这类似于,教小孩子学习数学,是请一个权威数学家(数据中的标准答案)进行教学,而是会请一个小学数
学教师(“大”模型)来教小孩子。这就是知识蒸馏的基本思想。 学教师(“大”模型)来教小孩子。这就是知识蒸馏的基本思想。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
...@@ -666,13 +666,13 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\ ...@@ -666,13 +666,13 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
\item “知识”在模型间是可迁移的。也就是说,一个模型中蕴含的规律可以被另一个模型使用。最典型的例子就是预训练语言模型(见{\chapternine})。使用单语数据学习到的表示模型,在双语的翻译任务中仍然可以发挥很好的作用。也就是,把单语语言模型学习到的知识迁移到双语翻译中对句子表示的任务中 \item “知识”在模型间是可迁移的。也就是说,一个模型中蕴含的规律可以被另一个模型使用。最典型的例子就是预训练语言模型(见{\chapternine})。使用单语数据学习到的表示模型,在双语的翻译任务中仍然可以发挥很好的作用。也就是,把在单语语言模型学习到的知识迁移到双语翻译过程中对句子的表示任务上
\vspace{0.5em} \vspace{0.5em}
\item 模型所蕴含的“知识”比原始数据中的“知识”更容易被学习到。比如,机器翻译中大量使用的回译(伪数据)方法,就把模型的输出作为数据让系统进行学习。 \item 模型所蕴含的“知识”比原始数据中的“知识”更容易被学习到。比如,机器翻译中大量使用的回译(伪数据)方法,就把模型的输出作为数据让系统进行学习。
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
\parinterval 这里所说的第二个假设对应了机器学习中的一大类问题\ \dash \ {\small\bfnew{学习难度}}\index{学习难度}(Learning Difficulty)\index{Learning Difficulty}。所谓难度是指:在给定一个模型的情况下,需要花费多少代价对目标任务进行学习。如果目标任务很简单,同时模型与任务很匹配,那学习难度就会降低。如果目标任务很复杂,同时模型与其匹配程度很低,那学习难度就会很大。在自然语言处理任务中,这个问题的一种表现是:在很好的数据中学习的模型的翻译质量可能仍然很差。即使训练数据是完美的,但是模型仍然无法做到完美的学习。这可能是因为建模的不合理,导致模型无法描述目标任务中复杂的规律。在机器翻译中这个问题体现的尤为明显。比如,在机器翻译系统$n$-best结果中挑选最好的译文(称为Oracle)作为训练样本让系统重新学习,系统仍然达不到Oracle的水平。 \parinterval 这里所说的第二个假设对应了机器学习中的一大类问题\ \dash \ {\small\bfnew{学习难度}}\index{学习难度}(Learning Difficulty)\index{Learning Difficulty}。所谓难度是指:在给定一个模型的情况下,需要花费多少代价对目标任务进行学习。如果目标任务很简单,同时模型与任务很匹配,那学习难度就会降低。如果目标任务很复杂,同时模型与其匹配程度很低,那学习难度就会很大。在自然语言处理任务中,这个问题的一种表现是:在质量很高的数据中学习的模型的翻译质量可能仍然很差。即使训练数据是完美的,但是模型仍然无法做到完美的学习。这可能是因为建模的不合理,导致模型无法描述目标任务中复杂的规律。在机器翻译中这个问题体现的尤为明显。比如,在机器翻译系统输出的$n$-best结果中挑选最好的译文(称为Oracle)作为训练样本让系统重新学习,系统仍然达不到Oracle的水平。
\parinterval 知识蒸馏本身也体现了一种“自学习”的思想。即利用模型(自己)的预测来教模型(自己)。这样既保证了知识可以向更轻量的模型迁移,同时也避免了模型从原始数据中学习难度大的问题。虽然“大”模型的预测中也会有错误,但是这种预测是更符合建模的假设的,因此“小”模型反倒更容易从不完美的信息中学习到更多的知识\footnote[15]{很多时候,“大”模型和“小”模型都是基于同一种架构,因此二者对问题的假设和模型结构都是相似的。}。类似于,刚开始学习围棋的人从职业九段身上可能什么也学不到,但是向一个业余初段的选手学习可能更容易入门。另外,也有研究表明:在机器翻译中,相比于“小”模型,“大”模型更容易进行优化,也更容易找到更好的模型收敛状态\upcite{li2020train}。因此在需要一个性能优越,存储较小的模型时,也会考虑将大模型压缩得到更轻量模型\upcite{DBLP:journals/corr/abs-2002-11794} \parinterval 知识蒸馏本身也体现了一种“自学习”的思想。即利用模型(自己)的预测来教模型(自己)。这样既保证了知识可以向更轻量的模型迁移,同时也避免了模型从原始数据中学习难度大的问题。虽然“大”模型的预测中也会有错误,但是这种预测是更符合建模的假设的,因此“小”模型反倒更容易从不完美的信息中学习到更多的知识\footnote[15]{很多时候,“大”模型和“小”模型都是基于同一种架构,因此二者对问题的假设和模型结构都是相似的。}。类似于,刚开始学习围棋的人从职业九段身上可能什么也学不到,但是向一个业余初段的选手学习可能更容易入门。另外,也有研究表明:在机器翻译中,相比于“小”模型,“大”模型更容易进行优化,也更容易找到更好的模型收敛状态\upcite{li2020train}。因此在需要一个性能优越,存储较小的模型时,也会考虑将大模型压缩得到更轻量模型\upcite{DBLP:journals/corr/abs-2002-11794}
...@@ -733,13 +733,13 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\seq{y}} | \seq{x}) ...@@ -733,13 +733,13 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\seq{y}} | \seq{x})
\parinterval 在神经机器翻译中,通常使用公式\eqref{eq:13-24}的方法进行知识蒸馏,即通过教师模型构造伪数据,之后让学生模型从伪数据中学习。这样做的好处在于,系统研发人员不需要对系统进行任何修改,整个过程只需要调用教师模型和学生模型标准的训练和推断模块即可。 \parinterval 在神经机器翻译中,通常使用公式\eqref{eq:13-24}的方法进行知识蒸馏,即通过教师模型构造伪数据,之后让学生模型从伪数据中学习。这样做的好处在于,系统研发人员不需要对系统进行任何修改,整个过程只需要调用教师模型和学生模型标准的训练和推断模块即可。
\parinterval 另一个问题是如何构造教师模型和学生模型。以Transformer为例,通常有两种思路: \parinterval 那么如何构造教师模型和学生模型呢?以Transformer为例,通常有两种思路:
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
\item 固定教师模型,通过减少模型容量的方式设计学生模型。比如,可以使用容量较大的模型作为教师模型(如:Transformer-Big或Transformer-Deep),然后通过将神经网络变“窄”、变“浅”的方式得到学生模型。例如,可以用Transformer-Big做教师模型,然后把Transformer-Big的解码器变为一层网络,作为学生模型。 \item 固定教师模型,通过减少模型容量的方式设计学生模型。比如,可以使用容量较大的模型作为教师模型(如:Transformer-Big或Transformer-Deep),然后通过将神经网络变“窄”、变“浅”的方式得到学生模型。例如,可以用Transformer-Big做教师模型,然后把Transformer-Big的解码器变为一层网络,作为学生模型。
\vspace{0.5em} \vspace{0.5em}
\item 固定学生模型,通过模型集成的方式设计教师模型。可以组合多个模型生成更高质量的译文。比如,融合多个Transformer-Big模型(不同参数初始化方式),之后学习一个Transformer-Base模型。 \item 固定学生模型,通过模型集成的方式设计教师模型。可以组合多个模型生成更高质量的译文。比如,融合多个Transformer-Big模型(由不同参数初始化方式训练的),之后学习一个Transformer-Base模型。
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
...@@ -763,7 +763,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\seq{y}} | \seq{x}) ...@@ -763,7 +763,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\seq{y}} | \seq{x})
\sectionnewpage \sectionnewpage
\section{基于样本价值的学习} \section{基于样本价值的学习}
\parinterval 当人在学习知识时,通常会遵循序渐进、由易到难的原则,这是一种很自然的学习策略。但是,当训练机器翻译模型时,通常是将全部的样本以随机的方式输入模型中进行学习,换句话说,就是让模型来平等地对待所有的训练样本。这种方式忽略了样本对于模型训练的“价值”,显然,更加理想的方式是优先使用价值高的样本对模型进行训练。围绕训练样本的价值差异产生了诸如数据选择、主动学习、课程学习等一系列的样本使用方法,这些学习策略本质上是在不同任务、不同背景、不同假设下,对如何高效地利用训练样本这一问题进行求解,本节即对这些技术进行介绍。 \parinterval 当人在学习知识时,通常会遵循序渐进、由易到难的原则,这是一种很自然的学习策略。但是,当训练机器翻译模型时,通常是将全部的样本以随机的方式输入模型中进行学习,换句话说,就是让模型来平等地对待所有的训练样本。这种方式忽略了样本对于模型训练的“价值”,显然,更加理想的方式是优先使用价值高的样本对模型进行训练。围绕训练样本的价值差异产生了诸如数据选择、主动学习、课程学习等一系列的样本使用方法,这些学习策略本质上是在不同任务、不同背景、不同假设下,对如何高效地利用训练样本这一问题进行求解,本节即对这些技术进行介绍。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SECTION % NEW SUB-SECTION
...@@ -785,7 +785,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\seq{y}} | \seq{x}) ...@@ -785,7 +785,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\seq{y}} | \seq{x})
\parinterval 当机器翻译系统应用于不同领域时,训练语料与所应用领域的相关性就显得非常重要\upcite{DBLP:journals/mt/EetemadiLTR15,britz2017effective}。不同领域往往具有自己独特的属性,比如语言风格、句子结构、专业术语等,例如,“bank”这个英语单词,在金融领域通常被翻译为“银行”,而在计算机领域,一般被解释为“库”、“存储体”等。这也会导致,使用通用领域数据训练出来的模型在特定领域上的翻译效果往往不理想,这本质上是训练数据和测试数据的领域属性不匹配造成的。 \parinterval 当机器翻译系统应用于不同领域时,训练语料与所应用领域的相关性就显得非常重要\upcite{DBLP:journals/mt/EetemadiLTR15,britz2017effective}。不同领域往往具有自己独特的属性,比如语言风格、句子结构、专业术语等,例如,“bank”这个英语单词,在金融领域通常被翻译为“银行”,而在计算机领域,一般被解释为“库”、“存储体”等。这也会导致,使用通用领域数据训练出来的模型在特定领域上的翻译效果往往不理想,这本质上是训练数据和测试数据的领域属性不匹配造成的。
\parinterval 一种解决办法是只使用特定领域的数据进行模型训练,然而这种数据往往比较稀缺。那能不能利用通用领域数据来帮助数据稀少的领域呢?这个研究方向被称为机器翻译的{\small\bfnew{领域适应}}\index{领域适应}(Domain Adaptation\index{Domain Adaptation}),即从资源丰富的领域(称为{\small\bfnew{源领域}}\index{源领域}, Source Domain\index{Source Domain})向资源稀缺的领域(称为{\small\bfnew{目标领域}}\index{目标领域},Target Domain\index{Target Domain})迁移。这本身也对应着资源稀缺场景下的机器翻译问题,这类问题会在{\chaptersixteen}进行详细讨论。本章更加关注如何有效地利用训练样本以更好地适应目标领域。具体来说,可以使用{\small\bfnew{数据选择}}\index{数据选择}(Data Selection\index{Selection})从源领域训练数据中选择与目标领域更加相关的样本进行模型训练。这样做的一个好处是,源领域中混有大量与目标领域不相关的样本,数据选择可以有效降低这部分数据的比例,这样可以更加突出与领域相关样本的作用。 \parinterval 一种解决办法是只使用特定领域的数据进行模型训练,然而这种数据往往比较稀缺。那能不能利用通用领域数据来帮助数据稀少的领域呢?这个研究方向被称为机器翻译的{\small\bfnew{领域适应}}\index{领域适应}(Domain Adaptation\index{Domain Adaptation}),即把数据从资源丰富的领域(称为{\small\bfnew{源领域}}\index{源领域}, Source Domain\index{Source Domain})向资源稀缺的领域(称为{\small\bfnew{目标领域}}\index{目标领域},Target Domain\index{Target Domain})迁移。这本身也对应着资源稀缺场景下的机器翻译问题,这类问题会在{\chaptersixteen}进行详细讨论。本章更加关注如何有效地利用训练样本以更好地适应目标领域。具体来说,可以使用{\small\bfnew{数据选择}}\index{数据选择}(Data Selection\index{Selection})从源领域训练数据中选择与目标领域更加相关的样本进行模型训练。这样做的一个好处是,源领域中混有大量与目标领域不相关的样本,数据选择可以有效降低这部分数据的比例,这样可以更加突出与领域相关样本的作用。
\parinterval 数据选择所要解决的核心问题是:给定一个目标领域/任务数据集(如,目标任务的开发集),如何衡量原始训练样本与目标领域/任务的相关性?主要方法可以分为以下几类: \parinterval 数据选择所要解决的核心问题是:给定一个目标领域/任务数据集(如,目标任务的开发集),如何衡量原始训练样本与目标领域/任务的相关性?主要方法可以分为以下几类:
...@@ -799,7 +799,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\seq{y}} | \seq{x}) ...@@ -799,7 +799,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\seq{y}} | \seq{x})
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
\parinterval 上述方法实际上描述了一种静态的学习策略,即首先利用评分函数对源领域的数据进行打分排序,然后选取一定数量的数据合并到目标领域数据集中,并共同训练模型\upcite{DBLP:conf/emnlp/AxelrodHG11,DBLP:conf/wmt/AxelrodRHO15,chen2016bilingual,DBLP:conf/conll/ChenH16}。这个过程其实是扩大了目标领域的数据规模,模型的收益主要来自于数据的增加。但是研究人员也发现静态方法会存在两方面的缺陷: \parinterval 上述方法实际上描述了一种静态的学习策略,即首先利用评分函数对源领域的数据进行打分排序,然后选取一定数量的数据合并到目标领域数据集中,再用目标领域数据集训练模型\upcite{DBLP:conf/emnlp/AxelrodHG11,DBLP:conf/wmt/AxelrodRHO15,chen2016bilingual,DBLP:conf/conll/ChenH16}。这个过程其实是扩大了目标领域的数据规模,此时,对于使用目标领域数据集训练出的模型来说,其性能的增加主要来自于数据量的增加。但是研究人员也发现静态方法会存在两方面的缺陷:
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
...@@ -821,7 +821,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\seq{y}} | \seq{x}) ...@@ -821,7 +821,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\seq{y}} | \seq{x})
\parinterval 含有噪声的数据通常都具有较为明显的特征,因此可以用诸如句子长度比、词对齐率、最长连续未对齐序列长度等一些特征来对句子进行综合评分\upcite{rarrick2011mt,taghipour2011parallel,Xu2017ZipporahAF};也可以将该问题转化为分类任务来对句子进行筛选\upcite{DBLP:conf/aclnmt/CarpuatVN17,DBLP:conf/naacl/VyasNC18};此外,从某种意义上来说,数据降噪其实也可以算是一种领域数据选择,因为它的目标是选择可信度高的样本,因此也可以人工构建一个可信度高的小数据集,然后利用该数据集和通用数据集之间的差异性进行选择\upcite{DBLP:conf/wmt/WangWHNC18} \parinterval 含有噪声的数据通常都具有较为明显的特征,因此可以用诸如句子长度比、词对齐率、最长连续未对齐序列长度等一些特征来对句子进行综合评分\upcite{rarrick2011mt,taghipour2011parallel,Xu2017ZipporahAF};也可以将该问题转化为分类任务来对句子进行筛选\upcite{DBLP:conf/aclnmt/CarpuatVN17,DBLP:conf/naacl/VyasNC18};此外,从某种意义上来说,数据降噪其实也可以算是一种领域数据选择,因为它的目标是选择可信度高的样本,因此也可以人工构建一个可信度高的小数据集,然后利用该数据集和通用数据集之间的差异性进行选择\upcite{DBLP:conf/wmt/WangWHNC18}
\parinterval 早期的工作大多在关注过滤噪声样本,但对如何利用噪声样本探讨较少。事实上,噪声是有强度的,有些噪声样本对于模型可能是有价值的,而且它们的价值可能会随着模型的状态而改变\upcite{DBLP:conf/wmt/WangWHNC18}。对于一个双语句对“我/喜欢/那个/地方/。 $\leftrightarrow$ I love that place. It's very beautiful”。一方面来说,虽然这两个句子都很流畅,但是由于汉语句子中缺少了一部分翻译,因此简单的基于长度或双语词典的方法可以很容易将其过滤掉。从另一方面来说,这个样本对于训练机器翻译模型仍然有用,特别是在数据稀缺的情况下,因为汉语句子和英语句子的前半部分仍然是正确的互译结果。这表明了噪声数据的微妙之处,它不是对应着简单的二元分类问题:一些训练样本可能部分有用。因此简单的过滤并不一种很好的办法,一种更加理想的学习策略应该是既可以合理的利用这些数据,又不让其对模型产生负面影响。例如,在训练过程中对批量数据的噪声水平进行{\small\bfnew{退火}}\index{退火}(Anneal)\index{Anneal},使得模型在越来越干净的数据上进行训练\upcite{DBLP:conf/wmt/WangWHNC18,DBLP:conf/acl/WangCC19}。从宏观上看,整个训练过程其实是一个持续微调的过程,这和微调的思想基本一致。这种学习策略一方面充分利用了训练数据,一方面又避免了噪声数据对模型的负面影响,因此取得了不错的效果。 \parinterval 早期的工作大多在关注过滤噪声样本,但对如何利用噪声样本探讨较少。事实上,噪声是有强度的,有些噪声样本对于模型可能是有价值的,而且它们的价值可能会随着模型的状态而改变\upcite{DBLP:conf/wmt/WangWHNC18}。对于一个双语句对“我/喜欢/那个/地方/。 $\leftrightarrow$ I love that place. It's very beautiful”。一方面来说,虽然这两个句子都很流畅,但是由于汉语句子中缺少了一部分翻译,因此简单的基于长度或双语词典的方法可以很容易将其过滤掉。从另一方面来说,这个样本对于训练机器翻译模型仍然有用,特别是在数据稀缺的情况下,因为汉语句子和英语句子的前半部分仍然是正确的互译结果。这表明了噪声数据的微妙之处,它不是对应着简单的二元分类问题(一个训练样本有用或没有用):一些训练样本可能部分有用。因此简单的过滤并不一种很好的办法,一种更加理想的学习策略应该是既可以合理的利用这些数据,又不让其对模型产生负面影响。例如,在训练过程中对批量数据的噪声水平进行{\small\bfnew{退火}}\index{退火}(Anneal)\index{Anneal},使得模型在越来越干净的数据上进行训练\upcite{DBLP:conf/wmt/WangWHNC18,DBLP:conf/acl/WangCC19}。从宏观上看,整个训练过程其实是一个持续微调的过程,这和微调的思想基本一致。这种学习策略一方面充分利用了训练数据,一方面又避免了噪声数据对模型的负面影响,因此取得了不错的效果。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION % NEW SUBSUB-SECTION
...@@ -875,7 +875,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\seq{y}} | \seq{x}) ...@@ -875,7 +875,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\seq{y}} | \seq{x})
\end{figure} \end{figure}
%------------------------------------------- %-------------------------------------------
\parinterval 评估样本的难度和具体的任务相关,在神经机器翻译中,有很多种评估方法,可以利用语言学上的困难准则,比如句子长度、句子平均词频、句法树深度等\upcite{DBLP:conf/naacl/PlataniosSNPM19,DBLP:conf/ranlp/KocmiB17}。这些准则本质上属于人类的先验知识,符合人类的直觉,但不一定和模型相匹配。对人类来说简单的句子对模型来说可能并不简单,所以研究人员也提出了基于模型的方法,比如:语言模型\upcite{DBLP:conf/acl/WangCC19,DBLP:conf/naacl/ZhangSKMCD19},或者神经机器翻译模型\upcite{zhang2018empirical,DBLP:conf/coling/XuHJFWHJXZ20}都可以用于评价样本的难度。值得注意的是,利用神经机器翻译来打分的方法分为静态和动态两种。静态的方法是利用在小数据集上训练的、更小的翻译模型来打分\upcite{zhang2018empirical}。动态的方法则是利用当前模型的状态来打分,这在广义上也叫作{\small\bfnew{自步学习}}\index{自步学习}(Self-paced Learning\index{Self-paced Learning}),通常可以利用模型的训练误差或变化率等指标进行样本难度的估计\upcite{DBLP:conf/coling/XuHJFWHJXZ20} \parinterval 实际上,评估样本的难度的方式和具体的任务相关,在神经机器翻译中,有很多种评估方法,可以利用语言学上的困难准则,比如句子长度、句子平均词频、句法树深度等\upcite{DBLP:conf/naacl/PlataniosSNPM19,DBLP:conf/ranlp/KocmiB17}。这些准则本质上属于人类的先验知识,符合人类的直觉,但不一定和模型相匹配。对人类来说简单的句子对模型来说可能并不简单,所以研究人员也提出了基于模型的方法,比如:语言模型\upcite{DBLP:conf/acl/WangCC19,DBLP:conf/naacl/ZhangSKMCD19},或者神经机器翻译模型\upcite{zhang2018empirical,DBLP:conf/coling/XuHJFWHJXZ20}都可以用于评价样本的难度。值得注意的是,利用神经机器翻译来打分的方法分为静态和动态两种。静态的方法是利用在小数据集上训练的、更小的翻译模型来打分\upcite{zhang2018empirical}。动态的方法则是利用当前模型的状态来打分,这在广义上也叫作{\small\bfnew{自步学习}}\index{自步学习}(Self-paced Learning\index{Self-paced Learning}),通常可以利用模型的训练误差或变化率等指标进行样本难度的估计\upcite{DBLP:conf/coling/XuHJFWHJXZ20}
\parinterval 虽然样本难度的度量在不同任务中有所不同,但课程规划通常与数据和任务无关。在各种场景中,大多数课程学习都利用了类似的调度策略。具体而言,调度策略可以分为预定义的和自动的两种。预定义的调度策略通常将按照难易程度排序好的样本划分为块,每个块中包含一定数量的难度相似的样本。然后按照“先易后难”的原则人工定义一个调度策略,比如,一种较为流行的方法是:在训练早期,模型只在简单块中进行采样,随着训练过程的进行,将下一个块的样本合并到当前训练子集中,继续训练,直到合并了整个数据块,即整个训练集可见为止,之后再继续训练直到收敛。这个过程如图\ref{fig:13-15}所示。类似的还有一些其他变体,比如,训练到模型可见整个数据集之后,将最难的样本块复制并添加到训练集中,或者是将最容易的数据块逐渐删除,然后再添加回来等,这些方法的基本想法都是想让模型在具备一定的能力之后更多关注于困难样本。 \parinterval 虽然样本难度的度量在不同任务中有所不同,但课程规划通常与数据和任务无关。在各种场景中,大多数课程学习都利用了类似的调度策略。具体而言,调度策略可以分为预定义的和自动的两种。预定义的调度策略通常将按照难易程度排序好的样本划分为块,每个块中包含一定数量的难度相似的样本。然后按照“先易后难”的原则人工定义一个调度策略,比如,一种较为流行的方法是:在训练早期,模型只在简单块中进行采样,随着训练过程的进行,将下一个块的样本合并到当前训练子集中,继续训练,直到合并了整个数据块,即整个训练集可见为止,之后再继续训练直到收敛。这个过程如图\ref{fig:13-15}所示。类似的还有一些其他变体,比如,训练到模型可见整个数据集之后,将最难的样本块复制并添加到训练集中,或者是将最容易的数据块逐渐删除,然后再添加回来等,这些方法的基本想法都是想让模型在具备一定的能力之后更多关注于困难样本。
...@@ -926,10 +926,10 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\seq{y}} | \seq{x}) ...@@ -926,10 +926,10 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\seq{y}} | \seq{x})
\item 对抗样本除了用于提高模型的健壮性之外,还有很多其他的应用场景,比如评估模型。通过构建由对抗样本构造的数据集,可以验证模型对于不同类型噪声的健壮性\upcite{DBLP:conf/emnlp/MichelN18}。 但是在生成对抗样本时常常要考虑很多问题,比如扰动是否足够细微\upcite{DBLP:conf/cvpr/Moosavi-Dezfooli16,DBLP:conf/cvpr/NguyenYC15},在人类难以察觉的同时做到欺骗模型的目的;对抗样本在不同的模型结构或数据集上是否具有足够的泛化能力\upcite{DBLP:conf/iclr/LiuCLS17,DBLP:journals/tnn/YuanHZL19};生成的方法是否足够高效等等\upcite{DBLP:conf/emnlp/JiaL17,DBLP:conf/infocom/YuanHL020} \item 对抗样本除了用于提高模型的健壮性之外,还有很多其他的应用场景,比如评估模型。通过构建由对抗样本构造的数据集,可以验证模型对于不同类型噪声的健壮性\upcite{DBLP:conf/emnlp/MichelN18}。 但是在生成对抗样本时常常要考虑很多问题,比如扰动是否足够细微\upcite{DBLP:conf/cvpr/Moosavi-Dezfooli16,DBLP:conf/cvpr/NguyenYC15},在人类难以察觉的同时做到欺骗模型的目的;对抗样本在不同的模型结构或数据集上是否具有足够的泛化能力\upcite{DBLP:conf/iclr/LiuCLS17,DBLP:journals/tnn/YuanHZL19};生成的方法是否足够高效等等\upcite{DBLP:conf/emnlp/JiaL17,DBLP:conf/infocom/YuanHL020}
\vspace{0.5em} \vspace{0.5em}
\item 此外,在机器翻译中,强化学习的应用也有很多,比如,MIXER算法用混合策略梯度和极大似然估计的目标函数来更新模型\upcite{Ranzato2016SequenceLT},DAgger\upcite{DBLP:journals/jmlr/RossGB11}以及DAD\upcite{DBLP:conf/aaai/VenkatramanHB15}等算法在训练过程之中逐渐让模型适应推断阶段的模式。此外,强化学习的效果目前还相当不稳定,研究人员提出了大量的方法来进行改善,比如降对动作价值函数$\funp{Q}$的估计的方差\upcite{DBLP:conf/iclr/BahdanauBXGLPCB17,DBLP:conf/emnlp/NguyenDB17}、使用单语语料\upcite{Sennrich2016ImprovingNM,DBLP:conf/emnlp/WuTQLL18}等等。 \item 此外,在机器翻译中,强化学习的应用也有很多,比如,MIXER算法用混合策略梯度和极大似然估计的目标函数来更新模型\upcite{Ranzato2016SequenceLT},DAgger\upcite{DBLP:journals/jmlr/RossGB11}以及DAD\upcite{DBLP:conf/aaai/VenkatramanHB15}等算法在训练过程之中逐渐让模型适应推断阶段的模式。此外,强化学习的效果目前还相当不稳定,研究人员提出了大量的方法来进行改善,比如降对动作价值函数$\funp{Q}$的估计的方差\upcite{DBLP:conf/iclr/BahdanauBXGLPCB17,DBLP:conf/emnlp/NguyenDB17}、使用单语语料\upcite{Sennrich2016ImprovingNM,DBLP:conf/emnlp/WuTQLL18}等等。
\vspace{0.5em} \vspace{0.5em}
\item 从广义上说,大多数课程学习方法都是遵循由易到难的原则,然而在实践过程中人们逐渐赋予了课程学习更多的内涵,课程学习的含义早已超越了最原始的定义。一方面,课程学习可以与许多任务相结合,此时,评估准则并不一定总是样本的困难度,这取决于具体的任务。或者说,我们更关心的是样本带给模型的“价值”,而非简单的难易标准。另一方面,在一些任务或数据中,由易到难并不总是有效,有时困难优先反而会取得更好的效果\upcite{DBLP:conf/medprai/SurendranathJ18,zhang2018empirical}。实际上这和人类的直觉不太符合,一种合理的解释是课程学习更适合标签噪声、离群值较多或者是目标任务困难的场景,提高模型的健壮性和收敛速度,而困难优先的策略则更适合数据集干净的场景\upcite{DBLP:conf/nips/ChangLM17} \item 从广义上说,大多数课程学习方法都是遵循由易到难的原则,然而在实践过程中人们逐渐赋予了课程学习更多的内涵,课程学习的含义早已超越了最原始的定义。一方面,课程学习可以与许多任务相结合,此时,评估准则并不一定总是样本的困难度,这取决于具体的任务。或者说,我们更关心的是样本带给模型的“价值”,而非简单的难易标准。另一方面,在一些任务或数据中,由易到难并不总是有效,有时困难优先反而会取得更好的效果\upcite{DBLP:conf/medprai/SurendranathJ18,zhang2018empirical}。实际上这和人类的直觉不太符合,一种合理的解释是课程学习更适合标签噪声、离群值较多或者是目标任务困难的场景,该方法能够提高模型的健壮性和收敛速度,而困难优先的策略则更适合数据集干净的场景\upcite{DBLP:conf/nips/ChangLM17}
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
...@@ -680,8 +680,6 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4} ...@@ -680,8 +680,6 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
%---------------------------------------------------------------------- %----------------------------------------------------------------------
\parinterval 有了词格这样的结构,多模型集成又有了新的思路。首先,可以将多个模型的译文融合为词格。注意,这个词格会包含这些模型无法生成的完整译文句子。之后,用一个更强的模型在词格上搜索最优的结果。这个过程有可能找到一些“新”的译文,即结果可能是从多个模型的结果中重组而来的。词格上的搜索模型可以基于多模型的融合,也可以使用一个简单的模型,这里需要考虑的是将神经机器翻译模型适应到词格上进行推断\upcite{DBLP:conf/aaai/SuTXJSL17}。其过程基本与原始的模型推断没有区别,只是需要把模型预测的结果附着到词格中的每条边上,再进行推断。 \parinterval 有了词格这样的结构,多模型集成又有了新的思路。首先,可以将多个模型的译文融合为词格。注意,这个词格会包含这些模型无法生成的完整译文句子。之后,用一个更强的模型在词格上搜索最优的结果。这个过程有可能找到一些“新”的译文,即结果可能是从多个模型的结果中重组而来的。词格上的搜索模型可以基于多模型的融合,也可以使用一个简单的模型,这里需要考虑的是将神经机器翻译模型适应到词格上进行推断\upcite{DBLP:conf/aaai/SuTXJSL17}。其过程基本与原始的模型推断没有区别,只是需要把模型预测的结果附着到词格中的每条边上,再进行推断。
\parinterval\ref{fig:14-11}对比了不同模型集成方法的区别。从系统开发的角度看,假设选择和模型预测融合的复杂度较低,适合快速开发原型系统,而且性能稳定。译文重组需要更多的模块,系统调试的复杂度较高,但是由于看到了更大的搜索空间,因此系统性能提升的潜力较大\footnote{一般来说词格上的Oracle 要比$n$-best译文上的Oracle 的质量高。}
%---------------------------------------------------------------------- %----------------------------------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
\centering \centering
...@@ -691,6 +689,8 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4} ...@@ -691,6 +689,8 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\end{figure} \end{figure}
%---------------------------------------------------------------------- %----------------------------------------------------------------------
\parinterval\ref{fig:14-11}对比了不同模型集成方法的区别。从系统开发的角度看,假设选择和模型预测融合的复杂度较低,适合快速开发原型系统,而且性能稳定。译文重组需要更多的模块,系统调试的复杂度较高,但是由于看到了更大的搜索空间,因此系统性能提升的潜力较大\footnote{一般来说词格上的Oracle 要比$n$-best译文上的Oracle 的质量高。}
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SECTION % NEW SECTION
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
......
\begin{tikzpicture} \begin{tikzpicture}
\tikzstyle{elementnode} = [anchor=center,draw,minimum size=0.6em,inner sep=0.1pt,gray!80] \tikzstyle{elementnode} = [anchor=center,draw=gray,minimum size=0.6em,inner sep=0.1pt]
\begin{scope}[scale=1.0] \begin{scope}[scale=1.0]
\foreach \i / \j in \foreach \i / \j in
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
0/2, 1/2, 2/2, 3/2, 4/2, 5/2, 6/2, 7/2, 0/2, 1/2, 2/2, 3/2, 4/2, 5/2, 6/2, 7/2,
0/1, 1/1, 2/1, 3/1, 4/1, 5/1, 6/1, 7/1, 0/1, 1/1, 2/1, 3/1, 4/1, 5/1, 6/1, 7/1,
0/0, 1/0, 2/0, 3/0, 4/0, 5/0, 6/0, 7/0} 0/0, 1/0, 2/0, 3/0, 4/0, 5/0, 6/0, 7/0}
\node[elementnode,fill=gray!50] (b\i\j) at (0.6em*\i+5.5em,0.6em*\j) {}; \node[elementnode,fill=orange!15] (b\i\j) at (0.6em*\i+5.5em,0.6em*\j) {};
\node [anchor=south west,minimum height=0.5em,minimum width=4.8em,inner sep=0.1pt,very thick,blue!60,draw] (n1) at ([xshift=0em,yshift=0em]a01.south west) {}; \node [anchor=south west,minimum height=0.5em,minimum width=4.8em,inner sep=0.1pt,very thick,blue!60,draw] (n1) at ([xshift=0em,yshift=0em]a01.south west) {};
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
0/2, 1/2, 2/2, 3/2, 4/2, 5/2, 6/2, 7/2, 0/2, 1/2, 2/2, 3/2, 4/2, 5/2, 6/2, 7/2,
0/1, 1/1, 2/1, 3/1, 4/1, 5/1, 6/1, 7/1, 0/1, 1/1, 2/1, 3/1, 4/1, 5/1, 6/1, 7/1,
0/0, 1/0, 2/0, 3/0, 4/0, 5/0, 6/0, 7/0} 0/0, 1/0, 2/0, 3/0, 4/0, 5/0, 6/0, 7/0}
\node[elementnode,fill=gray!50] (b\i\j) at (0.6em*\i+5.5em,0.6em*\j) {}; \node[elementnode,fill=orange!15] (b\i\j) at (0.6em*\i+5.5em,0.6em*\j) {};
\node [anchor=south west,minimum height=0.5em,minimum width=3em,inner sep=0.1pt,very thick,blue!60,draw] (n1) at ([xshift=0em,yshift=0em]a01.south west) {}; \node [anchor=south west,minimum height=0.5em,minimum width=3em,inner sep=0.1pt,very thick,blue!60,draw] (n1) at ([xshift=0em,yshift=0em]a01.south west) {};
...@@ -85,7 +85,7 @@ ...@@ -85,7 +85,7 @@
0/2, 1/2, 2/2, 3/2, 4/2, 5/2, 6/2, 7/2, 0/2, 1/2, 2/2, 3/2, 4/2, 5/2, 6/2, 7/2,
0/1, 1/1, 2/1, 3/1, 4/1, 5/1, 6/1, 7/1, 0/1, 1/1, 2/1, 3/1, 4/1, 5/1, 6/1, 7/1,
0/0, 1/0, 2/0, 3/0, 4/0, 5/0, 6/0, 7/0} 0/0, 1/0, 2/0, 3/0, 4/0, 5/0, 6/0, 7/0}
\node[elementnode,fill=gray!50] (b\i\j) at (0.6em*\i+5.5em,0.6em*\j) {}; \node[elementnode,fill=orange!15] (b\i\j) at (0.6em*\i+5.5em,0.6em*\j) {};
\node [anchor=south west,minimum height=1.8em,minimum width=3em,inner sep=0.1pt,very thick,blue!60,draw] (n1) at ([xshift=0em,yshift=0em]a00.south west) {}; \node [anchor=south west,minimum height=1.8em,minimum width=3em,inner sep=0.1pt,very thick,blue!60,draw] (n1) at ([xshift=0em,yshift=0em]a00.south west) {};
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
\node [anchor=north,rectangle,draw, inner sep=0mm,minimum height=1.2em,minimum width=15em,fill=purple!30,rounded corners=5pt,thick] (n9) at ([xshift=0em,yshift=-1em]n8.south) {$\mathbi{X}\ \quad \mathbi{h}^1\ \quad \mathbi{h}^2\quad \ldots \quad\ \mathbi{h}^l$}; \node [anchor=north,rectangle,draw, inner sep=0mm,minimum height=1.2em,minimum width=15em,fill=purple!30,rounded corners=5pt,thick] (n9) at ([xshift=0em,yshift=-1em]n8.south) {$\mathbi{X}\ \quad \mathbi{h}^1\ \quad \mathbi{h}^2\quad \ldots \quad\ \mathbi{h}^l$};
\node [anchor=north,rectangle,draw, inner sep=0mm,minimum height=1.2em,minimum width=15em,fill=teal!30,rounded corners=5pt,thick] (n10) at ([xshift=0em,yshift=-2em]n9.south) {权重累加\ {\red $\mathbi{g}^l$}}; \node [anchor=north,rectangle,draw, inner sep=0mm,minimum height=1.2em,minimum width=15em,fill=teal!30,rounded corners=5pt,thick] (n10) at ([xshift=0em,yshift=-2em]n9.south) {权重累加\ $\mathbi{g}^l$};
\node [anchor=west,rectangle, inner sep=0mm,minimum height=1.2em, rounded corners=5pt,thick] (n11) at ([xshift=0em,yshift=-4.5em]n1.west) {聚合网络}; \node [anchor=west,rectangle, inner sep=0mm,minimum height=1.2em, rounded corners=5pt,thick] (n11) at ([xshift=0em,yshift=-4.5em]n1.west) {聚合网络};
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
%left %left
\begin{scope} \begin{scope}
\foreach \x/\d in {1/2em, 2/8em} \foreach \x/\d in {1/2em, 2/8em}
\node[unit,fill=yellow!30] at (0,\d) (ln_\x) {层标准化}; \node[unit,fill=orange!30] at (0,\d) (ln_\x) {层标准化};
\foreach \x/\d in {1/4em} \foreach \x/\d in {1/4em}
\node[unit,fill=green!30] at (0,\d) (sa_\x) {8头自注意力:512}; \node[unit,fill=green!30] at (0,\d) (sa_\x) {8头自注意力:512};
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
\node[unit,fill=red!30] at (0,\d) (conv_\x) {卷积$1 \times 1$:2048}; \node[unit,fill=red!30] at (0,\d) (conv_\x) {卷积$1 \times 1$:2048};
\foreach \x/\d in {1/12em} \foreach \x/\d in {1/12em}
\node[unit,fill=blue!30] at (0,\d) (relu_\x) {RELU}; \node[unit,fill=blue!30] at (0,\d) (relu_\x) {ReLU};
\draw[->,thick] ([yshift=-1.4em]ln_1.-90) -- ([yshift=-0.1em]ln_1.-90); \draw[->,thick] ([yshift=-1.4em]ln_1.-90) -- ([yshift=-0.1em]ln_1.-90);
\draw[->,thick] ([yshift=0.1em]ln_1.90) -- ([yshift=-0.1em]sa_1.-90); \draw[->,thick] ([yshift=0.1em]ln_1.90) -- ([yshift=-0.1em]sa_1.-90);
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
\foreach \x/\d in {1/2em, 2/8em, 3/16em} \foreach \x/\d in {1/2em, 2/8em, 3/16em}
\node[unit,fill=yellow!30] at (0,\d) (ln_\x) {层标准化}; \node[unit,fill=orange!30] at (0,\d) (ln_\x) {层标准化};
\foreach \x/\d in {1/6em, 2/14em, 3/20em} \foreach \x/\d in {1/6em, 2/14em, 3/20em}
\node[draw,circle,minimum size=1em,inner sep=1pt] at (0,\d) (add_\x) {\scriptsize\bfnew{+}}; \node[draw,circle,minimum size=1em,inner sep=1pt] at (0,\d) (add_\x) {\scriptsize\bfnew{+}};
...@@ -52,8 +52,8 @@ ...@@ -52,8 +52,8 @@
\node[unit,fill=red!30] at (0,4em) (glu_1) {门控线性单元:512}; \node[unit,fill=red!30] at (0,4em) (glu_1) {门控线性单元:512};
\node[unit,fill=red!30] at (-3em,10em) (conv_1) {卷积$1 \times 1$:2048}; \node[unit,fill=red!30] at (-3em,10em) (conv_1) {卷积$1 \times 1$:2048};
\node[unit,fill=cyan!30] at (3em,10em) (conv_2) {卷积$3 \times 1$:256}; \node[unit,fill=cyan!30] at (3em,10em) (conv_2) {卷积$3 \times 1$:256};
\node[unit,fill=blue!30] at (-3em,12em) (relu_1) {RELU}; \node[unit,fill=blue!30] at (-3em,12em) (relu_1) {ReLU};
\node[unit,fill=blue!30] at (3em,12em) (relu_2) {RELU}; \node[unit,fill=blue!30] at (3em,12em) (relu_2) {ReLU};
\node[unit,fill=cyan!30] at (0em,18em) (conv_3) {Sep卷积$9 \times 1$:256}; \node[unit,fill=cyan!30] at (0em,18em) (conv_3) {Sep卷积$9 \times 1$:256};
...@@ -83,7 +83,7 @@ ...@@ -83,7 +83,7 @@
\node[minimum size=0.8em,inner sep=0pt,rounded corners=1pt,draw,fill=blue!30] (act) at (8em, 20em){}; \node[minimum size=0.8em,inner sep=0pt,rounded corners=1pt,draw,fill=blue!30] (act) at (8em, 20em){};
\node[anchor=west,font=\footnotesize] at ([xshift=0.1em]act.east){激活函数}; \node[anchor=west,font=\footnotesize] at ([xshift=0.1em]act.east){激活函数};
\node[anchor=north,minimum size=0.8em,inner sep=0pt,rounded corners=1pt,draw,fill=yellow!30] (nor) at ([yshift=-0.6em]act.south){}; \node[anchor=north,minimum size=0.8em,inner sep=0pt,rounded corners=1pt,draw,fill=orange!30] (nor) at ([yshift=-0.6em]act.south){};
\node[anchor=west,font=\footnotesize] at ([xshift=0.1em]nor.east){层标准化}; \node[anchor=west,font=\footnotesize] at ([xshift=0.1em]nor.east){层标准化};
\node[anchor=north,minimum size=0.8em,inner sep=0pt,rounded corners=1pt,draw,fill=cyan!30] (wc) at ([yshift=-0.6em]nor.south){}; \node[anchor=north,minimum size=0.8em,inner sep=0pt,rounded corners=1pt,draw,fill=cyan!30] (wc) at ([yshift=-0.6em]nor.south){};
\node[anchor=west,font=\footnotesize] at ([xshift=0.1em]wc.east){宽卷积}; \node[anchor=west,font=\footnotesize] at ([xshift=0.1em]wc.east){宽卷积};
......
\begin{tikzpicture} \begin{tikzpicture}
\tikzstyle{opnode}=[rectangle,inner sep=0mm,minimum height=2em,minimum width=4em,rounded corners=5pt,fill=teal!30,draw,thick,drop shadow] \tikzstyle{opnode}=[rectangle,inner sep=0mm,minimum height=2em,minimum width=4em,rounded corners=5pt,fill=orange!30,draw,thick,drop shadow]
\tikzstyle{cnode}=[circle,draw,minimum size=1.2em] \tikzstyle{cnode}=[circle,draw,minimum size=1.2em]
\tikzstyle{mnode}=[rectangle,inner sep=0mm,minimum height=5em,minimum width=11em,rounded corners=5pt,fill=yellow!30,draw,thick,drop shadow] \tikzstyle{mnode}=[rectangle,inner sep=0mm,minimum height=5em,minimum width=11em,rounded corners=5pt,fill=yellow!30,draw,thick,drop shadow]
\tikzstyle{wnode}=[inner sep=0mm,minimum height=1.5em] \tikzstyle{wnode}=[inner sep=0mm,minimum height=1.5em]
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
\node[anchor=south,cnode,fill=white] (cl1) at ([xshift=-4em,yshift=1.5em]m1.south){}; \node[anchor=south,cnode,fill=white] (cl1) at ([xshift=-4em,yshift=1.5em]m1.south){};
\node[anchor=north,cnode,fill=white] (cl2) at ([xshift=0em,yshift=-1em]m1.north){}; \node[anchor=north,cnode,fill=white] (cl2) at ([xshift=0em,yshift=-1em]m1.north){};
\node[anchor=south west,wnode,align=left,font=\tiny] (wl7) at ([xshift=0.5em,yshift=0em]cl1.east){使用{\color{ugreen}\bfnew{特征}}{\color{blue}\bfnew{数据}}\\中信息进行提取}; \node[anchor=south west,wnode,align=right,font=\tiny] (wl7) at ([xshift=0.5em,yshift=-1em]cl1.east){使用{\color{ugreen}\bfnew{特征}}{\color{blue}\bfnew{数据}}\\中的信息进行\\提取};
\node[anchor=west,wnode,align=right,font=\tiny] (wl8) at ([xshift=0.5em,yshift=0em]cl2.east){使用提取的信息对\\{\color{red!50}\bfnew{模型}}中的参数\\进行训练}; \node[anchor=west,wnode,align=right,font=\tiny] (wl8) at ([xshift=0.5em,yshift=0em]cl2.east){使用提取的信息对\\{\color{red!50}\bfnew{模型}}中的参数\\进行训练};
\draw [-,thick,dashed] ([xshift=0em,yshift=0em]ml1.west) -- ([xshift=0em,yshift=0em]ml1.east); \draw [-,thick,dashed] ([xshift=0em,yshift=0em]ml1.west) -- ([xshift=0em,yshift=0em]ml1.east);
...@@ -65,7 +65,7 @@ ...@@ -65,7 +65,7 @@
\node[anchor=south,cnode,fill=white] (cc1) at ([xshift=-4em,yshift=1.5em]m2.south){}; \node[anchor=south,cnode,fill=white] (cc1) at ([xshift=-4em,yshift=1.5em]m2.south){};
\node[anchor=north,cnode,fill=white] (cc2) at ([xshift=0em,yshift=-1em]m2.north){}; \node[anchor=north,cnode,fill=white] (cc2) at ([xshift=0em,yshift=-1em]m2.north){};
\node[anchor=south west,wnode,align=left,font=\tiny] (wl7) at ([xshift=0.5em,yshift=0em]cc1.east){使用{\color{red!50} \bfnew{模型}}{\color{blue} \bfnew{数据}}\\中信息进行提取}; \node[anchor=south west,wnode,align=right,font=\tiny] (wl7) at ([xshift=0.5em,yshift=-0.5em]cc1.east){使用{\color{red!50} \bfnew{模型}}{\color{blue} \bfnew{数据}}\\中的信息进行\\提取};
\node[anchor=west,wnode,align=right,font=\tiny] (wl8) at ([xshift=0.5em,yshift=0em]cc2.east){使用提取的信息对\\{\color{red!50} \bfnew{模型}}中的参数\\进行训练}; \node[anchor=west,wnode,align=right,font=\tiny] (wl8) at ([xshift=0.5em,yshift=0em]cc2.east){使用提取的信息对\\{\color{red!50} \bfnew{模型}}中的参数\\进行训练};
\draw [-,thick,dashed] ([xshift=0em,yshift=0em]mc1.west) -- ([xshift=0em,yshift=0em]mc1.east); \draw [-,thick,dashed] ([xshift=0em,yshift=0em]mc1.west) -- ([xshift=0em,yshift=0em]mc1.east);
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
\addplot[blue,line width=1.25pt] coordinates {(2.9706,2) (3.1706,1.79) (3.3706,1.63) (3.4656,1.572) (3.6706,1.4602) (3.7136,1.44)}; \addplot[blue,line width=1.25pt] coordinates {(2.9706,2) (3.1706,1.79) (3.3706,1.63) (3.4656,1.572) (3.6706,1.4602) (3.7136,1.44)};
\addplot[blue,dashed,line width=1.25pt] coordinates {(3.7136,1.44) (3.7136,2)}; \addplot[blue,dashed,line width=1.25pt] coordinates {(3.7136,1.44) (3.7136,2)};
\addplot[blue,line width=1.25pt] coordinates {(3.7136,2) (3.9136,1.79) (4.1136,1.63) (4.2086,1.572) (4.4136,1.4602) (4.4566,1.44) (4.7000,1.3574) (5.0000,1.2531)}; \addplot[blue,line width=1.25pt] coordinates {(3.7136,2) (3.9136,1.79) (4.1136,1.63) (4.2086,1.572) (4.4136,1.4602) (4.4566,1.44) (4.7000,1.3574) (5.0000,1.2531)};
\addlegendentry{\scriptsize 调整后的学习率} \addlegendentry{\scriptsize 重置后的学习率}
\end{axis} \end{axis}
} }
......
...@@ -6,8 +6,8 @@ ...@@ -6,8 +6,8 @@
\tikzstyle{every node}=[scale=0.36] \tikzstyle{every node}=[scale=0.36]
\node[draw,very thick,rounded corners=3pt,drop shadow,fill=red!30,minimum width=40em,minimum height=25em] (rec3) at (2.25,0){}; \node[draw,very thick,rounded corners=3pt,drop shadow,fill=red!30,minimum width=40em,minimum height=25em] (rec3) at (2.25,0){};
\node[draw,very thick,rounded corners=3pt,drop shadow,fill=green!30,minimum width=22em,minimum height=25em] (rec2) at (-12.4,0){}; \node[draw,very thick,rounded corners=3pt,drop shadow,fill=yellow!30,minimum width=22em,minimum height=25em] (rec2) at (-12.4,0){};
\node[draw,very thick,rounded corners=3pt,drop shadow,fill=yellow!30,minimum width=24em,minimum height=25em] (rec1) at (-24,0){}; \node[draw,very thick,rounded corners=3pt,drop shadow,fill=orange!30,minimum width=24em,minimum height=25em] (rec1) at (-24,0){};
%left %left
\node[] (label1) at (-26.4,4){\Huge\bfnew{结构空间}}; \node[] (label1) at (-26.4,4){\Huge\bfnew{结构空间}};
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
\begin{tikzpicture} \begin{tikzpicture}
\begin{scope} \begin{scope}
\tikzstyle{enode}=[rectangle,inner sep=0mm,minimum height=5em,minimum width=5em,rounded corners=7pt,fill=green!30,draw,thick] \tikzstyle{enode}=[rectangle,inner sep=0mm,minimum height=5em,minimum width=5em,rounded corners=7pt,fill=blue!30,draw,thick]
\tikzstyle{dnode}=[rectangle,inner sep=0mm,minimum height=2em,minimum width=6.5em,rounded corners=5pt,fill=red!30,draw,thick] \tikzstyle{dnode}=[rectangle,inner sep=0mm,minimum height=2em,minimum width=6.5em,rounded corners=5pt,fill=red!30,draw,thick]
\tikzstyle{wnode}=[inner sep=0mm,minimum height=2em,minimum width=4em] \tikzstyle{wnode}=[inner sep=0mm,minimum height=2em,minimum width=4em]
......
\begin{tikzpicture}
\tikzstyle{node}=[minimum height=2.5em,minimum width=8em,draw,rounded corners=2pt,thick,drop shadow]
\tikzstyle{labelnode}=[minimum height=1.8em]
\tikzstyle{word}=[minimum height=1.8em,font=\scriptsize]
\tikzfading[name=fadeouts, inner color=transparent!60,outer color=transparent!100]
\tikzstyle{wordnodes}=[inner sep=0mm,font=\footnotesize,text=white]
\tikzstyle{cnodes}=[path fading=fadeouts,minimum size=6em,fill=orange]
\tikzfading[name=fadeoutn, inner color=transparent!30,outer color=transparent!100]
\tikzstyle{wordnoden}=[inner sep=0mm,text=white]
\tikzstyle{cnoden}=[path fading=fadeoutn,minimum size=9em,fill=orange]
\tikzfading[name=fadeoutl, inner color=transparent!0,outer color=transparent!100]
\tikzstyle{wordnodel}=[inner sep=0mm,font=\Large,text=white]
\tikzstyle{cnodel}=[path fading=fadeoutl,minimum size=12em,fill=orange]
\tikzstyle{attn}=[]
\tikzstyle{rnn}=[minimum size=7em]
\tikzstyle{cnn}=[minimum size=5em]
\node[anchor=north west] (label) at (0,0){\small\bfnew{结构空间}};
\node[anchor=north west,wordnodes] (w11) at ([xshift=-0em,yshift=-2.5em]label.south){Reformer};
\node[anchor=north west,wordnodel] (w12) at ([xshift=0.2em,yshift=-1em]w11.south east){Transformer-XL};
\node[anchor=north,wordnodel] (w13) at ([xshift=-1.5em,yshift=-0.5em]w12.south){Transformer-DLCL};
\node[anchor=north,wordnodes] (w14) at ([xshift=-1em,yshift=-0.5em]w13.south){Transformer};
\node[anchor=north west,wordnodel] (w15) at ([xshift=2em,yshift=-0.5em]w14.south east){BERT};
\node[anchor=north,wordnodes] (w16) at ([xshift=-2em,yshift=-1em]w14.south){Transformer-ANN};
\node[anchor=north west,wordnodes] (w17) at ([xshift=-0em,yshift=-1em]w16.south east){Transformer-SAN};
\node[anchor=north,wordnoden] (w18) at ([xshift=-0em,yshift=-1.5em]w16.south){ALBERT};
\node[anchor=north west,wordnodes] (w19) at ([xshift=-0em,yshift=-0.5em]w18.south east){universal Transformer};
\node[anchor=north west,word] (we1) at ([xshift=-0em,yshift=0.3em]w11.north west){};
\node[anchor=south east,word] (we2) at ([xshift=-0em,yshift=-0.3em]w19.south east){};
\begin{pgfonlayer}{background}
\node[anchor=center,cnodes] (b11) at ([xshift=-0em,yshift=-0em]w11.center){};
\node[anchor=center,cnodel] (b12) at ([xshift=-0em,yshift=-0em]w12.center){};
\node[anchor=center,cnodel] (b13) at ([xshift=-0em,yshift=-0em]w13.center){};
\node[anchor=center,cnodes] (b14) at ([xshift=-0em,yshift=-0em]w14.center){};
\node[anchor=center,cnodel] (b15) at ([xshift=-2em,yshift=-0em]w15.center){};
\node[anchor=center,cnodes] (b16) at ([xshift=-0em,yshift=-0em]w16.center){};
\node[anchor=center,cnodes] (b17) at ([xshift=-0em,yshift=-0em]w17.center){};
\node[anchor=center,cnoden] (b18) at ([xshift=-0em,yshift=-0em]w18.center){};
\node[anchor=center,cnodes] (b19) at ([xshift=-0em,yshift=-0em]w19.center){};
\node [rectangle,inner sep=1em,draw=black,dashed,thick,rounded corners=8pt] [fit = (w11) (w15) (w18) (w19) (we1) (we2)] (box1) {};
\node[anchor=center,cnodes] (bb1) at ([xshift=1em,yshift=-0em]w18.east){};
\node[anchor=center,cnodes] (bb2) at ([xshift=-0.5em,yshift=-0em]w13.west){};
\node[anchor=center,cnodes] (bb3) at ([xshift=-0.5em,yshift=0.5em]w18.west){};
\end{pgfonlayer}
\node[anchor=south,word] (l1) at ([xshift=-0em,yshift=-0.5em]box1.north){基于注意力的结构};
\node[anchor=south west,wordnoden] (w21) at ([xshift=6.5em,yshift=1em]w12.north east){SRU};
\node[anchor=north west,wordnodel] (w22) at ([xshift=0.2em,yshift=0.5em]w21.south east){GRU};
\node[anchor=north west,wordnoden] (w23) at ([xshift=0em,yshift=0em]w22.south east){RNN};
\node[anchor=north,wordnoden] (w24) at ([xshift=0em,yshift=-1.5em]w22.south){LSTM};
\node[anchor=north,wordnodel] (w25) at ([xshift=0em,yshift=-0.5em]w24.south){Bi-LSTM};
\begin{pgfonlayer}{background}
\node[anchor=center,cnoden,rnn] (b21) at ([xshift=-0em,yshift=-0em]w21.center){};
\node[anchor=center,cnodel,rnn] (b22) at ([xshift=-0em,yshift=-0em]w22.center){};
\node[anchor=center,cnoden,rnn] (b23) at ([xshift=-0em,yshift=-0em]w23.center){};
\node[anchor=center,cnoden,rnn] (b24) at ([xshift=-0em,yshift=-0em]w24.center){};
\node[anchor=center,cnodel,rnn] (b25) at ([xshift=-0em,yshift=-0em]w25.center){};
\node [rectangle,inner sep=1em,draw=black,dashed,thick,rounded corners=8pt] [fit = (w21) (w25) (w23)] (box2) {};
\node[anchor=center,cnodes] (bb4) at ([xshift=-0.5em,yshift=-0em]w24.west){};
\node[anchor=center,cnodes] (bb5) at ([xshift=0.5em,yshift=-0em]w24.west){};
\node[anchor=south east,cnodel,minimum size=4em] (bb6) at ([xshift=0em,yshift=1em]w21.north west){};
\node[anchor=south west,cnodel,minimum size=4em] (bb7) at ([xshift=-0.5em,yshift=0.5em]w23.north east){};
\node[anchor=west,cnodel,minimum size=4em] (bb8) at ([xshift=-0em,yshift=0em]w23.east){};
\node[anchor=south,cnodel,minimum size=4em] (bb9) at ([xshift=0.2em,yshift=0em]bb8.north){};
\end{pgfonlayer}
\node[anchor=south,word] (l2) at ([xshift=-0em,yshift=-0.5em]box2.north){基于循环单元的结构};
\node[anchor= west,wordnoden] (w31) at ([xshift=4em,yshift=-0.2em]w17.east){GoogleNet};
\node[anchor=north,wordnodes] (w32) at ([xshift=2em,yshift=-0.2em]w31.south){ResNet};
\node[anchor=north,wordnoden] (w33) at ([xshift=0em,yshift=-1.5em]w31.south){LeNet};
\node[anchor=east,wordnoden] (w34) at ([xshift=2.5em,yshift=0.4em]w32.east){CNN};
\node[anchor=south west,wordnoden] (w35) at ([xshift=0.5em,yshift=0.3em]w34.north east){AlexNet};
\node[anchor=north,wordnodel] (w36) at ([xshift=-1em,yshift=-2em]w35.south){VGG-Net};
\begin{pgfonlayer}{background}
\node[anchor=center,cnodel,cnn] (b31) at ([xshift=-0.5em,yshift=-0em]w31.center){};
\node[anchor=center,cnoden,cnn] (b32) at ([xshift=-0em,yshift=-0em]w32.center){};
\node[anchor=center,cnodel,cnn] (b33) at ([xshift=-0em,yshift=-0em]w33.center){};
\node[anchor=center,cnodel,cnn] (b34) at ([xshift=-0em,yshift=-0em]w34.center){};
\node[anchor=center,cnoden,cnn] (b35) at ([xshift=-0em,yshift=-0em]w35.center){};
\node[anchor=center,cnodel,cnn] (b36) at ([xshift=-0em,yshift=-0em]w36.center){};
\node [rectangle,inner sep=0.5em,draw=black,dashed,thick,rounded corners=8pt] [fit = (w31) (w33) (w35) (w36)] (box3) {};
\node[anchor=center,cnodes] (bb10) at ([xshift=1em,yshift=-0em]w31.west){};
\node[anchor=center,cnodes] (bb11) at ([xshift=0.5em,yshift=-0em]w34.west){};
\node[anchor=center,cnodes] (bb12) at ([xshift=0em,yshift=1em]w34.north){};
\end{pgfonlayer}
\node[anchor=south,word] (l3) at ([xshift=-0em,yshift=-0.5em]box3.north){基于卷积单元的结构};
\node [rectangle,inner sep=1em,draw=black,very thick,rounded corners=8pt] [fit = (label) (box1) (box2) (box3)] (box4) {};
\node[anchor=south east,word,text=ublue] (l4) at ([xshift=-0em,yshift=0em]box4.north east){颜色越深表示模型对当前任务的建模能力越强};
\end{tikzpicture}
\ No newline at end of file
...@@ -4,9 +4,9 @@ ...@@ -4,9 +4,9 @@
\begin{tikzpicture} \begin{tikzpicture}
\tikzstyle{node}=[minimum height=6em,inner sep=4pt,align=left,draw,font=\footnotesize,rounded corners=4pt,thick,drop shadow] \tikzstyle{node}=[minimum height=6em,inner sep=4pt,align=left,draw,font=\footnotesize,rounded corners=4pt,thick,drop shadow]
\node[node,fill=red!30] (n1) at (0,0){\scriptsize\bfnew{超网络} \\ [1ex] 模型结构参数 \\[0.4ex] 网络参数}; \node[node,fill=orange!30] (n1) at (0,0){\scriptsize\bfnew{超网络} \\ [1ex] 模型结构参数 \\[0.4ex] 网络参数};
\node[anchor=west,node,fill=yellow!30] (n2) at ([xshift=4em]n1.east){\scriptsize\bfnew{优化后的超网络} \\ [1ex]模型{\color{red}结构参数}(已优化) \\ [0.4ex]网络参数(已优化)}; \node[anchor=west,node,fill=yellow!30] (n2) at ([xshift=4em]n1.east){\scriptsize\bfnew{优化后的超网络} \\ [1ex]模型{\color{red}结构参数}(已优化) \\ [0.4ex]网络参数(已优化)};
\node[anchor=west,node,fill=green!30] (n3) at ([xshift=6em]n2.east){\scriptsize\bfnew{找到的模型结构}}; \node[anchor=west,node,fill=red!30] (n3) at ([xshift=6em]n2.east){\scriptsize\bfnew{找到的模型结构}};
\draw[-latex,thick] (n1.0) -- node[above,align=center,font=\scriptsize]{优化后的\\超网络}(n2.180); \draw[-latex,thick] (n1.0) -- node[above,align=center,font=\scriptsize]{优化后的\\超网络}(n2.180);
\draw[-latex,thick] (n2.0) -- node[above,align=center,font=\scriptsize]{根据结构参数\\离散化结构}(n3.180); \draw[-latex,thick] (n2.0) -- node[above,align=center,font=\scriptsize]{根据结构参数\\离散化结构}(n3.180);
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
\tikzstyle{node}=[minimum height=2.5em,minimum width=8em,draw,rounded corners=2pt,thick,drop shadow] \tikzstyle{node}=[minimum height=2.5em,minimum width=8em,draw,rounded corners=2pt,thick,drop shadow]
\node[node,fill=red!30] (n1) at (0,0){\small\bfnew{环境}}; \node[node,fill=red!30] (n1) at (0,0){\small\bfnew{环境}};
\node[anchor=south,node,fill=green!30] (n2) at ([yshift=5em]n1.north){\small\bfnew{智能体}}; \node[anchor=south,node,fill=blue!30] (n2) at ([yshift=5em]n1.north){\small\bfnew{智能体}};
\node[anchor=north,font=\footnotesize] at ([yshift=-0.2em]n1.south){(结构所应用于的任务)}; \node[anchor=north,font=\footnotesize] at ([yshift=-0.2em]n1.south){(结构所应用于的任务)};
\node[anchor=south,font=\footnotesize] at ([yshift=0.2em]n2.north){(结构生成器)}; \node[anchor=south,font=\footnotesize] at ([yshift=0.2em]n2.north){(结构生成器)};
......
...@@ -48,6 +48,9 @@ ...@@ -48,6 +48,9 @@
\node [anchor=north,rotate=90] (n2) at (5.4cm,1cm) {\scriptsize 训练集\ PPL}; \node [anchor=north,rotate=90] (n2) at (5.4cm,1cm) {\scriptsize 训练集\ PPL};
\node [anchor=north,rotate=90] (n3) at (4.2cm,1cm) {\scriptsize 校验集\ PPL}; \node [anchor=north,rotate=90] (n3) at (4.2cm,1cm) {\scriptsize 校验集\ PPL};
\node [anchor=north,rotate=90] (n4) at (10.7cm,1cm) {\scriptsize 校验集\ PPL}; \node [anchor=north,rotate=90] (n4) at (10.7cm,1cm) {\scriptsize 校验集\ PPL};
\node [anchor=north] (label1) at (1.6cm,-1.2cm) {\small (a)浅层模型};
\node [anchor=north] (label2) at (8.4cm,-1.2cm) {\small (b)深层模型};
\end{tikzpicture} \end{tikzpicture}
%--------------------------------------------------------------------- %---------------------------------------------------------------------
\ No newline at end of file
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
\parinterval 模型结构的设计是机器翻译系统研发中最重要的工作之一。在神经机器翻译时代,虽然系统研发人员脱离了繁琐的特征工程,但是神经网络结构的设计仍然耗时耗力。无论是像循环神经网络、Transformer 这样的整体架构的设计,还是注意力机制等局部结构的设计,都对机器翻译性能有着很大的影响。 \parinterval 模型结构的设计是机器翻译系统研发中最重要的工作之一。在神经机器翻译时代,虽然系统研发人员脱离了繁琐的特征工程,但是神经网络结构的设计仍然耗时耗力。无论是像循环神经网络、Transformer 这样的整体架构的设计,还是注意力机制等局部结构的设计,都对机器翻译性能有着很大的影响。
\parinterval 本章主要讨论神经机器翻译中结构优化的若干研究方向,包括:注意力机制的改进、网络连接优化及深层网络建模、基于树结构的模型、神经网络结构自动搜索等。这些内容可以指导神经机器翻译系统的深入优化,其中涉及的一些模型和方法也可以应用于其他自然语言处理任务。 \parinterval 本章主要讨论神经机器翻译中结构优化的若干研究方向,包括:注意力机制的改进、神经网络连接优化及深层模型、基于句法的神经机器翻译模型、基于结构搜索的翻译模型优化。这些内容可以指导神经机器翻译系统的深入优化,其中涉及的一些模型和方法也可以应用于其他自然语言处理任务。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SECTION % NEW SECTION
...@@ -85,7 +85,7 @@ ...@@ -85,7 +85,7 @@
\noindent 进一步,$\mathbi{e}_{ij}$被定义为: \noindent 进一步,$\mathbi{e}_{ij}$被定义为:
\begin{eqnarray} \begin{eqnarray}
\mathbi{e}_{ij} &=& \frac{(\mathbi{x}_i \mathbi{W}_Q){(\mathbi{x}_j \mathbi{W}_K)}^{T}}{\sqrt{d_k}} \mathbi{e}_{ij} &=& \frac{(\mathbi{x}_i \mathbi{W}_Q){(\mathbi{x}_j \mathbi{W}_K)}^{\textrm{T}}}{\sqrt{d_k}}
\label{eq:15-6} \label{eq:15-6}
\end{eqnarray} \end{eqnarray}
...@@ -112,49 +112,51 @@ ...@@ -112,49 +112,51 @@
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
\centering \centering
\vspace{-1em}
\input{./Chapter15/Figures/figure-relative-position-weight} \input{./Chapter15/Figures/figure-relative-position-weight}
\caption{相对位置权重$\mathbi{a}_{ij}$\upcite{DBLP:conf/emnlp/HuangLXX20}} \caption{相对位置权重$\mathbi{a}_{ij}$\upcite{DBLP:conf/emnlp/HuangLXX20}}
\setlength{\belowcaptionskip}{-2em}
\label{fig:15-2} \label{fig:15-2}
\end{figure} \end{figure}
%------------------------------------------- %-------------------------------------------
\noindent 相比于公式\eqref{eq:15-4},公式\eqref{eq:15-10}在计算$\mathbi{z}_i$时引入了额外的向量$\mathbi{a}_{ij}^V$,用它来表示位置$i$与位置$j$之间的相对位置信息。同时在计算注意力权重时对$\mathbi{K}$进行修改,同样引入了$\mathbi{a}_{ij}^K$向量表示位置$i$与位置$j$之间的相对位置。在公式\eqref{eq:15-6}的基础上,注意力权重的计算方式调整为: \noindent 相比于公式\eqref{eq:15-4},公式\eqref{eq:15-10}在计算$\mathbi{z}_i$时引入了额外的向量$\mathbi{a}_{ij}^V$,用它来表示位置$i$与位置$j$之间的相对位置信息。同时在计算注意力权重时对$\mathbi{K}$进行修改,同样引入了$\mathbi{a}_{ij}^K$向量表示位置$i$与位置$j$之间的相对位置。在公式\eqref{eq:15-6}的基础上,注意力权重的计算方式调整为:
\begin{eqnarray} \begin{eqnarray}
\mathbi{e}_{ij} &=& \frac{\mathbi{x}_i \mathbi{W}_Q{(\mathbi{x}_j \mathbi{W}_K + \mathbi{a}_{ij}^K )}^{T}}{\sqrt{d_k}} \nonumber \\ \mathbi{e}_{ij} &=& \frac{\mathbi{x}_i \mathbi{W}_Q{(\mathbi{x}_j \mathbi{W}_K + \mathbi{a}_{ij}^K )}^{\textrm{T}}}{\sqrt{d_k}} \nonumber \\
&=& \frac{\mathbi{x}_i \mathbi{W}_Q{(\mathbi{x}_j \mathbi{W}_K)}^{T} + \mathbi{x}_i \mathbi{W}_Q{(\mathbi{a}_{ij}^K )}^{T}}{\sqrt{d_k}} &=& \frac{\mathbi{x}_i \mathbi{W}_Q{(\mathbi{x}_j \mathbi{W}_K)}^{\textrm{T}} + \mathbi{x}_i \mathbi{W}_Q{(\mathbi{a}_{ij}^K )}^{T}}{\sqrt{d_k}}
\label{eq:15-11} \label{eq:15-11}
\end{eqnarray} \end{eqnarray}
\noindent 可以注意到,公式\eqref{eq:15-10}和公式\eqref{eq:15-11}将位置编码信息直接暴露给每一层注意力机制的计算,而不是像标准Transformer中只将其作为整个模型的输入 \noindent 可以注意到,与标准Transformer只将位置编码信息作为模型的输入不同,公式\eqref{eq:15-10}和公式\eqref{eq:15-11}将位置编码信息直接融入到了每一层注意力机制的计算中
\vspace{0.5em} \vspace{0.5em}
\item Transformer-XL\upcite{Dai2019TransformerXLAL}。在Transformer中,模型的输入由词嵌入表示与绝对位置编码组成,例如,对于输入层有,$\mathbi{x}_i = \mathbi{E}_{x_i} + \mathbi{U}_i$$\mathbi{x}_j=\mathbi{E}_{x_j} + \mathbi{U}_j$,其中$\mathbi{E}_{x_i} $$\mathbi{E}_{x_j} $表示词嵌入,$\mathbi{U}_i$$\mathbi{U}_j$表示绝对位置编码(正余弦函数)。将$\mathbi{x}_i$$\mathbi{x}_j$代入公式\eqref{eq:15-6}中可以得到: \item {\small\bfnew{Transformer-XL}}\upcite{Dai2019TransformerXLAL}。在Transformer中,模型的输入由词嵌入表示与绝对位置编码组成,例如,对于输入层有,$\mathbi{x}_i = \mathbi{E}_{x_i} + \mathbi{U}_i$$\mathbi{x}_j=\mathbi{E}_{x_j} + \mathbi{U}_j$,其中$\mathbi{E}_{x_i} $$\mathbi{E}_{x_j} $表示词嵌入,$\mathbi{U}_i$$\mathbi{U}_j$表示绝对位置编码(正余弦函数)。将$\mathbi{x}_i$$\mathbi{x}_j$代入公式\eqref{eq:15-6}中可以得到:
\begin{eqnarray} \begin{eqnarray}
\mathbi{e}_{ij} &=& \frac{(\mathbi{E}_{x_i} + \mathbi{U}_i)\mathbi{W}_Q{((\mathbi{E}_{x_j} + \mathbi{U}_j)\mathbi{W}_K)}^{T}}{\sqrt{d_k}} \mathbi{e}_{ij} &=& \frac{(\mathbi{E}_{x_i} + \mathbi{U}_i)\mathbi{W}_Q{((\mathbi{E}_{x_j} + \mathbi{U}_j)\mathbi{W}_K)}^{\textrm{T}}}{\sqrt{d_k}}
\label{eq:15-12} \label{eq:15-12}
\end{eqnarray} \end{eqnarray}
\noindent 这里使用$A_{ij}^{\rm abs}$表示公式\eqref{eq:15-12}中等式右侧的分子部分,并对其进行展开: \noindent 这里使用$A_{ij}^{\rm abs}$表示公式\eqref{eq:15-12}中等式右侧的分子部分,并对其进行展开:
\begin{eqnarray} \begin{eqnarray}
A_{ij}^{\rm abs} &=& \underbrace{\mathbi{E}_{x_i}\mathbi{W}_Q\mathbi{W}_{K}^{T}\mathbi{E}_{x_j}^{T}}_{\textrm{(a)}} + \underbrace{\mathbi{E}_{x_i}\mathbi{W}_Q\mathbi{W}_{K}^{T}\mathbi{U}_{j}^{T}}_{\textrm{(b)}} + \nonumber \\ A_{ij}^{\rm abs} &=& \underbrace{\mathbi{E}_{x_i}\mathbi{W}_Q\mathbi{W}_{K}^{\textrm{T}}\mathbi{E}_{x_j}^{\textrm{T}}}_{\textrm{(a)}} + \underbrace{\mathbi{E}_{x_i}\mathbi{W}_Q\mathbi{W}_{K}^{\textrm{T}}\mathbi{U}_{j}^{\textrm{T}}}_{\textrm{(b)}} + \nonumber \\
& & \underbrace{\mathbi{U}_i\mathbi{W}_Q\mathbi{W}_{K}^{T}\mathbi{E}_{x_j}^{T}}_{\textrm{(c)}} + \underbrace{\mathbi{U}_i\mathbi{W}_Q\mathbi{W}_{K}^{T}\mathbi{U}_{j}^{T}}_{\textrm{(d)}} & & \underbrace{\mathbi{U}_i\mathbi{W}_Q\mathbi{W}_{K}^{\textrm{T}}\mathbi{E}_{x_j}^{\textrm{T}}}_{\textrm{(c)}} + \underbrace{\mathbi{U}_i\mathbi{W}_Q\mathbi{W}_{K}^{\textrm{T}}\mathbi{U}_{j}^{\textrm{T}}}_{\textrm{(d)}}
\label{eq:15-13} \label{eq:15-13}
\end{eqnarray} \end{eqnarray}
\noindent 其中,${\rm abs}$代表使用绝对位置编码计算得到的$A_{ij}$$\mathbi{W}_Q$$\mathbi{W}_K$表示线性变换矩阵。为了引入相对位置信息,可以将公式\eqref{eq:15-13}修改为如下形式: \noindent 其中,${\rm abs}$代表使用绝对位置编码计算得到的$A_{ij}$$\mathbi{W}_Q$$\mathbi{W}_K$表示线性变换矩阵。为了引入相对位置信息,可以将公式\eqref{eq:15-13}修改为如下形式:
\begin{eqnarray} \begin{eqnarray}
A_{ij}^{\rm rel} &=& \underbrace{\mathbi{E}_{x_i}\mathbi{W}_Q\mathbi{W}_{K}^{T}\mathbi{E}_{x_j}^{T}}_{\textrm{(a)}} + \underbrace{\mathbi{E}_{x_i}\mathbi{W}_Q\mathbi{W}_{K}^{T}\mathbi{R}_{i-j}^{T}}_{\textrm{(b)}} + \nonumber \\ A_{ij}^{\rm rel} &=& \underbrace{\mathbi{E}_{x_i}\mathbi{W}_Q\mathbi{W}_{K}^{\textrm{T}}\mathbi{E}_{x_j}^{\textrm{T}}}_{\textrm{(a)}} + \underbrace{\mathbi{E}_{x_i}\mathbi{W}_Q\mathbi{W}_{K}^{\textrm{T}}\mathbi{R}_{i-j}^{\textrm{T}}}_{\textrm{(b)}} + \nonumber \\
& & \underbrace{\mathbi{u}\mathbi{W}_{K,E}^{T}\mathbi{E}_{x_j}^{T}}_{\textrm{(c)}} + \underbrace{\mathbi{v}\mathbi{W}_{K,R}^{T}\mathbi{R}_{i-j}^{T}}_{\textrm{(d)}} & & \underbrace{\mathbi{u}\mathbi{W}_{K,E}^{\textrm{T}}\mathbi{E}_{x_j}^{\textrm{T}}}_{\textrm{(c)}} + \underbrace{\mathbi{v}\mathbi{W}_{K,R}^{\textrm{T}}\mathbi{R}_{i-j}^{\textrm{T}}}_{\textrm{(d)}}
\label{eq:15-14} \label{eq:15-14}
\end{eqnarray} \end{eqnarray}
\noindent 其中,$A_{ij}^{\rm rel}$为使用相对位置编码后位置$i$$j$关系的表示结果,$\mathbi{R}$是一个固定的正弦矩阵。不同于公式\eqref{eq:15-13},公式\eqref{eq:15-14}对(c)中的$\mathbi{E}_{x_j}^{T}$与(d)中的$\mathbi{R}_{i-j}^{T}$采用了不同的映射矩阵,分别为$\mathbi{W}_{K,E}^{T}$$\mathbi{W}_{K,R}^{T}$,这两项分别代表了键$\mathbi{K}$中的词嵌入表示和相对位置编码表示,并且由于此时只采用了相对位置编码,因此公式\eqref{eq:15-14}在(c)与(d)部分使用了$\mathbi{u}$$\mathbi{v}$两个可学习的矩阵代替$\mathbi{U}_i\mathbi{W}_Q$$\mathbi{U}_i\mathbi{W}_Q$,即查询$\mathbi{Q}$中的绝对位置编码部分。此时公式中各项的含义为:(a)表示位置$i$与位置$j$之间词嵌入的相关性,可以看作是基于内容的表示,(b)表示基于内容的位置偏置,(c)表示全局内容的偏置,(d)表示全局位置的偏置。公式\eqref{eq:15-13}中的(a)、(b)两项与前面介绍的绝对位置编码一致\upcite{Shaw2018SelfAttentionWR},并针对相对位置编码引入了额外的线性变换矩阵。同时,这种方法兼顾了全局内容偏置和全局位置偏置,可以更好地利用正余弦函数的归纳偏置特性。 \noindent 其中,$A_{ij}^{\rm rel}$为使用相对位置编码后位置$i$$j$关系的表示结果,$\mathbi{R}$是一个固定的正弦矩阵。不同于公式\eqref{eq:15-13},公式\eqref{eq:15-14}对(c)中的$\mathbi{E}_{x_j}^{\textrm{T}}$与(d)中的$\mathbi{R}_{i-j}^{\textrm{T}}$采用了不同的映射矩阵,分别为$\mathbi{W}_{K,E}^{\textrm{T}}$$\mathbi{W}_{K,R}^{\textrm{T}}$,这两项分别代表了键$\mathbi{K}$中的词嵌入表示和相对位置编码表示,并且由于此时只采用了相对位置编码,因此公式\eqref{eq:15-14}在(c)与(d)部分使用了$\mathbi{u}$$\mathbi{v}$两个可学习的矩阵代替$\mathbi{U}_i\mathbi{W}_Q$$\mathbi{U}_i\mathbi{W}_Q$,即查询$\mathbi{Q}$中的绝对位置编码部分。此时公式中各项的含义为:(a)表示位置$i$与位置$j$之间词嵌入的相关性,可以看作是基于内容的表示,(b)表示基于内容的位置偏置,(c)表示全局内容的偏置,(d)表示全局位置的偏置。公式\eqref{eq:15-13}中的(a)、(b)两项与前面介绍的绝对位置编码一致\upcite{Shaw2018SelfAttentionWR},并针对相对位置编码引入了额外的线性变换矩阵。同时,这种方法兼顾了全局内容偏置和全局位置偏置,可以更好地利用正余弦函数的归纳偏置特性。
\vspace{0.5em} \vspace{0.5em}
\item {\small\bfnew{结构化位置编码}}\index{基于结构化位置编码}(Structural Position Representations)\index{Structural Position Representations}\upcite{DBLP:conf/emnlp/WangTWS19a}例如,可以通过对输入句子进行依存句法分析得到句法树,根据叶子结点在句法树中的深度来表示其绝对位置,并在此基础上利用相对位置编码的思想计算节点之间的相对位置信息。 \item {\small\bfnew{结构化位置编码}}\index{基于结构化位置编码}(Structural Position Representations)\index{Structural Position Representations}\upcite{DBLP:conf/emnlp/WangTWS19a}。 通过对输入句子进行依存句法分析得到句法树,根据叶子结点在句法树中的深度来表示其绝对位置,并在此基础上利用相对位置编码的思想计算节点之间的相对位置信息。
\vspace{0.5em} \vspace{0.5em}
\item 基于{\small\bfnew{连续动态系统}}\index{基于连续动态系统}(Continuous Dynamic Model)\index{Continuous Dynamic Model}的位置编码\upcite{Liu2020LearningTE}。使用神经常微分方程{\small\bfnew{求解器}}\index{求解器}(Solver)\index{Solver}来建模位置信息\upcite{DBLP:conf/nips/ChenRBD18},模型具有更好的归纳偏置能力,可以处理变长的输入序列,同时能够从不同的数据中进行自适应学习。 \item {\small\bfnew{基于连续动态系统}}\index{基于连续动态系统}(Continuous Dynamic Model)\index{Continuous Dynamic Model}{\small\bfnew{的位置编码}}\upcite{Liu2020LearningTE}。使用神经常微分方程{\small\bfnew{求解器}}\index{求解器}(Solver)\index{Solver}来建模位置信息\upcite{DBLP:conf/nips/ChenRBD18},模型具有更好的归纳偏置能力,可以处理变长的输入序列,同时能够从不同的数据中进行自适应学习。
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
...@@ -181,7 +183,7 @@ A_{ij}^{\rm rel} &=& \underbrace{\mathbi{E}_{x_i}\mathbi{W}_Q\mathbi{W}_{K}^{T}\ ...@@ -181,7 +183,7 @@ A_{ij}^{\rm rel} &=& \underbrace{\mathbi{E}_{x_i}\mathbi{W}_Q\mathbi{W}_{K}^{T}\
\noindent 具体的形式如下: \noindent 具体的形式如下:
\begin{eqnarray} \begin{eqnarray}
\mathbi{e}_{ij} &=& \frac{(\mathbi{x}_i \mathbi{W}_Q){(\mathbi{x}_j \mathbi{W}_K)}^{T}}{\sqrt{d_k}} + G_{ij} \mathbi{e}_{ij} &=& \frac{(\mathbi{x}_i \mathbi{W}_Q){(\mathbi{x}_j \mathbi{W}_K)}^{\textrm{T}}}{\sqrt{d_k}} + G_{ij}
\label{eq:15-15} \label{eq:15-15}
\end{eqnarray} \end{eqnarray}
...@@ -199,8 +201,8 @@ G_{ij} &=& - \frac{{(j - P_i)}^2}{2\sigma_i^2} ...@@ -199,8 +201,8 @@ G_{ij} &=& - \frac{{(j - P_i)}^2}{2\sigma_i^2}
\noindent 其中,$m$表示序列长度,$p_i$$v_i$为计算的中间结果,被定义为: \noindent 其中,$m$表示序列长度,$p_i$$v_i$为计算的中间结果,被定义为:
\begin{eqnarray} \begin{eqnarray}
p_i &=& \mathbi{I}_p^T\textrm{Tanh}(\mathbi{W}_p\mathbi{Q}_i) \\ p_i &=& \mathbi{I}_p^{\textrm{T}}\textrm{Tanh}(\mathbi{W}_p\mathbi{Q}_i) \\
v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i) v_i &=& \mathbi{I}_d^{\textrm{T}}\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\label{eq:15-19} \label{eq:15-19}
\end{eqnarray} \end{eqnarray}
...@@ -271,7 +273,7 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i) ...@@ -271,7 +273,7 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\parinterval 在神经网络模型中,可以使用多个平行的组件从不同角度捕捉输入的特征,这种结构被称为{\small\bfnew{多分支}}\index{多分支}(Multi-branch)\index{Multi-branch}结构。多分支结构在图像处理领域被广泛应用\upcite{DBLP:conf/cvpr/XieGDTH17},在许多人工设计或者自动搜索获得的神经网络结构中也有它的身影\upcite{DBLP:conf/icml/SoLL19,DBLP:conf/emnlp/YanMZ20,DBLP:journals/corr/abs-2006-10270} \parinterval 在神经网络模型中,可以使用多个平行的组件从不同角度捕捉输入的特征,这种结构被称为{\small\bfnew{多分支}}\index{多分支}(Multi-branch)\index{Multi-branch}结构。多分支结构在图像处理领域被广泛应用\upcite{DBLP:conf/cvpr/XieGDTH17},在许多人工设计或者自动搜索获得的神经网络结构中也有它的身影\upcite{DBLP:conf/icml/SoLL19,DBLP:conf/emnlp/YanMZ20,DBLP:journals/corr/abs-2006-10270}
\parinterval 在自然语言处理领域,多分支结构同样也有很多应用。比如,{\chapterten}介绍过,为了更好地对源语言进行表示,编码器可以采用双向循环神经网络。这种模型就可以被看作一个两分支的结构,分别用来建模正向序列和反向序列的表示,之后将这两种表示进行拼接得到更丰富的序列表示结果。另一个典型的例子是{\chaptertwelve}介绍的多头注意力机制。在Transformer 模型中,多头注意力将输入向量分割成多个子向量,然后分别进行点乘注意力的计算,最后再将多个输出的子向量拼接后通过线性变换进行不同子空间信息的融合。在这个过程中,多个不同的头对应着不同的特征空间,可以捕捉到不同的特征信息。 \parinterval 在自然语言处理领域,多分支结构同样也有很多应用。一个典型的例子是,{\chapterten}介绍过为了更好地对源语言进行表示,编码器可以采用双向循环神经网络。这种模型就可以被看作一个两分支的结构,分别用来建模正向序列和反向序列的表示,之后将这两种表示进行拼接得到更丰富的序列表示结果。另一个典型的例子是{\chaptertwelve}介绍的多头注意力机制。在Transformer 模型中,多头注意力将输入向量分割成多个子向量,然后分别进行点乘注意力的计算,最后再将多个输出的子向量拼接后通过线性变换进行不同子空间信息的融合。在这个过程中,多个不同的头对应着不同的特征空间,可以捕捉到不同的特征信息。
\parinterval 近几年,在Transformer的结构基础上,研究人员探索了更为丰富的多分支结构。下面介绍几种在Transformer模型中引入多分支结构的方法: \parinterval 近几年,在Transformer的结构基础上,研究人员探索了更为丰富的多分支结构。下面介绍几种在Transformer模型中引入多分支结构的方法:
...@@ -312,7 +314,7 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i) ...@@ -312,7 +314,7 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\subsection{引入循环机制} \subsection{引入循环机制}
\parinterval 虽然Transformer模型完全摒弃了循环单元与卷积单元,仅通过位置编码来区分序列中的不同位置。但是,循环神经网络也非常适用于处理序列结构,且其结构成熟、易于优化。因此,有研究人员尝试将其与Transformer模型融合。这种方式一方面能够发挥循环神经网络简单高效的特点,另一方面也能够发挥Transformer模型在特征提取方面的优势,是一种非常值得探索的思路\upcite{Chen2018TheBO} \parinterval 虽然Transformer模型完全摒弃了循环单元与卷积单元,仅通过位置编码来区分序列中的不同位置。但是,循环神经网络并非没有其存在的价值,这种网络也非常适用于处理序列结构,且其结构成熟、易于优化。因此,有研究人员尝试将其与Transformer模型融合。这种方式一方面能够发挥循环神经网络简单高效的特点,另一方面也能够发挥Transformer模型在特征提取方面的优势,是一种非常值得探索的思路\upcite{Chen2018TheBO}
\parinterval 在Transformer模型中引入循环神经网络的一种方法是,对深层网络的不同层使用循环机制。早在残差网络提出时,研究人员已经开始尝试探讨残差网络成功背后的原因\upcite{DBLP:conf/nips/VeitWB16,DBLP:journals/corr/GreffSS16,DBLP:conf/iclr/ChangMHTB18}。本质上,在卷积神经网络中引入残差连接后,神经网络从深度上隐性地利用了循环的特性。也就是,多层Transformer的不同层本身也可以被看作是一个处理序列,只是序列中不同位置(对应不同层)的模型参数独立,而非共享。Transformer编码器与解码器分别由$N$个结构相同但参数独立的层堆叠而成,其中编码器包含2个子层,解码器包含3个子层。同时,子层之间引入了残差连接保证了网络信息传递的高效性。因此,一个自然的想法是通过共享不同层之间的参数,引入循环神经网络中的归纳偏置\upcite{DBLP:conf/iclr/DehghaniGVUK19}。其中每层的权重是共享的,并引入了基于时序的编码向量用于显著区分不同深度下的时序信息,如图\ref{fig:15-8}所示。在训练大容量预训练模型时同样也采取了共享层间参数的方式\upcite{Lan2020ALBERTAL} \parinterval 在Transformer模型中引入循环神经网络的一种方法是,对深层网络的不同层使用循环机制。早在残差网络提出时,研究人员已经开始尝试探讨残差网络成功背后的原因\upcite{DBLP:conf/nips/VeitWB16,DBLP:journals/corr/GreffSS16,DBLP:conf/iclr/ChangMHTB18}。本质上,在卷积神经网络中引入残差连接后,神经网络从深度上隐性地利用了循环的特性。也就是,多层Transformer的不同层本身也可以被看作是一个处理序列,只是序列中不同位置(对应不同层)的模型参数独立,而非共享。Transformer编码器与解码器分别由$N$个结构相同但参数独立的层堆叠而成,其中编码器包含2个子层,解码器包含3个子层。同时,子层之间引入了残差连接保证了网络信息传递的高效性。因此,一个自然的想法是通过共享不同层之间的参数,引入循环神经网络中的归纳偏置\upcite{DBLP:conf/iclr/DehghaniGVUK19}。其中每层的权重是共享的,并引入了基于时序的编码向量用于显著区分不同深度下的时序信息,如图\ref{fig:15-8}所示。在训练大容量预训练模型时同样也采取了共享层间参数的方式\upcite{Lan2020ALBERTAL}
...@@ -335,15 +337,15 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i) ...@@ -335,15 +337,15 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\parinterval 除了机器翻译,Transformer模型同样被广泛应用于自然语言理解、图像处理、语音处理等任务。但是,自注意力机制的时间复杂度是序列长度$N$的平方项,同时其对内存(显存)的消耗巨大,尤其当处理较长序列的文本时,这种问题尤为严重。因此如何提高Transformer模型的效率也受到了广泛的关注。{\chapterfourteen}已经从模型推断的角度介绍了Transformer系统加速的方法,这里重点讨论一些高效的Transformer变种模型。 \parinterval 除了机器翻译,Transformer模型同样被广泛应用于自然语言理解、图像处理、语音处理等任务。但是,自注意力机制的时间复杂度是序列长度$N$的平方项,同时其对内存(显存)的消耗巨大,尤其当处理较长序列的文本时,这种问题尤为严重。因此如何提高Transformer模型的效率也受到了广泛的关注。{\chapterfourteen}已经从模型推断的角度介绍了Transformer系统加速的方法,这里重点讨论一些高效的Transformer变种模型。
\parinterval 自注意力机制的时间复杂度较高,正是因为其需要对序列中的每一个位置计算与其他所有位置的相关性。因此一个自然的想法就是限制自注意力机制的作用范围,大体上可以分为如下几种方式: \parinterval 由于自注意力机制需要对计算序列中的每一个位置与其他所有位置的相关性,因此其时间复杂度较高。一个自然的想法就是限制自注意力机制的作用范围,大体上可以分为如下几种方式:
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
\item 分块注意力:顾名思义,就是将序列划分为固定大小的片段,注意力模型只在对应的片段内执行。这样,每一个片段内的注意力计算成本是固定的,可以大大降低处理长序列时的总体计算时间\upcite{DBLP:conf/emnlp/QiuMLYW020,DBLP:conf/iclr/LiuSPGSKS18} \item {\small\bfnew{分块注意力}}:顾名思义,就是将序列划分为固定大小的片段,注意力模型只在对应的片段内执行。这样,每一个片段内的注意力计算成本是固定的,可以大大降低处理长序列时的总体计算时间\upcite{DBLP:conf/emnlp/QiuMLYW020,DBLP:conf/iclr/LiuSPGSKS18}
\vspace{0.5em} \vspace{0.5em}
\item 跨步注意力:该模型是一种稀疏的注意力机制,通常会设置一个固定的间隔,也就是说在计算注意力表示时,每隔固定数量的词后将下一个词纳入所需考虑的范围内,参与注意力的计算\upcite{DBLP:journals/corr/abs-2004-05150}。和分片段进行注意力计算类似,假设最终参与注意力计算的间隔长度为$N/B$,每次参与注意力计算的单词数为$B$,那么注意力的计算复杂度将从$O(N^2)$缩减为$O(N/B \times B^2)$,即$O(NB)$ \item {\small\bfnew{跨步注意力}}:该模型是一种稀疏的注意力机制,通常会设置一个固定的间隔,也就是说在计算注意力表示时,每次跳过固定数量的词,并将下一个词纳入注意力计算的考虑范围内\upcite{DBLP:journals/corr/abs-2004-05150}。和分片段进行注意力计算类似,假设最终参与注意力计算的间隔长度为$N/B$,每次参与注意力计算的单词数为$B$,那么注意力的计算复杂度将从$O(N^2)$缩减为$O(N/B \times B^2)$,即$O(NB)$
\vspace{0.5em} \vspace{0.5em}
\item 内存压缩注意力:这种方式的主要的思想是使用一些操作,如卷积、池化等对序列进行下采样,来缩短序列长度。例如,使用{\small\bfnew{跨步卷积}}\index{跨步卷积}(Stride Convolution)\index{Stride Convolution}来减少Key和Value的数量,即减少表示序列长度的维度的大小,Query的数量保持不变,从而减少了注意力权重计算时的复杂度\upcite{DBLP:conf/iclr/LiuSPGSKS18}。其具体的计算复杂度取决于跨步卷积时步幅的大小$K$,形式上可以理解为每$K$个单元做一次特征融合后,将关注的目标缩减为$N/K$,整体的计算复杂度为$N^2/K$。相比于使用前两种方式对局部进行注意力计算,该方式仍是对全局的建模。 \item {\small\bfnew{内存压缩注意力}}:这种方式的主要的思想是使用一些操作,如卷积、池化等对序列进行下采样,来缩短序列长度。例如,使用{\small\bfnew{跨步卷积}}\index{跨步卷积}(Stride Convolution)\index{Stride Convolution}来减少Key和Value的数量,即减少表示序列长度的维度的大小,Query的数量保持不变,从而减少了注意力权重计算时的复杂度\upcite{DBLP:conf/iclr/LiuSPGSKS18}。其计算复杂度取决于跨步卷积时步幅的大小$K$,形式上可以理解为每$K$个单元做一次特征融合后,将关注的目标缩减为$N/K$,整体的计算复杂度为$N^2/K$。相比于使用前两种方式对局部进行注意力计算,该方式仍是对全局的建模。
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
...@@ -356,7 +358,7 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i) ...@@ -356,7 +358,7 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\item Reformer模型在计算Key和Value时使用相同的线性映射,共享Key和Value的值\upcite{Kitaev2020ReformerTE},降低了自注意力机制的复杂度。进一步,Reformer引入了一种{\small\bfnew{局部哈希敏感注意力机制}}\index{局部哈希敏感注意力机制}(LSH Attention)\index{LSH Attention},其提高效率的方式和固定模式中的局部建模一致,减少注意力机制的计算范围。对于每一个Query,通过局部哈希敏感机制找出和其较为相关的Key,并进行注意力的计算。其基本思路就是距离相近的向量以较大的概率被哈希分配到一个桶内,距离较远的向量被分配到一个桶内的概率则较低。此外,Reformer中还采用了一种{\small\bfnew{可逆残差网络结构}}\index{可逆残差网络结构}(The Reversible Residual Network)\index{The Reversible Residual Network}和分块计算前馈神经网络层的机制,即将前馈层的隐层维度拆分为多个块并独立的进行计算,最后进行拼接操作,得到前馈层的输出,这种方式大幅度减少了内存(显存)占用。 \item Reformer模型在计算Key和Value时使用相同的线性映射,共享Key和Value的值\upcite{Kitaev2020ReformerTE},降低了自注意力机制的复杂度。进一步,Reformer引入了一种{\small\bfnew{局部哈希敏感注意力机制}}\index{局部哈希敏感注意力机制}(LSH Attention)\index{LSH Attention},其提高效率的方式和固定模式中的局部建模一致,减少注意力机制的计算范围。对于每一个Query,通过局部哈希敏感机制找出和其较为相关的Key,并进行注意力的计算。其基本思路就是距离相近的向量以较大的概率被哈希分配到一个桶内,距离较远的向量被分配到一个桶内的概率则较低。此外,Reformer中还采用了一种{\small\bfnew{可逆残差网络结构}}\index{可逆残差网络结构}(The Reversible Residual Network)\index{The Reversible Residual Network}和分块计算前馈神经网络层的机制,即将前馈层的隐层维度拆分为多个块并独立的进行计算,最后进行拼接操作,得到前馈层的输出,这种方式大幅度减少了内存(显存)占用。
\vspace{0.5em} \vspace{0.5em}
\item Routing Transformer通过聚类算法对序列中的不同单元进行分组,分别在组内进行自注意力机制的计算\upcite{DBLP:journals/corr/abs-2003-05997}首先是将Query和Key映射到聚类矩阵$\mathbi{S}$ \item Routing Transformer通过聚类算法对序列中的不同单元进行分组,分别在组内进行自注意力机制的计算\upcite{DBLP:journals/corr/abs-2003-05997}该方法是将Query和Key映射到聚类矩阵$\mathbi{S}$
\begin{eqnarray} \begin{eqnarray}
\mathbi{S} &=& \mathbi{Q} \mathbi{W} + \mathbi{K} \mathbi{W} \mathbi{S} &=& \mathbi{Q} \mathbi{W} + \mathbi{K} \mathbi{W}
\label{eq:15-24} \label{eq:15-24}
...@@ -410,7 +412,7 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i) ...@@ -410,7 +412,7 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\parinterval$\mathbi{x}_l$$\mathbi{x}_{l+1}$表示第$l$个子层的输入和输出\footnote[4]{这里沿用Transformer中的定义,每一层(Layer)包含多个子层(Sub-layer)。比如,对于Transformer编码器,每一层包含一个自注意力子层和一个前馈神经网络子层。所有子层都需要进行层标准化和残差连接。}$\mathbi{y}_l$表示中间的临时输出;$\textrm{LN}(\cdot)$表示层标准化操作,帮助减小子层输出的方差,从而让训练变得更稳定;$F(\cdot)$表示子层所对应的函数,比如前馈神经网络、自注意力等。下面分别对Post-Norm和Pre-Norm进行简单的描述。 \parinterval$\mathbi{x}_l$$\mathbi{x}_{l+1}$表示第$l$个子层的输入和输出\footnote[4]{这里沿用Transformer中的定义,每一层(Layer)包含多个子层(Sub-layer)。比如,对于Transformer编码器,每一层包含一个自注意力子层和一个前馈神经网络子层。所有子层都需要进行层标准化和残差连接。}$\mathbi{y}_l$表示中间的临时输出;$\textrm{LN}(\cdot)$表示层标准化操作,帮助减小子层输出的方差,从而让训练变得更稳定;$F(\cdot)$表示子层所对应的函数,比如前馈神经网络、自注意力等。下面分别对Post-Norm和Pre-Norm进行简单的描述。
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
\item Post-Norm:早期的Transformer遵循的是Post-Norm结构\upcite{vaswani2017attention}。也就是层标准化作用于每一子层的输入和输出的残差结果上,如图\ref{fig:15-9}(a)所示。可以表示如下: \item {\small\bfnew{Post-Norm}}:早期的Transformer遵循的是Post-Norm结构\upcite{vaswani2017attention}。也就是层标准化作用于每一子层的输入和输出的残差结果上,如图\ref{fig:15-9}(a)所示。可以表示如下:
\begin{eqnarray} \begin{eqnarray}
\mathbi{x}_{l+1} &=& \textrm{LN}(\mathbi{x}_l+F(\mathbi{x}_l;{\bm \theta_l})) \mathbi{x}_{l+1} &=& \textrm{LN}(\mathbi{x}_l+F(\mathbi{x}_l;{\bm \theta_l}))
\label{eq:15-26} \label{eq:15-26}
...@@ -418,14 +420,14 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i) ...@@ -418,14 +420,14 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\noindent 其中,$\bm \theta_l$是子层$l$的参数。 \noindent 其中,$\bm \theta_l$是子层$l$的参数。
\vspace{0.5em} \vspace{0.5em}
\item Pre-Norm:通过调整层标准化的位置,将其放置于每一子层的输入之前,得到了Pre-Norm结构\upcite{DBLP:conf/eccv/HeZRS16},如图\ref{fig:15-9}(b)所示。这种结构也被广泛应用于最新的Transformer开源系统中\upcite{Vaswani2018Tensor2TensorFN,Ottfairseq,KleinOpenNMT},公式如下: \item {\small\bfnew{Pre-Norm}}:通过调整层标准化的位置,将其放置于每一子层的输入之前,得到了Pre-Norm结构\upcite{DBLP:conf/eccv/HeZRS16},如图\ref{fig:15-9}(b)所示。这种结构也被广泛应用于最新的Transformer开源系统中\upcite{Vaswani2018Tensor2TensorFN,Ottfairseq,KleinOpenNMT},公式如下:
\begin{eqnarray} \begin{eqnarray}
\mathbi{x}_{l+1} &=& \mathbi{x}_l+F(\textrm{LN}(\mathbi{x}_l);{\bm \theta_l}) \mathbi{x}_{l+1} &=& \mathbi{x}_l+F(\textrm{LN}(\mathbi{x}_l);{\bm \theta_l})
\label{eq:15-27} \label{eq:15-27}
\end{eqnarray} \end{eqnarray}
\end{itemize} \end{itemize}
\parinterval上述公式中可以发现,在前向传播过程中,Pre-Norm结构可以通过残差路径将底层神经网络的输出直接暴露给上层神经网络。此外,在反向传播过程中,使用Pre-Norm结构也可以使得顶层网络的梯度更容易地反馈到底层网络。这里以一个含有$L$个子层的结构为例,令$\textrm{Loss}$表示整个神经网络输出上的损失,$\mathbi{x}_L$为顶层的输出。对于Post-Norm结构,根据链式法则,损失$\textrm{Loss}$相对于$\mathbi{x}_l$ 的梯度可以表示为: \parinterval公式\eqref{eq:15-26}\eqref{eq:15-27}公式中可以发现,在前向传播过程中,Pre-Norm结构可以通过残差路径将底层神经网络的输出直接暴露给上层神经网络。此外,在反向传播过程中,使用Pre-Norm结构也可以使得顶层网络的梯度更容易地反馈到底层网络。这里以一个含有$L$个子层的结构为例,令$\textrm{Loss}$表示整个神经网络输出上的损失,$\mathbi{x}_L$为顶层的输出。对于Post-Norm结构,根据链式法则,损失$\textrm{Loss}$相对于$\mathbi{x}_l$ 的梯度可以表示为:
\begin{eqnarray} \begin{eqnarray}
\frac{\partial \textrm{Loss}}{\partial \mathbi{x}_l} &=& \frac{\partial \textrm{Loss}}{\partial \mathbi{x}_L} \times \prod_{k=l}^{L-1}\frac{\partial \textrm{LN}(\mathbi{y}_k)}{\partial \mathbi{y}_k} \times \prod_{k=l}^{L-1}\big(1+\frac{\partial F(\mathbi{x}_k;{\bm \theta_k})}{\partial \mathbi{x}_k} \big) \frac{\partial \textrm{Loss}}{\partial \mathbi{x}_l} &=& \frac{\partial \textrm{Loss}}{\partial \mathbi{x}_L} \times \prod_{k=l}^{L-1}\frac{\partial \textrm{LN}(\mathbi{y}_k)}{\partial \mathbi{y}_k} \times \prod_{k=l}^{L-1}\big(1+\frac{\partial F(\mathbi{x}_k;{\bm \theta_k})}{\partial \mathbi{x}_k} \big)
\label{eq:15-28} \label{eq:15-28}
...@@ -451,9 +453,9 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i) ...@@ -451,9 +453,9 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\subsection{高效信息传递} \subsection{高效信息传递}
\parinterval 尽管使用Pre-Norm结构可以很容易地训练深层Transformer模型,但从信息传递的角度看,Transformer模型中第$l$层的输入仅仅依赖于前一层的输出。虽然残差连接可以跨层传递信息,但是对于很深的模型,整个模型的输入和输出之间仍需要经过很多次残差连接。 \parinterval 尽管使用Pre-Norm结构可以很容易地训练深层Transformer模型,但从信息传递的角度看,Transformer模型中第$l$层的输入仅仅依赖于前一层的输出。虽然残差连接可以跨层传递信息,但是对于很深(模型层数多)的模型,整个模型的输入和输出之间仍需要经过很多次残差连接。
\parinterval 为了使上层的神经网络可以更加方便地访问下层神经网络的信息,最简单的方法是引入更多的跨层连接。一种方法是直接将所有层的输出都连接到最上层,达到聚合多层信息的目的\upcite{Bapna2018TrainingDN,Wang2018MultilayerRF,Dou2018ExploitingDR}。另一种更加有效的方式是在网络前向计算的过程中建立当前层表示与之前层表示之间的关系,例如{\small\bfnew{动态线性聚合网络}}\upcite{WangLearning}\index{动态线性聚合网络}(Dynamic Linear Combination of Layers,DLCL)\index{Dynamic Linear Combination of Layers}和动态层聚合方法\upcite{Dou2019DynamicLA}。这些方法的共性在于,在每一层的输入中不仅考虑前一层的输出,同时将前面所有层的中间结果(包括词嵌入表示)进行聚合,本质上利用稠密的层间连接提高了网络中信息传递的效率(前向计算和反向梯度计算)。而DLCL利用线性的层融合手段来保证计算的时效性,主要应用于深层神经网络的训练,理论上等价于常微分方程中的高阶求解方法\upcite{WangLearning}。此外,为了进一步增强上层神经网络对底层表示的利用,研究人员从多尺度的角度对深层的编码器进行分块,并使用GRU来捕获不同块之间的联系,得到更高层次的表示。该方法可以看作是对动态线性聚合网络的延伸。接下来分别对上述几种改进方法展开讨论。 \parinterval 为了使上层的神经网络可以更加方便地访问下层神经网络的信息,最简单的方法是引入更多的跨层连接。其中,引入跨层连接的一种方式是直接将所有层的输出都连接到最上层,达到聚合多层信息的目的\upcite{Bapna2018TrainingDN,Wang2018MultilayerRF,Dou2018ExploitingDR}。另一种更加有效的方式是在网络前向计算的过程中建立当前层表示与之前层表示之间的关系,例如{\small\bfnew{动态线性聚合方法}}\upcite{WangLearning}\index{动态线性聚合方法}(Dynamic Linear Combination of Layers,DLCL)\index{Dynamic Linear Combination of Layers}和动态层聚合方法\upcite{Dou2019DynamicLA}。这些方法的共性在于,在每一层的输入中不仅考虑前一层的输出,同时将前面所有层的中间结果(包括词嵌入表示)进行聚合,本质上利用稠密的层间连接提高了网络中信息传递的效率(前向计算和反向梯度计算)。而DLCL利用线性的层融合手段来保证计算的时效性,主要应用于深层神经网络的训练,理论上等价于常微分方程中的高阶求解方法\upcite{WangLearning}。此外,为了进一步增强上层神经网络对底层表示的利用,研究人员从多尺度的角度对深层的编码器进行分块,并使用GRU来捕获不同块之间的联系,得到更高层次的表示。该方法可以看作是对动态线性聚合网络的延伸。接下来分别对上述几种改进方法展开讨论。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION % NEW SUBSUB-SECTION
...@@ -461,7 +463,7 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i) ...@@ -461,7 +463,7 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\subsubsection{1. 使用更多的跨层连接} \subsubsection{1. 使用更多的跨层连接}
\parinterval\ref{fig:15-10}描述了引入更多跨层连接的结构的方法。在模型的前向计算过程中,假设编码器总层数为$L$,当完成编码器$L$层的逐层计算后,通过线性平均、加权平均等机制对模型的中间层表示进行融合,得到蕴含所有层信息的表示\mathbi{g},作为编码-解码注意力机制的输入,与总共有$M$层的解码器共同处理解码信息。 \parinterval\ref{fig:15-10}描述了一种引入更多跨层连接的结构的方法,即层融合方法。在模型的前向计算过程中,假设编码器总层数为$L$,当完成编码器$L$层的逐层计算后,通过线性平均、加权平均等机制对模型的中间层表示进行融合,得到蕴含所有层信息的表示\mathbi{g},作为编码-解码注意力机制的输入,与总共有$M$层的解码器共同处理解码信息。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -476,31 +478,31 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i) ...@@ -476,31 +478,31 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
\item 线性平均。即平均池化,通过对各层中间表示进行累加之后取平均值,表示如下: \item {\small\bfnew{线性平均}}。即平均池化,通过对各层中间表示进行累加之后取平均值,表示如下:
\begin{eqnarray} \begin{eqnarray}
\mathbi{g} &=& \frac{1}{L}\sum_{l=1}^{L}{\mathbi{h}^l} \mathbi{g} &=& \frac{1}{L}\sum_{l=1}^{L}{\mathbi{h}^l}
\label{eq:15-30} \label{eq:15-30}
\end{eqnarray} \end{eqnarray}
\vspace{0.5em} \vspace{0.5em}
\item 权重平均。在线性平均的基础上,为每一个中间层表示赋予一个相应的权重。权重的值通常采用可学习的参数矩阵$\mathbi{W}_l$表示。这种方法通常会略优于线性平均方法。可以用如下方式描述: \item {\small\bfnew{权重平均}}。在线性平均的基础上,为每一个中间层表示赋予一个相应的权重。权重的值通常采用可学习的参数矩阵$\mathbi{W}_l$表示。这种方法通常会略优于线性平均方法。可以用如下方式描述:
\begin{eqnarray} \begin{eqnarray}
\mathbi{g} &=& \sum_{l=1}^{L}{\mathbi{W}_l\mathbi{h}^l} \mathbi{g} &=& \sum_{l=1}^{L}{\mathbi{W}_l\mathbi{h}^l}
\label{eq:15-31} \label{eq:15-31}
\end{eqnarray} \end{eqnarray}
\vspace{0.5em} \vspace{0.5em}
\item 前馈神经网络。将之前中间层的表示进行级联,之后利用前馈神经网络得到融合的表示,如下: \item {\small\bfnew{前馈神经网络}}。将之前中间层的表示进行级联,之后利用前馈神经网络得到融合的表示,如下:
\begin{eqnarray} \begin{eqnarray}
\mathbi{g} &=& \textrm{FNN}([\mathbi{h}^1,{\red \ldots},\mathbi{h}^L]) \mathbi{g} &=& \textrm{FNN}([\mathbi{h}^1,\ldots,\mathbi{h}^L])
\label{eq:15-32} \label{eq:15-32}
\end{eqnarray} \end{eqnarray}
\noindent 其中,$[\cdot]$表示级联操作。这种方式具有比权重平均更强的拟合能力。 \noindent 其中,$[\cdot]$表示级联操作。这种方式具有比权重平均更强的拟合能力。
\vspace{0.5em} \vspace{0.5em}
\item 基于多跳的自注意力机制。如图\ref{fig:15-11}所示,其做法与前馈神经网络类似,首先将不同层的表示拼接成2维的句子级矩阵表示\upcite{DBLP:journals/corr/LinFSYXZB17}。之后利用类似于前馈神经网络的思想将维度为$\mathbb{R}^{d_{\textrm{model}} \times L}$的矩阵映射到维度为$\mathbb{R}^{d_{\textrm{model}} \times n_{\rm hop}}$的矩阵,如下: \item {\small\bfnew{基于多跳的自注意力机制}}。如图\ref{fig:15-11}所示,其做法与前馈神经网络类似,首先将不同层的表示拼接成2维的句子级矩阵表示\upcite{DBLP:journals/corr/LinFSYXZB17}。之后利用类似于前馈神经网络的思想将维度为$\mathbb{R}^{d_{\textrm{model}} \times L}$的矩阵映射到维度为$\mathbb{R}^{d_{\textrm{model}} \times n_{\rm hop}}$的矩阵,如下:
\begin{eqnarray} \begin{eqnarray}
\mathbi{o} &=& \sigma ([\mathbi{h}^1,\ldots,\mathbi{h}^L]^{T} \cdot \mathbi{W}_1)\mathbi{W}_2 \mathbi{o} &=& \sigma ([\mathbi{h}^1,\ldots,\mathbi{h}^L]^{\textrm{T}} \cdot \mathbi{W}_1)\mathbi{W}_2
\label{eq:15-33} \label{eq:15-33}
\end{eqnarray} \end{eqnarray}
...@@ -576,7 +578,7 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i) ...@@ -576,7 +578,7 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\parinterval 根据上述描述可以发现,权值矩阵$\mathbi{W}$每个位置的值由先前层对应的位置的值计算得到,因此该矩阵是一个下三角矩阵。开始时,对权值矩阵的每行进行平均初始化,即初始化矩阵$\mathbi{W}_0$的每一行各个位置的值为$\frac{1}{\lambda}$$\lambda \in (1,2,\ldots,l+1)$。伴随着神经网络的训练,不断更新$\mathbi{W}$中每一行不同位置权重的大小。 \parinterval 根据上述描述可以发现,权值矩阵$\mathbi{W}$每个位置的值由先前层对应的位置的值计算得到,因此该矩阵是一个下三角矩阵。开始时,对权值矩阵的每行进行平均初始化,即初始化矩阵$\mathbi{W}_0$的每一行各个位置的值为$\frac{1}{\lambda}$$\lambda \in (1,2,\ldots,l+1)$。伴随着神经网络的训练,不断更新$\mathbi{W}$中每一行不同位置权重的大小。
\parinterval 动态线性层聚合的一个好处是,系统可以自动学习不同层对当前层的贡献度。在实验中也发现,离当前层更近的部分的贡献度(权重)会更大,如图\ref{fig:15-14}所示,在每一行中颜色越深代表对当前层的贡献度越大。 \parinterval 动态线性层聚合的一个好处是,系统可以自动学习不同层对当前层的贡献度。在实验中也发现,离当前层更近的部分的贡献度(权重)会更大,\ref{fig:15-14}展示了对收敛的DLCL网络进行权重可视化的结果,在每一行中颜色越深代表对当前层的贡献度越大。
\parinterval 除了动态层线性聚合方法,也可以利用更为复杂的胶囊网络\upcite{Dou2019DynamicLA}、树状层次结构\upcite{Dou2018ExploitingDR}、多尺度协同框架\upcite{DBLP:conf/acl/WeiYHZWL20}等作为层间的融合方式。然而,也有研究发现进一步增加模型编码器的深度并不能取得更优的翻译性能。因此如何进一步突破神经网络深度的限制是值得关注的研究方向,类似的话题在图像处理领域也引起了广泛的讨论\upcite{DBLP:conf/nips/SrivastavaGS15,DBLP:conf/icml/BalduzziFLLMM17,DBLP:conf/icml/Allen-ZhuLS19,DBLP:conf/icml/DuLL0Z19} \parinterval 除了动态层线性聚合方法,也可以利用更为复杂的胶囊网络\upcite{Dou2019DynamicLA}、树状层次结构\upcite{Dou2018ExploitingDR}、多尺度协同框架\upcite{DBLP:conf/acl/WeiYHZWL20}等作为层间的融合方式。然而,也有研究发现进一步增加模型编码器的深度并不能取得更优的翻译性能。因此如何进一步突破神经网络深度的限制是值得关注的研究方向,类似的话题在图像处理领域也引起了广泛的讨论\upcite{DBLP:conf/nips/SrivastavaGS15,DBLP:conf/icml/BalduzziFLLMM17,DBLP:conf/icml/Allen-ZhuLS19,DBLP:conf/icml/DuLL0Z19}
...@@ -612,7 +614,7 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i) ...@@ -612,7 +614,7 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\label{eq:15-40} \label{eq:15-40}
\end{eqnarray} \end{eqnarray}
\noindent 其中,$u(-\gamma,\gamma)$表示$-\gamma$$\gamma$间的均匀分布,$n_i$$n_o$分别为线性变换$\mathbi{W}$中输入和输出的维度,也就是上一层神经元的数量和下一层神经元的数量。通过这种方式可以维持在前向与反向计算过程中输入与输出方差的一致性\upcite{DBLP:conf/iccv/HeZRS15} \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 令模型中某层神经元的输出表示为$\mathbi{Z}=\sum_{j=1}^{n_i}{w_j x_j}$。可以看出,$\mathbi{Z}$的核心是计算两个变量$w_j$$x_j$乘积。两个变量乘积的方差的展开式为:
\begin{eqnarray} \begin{eqnarray}
...@@ -627,7 +629,7 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i) ...@@ -627,7 +629,7 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\label{eq:15-42} \label{eq:15-42}
\end{eqnarray} \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}(\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 但是随着神经网络层数的增加,上述初始化方法已经不能很好地约束基于Post-Norm的Transformer模型的输出方差。当神经网络堆叠很多层时,模型顶层输出的方差较大,同时反向传播时顶层的梯度范数也要大于底层。因此,一个自然的想法是根据网络的深度对不同层的参数矩阵采取不同的初始化方式,进而强化对各层输出方差的约束,可以描述为: \parinterval 但是随着神经网络层数的增加,上述初始化方法已经不能很好地约束基于Post-Norm的Transformer模型的输出方差。当神经网络堆叠很多层时,模型顶层输出的方差较大,同时反向传播时顶层的梯度范数也要大于底层。因此,一个自然的想法是根据网络的深度对不同层的参数矩阵采取不同的初始化方式,进而强化对各层输出方差的约束,可以描述为:
\begin{eqnarray} \begin{eqnarray}
...@@ -647,11 +649,11 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i) ...@@ -647,11 +649,11 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
\item 计算均值${\bm \mu}=\textrm{mean}(\mathbi{x}_l+\mathbi{y}_l)$ \item {\small\bfnew{计算均值}}${\bm \mu}=\textrm{mean}(\mathbi{x}_l+\mathbi{y}_l)$
\vspace{0.5em} \vspace{0.5em}
\item 计算方差${\bm \sigma}=\textrm{std}(\mathbi{x}_l+\mathbi{y}_l)$ \item {\small\bfnew{计算方差}}${\bm \sigma}=\textrm{std}(\mathbi{x}_l+\mathbi{y}_l)$
\vspace{0.5em} \vspace{0.5em}
\item 根据均值和方差对输入进行放缩,如下: \item {\small\bfnew{根据均值和方差对输入进行放缩}},如下:
\begin{eqnarray} \begin{eqnarray}
\mathbi{x}_{l+1}^{\textrm{post}} &=& \frac{\mathbi{x}_l+\mathbi{y}_l-{\bm \mu}}{\bm \sigma} \cdot \mathbi{w}+\mathbi{b} \mathbi{x}_{l+1}^{\textrm{post}} &=& \frac{\mathbi{x}_l+\mathbi{y}_l-{\bm \mu}}{\bm \sigma} \cdot \mathbi{w}+\mathbi{b}
\label{eq:15-44} \label{eq:15-44}
...@@ -692,7 +694,7 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i) ...@@ -692,7 +694,7 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
\parinterval 这种初始化方法由于没有Warmup策略,学习率会直接从峰值根据参数的更新次数进行退火,大幅度增大了模型收敛的时间。因此,如何进一步解决该初始化方法下的模型收敛速度是比较关键的问题。 \parinterval 这种初始化方法由于没有Warmup策略,学习率会直接从峰值根据参数的更新次数进行退火,大幅度增大了模型收敛的时间。因此,如何进一步加快该初始化方法下模型的收敛速度是比较关键的问题。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION % NEW SUBSUB-SECTION
...@@ -710,9 +712,9 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i) ...@@ -710,9 +712,9 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
\item Profiling阶段${\bm \omega_{l+1}} = 1$,只进行前向计算,无需进行梯度计算。在训练样本上计算$F_{l+1}(\mathbi{x}_l)$的方差 \item {\small\bfnew{Profiling阶段}}${\bm \omega_{l+1}} = 1$,只进行前向计算,无需进行梯度计算。在训练样本上计算$F_{l+1}(\mathbi{x}_l)$的方差
\vspace{0.5em} \vspace{0.5em}
\item Initialization阶段:通过Profiling阶段得到的$F_{l+1}(\mathbi{x}_l)$的方差来初始化$\bm \omega_{l+1}$ \item {\small\bfnew{Initialization阶段}}:通过Profiling阶段得到的$F_{l+1}(\mathbi{x}_l)$的方差来初始化$\bm \omega_{l+1}$
\begin{eqnarray} \begin{eqnarray}
{\bm \omega_{l+1}} &=& \sqrt{\sum_{j<l}\textrm{Var}[F_{l+1}(\mathbi{x}_l)]} {\bm \omega_{l+1}} &=& \sqrt{\sum_{j<l}\textrm{Var}[F_{l+1}(\mathbi{x}_l)]}
\label{eq:15-48} \label{eq:15-48}
...@@ -735,7 +737,7 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i) ...@@ -735,7 +737,7 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\subsubsection{1. 渐进式训练} \subsubsection{1. 渐进式训练}
\parinterval 所谓渐进式训练是指从浅层神经网络开始,在训练过程中逐渐增加模型的深度。一种比较简单的方是将模型分为浅层部分和深层部分,之后分别进行训练,最终达到提高模型翻译性能的目的\upcite{DBLP:conf/acl/WuWXTGQLL19} \parinterval 所谓渐进式训练是指从浅层神经网络开始,在训练过程中逐渐增加模型的深度。一种比较简单的方是将模型分为浅层部分和深层部分,之后分别进行训练,最终达到提高模型翻译性能的目的\upcite{DBLP:conf/acl/WuWXTGQLL19}
\parinterval 另一种方式是动态构建深层模型,并尽可能复用浅层部分的训练结果\upcite{li2020shallow}。假设开始的时候模型包含$l$层神经网络,然后训练这个模型至收敛。之后,直接拷贝这$l$层神经网络(包括参数),并堆叠出一个$2l$ 层的模型。之后继续训练,重复这个过程。进行$n$次之后就得到了$(n+1) \times l$层的模型。图\ref{fig:15-15}给出了在编码器上使用渐进式训练的示意图。 \parinterval 另一种方式是动态构建深层模型,并尽可能复用浅层部分的训练结果\upcite{li2020shallow}。假设开始的时候模型包含$l$层神经网络,然后训练这个模型至收敛。之后,直接拷贝这$l$层神经网络(包括参数),并堆叠出一个$2l$ 层的模型。之后继续训练,重复这个过程。进行$n$次之后就得到了$(n+1) \times l$层的模型。图\ref{fig:15-15}给出了在编码器上使用渐进式训练的示意图。
...@@ -748,7 +750,7 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i) ...@@ -748,7 +750,7 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\end{figure} \end{figure}
%------------------------------------------- %-------------------------------------------
\parinterval 渐进式训练的好处在于深层模型并不是从头开始训练。每一次堆叠,都相当于利用“浅”模型给“深”模型提供了一个很好的初始,这样深层模型的训练会更加容易。 \parinterval 渐进式训练的好处在于深层模型并不是从头开始训练。每一次堆叠,都相当于利用“浅”模型给“深”模型提供了一个很好的初始状态,这样深层模型的训练会更加容易。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION % NEW SUBSUB-SECTION
...@@ -758,8 +760,6 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i) ...@@ -758,8 +760,6 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\parinterval 很多研究工作已经发现深层模型不同层之间的稠密连接能够很明显地提高信息传递的效率\upcite{WangLearning,DBLP:conf/cvpr/HuangLMW17,Dou2018ExploitingDR,DBLP:conf/acl/WuWXTGQLL19}。与此同时,对之前层信息的不断复用有助于得到更好的表示,但也带来了计算代价过大的问题。在动态线性层聚合方法(DLCL)中,每一次聚合时都需要重新计算之前每一层表示对当前层输入的贡献度,因此伴随着编码器整体深度的增加,这部分的计算代价变得不可忽略。例如,一个基于动态层聚合的48层Transformer模型比不使用动态层聚合的模型在进行训练时慢近2倍。同时,缓存中间结果也增加了显存的使用量。比如,即使在使用半精度计算的情况下,每张12G显存的GPU上计算的词也不能超过2048个,这导致训练开销急剧增大。 \parinterval 很多研究工作已经发现深层模型不同层之间的稠密连接能够很明显地提高信息传递的效率\upcite{WangLearning,DBLP:conf/cvpr/HuangLMW17,Dou2018ExploitingDR,DBLP:conf/acl/WuWXTGQLL19}。与此同时,对之前层信息的不断复用有助于得到更好的表示,但也带来了计算代价过大的问题。在动态线性层聚合方法(DLCL)中,每一次聚合时都需要重新计算之前每一层表示对当前层输入的贡献度,因此伴随着编码器整体深度的增加,这部分的计算代价变得不可忽略。例如,一个基于动态层聚合的48层Transformer模型比不使用动态层聚合的模型在进行训练时慢近2倍。同时,缓存中间结果也增加了显存的使用量。比如,即使在使用半精度计算的情况下,每张12G显存的GPU上计算的词也不能超过2048个,这导致训练开销急剧增大。
\parinterval 缓解这个问题的一种方法是使用更稀疏的层间连接方式。其核心思想与动态线性层聚合是类似的,不同点在于可以通过调整层之间连接的稠密程度来降低训练代价。比如,可以将每$p$层分为一组,之后动态线性层聚合只在不同组之间进行。这样,通过调节$p$值的大小可以控制神经网络中连接的稠密程度,作为一种训练代价与翻译性能之间的权衡。显然,标准的Transformer模型\upcite{vaswani2017attention} 和DLCL模型\upcite{WangLearning}都可以看作是该方法的一种特例。如图\ref{fig:15-16}所示:当$p=1$时,每一个单独的块被看作一个独立的组,它等价于基于动态层聚合的DLCL模型;当$p=\infty$时,它等价于正常的Transformer模型。值得注意的是,如果配合渐进式训练。在分组稠密连接中可以设置$p$等于模型层数。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
\centering \centering
...@@ -769,6 +769,8 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i) ...@@ -769,6 +769,8 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\end{figure} \end{figure}
%------------------------------------------- %-------------------------------------------
\parinterval 缓解这个问题的一种方法是使用更稀疏的层间连接方式。其核心思想与DLCL是类似的,不同点在于可以通过调整层之间连接的稠密程度来降低训练代价。比如,可以将每$p$层分为一组,之后DLCL只在不同组之间进行。这样,通过调节$p$值的大小可以控制神经网络中连接的稠密程度,作为一种训练代价与翻译性能之间的权衡。显然,标准的Transformer模型\upcite{vaswani2017attention} 和DLCL模型\upcite{WangLearning}都可以看作是该方法的一种特例。如图\ref{fig:15-16}所示:当$p=1$时,每一个单独的块被看作一个独立的组,它等价于基于动态层聚合的DLCL模型;当$p=\infty$时,它等价于正常的Transformer模型。值得注意的是,如果配合渐进式训练,则在分组稠密连接中可以设置$p$等于模型层数。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION % NEW SUBSUB-SECTION
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
...@@ -777,18 +779,18 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i) ...@@ -777,18 +779,18 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\parinterval 尽管渐进式训练策略与分组稠密连接结构都可以加速深层模型的训练,但使用传统的学习率衰减策略会导致训练深层模型时的学习率较小,因此模型无法快速地达到收敛状态,同时也影响最终的模型性能。 \parinterval 尽管渐进式训练策略与分组稠密连接结构都可以加速深层模型的训练,但使用传统的学习率衰减策略会导致训练深层模型时的学习率较小,因此模型无法快速地达到收敛状态,同时也影响最终的模型性能。
\parinterval\ref{fig:15-17}中的红色曲线描绘了在WMT英德翻译任务上标准Transformer模型的学习率曲线,可以看到当模型训练到40k步时,学习率对比峰值有明显的差距,而此时刚开始训练最终的深层模型,过小的学习率并不利于后期深层网络的充分训练。 \parinterval\ref{fig:15-17}对比了使用学习率重置与不使用学习率重置的学习率曲线,其中的红色曲线描绘了在WMT英德翻译任务上标准Transformer模型的学习率曲线,可以看到当模型训练到40k步时,学习率对比峰值有明显的差距,而此时刚开始训练最终的深层模型,过小的学习率并不利于后期深层网络的充分训练。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
\centering \centering
\input{./Chapter15/Figures/figure-learning-rate} \input{./Chapter15/Figures/figure-learning-rate}
\caption{学习率重置vs从头训练的学习率曲线} \caption{学习率重置vs不使用学习率重置的学习率曲线}
\label{fig:15-17} \label{fig:15-17}
\end{figure} \end{figure}
%------------------------------------------- %-------------------------------------------
\parinterval 针对该问题的一个解决方案是修改学习率曲线的衰减策略,如图\ref{fig:15-17}所示。图中蓝色的曲线是修改后的学习率曲线。首先在训练的初期让模型快速地达到学习率的峰值(线性递增),之后的每一次增加$l$层神经网络时,都会将当前的学习率值重置到峰值点。之后,根据训练的步数对其进行相应的衰减。具体的步骤如下: \parinterval 针对该问题的一个解决方案是修改学习率曲线的衰减策略,如图\ref{fig:15-17}所示。图中蓝色的曲线是修改后的学习率曲线。首先在训练的初期让模型快速地达到学习率的峰值(线性递增),之后神经网络的深度每增加$l$时,都会将当前的学习率值重置到峰值点。之后,根据训练的步数对其进行相应的衰减。具体的步骤如下:
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
...@@ -808,7 +810,7 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5} ...@@ -808,7 +810,7 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5}
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
\parinterval 综合使用渐进式训练、分组稠密连接、学习率重置策略可以保证在翻译品质不变的前提下,缩减近$40\%$的训练时间\upcite{li2020shallow}。同时,伴随着模型的加深与数据集的增大加速比也会进一步地增大。 \parinterval 综合使用渐进式训练、分组稠密连接、学习率重置策略可以在翻译品质不变的前提下,缩减近$40\%$的训练时间\upcite{li2020shallow}。同时,伴随着模型的加深与数据集的增大,由上述方法带来的加速比也会进一步地增大。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SECTION % NEW SUB-SECTION
...@@ -819,13 +821,13 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5} ...@@ -819,13 +821,13 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5}
\parinterval 伴随着网络的加深,模型的训练还会面临另外一个比较严峻的问题\ \dash \ 过拟合。由于参数量的增大,深层模型的输入与输出分布之间的差异也会越来越大,然而不同子层之间的相互适应也会更加的明显,这将导致任意子层网络对其他子层的依赖过大。这种现象在训练阶段是有帮助的,因为不同子层可以协同工作从而更好地拟合训练数据。然而这种方式也降低了模型的泛化能力,即深层模型更容易陷入过拟合问题。 \parinterval 伴随着网络的加深,模型的训练还会面临另外一个比较严峻的问题\ \dash \ 过拟合。由于参数量的增大,深层模型的输入与输出分布之间的差异也会越来越大,然而不同子层之间的相互适应也会更加的明显,这将导致任意子层网络对其他子层的依赖过大。这种现象在训练阶段是有帮助的,因为不同子层可以协同工作从而更好地拟合训练数据。然而这种方式也降低了模型的泛化能力,即深层模型更容易陷入过拟合问题。
\parinterval 通常,可以使用Dropout手段用来缓解过拟合问题(见{\chapterthirteen})。不幸的是,尽管目前Transformer模型使用了多种Dropout手段(如Residual Dropout、Attention Dropout、 ReLU Dropout等),过拟合问题在深层模型中仍然存在。从图\ref{fig:15-18}中可以看到,深层模型比浅层模型在训练集和校验集的困惑度上都有明显的优势,然而模型在训练一段时间后出现校验集困惑度上涨的现象,说明模型已经过拟合于训练数据。 \parinterval 通常,可以使用Dropout手段用来缓解过拟合问题(见{\chapterthirteen})。不幸的是,尽管目前Transformer模型使用了多种Dropout手段(如Residual Dropout、Attention Dropout、 ReLU Dropout等),过拟合问题在深层模型中仍然存在。\ref{fig:15-18}展示了WMT16英德翻译任务的校验集与训练集的困惑度,从中可以看到,图\ref{fig:15-18}(a)所示的深层模型相比于图\ref{fig:15-18}(b)所示的浅层模型来说,深层模型在训练集和校验集的困惑度上都有明显的优势,然而模型在训练一段时间后出现校验集困惑度上涨的现象,说明模型已经过拟合于训练数据。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
\centering \centering
\input{./Chapter15/Figures/figure-wmt16} \input{./Chapter15/Figures/figure-wmt16}
\caption{浅层模型(左)与深层模型(右)在WMT16英德翻译任务的校验集与训练集的困惑度} \caption{模型在WMT16英德翻译任务上的校验集与训练集的困惑度}
\label{fig:15-18} \label{fig:15-18}
\end{figure} \end{figure}
%------------------------------------------- %-------------------------------------------
...@@ -937,7 +939,7 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5} ...@@ -937,7 +939,7 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5}
\textrm{“私/は/緑茶/を/飲んでいます。”} \nonumber \textrm{“私/は/緑茶/を/飲んでいます。”} \nonumber
\end{equation} \end{equation}
\parinterval 在标准的英语到日语的翻译中,英语短语“a cup of green tea”只会被翻译为“緑茶”一词。在加入句法树后,“a cup of green tea”会作为树中一个节点,这样可以更容易英语短语作为一个整体进行翻译。 \parinterval 在标准的英语到日语的翻译中,英语短语“a cup of green tea”只会被翻译为“緑茶”一词。在加入句法树后,“a cup of green tea”会作为树中一个节点,这样可以更容易地把这个英语短语作为一个整体进行翻译。
\parinterval 只是,这种自底向上的树结构表示方法也存在问题:每个树节点的状态并不能包含树中其它位置的信息。也就是说,从每个节点上看,其表示结果没有很好地利用句法树中的上下文信息。因此,可以同时使用自下而上和自上而下的信息传递方式进行句法树的表示\upcite{Yang2017TowardsBH,DBLP:conf/acl/ChenHCC17},这样增加了树中每个节点对其覆盖的子树以及周围上下文的建模能力。如图\ref{fig:15-21} 所示,$\mathbi{h}^\textrm{up}$$\mathbi{h}^\textrm{down}$分别代表向上传输节点和向下传输节点的状态,虚线框代表了$\mathbi{h}^\textrm{up}$$\mathbi{h}^\textrm{down}$会拼接到一起,并作为这个节点的整体表示参与注意力模型的计算。显然,自下而上的传递,可以保证句子的浅层信息(如短距离词汇搭配)被传递给上层节点,而自上而下的传递,可以保证句子上层结构的抽象被有效地传递给下层节点。这样,每个节点就同时含有浅层和深层句子表示的信息。 \parinterval 只是,这种自底向上的树结构表示方法也存在问题:每个树节点的状态并不能包含树中其它位置的信息。也就是说,从每个节点上看,其表示结果没有很好地利用句法树中的上下文信息。因此,可以同时使用自下而上和自上而下的信息传递方式进行句法树的表示\upcite{Yang2017TowardsBH,DBLP:conf/acl/ChenHCC17},这样增加了树中每个节点对其覆盖的子树以及周围上下文的建模能力。如图\ref{fig:15-21} 所示,$\mathbi{h}^\textrm{up}$$\mathbi{h}^\textrm{down}$分别代表向上传输节点和向下传输节点的状态,虚线框代表了$\mathbi{h}^\textrm{up}$$\mathbi{h}^\textrm{down}$会拼接到一起,并作为这个节点的整体表示参与注意力模型的计算。显然,自下而上的传递,可以保证句子的浅层信息(如短距离词汇搭配)被传递给上层节点,而自上而下的传递,可以保证句子上层结构的抽象被有效地传递给下层节点。这样,每个节点就同时含有浅层和深层句子表示的信息。
...@@ -956,7 +958,7 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5} ...@@ -956,7 +958,7 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5}
\subsubsection{2. 基于句法特征的编码} \subsubsection{2. 基于句法特征的编码}
\parinterval 不同于直接对树结构进行编码,另一种方法是将单词、句法信息等直接转换为特征向量拼接到一起,作为机器翻译系统的输入\upcite{DBLP:conf/wmt/SennrichH16}。这种方法的优点在于,句法信息可以无缝融入到现有神经机器翻译框架,对系统结构的修改很小。以基于循环神经网络的翻译模型为例,可以用如下方式计算输入序列第$i$个位置的表示结果: \parinterval 除了直接对树结构进行编码以外,将单词、句法信息等直接转换为特征向量拼接到一起,作为机器翻译系统的输入也是一种在编码器中使用句法信息的方法\upcite{DBLP:conf/wmt/SennrichH16}。这种方法的优点在于,句法信息可以无缝融入到现有神经机器翻译框架,对系统结构的修改很小。以基于循环神经网络的翻译模型为例,可以用如下方式计算输入序列第$i$个位置的表示结果:
\begin{eqnarray} \begin{eqnarray}
\mathbi{h}_i &=& \textrm{tanh}(\mathbi{W}(\|_{k=1}^{F}\mathbi{E}_k x_{ik}) + \mathbi{U}\mathbi{h}_{i-1}) \mathbi{h}_i &=& \textrm{tanh}(\mathbi{W}(\|_{k=1}^{F}\mathbi{E}_k x_{ik}) + \mathbi{U}\mathbi{h}_{i-1})
\label{eq:15-55} \label{eq:15-55}
...@@ -964,7 +966,7 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5} ...@@ -964,7 +966,7 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5}
\noindent 其中,$\mathbi{W}$$\mathbi{U}$是线性变换矩阵,$F$代表了特征的数量;而$\mathbi{E}_k$是一个特征嵌入矩阵,它记录了第$k$个特征不同取值对应的分布式表示;$x_{ik}$ 代表了第$i$ 个词在第$k$ 个特征上的取值,于是$\mathbi{E}_k x_{ik}$就得到所激活特征的嵌入结果。$\|$操作为拼接操作,它将所有特征的嵌入结果拼接为一个向量。这种方法十分灵活,可以很容易地融合不同句法特征,例如,词根、子词、形态、词性以及依存关系等。 \noindent 其中,$\mathbi{W}$$\mathbi{U}$是线性变换矩阵,$F$代表了特征的数量;而$\mathbi{E}_k$是一个特征嵌入矩阵,它记录了第$k$个特征不同取值对应的分布式表示;$x_{ik}$ 代表了第$i$ 个词在第$k$ 个特征上的取值,于是$\mathbi{E}_k x_{ik}$就得到所激活特征的嵌入结果。$\|$操作为拼接操作,它将所有特征的嵌入结果拼接为一个向量。这种方法十分灵活,可以很容易地融合不同句法特征,例如,词根、子词、形态、词性以及依存关系等。
\parinterval 另一种方式是将句法信息的表示转化为基于序列的编码,之后与原始的词串融合。这样做的好处在于,并不需要使用基于树结构的编码器,而是直接复用基于序列的编码器即可。而句法信息可以在对句法树的序列化表示中学习得到。如图\ref{fig:15-22}(a) 所示,对于英语句子“I love dogs”,可以得到如图\ref{fig:15-22}(a) 所示的句法树。这里,使用$w_i$ 表示第$i$ 个单词,如图\ref{fig:15-22}(b) 所示。通过对句法树进行先序遍历,可以得到句法树节点的序列$\{l_1,...,l_T\}$,其中$T$表示句法树中节点的个数,$l_j$表示树中的第$j$个节点,如图\ref{fig:15-22}(c)所示。 \parinterval 此外,还可以将句法信息的表示转化为基于序列的编码,之后与原始的词串融合。这样做的好处在于,并不需要使用基于树结构的编码器,而是直接复用基于序列的编码器即可。而句法信息可以在对句法树的序列化表示中学习得到。如图\ref{fig:15-22}(a) 所示,对于英语句子“I love dogs”,可以得到如图\ref{fig:15-22}(a) 所示的句法树。这里,使用$w_i$ 表示第$i$ 个单词,如图\ref{fig:15-22}(b) 所示。通过对句法树进行先序遍历,可以得到句法树节点的序列$\{l_1,...,l_T\}$,其中$T$表示句法树中节点的个数,$l_j$表示树中的第$j$个节点,如图\ref{fig:15-22}(c)所示。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -1013,7 +1015,7 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5} ...@@ -1013,7 +1015,7 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5}
\subsection{解码器使用句法信息}\label{subsec-15.3.2} \subsection{解码器使用句法信息}\label{subsec-15.3.2}
\parinterval 在解码器中使用句法信息,一种最直接的方式是将目标语言句法树结构进行线性化,然后目标语言句子就变成了一个含有句法标记和单词的混合序列。这样,神经机器翻译系统不需要进行修改,可以直接使用句法树序列化的结果进行训练和推断\upcite{Aharoni2017TowardsSN}。图\ref{fig:15-24}展示了一个目标语言句法树经过线性化后的结果。 \parinterval 为了在解码器中使用句法信息,一种最直接的方式是将目标语言句法树结构进行线性化,线性化后的目标语言句子就变成了一个含有句法标记和单词的混合序列。这样,神经机器翻译系统不需要进行修改,可以直接使用句法树序列化的结果进行训练和推断\upcite{Aharoni2017TowardsSN}。图\ref{fig:15-24}展示了一个目标语言句法树经过线性化后的结果。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -1039,13 +1041,14 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5} ...@@ -1039,13 +1041,14 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5}
\end{figure} \end{figure}
%------------------------------------------- %-------------------------------------------
\parinterval 不过,融合树结构和目标语言词串的方法也存在问题:它会导致目标语言端的序列过长,使得模型难以训练。为了缓解这个问题,可以使用两个模型,一个生成句子,另一个生成树结构\upcite{DBLP:conf/acl/WuZYLZ17,DBLP:journals/corr/abs-1808-09374}。以生成目标语言依存树为例,生成依存树的模型仍然是一个移进-规约序列的生成模型,称为动作模型。另一个模型负责预测目标语言词序列,称为词预测模型,它只有在第一个模型进行移位操作的时候才会预测一下词,同时会将当前词的状态送入到第一个模型中。整个过程如图\ref{fig:15-26}所示,这里使用循环神经网络构建了动作模型和词预测模型。$\mathbi{h}_i^\textrm{action}$ 表示动作模型的隐藏层状态,$\mathbi{h}_i^\textrm{word}$表示词预测模型的隐藏层状态。动作模型会结合词预测模型的状态预测出“移位”,“左规约”,“右规约”三种动作,只有当动作模型预测出“移位”操作时,词预测模型才会预测下一时刻的词语;而动作模型预测“左规约”和“右规约”相当于完成了依存关系的预测(依存树见图\ref{fig:15-26}右侧)。最后词预测模型预测出结束符号<eos> 时,整个过程结束。 \parinterval 不过,融合树结构和目标语言词串的方法也存在问题:它会导致目标语言端的序列过长,使得模型难以训练。为了缓解这个问题,可以使用两个模型,一个生成句子,另一个生成树结构\upcite{DBLP:conf/acl/WuZYLZ17,DBLP:journals/corr/abs-1808-09374}。以生成目标语言依存树为例,生成依存树的模型是一个生成移进-规约序列的生成模型,称为动作模型。另一个模型负责预测目标语言词序列,称为词预测模型,它只有在第一个模型进行移位操作的时候才会预测一下词,同时会将当前词的状态送入到第一个模型中。整个过程如图\ref{fig:15-26}所示,这里使用循环神经网络构建了动作模型和词预测模型。$\mathbi{h}_i^\textrm{action}$ 表示动作模型的隐藏层状态,$\mathbi{h}_i^\textrm{word}$表示词预测模型的隐藏层状态。动作模型会结合词预测模型的状态预测出“移位”,“左规约”,“右规约”三种动作,只有当动作模型预测出“移位”操作时,词预测模型才会预测下一时刻的词语;而动作模型预测“左规约”和“右规约”相当于完成了依存关系的预测(依存树见图\ref{fig:15-26}右侧)。最后词预测模型预测出结束符号<eos> 时,整个过程结束。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
\centering \centering
\input{./Chapter15/Figures/figure-parallel-RNN-structure} \input{./Chapter15/Figures/figure-parallel-RNN-structure}
\caption{词预测模型和动作模型} \caption{词预测模型和动作模型}
\setlength{\abovecaptionskip}{-1em}
\label{fig:15-26} \label{fig:15-26}
\end{figure} \end{figure}
%------------------------------------------- %-------------------------------------------
...@@ -1065,10 +1068,14 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5} ...@@ -1065,10 +1068,14 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5}
% NEW SUB-SECTION % NEW SUB-SECTION
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
\subsection{神经网络结构搜索} \subsection{网络结构搜索}
\parinterval 网络结构搜索属于{\small\bfnew{自动机器学习}}\index{自动机器学习}(Automated Machine Learning)\index{Automated Machine Learning}的范畴,其目的是根据对应任务上的数据找到最合适的模型结构。在这个过程中,模型结构就像神经网络中的参数一样被自动地学习出来。图\ref{fig:15-27}(a) 展示了人工设计的Transformer编码器的局部结构,图\ref{fig:15-27}(b) 给出对该结构使用进化算法优化后得到的结构\upcite{DBLP:conf/icml/SoLL19}。可以看到,使用网络结构搜索方法得到的模型中,出现了与人工设计的结构不同的跨层连接,同时还搜索到了全新的多分支结构,这种结构也是人工不易设计出来的。 \parinterval 网络结构搜索属于{\small\bfnew{自动机器学习}}\index{自动机器学习}(Automated Machine Learning)\index{Automated Machine Learning}的范畴,其目的是根据对应任务上的数据找到最合适的模型结构。在这个过程中,模型结构就像神经网络中的参数一样被自动地学习出来。图\ref{fig:15-27}(a) 展示了人工设计的Transformer编码器的局部结构,图\ref{fig:15-27}(b) 给出对该结构使用进化算法优化后得到的结构\upcite{DBLP:conf/icml/SoLL19}。可以看到,使用网络结构搜索方法得到的模型中,出现了与人工设计的结构不同的跨层连接,同时还搜索到了全新的多分支结构,这种结构也是人工不易设计出来的。
\parinterval 那么网络结构搜索究竟是一种什么样的技术呢?如图\ref{fig:15-28}所示,在传统机器学习方法中,研究人员需要设计大量的特征来描述待解决的问题,即“特征工程”。在深度学习时代,神经网络模型可以完成特征的抽取和学习,但是却需要人工设计神经网络结构,这项工作仍然十分繁重。因此一些科研人员开始思考,能否将设计模型结构的工作也交由机器自动完成?深度学习方法中模型参数能够通过梯度下降等方式进行自动优化,那么模型结构是否可以也看做是一种特殊的参数,使用搜索算法自动找到最适用于当前任务的模型结构?基于上述想法,网络结构搜索应运而生。
\parinterval 早在上世纪八十年代,研究人员就开始使用进化算法对神经网络结构进行设计\upcite{DBLP:conf/icga/MillerTH89},也引发了之后的很多探索\upcite{koza1991genetic,DBLP:conf/nips/HarpSG89,DBLP:journals/compsys/Kitano90}。近些年,随着深度学习技术的发展,网络结构搜索技术在很多任务中受到关注。例如,网络结构搜索就很好地应用在语言建模上,并取得了很好的结果\upcite{DBLP:conf/iclr/LiuSY19,DBLP:conf/acl/LiHZXJXZLL20,DBLP:conf/emnlp/JiangHXZZ19}。下面将对网络结构搜索的基本方法和其在机器翻译中的应用进行介绍。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
\centering \centering
...@@ -1078,8 +1085,6 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5} ...@@ -1078,8 +1085,6 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5}
\end{figure} \end{figure}
%------------------------------------------- %-------------------------------------------
\parinterval 那么网络结构搜索究竟是一种什么样的技术呢?如图\ref{fig:15-28}所示,在传统机器学习方法中,研究人员需要设计大量的特征来描述待解决的问题,即“特征工程”。在深度学习时代,神经网络模型可以完成特征的抽取和学习,但是却需要人工设计神经网络结构,这项工作仍然十分繁重。因此一些科研人员开始思考,能否将设计模型结构的工作也交由机器自动完成?深度学习方法中模型参数能够通过梯度下降等方式进行自动优化,那么模型结构是否可以也看做是一种特殊的参数,使用搜索算法自动找到最适用于当前任务的模型结构?基于上述想法,网络结构搜索应运而生。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
\centering \centering
...@@ -1089,28 +1094,25 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5} ...@@ -1089,28 +1094,25 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5}
\end{figure} \end{figure}
%------------------------------------------- %-------------------------------------------
\parinterval 早在上世纪八十年代,研究人员就开始使用进化算法对神经网络结构进行设计\upcite{DBLP:conf/icga/MillerTH89},也引发了之后的很多探索\upcite{koza1991genetic,DBLP:conf/nips/HarpSG89,DBLP:journals/compsys/Kitano90}。近些年,随着深度学习技术的发展,网络结构搜索技术在很多任务中受到关注。例如,网络结构搜索就很好地应用在语言建模上,并取得了很好的结果\upcite{DBLP:conf/iclr/LiuSY19,DBLP:conf/acl/LiHZXJXZLL20,DBLP:conf/emnlp/JiangHXZZ19}。下面将对网络结构搜索的基本方法和其在机器翻译中的应用进行介绍。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SECTION % NEW SUB-SECTION
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
\subsection{结构搜索的基本方法} \subsection{网络结构搜索的基本方法}
\parinterval 对于网络结构搜索任务来说,目标是通过数据驱动的方式自动地找到最合适的模型结构。以有监督学习为例,给定训练集合$\{(\mathbi{x}_{1},\mathbi{y}_{1}),\ldots,(\mathbi{x}_{n},\mathbi{y}_{n})\}$(其中$\mathbi{x}_{i}$表示的是第$i$个样本的输入,$\mathbi{y}_{i}$表示该样本的答案,并假设$\mathbi{x}_{i}$$\mathbi{y}_{i}$均为向量表示),网络结构搜索过程可以被建模为根据数据找到最佳模型结构$\hat{a}$的过程,如下所示: \parinterval 对于网络结构搜索任务来说,目标是通过数据驱动的方式自动地找到最合适的模型结构。以有监督学习为例,给定训练集合$\{(\mathbi{x}_{1},\mathbi{y}_{1}),\ldots,(\mathbi{x}_{n},\mathbi{y}_{n})\}$(其中$\mathbi{x}_{i}$表示的是第$i$个样本的输入,$\mathbi{y}_{i}$表示该样本的答案,并假设$\mathbi{x}_{i}$$\mathbi{y}_{i}$均为向量表示),网络结构搜索过程可以被建模为根据数据找到最佳模型结构$\hat{a}$的过程,如下所示:
\begin{eqnarray} \begin{eqnarray}
\hat{a} &=& \arg\max_{a}\sum_{i=1}^{n}{\funp{P}(\mathbi{y}_{i}|\mathbi{x}_{i};a)} \hat{a} &=& \arg\max_{a}\sum_{i=1}^{n}{\funp{P}(\mathbi{y}_{i}|\mathbi{x}_{i};a)}
\label{eq:15-57} \label{eq:15-57}
\end{eqnarray} \end{eqnarray}
\noindent 其中,$\funp{P}(\mathbi{y}_{i}|\mathbi{x}_{i};a)$为模型$a$观察到数据$\mathbi{x}_{i}$后预测$\mathbi{y}_{i}$的概率,而模型结构$a$本身可以看作是输入$\mathbi{x}$到输出$\mathbi{y}$ 的映射函数。图\ref{fig:15-29}展示了神经网络结构搜索方法的主要流程,其中包括三个部分:设计搜索空间、选择搜索策略以及进行性能评估,下面将对上述各个部分进行简要介绍。 \noindent 其中,$\funp{P}(\mathbi{y}_{i}|\mathbi{x}_{i};a)$为模型$a$观察到数据$\mathbi{x}_{i}$后预测$\mathbi{y}_{i}$的概率,而模型结构$a$本身可以看作是输入$\mathbi{x}$到输出$\mathbi{y}$ 的映射函数。图\ref{fig:15-29}展示了网络结构搜索方法的主要流程,其中包括三个部分:设计搜索空间、选择搜索策略以及进行性能评估,下面将对上述各个部分进行简要介绍。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
\centering \centering
\input{./Chapter15/Figures/figure-main-flow-of-neural-network-structure-search} \input{./Chapter15/Figures/figure-main-flow-of-neural-network-structure-search}
\caption{神经网络结构搜索的主要流程} \caption{网络结构搜索的主要流程}
\label{fig:15-29} \label{fig:15-29}
\end{figure} \end{figure}
%------------------------------------------- %-------------------------------------------
...@@ -1126,7 +1128,8 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5} ...@@ -1126,7 +1128,8 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5}
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
\centering \centering
\includegraphics[scale=0.5]{./Chapter15/Figures/figure-relationship-between-structures-in-structural-space.jpg} \vspace{-5em}
\input{./Chapter15/Figures/figure-relationship-between-structures-in-structural-space}
\caption{结构空间内结构之间的关系} \caption{结构空间内结构之间的关系}
\label{fig:15-30} \label{fig:15-30}
\end{figure} \end{figure}
...@@ -1152,7 +1155,7 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5} ...@@ -1152,7 +1155,7 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5}
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
\item {\small\bfnew{进化算法}}。进化算法最初被用来对神经网络模型结构、以及其中的权重参数进行优化\upcite{DBLP:conf/icga/MillerTH89,DBLP:journals/tnn/AngelineSP94,stanley2002evolving}。随着最优化算法的发展,近年来,对于网络参数的学习开始更多地采用梯度下降的方式,但是进化算法依旧被用于对模型结构进行优化\upcite{DBLP:conf/icml/RealMSSSTLK17,DBLP:conf/iclr/ElskenMH19,DBLP:conf/iclr/LiuSVFK18}。从结构优化的角度来说,一般是将模型结构看做遗传算法中种群的个体,使用轮盘赌或锦标赛等抽取方式,对种群中的结构进行取样作为亲本,之后通过亲本模型的突变产生新的模型结构,最终对这些新的模型结构进行适应度评估。根据模型结构在校验集上的性能确定是否将其加入种群。 \item {\small\bfnew{进化算法}}。进化算法最初被用来对神经网络模型结构、以及其中的权重参数进行优化\upcite{DBLP:conf/icga/MillerTH89,DBLP:journals/tnn/AngelineSP94,stanley2002evolving}。随着最优化算法的发展,近年来,对于网络参数的学习开始更多地采用梯度下降的方式,但是进化算法依旧被用于对模型结构进行优化\upcite{DBLP:conf/icml/RealMSSSTLK17,DBLP:conf/iclr/ElskenMH19,DBLP:conf/iclr/LiuSVFK18}。从结构优化的角度来说,一般是将模型结构看做遗传算法中种群的个体,使用轮盘赌或锦标赛等抽取方式,对种群中的结构进行取样并将取样得到的结构作为亲本,之后通过亲本模型的突变产生新的模型结构,最终对这些新的模型结构进行适应度评估。根据模型结构在校验集上的性能确定是否将其加入种群。
\vspace{0.5em} \vspace{0.5em}
\item {\small\bfnew{强化学习}}。强化学习方法在{\chapterthirteen}已经进行了介绍,这里可以将神经网络结构的设计看做是一种序列生成任务,使用字符序列对网络结构进行表述\upcite{DBLP:conf/iclr/ZophL17}。这种方法的执行过程如图\ref{fig:15-33}所示。其执行过程为由智能体对模型结构进行生成,之后将生成的结构应用于对应的任务(如机器翻译、语言建模等),根据模型在对应任务中的输出以及表现水平来进一步对智能体进行反馈,促使智能体生成更适用于当前任务的模型结构。 \item {\small\bfnew{强化学习}}。强化学习方法在{\chapterthirteen}已经进行了介绍,这里可以将神经网络结构的设计看做是一种序列生成任务,使用字符序列对网络结构进行表述\upcite{DBLP:conf/iclr/ZophL17}。这种方法的执行过程如图\ref{fig:15-33}所示。其执行过程为由智能体对模型结构进行生成,之后将生成的结构应用于对应的任务(如机器翻译、语言建模等),根据模型在对应任务中的输出以及表现水平来进一步对智能体进行反馈,促使智能体生成更适用于当前任务的模型结构。
...@@ -1202,9 +1205,9 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5} ...@@ -1202,9 +1205,9 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5}
% NEW SUB-SECTION % NEW SUB-SECTION
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
\subsection{机器翻译任务下的结构搜索} \subsection{机器翻译任务下的网络结构搜索}
\parinterval 对于自然语言处理任务来说,网络结构搜索方法更多是在语言建模、命名实体识别等任务上进行尝试\upcite{DBLP:conf/acl/LiHZXJXZLL20,DBLP:conf/emnlp/JiangHXZZ19}。其中,大多数工作是在基于循环神经网络的模型结构上进行探索的,相较于目前在机器翻译领域中广泛使用的Transformer模型结构来说,这些搜索到的结构在性能上并没有体现出绝对的优势。此外,由于机器翻译任务的复杂性,针对基于Transformer的机器翻译模型的结构搜索方法会更少一些。不过仍有部分工作在机器翻译任务上取得了很好的表现。例如,在WMT19机器翻译比赛中,神经网络结构优化方法在多个任务上取得了很好的成绩\upcite{DBLP:conf/nips/LuoTQCL18,DBLP:conf/wmt/XiaTTGHCFGLLWWZ19}。对于结构搜索在机器翻译领域的应用,目前主要包括两个方面:分别是对模型性能的改进以及模型效率的优化。 \parinterval 对于自然语言处理任务来说,大多数网络结构搜索方法选择在语言建模、命名实体识别等任务上进行尝试\upcite{DBLP:conf/acl/LiHZXJXZLL20,DBLP:conf/emnlp/JiangHXZZ19}。其中,大多数工作是在基于循环神经网络的模型结构上进行探索的,相较于目前在机器翻译领域中广泛使用的Transformer模型结构来说,这些搜索到的结构在性能上并没有体现出绝对的优势。此外,由于机器翻译任务的复杂性,针对基于Transformer的机器翻译模型的结构搜索方法会更少一些。不过仍有部分工作在机器翻译任务上取得了很好的表现。例如,在WMT19机器翻译比赛中,神经网络结构优化方法在多个任务上取得了很好的成绩\upcite{DBLP:conf/nips/LuoTQCL18,DBLP:conf/wmt/XiaTTGHCFGLLWWZ19}。对于结构搜索在机器翻译领域的应用,目前主要包括两个方面:分别是对模型性能的改进以及模型效率的优化。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION % NEW SUBSUB-SECTION
...@@ -1225,7 +1228,7 @@ f(x) &=& x \cdot \delta(\beta x) \\ ...@@ -1225,7 +1228,7 @@ f(x) &=& x \cdot \delta(\beta x) \\
\noindent 相比于人工设计的激活函数ReLU而言,Swish函数在多个机器翻译任务取得了不错的效果。 \noindent 相比于人工设计的激活函数ReLU而言,Swish函数在多个机器翻译任务取得了不错的效果。
\vspace{0.5em} \vspace{0.5em}
\item {\small\bfnew{搜索模型中局部结构的组合}}。在基于Transformer模型的网络结构搜索任务中,对于局部结构的组合方式的学习也受到了很多关注,其中包括基于进化算法的方法和基于梯度对现有Transformer模型结构的改良\upcite{DBLP:conf/icml/SoLL19,DBLP:journals/taslp/FanTXQLL20}。与前文所述的对局部结构的改良不同,此处更多地是对现有经验性的局部结构进行组合,找到最佳的整体结构。在模型结构的表示方法上,这些方法会根据先验知识为搜索单元设定一个部分框架,如每当信息传递过来之后先进行层标准化,之后再对候选位置上的操作使用对应的搜索策略进行搜索。另外这类方法也会在Transformer结构中引入多分支结构,一个搜索单元的输出可以被多个后续单元所使用,这种方式有效扩大了结构搜索过程中的搜索空间,能够在现有Transformer结构的基础上找到更优的模型结构。 \item {\small\bfnew{搜索模型中局部结构的组合}}。在基于Transformer模型的网络结构搜索任务中,对于局部结构的组合方式的学习也受到了很多关注,其中包括基于进化算法的方法和基于梯度对现有Transformer模型结构的改良\upcite{DBLP:conf/icml/SoLL19,DBLP:journals/taslp/FanTXQLL20}。与前文所述的对局部结构的改良不同,此处更多地是对现有的人工设计出来的局部结构进行组合,找到最佳的整体结构。在模型结构的表示方法上,这些方法会根据先验知识为搜索单元设定一个部分框架,如每当信息传递过来之后先进行层标准化,之后再对候选位置上的操作使用对应的搜索策略进行搜索。另外这类方法也会在Transformer结构中引入多分支结构,一个搜索单元的输出可以被多个后续单元所使用,这种方式有效扩大了结构搜索过程中的搜索空间,能够在现有Transformer结构的基础上找到更优的模型结构。
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
...@@ -1249,7 +1252,7 @@ f(x) &=& x \cdot \delta(\beta x) \\ ...@@ -1249,7 +1252,7 @@ f(x) &=& x \cdot \delta(\beta x) \\
\parinterval 虽然由于算力等条件的限制,目前很多网络结构搜索方法并没有直接在机器翻译任务中进行实验,但是这些方法并没有被限制在特定任务上。例如,可微分结构搜索方法被成功地用于学习更好的循环单元结构,这类方法完全可以应用在机器翻译任务上。 \parinterval 虽然由于算力等条件的限制,目前很多网络结构搜索方法并没有直接在机器翻译任务中进行实验,但是这些方法并没有被限制在特定任务上。例如,可微分结构搜索方法被成功地用于学习更好的循环单元结构,这类方法完全可以应用在机器翻译任务上。
\parinterval 此外,受到预训练模型的启发,网络结构预搜索可能是一个极具潜力的方向。例如,有研究人员在大规模语言模型上进行网络结构搜索\upcite{DBLP:conf/acl/LiHZXJXZLL20},然后将搜索到的模型结构应用于更多的自然语言处理任务中,这种方式有效提升了模型结构的可复用性。同时,相较于使用特定任务下受限的数据,从大规模单语数据中可以更充分地学习语言的规律,进而更好地指导模型结构的设计。此外,对于机器翻译任务而言,结构的预搜索同样是一个值得关注的研究方向。 \parinterval 此外,受到预训练模型的启发,网络结构预搜索可能是一个极具潜力的方向。例如,有研究人员在大规模语言模型上进行网络结构搜索\upcite{DBLP:conf/acl/LiHZXJXZLL20},然后将搜索到的模型结构应用于更多的自然语言处理任务中,这种方式有效提升了模型结构的可复用性。同时,相较于使用受到特定任务限制的数据,使用大规模的单语数据可以更充分地学习语言的规律,进而更好地指导模型结构的设计。此外,对于机器翻译任务而言,结构的预搜索同样是一个值得关注的研究方向。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SECTION % NEW SECTION
......
...@@ -134,7 +134,7 @@ ...@@ -134,7 +134,7 @@
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
\subsubsection{3. 双语句对挖掘} \subsubsection{3. 双语句对挖掘}
\parinterval 在双语平行语料缺乏的时候,从可比语料中挖掘可用的双语句对也是一种有效的方法\upcite{finding2006adafre,DBLP:journals/coling/MunteanuM05,DBLP:conf/emnlp/WuZHGQLL19}。可比语料是指源语言和目标语言虽然不是完全互译的文本,但是蕴含了丰富的双语对照知识,可以从中挖掘出可用的双语句对来训练。相比双语平行语料来说,可比语料相对容易获取,比如,多种语言报道的新闻事件、多种语言的维基百科词条和多种语言翻译的书籍等。如图\ref{fig:16-4}中的维基百科词条所示 \parinterval 在双语平行语料缺乏的时候,从可比语料中挖掘可用的双语句对也是一种有效的方法\upcite{finding2006adafre,DBLP:journals/coling/MunteanuM05,DBLP:conf/emnlp/WuZHGQLL19}。可比语料是指源语言和目标语言虽然不是完全互译的文本,但是蕴含了丰富的双语对照知识,可以从中挖掘出可用的双语句对来训练。相比双语平行语料来说,可比语料相对容易获取,比如,多种语言报道的新闻事件、多种语言的维基百科词条(图\ref{fig:16-4})和多种语言翻译的书籍等
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -262,7 +262,7 @@ ...@@ -262,7 +262,7 @@
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SECTION 16.2 % NEW SECTION 16.2
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
\sectionnewpage
\section{双向翻译模型} \section{双向翻译模型}
\parinterval 在机器翻译任务中,对于给定的双语数据,可以同时学习源语言到目标语言和目标语言到源语言的翻译模型,因此机器翻译可被视为一种双向任务。那么,两个方向的翻译模型能否联合起来,相辅相成呢?下面将从双向训练和对偶学习两方面对双向翻译模型进行介绍。这些方法被大量使用在低资源翻译系统中,比如,可以用双向翻译模型反复迭代构造伪数据。 \parinterval 在机器翻译任务中,对于给定的双语数据,可以同时学习源语言到目标语言和目标语言到源语言的翻译模型,因此机器翻译可被视为一种双向任务。那么,两个方向的翻译模型能否联合起来,相辅相成呢?下面将从双向训练和对偶学习两方面对双向翻译模型进行介绍。这些方法被大量使用在低资源翻译系统中,比如,可以用双向翻译模型反复迭代构造伪数据。
...@@ -352,6 +352,7 @@ ...@@ -352,6 +352,7 @@
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SECTION % NEW SECTION
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
\sectionnewpage
\section{多语言翻译模型}\label{multilingual-translation-model} \section{多语言翻译模型}\label{multilingual-translation-model}
\parinterval 低资源机器翻译面临的主要挑战是缺乏大规模高质量的双语数据。这个问题往往伴随着多语言的翻译任务\upcite{dabre2020survey}。也就是,要同时开发多个不同语言之间的机器翻译系统,其中少部分语言是富资源语言,而其它语言是低资源语言。针对低资源语言双语数据稀少或者缺失的情况,一种常见的思路是利用富资源语言的数据或者系统帮助低资源机器翻译系统。这也构成了多语言翻译的思想,并延伸出大量的研究工作,其中有三个典型研究方向:基于枢轴语言的方法\upcite{DBLP:journals/mt/WuW07}、 基于知识蒸馏的方法\upcite{DBLP:journals/corr/ChenLCL17}、基于迁移学习的方法\upcite{DBLP:conf/emnlp/KimPPKN19,DBLP:journals/tacl/JohnsonSLKWCTVW17},下面进行介绍。 \parinterval 低资源机器翻译面临的主要挑战是缺乏大规模高质量的双语数据。这个问题往往伴随着多语言的翻译任务\upcite{dabre2020survey}。也就是,要同时开发多个不同语言之间的机器翻译系统,其中少部分语言是富资源语言,而其它语言是低资源语言。针对低资源语言双语数据稀少或者缺失的情况,一种常见的思路是利用富资源语言的数据或者系统帮助低资源机器翻译系统。这也构成了多语言翻译的思想,并延伸出大量的研究工作,其中有三个典型研究方向:基于枢轴语言的方法\upcite{DBLP:journals/mt/WuW07}、 基于知识蒸馏的方法\upcite{DBLP:journals/corr/ChenLCL17}、基于迁移学习的方法\upcite{DBLP:conf/emnlp/KimPPKN19,DBLP:journals/tacl/JohnsonSLKWCTVW17},下面进行介绍。
...@@ -371,7 +372,7 @@ ...@@ -371,7 +372,7 @@
\begin{eqnarray} \begin{eqnarray}
{\funp{P}(\seq{y}|\seq{x})} & = & {\sum_{\seq{p}}{\funp{P}(\seq{p}|\seq{x})\funp{P}(\seq{y}|\seq{p})}} {\funp{P}(\seq{y}|\seq{x})} & = & {\sum_{\seq{p}}{\funp{P}(\seq{p}|\seq{x})\funp{P}(\seq{y}|\seq{p})}}
\label{eq:16-7} \label{eq:16-6}
\end{eqnarray} \end{eqnarray}
\noindent 其中,$\seq{p}$表示一个枢轴语言句子。$\funp{P}(\seq{p}|\seq{x})$$\funp{P}(\seq{y}|\seq{p})$的求解可以直接复用既有的模型和方法。不过,枚举所有的枢轴语言句子$\seq{p}$是不可行的。因此一部分研究工作也探讨了如何选择有效的路径,从$\seq{x}$经过少量$\seq{p}$到达$\seq{y}$\upcite{DBLP:conf/naacl/PaulYSN09} \noindent 其中,$\seq{p}$表示一个枢轴语言句子。$\funp{P}(\seq{p}|\seq{x})$$\funp{P}(\seq{y}|\seq{p})$的求解可以直接复用既有的模型和方法。不过,枚举所有的枢轴语言句子$\seq{p}$是不可行的。因此一部分研究工作也探讨了如何选择有效的路径,从$\seq{x}$经过少量$\seq{p}$到达$\seq{y}$\upcite{DBLP:conf/naacl/PaulYSN09}
...@@ -398,7 +399,7 @@ ...@@ -398,7 +399,7 @@
\begin{figure}[h] \begin{figure}[h]
\centering \centering
\input{Chapter16/Figures/figure-knowledge-distillation-based-translation-process} \input{Chapter16/Figures/figure-knowledge-distillation-based-translation-process}
\caption{基于知识蒸馏的翻译过程} \caption{基于教师-学生框架的翻译过程}
\label{fig:16-12} \label{fig:16-12}
\end{figure} \end{figure}
%---------------------------------------------- %----------------------------------------------
...@@ -407,7 +408,7 @@ ...@@ -407,7 +408,7 @@
\begin{eqnarray} \begin{eqnarray}
{\funp{P}(\seq{y}|\seq{x})} & \approx & {\funp{P}(\seq{y}|\seq{p})} {\funp{P}(\seq{y}|\seq{x})} & \approx & {\funp{P}(\seq{y}|\seq{p})}
\label{eq:16-8} \label{eq:16-7}
\end{eqnarray} \end{eqnarray}
\parinterval 和基于枢轴语言的方法相比,基于知识蒸馏的方法无需训练源语言到枢轴语言的翻译模型,也就无需经历两次翻译过程。不过,基于知识蒸馏的方法仍然需要显性地使用枢轴语言进行桥接,因此仍然面临着“源语言$\to$枢轴语言$\to$目标语言”转换中信息丢失的问题。比如,当枢轴语言到目标语言翻译效果较差时,由于教师模型无法提供准确的指导,学生模型也无法取得很好的学习效果。 \parinterval 和基于枢轴语言的方法相比,基于知识蒸馏的方法无需训练源语言到枢轴语言的翻译模型,也就无需经历两次翻译过程。不过,基于知识蒸馏的方法仍然需要显性地使用枢轴语言进行桥接,因此仍然面临着“源语言$\to$枢轴语言$\to$目标语言”转换中信息丢失的问题。比如,当枢轴语言到目标语言翻译效果较差时,由于教师模型无法提供准确的指导,学生模型也无法取得很好的学习效果。
...@@ -455,7 +456,7 @@ ...@@ -455,7 +456,7 @@
\parinterval {\small\bfnew{多语言单模型方法}}\index{多语言单模型方法}(Multi-lingual Single Model-based Method\index{Multi-lingual Single Model-based Method})也可以被看做是一种迁移学习。多语言单模型方法尤其适用于翻译方向较多的情况,因为为每一个翻译方向单独训练一个模型是不实际的,不仅因为设备资源和时间上的限制,还因为很多翻译方向都没有双语平行数据\upcite{DBLP:journals/tacl/JohnsonSLKWCTVW17,DBLP:conf/lrec/RiktersPK18,dabre2020survey}。比如,要翻译100个语言之间互译的系统,理论上就需要训练$100 \times 99$个翻译模型,代价十分巨大。这时就可以使用多语言单模型方法。 \parinterval {\small\bfnew{多语言单模型方法}}\index{多语言单模型方法}(Multi-lingual Single Model-based Method\index{Multi-lingual Single Model-based Method})也可以被看做是一种迁移学习。多语言单模型方法尤其适用于翻译方向较多的情况,因为为每一个翻译方向单独训练一个模型是不实际的,不仅因为设备资源和时间上的限制,还因为很多翻译方向都没有双语平行数据\upcite{DBLP:journals/tacl/JohnsonSLKWCTVW17,DBLP:conf/lrec/RiktersPK18,dabre2020survey}。比如,要翻译100个语言之间互译的系统,理论上就需要训练$100 \times 99$个翻译模型,代价十分巨大。这时就可以使用多语言单模型方法。
\parinterval 多语言单模型系统是指用单个模型具有多个语言方向翻译的能力。对于源语言集合$\seq{G}_x$和目标语言集合$\seq{G}_y$,多语言单模型的学习目标是学习一个单一的模型,这个模型可以进行任意源语言到任意目标语言的翻译,即同时支持所有$\{(l_x,l_y)|x \in \seq{G}_x,y \in \seq{G}_y)\}$的翻译。多语言单模型方法又可以进一步分为一对多\upcite{DBLP:conf/acl/DongWHYW15}、多对一\upcite{DBLP:journals/tacl/LeeCH17}和多对多\upcite{DBLP:conf/naacl/FiratCB16}的方法。不过这些方法本质上是相同的,因此这里以多对多翻译为例进行介绍。 \parinterval 多语言单模型系统是指具有多个语言方向翻译能力的单模型系统。对于源语言集合$\seq{G}_x$和目标语言集合$\seq{G}_y$,多语言单模型的学习目标是学习一个单一的模型,这个模型可以进行任意源语言到任意目标语言的翻译,即同时支持所有$\{(l_x,l_y)|x \in \seq{G}_x,y \in \seq{G}_y)\}$的翻译。多语言单模型方法又可以进一步分为一对多\upcite{DBLP:conf/acl/DongWHYW15}、多对一\upcite{DBLP:journals/tacl/LeeCH17}和多对多\upcite{DBLP:conf/naacl/FiratCB16}的方法。不过这些方法本质上是相同的,因此这里以多对多翻译为例进行介绍。
\parinterval 在模型结构方面,多语言模型与普通的神经机器翻译模型相同,都是标准的编码器-解码器结构。多语言单模型方法的一个假设是:不同语言可以共享同一个表示空间。因此,该方法使用同一个编码器处理所有的源语言句子,使用同一个解码器处理所有的目标语言句子。为了使多个语言共享同一个解码器(或编码器),一种简单的方法是直接在输入句子上加入语言标记,让模型显性地知道当前句子属于哪个语言。如图\ref{fig:16-15}所示,在此示例中,标记“ <spanish>”表示目标句子为西班牙语,标记“ <german>”表示目标句子为德语,则模型在进行翻译时便会将句子开头加有 “<spanish>”标签的句子翻译为西班牙语\upcite{DBLP:journals/tacl/JohnsonSLKWCTVW17}。假设训练时有英语到西班牙语 “<spanish> Hello”$\to$“Hola”和法语到德语“<german> Bonjour”$\to$“Hallo” 的双语句对,则在解码时候输入英语“<german> Hello”时就会得到解码结果“Hallo”。 \parinterval 在模型结构方面,多语言模型与普通的神经机器翻译模型相同,都是标准的编码器-解码器结构。多语言单模型方法的一个假设是:不同语言可以共享同一个表示空间。因此,该方法使用同一个编码器处理所有的源语言句子,使用同一个解码器处理所有的目标语言句子。为了使多个语言共享同一个解码器(或编码器),一种简单的方法是直接在输入句子上加入语言标记,让模型显性地知道当前句子属于哪个语言。如图\ref{fig:16-15}所示,在此示例中,标记“ <spanish>”表示目标句子为西班牙语,标记“ <german>”表示目标句子为德语,则模型在进行翻译时便会将句子开头加有 “<spanish>”标签的句子翻译为西班牙语\upcite{DBLP:journals/tacl/JohnsonSLKWCTVW17}。假设训练时有英语到西班牙语 “<spanish> Hello”$\to$“Hola”和法语到德语“<german> Bonjour”$\to$“Hallo” 的双语句对,则在解码时候输入英语“<german> Hello”时就会得到解码结果“Hallo”。
%---------------------------------------------- %----------------------------------------------
...@@ -476,7 +477,7 @@ ...@@ -476,7 +477,7 @@
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SECTION 16.4 % NEW SECTION 16.4
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
\sectionnewpage
\section{无监督机器翻译} \section{无监督机器翻译}
\label{sec:unsupervised-nmt} \label{sec:unsupervised-nmt}
...@@ -512,9 +513,9 @@ ...@@ -512,9 +513,9 @@
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
\item {\small\bfnew{基于无监督的分布匹配}}。该步骤利用一些无监督的方法来得到一个包含噪声的初始化词典$D$ \item {\small\bfnew{基于无监督的分布匹配}}。该阶段利用一些无监督的方法来得到一个包含噪声的初始化词典$D$
\vspace{0.5em} \vspace{0.5em}
\item {\small\bfnew{基于有监督的微调}}。利用两个单语词嵌入和第一中学习到的种子字典执行一些对齐算法来迭代微调,例如,{\small\bfnew{普氏分析}}\index{普氏分析}(Procrustes Analysis\index{Procrustes Analysis}\upcite{1966ASchnemann} \item {\small\bfnew{基于有监督的微调}}。利用两个单语词嵌入和第一阶段中学习到的种子字典执行一些对齐算法来迭代微调,例如,{\small\bfnew{普氏分析}}\index{普氏分析}(Procrustes Analysis\index{Procrustes Analysis}\upcite{1966ASchnemann}
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
...@@ -554,9 +555,9 @@ ...@@ -554,9 +555,9 @@
\begin{eqnarray} \begin{eqnarray}
\widehat{\mathbi{W}} & = & \argmin_{\mathbi{W} \in O_{d}(\mathbb{R})}{\|\mathbi{W} \mathbi{X}'- \mathbi{Y}' \|_{\mathrm{F}}} \nonumber \\ \widehat{\mathbi{W}} & = & \argmin_{\mathbi{W} \in O_{d}(\mathbb{R})}{\|\mathbi{W} \mathbi{X}'- \mathbi{Y}' \|_{\mathrm{F}}} \nonumber \\
& = & \mathbi{U} \mathbi{V}^{\rm{T}} \\ \label{eq:16-9} & = & \mathbi{U} \mathbi{V}^{\rm{T}} \\ \label{eq:16-8}
\textrm{s.t.\ \ \ \ } \mathbi{U} \Sigma \mathbi{V}^{\rm{T}} &= &\operatorname{SVD}\left(\mathbi{Y}' \mathbi{X}'^{\rm{T}}\right) \textrm{s.t.\ \ \ \ } \mathbi{U} \Sigma \mathbi{V}^{\rm{T}} &= &\operatorname{SVD}\left(\mathbi{Y}' \mathbi{X}'^{\rm{T}}\right)
\label{eq:16-10} \label{eq:16-9}
\end{eqnarray} \end{eqnarray}
\noindent 其中, $\|\cdot\|_{\mathrm{F}}$表示矩阵的Frobenius范数,即矩阵元素绝对值的平方和再开方,$d$是词嵌入的维度,$O_d(\mathbb{R})$表示$d\times d$的实数空间,$\operatorname{SVD}(\cdot)$表示奇异值分解。利用上式可以获得新的$\mathbi{W}$,通过$\mathbi{W}$可以归纳出新的$D$,如此迭代进行微调最后即可以得到收敛的$D$ \noindent 其中, $\|\cdot\|_{\mathrm{F}}$表示矩阵的Frobenius范数,即矩阵元素绝对值的平方和再开方,$d$是词嵌入的维度,$O_d(\mathbb{R})$表示$d\times d$的实数空间,$\operatorname{SVD}(\cdot)$表示奇异值分解。利用上式可以获得新的$\mathbi{W}$,通过$\mathbi{W}$可以归纳出新的$D$,如此迭代进行微调最后即可以得到收敛的$D$
...@@ -608,7 +609,7 @@ ...@@ -608,7 +609,7 @@
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
\subsubsection{2. 无监督权重调优} \subsubsection{2. 无监督权重调优}
\parinterval 有了短语表之后,剩下的问题是如何在没有双语数据的情况下进行模型调优,从而把短语表、语言模型、调序模型等模块融合起来\upcite{DBLP:conf/acl/Och03}。在统计机器翻译系统中,短语表可以提供短语的翻译,而语言模型可以保证从短语翻译拼装得到的句子的流畅度,因此统计机器翻译模型即使在没有权重调优的基础上也已经具备了一定的翻译能力。所以一个简单而有效的无监督方法就是使用未经过模型调优的统计机器翻译模型进行回译,也就是将目标语言句子翻译成源语言句子后,再将翻译得到的源语句言子当成输入而目标语言句子当成标准答案,完成权重调优。 \parinterval 有了短语表之后,剩下的问题是如何在没有双语数据的情况下进行模型调优,从而把短语表、语言模型、调序模型等模块融合起来\upcite{DBLP:conf/acl/Och03}。在统计机器翻译系统中,短语表可以提供短语的翻译,而语言模型可以保证从短语表中翻译拼装得到的句子的流畅度,因此统计机器翻译模型即使在没有权重调优的基础上也已经具备了一定的翻译能力。所以一个简单而有效的无监督方法就是使用未经过模型调优的统计机器翻译模型进行回译,也就是将目标语言句子翻译成源语言句子后,再将翻译得到的源语句言子当成输入而目标语言句子当成标准答案,完成权重调优。
\parinterval 经过上述的无监督模型调优后,就获得了一个效果更好的翻译模型。这时候,可以使用这个翻译模型去产生质量更高的数据,再用这些数据来继续对翻译模型进行调优,如此反复迭代一定次数后停止。这个方法也被称为{\small\bfnew{迭代优化}}\index{迭代优化}(Iterative Refinement\index{Iterative Refinement}\upcite{DBLP:conf/emnlp/ArtetxeLA18} \parinterval 经过上述的无监督模型调优后,就获得了一个效果更好的翻译模型。这时候,可以使用这个翻译模型去产生质量更高的数据,再用这些数据来继续对翻译模型进行调优,如此反复迭代一定次数后停止。这个方法也被称为{\small\bfnew{迭代优化}}\index{迭代优化}(Iterative Refinement\index{Iterative Refinement}\upcite{DBLP:conf/emnlp/ArtetxeLA18}
...@@ -627,7 +628,7 @@ ...@@ -627,7 +628,7 @@
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
\subsubsection{1. 基于无监督统计机器翻译的方法} \subsubsection{1. 基于无监督统计机器翻译的方法}
\parinterval 一个简单的方法是,借助已经成功的无监督方法来为神经机器翻译模型提供少量双语监督信号。初始的监督信号可能很少或者包含大量噪声,因此需要逐步优化数据来重新训练出更好的模型。这也是目前绝大多数无监督神经机器翻译方法的核心思路。这个方案最简单实现就是借助已经构建的无监督统计机器翻译模型,用它产生伪双语数据来训练神经机器翻译模型 ,然后进行迭代回译来进行数据优化\upcite{DBLP:conf/acl/ArtetxeLA19}。这个方法的优点是直观,并且性能稳定,容易调试(所有模块都互相独立)。缺点是复杂繁琐,涉及许多超参数调整工作,而且训练代价较大。 \parinterval 一个简单的方法是,借助已经成功的无监督方法来为神经机器翻译模型提供少量双语监督信号。初始的监督信号可能很少或者包含大量噪声,因此需要逐步优化数据来重新训练出更好的模型。这也是目前绝大多数无监督神经机器翻译方法的核心思路。这个方案最简单实现就是借助已经构建的无监督统计机器翻译模型,用它产生伪双语数据来训练神经机器翻译模型 ,然后进行迭代回译来进行数据优化\upcite{DBLP:conf/acl/ArtetxeLA19}。这个方法的优点是直观,并且性能稳定,容易调试(所有模块都互相独立)。缺点是复杂繁琐,涉及许多超参数调整工作,而且训练代价较大。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SUB-SECTION % NEW SUB-SUB-SECTION
...@@ -721,7 +722,7 @@ ...@@ -721,7 +722,7 @@
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SECTION 16.5 % NEW SECTION 16.5
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
\sectionnewpage
\section{领域适应} \section{领域适应}
\parinterval 机器翻译常常面临训练时与应用时所处领域不一致的问题,比如,将一个在新闻类数据上训练的翻译系统应用在医学文献翻译任务上。不同领域的句子通常存在着很大的区别,比如,日常用语的结构较为简单,而在化学领域的学术论文中,单词和句子结构较为复杂。此外,不同领域之间存在着较为严重的一词多义问题,即同一个词在不同领域中经常会有不同的含义。实例\ref{eg:16-1}展示了英语单词pitch在不同领域的不同词义。 \parinterval 机器翻译常常面临训练时与应用时所处领域不一致的问题,比如,将一个在新闻类数据上训练的翻译系统应用在医学文献翻译任务上。不同领域的句子通常存在着很大的区别,比如,日常用语的结构较为简单,而在化学领域的学术论文中,单词和句子结构较为复杂。此外,不同领域之间存在着较为严重的一词多义问题,即同一个词在不同领域中经常会有不同的含义。实例\ref{eg:16-1}展示了英语单词pitch在不同领域的不同词义。
...@@ -816,19 +817,19 @@ ...@@ -816,19 +817,19 @@
\begin{eqnarray} \begin{eqnarray}
\funp{L}_{\rm{disc}}& = &-\log\funp{P}(d|\mathbi{H}) \funp{L}_{\rm{disc}}& = &-\log\funp{P}(d|\mathbi{H})
\label{eq:16-12} \label{eq:16-10}
\end{eqnarray} \end{eqnarray}
\noindent 在此基础上,加上原始的翻译模型损失函数$\funp{L}_{\rm{gen}}$ \noindent 在此基础上,加上原始的翻译模型损失函数$\funp{L}_{\rm{gen}}$
\begin{eqnarray} \begin{eqnarray}
\funp{L}_{\rm{gen}}& = & -\log\funp{P}(y|x)\label{eq:16-13} \funp{L}_{\rm{gen}}& = & -\log\funp{P}(y|x)\label{eq:16-11}
\end{eqnarray} \end{eqnarray}
\noindent 最终可以得到融合后的损失函数,如下: \noindent 最终可以得到融合后的损失函数,如下:
\begin{eqnarray} \begin{eqnarray}
\funp{L} & = & \funp{L}_{\rm{disc}}+\funp{L}_{\rm{gen}}\label{eq:16-14} \funp{L} & = & \funp{L}_{\rm{disc}}+\funp{L}_{\rm{gen}}\label{eq:16-12}
\end{eqnarray} \end{eqnarray}
...@@ -872,7 +873,7 @@ ...@@ -872,7 +873,7 @@
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SECTION % NEW SECTION
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
\sectionnewpage
\section{小结及拓展阅读} \section{小结及拓展阅读}
低资源机器翻译是机器翻译大规模应用所面临的挑战之一,因此也备受关注。一方面,小样本学习技术的发展,使得研究人员可以有更多的手段对问题求解;另一方面,从多语言之间的联系出发,也可以进一步挖掘不同语言背后的知识,并应用于低资源机器翻译任务。本章从多个方面介绍了低资源机器翻译方法,并结合多语言、零资源翻译等问题给出了不同场景下解决问题的思路。除此之外,还有几方面工作值得进一步关注: 低资源机器翻译是机器翻译大规模应用所面临的挑战之一,因此也备受关注。一方面,小样本学习技术的发展,使得研究人员可以有更多的手段对问题求解;另一方面,从多语言之间的联系出发,也可以进一步挖掘不同语言背后的知识,并应用于低资源机器翻译任务。本章从多个方面介绍了低资源机器翻译方法,并结合多语言、零资源翻译等问题给出了不同场景下解决问题的思路。除此之外,还有几方面工作值得进一步关注:
......
...@@ -108,7 +108,7 @@ ...@@ -108,7 +108,7 @@
\parinterval 由于声学特征提取在上一节中已经进行了描述,而且文本翻译可以直接使用本书介绍的统计机器翻译或者神经机器翻译方法。因此下面简要介绍一下语音识别模型,以便读者对级联式语音翻译系统有一个完整的认识。其中的部分概念在后续介绍的端到端语言翻译中也会有所涉及。 \parinterval 由于声学特征提取在上一节中已经进行了描述,而且文本翻译可以直接使用本书介绍的统计机器翻译或者神经机器翻译方法。因此下面简要介绍一下语音识别模型,以便读者对级联式语音翻译系统有一个完整的认识。其中的部分概念在后续介绍的端到端语言翻译中也会有所涉及。
\parinterval 传统的语音识别模型和统计机器翻译相似,需要利用声学模型、语言模型和发音词典联合进行识别,系统较为复杂\upcite{DBLP:journals/ftsig/GalesY07,DBLP:journals/taslp/MohamedDH12,DBLP:journals/spm/X12a}。而近些年来,随着神经网络的发展,基于神经网络的端到端语音识别模型逐渐受到关注,训练流程也大大被简化\upcite{DBLP:conf/nips/ChorowskiBSCB15,DBLP:conf/icassp/ChanJLV16}。目前的端到端语音识别模型主要基于序列到序列结构,编码器根据输入的声学特征进一步提取高级特征,解码器根据编码器提取的特征识别对应的文本。在后文中即将介绍的端到端语音翻译模型也是基于十分相似的结构。因此,从某种意义上说,语音识别和翻译所使用的端到端方法与神经机器翻译是一致的。 \parinterval 传统的语音识别模型和统计机器翻译相似,需要利用声学模型、语言模型和发音词典联合进行识别,系统较为复杂\upcite{DBLP:journals/ftsig/GalesY07,DBLP:journals/taslp/MohamedDH12,DBLP:journals/spm/X12a}。而近些年来,随着神经网络的发展,基于神经网络的端到端语音识别模型逐渐受到关注,训练流程也大大被简化\upcite{DBLP:conf/nips/ChorowskiBSCB15,DBLP:conf/icassp/ChanJLV16}。目前的端到端语音识别模型主要基于序列到序列结构,编码器根据输入的声学特征进一步提取高级特征,解码器根据编码器提取的特征识别对应的文本。在\ref{end-to-end-speech-translation}小节中介绍的端到端语音翻译模型也是基于十分相似的结构。因此,从某种意义上说,语音识别和翻译所使用的端到端方法与神经机器翻译是一致的。
%---------------------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
\centering \centering
...@@ -120,15 +120,15 @@ ...@@ -120,15 +120,15 @@
%---------------------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------------------
\vspace{-1em} \vspace{-1em}
\parinterval 语音识别目前广泛使用基于Transformer的模型结构(见{\chaptertwelve}),如图\ref{fig:17-5}所示。可以看出,相比文本翻译,模型结构上唯一的区别在于编码器的输入为声学特征,以及编码器底层会使用额外的卷积层来减小输入序列的长度。这是由于语音对应的特征序列过长,在计算注意力模型的时候,会占用大量的内存/显存,并增加训练时间。因此,一个常用的做法是在语音特征上进行两层步长为2的卷积操作,从而将输入序列的长度缩小为之前的1/4。通过使用大量的语音-标注平行数据对模型进行训练,可以得到高质量的语音识别模型。 \parinterval 语音识别目前广泛使用基于Transformer的模型结构(见{\chaptertwelve}),如图\ref{fig:17-5}所示。可以看出,相比文本翻译,语音识别模型结构上唯一的区别在于编码器的输入为声学特征,以及编码器底层会使用额外的卷积层来减小输入序列的长度。这是由于语音对应的特征序列过长,在计算注意力模型的时候,会占用大量的内存/显存,并增加训练时间。因此,一个常用的做法是在语音特征上进行两层步长为2的卷积操作,从而将输入序列的长度缩小为之前的1/4。通过使用大量的语音-标注平行数据对模型进行训练,可以得到高质量的语音识别模型。
\parinterval 为了降低语音识别的错误对下游系统的影响,通常也会用词格来取代One-best语音识别结果。另一种思路是通过一个后处理模型修正识别结果中的错误,再送给文本翻译模型进行翻译。也可以进一步对文本做{\small\bfnew{顺滑}}\index{顺滑}(Disfluency Detection\index{Disfluency Detection})处理,使得送给翻译系统的文本更加干净、流畅,比如除去一些导致停顿的语气词。这一做法在工业界得到了广泛应用,但由于每个模型只能串行地计算,也会带来额外的计算代价以及运算时间。另外一种思路是训练更加健壮的文本翻译模型,使其可以处理输入中存在的噪声或误差\upcite{DBLP:conf/acl/LiuTMCZ18} \parinterval 为了降低语音识别的错误对下游系统的影响,通常也会用词格来取代One-best语音识别结果。除此之外,另一种思路是通过一个后处理模型修正识别结果中的错误,再送给文本翻译模型进行翻译。也可以进一步对文本做{\small\bfnew{顺滑}}\index{顺滑}(Disfluency Detection\index{Disfluency Detection})处理,使得送给翻译系统的文本更加干净、流畅,比如除去一些导致停顿的语气词。这一做法在工业界得到了广泛应用,但由于每个模型只能串行地计算,也会带来额外的计算代价以及运算时间。第三种思路是训练更加健壮的文本翻译模型,使其可以处理输入中存在的噪声或误差\upcite{DBLP:conf/acl/LiuTMCZ18}
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SECTION % NEW SUB-SECTION
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
\subsection{端到端语音翻译} \subsection{端到端语音翻译}\label{end-to-end-speech-translation}
\parinterval 级联语音翻译模型结构简单、易于实现,但不可避免地存在一些缺陷: \parinterval 级联语音翻译模型结构简单、易于实现,但不可避免地存在一些缺陷:
...@@ -376,7 +376,7 @@ ...@@ -376,7 +376,7 @@
\subsubsection{1. 基础框架} \subsubsection{1. 基础框架}
\parinterval 在编码器-解码器框架中,编码器将输入的图像转换为一种新的“表示”形式,这种“表示”包含了输入图像的所有信息。之后解码器把这种“表示”转换为自然语言描述。比如,可以通过卷积神经网络提取图像特征为一个向量表示。然后,利用长短时记忆网络(LSTMs)解码生成文字描述,这个过程中与机器翻译的解码过程类似。这种建模方式存在与\ref{sec:image-augmented-translation}描述一样的问题:生成的描述单词不一定需要所有的图像信息,将全局的图像信息送入模型中,可能会引入噪音。这时可以使用注意力机制来缓解该问题\upcite{DBLP:conf/icml/XuBKCCSZB15} \parinterval 在编码器-解码器框架中,编码器将输入的图像转换为一种新的“表示”形式,这种“表示”包含了输入图像的所有信息。之后解码器把这种“表示”转换为自然语言描述。比如,可以通过卷积神经网络提取图像特征为一个向量表示。然后,利用长短时记忆网络(LSTMs)解码生成文字描述,这个过程中与机器翻译的解码过程类似。这种建模方式存在与\ref{sec:image-augmented-translation}小节描述一样的问题:生成的描述单词不一定需要所有的图像信息,将全局的图像信息送入模型中,可能会引入噪音。这时可以使用注意力机制来缓解该问题\upcite{DBLP:conf/icml/XuBKCCSZB15}
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION % NEW SUBSUB-SECTION
...@@ -397,7 +397,7 @@ ...@@ -397,7 +397,7 @@
\end{figure} \end{figure}
%---------------------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------------------
\parinterval 以上的方法大都是将图像中的实体、属性、场景等映射到文字上,并把这些信息显式地输入到编码器中。另一种方式,把图像中的语义特征隐式地引入编码中\upcite{DBLP:conf/cvpr/ChenZXNSLC17}。例如,图像数据可以分解为三个通道(红、绿、蓝),简单来说,就是将图像的每一个像素点按照红色、绿色、蓝色分成三个部分,这样就将图像分成了三个通道。在很多图像中,不同通道伴随的特征是不一样的,可以将其作用于编码器。另一种方法是基于位置信息的编码增强。位置信息指的是图像中对象(物体)的位置。利用目标检测技术检测系统获得图中的对象和对应的特征,这样就确定了图中的对象位置。显然,这些信息可以加强编码器的表示能力\upcite{DBLP:conf/eccv/YaoPLM18} \parinterval 以上的方法大都是将图像中的实体、属性、场景等映射到文字上,并把这些信息显式地输入到编码器中。除此之外,一种方法是把图像中的语义特征隐式地引入编码中\upcite{DBLP:conf/cvpr/ChenZXNSLC17}。例如,图像数据可以分解为三个通道(红、绿、蓝),简单来说,就是将图像的每一个像素点按照红色、绿色、蓝色分成三个部分,这样就将图像分成了三个通道。在很多图像中,不同通道伴随的特征是不一样的,可以将其作用于编码器。另外一种方法是基于位置信息的编码增强。位置信息指的是图像中对象(物体)的位置。利用目标检测技术检测系统获得图中的对象和对应的特征,这样就确定了图中的对象位置。显然,这些信息可以加强编码器的表示能力\upcite{DBLP:conf/eccv/YaoPLM18}
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION % NEW SUBSUB-SECTION
...@@ -453,7 +453,7 @@ ...@@ -453,7 +453,7 @@
\parinterval 正是这种上下文现象的多样性,使评价篇章级翻译模型的性能变得相对困难。目前篇章级机器翻译主要针对一些常见的上下文现象进行优化,比如代词翻译、省略、连接和词汇衔接等,而{\chapterfour}介绍的BLEU等通用自动评价指标通常对这些上下文依赖现象不敏感,因此篇章级翻译需要采用一些专用方法来对这些具体现象进行评价。 \parinterval 正是这种上下文现象的多样性,使评价篇章级翻译模型的性能变得相对困难。目前篇章级机器翻译主要针对一些常见的上下文现象进行优化,比如代词翻译、省略、连接和词汇衔接等,而{\chapterfour}介绍的BLEU等通用自动评价指标通常对这些上下文依赖现象不敏感,因此篇章级翻译需要采用一些专用方法来对这些具体现象进行评价。
\parinterval 在统计机器翻译时代就已经有大量的研究工作专注于篇章信息的建模,这些工作大多针对某一具体的上下文现象,比如,篇章结构\upcite{DBLP:conf/anlp/MarcuCW00,foster2010translating,DBLP:conf/eacl/LouisW14}、代词回指\upcite{DBLP:conf/iwslt/HardmeierF10,DBLP:conf/wmt/NagardK10,DBLP:conf/eamt/LuongP16,}、词汇衔接\upcite{tiedemann2010context,DBLP:conf/emnlp/GongZZ11,DBLP:conf/ijcai/XiongBZLL13,xiao2011document}和篇章连接词\upcite{DBLP:conf/sigdial/MeyerPZC11,DBLP:conf/hytra/MeyerP12,}等。区别于篇章级统计机器翻译,篇章级神经机器翻译不需要针对某一具体的上下文现象构造相应的特征,而是通过翻译模型本身从上下文句子中抽取和融合的上下文信息。通常情况下,篇章级机器翻译可以采用局部建模的手段将前一句或者周围几句作为上下文送入模型。针对需要长距离上下文的情况,也可以使用全局建模的手段直接从篇章的所有句子中提取上下文信息。近几年多数研究工作都在探索更有效的局部建模或全局建模方法,主要包括改进输入\upcite{DBLP:conf/discomt/TiedemannS17,DBLP:conf/naacl/BawdenSBH18,DBLP:conf/wmt/GonzalesMS17,DBLP:journals/corr/abs-1910-07481}、多编码器结构\upcite{DBLP:journals/corr/JeanLFC17,DBLP:journals/corr/abs-1805-10163,DBLP:conf/emnlp/ZhangLSZXZL18}、层次结构\upcite{DBLP:conf/naacl/MarufMH19,DBLP:conf/acl/HaffariM18,DBLP:conf/emnlp/YangZMGFZ19,DBLP:conf/ijcai/ZhengYHCB20}以及基于缓存的方法\upcite{DBLP:conf/coling/KuangXLZ18,DBLP:journals/tacl/TuLSZ18}等。 \parinterval 在统计机器翻译时代就已经有大量的研究工作专注于篇章信息的建模,这些工作大多针对某一具体的上下文现象,比如,篇章结构\upcite{DBLP:conf/anlp/MarcuCW00,foster2010translating,DBLP:conf/eacl/LouisW14}、代词回指\upcite{DBLP:conf/iwslt/HardmeierF10,DBLP:conf/wmt/NagardK10,DBLP:conf/eamt/LuongP16,}、词汇衔接\upcite{tiedemann2010context,DBLP:conf/emnlp/GongZZ11,DBLP:conf/ijcai/XiongBZLL13,xiao2011document}和篇章连接词\upcite{DBLP:conf/sigdial/MeyerPZC11,DBLP:conf/hytra/MeyerP12,}等。区别于篇章级统计机器翻译,篇章级神经机器翻译不需要针对某一具体的上下文现象构造相应的特征,而是通过翻译模型从上下文句子中抽取并融合上下文信息。通常情况下,篇章级机器翻译可以采用局部建模的手段将前一句或者周围几句作为上下文送入模型。针对需要长距离上下文的情况,也可以使用全局建模的手段直接从篇章的所有句子中提取上下文信息。近几年多数研究工作都在探索更有效的局部建模或全局建模方法,主要包括改进输入\upcite{DBLP:conf/discomt/TiedemannS17,DBLP:conf/naacl/BawdenSBH18,DBLP:conf/wmt/GonzalesMS17,DBLP:journals/corr/abs-1910-07481}、多编码器结构\upcite{DBLP:journals/corr/JeanLFC17,DBLP:journals/corr/abs-1805-10163,DBLP:conf/emnlp/ZhangLSZXZL18}、层次结构\upcite{DBLP:conf/naacl/MarufMH19,DBLP:conf/acl/HaffariM18,DBLP:conf/emnlp/YangZMGFZ19,DBLP:conf/ijcai/ZhengYHCB20}以及基于缓存的方法\upcite{DBLP:conf/coling/KuangXLZ18,DBLP:journals/tacl/TuLSZ18}等。
\parinterval 此外,篇章级机器翻译面临的另外一个挑战是数据稀缺。篇章级机器翻译所需要的双语数据需要保留篇章边界,数量相比于句子级双语数据要少很多。除了在之前提到的端到端方法中采用预训练或者参数共享的手段(见{\chaptersixteen}),也可以采用新的建模手段来缓解数据稀缺问题。这类方法通常将篇章级翻译流程进行分离:先训练一个句子级的翻译模型,再通过一些额外的模块来引入上下文信息。比如,在句子级翻译模型的推断过程中,通过在目标端结合篇章级语言模型引入上下文信息\upcite{DBLP:conf/discomt/GarciaCE19,DBLP:journals/tacl/YuSSLKBD20,DBLP:journals/corr/abs-2010-12827},或者基于句子级的翻译结果,使用两阶段解码等手段引入上下文信息,进而对句子级翻译结果进行修正\upcite{DBLP:conf/aaai/XiongH0W19,DBLP:conf/acl/VoitaST19,DBLP:conf/emnlp/VoitaST19} \parinterval 此外,篇章级机器翻译面临的另外一个挑战是数据稀缺。篇章级机器翻译所需要的双语数据需要保留篇章边界,数量相比于句子级双语数据要少很多。除了在之前提到的端到端方法中采用预训练或者参数共享的手段(见{\chaptersixteen}),也可以采用新的建模手段来缓解数据稀缺问题。这类方法通常将篇章级翻译流程进行分离:先训练一个句子级的翻译模型,再通过一些额外的模块来引入上下文信息。比如,在句子级翻译模型的推断过程中,通过在目标端结合篇章级语言模型引入上下文信息\upcite{DBLP:conf/discomt/GarciaCE19,DBLP:journals/tacl/YuSSLKBD20,DBLP:journals/corr/abs-2010-12827},或者基于句子级的翻译结果,使用两阶段解码等手段引入上下文信息,进而对句子级翻译结果进行修正\upcite{DBLP:conf/aaai/XiongH0W19,DBLP:conf/acl/VoitaST19,DBLP:conf/emnlp/VoitaST19}
...@@ -463,7 +463,7 @@ ...@@ -463,7 +463,7 @@
\subsection{篇章级翻译的评价}\label{sec:17-3-2} \subsection{篇章级翻译的评价}\label{sec:17-3-2}
\parinterval BLEU等自动评价指标能够在一定程度上反映译文的整体质量,但是并不能有效地评估篇章级翻译模型的性能。这是由于很多标准测试集中需要篇章上下文的情况比例相对较少。而且,$n$-gram的匹配很难检测到一些具体的语言现象,这使得研究人员很难通过BLEU得分来判断篇章级翻译模型的效果。 \parinterval BLEU等自动评价指标能够在一定程度上反映译文的整体质量,但是并不能有效地评估篇章级翻译模型的性能。这是由于很多标准测试集中需要篇章上下文的情况相对较少。而且,$n$-gram的匹配很难检测到一些具体的语言现象,这使得研究人员很难通过BLEU得分来判断篇章级翻译模型的效果。
\parinterval 为此,研究人员总结了机器翻译任务中存在的上下文现象,并基于此设计了相应的自动评价指标。比如针对篇章中代词的翻译问题,首先借助词对齐工具确定源语言中的代词在译文和参考答案中的对应位置,然后通过计算译文中代词的准确率和召回率等指标对代词翻译质量进行评价\upcite{DBLP:conf/iwslt/HardmeierF10,DBLP:conf/discomt/WerlenP17}。针对篇章中的词汇衔接,使用{\small\sffamily\bfseries{词汇链}}\index{词汇链}(Lexical Chain\index{Lexical Chain}\footnote{词汇链指篇章中语义相关的词所构成的序列。}等来获取能够反映词汇衔接质量的分数,然后通过加权的方式与常规的BLEU或METEOR等指标结合在一起\upcite{DBLP:conf/emnlp/WongK12,DBLP:conf/discomt/GongZZ15}。针对篇章中的连接词,使用候选词典和词对齐工具对源文中连接词的正确翻译结果进行计数,计算其准确率\upcite{DBLP:conf/cicling/HajlaouiP13} \parinterval 为此,研究人员总结了机器翻译任务中存在的上下文现象,并基于此设计了相应的自动评价指标。比如针对篇章中代词的翻译问题,首先借助词对齐工具确定源语言中的代词在译文和参考答案中的对应位置,然后通过计算译文中代词的准确率和召回率等指标对代词翻译质量进行评价\upcite{DBLP:conf/iwslt/HardmeierF10,DBLP:conf/discomt/WerlenP17}。针对篇章中的词汇衔接,使用{\small\sffamily\bfseries{词汇链}}\index{词汇链}(Lexical Chain\index{Lexical Chain}\footnote{词汇链指篇章中语义相关的词所构成的序列。}等来获取能够反映词汇衔接质量的分数,然后通过加权的方式与常规的BLEU或METEOR等指标结合在一起\upcite{DBLP:conf/emnlp/WongK12,DBLP:conf/discomt/GongZZ15}。针对篇章中的连接词,使用候选词典和词对齐工具对源文中连接词的正确翻译结果进行计数,计算其准确率\upcite{DBLP:conf/cicling/HajlaouiP13}
...@@ -525,7 +525,7 @@ ...@@ -525,7 +525,7 @@
\mathbi{d}&=&\textrm{Attention}(\mathbi{h},\mathbi{h}^{\textrm {pre}},\mathbi{h}^{\textrm {pre}}) \mathbi{d}&=&\textrm{Attention}(\mathbi{h},\mathbi{h}^{\textrm {pre}},\mathbi{h}^{\textrm {pre}})
\label{eq:17-3-3} \label{eq:17-3-3}
\end{eqnarray} \end{eqnarray}
其中,$\mathbi{h}$作为Query(查询),$\mathbi{h}^{\textrm pre}$为Key(键)和Value(值)。然后通过门控机制将待翻译句子中每个位置的编码表示和该位置对应的上下文信息进行融合,具体方式如下: 其中,$\mathbi{h}$为Query(查询),$\mathbi{h}^{\textrm {pre}}$为Key(键)和Value(值)。然后通过门控机制将待翻译句子中每个位置的编码表示和该位置对应的上下文信息进行融合,具体方式如下:
\begin{eqnarray} \begin{eqnarray}
\lambda_{t}&=&\sigma(\mathbi{W}_{\lambda}[\mathbi{h}_{t};\mathbi{d}_{t}]+\mathbi{b}_{\lambda}) \lambda_{t}&=&\sigma(\mathbi{W}_{\lambda}[\mathbi{h}_{t};\mathbi{d}_{t}]+\mathbi{b}_{\lambda})
\label{eq:17-3-5}\\ \label{eq:17-3-5}\\
...@@ -639,7 +639,7 @@ ...@@ -639,7 +639,7 @@
\sectionnewpage \sectionnewpage
\section{小结及拓展阅读} \section{小结及拓展阅读}
\parinterval 使用更上下文进行机器翻译建模是极具潜力的研究方向,包括多模态翻译在内的多个领域也非常活跃。有许多问题值得进一步思考与讨论: \parinterval 使用更多的上下文进行机器翻译建模是极具潜力的研究方向,包括多模态翻译在内的多个领域也非常活跃。有许多问题值得进一步思考与讨论:
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
\begin{tikzpicture}[scale=0.6] \begin{tikzpicture}[scale=0.6]
\begin{scope} \begin{scope}
{\footnotesize {\small
\foreach \i in {1,...,5}{ \foreach \i in {1,...,5}{
\node [draw,thick,minimum size=10pt] at (1.2*\i,0) {1}; \node [draw,thick,minimum size=10pt] at (1.2*\i,0) {1};
} }
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
\end{scope} \end{scope}
\begin{scope}[yshift=-2.5em] \begin{scope}[yshift=-2.5em]
{\footnotesize {\small
\foreach \i in {1,...,4}{ \foreach \i in {1,...,4}{
\node [draw,thick,minimum size=10pt] at (1.2*\i,0) {{\color{red} 2}}; \node [draw,thick,minimum size=10pt] at (1.2*\i,0) {{\color{red} 2}};
} }
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
\end{scope} \end{scope}
\begin{scope}[yshift=-5.0em] \begin{scope}[yshift=-5.0em]
{\footnotesize {\small
\foreach \i in {1,...,6}{ \foreach \i in {1,...,6}{
\node [draw,thick,minimum size=10pt] at (1.2*\i,0) {{\color{ublue} 3}}; \node [draw,thick,minimum size=10pt] at (1.2*\i,0) {{\color{ublue} 3}};
} }
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
\end{scope} \end{scope}
\begin{scope}[yshift=-7.5em] \begin{scope}[yshift=-7.5em]
{\footnotesize {\small
\foreach \i in {1,...,12}{ \foreach \i in {1,...,12}{
\node [draw,thick,minimum size=10pt] at (1.2*\i,0) {{\color{ugreen} 4}}; \node [draw,thick,minimum size=10pt] at (1.2*\i,0) {{\color{ugreen} 4}};
} }
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
\end{scope} \end{scope}
\begin{scope}[yshift=-10.0em] \begin{scope}[yshift=-10.0em]
{\footnotesize {\small
\foreach \i in {1,...,2}{ \foreach \i in {1,...,2}{
\node [draw,thick,minimum size=10pt] at (1.2*\i,0) {{\color{purple} 5}}; \node [draw,thick,minimum size=10pt] at (1.2*\i,0) {{\color{purple} 5}};
} }
...@@ -53,7 +53,7 @@ ...@@ -53,7 +53,7 @@
\end{scope} \end{scope}
\begin{scope}[yshift=-12.5em] \begin{scope}[yshift=-12.5em]
{\footnotesize {\small
\foreach \i in {1,...,1}{ \foreach \i in {1,...,1}{
\node [draw,thick,minimum size=10pt] at (1.2*\i,0) {{\color{orange} 6}}; \node [draw,thick,minimum size=10pt] at (1.2*\i,0) {{\color{orange} 6}};
} }
......
...@@ -118,11 +118,11 @@ F(x)=\int_{-\infty}^x f(x)\textrm{d}x ...@@ -118,11 +118,11 @@ F(x)=\int_{-\infty}^x f(x)\textrm{d}x
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
\item 边缘概率:矩形$A$或者矩形$B$的面积。 \item {\small\bfnew{边缘概率}}:矩形$A$或者矩形$B$的面积。
\vspace{0.5em} \vspace{0.5em}
\item 联合概率:矩形$C$的面积。 \item {\small\bfnew{联合概率}}:矩形$C$的面积。
\vspace{0.5em} \vspace{0.5em}
\item 条件概率:联合概率/对应的边缘概率,如:$\funp{P}(A \mid B)$=矩形$C$的面积/矩形B的面积。 \item {\small\bfnew{条件概率}}:联合概率/对应的边缘概率,如:$\funp{P}(A \mid B)$=矩形$C$的面积/矩形B的面积。
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
...@@ -277,9 +277,9 @@ F(x)=\int_{-\infty}^x f(x)\textrm{d}x ...@@ -277,9 +277,9 @@ F(x)=\int_{-\infty}^x f(x)\textrm{d}x
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
\item 非负性,即$\funp{D}_{\textrm{KL}} (\funp{P} \parallel \funp{Q}) \ge 0$,等号成立条件是$\funp{P}$$\funp{Q}$相等。 \item {\small\bfnew{非负性}},即$\funp{D}_{\textrm{KL}} (\funp{P} \parallel \funp{Q}) \ge 0$,等号成立条件是$\funp{P}$$\funp{Q}$相等。
\vspace{0.5em} \vspace{0.5em}
\item 不对称性,即$\funp{D}_{\textrm{KL}} (\funp{P} \parallel \funp{Q}) \neq \funp{D}_{\textrm{KL}} (\funp{Q} \parallel \funp{P})$,所以$\textrm{KL}$距离并不是常用的欧式空间中的距离。为了消除这种不确定性,有时也会使用$\funp{D}_{\textrm{KL}} (\funp{P} \parallel \funp{Q})+\funp{D}_{\textrm{KL}} (\funp{Q} \parallel \funp{P})$作为度量两个分布差异性的函数。 \item {\small\bfnew{不对称性}},即$\funp{D}_{\textrm{KL}} (\funp{P} \parallel \funp{Q}) \neq \funp{D}_{\textrm{KL}} (\funp{Q} \parallel \funp{P})$,所以$\textrm{KL}$距离并不是常用的欧式空间中的距离。为了消除这种不确定性,有时也会使用$\funp{D}_{\textrm{KL}} (\funp{P} \parallel \funp{Q})+\funp{D}_{\textrm{KL}} (\funp{Q} \parallel \funp{P})$作为度量两个分布差异性的函数。
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
...@@ -850,13 +850,13 @@ c(\cdot) & \textrm{当计算最高阶模型时} \\ ...@@ -850,13 +850,13 @@ c(\cdot) & \textrm{当计算最高阶模型时} \\
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
\item 完备性:当问题有解时,使用该策略能否找到问题的解。 \item {\small\bfnew{完备性}}:当问题有解时,使用该策略能否找到问题的解。
\vspace{0.5em} \vspace{0.5em}
\item 最优性:搜索策略能否找到最优解。 \item {\small\bfnew{最优性}}:搜索策略能否找到最优解。
\vspace{0.5em} \vspace{0.5em}
\item 时间复杂度:找到最优解需要多长时间。 \item {\small\bfnew{时间复杂度}}:找到最优解需要多长时间。
\vspace{0.5em} \vspace{0.5em}
\item 空间复杂度:执行策略需要多少内存。 \item {\small\bfnew{空间复杂度}}:执行策略需要多少内存。
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
......
...@@ -496,7 +496,7 @@ g(\seq{s},\seq{t}) & \equiv & \prod_{j,i \in \widehat{A}}{\funp{P}(s_j,t_i)} \ti ...@@ -496,7 +496,7 @@ g(\seq{s},\seq{t}) & \equiv & \prod_{j,i \in \widehat{A}}{\funp{P}(s_j,t_i)} \ti
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SECTION % NEW SECTION
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
\sectionnewpage
\section{噪声信道模型} \section{噪声信道模型}
\vspace{0.5em} \vspace{0.5em}
...@@ -571,7 +571,7 @@ g(\seq{s},\seq{t}) & \equiv & \prod_{j,i \in \widehat{A}}{\funp{P}(s_j,t_i)} \ti ...@@ -571,7 +571,7 @@ g(\seq{s},\seq{t}) & \equiv & \prod_{j,i \in \widehat{A}}{\funp{P}(s_j,t_i)} \ti
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SECTION % NEW SECTION
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
\sectionnewpage
\section{统计机器翻译的三个基本问题} \section{统计机器翻译的三个基本问题}
\parinterval 公式\eqref{eq:5-17}给出了统计机器翻译的数学描述。为了实现这个过程,面临着三个基本问题: \parinterval 公式\eqref{eq:5-17}给出了统计机器翻译的数学描述。为了实现这个过程,面临着三个基本问题:
......
...@@ -31,7 +31,6 @@ ...@@ -31,7 +31,6 @@
% NEW SECTION % NEW SECTION
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
\sectionnewpage
\section{基于扭曲度的模型} \section{基于扭曲度的模型}
下面将介绍扭曲度在机器翻译中的定义及使用方法。这也带来了两个新的翻译模型\ \dash\ IBM模型2\upcite{DBLP:journals/coling/BrownPPM94}和HMM\upcite{vogel1996hmm} 下面将介绍扭曲度在机器翻译中的定义及使用方法。这也带来了两个新的翻译模型\ \dash\ IBM模型2\upcite{DBLP:journals/coling/BrownPPM94}和HMM\upcite{vogel1996hmm}
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SECTION % NEW SECTION
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
\sectionnewpage
\section{翻译中的短语信息} \section{翻译中的短语信息}
不难发现,基于单词的模型并不能很好地捕捉单词间的搭配关系。相比之下,使用更大颗粒度的翻译单元是一种对搭配进行处理的方法。下面来一起看看,基于单词的模型所产生的问题以及如何使用基于短语的模型来缓解该问题。 不难发现,基于单词的模型并不能很好地捕捉单词间的搭配关系。相比之下,使用更大颗粒度的翻译单元是一种对搭配进行处理的方法。下面来一起看看,基于单词的模型所产生的问题以及如何使用基于短语的模型来缓解该问题。
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SECTION % NEW SECTION
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
\sectionnewpage
\section{翻译中句法信息的使用} \section{翻译中句法信息的使用}
\parinterval 使用短语的优点在于可以捕捉到具有完整意思的连续词串,因此能够对局部上下文信息进行建模。当单词之间的搭配和依赖关系出现在连续词串中时,短语可以很好地对其进行描述。但是,当单词之间距离很远时,使用短语的“效率”很低。同$n$-gram语言模型一样,当短语长度变长时,数据会变得非常稀疏。比如,很多实验已经证明,如果在测试数据中有一个超过5个单词的连续词串,那么它在训练数据中往往是很低频的现象,更长的短语甚至都很难在训练数据中找到。 \parinterval 使用短语的优点在于可以捕捉到具有完整意思的连续词串,因此能够对局部上下文信息进行建模。当单词之间的搭配和依赖关系出现在连续词串中时,短语可以很好地对其进行描述。但是,当单词之间距离很远时,使用短语的“效率”很低。同$n$-gram语言模型一样,当短语长度变长时,数据会变得非常稀疏。比如,很多实验已经证明,如果在测试数据中有一个超过5个单词的连续词串,那么它在训练数据中往往是很低频的现象,更长的短语甚至都很难在训练数据中找到。
......
...@@ -52,7 +52,7 @@ ...@@ -52,7 +52,7 @@
\node [secnode,anchor=south west,fill=cyan!20,minimum width=14.0em,align=center] (sec13) at ([yshift=0.5em,xshift=0.5em]part4.south west) {第十三章\hspace{1em} 神经机器翻译模型训练}; \node [secnode,anchor=south west,fill=cyan!20,minimum width=14.0em,align=center] (sec13) at ([yshift=0.5em,xshift=0.5em]part4.south west) {第十三章\hspace{1em} 神经机器翻译模型训练};
\node [secnode,anchor=west,fill=cyan!20,minimum width=14.0em,align=center] (sec14) at ([xshift=0.6em]sec13.east) {第十四章\hspace{1em} 神经机器翻译模型推断}; \node [secnode,anchor=west,fill=cyan!20,minimum width=14.0em,align=center] (sec14) at ([xshift=0.6em]sec13.east) {第十四章\hspace{1em} 神经机器翻译模型推断};
\node [secnode,anchor=south west,fill=green!30,minimum width=9em,minimum height=4.5em,align=center] (sec15) at ([yshift=0.8em]sec13.north west) {第十五章\\ 神经机器翻译 \\ 结构优化}; \node [secnode,anchor=south west,fill=green!30,minimum width=9em,minimum height=4.5em,align=center] (sec15) at ([yshift=0.8em]sec13.north west) {第十五章\\ 神经机器翻译 \\ 结构优化};
\node [secnode,anchor=south west,fill=green!30,minimum width=9em,minimum height=4.5em,align=center] (sec16) at ([xshift=0.8em]sec15.south east) {第十六章\\ 低资源 \\ 机器翻译}; \node [secnode,anchor=south west,fill=green!30,minimum width=9em,minimum height=4.5em,align=center] (sec16) at ([xshift=0.8em]sec15.south east) {第十六章\\ 低资源 \\ 神经机器翻译};
\node [secnode,anchor=south west,fill=green!30,minimum width=9em,minimum height=4.5em,align=center] (sec17) at ([xshift=0.8em]sec16.south east) {第十七章\\ 多模态、多层次 \\ 机器翻译}; \node [secnode,anchor=south west,fill=green!30,minimum width=9em,minimum height=4.5em,align=center] (sec17) at ([xshift=0.8em]sec16.south east) {第十七章\\ 多模态、多层次 \\ 机器翻译};
\node [secnode,anchor=south west,fill=amber!25,minimum width=28.7em,align=center] (sec18) at ([yshift=0.8em]sec15.north west) {第十八章\hspace{1em} 机器翻译应用技术}; \node [secnode,anchor=south west,fill=amber!25,minimum width=28.7em,align=center] (sec18) at ([yshift=0.8em]sec15.north west) {第十八章\hspace{1em} 机器翻译应用技术};
\node [rectangle,draw,dotted,thick,inner sep=0.1em,fill opacity=1] [fit = (sec13) (sec14)] (nmtbasebox) {}; \node [rectangle,draw,dotted,thick,inner sep=0.1em,fill opacity=1] [fit = (sec13) (sec14)] (nmtbasebox) {};
......
...@@ -89,7 +89,7 @@ ...@@ -89,7 +89,7 @@
\noindent 顾问:姚天顺\ \ 王宝库\\ \noindent 顾问:姚天顺\ \ 王宝库\\
\noindent \textsc{\url{https://opensource.niutrans.com/mtbook/index.html}}\\ \noindent \textsc{\url{https://opensource.niutrans.com/mtbook/homepage.html}}\\
\noindent \textsc{\url{https://github.com/NiuTrans/MTBook}}\\ \noindent \textsc{\url{https://github.com/NiuTrans/MTBook}}\\
\noindent {\red{Licensed under the Creative Commons Attribution-NonCommercial 4.0 Unported License (the ``License''). You may not use this file except in compliance with the License. You may obtain a copy of the License at \url{http://creativecommons.org/licenses/by-nc/4.0}. Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \textsc{``as is'' basis, without warranties or conditions of any kind}, either express or implied. See the License for the specific language governing permissions and limitations under the License.}}\\ \noindent {\red{Licensed under the Creative Commons Attribution-NonCommercial 4.0 Unported License (the ``License''). You may not use this file except in compliance with the License. You may obtain a copy of the License at \url{http://creativecommons.org/licenses/by-nc/4.0}. Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \textsc{``as is'' basis, without warranties or conditions of any kind}, either express or implied. See the License for the specific language governing permissions and limitations under the License.}}\\
...@@ -144,7 +144,7 @@ ...@@ -144,7 +144,7 @@
%\include{Chapter10/chapter10} %\include{Chapter10/chapter10}
%\include{Chapter11/chapter11} %\include{Chapter11/chapter11}
%\include{Chapter12/chapter12} %\include{Chapter12/chapter12}
\include{Chapter13/chapter13} %\include{Chapter13/chapter13}
%\include{Chapter14/chapter14} %\include{Chapter14/chapter14}
%\include{Chapter15/chapter15} %\include{Chapter15/chapter15}
%\include{Chapter16/chapter16} %\include{Chapter16/chapter16}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论