Commit 8e46b33c by 孟霞

合并分支 'master' 到 'mengxia'

Master

查看合并请求 !974
parents aecd1343 6e807eec
...@@ -32,8 +32,8 @@ ...@@ -32,8 +32,8 @@
\node [prob,minimum size=0.1cm,anchor=center] (prob13) at ([xshift=1cm]prob12.center) {}; \node [prob,minimum size=0.1cm,anchor=center] (prob13) at ([xshift=1cm]prob12.center) {};
\node [prob,minimum size=0.1cm,anchor=center] (prob23) at ([yshift=-0.5cm]prob13.center) {}; \node [prob,minimum size=0.1cm,anchor=center] (prob23) at ([yshift=-0.5cm]prob13.center) {};
\node [prob,minimum size=0.1cm,anchor=center] (prob33) at ([yshift=-0.5cm]prob23.center) {}; \node [prob,minimum size=0.1cm,anchor=center] (prob33) at ([yshift=-0.5cm]prob23.center) {};
\node [prob,minimum size=0.4cm,anchor=center] (prob43) at ([yshift=-0.5cm]prob33.center) {$.6$}; \node [prob,minimum size=0.1cm,anchor=center] (prob43) at ([yshift=-0.5cm]prob33.center) {};
\node [prob,minimum size=0.1cm,anchor=center] (prob53) at ([yshift=-0.5cm]prob43.center) {}; \node [prob,minimum size=0.4cm,anchor=center] (prob53) at ([yshift=-0.5cm]prob43.center) {$.6$};
\begin{pgfonlayer}{background} \begin{pgfonlayer}{background}
\coordinate (bottomleft) at ([shift={(-0.25cm,-0.25cm)}]prob53.center); \coordinate (bottomleft) at ([shift={(-0.25cm,-0.25cm)}]prob53.center);
\coordinate (topright) at ([shift={(0.25cm,0.25cm)}]prob13.center); \coordinate (topright) at ([shift={(0.25cm,0.25cm)}]prob13.center);
...@@ -76,15 +76,16 @@ ...@@ -76,15 +76,16 @@
\draw [-latex,thick] (prob\i.south) to ([yshift=-0.5cm]prob\i.south); \draw [-latex,thick] (prob\i.south) to ([yshift=-0.5cm]prob\i.south);
% Input % Input
\node [word,anchor=south] (input1) at ([yshift=-1.8cm]prob1.south) {$\langle$eos$\rangle$}; \node [word,anchor=south] (input1) at ([yshift=-1.87cm]prob1.south) {$\langle$eos$\rangle$};
\node [word,anchor=south] (input2) at ([yshift=-1.8cm]prob2.south) {I}; \node [word,anchor=south] (input2) at ([yshift=-1.8cm]prob2.south) {I};
\node [word,anchor=south] (input3) at ([yshift=-1.8cm]prob3.south) {am}; \node [word,anchor=south] (input3) at ([yshift=-1.8cm]prob3.south) {am};
\node [word,anchor=south] (input4) at ([yshift=-1.8cm]prob4.south) {fine}; \node [word,anchor=south] (input4) at ([yshift=-1.8cm]prob4.south) {fine};
\foreach \i in {1,2,...,4} \foreach \i in {2,3,4}
\draw [-latex,thick] ([yshift=0.3cm]input\i.south) to ([yshift=0.8cm]input\i.south); \draw [-latex,thick] ([yshift=0.3cm]input\i.south) to ([yshift=0.8cm]input\i.south);
\draw [-latex,thick] ([yshift=0.36cm]input1.south) to ([yshift=0.86cm]input1.south);
\node [word,anchor=south] (ns) at ([xshift=-1cm]input1.south) {输入:}; \node [word,anchor=south] (ns) at ([xshift=-1.2cm]input1.south) {真实数据:};
\node [word,anchor=north] () at ([xshift=2.1cm,yshift=-0.5cm]ns.south) {(a)\ Word-level}; \node [word,anchor=north] () at ([xshift=2.1cm,yshift=-0.5cm]ns.south) {(a)\ Word-level};
\end{scope} \end{scope}
...@@ -163,16 +164,17 @@ ...@@ -163,16 +164,17 @@
\draw [-latex,thick] (prob\i.south) to ([yshift=-0.5cm]prob\i.south); \draw [-latex,thick] (prob\i.south) to ([yshift=-0.5cm]prob\i.south);
% Input % Input
\node [word,anchor=south] (input1) at ([yshift=-1.8cm]prob1.south) {$\langle$eos$\rangle$}; \node [word,anchor=south] (input1) at ([yshift=-1.85cm]prob1.south) {$\langle$eos$\rangle$};
\node [word,anchor=south] (input2) at ([yshift=-1.8cm]prob2.south) {I}; \node [word,anchor=south] (input2) at ([yshift=-1.8cm]prob2.south) {I};
\node [word,anchor=south] (input3) at ([yshift=-1.8cm]prob3.south) {am}; \node [word,anchor=south] (input3) at ([yshift=-1.8cm]prob3.south) {am};
\node [word,anchor=center] (input4) at ([xshift=1cm]input3.center) {good}; \node [word,anchor=center] (input4) at ([xshift=1cm]input3.center) {good};
\foreach \i in {1,2,3} \foreach \i in {2,3}
\draw [-latex,thick] ([yshift=0.3cm]input\i.south) to ([yshift=0.8cm]input\i.south); \draw [-latex,thick] ([yshift=0.3cm]input\i.south) to ([yshift=0.8cm]input\i.south);
\draw [-latex,thick] ([yshift=0.36cm]input4.south) to ([yshift=0.86cm]input4.south); \draw [-latex,thick] ([yshift=0.36cm]input4.south) to ([yshift=0.86cm]input4.south);
\draw [-latex,thick] ([yshift=0.36cm]input1.south) to ([yshift=0.86cm]input1.south);
\node [word,anchor=south] (ns) at ([xshift=-1cm]input1.south) {输入:}; \node [word,anchor=south] (ns) at ([xshift=-1.2cm]input1.south) {教师译文:};
\node [word,anchor=north] () at ([xshift=2.1cm,yshift=-0.5cm]ns.south) {(b)\ Sequence-level }; \node [word,anchor=north] () at ([xshift=2.1cm,yshift=-0.5cm]ns.south) {(b)\ Sequence-level };
\end{scope} \end{scope}
\end{tikzpicture} \end{tikzpicture}
...@@ -3,23 +3,27 @@ ...@@ -3,23 +3,27 @@
\node[rounded corners=3pt,minimum width=1.0em,minimum height=2.0em,font=\scriptsize,fill=red!10,drop shadow,thick](top) at (0,0) { \node[rounded corners=3pt,minimum width=1.0em,minimum height=2.0em,font=\scriptsize,fill=red!10,drop shadow,thick](top) at (0,0) {
\begin{tabular}{lllllll} \begin{tabular}{lllllll}
\multicolumn{7}{c}{符号合并表} \\ \multicolumn{7}{c}{符号合并表} \\
(r,$<$e$>$), & (e,s), & (l,o), & (es,t), & (lo,w), & (est,$<$e$>$), & (e,r$<$e$>$), (r,$<$e$>$), & (e,s), & (l,o), & (es,t), & (lo,w), & (est,$<$e$>$), & (e,r$<$e$>$)
\end{tabular} \end{tabular}
}; };
\node[font=\footnotesize,anchor=north] (l1) at ([xshift=0em,yshift=-1em]top.south) {(a) 符号合并表}; \node[font=\footnotesize,anchor=north] (l1) at ([xshift=0em,yshift=-1em]top.south) {(a) 符号合并表};
\node[font=\scriptsize,anchor=west] (n1) at ([xshift=-4.5em,yshift=-6em]top.west) {l\ o\ w\ e\ r\ $<$e$>$}; \node[font=\scriptsize,anchor=west] (n1) at ([xshift=-4.5em,yshift=-6em]top.west) {l\ o\ w\ e\ r\ $<$e$>$};
\node[font=\scriptsize,anchor=west] (n2) at ([xshift=2.6em]n1.east) {l\ o\ w\ e\ {\red r$<$e$>$}}; \node[font=\scriptsize,anchor=west] (n2) at ([xshift=2.6em]n1.east) {l\ o\ w\ e\ {\red r$<$e$>$}};
\node[font=\scriptsize,anchor=west] (n3) at ([xshift=2.6em]n2.east) {{\red lo}\ w\ e\ r$<$e$>$}; \node[font=\scriptsize,anchor=west] (n3) at ([xshift=2.6em]n2.east) {{\red lo}\ w\ e\ r$<$e$>$};
\node[font=\scriptsize,anchor=west] (n4) at ([xshift=2.6em]n3.east) {{\red low}\ e\ r$<$e$>$}; \node[font=\scriptsize,anchor=west] (n4) at ([xshift=2.6em]n3.east) {{\red low}\ e\ r$<$e$>$};
\node[font=\scriptsize,anchor=west] (n5) at ([xshift=2.6em]n4.east) {low\ {\red er$<$e$>$}}; \node[font=\scriptsize,anchor=west] (n5) at ([xshift=2.6em]n4.east) {low\ {\red er$<$e$>$}};
\node[font=\scriptsize,anchor=west] (t1) at ([yshift=-1.5em]n1.south west) {l\ o\ w\ e\ s\ t\ $<$e$>$}; \node[font=\scriptsize,anchor=west] (t1) at ([yshift=-2.5em]n1.south west) {l\ o\ w\ e\ s\ t\ $<$e$>$};
\node[font=\scriptsize,anchor=west] (t2) at ([xshift=0.8em]t1.east) {l\ o\ w\ {\red es}\ t\ $<$e$>$}; \node[font=\scriptsize,anchor=west] (t2) at ([xshift=0.8em]t1.east) {l\ o\ w\ {\red es}\ t\ $<$e$>$};
\node[font=\scriptsize,anchor=west] (t3) at ([xshift=0.8em]t2.east) {{\red lo}\ w\ es\ t\ $<$e$>$}; \node[font=\scriptsize,anchor=west] (t3) at ([xshift=0.8em]t2.east) {{\red lo}\ w\ es\ t\ $<$e$>$};
\node[font=\scriptsize,anchor=west] (t4) at ([xshift=0.8em]t3.east) {lo\ w\ {\red est}\ $<$e$>$}; \node[font=\scriptsize,anchor=west] (t4) at ([xshift=0.8em]t3.east) {lo\ w\ {\red est}\ $<$e$>$};
\node[font=\scriptsize,anchor=west] (t5) at ([xshift=0.8em]t4.east) {{\red low}\ est\ $<$e$>$}; \node[font=\scriptsize,anchor=west] (t5) at ([xshift=0.8em]t4.east) {{\red low}\ est\ $<$e$>$};
\node[font=\scriptsize,anchor=west] (t6) at ([xshift=0.8em]t5.east) {low\ {\red est$<$e$>$}}; \node[font=\scriptsize,anchor=west] (t6) at ([xshift=0.8em]t5.east) {low\ {\red est$<$e$>$}};
\node[font=\scriptsize,anchor=north east] (s1) at ([yshift=0.1em]n1.north west) {样例1:};
\node[font=\scriptsize,anchor=north east] (s1) at ([yshift=0.1em]t1.north west) {样例2:};
\node[font=\footnotesize,anchor=north] (l2) at ([xshift=2em,yshift=-1em]t3.south) {(b) 合并样例}; \node[font=\footnotesize,anchor=north] (l2) at ([xshift=2em,yshift=-1em]t3.south) {(b) 合并样例};
\draw[->,thick](n1.east) -- (n2.west); \draw[->,thick](n1.east) -- (n2.west);
......
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
\parinterval 本章将就这些问题展开讨论,内容会覆盖开放词表、正则化、对抗样本训练、最小风险训练、知识蒸馏等多个主题。需要注意的是,神经机器翻译模型训练涉及的内容十分广泛。很多情况下,模型训练问题会和建模问题强相关。因此,本章的内容主要集中在相对独立的模型训练问题上。在后续章节中,仍然会有模型训练方面的介绍,其主要针对机器翻译的特定主题,如极深神经网络训练、无指导训练等。 \parinterval 本章将就这些问题展开讨论,内容会覆盖开放词表、正则化、对抗样本训练、最小风险训练、知识蒸馏等多个主题。需要注意的是,神经机器翻译模型训练涉及的内容十分广泛。很多情况下,模型训练问题会和建模问题强相关。因此,本章的内容主要集中在相对独立的基础模型训练问题上。在后续章节中,仍然会有模型训练方面的介绍,其主要针对机器翻译的特定主题,如深层神经网络训练、无指导训练等。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SECTION % NEW SECTION
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
\sectionnewpage \sectionnewpage
\section{开放词表} \section{开放词表}
\parinterval 对于神经机器翻译而言,研究人员通常希望使用更大的词表完成模型训练。因为大词表可以覆盖更多的语言现象,使模型对不同的语言现象有更强的区分能力。但是,人类的语言表达方式是十分多样的,这也体现在单词的构成上,甚至人们都无法想象数据中存在的不同单词的数量。比如,在WMT、CCMT等评测数据上,英语词表大小都会在100万以上。当然,这里面也包括很多的数字和字母的混合,还有一些组合词。不过,如果不加限制,机器翻译所面对的词表将会很“大”。这也会导致模型参数量变大,模型训练变得极为困难。更严重的问题是,测试数据中的一些单词根本就没有在训练数据中出现过,这时会出现未登录词翻译问题(即OOV问题),即系统无法对未见单词进行翻译。在神经机器翻译中,通常会考虑使用更小的翻译单元来缓解以上问题,因为小颗粒度的单元可以有效缓解数据稀疏问题。 \parinterval 对于神经机器翻译而言,研究人员通常希望使用更大的词表完成模型训练。因为大词表可以覆盖更多的语言现象,使模型对不同的语言现象有更强的区分能力。但是,人类的语言表达方式是十分多样的,这也体现在单词的构成上,甚至人们都无法想象数据中存在的不同单词的数量。比如,在WMT、CCMT等评测数据上,英语词表大小都会在100万以上。如果不加限制,机器翻译的词表将会很“大”。这也会导致模型参数量变大,模型训练变得极为困难。更严重的问题是,测试数据中的一些单词根本就没有在训练数据中出现过,这时会出现未登录词翻译问题(即OOV问题),即系统无法对未见单词进行翻译。在神经机器翻译中,通常会考虑使用更小的翻译单元来缓解数据稀疏问题。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SECTION % NEW SUB-SECTION
...@@ -72,7 +72,7 @@ ...@@ -72,7 +72,7 @@
\parinterval 一种解决开放词表翻译问题的思路是改造输出层结构\upcite{garcia-martinez2016factored,DBLP:conf/acl/JeanCMB15},比如,替换原始的Softmax层,用更加高效的神经网络结构进行超大规模词表上的预测。不过,模型结构和训练方法的调整使得系统开发与调试的工作量增加,并且这类方法仍然无法解决未登录词问题,因此在实用系统中并不常用。 \parinterval 一种解决开放词表翻译问题的思路是改造输出层结构\upcite{garcia-martinez2016factored,DBLP:conf/acl/JeanCMB15},比如,替换原始的Softmax层,用更加高效的神经网络结构进行超大规模词表上的预测。不过,模型结构和训练方法的调整使得系统开发与调试的工作量增加,并且这类方法仍然无法解决未登录词问题,因此在实用系统中并不常用。
\parinterval 另一种思路是不改变机器翻译系统,而是从数据处理的角度来缓解未登录词问题。既然使用单词会带来数据稀疏问题,那么自然会想到使用更小的单元。比如,把字符作为最小的翻译单元 \footnote{汉语里的字符可以被看作是汉字。} \ \dash \ 也就是基于字符的翻译模型\upcite{DBLP:journals/tacl/LeeCH17}。以英语为例,只需要构造一个包含26个英语字母、数字和一些特殊符号的字符表,便可以表示所有的单词。 \parinterval 另一种思路是不改变机器翻译系统,而是从数据处理的角度来缓解未登录词问题。既然使用单词会带来数据稀疏问题,那么自然会想到使用更小的单元,通过更小的单元的多种排列组合来表示更多的单词。比如,把字符作为最小的翻译单元 \footnote{汉语里的字符可以被看作是汉字。} \ \dash \ 也就是基于字符的翻译模型\upcite{DBLP:journals/tacl/LeeCH17}。以英语为例,只需要构造一个包含26个英语字母、数字和一些特殊符号的字符表,便可以表示所有的单词。
\parinterval 但是字符级翻译也面临着新的问题\ \dash\ 使用字符增加了系统捕捉不同语言单元之间搭配的难度。假设平均一个单词由5个字符组成,系统所处理的序列长度便增大5倍。这使得具有独立意义的不同语言单元需要跨越更远的距离才能产生联系。此外,基于字符的方法也破坏了单词中天然存在的构词规律,或者说破坏了单词内字符的局部依赖。比如,英语单词“telephone”中的“tele”和“phone”都是有具体意义的词缀,但是如果把它们打散为字符就失去了这些含义。 \parinterval 但是字符级翻译也面临着新的问题\ \dash\ 使用字符增加了系统捕捉不同语言单元之间搭配的难度。假设平均一个单词由5个字符组成,系统所处理的序列长度便增大5倍。这使得具有独立意义的不同语言单元需要跨越更远的距离才能产生联系。此外,基于字符的方法也破坏了单词中天然存在的构词规律,或者说破坏了单词内字符的局部依赖。比如,英语单词“telephone”中的“tele”和“phone”都是有具体意义的词缀,但是如果把它们打散为字符就失去了这些含义。
...@@ -87,7 +87,7 @@ ...@@ -87,7 +87,7 @@
\end{figure} \end{figure}
%---------------------------------------------- %----------------------------------------------
\parinterval极端一些的情况下,子词仍然可以包含所有的字母和数字。这样,理论上,所有的单词都可以用子词进行组装。当然,理想的状况是:在子词词表不太大的前提下,使用尽可能少的子词单元拼装出每个单词。在神经机器翻译中,基于子词的切分是很常用的数据处理方法,称为子词切分。主要包括三个步骤: \parinterval一些极端的情况下,子词仍然可以包含所有的字母和数字。这样,理论上,所有的单词都可以用子词进行组装。当然,理想的状况是:在子词词表不太大的前提下,使用尽可能少的子词单元拼装出每个单词。在神经机器翻译中,基于子词的切分是很常用的数据处理方法,称为子词切分。主要包括三个步骤:
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
...@@ -95,7 +95,7 @@ ...@@ -95,7 +95,7 @@
\vspace{0.5em} \vspace{0.5em}
\item 构建符号合并表; \item 构建符号合并表;
\vspace{0.5em} \vspace{0.5em}
\item 通过合并表,按字符合并为子词。 \item 根据合并表,将字符合并为子词。
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
...@@ -107,7 +107,7 @@ ...@@ -107,7 +107,7 @@
\subsection{双字节编码} \subsection{双字节编码}
\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-4}给出了一个使用字符合并表对单词进行子词切分的实例。红色单元为每次合并后得到的新符号,直至无法合并,或遍历结束,得到最终的合并结果。其中每一个单元为一个子词。 \parinterval 使用BPE算法进行子词切分包含两个步骤。首先,通过统计的方法构造符号合并表,具体的方式为:先对分过词的文本进行统计,得到词表和词频,同时将词表中的单词分割为字符表示;其次统计词表中所有出现的二元组的频次,选择当前频次最高的二元组加入符号合并表,并将所有词表中出现的该二元组合并为一个单元;不断地重复上述过程,直到合并表的大小达到预先设定的大小,或者无法继续合并。图\ref{fig:13-4}给出了一个使用字符合并表对单词进行子词切分的实例。红色单元为每次合并后得到的新符号,直至无法合并,或遍历结束,得到最终的合并结果。其中每一个单元为一个子词。
...@@ -129,11 +129,11 @@ ...@@ -129,11 +129,11 @@
\end{figure} \end{figure}
%---------------------------------------------- %----------------------------------------------
\parinterval 使用BPE方法后,翻译模型的输出也是子词序列,因此需要对最终得到的翻译结果进行子词还原,即将子词形式表达的单元重新组合为原本的单词。这一步操作也十分简单,只需要不断的将每个子词向后合并,直至遇到表示单词边界的结束符,便得到了一个完整的单词。 \parinterval 使用BPE方法后,翻译模型的输出也是子词序列,因此需要对最终得到的翻译结果进行子词还原,即将子词形式表达的单元重新组合为原本的单词。这一步操作也十分简单,只需要不断的将每个子词向后合并,直至遇到表示单词边界的终结符,便得到了一个完整的单词。
\parinterval 使用BPE方法的策略有很多。不仅可以单独对源语言和目标语言句子进行子词的切分,也可以联合两种语言,共同进行子词切分,被称作{\small\bfnew{双字节联合编码}}\index{双字节联合编码}(Joint-BPE\index{Joint-BPE}\upcite{DBLP:conf/acl/SennrichHB16a}。 相比于单语BPE,Joint-BPE可以增加两种语言子词切分的一致性。对于相似语系中的语言,如英语和德语,常使用Joint-BPE 的方法联合构建词表。而对于汉语和英语这些差异比较大的语种,则需要独立地进行子词切分。 \parinterval 使用BPE方法的策略有很多。不仅可以单独对源语言和目标语言句子进行子词的切分,也可以联合两种语言,共同进行子词切分,被称作{\small\bfnew{双字节联合编码}}\index{双字节联合编码}(Joint-BPE\index{Joint-BPE}\upcite{DBLP:conf/acl/SennrichHB16a}。 相比于单语BPE,Joint-BPE可以增加两种语言子词切分的一致性。对于相似语系中的语言,如英语和德语,常使用Joint-BPE 的方法联合构建词表。而对于汉语和英语这些差异比较大的语种,则需要独立地进行子词切分。
\parinterval BPE还有很多变种方法。比如,可以设计更合理的符号合并优先级。这种方法的出发点在于,在不考虑优先级的情况下,在对一个单词用同一个合并表切分子词时,可能存在多种结果。如hello,可以被切分为“hell”和“o”,也可以被切分为“h” 和“ello”。 这种切分方式的多样性可以用来提高神经机器翻译系统的健壮性\upcite{DBLP:conf/acl/Kudo18}。此外,尽管BPE也被命名为字节对编码,但是在实践中该方法一般处理的是Unicode编码,而不是字节。相应的,在预训练模型GPT2 中也探索了字节级别的BPE,这种方法在机器翻译、自动问答等任务中取得了很好的效果\upcite{radford2019language} \parinterval BPE还有很多变种方法。比如,可以设计更合理的符号合并优先级。这种方法的出发点在于,在不考虑优先级的情况下,在对一个单词用同一个合并表切分子词时,可能存在多种结果。如hello,可以被切分为“hell”和“o”,也可以被切分为“h” 和“ello”。 这种切分方式的多样性可以用来提高神经机器翻译系统的健壮性\upcite{DBLP:conf/acl/Kudo18}。此外,尽管BPE也被命名为双字节编码,但是在实践中该方法一般处理的是Unicode编码,而不是字节。相应的,在预训练模型GPT2 中也探索了字节级别的BPE,这种方法在机器翻译、自动问答等任务中取得了很好的效果\upcite{radford2019language}
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SECTION % NEW SUB-SECTION
...@@ -172,9 +172,7 @@ y &=& f(x) ...@@ -172,9 +172,7 @@ y &=& f(x)
\noindent 反问题是指:当观测到$y$时,能否求出$x$。反问题对应了很多实际问题,比如,可以把$y$看作经过美化的图片,$x$看作原始的图片,反问题就对应了图片还原。机器翻译的训练也是一种反问题,因为可以把$y$看作是正确的译文,$x$看作是输入句子或者模型参数\footnote{在训练中,如果把源语言句子看作是不变的量,这时函数$f(\cdot)$的输入只有模型参数。} \noindent 反问题是指:当观测到$y$时,能否求出$x$。反问题对应了很多实际问题,比如,可以把$y$看作经过美化的图片,$x$看作原始的图片,反问题就对应了图片还原。机器翻译的训练也是一种反问题,因为可以把$y$看作是正确的译文,$x$看作是输入句子或者模型参数\footnote{在训练中,如果把源语言句子看作是不变的量,这时函数$f(\cdot)$的输入只有模型参数。}
\parinterval 理想的情况下,研究人员希望反问题的解是{\small\bfnew{适定的}}\index{适定的}(Well-posed)\index{Well-posed}。所谓适定解,需要满足三个条件:解是存在的、解是唯一的、解是稳定的(即$y$微小的变化会导致$x$微小的变化,也被称作解连续)。所有不存在唯一稳定解的问题都被称作{\small\bfnew{不适定问题}}\index{不适定问题}(Ill-posed Problem)\index{Ill-posed Problem}。对于机器学习问题,解的存在性比较容易理解。解的唯一性大多由问题决定。比如,如果把描述问题的函数$f(\cdot)$看作一个$n\times n$矩阵$\mathbi{A}$$x$$y$都看作是$n$维向量。那么$x$不唯一的原因在于$\mathbi{A}$不满秩(非奇异矩阵)。不过,存在性和唯一性并不会对机器学习方法造成太大困扰,因为在实践中往往会找到近似的解。 \parinterval 理想的情况下,研究人员希望反问题的解是{\small\bfnew{适定的}}\index{适定的}(Well-posed)\index{Well-posed}。所谓适定解,需要满足三个条件:解是存在的、解是唯一的、解是稳定的(即$y$微小的变化会导致$x$微小的变化,也被称作解连续)。所有不存在唯一稳定解的问题都被称作{\small\bfnew{不适定问题}}\index{不适定问题}(Ill-posed Problem)\index{Ill-posed Problem}。对于机器学习问题,解的存在性比较容易理解。解的唯一性大多由问题决定。比如,如果把描述问题的函数$f(\cdot)$看作一个$n\times n$矩阵$\mathbi{A}$$x$$y$都看作是$n$维向量。那么$x$不唯一的原因在于$\mathbi{A}$不满秩(非奇异矩阵)。不过,存在性和唯一性并不会对机器学习方法造成太大困扰,因为在实践中往往会找到近似的解。但是,解的稳定性却给神经机器翻译带来了很大的挑战。因为神经机器翻译模型非常复杂,里面存在大量的矩阵乘法和非线性变换。这导致$f(\cdot)$往往是不稳定的,也就是说,神经机器翻译中输出$y$的微小变化会导致输入$x$的巨大变化。比如,在系统研发中经常会发现,即使训练样本发生很小的变化,模型训练得到的参数都会有非常明显的区别。不仅如此,在神经机器翻译模型中,稳定性训练还面临两方面问题:
\parinterval 但是,解的稳定性却给神经机器翻译带来了很大的挑战。因为神经机器翻译模型非常复杂,里面存在大量的矩阵乘法和非线性变换。这导致$f(\cdot)$往往是不稳定的,也就是说,神经机器翻译中输出$y$的微小变化会导致输入$x$的巨大变化。比如,在系统研发中经常会发现,即使训练样本发生很小的变化,模型训练得到的参数都会有非常明显的区别。不仅如此,在神经机器翻译模型中,稳定性训练还面临两方面问题:
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
...@@ -197,11 +195,11 @@ y &=& f(x) ...@@ -197,11 +195,11 @@ y &=& f(x)
\parinterval 正则化的一种实现是在训练目标中引入一个正则项。在神经机器翻译中,引入正则项的训练目标为: \parinterval 正则化的一种实现是在训练目标中引入一个正则项。在神经机器翻译中,引入正则项的训练目标为:
\begin{eqnarray} \begin{eqnarray}
\widehat{\mathbi{w}} &=& \argmax_{\mathbi{w}}L(\mathbi{w}) + \lambda R(\mathbi{w}) \widehat{\mathbi{w}} &=& \argmin_{\mathbi{w}}Loss(\mathbi{w}) + \lambda R(\mathbi{w})
\label{eq:13-2} \label{eq:13-2}
\end{eqnarray} \end{eqnarray}
\noindent 其中,$\mathbi{w}$是模型参数,$L(\mathbi{w})$是损失函数,$R(\mathbi{w})$是正则项,$\lambda$是正则项的系数,用于控制正则化对训练影响的程度。$R(\mathbi{w})$通常也可以被看作是一种先验,因为在数据不充分且存在噪声的情况下,可以根据一些先验知识让模型偏向正确的方向一些,而不是一味地根据受噪声影响的不准确的$L(\mathbi{w})$进行优化。相应的,引入正则化后的模型可以获得更好的{\small\bfnew{泛化}}\index{泛化}(Generalization)\index{Generalization}能力,即模型在新的未见数据上表现会更好。 \noindent 其中,$\mathbi{w}$是模型参数,$Loss(\mathbi{w})$是损失函数,$R(\mathbi{w})$是正则项,$\lambda$是正则项的系数,用于控制正则化对训练影响的程度。$R(\mathbi{w})$通常也可以被看作是一种先验,因为在数据不充分且存在噪声的情况下,可以根据一些先验知识让模型偏向正确的方向一些,而不是一味地根据受噪声影响的$Loss(\mathbi{w})$进行优化。相应的,引入正则化后的模型可以获得更好的{\small\bfnew{泛化}}\index{泛化}(Generalization)\index{Generalization}能力,即模型在新的未见数据上表现会更好。
\parinterval 实践中已经证明,正则化方法有助于使得像神经机器翻译模型这样复杂模型获得稳定的模型参数。甚至有些情况下,如果不引入正则化,训练得到的翻译模型根本无法使用。此外,正则化方法不仅可以用于提高模型的泛化能力,也可以作为干预模型学习的一种手段,比如,可以将一些先验知识作为正则项约束机器翻译模型的学习。类似的手段在本书后续的内容中也会被使用。 \parinterval 实践中已经证明,正则化方法有助于使得像神经机器翻译模型这样复杂模型获得稳定的模型参数。甚至有些情况下,如果不引入正则化,训练得到的翻译模型根本无法使用。此外,正则化方法不仅可以用于提高模型的泛化能力,也可以作为干预模型学习的一种手段,比如,可以将一些先验知识作为正则项约束机器翻译模型的学习。类似的手段在本书后续的内容中也会被使用。
...@@ -211,7 +209,7 @@ y &=& f(x) ...@@ -211,7 +209,7 @@ y &=& f(x)
\subsection{L1/L2正则化} \subsection{L1/L2正则化}
\parinterval L1/L2正则化是常用的正则化方法,虽然这种方法并不仅针对机器翻译模型。L1/L2正则化分别对应正则项是L1和L2范数的情况。具体来说,L1正则化是指: \parinterval L1/L2正则化是常用的正则化方法,虽然这种方法并不仅针对机器翻译模型。L1/L2正则化分别对应正则项是$l_1$$l_2$范数的情况。具体来说,L1正则化是指:
\begin{eqnarray} \begin{eqnarray}
R(\mathbi{w}) & = & {\Vert{\mathbi{w}}\Vert}_1 \\ R(\mathbi{w}) & = & {\Vert{\mathbi{w}}\Vert}_1 \\
& = &\sum_{w_i}|w_i| \nonumber & = &\sum_{w_i}|w_i| \nonumber
...@@ -225,7 +223,7 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\ ...@@ -225,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正则项都是有物理意义的。二者都可以被看作是空间上的一个区域,比如,在二维平面上,L1范数表示一个以0点为中心的矩形,L2范数表示一个以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},也就是神经网络能表示的不同函数所构成的空间。}。也就是说,理论上存在一种模型可以完美的描述问题。但是,从目标函数拟合的角度来看,如果一个模型可以拟合很复杂的目标函数,那模型所表示的函数形态也会很复杂。这往往体现在模型中参数的值“偏大”。比如,用一个多项式函数拟合一些空间中的点,如果希望拟合得很好,各个项的系数往往是非零的。而且为了对每个点进行拟合,通常需要多项式中的某些项具有较大的系数,以期望函数在局部有较大的斜率。显然,这样的模型是很复杂的。模型的复杂度可以用函数中参数(比如多项式中各项的系数)的“值”进行度量,这也体现在模型参数的范数上。
...@@ -281,7 +279,7 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\ ...@@ -281,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-8}给出了Dropout方法和传统方法计算方式的对比。其中,$x_{i}^{l}$代表第$l$层神经网络的第$i$个输入,$w_{i}^{l}$为输入所对应的权重,$b^{l}$表示第$l$层神经网络输入的偏置,$z_{i}^{l+1}$表示第$l$层神经网络的线性运算的结果,$f(\cdot)$表示激活函数,$r_{j}^{l}$的值服从于参数为$1-p$的伯努利分布。 \parinterval 具体实现时,可以设置一个参数$p \in (0,1)$。在每次参数更新所使用的前向和反向计算中,每个神经元都以概率$p$停止工作。相当于每层神经网络会有以$p$为概率的神经元被“屏蔽”掉。每一次参数更新中会随机屏蔽不同的神经元,图\ref{fig:13-8}给出了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]
...@@ -294,7 +292,7 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\ ...@@ -294,7 +292,7 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\
\parinterval 对于新的样本,可以使用Dropout训练之后的模型对其进行推断,但是每个神经元的输出要乘以$1-p$,以保证每层神经元输出的期望和训练时是一样的。另一种常用的做法是,在训练时对每个神经元的输出乘以$\frac{1}{1-p}$,然后在推断时神经网络可以不经过任何调整就直接使用。 \parinterval 对于新的样本,可以使用Dropout训练之后的模型对其进行推断,但是每个神经元的输出要乘以$1-p$,以保证每层神经元输出的期望和训练时是一样的。另一种常用的做法是,在训练时对每个神经元的输出乘以$\frac{1}{1-p}$,然后在推断时神经网络可以不经过任何调整就直接使用。
\parinterval Dropout方法的另一种解释是,在训练中屏蔽掉一些神经元相当于从原始的神经网络中抽取出了一个子网络。这样,每次训练都在一个随机生成的子网络上进行,而不同子网络之间的参数是共享的。在推断时,则把所有的子网络集成到一起。这种思想也有一些{\small\bfnew{集成学习}}\index{集成学习}(Ensemble Learning)\index{Ensemble Learning}的味道,只不过Dropout中子模型(或子网络)是在指数级空间中采样出来的。由于Dropout可以很好的缓解复杂神经模型的过拟合问题,因此也成为了大多数神经机器翻译系统的标配。 \parinterval Dropout方法的另一种解释是,在训练中屏蔽掉一些神经元相当于从原始的神经网络中抽取出了一个子网络。这样,每次训练都在一个随机生成的子网络上进行,而不同子网络之间的参数是共享的。在推断时,则把所有的子网络集成到一起。这种思想也有一些{\small\bfnew{集成学习}}\index{集成学习}(Ensemble Learning)\index{Ensemble Learning}的味道,只不过Dropout中子模型(或子网络)是在指数级空间中采样出来的。由于Dropout可以很好的缓解复杂神经网络模型的过拟合问题,因此也成为了大多数神经机器翻译系统的标配。
\parinterval 随着网络层数的增多,相互适应也会出现在不同层之间,甚至会出现在多头注意力机制的不同头之间。因此,Dropout方法也可以用于对模型局部结构的屏蔽,比如,对多层神经网络中的层进行屏蔽,即Layer Dropout。 特别是对于深层神经网络,Layer Dropout 也是一种有效的防止过拟合的方法。关于Layer Dropout的内容在{\chapterfifteen}还会有详细讨论。 \parinterval 随着网络层数的增多,相互适应也会出现在不同层之间,甚至会出现在多头注意力机制的不同头之间。因此,Dropout方法也可以用于对模型局部结构的屏蔽,比如,对多层神经网络中的层进行屏蔽,即Layer Dropout。 特别是对于深层神经网络,Layer Dropout 也是一种有效的防止过拟合的方法。关于Layer Dropout的内容在{\chapterfifteen}还会有详细讨论。
...@@ -306,7 +304,7 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\ ...@@ -306,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}。另一方面,实践中也发现,有些情况下即使输入中有微小的扰动,神经网络模型的输出也会产生巨大变化。或者说,神经网络模型在输入样本上容易受到{\small\bfnew{攻击}}\index{攻击}(Attack)\index{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]{
...@@ -349,7 +347,7 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\ ...@@ -349,7 +347,7 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\
\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},由于这种攻击方式不需要知道神经网络的详细信息,仅仅通过访问模型的输入和输出就可以达到攻击的目的。并且由于神经网络其本身便是一个黑盒模型,因此在神经网络的相关应用中黑盒攻击方法更加实用。
\parinterval 在神经机器翻译中,输入所包含的细小的扰动会使模型变得脆弱\upcite{DBLP:conf/iclr/BelinkovB18}。但是,图像中的对抗攻击方法难以直接应用于自然语言处理任务,因为图像和文本数据之间存在着一定的差异。对计算机而言,以像素值等表示的图像数据本身就是连续的\upcite{DBLP:conf/naacl/MichelLNP19},而文本中的一个个单词本身离散的。简单替换这些离散的单词,可能会生成语法错误或者语义错误的句子。而且,简单替换单词产生的扰动过大,模型很容易判别。即使对词嵌入等连续表示的部分进行扰动,也会产生无法与词嵌入空间中的任何词匹配的向量\upcite{Gong2018AdversarialTW}。针对这些问题,下面着重介绍神经机器翻译任务中如何有效生成、使用对抗样本。 \parinterval 在神经机器翻译中,训练数据中含有的细微扰动会使得模型比较脆弱\upcite{DBLP:conf/iclr/BelinkovB18}。研究人员希望借鉴图像任务中的一些对抗攻击方法,并将其应用于自然语言处理任务中。然而,对计算机而言,以像素值等表示的图像数据本身就是连续的\upcite{DBLP:conf/naacl/MichelLNP19},而文本中的一个个单词本身离散的,这种图像与文本数据间的差异使得这些方法在自然语言处理上并不适用。比如图像任务中对一幅图片的局部图像进行替换的方法,如果用于自然语言处理中,可能会生成语法错误或者语义错误的句子。而且,简单替换单词产生的扰动过大,模型很容易判别。即使对词嵌入等连续表示的部分进行扰动,也会产生无法与词嵌入空间中的任何词匹配的向量\upcite{Gong2018AdversarialTW}。针对这些问题,下面着重介绍神经机器翻译任务中如何有效生成、使用对抗样本。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SECTION % NEW SUB-SECTION
...@@ -357,9 +355,9 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\ ...@@ -357,9 +355,9 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\
\subsection{基于黑盒攻击的方法} \subsection{基于黑盒攻击的方法}
\parinterval 一个好的对抗样本应该具有这种性质:对文本做最少的修改,并最大程度地保留原文的语义。一种简单的实现方式是对文本加噪声。这里,噪声可以分为自然噪声和人工噪声\upcite{DBLP:conf/iclr/BelinkovB18}。自然噪声一般是指人为的在语料库中收集自然出现的错误,如输入错误、拼写错误等。人为噪声是通过人工设计的自动方法修改文本,例如,可以通过规则或是噪声生成器,在干净的数据中以一定的概率引入拼写错误、语法错误等\upcite{DBLP:conf/naacl/VaibhavSSN19,DBLP:conf/naacl/AnastasopoulosL19,DBLP:conf/acl/SinghGR18};此外,也可以在文本中加入人为设计过的毫无意义的单词序列。 \parinterval 一个好的对抗样本应该具有这种性质:对文本做最少的修改,并最大程度地保留原文的语义。一种简单的实现方式是对文本加噪声。这里,噪声可以分为自然噪声和人工噪声\upcite{DBLP:conf/iclr/BelinkovB18}。自然噪声一般是指在语料库中自然出现的错误,如输入错误、拼写错误等。人为噪声是通过人工设计的自动方法修改文本,例如,可以通过规则或是噪声生成器,在干净的数据中以一定的概率引入拼写错误、语法错误等\upcite{DBLP:conf/naacl/VaibhavSSN19,DBLP:conf/naacl/AnastasopoulosL19,DBLP:conf/acl/SinghGR18};此外,也可以在文本中加入人为设计过的毫无意义的单词序列。
\parinterval 除了单纯的在文本中引入各种扰动外,还可以通过文本编辑的方式,在不改变语义的情况下尽可能修改文本,从而构建对抗样本\upcite{DBLP:journals/corr/SamantaM17,DBLP:conf/ijcai/0002LSBLS18}。文本的编辑方式主要包括交换,插入,替换和删除操作。表\ref{tab:13-2}给出了通过这几种方式生成对抗样本的例子。 \parinterval 除了单纯的在文本中引入各种扰动外,还可以通过文本编辑的方式,在不改变语义的情况下尽可能修改文本,从而构建对抗样本\upcite{DBLP:journals/corr/SamantaM17,DBLP:conf/ijcai/0002LSBLS18}。文本的编辑方式主要包括交换、插入、替换和删除操作。表\ref{tab:13-2}给出了通过这几种方式生成对抗样本的例子。
%---------------------------------------------- %----------------------------------------------
\begin{table}[htp]{ \begin{table}[htp]{
...@@ -380,7 +378,7 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\ ...@@ -380,7 +378,7 @@ R(\mathbi{w}) & = & ({\Vert{\mathbi{w}}\Vert}_2)^2 \\
\parinterval 形式上,可以利用如FGSM等算法\upcite{DBLP:journals/corr/GoodfellowSS14},验证文本中每一个单词的贡献度,同时为每一个单词构建一个候选池,包括该单词的近义词、拼写错误词、同音词等。对于贡献度较低的词,如语气词、副词等,可以使用插入、删除操作进行扰动。对于其他的单词,可以在候选池中选择相应的单词并进行替换。其中,交换操作可以是基于词级别的,比如交换序列中的单词,也可以是基于字符级别的,例如交换单词中的字符\upcite{DBLP:conf/coling/EbrahimiLD18}。重复进行上述的编辑操作,直至编辑出的文本可以误导模型做出错误的判断。 \parinterval 形式上,可以利用如FGSM等算法\upcite{DBLP:journals/corr/GoodfellowSS14},验证文本中每一个单词的贡献度,同时为每一个单词构建一个候选池,包括该单词的近义词、拼写错误词、同音词等。对于贡献度较低的词,如语气词、副词等,可以使用插入、删除操作进行扰动。对于其他的单词,可以在候选池中选择相应的单词并进行替换。其中,交换操作可以是基于词级别的,比如交换序列中的单词,也可以是基于字符级别的,例如交换单词中的字符\upcite{DBLP:conf/coling/EbrahimiLD18}。重复进行上述的编辑操作,直至编辑出的文本可以误导模型做出错误的判断。
\parinterval 在机器翻译中,常用的回译技术也是生成对抗样本的一种有效方式。回译就是,通过反向模型将目标语言翻译成源语言,并将翻译得到的双语数据用于模型训练。除了翻译模型,语言模型也可以用于生成对抗样本。{\chaptertwo}已经介绍过,语言模型可以用于检测句子的流畅度,它根据上文预测当前位置可能出现的单词。因此,此时可以使用语言模型预测出当前位置最可能出现的多个单词,并用这些词替换序列中原本的单词。在机器翻译任务中,可以通过与神经机器翻译系统联合训练,共享词向量矩阵的方式得到语言模型\upcite{DBLP:conf/acl/GaoZWXQCZL19} \parinterval 在机器翻译中,常用的回译技术也是生成对抗样本的一种有效方式。回译就是,通过反向模型将目标语言翻译成源语言,并将翻译得到的双语数据用于模型训练(见{\chaptersixteen}。除了翻译模型,语言模型也可以用于生成对抗样本。{\chaptertwo}已经介绍过,语言模型可以用于检测句子的流畅度,它根据上文预测当前位置可能出现的单词。因此,此时可以使用语言模型预测出当前位置最可能出现的多个单词,并用这些词替换序列中原本的单词。在机器翻译任务中,可以通过与神经机器翻译系统联合训练,共享词向量矩阵的方式得到语言模型\upcite{DBLP:conf/acl/GaoZWXQCZL19}
\parinterval 此外,{\small\bfnew{生成对抗网络}}\index{生成对抗网络}(Generative Adversarial Networks\index{Generative Adversarial Networks}, GANs)也可以被用来生成对抗样本\upcite{DBLP:conf/iclr/ZhaoDS18}。与回译方法类似,基于生成对抗网络的方法将原始的输入映射为潜在分布$\funp{P}$,并在其中搜索出服从相同分布的文本构成对抗样本。一些研究也对这种方法进行了优化\upcite{DBLP:conf/iclr/ZhaoDS18},在稠密的向量空间中进行搜索,也就是说在定义$\funp{P}$的基础稠密向量空间中找到对抗性表示$\mathbi{z}'$,然后利用生成模型将其映射回$\mathbi{x}'$,使最终生成的对抗样本在语义上接近原始输入。 \parinterval 此外,{\small\bfnew{生成对抗网络}}\index{生成对抗网络}(Generative Adversarial Networks\index{Generative Adversarial Networks}, GANs)也可以被用来生成对抗样本\upcite{DBLP:conf/iclr/ZhaoDS18}。与回译方法类似,基于生成对抗网络的方法将原始的输入映射为潜在分布$\funp{P}$,并在其中搜索出服从相同分布的文本构成对抗样本。一些研究也对这种方法进行了优化\upcite{DBLP:conf/iclr/ZhaoDS18},在稠密的向量空间中进行搜索,也就是说在定义$\funp{P}$的基础稠密向量空间中找到对抗性表示$\mathbi{z}'$,然后利用生成模型将其映射回$\mathbi{x}'$,使最终生成的对抗样本在语义上接近原始输入。
...@@ -544,11 +542,12 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\ ...@@ -544,11 +542,12 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\
\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)}] \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 \\
& = & {\red \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}]}
\label{eq:13-15} \label{eq:13-15}
\end{eqnarray} \end{eqnarray}
\noindent 公式\eqref{eq:13-15}使用了{\small\bfnew{策略梯度}}\index{策略梯度}(Policy Gradient\index{Policy Gradient})的手段将$\vartriangle(\hat{\seq{y}},\seq{y}^{[k]})$提到微分操作之外\upcite{DBLP:conf/nips/Kakade01,DBLP:journals/corr/abs-1810-02525}。这样,就无需对$\vartriangle(\hat{\seq{y}},\seq{y}^{[k]})$进行微分,因此最小风险训练允许任意不可微的损失函数,包括BLEU等常用的评价函数。使用公式\eqref{eq:13-15}就可以求出模型参数相对于风险函数的损失,进而进行基于梯度的优化。 \noindent 公式\eqref{eq:13-15}使用了{\small\bfnew{策略梯度}}\index{策略梯度}(Policy Gradient\index{Policy Gradient})的手段将$\vartriangle(\hat{\seq{y}},\seq{y}^{[k]})$提到微分操作之外\upcite{DBLP:conf/nips/Kakade01,DBLP:journals/corr/abs-1810-02525}。这样,就无需对$\vartriangle(\hat{\seq{y}},\seq{y}^{[k]})$进行微分,因此最小风险训练允许任意不可微的损失函数,包括BLEU等常用的评价函数。{\red 同时,等式右侧将对概率的求导操作转化为了对log函数的求导,更易于模型进行优化。因此,}使用公式\eqref{eq:13-15}就可以求出模型参数相对于风险函数的损失,进而进行基于梯度的优化。
\parinterval 这里需要注意的是,公式\eqref{eq:13-15}中求期望的过程是无法直接实现的,因为无法遍历所有的译文句子。通常,会使用采样的方法搜集一定数量的译文,来模拟译文空间。例如,可以使用推断系统生成若干译文。同时,为了保证生成的译文之间具有一定的差异性,也可以对推断过程进行一些“干扰”。从实践的角度看,采样方法是影响强化学习系统的重要因素,因此往往需要对不同的任务设计相适应的采样方法。最简单的方法就是在产生译文的每一个词时候,根据模型产生的下一个词的分布随机选取词当作模型预测,直到选到句子结束符或者达到特定长度的时候停止\upcite{DBLP:conf/emnlp/EdunovOAG18}。其他方法还包括随机束搜索,它把束搜索中选取Top-$k$的操作替换成随机选取$k$个词。这个方法不会采集到重复的样本。还可以使用基于Gumbel-Top-$k$的随机束搜索更好地控制了样本里的噪声\upcite{DBLP:conf/icml/KoolHW19} \parinterval 这里需要注意的是,公式\eqref{eq:13-15}中求期望的过程是无法直接实现的,因为无法遍历所有的译文句子。通常,会使用采样的方法搜集一定数量的译文,来模拟译文空间。例如,可以使用推断系统生成若干译文。同时,为了保证生成的译文之间具有一定的差异性,也可以对推断过程进行一些“干扰”。从实践的角度看,采样方法是影响强化学习系统的重要因素,因此往往需要对不同的任务设计相适应的采样方法。最简单的方法就是在产生译文的每一个词时候,根据模型产生的下一个词的分布随机选取词当作模型预测,直到选到句子结束符或者达到特定长度的时候停止\upcite{DBLP:conf/emnlp/EdunovOAG18}。其他方法还包括随机束搜索,它把束搜索中选取Top-$k$的操作替换成随机选取$k$个词。这个方法不会采集到重复的样本。还可以使用基于Gumbel-Top-$k$的随机束搜索更好地控制了样本里的噪声\upcite{DBLP:conf/icml/KoolHW19}
...@@ -573,11 +572,16 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\ ...@@ -573,11 +572,16 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\
\parinterval 基于策略的强化学习是要寻找一个策略$\funp{p}(a|\hat{{y}}_{1 \ldots j-1},\seq{x})$,使得该策略选择的行动$a$未来可以获得的奖励期望最大化,也被称为{\small\bfnew{动作价值函数}}\index{动作价值函数}(Action-value Function)\index{Action-value Function}最大化。这个过程通常用函数$Q$来描述: \parinterval 基于策略的强化学习是要寻找一个策略$\funp{p}(a|\hat{{y}}_{1 \ldots j-1},\seq{x})$,使得该策略选择的行动$a$未来可以获得的奖励期望最大化,也被称为{\small\bfnew{动作价值函数}}\index{动作价值函数}(Action-value Function)\index{Action-value Function}最大化。这个过程通常用函数$Q$来描述:
\begin{eqnarray} \begin{eqnarray}
\funp{Q}(a;\hat{y}_{1 \ldots j-1},\seq{y}) & = & \mathbb{E}_{\hat{y}_{j+1 \ldots J} \sim \funp{p}(\cdot|\hat{y}_{1 \ldots j-1} a,\seq{x})}[\funp{r}_j(a;\hat{y}_{1 \ldots j-1},\seq{y}) + \nonumber \\ \funp{Q}(a;\hat{y}_{1 \ldots j-1},\seq{y}) & = & \mathbb{E}_{\hat{y}_{j+1 \ldots J} \sim \funp{p}(\cdot|\hat{y}_{1 \ldots j-1} a,\seq{x})}[\funp{r}_j(a;\hat{y}_{1 \ldots j-1},\seq{y}) + \nonumber \\
& & \sum_{i=j+1}^J\funp{r}_i(\hat{{y}}_i;\hat{{y}}_{1 \ldots j-1}a\hat{{y}}_{j+1 \ldots i},\seq{y})] & & \sum_{i=j}^J\funp{r}_i(\hat{{y}}_i;\hat{{y}}_{1 \ldots j-1}a\hat{{y}}_{j+1 \ldots i},\seq{y})]
\label{eq:13-16} \label{eq:13-16}
\end{eqnarray} \end{eqnarray}
{\blue ---------------------------------------------讨论\\
{{ (学长,$\sum_{i=j+1}^J\funp{r}_i(\hat{{y}}_i;\hat{{y}}_{1 \ldots j-1}a\hat{{y}}_{j+1 \ldots i},\seq{y})$想表达的应该是:\\$\funp{r}_{j+1}(\hat{{y}}_{j+1};\hat{{y}}_{1 \ldots j-1}a,\seq{y})$\\$\funp{r}_{j+2}(\hat{{y}}_{j+2};\hat{{y}}_{1 \ldots j-1}a\hat{{y}}_{j+1},\seq{y})$\\$\funp{r}_{j+3}(\hat{{y}}_{j+3};\hat{{y}}_{1 \ldots j-1}a\hat{{y}}_{j+1,j+2},\seq{y})$\\$\cdots$\\这些项的加和对吧,那$a$后面的$y$的最后一项改成$i-1$也不合理,因为$i-1$就是$j$,会跟$a$重复(因为$a$也是$\hat{{y}}_j$,只不过$\hat{{y}}_j$是固定的状态,$a$是任意动作),要不这里就把a改成$\hat{{y}}_j$行吗?或者$a_{\hat{{y}}_j}$这种形式,但是这种形式仍然会和$a$后面的加和冲突。)}}
\noindent 其中,$\funp{r}_j(a;\hat{{y}}_{1 \ldots j-1},\seq{y})$$j$时刻做出行动$a$获得的奖励,$\funp{r}_i(\hat{{y}}_i;\hat{{y}}_{1 \ldots j-1}a\hat{{y}}_{j+1 \ldots i},\seq{y})$是在$j$时刻的行动为$a$的前提下,$i$时刻的做出行动$\hat{{y}}_i$获得的奖励,$\seq{x}$是源语言句子,$\seq{y}$是正确译文,$\hat{{y}}_{1 \ldots j-1}$是策略$\funp{p}$产生的译文的前$j-1$个词,$J$是生成译文的长度。对于源语句子$x$,最优策略$\hat{p}$可以被定义为: {{ 学长觉得这样行吗,公式1.16把a删掉,改成:$\sum_{i=j}^J\funp{r}_i(\hat{{y}}_i;\hat{{y}}_{1 \ldots j-1}\hat{{y}}^{a}_{j \ldots i},\seq{y})$,(下面的段落加说明,此处的$\hat{{y}}^{a}_{j \ldots i}$表示由动作a决定的$\hat{{y}}_{j \ldots i}$\\}}
---------------------------------------------讨论\\
}
\noindent 其中,$\funp{r}_j(a;\hat{{y}}_{1 \ldots j-1},\seq{y})$$j$时刻做出行动$a$获得的奖励,$\funp{r}_i(\hat{{y}}_i;\hat{{y}}_{1 \ldots j-1}a\hat{{y}}_{j+1 \ldots i},\seq{y})$是在$j$时刻的行动为$a$的前提下,$i$时刻的做出行动$\hat{{y}}_i$获得的奖励,{\red $\hat{y}_{j+1 \ldots J} \sim \funp{p}(\cdot|\hat{y}_{1 \ldots j-1} a,\seq{x})$表示序列$\hat{y}_{j+1 \ldots J}$是根据$\funp{p}(\cdot|\hat{y}_{1 \ldots j-1} a,\seq{x})$得到的采样结果,概率函数$\funp{p}$中的$\cdot$表示序列$\hat{y}_{j+1 \ldots J}$服从的随机变量,}$\seq{x}$是源语言句子,$\seq{y}$是正确译文,$\hat{{y}}_{1 \ldots j-1}$是策略$\funp{p}$产生的译文的前$j-1$个词,$J$是生成译文的长度。{\red 特别的,对于公式\ref{eq:13-16}$\hat{{y}}_{j+1 \ldots i}$来说,如果$i<j+1$,则$\hat{{y}}_{j+1 \ldots i}$不存在,}对于源语句子$x$,最优策略$\hat{p}$可以被定义为:
\begin{eqnarray} \begin{eqnarray}
\hat{p} & = & \argmax_{\funp{p}}\mathbb{E}_{\hat{\seq{y}} \sim \funp{p}(\hat{\seq{y}} | \seq{x})}\sum_{j=1}^J\sum_{a \in A}\funp{p}(a|\hat{{y}}_{1 \ldots j},\seq{x})\funp{Q}(a;\hat{{y}}_{1 \ldots j},\seq{y}) \hat{p} & = & \argmax_{\funp{p}}\mathbb{E}_{\hat{\seq{y}} \sim \funp{p}(\hat{\seq{y}} | \seq{x})}\sum_{j=1}^J\sum_{a \in A}\funp{p}(a|\hat{{y}}_{1 \ldots j},\seq{x})\funp{Q}(a;\hat{{y}}_{1 \ldots j},\seq{y})
\label{eq:13-17} \label{eq:13-17}
...@@ -606,19 +610,19 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\ ...@@ -606,19 +610,19 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\
\label{eq:13-19} \label{eq:13-19}
\end{eqnarray} \end{eqnarray}
\parinterval 这个等式也被称为{\small\bfnew{贝尔曼方程}}\index{贝尔曼方程}(Bellman Equation\index{Bellman Equation}\upcite{sutton2018reinforcement}。它表达了$j-1$时刻的动作价值函数$\funp{Q}(\hat{{y}}_j;\hat{{y}}_{1 \ldots j-1},\seq{y})$跟下一时刻$j$的动作价值函数$\funp{Q}(a;\hat{{y}}_{1 \ldots j},\seq{y})$之间的关系。因此可以很自然的使用等式右部作为等式左部$\funp{Q}(\hat{{y}}_j;\hat{{y}}_{1 \ldots j-1},\seq{y})$的等价形式。于是,可以定义$j$时刻动作价值函数为: \parinterval 这个等式也被称为{\small\bfnew{贝尔曼方程}}\index{贝尔曼方程}(Bellman Equation\index{Bellman Equation}\upcite{sutton2018reinforcement}。它表达了$j-1$时刻的动作价值函数$\funp{Q}(\hat{{y}}_j;\hat{{y}}_{1 \ldots j-1},\seq{y})$跟下一时刻$j$的动作价值函数$\funp{Q}(a;\hat{{y}}_{1 \ldots j},\seq{y})$之间的关系。{\red 在理想情况下,动作价值函数$\funp{Q}$应该满足上述等式,因此可以使用该等式作为可学习的函数$\tilde{\funp{Q}}$的目标}{\red \sout{,因此可以很自然的使用等式右部作为等式左部$\funp{Q}(\hat{{y}}_j;\hat{{y}}_{1 \ldots j-1},\seq{y})$的等价形式}}。于是,可以定义$j$时刻动作价值函数为:
\begin{eqnarray} \begin{eqnarray}
\funp{q}_j & = & \funp{r}_j(\hat{{y}}_j;\hat{{y}}_{1 \ldots j-1},\seq{y}) + \sum_{a \in A}\funp{p}(a|\hat{{y}}_{1 \ldots j},\seq{x})\tilde{\funp{Q}}(a;\hat{{y}}_{1 \ldots j},\seq{y}) \funp{q}_j & = & \funp{r}_j(\hat{{y}}_j;\hat{{y}}_{1 \ldots j-1},\seq{y}) + \sum_{a \in A}\funp{p}(a|\hat{{y}}_{1 \ldots j},\seq{x})\tilde{\funp{Q}}(a;\hat{{y}}_{1 \ldots j},\seq{y})
\label{eq:13-20} \label{eq:13-20}
\end{eqnarray} \end{eqnarray}
\parinterval评论家对应的目标定义如下: \noindent {\red 相应的,}评论家对应的目标定义如下:
\begin{eqnarray} \begin{eqnarray}
\hat{\tilde{\funp{Q}}} & = & \argmin_{\tilde{\funp{Q}}}\sum_{j=1}^J{(\tilde{\funp{Q}}(\hat{{y}}_j;\hat{{y}}_{1 \ldots j-1},\seq{y}) - \funp{q}_j)}^2 \hat{\tilde{\funp{Q}}} & = & \argmin_{\tilde{\funp{Q}}}\sum_{j=1}^J{(\tilde{\funp{Q}}(\hat{{y}}_j;\hat{{y}}_{1 \ldots j-1},\seq{y}) - \funp{q}_j)}^2
\label{eq:13-21} \label{eq:13-21}
\end{eqnarray} \end{eqnarray}
\parinterval 最后,通过同时优化演员和评论家直到收敛,获得的演员(也就是策略$\funp{p}$)就是我们期望的翻译模型。图\ref{fig:13-12}展示了演员和评论家的关系。 \parinterval {\red 此时,公式\ref{eq:13-20}与公式\ref{eq:13-21}共同组成了评论家的学习目标,使得可学习的函数$\tilde{\funp{Q}}$逼近理想的$\funp{Q}$}最后,通过同时优化演员和评论家直到收敛,获得的演员(也就是策略$\funp{p}$)就是我们期望的翻译模型。图\ref{fig:13-12}展示了演员和评论家的关系。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -633,7 +637,7 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\ ...@@ -633,7 +637,7 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
\item {\small\bfnew{多目标学习}}。演员的优化通常会引入额外的极大似然估计目标函数,同时会使用极大似然估计进行预训练。这样会简化训练,因为随机初始化的演员性能很差,很难获得有效的奖励。同时极大似然估计也被可以当作一种先验知识,通过正则项的形式约束机器翻译模型的学习,防止模型陷入很差的局部最优,并加速模型收敛。 \item {\small\bfnew{多目标学习}}。演员的优化通常会引入额外的极大似然估计目标函数,同时会使用极大似然估计进行预训练。这样会简化训练,因为随机初始化的演员性能很差,很难获得有效的奖励。同时极大似然估计也可以被当作一种先验知识,通过正则项的形式约束机器翻译模型的学习,防止模型陷入很差的局部最优,并加速模型收敛。
\vspace{0.5em} \vspace{0.5em}
\item {\small\bfnew{优化目标}}。评论家的优化目标是由自身输出所构造的。当模型更新比较快的时候模型的输出变化也会很快,导致构造的优化目标不稳定,影响模型收敛效果。一个解决方案是,在一定更新次数内固定构造优化目标使用的模型,然后再使用比较新的模型来构造后续一定更新次数内的优化目标,如此往复\upcite{DBLP:journals/nature/SilverHMGSDSAPL16} \item {\small\bfnew{优化目标}}。评论家的优化目标是由自身输出所构造的。当模型更新比较快的时候模型的输出变化也会很快,导致构造的优化目标不稳定,影响模型收敛效果。一个解决方案是,在一定更新次数内固定构造优化目标使用的模型,然后再使用比较新的模型来构造后续一定更新次数内的优化目标,如此往复\upcite{DBLP:journals/nature/SilverHMGSDSAPL16}
\vspace{0.5em} \vspace{0.5em}
......
...@@ -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=yellow!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};
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
\draw[->,thick] ([yshift=-0.8em]ln_1.-90) .. controls ([xshift=5em,yshift=-0.8em]ln_1.-90) and ([xshift=5em]add_1.0) .. (add_1.0); \draw[->,thick] ([yshift=-0.8em]ln_1.-90) .. controls ([xshift=5em,yshift=-0.8em]ln_1.-90) and ([xshift=5em]add_1.0) .. (add_1.0);
\draw[->,thick] (add_1.0) .. controls ([xshift=5em]add_1.0) and ([xshift=5em]add_2.0) .. (add_2.0); \draw[->,thick] (add_1.0) .. controls ([xshift=5em]add_1.0) and ([xshift=5em]add_2.0) .. (add_2.0);
\node[font=\scriptsize] at (0em, -1em){(a) Transformer编码器中若干块的结构}; \node[font=\scriptsize] at (0em, -1.1em){(a) Transformer编码器中若干块的结构};
\end{scope} \end{scope}
%right %right
...@@ -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=yellow!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{+}};
...@@ -84,7 +84,7 @@ ...@@ -84,7 +84,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=yellow!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){宽卷积};
\node[anchor=north,minimum size=0.8em,inner sep=0pt,rounded corners=1pt,draw,fill=green!30] (at) at ([yshift=-0.6em]wc.south){}; \node[anchor=north,minimum size=0.8em,inner sep=0pt,rounded corners=1pt,draw,fill=green!30] (at) at ([yshift=-0.6em]wc.south){};
......
\begin{tikzpicture} \begin{tikzpicture}
\tikzstyle{opnode}=[rectangle,inner sep=0mm,minimum height=2em,minimum width=4em,rounded corners=5pt,fill=teal!30] \tikzstyle{opnode}=[rectangle,inner sep=0mm,minimum height=2em,minimum width=4em,rounded corners=5pt,fill=teal!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] \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]
\begin{pgfonlayer}{background} \begin{pgfonlayer}{background}
...@@ -10,14 +10,14 @@ ...@@ -10,14 +10,14 @@
\node[anchor=west,mnode] (m2) at ([xshift=1em,yshift=0em]m1.east){}; \node[anchor=west,mnode] (m2) at ([xshift=1em,yshift=0em]m1.east){};
\node[anchor=west,mnode] (m3) at ([xshift=1em,yshift=0em]m2.east){}; \node[anchor=west,mnode] (m3) at ([xshift=1em,yshift=0em]m2.east){};
\node[anchor=north west,rectangle,inner sep=0mm,minimum height=2.6em,minimum width=3.5em,rounded corners=5pt,fill=blue!30] (ml1) at ([xshift=0em,yshift=-0.5em]m1.south west){}; \node[anchor=north west,rectangle,inner sep=0mm,minimum height=2.6em,minimum width=3.5em,rounded corners=5pt,fill=blue!30,draw,thick,drop shadow] (ml1) at ([xshift=0em,yshift=-0.5em]m1.south west){};
\node[anchor=west,rectangle,inner sep=0mm,minimum height=2.6em,minimum width=3.5em,rounded corners=5pt,fill=green!30] (ml2) at ([xshift=0.25em,yshift=0em]ml1.east){}; \node[anchor=west,rectangle,inner sep=0mm,minimum height=2.6em,minimum width=3.5em,rounded corners=5pt,fill=green!30,draw,thick,drop shadow] (ml2) at ([xshift=0.25em,yshift=0em]ml1.east){};
\node[anchor=north east,rectangle,inner sep=0mm,minimum height=2.6em,minimum width=3.5em,rounded corners=5pt,fill=red!30] (ml3) at ([xshift=0em,yshift=-0.5em]m1.south east){}; \node[anchor=north east,rectangle,inner sep=0mm,minimum height=2.6em,minimum width=3.5em,rounded corners=5pt,fill=red!30,draw,thick,drop shadow] (ml3) at ([xshift=0em,yshift=-0.5em]m1.south east){};
\node[anchor=north west,rectangle,inner sep=0mm,minimum height=2.6em,minimum width=5.25em,rounded corners=5pt,fill=blue!30] (mc1) at ([xshift=0em,yshift=-0.5em]m2.south west){}; \node[anchor=north west,rectangle,inner sep=0mm,minimum height=2.6em,minimum width=5.25em,rounded corners=5pt,fill=blue!30,draw,thick,drop shadow] (mc1) at ([xshift=0em,yshift=-0.5em]m2.south west){};
\node[anchor=north east,rectangle,inner sep=0mm,minimum height=2.6em,minimum width=5.25em,rounded corners=5pt,fill=red!30] (mc2) at ([xshift=0em,yshift=-0.5em]m2.south east){}; \node[anchor=north east,rectangle,inner sep=0mm,minimum height=2.6em,minimum width=5.25em,rounded corners=5pt,fill=red!30,draw,thick,drop shadow] (mc2) at ([xshift=0em,yshift=-0.5em]m2.south east){};
\node[anchor=north,rectangle,inner sep=0mm,minimum height=2.6em,minimum width=11em,rounded corners=5pt,fill=blue!30] (mr1) at ([xshift=0em,yshift=-0.5em]m3.south){}; \node[anchor=north,rectangle,inner sep=0mm,minimum height=2.6em,minimum width=11em,rounded corners=5pt,fill=blue!30,draw,thick,drop shadow] (mr1) at ([xshift=0em,yshift=-0.5em]m3.south){};
\end{pgfonlayer} \end{pgfonlayer}
...@@ -31,22 +31,22 @@ ...@@ -31,22 +31,22 @@
\node[anchor=north west,wnode,align=left] (w3) at ([xshift=0.3em,yshift=-0.3em]m3.north west){深度学习和网\\络结构搜索}; \node[anchor=north west,wnode,align=left] (w3) at ([xshift=0.3em,yshift=-0.3em]m3.north west){深度学习和网\\络结构搜索};
{%subfigure-left {%subfigure-left
\node[anchor=north,wnode,font=\footnotesize] (wl1) at ([xshift=0em,yshift=0em]ml1.north){训练数据}; \node[anchor=north,wnode,font=\footnotesize] (wl1) at ([xshift=0em,yshift=-0.15em]ml1.north){训练数据};
\node[anchor=north,wnode,font=\footnotesize] (wl2) at ([xshift=0em,yshift=0em]ml2.north){特征信息}; \node[anchor=north,wnode,font=\footnotesize] (wl2) at ([xshift=0em,yshift=-0.15em]ml2.north){特征信息};
\node[anchor=north,wnode,font=\footnotesize] (wl3) at ([xshift=0em,yshift=0em]ml3.north){模型结构}; \node[anchor=north,wnode,font=\footnotesize] (wl3) at ([xshift=0em,yshift=-0.15em]ml3.north){模型结构};
\node[anchor=south,wnode,font=\tiny] (wl4) at ([xshift=0em,yshift=0em]ml1.south){人工/自动收集}; \node[anchor=south,wnode,font=\tiny] (wl4) at ([xshift=0em,yshift=0.15em]ml1.south){人工/自动收集};
\node[anchor=south,wnode] (wl5) at ([xshift=0em,yshift=0em]ml2.south){人工设计}; \node[anchor=south,wnode] (wl5) at ([xshift=0em,yshift=0.15em]ml2.south){人工设计};
\node[anchor=south,wnode] (wl6) at ([xshift=0em,yshift=0em]ml3.south){人工设计}; \node[anchor=south,wnode] (wl6) at ([xshift=0em,yshift=0.15em]ml3.south){人工设计};
\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!60}特征}{\color{blue!60}数据}\\中信息进行提取}; \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=west,wnode,align=right,font=\tiny] (wl8) at ([xshift=0.5em,yshift=0em]cl2.east){使用提取的信息对\\{\color{red!50}模型}中的参数\\进行训练}; \node[anchor=west,wnode,align=right,font=\tiny] (wl8) at ([xshift=0.5em,yshift=0em]cl2.east){使用提取的信息对\\{\color{red!50}\bfnew{模型}}中的参数\\进行训练};
\draw [-,thick,dotted] ([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);
\draw [-,thick,dotted] ([xshift=0em,yshift=0em]ml2.west) -- ([xshift=0em,yshift=0em]ml2.east); \draw [-,thick,dashed] ([xshift=0em,yshift=0em]ml2.west) -- ([xshift=0em,yshift=0em]ml2.east);
\draw [-,thick,dotted] ([xshift=0em,yshift=0em]ml3.west) -- ([xshift=0em,yshift=0em]ml3.east); \draw [-,thick,dashed] ([xshift=0em,yshift=0em]ml3.west) -- ([xshift=0em,yshift=0em]ml3.east);
\draw[->,thick] ([xshift=-1.5em,yshift=-0em]ml1.north)..controls +(north:3em) and +(west:0em)..([xshift=-0em,yshift=-0em]cl1.west) ; \draw[->,thick] ([xshift=-1.5em,yshift=-0em]ml1.north)..controls +(north:3em) and +(west:0em)..([xshift=-0em,yshift=-0em]cl1.west) ;
\draw[->,thick] ([xshift=0em,yshift=-0em]ml2.north)..controls +(north:3em) and +(west:0em)..([xshift=-0em,yshift=-0em]cl1.east) ; \draw[->,thick] ([xshift=0em,yshift=-0em]ml2.north)..controls +(north:3em) and +(west:0em)..([xshift=-0em,yshift=-0em]cl1.east) ;
...@@ -57,19 +57,19 @@ ...@@ -57,19 +57,19 @@
} }
{%subfigure-center {%subfigure-center
\node[anchor=north,wnode,font=\footnotesize] (wc1) at ([xshift=0em,yshift=0em]mc1.north){训练数据}; \node[anchor=north,wnode,font=\footnotesize] (wc1) at ([xshift=0em,yshift=-0.15em]mc1.north){训练数据};
\node[anchor=north,wnode,font=\footnotesize] (wc2) at ([xshift=0em,yshift=0em]mc2.north){模型结构}; \node[anchor=north,wnode,font=\footnotesize] (wc2) at ([xshift=0em,yshift=-0.15em]mc2.north){模型结构};
\node[anchor=south,wnode] (wc3) at ([xshift=0em,yshift=0em]mc1.south){人工/自动收集}; \node[anchor=south,wnode] (wc3) at ([xshift=0em,yshift=0.15em]mc1.south){人工/自动收集};
\node[anchor=south,wnode] (wc4) at ([xshift=0em,yshift=0em]mc2.south){人工设计}; \node[anchor=south,wnode] (wc4) at ([xshift=0em,yshift=0.15em]mc2.south){人工设计};
\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!60}模型}{\color{blue!60}数据}\\中信息进行提取}; \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=west,wnode,align=right,font=\tiny] (wl8) at ([xshift=0.5em,yshift=0em]cc2.east){使用提取的信息对\\{\color{red!60}模型}中的参数\\进行训练}; \node[anchor=west,wnode,align=right,font=\tiny] (wl8) at ([xshift=0.5em,yshift=0em]cc2.east){使用提取的信息对\\{\color{red!50} \bfnew{模型}}中的参数\\进行训练};
\draw [-,thick,dotted] ([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);
\draw [-,thick,dotted] ([xshift=0em,yshift=0em]mc2.west) -- ([xshift=0em,yshift=0em]mc2.east); \draw [-,thick,dashed] ([xshift=0em,yshift=0em]mc2.west) -- ([xshift=0em,yshift=0em]mc2.east);
\draw[->,thick] ([xshift=-2em,yshift=-0em]mc1.north)..controls +(north:3em) and +(west:0em)..([xshift=-0em,yshift=-0em]cc1.west) ; \draw[->,thick] ([xshift=-2em,yshift=-0em]mc1.north)..controls +(north:3em) and +(west:0em)..([xshift=-0em,yshift=-0em]cc1.west) ;
\draw[->,thick] ([xshift=0em,yshift=-0em]mc2.north)..controls +(north:2em) and +(west:0em)..([xshift=-0em,yshift=-0em]cc1.east) ; \draw[->,thick] ([xshift=0em,yshift=-0em]mc2.north)..controls +(north:2em) and +(west:0em)..([xshift=-0em,yshift=-0em]cc1.east) ;
...@@ -80,21 +80,21 @@ ...@@ -80,21 +80,21 @@
} }
{%subfigure-right {%subfigure-right
\node[anchor=north,wnode,font=\footnotesize] (wr1) at ([xshift=0em,yshift=0em]mr1.north){训练数据}; \node[anchor=north,wnode,font=\footnotesize] (wr1) at ([xshift=0em,yshift=-0.15em]mr1.north){训练数据};
\node[anchor=south,wnode] (wr2) at ([xshift=0em,yshift=0em]mr1.south){人工/自动收集}; \node[anchor=south,wnode] (wr2) at ([xshift=0em,yshift=0.15em]mr1.south){人工/自动收集};
\node[anchor=south,cnode,fill=white] (cr1) at ([xshift=-2.5em,yshift=2.8em]m3.south){}; \node[anchor=south,cnode,fill=white] (cr1) at ([xshift=-2.5em,yshift=2.8em]m3.south){};
\node[anchor=north,cnode,fill=white] (cr2) at ([xshift=0em,yshift=-1em]m3.north){}; \node[anchor=north,cnode,fill=white] (cr2) at ([xshift=0em,yshift=-1em]m3.north){};
\node[anchor=south,cnode,fill=white] (cr3) at ([xshift=-5.8em,yshift=0.7em]m3.south){}; \node[anchor=south,cnode,fill=white] (cr3) at ([xshift=-6.2em,yshift=0.7em]m3.south){};
\node[anchor=north,wnode,align=right,font=\tiny] (wr3) at ([xshift=1em,yshift=-0.5em]cr2.south){使用{\color{red!60}模型}\\{\color{blue!60}数据}\\中的\\信息}; \node[anchor=north,wnode,align=right,font=\tiny] (wr3) at ([xshift=1em,yshift=-0.5em]cr2.south){使用{\color{red!50} \bfnew{模型}}\\{\color{blue} \bfnew{数据}}\\中的\\信息};
\node[anchor=west,wnode,align=right,font=\tiny] (wr4) at ([xshift=0.5em,yshift=0em]cr2.east){使用提取的信息对\\{\color{red!60}模型}中的参数\\进行训练}; \node[anchor=west,wnode,align=right,font=\tiny] (wr4) at ([xshift=0.5em,yshift=0em]cr2.east){使用提取的信息对\\{\color{red!50} \bfnew{模型}}中的参数\\进行训练};
\node[anchor=west,wnode,align=left,font=\tiny] (wr5) at ([xshift=0.2em,yshift=0em]cr3.east){使用{\color{blue!60}数据}{\color{red!60}模型}\\的结构进行搜索}; \node[anchor=west,wnode,align=left,font=\tiny] (wr5) at ([xshift=0.2em,yshift=0em]cr3.east){使用{\color{blue} \bfnew{数据}}{\color{red!50} \bfnew{模型}}\\的结构进行搜索};
\draw [-,thick,dotted] ([xshift=0em,yshift=0em]mr1.west) -- ([xshift=0em,yshift=0em]mr1.east); \draw [-,thick,dashed] ([xshift=0em,yshift=0em]mr1.west) -- ([xshift=0em,yshift=0em]mr1.east);
\draw[->,thick] ([xshift=-5.8em,yshift=0em]mr1.north) -- ([xshift=0em,yshift=0em]cr3.south); \draw[->,thick] ([xshift=-6.2em,yshift=0em]mr1.north) -- ([xshift=0em,yshift=0em]cr3.south);
\draw[->,thick] ([xshift=0em,yshift=-0em]cr3.north)..controls +(north:1.3em) and +(west:0em)..([xshift=-0em,yshift=-0em]cr1.west) ; \draw[->,thick] ([xshift=0em,yshift=-0em]cr3.north)..controls +(north:1.3em) and +(west:0em)..([xshift=-0em,yshift=-0em]cr1.west) ;
\draw[->,thick] ([xshift=1em,yshift=-0em]mr1.north)..controls +(north:4em) and +(west:0em)..([xshift=-0em,yshift=-0em]cr1.east) ; \draw[->,thick] ([xshift=1em,yshift=-0em]mr1.north)..controls +(north:4em) and +(west:0em)..([xshift=-0em,yshift=-0em]cr1.east) ;
\draw[->,thick] ([xshift=0em,yshift=-0em]cr1.north east)..controls +(north:1em) and +(west:0em)..([xshift=-0em,yshift=-0em]cr2.west) ; \draw[->,thick] ([xshift=0em,yshift=-0em]cr1.north east)..controls +(north:1em) and +(west:0em)..([xshift=-0em,yshift=-0em]cr2.west) ;
......
...@@ -9,15 +9,15 @@ ...@@ -9,15 +9,15 @@
\node [anchor=north,rectangle,minimum height=1.5em,minimum width=2.5em,rounded corners=5pt] (n2) at ([xshift=0em,yshift=-0.2em]n1.south) {$\mathbi{X}$}; \node [anchor=north,rectangle,minimum height=1.5em,minimum width=2.5em,rounded corners=5pt] (n2) at ([xshift=0em,yshift=-0.2em]n1.south) {$\mathbi{X}$};
\node [anchor=west,encnode,draw=red!60!black!80,fill=red!20] (n3) at ([xshift=1.5em,yshift=0em]n2.east) {$\mathbi{h}^0$}; \node [anchor=west,encnode,draw=red!60!black!80,fill=red!20] (n3) at ([xshift=1.5em,yshift=0em]n2.east) {$\mathbi{h}^1$};
\node [anchor=west,encnode,draw=red!60!black!80,fill=red!20] (n4) at ([xshift=1.5em,yshift=0em]n3.east) {$\mathbi{h}^1$}; \node [anchor=west,encnode,draw=red!60!black!80,fill=red!20] (n4) at ([xshift=1.5em,yshift=0em]n3.east) {$\mathbi{h}^2$};
\node [anchor=west,encnode,draw=red!60!black!80,fill=red!20] (n5) at ([xshift=1.5em,yshift=0em]n4.east) {$\mathbi{h}^2$}; \node [anchor=west,encnode,draw=red!60!black!80,fill=red!20] (n5) at ([xshift=1.5em,yshift=0em]n4.east) {$\mathbi{h}^3$};
\node [anchor=west,rectangle,minimum height=1.5em,minimum width=2.5em,rounded corners=5pt] (n6) at ([xshift=1em,yshift=0em]n5.east) {$\ldots$}; \node [anchor=west,rectangle,minimum height=1.5em,minimum width=2.5em,rounded corners=5pt] (n6) at ([xshift=1em,yshift=0em]n5.east) {$\ldots$};
\node [anchor=west,encnode,draw=red!60!black!80,fill=red!20] (n7) at ([xshift=1em,yshift=0em]n6.east) {$\mathbi{h}^{L-1}$}; \node [anchor=west,encnode,draw=red!60!black!80,fill=red!20] (n7) at ([xshift=1em,yshift=0em]n6.east) {$\mathbi{h}^{L}$};
\node [anchor=north,rectangle,draw=teal!80, inner sep=0mm,minimum height=2em,minimum width=8em,fill=teal!17,rounded corners=5pt,thick] (n8) at ([xshift=3em,yshift=-1.5em]n4.south) {权重聚合$\mathbi{g}$}; \node [anchor=north,rectangle,draw=teal!80, inner sep=0mm,minimum height=2em,minimum width=8em,fill=teal!17,rounded corners=5pt,thick] (n8) at ([xshift=3em,yshift=-1.5em]n4.south) {权重聚合$\mathbi{g}$};
...@@ -27,15 +27,15 @@ ...@@ -27,15 +27,15 @@
\node [anchor=north,rectangle,minimum height=1.5em,minimum width=2.5em,rounded corners=5pt] (n10) at ([xshift=0em,yshift=-0.2em]n9.south) {$\mathbi{y}_{<j}$}; \node [anchor=north,rectangle,minimum height=1.5em,minimum width=2.5em,rounded corners=5pt] (n10) at ([xshift=0em,yshift=-0.2em]n9.south) {$\mathbi{y}_{<j}$};
\node [anchor=west,decnode,draw=ublue,fill=blue!10] (n11) at ([xshift=1.5em,yshift=0em]n10.east) {$\mathbi{s}^0_{j}$}; \node [anchor=west,decnode,draw=ublue,fill=blue!10] (n11) at ([xshift=1.5em,yshift=0em]n10.east) {$\mathbi{s}^1_{j}$};
\node [anchor=west,decnode,draw=ublue,fill=blue!10] (n12) at ([xshift=1.5em,yshift=0em]n11.east) {$\mathbi{s}^1_{j}$}; \node [anchor=west,decnode,draw=ublue,fill=blue!10] (n12) at ([xshift=1.5em,yshift=0em]n11.east) {$\mathbi{s}^2_{j}$};
\node [anchor=west,decnode,draw=ublue,fill=blue!10] (n13) at ([xshift=1.5em,yshift=0em]n12.east) {$\mathbi{s}^2_{j}$}; \node [anchor=west,decnode,draw=ublue,fill=blue!10] (n13) at ([xshift=1.5em,yshift=0em]n12.east) {$\mathbi{s}^3_{j}$};
\node [anchor=west,rectangle,minimum height=1.5em,minimum width=2.5em,rounded corners=5pt] (n14) at ([xshift=1em,yshift=0em]n13.east) {$\ldots$}; \node [anchor=west,rectangle,minimum height=1.5em,minimum width=2.5em,rounded corners=5pt] (n14) at ([xshift=1em,yshift=0em]n13.east) {$\ldots$};
\node [anchor=west,decnode,draw=ublue,fill=blue!10] (n15) at ([xshift=1em,yshift=0em]n14.east) {$\mathbi{s}^{M-1}_{j}$}; \node [anchor=west,decnode,draw=ublue,fill=blue!10] (n15) at ([xshift=1em,yshift=0em]n14.east) {$\mathbi{s}^{M}_{j}$};
\node [anchor=west,rectangle,minimum height=1.5em,minimum width=2.5em,rounded corners=5pt] (n16) at ([xshift=1.5em,yshift=0em]n15.east) {$\mathbi{y}_{j}$}; \node [anchor=west,rectangle,minimum height=1.5em,minimum width=2.5em,rounded corners=5pt] (n16) at ([xshift=1.5em,yshift=0em]n15.east) {$\mathbi{y}_{j}$};
......
\begin{tikzpicture} \begin{tikzpicture}
\tikzstyle{node}=[draw,minimum height=1.4em,minimum width=2em,rounded corners=1pt,thick] \tikzstyle{node}=[draw,minimum height=1.4em,minimum width=2em,rounded corners=1pt,thick]
%violet
\begin{scope}[scale=0.36] \begin{scope}[scale=0.36]
\tikzstyle{every node}=[scale=0.36] \tikzstyle{every node}=[scale=0.36]
\node[draw=ublue,very thick,rounded corners=3pt,drop shadow,fill=white,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=ublue,very thick,rounded corners=3pt,drop shadow,fill=white,minimum width=22em,minimum height=25em] (rec2) at (-12.4,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=ublue,very thick,rounded corners=3pt,drop shadow,fill=white,minimum width=24em,minimum height=25em] (rec1) at (-24,0){}; \node[draw,very thick,rounded corners=3pt,drop shadow,fill=yellow!30,minimum width=24em,minimum height=25em] (rec1) at (-24,0){};
%left %left
\node[text=ublue] (label1) at (-26.4,4){\Huge\bfnew{结构空间}}; \node[] (label1) at (-26.4,4){\Huge\bfnew{结构空间}};
\node[align=left] at (-24,-0.5){\Huge\bfnew{1.前馈神经网络} \\ [4ex] \Huge\bfnew{2.卷积神经网络} \\ [4ex] \Huge\bfnew{3.循环神经网络} \\ [4ex] \Huge\bfnew{4. Transformer网络} \\ [4ex] \Huge\bfnew{...}}; \node[align=left] at (-24,-0.5){\Huge{1.前馈神经网络} \\ [4ex] \Huge{2.卷积神经网络} \\ [4ex] \Huge{3.循环神经网络} \\ [4ex] \Huge{4. Transformer网络} \\ [4ex] \Huge{...}};
\draw[ublue,very thick,-latex] (rec1.0) -- node[align=center,above,text=violet]{\huge{设计} \\ \huge{搜索} \\ \huge{空间}}(rec2.180); \draw[very thick,-latex] (rec1.0) -- node[align=center,above,text=ublue]{\huge\bfnew{设计} \\ \huge\bfnew{搜索} \\ \huge\bfnew{空间}}(rec2.180);
%mid %mid
\node[text=ublue] (label2) at (-14.4,4){\Huge\bfnew{搜索空间}}; \node[] (label2) at (-14.4,4){\Huge\bfnew{搜索空间}};
\node[align=left] at (-12.4,-0.5){\Huge\bfnew{循环神经网络} \\ [4ex] \Huge\bfnew{1.普通RNN网络} \\ [4ex] \Huge\bfnew{2. LSTM网络} \\ [4ex] \Huge\bfnew{3. GRU网络} \\ [4ex] \Huge\bfnew{...}}; \node[align=left] at (-12.4,-0.5){\Huge{循环神经网络} \\ [4ex] \Huge{1.普通RNN网络} \\ [4ex] \Huge{2. LSTM网络} \\ [4ex] \Huge{3. GRU网络} \\ [4ex] \Huge{...}};
\draw[ublue,very thick,-latex] (rec2.0) -- node[align=center,above,text=violet]{\huge{选择} \\ \huge{搜索} \\ \huge{策略}}(rec3.180); \draw[very thick,-latex] (rec2.0) -- node[align=center,above,text=ublue]{\huge\bfnew{选择} \\ \huge\bfnew{搜索} \\ \huge\bfnew{策略}}(rec3.180);
\draw[ublue,very thick,-latex,out=-150,in=-30] (rec3.-90) to node[above,text=violet,yshift=1em]{\huge{迭代结构搜索的过程}}(rec2.-90); \draw[very thick,-latex,out=-150,in=-30] (rec3.-90) to node[above,text=ublue,yshift=1em]{\huge\bfnew{迭代结构搜索的过程}}(rec2.-90);
\draw[ublue,very thick,-latex,out=60,in=130] ([xshift=-8em]rec3.90) to node[above,text=violet]{\huge{性能评估}}([xshift=8em]rec3.90); \draw[very thick,-latex,out=60,in=130] ([xshift=-8em]rec3.90) to node[above,text=ublue]{\huge\bfnew{性能评估}}([xshift=8em]rec3.90);
%right %right
\node[node] (n1) at (0,0){}; \node[node] (n1) at (0,0){};
\node[node] (n2) at (1.5,0){}; \node[node] (n2) at (1.5,0){};
...@@ -52,7 +52,7 @@ ...@@ -52,7 +52,7 @@
\node[font=\Huge] at (9,0){$\cdots$}; \node[font=\Huge] at (9,0){$\cdots$};
\node[font=\Huge] at (-4.5,0){$\cdots$}; \node[font=\Huge] at (-4.5,0){$\cdots$};
\node[text=ublue] (label3) at (-2,4){\Huge\bfnew{找到的模型结构}}; \node[] (label3) at (-2,4){\Huge\bfnew{找到的模型结构}};
\node[draw,rounded corners=6pt,very thick,minimum width=16em,minimum height=15em] (box1) at (2.25,0){}; \node[draw,rounded corners=6pt,very thick,minimum width=16em,minimum height=15em] (box1) at (2.25,0){};
......
...@@ -27,8 +27,8 @@ ...@@ -27,8 +27,8 @@
{0/0/8, 1/0/9, 2/0/10, 3/0/11, 4/0/12, 5/0/13, 6/0/14} {0/0/8, 1/0/9, 2/0/10, 3/0/11, 4/0/12, 5/0/13, 6/0/14}
\node[anchor=north] (n\k) at ([xshift=-0em,yshift=-0.5em]a\i\j.south) {\i}; \node[anchor=north] (n\k) at ([xshift=-0em,yshift=-0.5em]a\i\j.south) {\i};
\node [anchor=east] (l1) at ([xshift=-0.3em,yshift=0em]n8.west) {$i$}; \node [anchor=east] (l1) at ([xshift=-0.3em,yshift=0em]n8.west) {$j$};
\node [anchor=north] (l2) at ([xshift=0em,yshift=-0em]n7.south) {$j$}; \node [anchor=north] (l2) at ([xshift=0em,yshift=-0em]n7.south) {$i$};
%\node [anchor=north] (n1) at ([xshift=0em,yshift=0em]a00.south west) {}; %\node [anchor=north] (n1) at ([xshift=0em,yshift=0em]a00.south west) {};
......
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
\sectionnewpage \sectionnewpage
\section{注意力机制的改进} \section{注意力机制的改进}
\parinterval 注意力机制是神经机器翻译成功的关键。以Transformer模型为例,由于使用了自注意力机制,该模型展现出较高的训练并行性,在机器翻译、语言建模等任务上也取得了很好的表现。但是Transformer模型仍存在许多亟待解决的问题,例如,在处理长文本序列时(假设文本长度为$N$),自注意力机制的时间复杂度为$O(N^2)$,当$N$过大时翻译速度很低。此外,尽管Transformer模型的输入中包含了绝对位置编码表示,但是现有的自注意力机制仍然无法显性捕获局部窗口下不同位置之间的关系。而且注意力机制也需要更多样的手段进行特征提取,例如,采用多头或者多分支结构对不同空间特征进行提取。针对以上问题,本节将介绍注意力机制的优化策略,并重点讨论Transformer模型的若干改进方法。 \parinterval 注意力机制是神经机器翻译成功的关键。以Transformer模型为例,由于使用了自注意力机制,该模型展现出较高的训练并行性,同时在机器翻译、语言建模等任务上,该模型也取得了很好的表现。但是Transformer模型仍存在许多亟待解决的问题,例如,在处理长文本序列时(假设文本长度为$N$),自注意力机制的时间复杂度为$O(N^2)$,当$N$过大时翻译速度很低。此外,尽管Transformer模型的输入中包含了绝对位置编码表示,但是现有的自注意力机制仍然无法显性捕获局部窗口下不同位置之间的关系。而且注意力机制也需要更多样的手段进行特征提取,例如,采用多头或者多分支结构对不同空间特征进行提取。针对以上问题,本节将介绍注意力机制的优化策略,并重点讨论Transformer模型的若干改进方法。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SECTION % NEW SUB-SECTION
...@@ -42,11 +42,11 @@ ...@@ -42,11 +42,11 @@
\subsection{局部信息建模}\label{subsec-15.1.1} \subsection{局部信息建模}\label{subsec-15.1.1}
\parinterval 使用循环神经网络进行序列建模时,每一个时刻的计算都依赖于上一时刻循环单元的状态。这种模式天然具有一定的时序性,同时具有{\small\bfnew{归纳偏置}}\index{归纳偏置}(Inductive Bias)\index{Inductive Bias}的特性\upcite{DBLP:journals/corr/abs-1806-01261},即每一时刻的状态仅仅基于当前时刻的输入和前一时刻的状态。这种归纳偏置的好处在于,由于模型并不需要对绝对位置进行建模,因此模型可以很容易处理任意长度的序列,即使测试样本显著长于训练样本。 \parinterval 使用循环神经网络进行序列建模时,每一个时刻的计算都依赖于上一时刻循环单元的状态。这种模式天然具有一定的时序性,同时具有{\small\bfnew{归纳偏置}}\index{归纳偏置}(Inductive Bias)\index{Inductive Bias}的特性\upcite{DBLP:journals/corr/abs-1806-01261},即每一时刻的状态仅仅基于当前时刻的输入和前一时刻的状态。这种归纳偏置的好处在于,模型并不需要对绝对位置进行建模,因此模型可以很容易处理任意长度的序列,即使测试样本显著长于训练样本。
\parinterval 但是,Transformer模型中的自注意力机制本身并不具有这种性质,而且它直接忽略了输入单元之间的位置关系。虽然,Transformer中引入了基于正余弦函数的绝对位置编码(见{\chaptertwelve}),但是该方法仍然无法显性区分局部依赖与长距离依赖\footnote[1]{局部依赖指当前位置与局部的相邻位置之间的联系。} \parinterval 但是,Transformer模型中的自注意力机制本身并不具有这种性质,而且它直接忽略了输入单元之间的位置关系。虽然,Transformer中引入了基于正余弦函数的绝对位置编码(见{\chaptertwelve}),但是该方法仍然无法显性区分局部依赖与长距离依赖\footnote[1]{局部依赖指当前位置与局部的相邻位置之间的联系。}
\parinterval 针对上述问题,研究人员设计了“相对位置”编码,对原有的“绝对位置”编码进行补充,强化了局部依赖\upcite{Dai2019TransformerXLAL,Shaw2018SelfAttentionWR}。此外,由于模型中每一层均存在自注意力机制计算,因此模型捕获位置信息的能力也逐渐减弱,这种现象在深层模型中尤为明显。而利用相对位置编码能够把位置信息显性加入到每一层的注意力机制的计算中,进而强化深层模型中局部位相对位置编码和绝对位置编码方法置的表示能力\upcite{li2020shallow}。图\ref{fig:15-1}对比了Transformer中相对位置编码和绝对位置编码方法。 \parinterval 针对上述问题,研究人员设计了“相对位置”编码,对原有的“绝对位置”编码进行补充{\red (要不要用编码?)},强化了局部依赖\upcite{Dai2019TransformerXLAL,Shaw2018SelfAttentionWR}。此外,由于模型中每一层均存在自注意力机制计算,因此模型捕获位置信息的能力也逐渐减弱,这种现象在深层模型中尤为明显。而利用相对位置编码能够把位置信息显性加入到每一层的注意力机制的计算中,{\red 进而强化深层模型中局部位置相对位置编码和绝对位置编码方法的表示能力(表意不对吧?)}\upcite{li2020shallow}。图\ref{fig:15-1}对比了Transformer中绝对位置编码和相对位置编码方法。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -71,7 +71,7 @@ ...@@ -71,7 +71,7 @@
\label{eq:15-3} \label{eq:15-3}
\end{eqnarray} \end{eqnarray}
\noindent 其中,$\mathbi{x}$为上一层的输出\footnote[2]{这里,$\mathbi{K}$$\mathbi{Q}$$\mathbi{V}$的定义与{\chaptertwelve}略有不同,因为在这里的$\mathbi{K}$$\mathbi{Q}$$\mathbi{V}$ 是指对注意力模型输入进行线性变换后的结果,而{\chaptertwelve}$\mathbi{K}$$\mathbi{Q}$$\mathbi{V}$直接表示输入。但是,这两种描述方式本质上是一样的,区别仅仅在于对输入的线性变化是放在输入自身中描述,还是作为输入之后的一个额外操作。}$\mathbi{W}_Q$$\mathbi{W}_K$$\mathbi{W}_V$为模型参数,它们可以通过自动学习得到。此时,对于整个模型输入的向量序列$\seq{x}=\{\mathbi{x}_1,\ldots,\mathbi{x}_m\}$,通过点乘计算,可以得到当前位置$i$和序列中所有位置间的关系,记为$\mathbi{z}_{i} $,计算公式如下: \noindent 其中,$\mathbi{x}$为上一层的输出\footnote[2]{这里,$\mathbi{K}$$\mathbi{Q}$$\mathbi{V}$的定义与{\chaptertwelve}略有不同,因为在这里的$\mathbi{K}$$\mathbi{Q}$$\mathbi{V}$ 是指对注意力模型输入进行线性变换后的结果,而{\chaptertwelve}$\mathbi{K}$$\mathbi{Q}$$\mathbi{V}$直接表示输入。但是,这两种描述方式本质上是一样的,区别仅仅在于对输入的线性变化是放在输入自身中描述,还是作为输入之后的一个额外操作。}$\mathbi{W}_Q$$\mathbi{W}_K$$\mathbi{W}_V$为模型参数,它们可以通过自动学习得到。此时,对于整个模型输入的向量序列$\seq{x}=\{\mathbi{x}_1,\ldots,\mathbi{x}_m\}${\red (序列x和上面的x是一个东西?)},通过点乘计算,可以得到当前位置$i$和序列中所有位置间的关系,记为$\mathbi{z}_{i} $,计算公式如下:
\begin{eqnarray} \begin{eqnarray}
\mathbi{z}_{i} &=& \sum_{j=1}^m \alpha_{ij}(\mathbi{x}_j \mathbi{W}_V) \mathbi{z}_{i} &=& \sum_{j=1}^m \alpha_{ij}(\mathbi{x}_j \mathbi{W}_V)
\label{eq:15-4} \label{eq:15-4}
...@@ -103,7 +103,7 @@ ...@@ -103,7 +103,7 @@
\label{eq:15-9} \label{eq:15-9}
\end{eqnarray} \end{eqnarray}
\noindent 其中,$\mathbi{w}^K \in \mathbb{R}^{d_k}$$\mathbi{w}^V \in \mathbb{R}^{d_k}$是模型中可学习的参数矩阵;$\textrm{clip}(\cdot,\cdot)$表示截断操作,由公式\eqref{eq:15-9}定义。可以看出,$\mathbi{a}^K$$\mathbi{a}^V$ 是根据输入的相对位置信息(由$\textrm{clip}(j-i,k)$确定)对$\mathbi{w}^K$$\mathbi{w}^V$进行查表得到的向量,即相对位置表示,如图\ref{fig:15-2}所示。这里通过预先设定的最大相对位置$k$,强化模型对当前词为中心的左右各$k$ 个词的注意力计算。因此,最终的窗口大小为$2k + 1$。 对于边缘位置窗口大小不足$2k$的单词,采用了裁剪的机制,即只对有效的临近词进行建模。此时,注意力模型的计算可以调整为: \noindent 其中,$\mathbi{w}^K \in \mathbb{R}^{d_k}$$\mathbi{w}^V \in \mathbb{R}^{d_k}$是模型中可学习的参数矩阵;$\textrm{clip}(\cdot,\cdot)$表示截断操作,由公式\eqref{eq:15-9}定义。可以看出,$\mathbi{a}^K$$\mathbi{a}^V$ 是根据输入的相对位置信息(由$\textrm{clip}(j-i,k)$确定)对$\mathbi{w}^K$$\mathbi{w}^V$进行查表得到的向量,即相对位置表示,如图\ref{fig:15-2}所示。这里通过预先设定的最大相对位置$k$,强化模型对当前词为中心的左右各$k$ 个词的注意力计算。因此,最终的窗口大小为$2k + 1$。 对于边缘位置窗口大小不足$2k$的单词,采用了裁剪的机制,即只对有效的临近词进行建模。此时,注意力模型的计算可以调整为:
\begin{eqnarray} \begin{eqnarray}
\mathbi{z}_{i} &=& \sum_{j=1}^m \alpha_{ij}(\mathbi{x}_j \mathbi{W}_V + \mathbi{a}_{ij}^V) \mathbi{z}_{i} &=& \sum_{j=1}^m \alpha_{ij}(\mathbi{x}_j \mathbi{W}_V + \mathbi{a}_{ij}^V)
\label{eq:15-10} \label{eq:15-10}
...@@ -128,27 +128,27 @@ ...@@ -128,27 +128,27 @@
\noindent 可以注意到,公式\eqref{eq:15-10}和公式\eqref{eq:15-11}将位置编码信息直接暴露给每一层注意力机制的计算,而不是像标准Transformer中只将其作为整个模型的输入。 \noindent 可以注意到,公式\eqref{eq:15-10}和公式\eqref{eq:15-11}将位置编码信息直接暴露给每一层注意力机制的计算,而不是像标准Transformer中只将其作为整个模型的输入。
\vspace{0.5em} \vspace{0.5em}
\item Transformer-XL\upcite{Dai2019TransformerXLAL}。在Transformer中,模型的输入由词嵌入表示与绝对位置编码组成,例如,对于输入层有,$x_i = \mathbi{E}_{x_i} + \mathbi{U}_i$$x_j=\mathbi{E}_{x_j} + \mathbi{U}_j$,其中$\mathbi{E}_{x_i} $$\mathbi{E}_{x_j} $表示词嵌入,$\mathbi{U}_i$$\mathbi{U}_j$表示绝对位置编码(正余弦函数)。将其代入公式\eqref{eq:15-6}中可以得到: \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}中可以得到:
\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)}^{T}}{\sqrt{d_k}}
\label{eq:15-12} \label{eq:15-12}
\end{eqnarray} \end{eqnarray}
\noindent 通过将$\mathbi{e}_{ij}$展开可以得到公式\eqref{eq:15-12}的分子部分: \noindent {\red 这里使用$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}^{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 \\
& & \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}^{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)}}
\label{eq:15-13} \label{eq:15-13}
\end{eqnarray} \end{eqnarray}
\noindent 这里$\mathbi{W}_Q$$\mathbi{W}_K$表示线性变换矩阵。为了引入相对位置信息,可以将公式\eqref{eq:15-13}修改为如下形式: \noindent {\red 其中,${\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}^{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 \\
& & \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}^{T}\mathbi{E}_{x_j}^{T}}_{\textrm{(c)}} + \underbrace{\mathbi{v}\mathbi{W}_{K,R}^{T}\mathbi{R}_{i-j}^{T}}_{\textrm{(d)}}
\label{eq:15-14} \label{eq:15-14}
\end{eqnarray} \end{eqnarray}
\noindent 其中$A_{ij}^{\rm rel}$为使用相对位置编码后位置$i$$j$关系的表示结果。公式中各项的含义为:(a)表示位置$i$与位置$j$之间词嵌入的相关性,可以看作是基于内容的表示,(b)表示基于内容的位置偏置,(c)表示全局内容的偏置,(d) 表示全局位置的偏置。公式\eqref{eq:15-13}中的(a)、(b)两项与前面介绍的相对位置编码一致\upcite{Shaw2018SelfAttentionWR},并针对相对位置编码引入了额外的线性变换矩阵。同时,这种方法兼顾了全局内容偏置和全局位置偏置,可以更好地利用正余弦函数的归纳偏置特性。 \noindent 其中{\red (上式,u,v,R没解释)}$A_{ij}^{\rm rel}$为使用相对位置编码后位置$i$$j$关系的表示结果。公式中各项的含义为:(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}。 例如,可以通过对输入句子进行依存句法分析得到句法树,根据叶子结点在句法树中的深度来表示其绝对位置,并在此基础上利用相对位置编码的思想计算节点之间的相对位置信息。
...@@ -168,7 +168,7 @@ A_{ij}^{\rm rel} &=& \underbrace{\mathbi{E}_{x_i}\mathbi{W}_Q\mathbi{W}_{K}^{T}\ ...@@ -168,7 +168,7 @@ A_{ij}^{\rm rel} &=& \underbrace{\mathbi{E}_{x_i}\mathbi{W}_Q\mathbi{W}_{K}^{T}\
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
\item {\small\bfnew{引入高斯约束}}\upcite{Yang2018ModelingLF}。如图\ref{fig:15-3}所示,这类方法的核心思想是引入可学习的高斯分布$\mathbi{G}$作为局部约束,与注意力权重进行融合。 \item {\small\bfnew{引入高斯约束}}\upcite{Yang2018ModelingLF}。如图\ref{fig:15-3}所示,这类方法的核心思想是引入可学习的高斯分布$\mathbi{G}$作为局部约束,与注意力权重进行融合。{\red (曲线再问问?)}
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -191,7 +191,7 @@ G_{ij} &=& - \frac{{(j - P_i)}^2}{2\sigma_i^2} ...@@ -191,7 +191,7 @@ G_{ij} &=& - \frac{{(j - P_i)}^2}{2\sigma_i^2}
\label{eq:15-16} \label{eq:15-16}
\end{eqnarray} \end{eqnarray}
\noindent 其中,$\sigma_i$表示偏差,被定义为局部建模窗口大小$D_i$的一半,即$\sigma_i = \frac{D_i}{2}$。中心位置$P_i$$D_i$的计算方式如下: \noindent 其中,$\sigma_i$表示偏差,被定义为局部建模窗口大小$D_i$的一半{\red (第i个词?)},即$\sigma_i = \frac{D_i}{2}$。中心位置$P_i$$D_i$的计算方式如下:{\red (局部建模窗口?)}
\begin{eqnarray} \begin{eqnarray}
\begin{pmatrix} P_i \\ D_i \end{pmatrix} &=& m \cdot \textrm{Sigmoid}(\begin{pmatrix} p_i \\ v_i \end{pmatrix}) \begin{pmatrix} P_i \\ D_i \end{pmatrix} &=& m \cdot \textrm{Sigmoid}(\begin{pmatrix} p_i \\ v_i \end{pmatrix})
\label{eq:15-17} \label{eq:15-17}
...@@ -207,7 +207,7 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i) ...@@ -207,7 +207,7 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\noindent 其中,$\mathbi{W}_p$$\mathbi{W}_d$$\mathbi{I}_p$$\mathbi{I}_d$均为模型中可学习的参数矩阵。 \noindent 其中,$\mathbi{W}_p$$\mathbi{W}_d$$\mathbi{I}_p$$\mathbi{I}_d$均为模型中可学习的参数矩阵。
\vspace{0.5em} \vspace{0.5em}
\item {\small\bfnew{多尺度局部建模}}\upcite{DBLP:conf/aaai/GuoQLXZ20}。不同于上述方法直接作用于注意力权重,多尺度局部建模通过赋予多头不一样的局部感受野,间接地引入局部约束(图\ref{fig:15-4})。 \item {\small\bfnew{多尺度局部建模}}\upcite{DBLP:conf/aaai/GuoQLXZ20}。不同于上述方法直接作用于注意力权重,多尺度局部建模通过赋予多头不一样的局部感受野{\red(什么是感受野,是否是专有名词)},间接地引入局部约束(图\ref{fig:15-4})。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -224,7 +224,7 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i) ...@@ -224,7 +224,7 @@ v_i &=& \mathbi{I}_d^T\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\label{eq:15-20} \label{eq:15-20}
\end{eqnarray} \end{eqnarray}
\noindent 其中,$C(\mathbi{x}_j \mathbi{W}_K,\omega)$表示根据超参数$\omega$自适应的Key: \noindent 其中,$C(\mathbi{x}_j \mathbi{W}_K,\omega)$表示根据超参数$\omega$自适应的Key:{\red (这块的反馈是什么意思?)}
\begin{eqnarray} \begin{eqnarray}
C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}_{j+\omega}) C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}_{j+\omega})
\label{eq:15-21} \label{eq:15-21}
...@@ -239,7 +239,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x} ...@@ -239,7 +239,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
\parinterval 值得注意的是上述两种添加局部约束的方法都更适用于Transformer模型的底层网络。这是由于模型离输入更近的层更倾向于捕获局部信息,伴随着神经网络的加深,模型更倾向于逐渐加强全局建模的能力。类似的结论在针对BERT模型的解释性研究工作中也有论述\upcite{Jawahar2019WhatDB,DBLP:conf/emnlp/Ethayarajh19} \parinterval {\red (这块的反馈是什么意思?)}值得注意的是上述两种添加局部约束的方法都更适用于Transformer模型的底层网络。这是由于模型离输入更近的层更倾向于捕获局部信息{\red (是否需要引用论文,或者使用公式证明)},伴随着神经网络的加深,模型更倾向于逐渐加强全局建模的能力。类似的结论在针对BERT模型的解释性研究工作中也有论述\upcite{Jawahar2019WhatDB,DBLP:conf/emnlp/Ethayarajh19}
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION % NEW SUBSUB-SECTION
...@@ -247,15 +247,15 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x} ...@@ -247,15 +247,15 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\subsubsection{3. 卷积 vs 注意力} \subsubsection{3. 卷积 vs 注意力}
\parinterval 第十一章已经提到,卷积神经网络能够很好地捕捉序列中的局部信息。因此,充分地利用卷积神经网络的特性,也是一种进一步优化注意力模型的思路。常见的做法是在注意力模型中引入卷积操作,甚至用卷积操作替换注意力模型。常见的方法有 \parinterval 第十一章已经提到,卷积神经网络能够很好地捕捉序列中的局部信息。因此,充分地利用卷积神经网络的特性,也是一种进一步优化注意力模型的思路。常见的做法是在注意力模型中引入卷积操作,甚至用卷积操作替换注意力模型,如
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
\item {\small\bfnew{使用轻量卷积和动态卷积神经网络}}\upcite{Wu2019PayLA,DBLP:conf/interspeech/GulatiQCPZYHWZW20}。比如,分别在编码端和解码端利用轻量卷积或动态卷积神经网络(见{\chapternine})替换Transformer的自注意力机制,同时保留解码端的编码-解码注意力机制,一定程度上加强了模型对局部信息的建模能力,同时提高了计算效率。 \item {\small\bfnew{使用轻量卷积和动态卷积神经网络}}\upcite{Wu2019PayLA,DBLP:conf/interspeech/GulatiQCPZYHWZW20}。比如,分别在编码器和解码器利用轻量卷积或动态卷积神经网络(见{\chapternine})替换Transformer的自注意力机制,同时保留解码器的编码-解码注意力机制,一定程度上加强了模型对局部信息的建模能力,同时提高了计算效率。
\vspace{0.5em} \vspace{0.5em}
\item {\small\bfnew{使用1维卷积注意力网络}}(图\ref{fig:15-5}(b))。可以使用一维的卷积自注意力网络(1D-CSAN)将关注的范围限制在相近的元素窗口中。其形式上十分简单,只需预先设定好局部建模的窗口大小$D$,并在进行注意力权重计算和对Value值进行加权求和时,将其限制在设定好的窗口范围内即可 \item {\small\bfnew{使用1维卷积注意力网络}}(图\ref{fig:15-5}(b))。可以使用一维的卷积自注意力网络(1D-CSAN)将关注的范围限制在相近的元素窗口中。其形式上十分简单,只需预先设定好局部建模的窗口大小$D$,并在进行注意力权重计算和对Value值进行加权求和时,将其限制在设定好的窗口范围内。
\vspace{0.5em} \vspace{0.5em}
\item {\small\bfnew{使用2维卷积注意力网络}}(图\ref{fig:15-5}(c))。在一维卷积注意力网络的基础上,对多个注意力头之间的信息进行交互建模,打破了注意力头之间的界限。 1D-CDAN的关注区域为$1\times D$,当将其扩展为二维矩形$D \times N$,长和宽分别为局部窗口的大小和参与建模的自注意力头的个数。这样,模型可以计算某个头中的第$i$个元素和另一个头中的第$j$个元素之间的相关性系数。实现了对不同子空间之间关系的建模,所得到的注意力分布表示了头之间的依赖关系。 \item {\small\bfnew{使用2维卷积注意力网络}}(图\ref{fig:15-5}(c))。在一维卷积注意力网络的基础上,对多个注意力头之间的信息进行交互建模,打破了注意力头之间的界限。 1D-CDAN{\red (S?)}的关注区域为$1\times D$,当将其扩展为二维矩形$D \times N$,长和宽分别为局部窗口的大小和参与建模的自注意力头的个数。这样,模型可以计算某个头中的第$i$个元素和另一个头中的第$j$个元素之间的相关性系数,实现了对不同子空间之间关系的建模,所得到的注意力分布{\red (哪里得到了?)}表示了头之间的依赖关系。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -275,15 +275,15 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x} ...@@ -275,15 +275,15 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\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模型中引入多分支结构的方法:
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
\item Weighted Transformer\upcite{DBLP:journals/corr/abs-1711-02132}。其主要思想是在多头自注意力机制的基础上保留不同表示空间的特征。传统方法使用级联操作并通过线性映射矩阵来融合不同头之间的信息,而Weighted Transformer直接利用线性映射将维度为$d_k$ 的向量表示映射到$d_{\rm model}$维的向量。之后,将这个$d_{\rm model}$维向量分别送入每个分支中的前馈神经网络,最后对不同分支的输出进行线性加权。但是,这个模型的计算复杂度要大于标准的Transformer模型。 \item {\small\bfnew{Weighted Transformer}}\upcite{DBLP:journals/corr/abs-1711-02132}。其主要思想是在多头自注意力机制的基础上保留不同表示空间的特征。传统方法使用级联操作并通过线性映射矩阵来融合不同头之间的信息,而Weighted Transformer直接利用线性映射将维度为$d_k$ 的向量表示映射到$d_{\rm model}$维的向量。之后,将这个$d_{\rm model}$维向量分别送入每个分支中的前馈神经网络,最后对不同分支的输出进行线性加权。但是,这种模型的计算复杂度要大于标准的Transformer模型。
\vspace{0.5em} \vspace{0.5em}
\item 多分支注意力模型\upcite{DBLP:journals/corr/abs-2006-10270}。不同于Weighted Transformer模型,多分支注意力模型直接利用每个分支独立地进行自注意力模型的计算(图\ref{fig:15-6})。同时为了避免结构相同的多个多头注意力机制之间的协同适应,这种模型使用Dropout方法在训练过程中以一定的概率随机地丢弃一些分支。 \item {\small\bfnew{多分支注意力模型}}\upcite{DBLP:journals/corr/abs-2006-10270}。不同于Weighted Transformer模型,多分支注意力模型直接利用每个分支独立地进行自注意力模型的计算(图\ref{fig:15-6})。同时为了避免结构相同的多个多头注意力机制之间的协同适应,这种模型使用Dropout方法在训练过程中以一定的概率随机地丢弃一些分支。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -295,11 +295,11 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x} ...@@ -295,11 +295,11 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
%------------------------------------------- %-------------------------------------------
\vspace{0.5em} \vspace{0.5em}
\item 多模型集成。例如,为了进一步加强不同分支的作用,基于多单元的Transformer模型进行了序列不同位置表示结果的交换,或使用不同的掩码策略对不同分支的输入进行扰动,保证分支间的多样性与互补性\upcite{DBLP:conf/emnlp/YanMZ20}。本质上,所谓的多单元思想与集成学习十分相似,类似于在训练过程中同时训练多个编码器。此外,通过增大子单元之间的结构差异性也能够进一步增大分支之间的多样性\upcite{李北2019面向神经机器翻译的集成学习方法分析} \item {\small\bfnew{多模型集成}}{\red(多模型还是多单元?)}。例如,为了进一步加强不同分支的作用,基于多单元的Transformer模型进行了序列不同位置表示结果的交换,或使用不同的掩码策略对不同分支的输入进行扰动,保证分支间的多样性与互补性\upcite{DBLP:conf/emnlp/YanMZ20}。本质上,所谓的多单元思想与集成学习十分相似,类似于在训练过程中同时训练多个编码器。此外,通过增大子单元之间的结构差异性也能够进一步增大分支之间的多样性\upcite{李北2019面向神经机器翻译的集成学习方法分析}
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
\parinterval 此外,在\ref{subsec-15.1.1}节中曾提到过,利用卷积神经网络可以与自注意力机制形成互补。类似的想法在多分支结构中也有体现。如图\ref{fig:15-7}所示,可以使用自注意力机制和卷积神经网络分别提取全局和局部两种依赖关系\upcite{DBLP:conf/iclr/WuLLLH20}。具体的做法是将输入的特征向量切分成等同维度的两部分,之后分别送入两个分支进行计算。其中,全局信息使用自注意力机制进行提取,局部信息使用轻量卷积进行提取\upcite{Wu2019PayLA}。此外,由于每个分支的维度只有原始的一半,采用并行计算方式可以显著提升系统的运行速度。 \parinterval 此外,在\ref{subsec-15.1.1}节中曾提到过,利用卷积神经网络可以与自注意力机制形成互补。类似的想法在多分支结构中也有体现。如图\ref{fig:15-7}所示,可以使用自注意力机制和卷积神经网络分别提取全局和局部两种依赖关系\upcite{DBLP:conf/iclr/WuLLLH20}。具体的做法是将输入的特征向量切分成等同维度的两部分,之后分别送入两个分支进行计算。其中,全局信息使用自注意力机制进行提取,局部信息使用轻量卷积网络进行提取\upcite{Wu2019PayLA}。此外,由于每个分支的维度只有原始的一半,采用并行计算方式可以显著提升系统的运行速度。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -316,9 +316,9 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x} ...@@ -316,9 +316,9 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\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$个结构相同但参数独立的块{\red (块还是层?)}堆叠而成,其中编码块与解码块中分别包含2和3个子层。同时,子层之间引入了残差连接保证了网络信息传递的高效性。因此,一个自然的想法是通过共享不同块{\red (块还是层?)}之间的参数,引入循环神经网络中的归纳偏置\upcite{DBLP:conf/iclr/DehghaniGVUK19}。其中每层的权重是共享的{\red (块还是层?)},并引入了基于时序的编码向量用于显著区分不同深度下的时序信息,如图\ref{fig:15-8}所示。在训练大容量预训练模型时同样也采取了共享层间参数的方式\upcite{Lan2020ALBERTAL}
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -329,7 +329,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x} ...@@ -329,7 +329,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\end{figure} \end{figure}
%------------------------------------------- %-------------------------------------------
\parinterval 另一种方法是,利用循环神经网络对输入序列进行编码,之后通过门控机制将得到的结果与Transformer进行融合\upcite{DBLP:conf/naacl/HaoWYWZT19}。融合机制可以采用串行计算或并行计算。 \parinterval 另一种方法是,利用循环神经网络对输入序列进行编码,之后通过门控机制将得到的结果与Transformer进行融合\upcite{DBLP:conf/naacl/HaoWYWZT19}。融合机制可以采用串行计算或并行计算{\red (有点少?啥意思?)}
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SECTION % NEW SUB-SECTION
...@@ -337,7 +337,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x} ...@@ -337,7 +337,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\subsection{高效的自注意力模型} \subsection{高效的自注意力模型}
\parinterval 除了机器翻译,Transformer模型同样被广泛应用于自然语言理解、图像处理、语音处理等任务。但是,自注意力机制的时间复杂度是序列长度$N$的平方项,同时其对内存(显存)的消耗巨大,尤其当处理较长序列的文本时,问题尤为严重。因此如何提高Transformer模型的效率也是广泛关注的方向之一{\chapterfourteen}已经从模型推断的角度介绍了Transformer系统加速的方法,这里重点讨论一些高效的Transformer变种模型。 \parinterval 除了机器翻译,Transformer模型同样被广泛应用于自然语言理解、图像处理、语音处理等任务。但是,自注意力机制的时间复杂度是序列长度$N$的平方项{\red (这里要不要乘隐藏层维度?)},同时其对内存(显存)的消耗巨大,尤其当处理较长序列的文本时,这种问题尤为严重。因此如何提高Transformer模型的效率也受到了广泛的关注{\chapterfourteen}已经从模型推断的角度介绍了Transformer系统加速的方法,这里重点讨论一些高效的Transformer变种模型。
\parinterval 自注意力机制的时间复杂度较高,正是因为其需要对序列中的每一个位置计算与其他所有位置的相关性。因此一个自然的想法就是限制自注意力机制的作用范围,大体上可以分为如下几种方式: \parinterval 自注意力机制的时间复杂度较高,正是因为其需要对序列中的每一个位置计算与其他所有位置的相关性。因此一个自然的想法就是限制自注意力机制的作用范围,大体上可以分为如下几种方式:
...@@ -345,7 +345,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x} ...@@ -345,7 +345,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\vspace{0.5em} \vspace{0.5em}
\item 分块注意力:顾名思义,就是将序列划分为固定大小的片段,注意力模型只在对应的片段内执行。这样,每一个片段内的注意力计算成本是固定的,可以大大降低处理长序列时的总体计算时间\upcite{DBLP:conf/emnlp/QiuMLYW020,DBLP:conf/iclr/LiuSPGSKS18} \item 分块注意力:顾名思义,就是将序列划分为固定大小的片段,注意力模型只在对应的片段内执行。这样,每一个片段内的注意力计算成本是固定的,可以大大降低处理长序列时的总体计算时间\upcite{DBLP:conf/emnlp/QiuMLYW020,DBLP:conf/iclr/LiuSPGSKS18}
\vspace{0.5em} \vspace{0.5em}
\item 跨步注意力:该模型是一种稀疏的注意力机制,通常会设置一个固定的间隔,也就是说在计算注意力表示时,每隔固定数量的词后将下一个词纳入所需考虑的范围内,参与注意力的计算\upcite{DBLP:journals/corr/abs-2004-05150}。和分片段进行注意力计算类似,假设最终参与注意力计算的间隔长度为$B$,共需要执行$N/B$次注意力计算,可以将计算复杂度从$O(N^2)$缩减为$O(NB)$ \item 跨步注意力:该模型是一种稀疏的注意力机制,通常会设置一个固定的间隔,也就是说在计算注意力表示时,每隔固定数量的词后将下一个词纳入所需考虑的范围内,参与注意力的计算\upcite{DBLP:journals/corr/abs-2004-05150}。和分片段进行注意力计算类似,假设最终参与注意力计算的间隔长度为$B${\red (单词数还是间隔长度?)},共需要执行$N/B$次注意力计算,可以将计算复杂度从$O(N^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{跨步卷积}}\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}
...@@ -353,11 +353,11 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x} ...@@ -353,11 +353,11 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\parinterval 在不同的任务中,可以根据不同的需求使用不同的注意力模型,甚至可以采用多种注意力模型的结合。比如,对分类任务中的某些特殊标签,如BERT中的<CLS>,需要对全局信息进行整合,因此可以使用全局注意力。而对于其他位置,则可以使用局部注意力提高计算效率。同样的,也可以针对多头机制中的不同注意力头采用不同的计算方式,或者对不同的头设置不同的局部窗口大小,以此来增大感受野,在提高模型计算效率的同时使模型保留全局建模能力。 \parinterval 在不同的任务中,可以根据不同的需求使用不同的注意力模型,甚至可以采用多种注意力模型的结合。比如,对分类任务中的某些特殊标签,如BERT中的<CLS>,需要对全局信息进行整合,因此可以使用全局注意力。而对于其他位置,则可以使用局部注意力提高计算效率。同样的,也可以针对多头机制中的不同注意力头采用不同的计算方式,或者对不同的头设置不同的局部窗口大小,以此来增大感受野,在提高模型计算效率的同时使模型保留全局建模能力。
\parinterval 由于上述方法都是基于预先设定好的超参来限制注意力机制的作用范围,因此可以称这些方法是静态的。除此之外还有以数据驱动的通过模型来学习注意力机制的作用范围。比如,可以将序列分块,并对序列中的不同单元进行排序或者聚类,之后采用稀疏注意力的计算。下面对部分相关的模型进行介绍: \parinterval 由于上述方法都是基于预先设定好的超参来限制注意力机制的作用范围,因此可以称这些方法是静态的。除此之外还有以数据驱动的方法,这类方法通过模型来学习注意力机制的作用范围。比如,可以将序列分块,并对序列中的不同单元进行排序或者聚类,之后采用稀疏注意力的计算。下面对部分相关的模型进行介绍:
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
\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}和分块计算前馈神经网络层的机制,即将前馈层的隐层维度拆分为多个块并独立的进行计算,最后进行拼接操作,得到前馈层的输出。这种方式大幅度减少了内存(显存)占用,但由于在反向过程中需要重复计算某些节点,牺牲了一定的计算时间{\red (那这个时间到底是少了还是多了?)}
\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}$
...@@ -387,9 +387,9 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x} ...@@ -387,9 +387,9 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\sectionnewpage \sectionnewpage
\section{神经网络连接优化及深层模型} \section{神经网络连接优化及深层模型}
\parinterval 除了对Transformer模型中的局部组件进行改进,改进不同层之间的连接方式也十分重要。常见的做法是融合编码/解码的中间层表示得到更丰富的编码/解码输出\upcite{Wang2018MultilayerRF,Wang2019ExploitingSC,Dou2018ExploitingDR,Dou2019DynamicLA}。同时,可以利用稠密连接等更丰富的层间连接方式来强化或替换残差连接。 \parinterval 除了对Transformer模型中的局部组件进行改进,改进不同层之间的连接方式也十分重要。常见的做法是融合编码器/解码器的中间层表示得到信息更丰富的编码/解码输出\upcite{Wang2018MultilayerRF,Wang2019ExploitingSC,Dou2018ExploitingDR,Dou2019DynamicLA}。同时,可以利用稠密连接等更丰富的层间连接方式来强化或替换残差连接。
\parinterval 与此同时,宽网络(如Transformer-Big)在机器翻译、语言模型等任务上表现十分出色,但伴随而来的是快速增长的参数量与更大的训练代价。同时受限于任务的复杂度与计算设备的算力,进一步探索更宽的神经网络显然不是特别高效的手段。因此研究人员普遍选择增加神经网络的深度来对句子进行更充分的表示。但是,简单地堆叠很多层的Transformer模型并不能带来性能上的提升,反而会面临更加严重的梯度消失/梯度爆炸的问题。这是由于伴随神经网络变深,梯度无法有效地从输出层回传到底层神经网络,造成浅层部分的参数无法得到充分训练\upcite{Bapna2018TrainingDN,WangLearning,DBLP:journals/corr/abs-2002-04745,DBLP:conf/emnlp/LiuLGCH20}。针对这些问题,可以设计更有利于深层信息传递的神经网络连接和恰当的参数初始化方法等。 \parinterval 与此同时,虽然宽网络(如Transformer-Big)在机器翻译、语言模型等任务上表现十分出色,但伴随而来的是快速增长的参数量与更大的训练代价。并且受限于任务的复杂度与计算设备的算力,进一步探索更宽的神经网络显然不是特别高效的手段。因此研究人员普遍选择增加神经网络的深度来对句子进行更充分地表示。但是,简单地堆叠很多层的Transformer模型并不能带来性能上的提升,反而会面临更加严重的梯度消失/梯度爆炸的问题。这是由于伴随神经网络变深,梯度无法有效地从输出层回传到底层神经网络,造成浅层部分的参数无法得到充分训练\upcite{Bapna2018TrainingDN,WangLearning,DBLP:journals/corr/abs-2002-04745,DBLP:conf/emnlp/LiuLGCH20}。针对这些问题,可以设计更有利于深层信息传递的神经网络连接和恰当的参数初始化方法等。
\parinterval 但是,如何设计一个足够“深”的机器翻译模型仍然是业界关注的热点问题之一。此外,伴随着神经网络的继续变深,将会面临一些新的问题,例如,如何加速深层神经网络的训练,如何解决深层神经网络的过拟合问题等。下面将会对以上问题展开讨论。首先对Transformer模型的内部信息流进行分析,之后分别从模型结构和参数初始化两个角度求解为什么深层网络难以训练,并介绍相应的解决手段。 \parinterval 但是,如何设计一个足够“深”的机器翻译模型仍然是业界关注的热点问题之一。此外,伴随着神经网络的继续变深,将会面临一些新的问题,例如,如何加速深层神经网络的训练,如何解决深层神经网络的过拟合问题等。下面将会对以上问题展开讨论。首先对Transformer模型的内部信息流进行分析,之后分别从模型结构和参数初始化两个角度求解为什么深层网络难以训练,并介绍相应的解决手段。
...@@ -400,7 +400,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x} ...@@ -400,7 +400,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\subsection{Post-Norm vs Pre-Norm} \subsection{Post-Norm vs Pre-Norm}
\label{sec:post-pre-norm} \label{sec:post-pre-norm}
\parinterval 为了探究为何深层Transformer模型很难直接训练,首先对Transformer的模型结构进行简单的回顾,详细内容可以参考{\chaptertwelve}。以Transformer的编码为例,在多头自注意力和前馈神经网络中间,Transformer模型利用残差连接\upcite{DBLP:journals/corr/HeZRS15}和层标准化操作\upcite{Ba2016LayerN}来提高信息的传递效率。Transformer模型大致分为图\ref{fig:15-9}中的两种结构\ \dash \ 后作方式的残差单元(Post-Norm)和前作方式的残差单元(Pre-Norm)。 \parinterval 为了探究为何深层Transformer模型很难直接训练,首先对Transformer的模型结构进行简单的回顾,详细内容可以参考{\chaptertwelve}。以Transformer的编码为例,在多头自注意力和前馈神经网络中间,Transformer模型利用残差连接\upcite{DBLP:journals/corr/HeZRS15}和层标准化操作\upcite{Ba2016LayerN}来提高信息的传递效率。Transformer模型大致分为图\ref{fig:15-9}中的两种结构\ \dash \ 后作方式的残差单元(Post-Norm)和前作方式的残差单元(Pre-Norm)。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -411,7 +411,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x} ...@@ -411,7 +411,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\end{figure} \end{figure}
%------------------------------------------- %-------------------------------------------
\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 Post-Norm:早期的Transformer遵循的是Post-Norm结构\upcite{vaswani2017attention}。也就是层标准化作用于每一子层的输入和输出的残差结果上,如图\ref{fig:15-9}(a)所示。可以表示如下:
...@@ -435,7 +435,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x} ...@@ -435,7 +435,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\label{eq:15-28} \label{eq:15-28}
\end{eqnarray} \end{eqnarray}
\noindent 其中,$\prod_{k=l}^{L-1}\frac{\partial \textrm{LN}(\mathbi{y}_k)}{\partial \mathbi{y}_k}$表示在反向传播过程中经过层标准化得到的复合函数导数,$\prod_{k=l}^{L-1}(1+\frac{\partial F(\mathbi{x}_k;{\bm \theta_k})}{\partial \mathbi{x}_k})$代表每个子层间残差连接的导数。 \noindent 其中,$\prod_{k=l}^{L-1}\frac{\partial \textrm{LN}(\mathbi{y}_k)}{\partial \mathbi{y}_k}$表示在反向传播过程中,经过层标准化得到的复合函数导数。$\prod_{k=l}^{L-1}(1+\frac{\partial F(\mathbi{x}_k;{\bm \theta_k})}{\partial \mathbi{x}_k})$代表每个子层间残差连接的导数。
\parinterval 类似的,也能得到Pre-Norm结构的梯度计算结果,如下: \parinterval 类似的,也能得到Pre-Norm结构的梯度计算结果,如下:
\begin{eqnarray} \begin{eqnarray}
...@@ -443,11 +443,11 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x} ...@@ -443,11 +443,11 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\label{eq:15-29} \label{eq:15-29}
\end{eqnarray} \end{eqnarray}
\parinterval 对比公式\eqref{eq:15-28}和公式\eqref{eq:15-29}可以看出,Pre-Norm结构直接把顶层的梯度$\frac{\partial Loss}{\partial \mathbi{x}_L}$传递给下层,并且如果将公式\eqref{eq:15-29}右侧进行展开,可以发现$\frac{\partial Loss}{\partial \mathbi{x}_l}$中直接含有$\frac{\partial Loss}{\partial \mathbi{x}_L}$部分。这个性质弱化了梯度计算对模型深度$L$的依赖;而如公式\eqref{eq:15-28}右侧所示,Post-Norm结构会导致一个与$L$相关的多项导数的积,伴随着$L$的增大更容易发生梯度消失和梯度爆炸问题。因此,Pre-Norm结构更适于堆叠多层神经网络的情况。比如,使用Pre-Norm 结构可以很轻松地训练一个30层(60个子层)编码器的Transformer网络,并带来可观的BLEU提升。这个结果相当于标准Transformer编码器深度的6倍,相对的,用Post-Norm结构训练深层网络的时候,训练结果很不稳定,当编码器深度超过12层后很难完成有效训练\upcite{WangLearning},尤其是在低精度设备环境下损失函数出现发散情况。这里把使用Pre-Norm的深层Transformer模型称为Transformer-Deep。 \parinterval 对比公式\eqref{eq:15-28}和公式\eqref{eq:15-29}可以看出,Pre-Norm结构直接把顶层的梯度$\frac{\partial Loss}{\partial \mathbi{x}_L}$传递给下层,并且如果将公式\eqref{eq:15-29}右侧展开,可以发现$\frac{\partial Loss}{\partial \mathbi{x}_l}$中直接含有$\frac{\partial Loss}{\partial \mathbi{x}_L}$部分。这个性质弱化了梯度计算对模型深度$L$的依赖;而如公式\eqref{eq:15-28}右侧所示,Post-Norm结构则包含一个与$L$相关的多项导数的积,伴随着$L$的增大更容易发生梯度消失和梯度爆炸问题。因此,Pre-Norm结构更适于堆叠多层神经网络的情况。比如,使用Pre-Norm 结构可以很轻松地训练一个30层(60个子层)编码器的Transformer网络,并带来可观的BLEU提升。这个结果相当于标准Transformer编码器深度的6倍,相对的,用Post-Norm结构训练深层网络的时候,训练结果很不稳定,当编码器深度超过12层后很难完成有效训练\upcite{WangLearning},尤其是在低精度设备环境下损失函数出现发散情况{\red(更容易?)}。这里把使用Pre-Norm的深层Transformer模型称为Transformer-Deep。
\parinterval 另一个有趣的发现是,使用深层网络后,网络可以更有效地利用较大的学习率和较大的批量训练,大幅度缩短了模型达到收敛状态的时间。相比于Transformer-Big等宽网络,Transformer-Deep并不需要太大的隐藏层维度就可以取得更优的翻译品质\upcite{WangLearning}。也就是说,Transformer-Deep是一个更“窄”更“深”的神经网络。这种结构的参数量比Transformer-Big少,系统运行效率更高。 \parinterval 另一个有趣的发现是,使用深层网络后,网络可以更有效地利用较大的学习率和较大的批量训练,大幅度缩短了模型达到收敛状态的时间。相比于Transformer-Big等宽网络,Transformer-Deep并不需要太大的隐藏层维度就可以取得更优的翻译品质\upcite{WangLearning}。也就是说,Transformer-Deep是一个更“窄”更“深”的神经网络。这种结构的参数量比Transformer-Big少,系统运行效率更高。
\parinterval 此外研究人员发现当编码端使用深层模型之后,解码端使用更浅的模型依然能够维持很好的翻译品质。这是由于解码端也会对源语言信息进行加工和抽象,当编码器变深之后,解码器对源语言的加工就不那么重要了,因此可以减少解码器的深度。这样做的一个直接好处是:可以通过减少解码器的深度提高翻译速度。对于一些翻译延时敏感的场景,这种架构是极具潜力的\upcite{DBLP:journals/corr/abs-2006-10369,DBLP:journals/corr/abs-2012-13866,DBLP:conf/aclnmt/HuLLLLWXZ20} \parinterval 此外研究人员发现当编码器使用深层模型之后,解码器使用更浅的模型依然能够维持很好的翻译品质。这是由于解码器也会对源语言信息进行加工和抽象,当编码器变深之后,解码器对源语言的加工就不那么重要了,因此可以减少解码器的深度。这样做的一个直接好处是:可以通过减少解码器的深度提高翻译速度。对于一些翻译延时敏感的场景,这种架构是极具潜力的\upcite{DBLP:journals/corr/abs-2006-10369,DBLP:journals/corr/abs-2012-13866,DBLP:conf/aclnmt/HuLLLLWXZ20}
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SECTION % NEW SUB-SECTION
...@@ -465,7 +465,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x} ...@@ -465,7 +465,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\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]
...@@ -500,7 +500,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x} ...@@ -500,7 +500,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\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 基于多跳的自注意力机制。如图\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}
...@@ -538,7 +538,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x} ...@@ -538,7 +538,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\end{figure} \end{figure}
%------------------------------------------- %-------------------------------------------
\parinterval 上述工作更多应用于浅层的Transformer模型,这种仅在编码端顶部使用融合机制的方法并没有在深层Transformer模型上得到有效地验证。主要原因是融合机制仅作用于编码器或解码器的顶层,对中间层的信息传递效率并没有显著提升。因此当网络深度较深时,信息传递仍然并不高效。但这种“静态”的融合方式也为深层Transformer模型的研究奠定了基础。例如,可以使用透明注意力网络\upcite{Bapna2018TrainingDN},即在权重平均的基础上,引入了一个权重矩阵。其核心思想是,让解码器中每一层的编码-解码注意力模块都接收不同比例的编码信息,而不是使用相同的融合表示。 \parinterval 上述工作更多应用于浅层的Transformer模型,这种仅在编码器顶部使用融合机制的方法并没有在深层Transformer模型上得到有效的验证。主要原因是融合机制仅作用于编码器或解码器的顶层,对中间层的信息传递效率并没有显著提升。因此当网络深度较深时,这种方法的信息传递仍然不够高效。但这种“静态”的融合方式也为深层Transformer模型的研究奠定了基础。例如,可以使用透明注意力网络\upcite{Bapna2018TrainingDN},即在权重平均的基础上,引入了一个权重矩阵。其核心思想是,让解码器中每一层的编码-解码注意力模块都接收不同比例的编码信息,而不是使用相同的融合表示。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION % NEW SUBSUB-SECTION
...@@ -556,7 +556,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x} ...@@ -556,7 +556,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\label{eq:15-37} \label{eq:15-37}
\end{eqnarray} \end{eqnarray}
\noindent 这里,$\mathbi{h}^0$表示词嵌入层的输出,$\mathbi{h}^l$$l>0$))表示Transformer模型第$l$层的表示。 \noindent 这里,$\mathbi{h}^0${\red(h0到底要不要改一下,上下文也是)}表示词嵌入层的输出,$\mathbi{h}^l$$l>0$))代表Transformer模型第$l$层的{\red(隐藏层?)}表示。
\vspace{0.5em} \vspace{0.5em}
\item 定义一个维度为$(L+1)\times (L+1)$的权值矩阵$\mathbi{W}$,矩阵中每一行表示之前各层对当前层的贡献度。令$\mathbi{W}_{l,i}$代表权值矩阵$\mathbi{W}$$l$行第$i$列的权重,则第$0 \sim l$ 层的聚合结果为$\mathbi{h}_i$的线性加权和: \item 定义一个维度为$(L+1)\times (L+1)$的权值矩阵$\mathbi{W}$,矩阵中每一行表示之前各层对当前层的贡献度。令$\mathbi{W}_{l,i}$代表权值矩阵$\mathbi{W}$$l$行第$i$列的权重,则第$0 \sim l$ 层的聚合结果为$\mathbi{h}_i$的线性加权和:
...@@ -565,7 +565,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x} ...@@ -565,7 +565,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\label{eq:15-38} \label{eq:15-38}
\end{eqnarray} \end{eqnarray}
\noindent $\mathbi{g}^l$会作为输入的一部分送入第$l+1$层。其网络的结构如图\ref{fig:15-13}所示 \noindent $\mathbi{g}^l$会作为输入的一部分送入第$l+1$层。其网络的结构如图\ref{fig:15-13}所示
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
...@@ -573,16 +573,16 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x} ...@@ -573,16 +573,16 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\begin{figure}[htp] \begin{figure}[htp]
\centering \centering
\input{./Chapter15/Figures/figure-dynamic-linear-aggregation-network-structure} \input{./Chapter15/Figures/figure-dynamic-linear-aggregation-network-structure}
\caption{线性层聚合网络} \caption{线性层聚合网络{\red (X为词嵌入,没有LN,上面还用的h0)}}
\label{fig:15-13} \label{fig:15-13}
\end{figure} \end{figure}
%------------------------------------------- %-------------------------------------------
\parinterval 根据上述描述可以发现,权值矩阵$\mathbi{W}$每个位置的值由先前层对应的位置的值计算得到,因此该矩阵是一个下三角矩阵。开始时,对矩阵参数的每行进行平均初始化,即初始化矩阵$\mathbi{W}_0$的每一行各个位置的值为$\frac{1}{\lambda}$$\lambda \in (1,2,\ldots,l+1)$。伴随着神经网络的训练,不断更新$\mathbi{W}$中每一行不同位置权重的大小。 \parinterval 根据上述描述可以发现,权值矩阵$\mathbi{W}$每个位置的值由先前层对应的位置的值计算得到,因此该矩阵是一个下三角矩阵。开始时,对{\red(权值?)}矩阵的每行进行平均初始化,即初始化矩阵$\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}所示,在每一行中颜色越深代表对当前层的贡献度越大。
\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}
%--------------------------------------------- %---------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -631,7 +631,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x} ...@@ -631,7 +631,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\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_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}
...@@ -639,7 +639,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x} ...@@ -639,7 +639,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\label{eq:15-43} \label{eq:15-43}
\end{eqnarray} \end{eqnarray}
\noindent 其中,$l$为对应的神经网络的层数,$\alpha$为预先设定的超参数来控制缩放的比例。这样,可以通过缩减顶层神经网络输出与输入之间的差异,减少顶层神经网络参数的梯度范数,从而缓解由于神经网络过深所带来的梯度消失问题 \noindent 其中,$l$为对应的神经网络的深度,$\alpha$为预先设定的超参数来控制缩放的比例。这样,可以通过缩减顶层神经网络输出与输入之间的差异,{\red 减少顶层神经网络参数的梯度范数,从而缓解由于神经网络过深所带来的梯度消失问题(有问题?)}
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION % NEW SUBSUB-SECTION
...@@ -682,7 +682,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x} ...@@ -682,7 +682,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\subsubsection{3. T-Fixup初始化策略} \subsubsection{3. T-Fixup初始化策略}
\parinterval 另外一种初始化方法是从神经网络结构与优化器的计算方式入手。Post-Norm结构在Warmup阶段难以精确地估计参数的二阶动量,这导致了训练不稳定问题\upcite{huang2020improving}。也就是,层标准化是导致深层Transformer难以优化的主要原因之一\upcite{WangLearning}。Post-Norm方式下Transformer的底层网络,尤其是编码器的词嵌入层面临严重的梯度消失问题。该问题的原因在于,在不改变层标准化位置的条件下,Adam优化器利用滑动平均的方式来估计参数的二阶矩,其方差是无界的。在训练阶段的前期,由于模型只能看到有限数量样本,因此很难有效的估计参数的二阶矩,导致反向更新参数时参数的梯度方差过大。 \parinterval 另外一种初始化方法是从神经网络结构与优化器的计算方式入手。Post-Norm结构在Warmup阶段难以精确地估计参数的二阶动量,这导致了训练不稳定问题\upcite{huang2020improving}。也就是,层标准化是导致深层Transformer难以优化的主要原因之一\upcite{WangLearning}。Post-Norm方式下Transformer的底层网络,尤其是编码器的词嵌入层面临严重的梯度消失问题。出现该问题的原因在于,在不改变层标准化位置的条件下,Adam优化器利用滑动平均的方式来估计参数的二阶矩,其方差是无界的。在训练阶段的前期,由于模型只能看到有限数量样本,因此很难有效地估计参数的二阶矩,导致反向更新参数时参数的梯度方差过大。
\parinterval 除了用Pre-Norm代替Post-Norm结构来训练深层网络,也可以采用去除Warmup策略并移除层标准化机制的方式,并对神经网络中不同的参数矩阵制定相应的缩放机制来保证训练的稳定性\upcite{huang2020improving}。具体的缩放策略如下: \parinterval 除了用Pre-Norm代替Post-Norm结构来训练深层网络,也可以采用去除Warmup策略并移除层标准化机制的方式,并对神经网络中不同的参数矩阵制定相应的缩放机制来保证训练的稳定性\upcite{huang2020improving}。具体的缩放策略如下:
...@@ -690,9 +690,9 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x} ...@@ -690,9 +690,9 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\vspace{0.5em} \vspace{0.5em}
\item 类似于标准的Transformer初始化方式,使用Xavier初始化方式来初始化除了词嵌入以外的所有参数矩阵。词嵌入矩阵服从$\mathbb{N}(0,d^{-\frac{1}{2}})$的高斯分布,其中$d$代表词嵌入的维度。 \item 类似于标准的Transformer初始化方式,使用Xavier初始化方式来初始化除了词嵌入以外的所有参数矩阵。词嵌入矩阵服从$\mathbb{N}(0,d^{-\frac{1}{2}})$的高斯分布,其中$d$代表词嵌入的维度。
\vspace{0.5em} \vspace{0.5em}
\item 对编码器中自注意力机制的参数矩阵以及前馈神经网络中所有参数矩阵进行缩放因子为$0.67 {L}^{-\frac{1}{4}}$的缩放,$M$ 为编码器层数。 \item 对编码器中自注意力机制的参数矩阵以及前馈神经网络中所有参数矩阵进行缩放因子为$0.67 {L}^{-\frac{1}{4}}$的缩放,$L$为编码器层数。
\vspace{0.5em} \vspace{0.5em}
\item 对解码器中全部注意力机制的参数矩阵以及前馈神经网络中所有参数矩阵进行缩放因子为$(9 {M})^{-\frac{1}{4}}$的缩放,其中$L$为解码器层数。 \item 对解码器中全部注意力机制的参数矩阵以及前馈神经网络中所有参数矩阵进行缩放因子为$(9 {M})^{-\frac{1}{4}}$的缩放,其中$M$为解码器层数。
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
...@@ -704,7 +704,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x} ...@@ -704,7 +704,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\subsubsection{4. ADMIN初始化策略} \subsubsection{4. ADMIN初始化策略}
\parinterval 也有研究发现Post-Norm结构在训练过程中过度依赖残差支路,在训练初期很容易发生参数梯度方差过大的现象\upcite{DBLP:conf/emnlp/LiuLGCH20}。经过分析发现,虽然底层神经网络发生梯度消失是导致训练不稳定的重要因素,但并不是唯一因素。例如,标准Transformer模型中梯度消失的原因在于使用Post-Norm 结构的解码器。尽管通过调整模型结构解决了梯度消失问题,但是模型训练不稳定的问题仍然没有被很好地解决。研究人员观测到Post-Norm结构在训练过程中过于依赖残差支路,而Pre-Norm结构在训练过程中逐渐呈现出对残差支路的依赖性,这更易于网络的训练。进一步,从参数更新的角度出发,Pre-Norm由于参数的改变导致网络输出变化的方差经推导后可以表示为$O(\log L)$,而Post-Norm对应的方差为$O(L)$。因此,可以尝试减小Post-Norm中由于参数更新导致的输出的方差值,从而达到稳定训练的目的。针对该问题,可以采用两阶段的初始化方法。这里,可以重新定义子层之间的残差连接如下: \parinterval 也有研究发现Post-Norm结构在训练过程中过度依赖残差支路,在训练初期很容易发生参数梯度方差过大的现象\upcite{DBLP:conf/emnlp/LiuLGCH20}。经过分析发现,虽然底层神经网络发生梯度消失是导致训练不稳定的重要因素,但并不是唯一因素。例如,标准Transformer模型中梯度消失的原因在于使用Post-Norm 结构的解码器{\red (只与解码器有关?)}。尽管通过调整模型结构解决了梯度消失问题,但是模型训练不稳定的问题仍然没有被很好地解决。研究人员观测到Post-Norm结构在训练过程中过于依赖残差支路,而Pre-Norm结构在训练过程中逐渐呈现出对残差支路的依赖性,这更易于网络的训练。进一步,从参数更新的角度出发,Pre-Norm由于参数的改变导致网络输出变化的方差经推导后可以表示为$O(\log L)$,而Post-Norm对应的方差为$O(L)$。因此,可以尝试减小Post-Norm中由于参数更新导致的输出的方差值,从而达到稳定训练的目的。针对该问题,可以采用两阶段的初始化方法。这里,可以重新定义子层之间的残差连接如下:
\begin{eqnarray} \begin{eqnarray}
\mathbi{x}_{l+1} &=& \mathbi{x}_l \cdot {\bm \omega_{l+1}} + F_{l+1}(\mathbi{x}_l) \mathbi{x}_{l+1} &=& \mathbi{x}_l \cdot {\bm \omega_{l+1}} + F_{l+1}(\mathbi{x}_l)
\label{eq:15-47} \label{eq:15-47}
...@@ -723,7 +723,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x} ...@@ -723,7 +723,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\end{eqnarray} \end{eqnarray}
\end{itemize} \end{itemize}
\parinterval 这种动态的参数初始化方法不受限于具体的模型结构,方法有较好的通用性。 \parinterval 这种动态的参数初始化方法不受限于具体的模型结构,有较好的通用性。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SECTION % NEW SUB-SECTION
...@@ -731,7 +731,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x} ...@@ -731,7 +731,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\subsection{深层模型的训练加速} \subsection{深层模型的训练加速}
\parinterval 尽管窄而深的神经网络比宽网络有更快的收敛速度\upcite{WangLearning},但伴随着训练数据的增加,以及模型进一步的加深,训练代价成为不可忽视的问题。例如,在几千万甚至上亿的双语平行句对上训练一个48层的Transformer模型需要几周的时间才能达到收敛\footnote[5]{训练时间的估算是在单台8卡Titan V GPU服务器上得到的}。因此,在保证模型性能不变的前提下,高效地完成深层模型的训练也是至关重要的。 \parinterval 尽管窄而深的神经网络比宽网络有更快的收敛速度\upcite{WangLearning},但伴随着训练数据的增加,以及模型进一步的加深,训练代价成为不可忽视的问题。例如,在几千万甚至上亿的双语平行句对上训练一个48层的Transformer模型需要几周的时间才能达到收敛\footnote[5]{训练时间的估算是在单台8卡Titan V GPU服务器上得到的}。因此,在保证模型性能不变的前提下,高效地完成深层模型的训练也是至关重要的{\red (概括性不足,三种方法是并列还是依赖?)}
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION % NEW SUBSUB-SECTION
...@@ -760,7 +760,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x} ...@@ -760,7 +760,7 @@ C(\mathbi{x}_j \mathbi{W}_K,\omega) &=& (\mathbi{x}_{j-\omega},\ldots,\mathbi{x}
\subsubsection{2. 分组稠密连接} \subsubsection{2. 分组稠密连接}
\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$等于模型层数。 \parinterval 缓解这个问题的一种方法是使用更稀疏的层间连接方式。其核心思想与动态线性层聚合是类似的,不同点在于可以通过调整层之间连接的稠密程度来降低训练代价。比如,可以将每$p$层分为一组,之后动态线性层聚合只在不同组之间进行。这样,通过调节$p$值的大小可以控制神经网络中连接的稠密程度,作为一种训练代价与翻译性能之间的权衡。显然,标准的Transformer模型\upcite{vaswani2017attention} 和DLCL模型\upcite{WangLearning}都可以看作是该方法的一种特例。如图\ref{fig:15-16}所示:当$p=1$时,每一个单独的块被看作一个独立的组,它等价于基于动态层聚合的DLCL模型;当$p=\infty$时,它等价于正常的Transformer模型。值得注意的是,如果配合渐进式训练。在分组稠密连接中可以设置$p$等于模型层数。
...@@ -812,7 +812,7 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5} ...@@ -812,7 +812,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
...@@ -926,7 +926,7 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5} ...@@ -926,7 +926,7 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5}
\begin{figure}[htp] \begin{figure}[htp]
\centering \centering
\input{./Chapter15/Figures/figure-encoder-tree-structure-modeling} \input{./Chapter15/Figures/figure-encoder-tree-structure-modeling}
\caption{编码树结构建模} \caption{编码树结构建模}
\label{fig:15-20} \label{fig:15-20}
\end{figure} \end{figure}
%-------------------------------------------s %-------------------------------------------s
...@@ -943,7 +943,7 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5} ...@@ -943,7 +943,7 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5}
\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}$分别代表向上传输节点和向下传输节点的状态{\red (向上传输没看出来)},虚线框代表了$\mathbi{h}^\textrm{up}$$\mathbi{h}^\textrm{down}$会拼接到一起,并作为这个节点的整体表示参与注意力模型的计算。显然,自下而上的传递,可以保证句子的浅层信息(如短距离词汇搭配)被传递给上层节点,而自上而下的传递,可以保证句子上层结构的抽象被有效地传递给下层节点。这样,每个节点就同时含有浅层和深层句子表示的信息。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -1009,7 +1009,7 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5} ...@@ -1009,7 +1009,7 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5}
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
\parinterval 需要注意的是,句法分析的错误会在很大程度上影响源语言句子的表示结果。如果获得的句法分析结果不够准确,可能会对翻译系统带来负面的作用。此外,也有研究发现基于词串的神经机器翻译模型本身就能学习到一些源语言的句法信息\upcite{DBLP:conf/emnlp/ShiPK16},这表明了神经机器翻译模型也有一定的归纳句子结构的能力。除了循环神经网络结构,也有研究人员探索了如何在Transformer中引入树结构信息。比如,可以将词与词之间的依存关系距离作为额外的语法信息融入到注意力模型中\upcite{DBLP:conf/acl/BugliarelloO20} \parinterval 需要注意的是,句法分析的错误会在很大程度上影响源语言句子的表示结果。如果获得的句法分析结果不够准确,可能会对翻译系统带来负面的影响。此外,也有研究发现基于词串的神经机器翻译模型本身就能学习到一些源语言的句法信息\upcite{DBLP:conf/emnlp/ShiPK16},这表明了神经机器翻译模型也有一定的归纳句子结构的能力。除了循环神经网络结构,也有研究人员探索了如何在Transformer中引入树结构信息。比如,可以将词与词之间的依存关系距离作为额外的语法信息融入到注意力模型中\upcite{DBLP:conf/acl/BugliarelloO20}
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SECTION % NEW SUB-SECTION
...@@ -1032,7 +1032,7 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5} ...@@ -1032,7 +1032,7 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5}
\parinterval 另一种方法是直接在目标语言端使用句法树进行建模。与源语言句法树的建模不同,目标语言句法树的生成伴随着译文的生成,因此无法像源语言端一样将整个句法树一起处理。这样译文生成问题本质上就变成了目标语言树结构的生成,从这个角度说,这个过程与统计机器翻译中串到树的模型是类似的(见{\chaptereight})。树结构的生成有很多种策略,但基本的思想类似,可以根据已经生成的局部结构预测新的局部结构,并将这些局部结构拼装成更大的结构,直到得到完整的句法树结构\upcite{DBLP:conf/iclr/Alvarez-MelisJ17} \parinterval 另一种方法是直接在目标语言端使用句法树进行建模。与源语言句法树的建模不同,目标语言句法树的生成伴随着译文的生成,因此无法像源语言端一样将整个句法树一起处理。这样译文生成问题本质上就变成了目标语言树结构的生成,从这个角度说,这个过程与统计机器翻译中串到树的模型是类似的(见{\chaptereight})。树结构的生成有很多种策略,但基本的思想类似,可以根据已经生成的局部结构预测新的局部结构,并将这些局部结构拼装成更大的结构,直到得到完整的句法树结构\upcite{DBLP:conf/iclr/Alvarez-MelisJ17}
\parinterval 实现目标语言句法树生成的一种手段是将形式文法扩展,以适应分布式表示学习框架。这样,可以使用形式文法描述句法树的生成过程(见{\chapterthree}),同时利用分布式表示来进行建模和学习。比如,可以使用基于循环神经网络的文法描述方法,把句法分析过程看作是一个循环神经网络的执行过程\upcite{DBLP:conf/naacl/DyerKBS16}。此外,也可以从{\small\sffamily\bfnew{多任务学习}}\index{多任务学习}(Multitask Learning)\index{Multitask Learning}学习出发,用多个解码端共同完成目标语言句子的生成\upcite{DBLP:journals/corr/LuongLSVK15}。图\ref{fig:15-25}展示了由一个编码器(汉语)和多个解码器组成的序列生成模型。其中不同解码器分别负责不同的任务:第一个用于预测翻译结果,即翻译任务;第二个用于句法分析任务;第三个用于语言理解任务,生成汉语上下文。其设计思想是各个任务之间能够相互辅助,使得编码器的表示能包含更多的信息,进而让多个任务都获得性能提升。这种方法也可以使用在多个编码器上,其思想是类似的。 \parinterval 实现目标语言句法树生成的一种手段是将形式文法扩展,以适应分布式表示学习框架。这样,可以使用形式文法描述句法树的生成过程(见{\chapterthree}),同时利用分布式表示来进行建模和学习。比如,可以使用基于循环神经网络的文法描述方法,把句法分析过程看作是一个循环神经网络的执行过程\upcite{DBLP:conf/naacl/DyerKBS16}。此外,也可以从{\small\sffamily\bfnew{多任务学习}}\index{多任务学习}(Multitask Learning)\index{Multitask Learning}出发,用多个解码器共同完成目标语言句子的生成\upcite{DBLP:journals/corr/LuongLSVK15}。图\ref{fig:15-25}展示了由一个编码器(汉语)和多个解码器组成的序列生成模型。其中不同解码器分别负责不同的任务:第一个用于预测翻译结果,即翻译任务;第二个用于句法分析任务;第三个用于语言理解任务,生成汉语上下文。其设计思想是各个任务之间能够相互辅助,使得编码器的表示能包含更多的信息,进而让多个任务都获得性能提升。这种方法也可以使用在多个编码器上,其思想是类似的。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -1093,7 +1093,7 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5} ...@@ -1093,7 +1093,7 @@ 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}。下面将对网络结构搜索的基本方法和其在机器翻译中的应用进行介绍。 \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
...@@ -1125,7 +1125,7 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5} ...@@ -1125,7 +1125,7 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5}
\subsubsection{1. 搜索空间} \subsubsection{1. 搜索空间}
\parinterval 对搜索空间建模是结构搜索任务中的基础部分。如图\ref{fig:15-30}所示,结构空间中包含着所有潜在的模型结构。图\ref{fig:15-30}以结构之间的相似性为衡量指标对模型结构在搜索空间中的相对位置进行了刻画,同时颜色的深浅表示了该结构在指定任务下的性能情况。可以看到对于特定任务来说,性能较好的模型结构往往会聚集在一起。因此,在研究人员设计搜索空间的时候,为了增加找到最优结构的可能性,往往会根据经验或者实验将易产出高性能模型结构的区域设定为搜索空间。以自然语言处理任务为例,最初的网络结构搜索工作主要对基于循环神经网络构成的搜索空间进行探索\upcite{DBLP:conf/iclr/ZophL17,DBLP:conf/icml/PhamGZLD18,DBLP:conf/iclr/LiuSY19},而近些年,在Transformer模型的基础上进行结构搜索也引起了研究人员的广泛关注\upcite{DBLP:conf/icml/SoLL19,DBLP:conf/ijcai/ChenLQWLDDHLZ20,DBLP:conf/acl/WangWLCZGH20} \parinterval 对搜索空间建模是结构搜索任务中的基础部分。如图\ref{fig:15-30}所示,结构空间中包含着所有潜在的模型结构。图\ref{fig:15-30}以结构之间的相似性为衡量指标对模型结构在搜索空间中的相对位置进行了刻画,同时颜色的深浅表示了该结构在指定任务下的性能情况{\red (图中的注释太小了,看不清)}。可以看到对于特定任务来说,性能较好的模型结构往往会聚集在一起。因此,在研究人员设计搜索空间的时候,为了增加找到最优结构的可能性,往往会根据经验或者实验将易产出高性能模型结构的区域设定为搜索空间。以自然语言处理任务为例,最初的网络结构搜索工作主要对基于循环神经网络构成的搜索空间进行探索\upcite{DBLP:conf/iclr/ZophL17,DBLP:conf/icml/PhamGZLD18,DBLP:conf/iclr/LiuSY19},而近些年,在Transformer模型的基础上进行结构搜索也引起了研究人员的广泛关注\upcite{DBLP:conf/icml/SoLL19,DBLP:conf/ijcai/ChenLQWLDDHLZ20,DBLP:conf/acl/WangWLCZGH20}
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -1164,13 +1164,13 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5} ...@@ -1164,13 +1164,13 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5}
\begin{figure}[htp] \begin{figure}[htp]
\centering \centering
\input{./Chapter15/Figures/figure-structure-search-based-on-reinforcement-learning} \input{./Chapter15/Figures/figure-structure-search-based-on-reinforcement-learning}
\caption{基于强化学习的结构搜索} \caption{基于强化学习的结构搜索{\red (图不好懂)}}
\label{fig:15-33} \label{fig:15-33}
\end{figure} \end{figure}
%------------------------------------------- %-------------------------------------------
\vspace{0.5em} \vspace{0.5em}
\item {\small\bfnew{基于梯度的方法}}。这种方法的思想是在连续空间中对模型结构进行表示\upcite{DBLP:conf/iclr/LiuSY19},通常将模型结构建模为超网络中的权重,使用基于梯度的优化方法对权重进行优化,最终达到归纳结构的目的,如图\ref{fig:15-34}所示。基于梯度的方法十分高效,因此也受到了很多关注\upcite{DBLP:conf/cvpr/WuDZWSWTVJK19,DBLP:conf/iclr/XuX0CQ0X20,DBLP:conf/acl/LiHZXJXZLL20} \item {\small\bfnew{基于梯度的方法}}。这种方法的思想是在连续空间中对模型结构进行表示\upcite{DBLP:conf/iclr/LiuSY19},通常将模型结构建模为超网络中的权重,使用基于梯度的优化方法对权重进行优化,最终达到归纳结构的目的,如图\ref{fig:15-34}所示{\red (图没描述)}。基于梯度的方法十分高效,因此也受到了很多关注\upcite{DBLP:conf/cvpr/WuDZWSWTVJK19,DBLP:conf/iclr/XuX0CQ0X20,DBLP:conf/acl/LiHZXJXZLL20}
\vspace{0.5em} \vspace{0.5em}
%---------------------------------------------- %----------------------------------------------
...@@ -1196,7 +1196,7 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5} ...@@ -1196,7 +1196,7 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5}
\vspace{0.5em} \vspace{0.5em}
\item {\small\bfnew{数据以及超参数的调整}}。具体来说,可以用少量的数据训练模型,以便快速评估其性能\upcite{DBLP:conf/aistats/KleinFBHH17,DBLP:journals/corr/ChrabaszczLH17}。在超参数的调整方面,也可以通过减少模型训练轮数、减少模型的层数等方式来简化模型参数,达到加速训练、评估的目的\upcite{DBLP:conf/cvpr/ZophVSL18,Real2019AgingEF,DBLP:journals/corr/abs-1807-06906} \item {\small\bfnew{数据以及超参数的调整}}。具体来说,可以用少量的数据训练模型,以便快速评估其性能\upcite{DBLP:conf/aistats/KleinFBHH17,DBLP:journals/corr/ChrabaszczLH17}。在超参数的调整方面,也可以通过减少模型训练轮数、减少模型的层数等方式来简化模型参数,达到加速训练、评估的目的\upcite{DBLP:conf/cvpr/ZophVSL18,Real2019AgingEF,DBLP:journals/corr/abs-1807-06906}
\vspace{0.5em} \vspace{0.5em}
\item {\small\bfnew{现有参数的继承及复用}}。通过在现有的模型参数基础上,继续优化中间过程产生的模型结构,来加快待评价模型的收敛进程\upcite{DBLP:conf/icml/RealMSSSTLK17,DBLP:conf/iclr/ElskenMH19,DBLP:conf/aaai/CaiCZYW18}。这种方式无需从头训练搜索过程中间过程产生的模型结构,通过“热启动”的方式对模型参数进行优化,能够大幅减少性能评估过程的时间消耗。 \item {\small\bfnew{现有参数的继承及复用}}。通过在现有的模型参数基础上,继续优化中间过程产生的模型结构,来加快待评价模型的收敛进程\upcite{DBLP:conf/icml/RealMSSSTLK17,DBLP:conf/iclr/ElskenMH19,DBLP:conf/aaai/CaiCZYW18}。这种方式无需从头训练搜索过程{\red 中间过程}产生的模型结构,通过“热启动”的方式对模型参数进行优化,能够大幅减少性能评估过程的时间消耗。
\vspace{0.5em} \vspace{0.5em}
\item {\small\bfnew{模型性能的预测}}。这种方式使用训练过程中的性能变化曲线来预估模型是否具有潜力,从而快速终止低性能模型的训练过程\upcite{DBLP:conf/ijcai/DomhanSH15,DBLP:conf/iclr/KleinFSH17,DBLP:conf/iclr/BakerGRN18} \item {\small\bfnew{模型性能的预测}}。这种方式使用训练过程中的性能变化曲线来预估模型是否具有潜力,从而快速终止低性能模型的训练过程\upcite{DBLP:conf/ijcai/DomhanSH15,DBLP:conf/iclr/KleinFSH17,DBLP:conf/iclr/BakerGRN18}
\vspace{0.5em} \vspace{0.5em}
...@@ -1241,7 +1241,7 @@ f(x) &=& x \cdot \delta(\beta x) \\ ...@@ -1241,7 +1241,7 @@ f(x) &=& x \cdot \delta(\beta x) \\
\subsubsection{2. 模型效率优化} \subsubsection{2. 模型效率优化}
\parinterval 网络结构搜索除了能够提高机器翻译模型性能之外,也能够优化模型的执行效率。从实用的角度出发,可以在进行结构搜索的同时考虑设备的计算能力,希望找到更适合运行设备的模型结构。同时,网络结构搜索也可以用来对大模型进行压缩,加速其在推断过程中的效率,这方面的工作不仅限于在机器翻译模型上,也有部分工作对基于注意力机制的预训练模型进行压缩。 \parinterval 网络结构搜索除了能够提高机器翻译模型性能之外,也能够优化模型的执行效率。从实用的角度出发,可以在进行结构搜索的同时考虑设备的计算能力,希望找到更适合运行设备的模型结构。同时,网络结构搜索也可以用来对大模型进行压缩,增加其在推断过程中的效率,这方面的工作不仅限于在机器翻译模型上,也有部分工作对基于注意力机制的预训练模型进行压缩。
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
...@@ -1253,7 +1253,7 @@ f(x) &=& x \cdot \delta(\beta x) \\ ...@@ -1253,7 +1253,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
......
...@@ -28,17 +28,25 @@ ...@@ -28,17 +28,25 @@
\begin{center} \begin{center}
{\Huge \bfnew{\ \ \ }} {\Huge \bfnew{\ \ \ }}
\end{center} \end{center}
\vspace{2em} \vspace{5em}
\begin{spacing}{1.18} \begin{spacing}{1.18}
\parinterval 我知道这里本应该再写点什么,感慨一下蹉跎岁月,最后致敬所有人。 \parinterval 我知道这里本应该再写点什么,感慨一下蹉跎岁月,最后致敬所有人。
\parinterval 不过我还是最想说:谢谢你,我的妻子。没有你的支持与照顾,我应该没有勇气来完成这本书。爱你 $\sim$ \vspace{1em}
\parinterval 不过我还是最想说:
\vspace{1em}
\parinterval 谢谢你,我的妻子。没有你的支持与照顾,我应该没有勇气来完成这本书。爱你 $\sim$
\vspace{8em}
\hfill 肖桐 \hfill 肖桐
\hfill 2020.12.27 \hfill 2020.12.27
\end{spacing} \end{spacing}
\ No newline at end of file
...@@ -42,12 +42,12 @@ ...@@ -42,12 +42,12 @@
\begin{itemize} \begin{itemize}
\item 从数据角度来看,大部分语言对的电子化双语句对集合规模非常小,有的甚至只有一个小规模双语词典。因此,针对资源稀缺语种的机器翻译技术研究也成了学术界的研究热点,相信这个课题的突破能大大推动机器翻译技术落地。早些年,机器翻译市场的规模较小,其主要原因是数据规模有限,同时机器翻译的品质不够理想。就算采用最先进的神经机器翻译技术,在缺乏足够大规模的双语句对集合作为训练数据的情况下,研究人员也是巧妇难为无米之炊。从技术研究和应用可行性的角度看,解决资源稀缺语种的机器翻译问题非常有价值。解决资源稀缺语种机器翻译问题的思路,已经在{\chaptersixteen}进行了详细的介绍,本部分就不再赘述。 \item 从数据角度来看,大部分语言对的电子化双语句对集合规模非常小,有的甚至只有一个小规模双语词典。因此,针对资源稀缺语种的机器翻译技术研究也成了学术界的研究热点,相信这个课题的突破能大大推动机器翻译技术落地。早些年,机器翻译市场的规模较小,其主要原因是数据规模有限,同时机器翻译的品质不够理想。就算采用最先进的神经机器翻译技术,在缺乏足够大规模的双语句对集合作为训练数据的情况下,研究人员也是巧妇难为无米之炊。从技术研究和应用可行性的角度看,解决资源稀缺语种的机器翻译问题非常有价值。解决资源稀缺语种机器翻译问题的思路,已经在{\chaptersixteen}进行了详细的介绍,本部分就不再赘述。
\item 从机器翻译技术来看,可实用的机器翻译系统的构建,需要多技术互补融合。做研究可以搞单点突破,但它很难能应对实际问题和改善真实应用中的翻译品质。多技术互补融合有很多研究工作,比如说,有的业内研究人员提出采用知识图谱来改善机器翻译模型性能,并希望用于解决稀缺资源语种机器翻译问题;有的引入语言分析技术来改善机器翻译;有的将基于规则的方法、统计机器翻译技术与神经机器翻译技术互补性融合;有的引入预训练技术来改善机器翻译品质等等。总体来说,这些思路都具有良好的研究价值,但是从应用角度来说,构建可实用的机器翻译系统,还需要考虑技术落地可行性。比如大规模知识图谱构建的代价和语言分析技术的精度如何,预训练技术对机器翻译帮助的上限等。 \item 从机器翻译技术来看,可实用的机器翻译系统的构建,需要多技术互补融合。做研究可以搞单点突破,但它很难能应对实际问题和改善真实应用中的翻译品质。多技术互补融合有很多研究工作,比如说,有的业内研究人员提出采用知识图谱来改善机器翻译模型性能,并希望用于解决稀缺资源语种机器翻译问题;有的引入语言分析技术来改善机器翻译;有的将基于规则的方法、统计机器翻译技术与神经机器翻译技术互补性融合;有的引入预训练技术来改善机器翻译品质等等。总体来说,这些思路都具有良好的研究价值,但是从应用角度来说,构建可实用的机器翻译系统,还需要考虑技术落地可行性。比如大规模知识图谱构建的代价和语言分析技术的精度如何,预训练技术对富资源场景下机器翻译的价值等。
\item 错误驱动,即根据用户对机器翻译译文的反馈与纠正,完善机器翻译模型的过程。机器翻译一直被诟病:用户不知道如何有效地干预纠错,来帮助机器翻译系统越做越好,毕竟谁都不希望它“屡教不改”。基于规则的方法和统计机器翻译方法相对容易实现人工干预纠错,实现手段也比较丰富,而神经机器翻译方法存在不可解释性,难以有效地实现人工干预纠错。目前,有研究人员通过引入外部知识库(用户双语术语库)来实现对未登录词翻译的干预纠错;也有的提出使用增量式训练的方法不断迭代优化模型,取得了一些进展;还有研究人员通过融合不同技术来实现更好的机器翻译效果,如引入基于规则的翻译前处理和后处理,或者引入统计机器翻译技术优化译文选择等。这些方法的代价不低,甚至很高, 并且无法保障对机器翻译性能提升的效果,有时可能会降低翻译品质(有点像“跷跷板”现象)。总体来说,这个方向的研究成果还不够丰富,但对用户体验来说非常重要。如果能采用隐性反馈学习方法,在用户不知不觉中不断改善、优化机器翻译品质,就非常酷了,这也许会成为将来的一个研究热点。 \item 错误驱动,即根据用户对机器翻译译文的反馈与纠正,完善机器翻译模型的过程。机器翻译一直被诟病:用户不知道如何有效地干预纠错,来帮助机器翻译系统越做越好,毕竟谁都不希望它“屡教不改”。基于规则的方法和统计机器翻译方法相对容易实现人工干预纠错,实现手段也比较丰富,而神经机器翻译方法很多时候被看做是黑箱,其运行机理与离散的符号系统有很大差别,难以用传统方式有效地实现人工干预纠错。目前,有研究人员通过引入外部知识库(用户双语术语库)来实现对未登录词翻译的干预纠错;也有的提出使用增量式训练的方法不断迭代优化模型,取得了一些进展;还有研究人员通过融合不同技术来实现更好的机器翻译效果,如引入基于规则的翻译前处理和后处理,或者引入统计机器翻译技术优化译文选择等。这些方法的代价不低,甚至很高, 并且无法保障对机器翻译性能提升的效果,有时可能会降低翻译品质(有点像“跷跷板”现象)。总体来说,这个方向的研究成果还不够丰富,但对用户体验来说非常重要。如果能采用隐性反馈学习方法,在用户不知不觉中不断改善、优化机器翻译品质,就非常酷了,这也许会成为将来的一个研究热点。
\end{itemize} \end{itemize}
\parinterval 除了翻译品质维度以外,机器翻译还可以从以下三个维度来讨论:语种维度、领域维度和应用模式维度。关于语种维度,机器翻译技术应该为全球用户服务,提供所有国家至少一种官方语言到其他国家语言的自动互译功能。该维度面临的最大问题是双语数据稀缺。关于领域维度,通用领域翻译系统的翻译能力,对于垂直领域数据来说是不足的。最典型的问题是不能恰当地翻译垂直领域术语,计算机不能无中生有。比较直接可行的解决方案至少有两个,一是引入垂直领域术语双语词典来改善机器翻译效果;二是收集加工一定规模的垂直领域双语句对来优化翻译模型。这两种工程方法虽然简单,但效果不错,并且两者结合对于翻译模型性能的提升帮助更大。但很多时候垂直领域双语句对的收集代价太高,可行性低,因此垂直领域翻译问题本质上就转换成为垂直领域资源稀缺问题和领域自适应学习问题。除此之外,小样本学习、迁移学习和联合学习等机器学习技术也被一些研究人员用来解决垂直领域翻译问题。关于应用模式维度,可以从下面几个方面进行讨论: \parinterval 除了翻译品质维度以外,机器翻译还可以从以下三个维度来讨论:语种维度、领域维度和应用模式维度。关于语种维度,机器翻译技术应该为全球用户服务,提供所有国家至少一种官方语言到其他国家语言的自动互译功能。该维度面临的最大问题是双语数据稀缺。关于领域维度,通用领域翻译系统的翻译能力,对于垂直领域数据来说是不足的。最典型的问题是不能恰当地翻译垂直领域术语,计算机不能无中生有。比较直接可行的解决方案至少有两个,一是引入垂直领域术语双语词典来改善机器翻译效果;二是收集加工一定规模的垂直领域双语句对来优化翻译模型。这两种工程方法虽然简单,但效果不错,并且两者结合对于翻译模型性能的提升帮助更大。但很多时候垂直领域双语句对的收集代价太高,可行性低,因此垂直领域翻译问题本质上就转换成为垂直领域资源稀缺问题和领域自适应学习问题。除此之外,小样本学习、迁移学习等机器学习技术也被一些研究人员用来解决垂直领域翻译问题。关于应用模式维度,可以从下面几个方面进行讨论:
\begin{itemize} \begin{itemize}
\item 通常,机器翻译的典型应用包括在线翻译公有云服务,用户接入非常简单,只需要联网使用浏览器就可以自由免费使用。在某些行业,用户对数据翻译安全性和保密性的要求非常高,其中可能还会涉及个性化定制,这是在线翻译公有云服务无法满足的,于是,在本地部署机器翻译私有云、离线机器翻译技术和服务成了新的应用模式。在本地部署私有云的问题在于:需要用户自己购买 GPU 服务器并建机房,对硬件的投入高。也许将来机器翻译领域会出现新的应用模式:类似服务托管模式的在线私有云或专有云,以及混合云服务(公有云、私有云和专有云的混合体)。 \item 通常,机器翻译的典型应用包括在线翻译公有云服务,用户接入非常简单,只需要联网使用浏览器就可以自由免费使用。在某些行业,用户对数据翻译安全性和保密性的要求非常高,其中可能还会涉及个性化定制,这是在线翻译公有云服务无法满足的,于是,在本地部署机器翻译私有云、离线机器翻译技术和服务成了新的应用模式。在本地部署私有云的问题在于:需要用户自己购买 GPU 服务器并建机房,对硬件的投入高。也许将来机器翻译领域会出现新的应用模式:类似服务托管模式的在线私有云或专有云,以及混合云服务(公有云、私有云和专有云的混合体)。
...@@ -70,11 +70,15 @@ ...@@ -70,11 +70,15 @@
\parinterval 从历史发展观的维度考虑,新一代的技术必然存在,换句话说,第四代机器翻译技术一定会出现,只是不知道在什么时候而已。神经机器翻译的红利还没有被挖尽,还存在很好的发展空间,在可预期的将来,神经机器翻译技术还属于主流技术,但会产生大量变种。我们愿意把新一代机器翻译技术称为面向具体应用场景的第四代机器翻译技术,它在本质上是针对不同应用条件、不同应用场景提出的能力更强的机器翻译技术。它将不是一个简单的技术,而是一个技术集合,这是完全可能的。从另一方面讲,当前的机器翻译不具有很好的解释性,其与语言学的关系并不明确。那么在第四代机器翻译技术中,是否能让研究人员或使用者更方便地了解它的工作原理,并可以根据其原理对其进行干预。甚至,我们还可以研究更合理的面向机器翻译解释性的方法,笔者相信这也是未来需要突破的点。 \parinterval 从历史发展观的维度考虑,新一代的技术必然存在,换句话说,第四代机器翻译技术一定会出现,只是不知道在什么时候而已。神经机器翻译的红利还没有被挖尽,还存在很好的发展空间,在可预期的将来,神经机器翻译技术还属于主流技术,但会产生大量变种。我们愿意把新一代机器翻译技术称为面向具体应用场景的第四代机器翻译技术,它在本质上是针对不同应用条件、不同应用场景提出的能力更强的机器翻译技术。它将不是一个简单的技术,而是一个技术集合,这是完全可能的。从另一方面讲,当前的机器翻译不具有很好的解释性,其与语言学的关系并不明确。那么在第四代机器翻译技术中,是否能让研究人员或使用者更方便地了解它的工作原理,并可以根据其原理对其进行干预。甚至,我们还可以研究更合理的面向机器翻译解释性的方法,笔者相信这也是未来需要突破的点。
\parinterval 最后,简单谈谈笔者对机器翻译市场发展趋势的看法。机器翻译本身是个强刚需,用于解决全球用户多语言交流障碍的问题。机器翻译产业真正热起来,应该归功于神经机器翻译技术的应用,虽然基于规则的方法和统计机器翻译技术也在工业界得到了应用,但翻译品质没有达到用户预期,用户付费欲望比较差,没有良好的商业变 现能力,导致机器翻译产业在 2017 年以前类似于“鸡肋”产业。严格来说,从2016 年下半年开始,神经机器翻译技术在工业界的广泛应用快速激活了用户需求,用户对机器翻译的认可度急剧上升,越来越丰富的应用模式和需求被挖掘出来。除了传统计算机辅助翻译,语音和OCR 与机器翻译技术结合,使得语音翻译 APP、翻译机、翻译笔、会议AI 同传和垂直行业(专利、医药、旅游等)的机器翻译解决方案逐渐得到了广泛应用。总体来说,机器翻译产学研正处于快速上升期,每年市场规模达到至少$100\% $增长。随着多模态机器翻译和大数据翻译技术的应用,机器翻译的应用场景会越来越丰富。随着5G ,甚至 6G 技术的发展,视频翻译和电话通信翻译等应用会进一步爆发。另外,随着人工智能芯片领域的发展,机器翻译芯片也会逐渐被广泛应用,如嵌入到手机、打印机、复印机、传真机和电视机等智能终端设备中,实现所有内容皆可翻译,任何场景皆可运行的愿景。机器翻译服务将进入人们的日常生活,无处不在,让生活更加美好!\\ \parinterval 最后,简单谈谈笔者对机器翻译市场发展趋势的看法。机器翻译本身是个强刚需,用于解决全球用户多语言交流障碍的问题。机器翻译产业真正热起来,应该归功于神经机器翻译技术的应用,虽然基于规则的方法和统计机器翻译技术也在工业界得到了应用,但翻译品质没有达到用户预期,用户付费欲望比较差,没有良好的商业变 现能力,导致机器翻译产业在早些年有些“鸡肋”。严格来说,近些年神经机器翻译技术在工业界的广泛应用快速激活了用户需求,用户对机器翻译的认可度急剧上升,越来越丰富的应用模式和需求被挖掘出来。除了传统计算机辅助翻译,语音和OCR 与机器翻译技术结合,使得语音翻译 APP、翻译机、翻译笔、会议AI 同传和垂直行业(专利、医药、旅游等)的机器翻译解决方案逐渐得到了广泛应用。总体来说,机器翻译产学研正处于快速上升期,市场规模每年都会有显著增长。随着多模态机器翻译和大数据翻译技术的应用,机器翻译的应用场景会越来越丰富。随着5G ,甚至 6G 技术的发展,视频翻译和电话通信翻译等应用会进一步爆发。另外,随着人工智能芯片领域的发展,机器翻译芯片也会逐渐被广泛应用,如嵌入到手机、打印机、复印机、传真机和电视机等智能终端设备中,实现所有内容皆可翻译,任何场景皆可运行的愿景。机器翻译服务将进入人们的日常生活,无处不在,让生活更加美好!\\
\vspace{8em}
\hfill 朱靖波 \ \ 肖桐 \hfill 朱靖波 \ \ 肖桐
\hfill 2020.12.16 \hfill 2020.12.16
\hfill 于东北大学
\end{spacing} \end{spacing}
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
本书可以供计算机相关专业高年级本科生及研究生学习之用,也可以作为自然语言处理领域,特别是机器翻译方向相关研究人员的参考资料。此外,本书各章主题明确,内容紧凑。因此,读者也可将每章作为某一专题的学习资料。 本书可以供计算机相关专业高年级本科生及研究生学习之用,也可以作为自然语言处理领域,特别是机器翻译方向相关研究人员的参考资料。此外,本书各章主题明确,内容紧凑。因此,读者也可将每章作为某一专题的学习资料。
{\sffamily\bfseries 用最简单的方式阐述机器翻译的基本思想}是笔者所期望达到的目标。但是,书中不可避免会使用一些形式化定义和算法的抽象描述,因此,笔者尽所能通过图例进行解释(本书共XXX张插图)。不过,本书所包含的内容较为广泛,难免会有疏漏,望读者海涵,并指出不当之处。 {\sffamily\bfseries 用最简单的方式阐述机器翻译的基本思想}是笔者所期望达到的目标。但是,书中不可避免会使用一些形式化定义和算法的抽象描述,因此,笔者尽所能通过图例进行解释(本书共396张插图)。不过,本书所包含的内容较为广泛,难免会有疏漏,望读者海涵,并指出不当之处。
\vspace{1.0em} \vspace{1.0em}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论