Commit 7857431e by 孟霞

合并分支 'caorunzhe' 到 'mengxia'

Caorunzhe

查看合并请求 !756
parents 4b025a7b 367bef6a
...@@ -507,7 +507,7 @@ $\funp{P}({y_j | \mathbi{s}_{j-1} ,y_{j-1},\mathbi{C}})$由Softmax实现,Softm ...@@ -507,7 +507,7 @@ $\funp{P}({y_j | \mathbi{s}_{j-1} ,y_{j-1},\mathbi{C}})$由Softmax实现,Softm
\subsection{长短时记忆网络} \subsection{长短时记忆网络}
\label{sec:lstm-cell} \label{sec:lstm-cell}
\parinterval RNN结构使得当前时刻循环单元的状态包含了之前时间步的状态信息。但是这种对历史信息的记忆并不是无损的,随着序列变长,RNN的记忆信息的损失越来越严重。在很多长序列处理任务中(如长文本生成)都观测到了类似现象。对于这个问题,研究者们提出了{\small\bfnew{长短时记忆}}\index{长短时记忆}(Long Short-term Memory)\index{Long Short-term Memory,LSTM}模型,也就是常说的LSTM模型\upcite{HochreiterLong} \parinterval RNN结构使得当前时刻循环单元的状态包含了之前时间步的状态信息。但是这种对历史信息的记忆并不是无损的,随着序列变长,RNN的记忆信息的损失越来越严重。在很多长序列处理任务中(如长文本生成)都观测到了类似现象。对于这个问题,研究者们提出了{\small\bfnew{长短时记忆}}\index{长短时记忆}(Long Short-term Memory)\index{Long Short-term Memory}模型,也就是常说的LSTM模型\upcite{HochreiterLong}
\parinterval LSTM模型是RNN模型的一种改进。相比RNN仅传递前一时刻的状态$\mathbi{h}_{t-1}$,LSTM会同时传递两部分信息:状态信息$\mathbi{h}_{t-1}$和记忆信息$\mathbi{c}_{t-1}$。这里,$\mathbi{c}_{t-1}$是新引入的变量,它也是循环单元的一部分,用于显性地记录需要记录的历史内容,$\mathbi{h}_{t-1}$$\mathbi{c}_{t-1}$在循环单元中会相互作用。LSTM通过“门”单元来动态地选择遗忘多少以前的信息和记忆多少当前的信息。LSTM中所使用的门单元结构如图\ref{fig:10-11}所示,包括遗忘门,输入门和输出门。图中$\sigma$代表Sigmoid函数,它将函数输入映射为0-1范围内的实数,用来充当门控信号。 \parinterval LSTM模型是RNN模型的一种改进。相比RNN仅传递前一时刻的状态$\mathbi{h}_{t-1}$,LSTM会同时传递两部分信息:状态信息$\mathbi{h}_{t-1}$和记忆信息$\mathbi{c}_{t-1}$。这里,$\mathbi{c}_{t-1}$是新引入的变量,它也是循环单元的一部分,用于显性地记录需要记录的历史内容,$\mathbi{h}_{t-1}$$\mathbi{c}_{t-1}$在循环单元中会相互作用。LSTM通过“门”单元来动态地选择遗忘多少以前的信息和记忆多少当前的信息。LSTM中所使用的门单元结构如图\ref{fig:10-11}所示,包括遗忘门,输入门和输出门。图中$\sigma$代表Sigmoid函数,它将函数输入映射为0-1范围内的实数,用来充当门控信号。
...@@ -573,7 +573,7 @@ $\funp{P}({y_j | \mathbi{s}_{j-1} ,y_{j-1},\mathbi{C}})$由Softmax实现,Softm ...@@ -573,7 +573,7 @@ $\funp{P}({y_j | \mathbi{s}_{j-1} ,y_{j-1},\mathbi{C}})$由Softmax实现,Softm
\subsection{门控循环单元} \subsection{门控循环单元}
\parinterval LSTM 通过门控单元控制传递状态,忘记不重要的信息,记住必要的历史信息,在长序列上取得了很好的效果,但是其进行了许多门信号的计算,较为繁琐。{\small\bfnew{门循环单元}}\index{门循环单元}(Gated Recurrent Unit,GRU)\index{Gated Recurrent Unit,GRU}作为一个LSTM的变种,继承了LSTM中利用门控单元控制信息传递的思想,并对LSTM进行了简化\upcite{Cho2014Learning}。它把循环单元状态$\mathbi{h}_t$和记忆$\mathbi{c}_t$合并成一个状态$\mathbi{h}_t$,同时使用了更少的门控单元,大大提升了计算效率。 \parinterval LSTM 通过门控单元控制传递状态,忘记不重要的信息,记住必要的历史信息,在长序列上取得了很好的效果,但是其进行了许多门信号的计算,较为繁琐。{\small\bfnew{门循环单元}}\index{门循环单元}(Gated Recurrent Unit,GRU)\index{Gated Recurrent Unit}作为一个LSTM的变种,继承了LSTM中利用门控单元控制信息传递的思想,并对LSTM进行了简化\upcite{Cho2014Learning}。它把循环单元状态$\mathbi{h}_t$和记忆$\mathbi{c}_t$合并成一个状态$\mathbi{h}_t$,同时使用了更少的门控单元,大大提升了计算效率。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
......
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
\section{卷积神经网络} \section{卷积神经网络}
\parinterval {\small\bfnew{卷积神经网络}}\index{卷积神经网络}(Convolutional Neural Network,CNN)\index{Convolutional Neural Network,CNN} 是一种前馈神经网络,由若干的卷积层与池化层组成。早期,卷积神经网络被应用在语音识别任务上\upcite{Waibel1989PhonemeRU},之后在图像处理领域取得了很好的效果\upcite{LeCun1989BackpropagationAT,726791}。近年来,卷积神经网络已经成为语音、自然语言处理、图像处理任务的基础框架\upcite{DBLP:conf/icassp/ZhangCJ17,DBLP:conf/icassp/DengAY13,Kalchbrenner2014ACN,Kim2014ConvolutionalNN,DBLP:journals/corr/HeZRS15,DBLP:conf/cvpr/HuangLMW17,Girshick2015FastR,He2020MaskR}。在自然语言处理领域,卷积神经网络已经得到广泛应用,在文本分类\upcite{Kalchbrenner2014ACN,Kim2014ConvolutionalNN,Ma2015DependencybasedCN}、情感分析\upcite{Santos2014DeepCN,}、语言建模\upcite{DBLP:conf/acl/WangLLJL15,Dauphin2017LanguageMW}、机器翻译\upcite{devlin-etal-2014-fast,kalchbrenner-blunsom-2013-recurrent,Gehring2017ACE,DBLP:journals/corr/GehringAGYD17,Kaiser2018DepthwiseSC,Wu2019PayLA}等任务中取得不错的成绩。 \parinterval {\small\bfnew{卷积神经网络}}\index{卷积神经网络}(Convolutional Neural Network,CNN)\index{Convolutional Neural Network} 是一种前馈神经网络,由若干的卷积层与池化层组成。早期,卷积神经网络被应用在语音识别任务上\upcite{Waibel1989PhonemeRU},之后在图像处理领域取得了很好的效果\upcite{LeCun1989BackpropagationAT,726791}。近年来,卷积神经网络已经成为语音、自然语言处理、图像处理任务的基础框架\upcite{DBLP:conf/icassp/ZhangCJ17,DBLP:conf/icassp/DengAY13,Kalchbrenner2014ACN,Kim2014ConvolutionalNN,DBLP:journals/corr/HeZRS15,DBLP:conf/cvpr/HuangLMW17,Girshick2015FastR,He2020MaskR}。在自然语言处理领域,卷积神经网络已经得到广泛应用,在文本分类\upcite{Kalchbrenner2014ACN,Kim2014ConvolutionalNN,Ma2015DependencybasedCN}、情感分析\upcite{Santos2014DeepCN,}、语言建模\upcite{DBLP:conf/acl/WangLLJL15,Dauphin2017LanguageMW}、机器翻译\upcite{devlin-etal-2014-fast,kalchbrenner-blunsom-2013-recurrent,Gehring2017ACE,DBLP:journals/corr/GehringAGYD17,Kaiser2018DepthwiseSC,Wu2019PayLA}等任务中取得不错的成绩。
\parinterval\ref{fig:11-1}展示了全连接层和卷积层的结构对比,可以看到在全连接层中,模型考虑了所有的输入,层输出中的每一个元素都依赖于所有输入。这种全连接层适用于大多数任务,但是当处理图像这种网格数据的时候,规模过大的数据会导致模型参数量过大,难以处理。其次,在一些网格数据中,通常具有局部不变性的特征,比如图像中不同位置的相同物体,语言序列中相同的$n$-gram等。而全连接网络很难提取这些局部不变性特征。为此,一些研究人员提出使用卷积层来替换全连接层\upcite{DBLP:conf/eccv/LiuAESRFB16,DBLP:journals/pami/RenHG017} \parinterval\ref{fig:11-1}展示了全连接层和卷积层的结构对比,可以看到在全连接层中,模型考虑了所有的输入,层输出中的每一个元素都依赖于所有输入。这种全连接层适用于大多数任务,但是当处理图像这种网格数据的时候,规模过大的数据会导致模型参数量过大,难以处理。其次,在一些网格数据中,通常具有局部不变性的特征,比如图像中不同位置的相同物体,语言序列中相同的$n$-gram等。而全连接网络很难提取这些局部不变性特征。为此,一些研究人员提出使用卷积层来替换全连接层\upcite{DBLP:conf/eccv/LiuAESRFB16,DBLP:journals/pami/RenHG017}
...@@ -242,7 +242,7 @@ ...@@ -242,7 +242,7 @@
\begin{itemize} \begin{itemize}
\item {\small\bfnew{位置编码}}\index{位置编码}(Position Embedding)\index{Position Embedding}:图中绿色背景框表示源语言端词嵌入部分。相比于基于循环神经网络的翻译模型中的词嵌入,该模型还引入了位置编码,帮助模型获得词位置信息。位置编码具体实现在图\ref{fig:11-12}中没有显示,详见\ref{sec:11.2.1}节。 \item {\small\bfnew{位置编码}}\index{位置编码}(Position Embedding)\index{Position Embedding}:图中绿色背景框表示源语言端词嵌入部分。相比于基于循环神经网络的翻译模型中的词嵌入,该模型还引入了位置编码,帮助模型获得词位置信息。位置编码具体实现在图\ref{fig:11-12}中没有显示,详见\ref{sec:11.2.1}节。
\item {\small\bfnew{卷积层}}{\small\bfnew{门控线性单元}}(Gated Linear Units, GLU\index{Gated Linear Units, GLU}):黄色背景框是卷积模块,这里使用门控线性单元作为非线性函数,之前的研究工作\upcite{Dauphin2017LanguageMW} 表明这种非线性函数更适合于序列建模任务。图中为了简化,只展示了一层卷积,但在实际中为了更好地捕获句子信息,通常使用多层卷积的叠加。 \item {\small\bfnew{卷积层}}{\small\bfnew{门控线性单元}}(Gated Linear Units, GLU\index{Gated Linear Units}):黄色背景框是卷积模块,这里使用门控线性单元作为非线性函数,之前的研究工作\upcite{Dauphin2017LanguageMW} 表明这种非线性函数更适合于序列建模任务。图中为了简化,只展示了一层卷积,但在实际中为了更好地捕获句子信息,通常使用多层卷积的叠加。
\item {\small\bfnew{残差连接}}\index{残差连接}(Residual Connection)\index{Residual Connection}:源语言端和目标语言端的卷积层网络之间,都存在一个从输入到输出的额外连接,即跳接\upcite{DBLP:journals/corr/HeZRS15}。该连接方式确保每个隐层输出都能包含输入序列中的更多信息,同时能够有效提高深层网络的信息传递效率(该部分在图\ref{fig:11-12}中没有显示,具体结构详见\ref{sec:11.2.3}节)。 \item {\small\bfnew{残差连接}}\index{残差连接}(Residual Connection)\index{Residual Connection}:源语言端和目标语言端的卷积层网络之间,都存在一个从输入到输出的额外连接,即跳接\upcite{DBLP:journals/corr/HeZRS15}。该连接方式确保每个隐层输出都能包含输入序列中的更多信息,同时能够有效提高深层网络的信息传递效率(该部分在图\ref{fig:11-12}中没有显示,具体结构详见\ref{sec:11.2.3}节)。
...@@ -418,7 +418,7 @@ ...@@ -418,7 +418,7 @@
\parinterval ConvS2S模型应用了很多工程方面的调整,主要包括: \parinterval ConvS2S模型应用了很多工程方面的调整,主要包括:
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
\item ConvS2S模型使用了{\small\bfnew{Nesterov加速梯度下降法}} \index{Nesterov加速梯度下降法}(Nesterov Accelerated Gradient,NAG)\index{Nesterov Accelerated Gradient,NAG},动量累计的系数设置为0.99,当梯度范数超过0.1时重新进行规范化\upcite{Sutskever2013OnTI} \item ConvS2S模型使用了{\small\bfnew{Nesterov加速梯度下降法}} \index{Nesterov加速梯度下降法}(Nesterov Accelerated Gradient,NAG)\index{Nesterov Accelerated Gradient},动量累计的系数设置为0.99,当梯度范数超过0.1时重新进行规范化\upcite{Sutskever2013OnTI}
\vspace{0.5em} \vspace{0.5em}
\item ConvS2S模型中设置学习率为0.25,每当模型在校验集上的困惑度不再下降时,便在每轮的训练后将学习率降低一个数量级,直至学习率小于一定的阈值(如0.0004)。 \item ConvS2S模型中设置学习率为0.25,每当模型在校验集上的困惑度不再下降时,便在每轮的训练后将学习率降低一个数量级,直至学习率小于一定的阈值(如0.0004)。
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
\node[node,font=\scriptsize,anchor = north,fill=ugreen!5,drop shadow] (dict) at ([xshift = 5em,yshift = -5em]node6.south){\begin{tabular}{llllll} \node[node,font=\scriptsize,anchor = north,fill=ugreen!5,drop shadow] (dict) at ([xshift = 5em,yshift = -5em]node6.south){\begin{tabular}{llllll}
\multirow{3}{*}{符号合并表:} & ('e','s') & ('es','t') & ('est','$<$e$>$') & ('l','o') & ('lo','w') \\ \multirow{3}{*}{符号合并表:} & ('e','s') & ('es','t') & ('est','$<$e$>$') & ('l','o') & ('lo','w') \\
& ('low','$<$e$>$') & ('n','e') & ('ne','w') & ('new','est$<$e$>$') & ('w','i') \\ & ('n','e') & ('ne','w') & ('new','est$<$e$>$') & ('low','$<$e$>$') & ('w','i') \\
& ('wi','d') & ('wid','est$<$e$>$') & ('low','e') & ('lowe','r') & ('lower','$<$e$>$') & ('wi','d') & ('wid','est$<$e$>$') & ('low','e') & ('lowe','r') & ('lower','$<$e$>$')
\end{tabular}}; \end{tabular}};
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
\tikzstyle{neuronnode} = [minimum size=1.8em,circle,draw,very thick,ublue,inner sep=0pt, fill=white,align=center] \tikzstyle{neuronnode} = [minimum size=1.8em,circle,draw,very thick,ublue,inner sep=0pt, fill=white,align=center]
%standard %standard
\node [neuronnode] (neuron_b) at (0,0) {\scriptsize{$b_{i}^{l}$}}; \node [neuronnode] (neuron_b) at (0,0) {\scriptsize{$b^{l}$}};
\node [neuronnode] (neuron_y3) at (0,-1*\neuronsep) {\scriptsize{$x_{3}^{l}$}}; \node [neuronnode] (neuron_y3) at (0,-1*\neuronsep) {\scriptsize{$x_{3}^{l}$}};
\node [neuronnode] (neuron_y2) at (0,-2*\neuronsep) {\scriptsize{$x_{2}^{l}$}}; \node [neuronnode] (neuron_y2) at (0,-2*\neuronsep) {\scriptsize{$x_{2}^{l}$}};
\node [neuronnode] (neuron_y1) at (0,-3*\neuronsep) {\scriptsize{$x_{1}^{l}$}}; \node [neuronnode] (neuron_y1) at (0,-3*\neuronsep) {\scriptsize{$x_{1}^{l}$}};
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
\draw [->,line width=0.3mm] (neuron_z.east) -- (neuron_y'.west); \draw [->,line width=0.3mm] (neuron_z.east) -- (neuron_y'.west);
%dropout %dropout
\node [neuronnode] (drop_neuron_b) at (5*\nodespace,0) {\scriptsize{$b_{i}^{l}$}}; \node [neuronnode] (drop_neuron_b) at (5*\nodespace,0) {\scriptsize{$b^{l}$}};
\node [neuronnode] (drop_neuron_y3') at (5*\nodespace,-1*\neuronsep) {\scriptsize{$\tilde{x}_{3}^{l}$}}; \node [neuronnode] (drop_neuron_y3') at (5*\nodespace,-1*\neuronsep) {\scriptsize{$\tilde{x}_{3}^{l}$}};
\node [neuronnode] (drop_neuron_y2') at (5*\nodespace,-2*\neuronsep) {\scriptsize{$\tilde{x}_{2}^{l}$}}; \node [neuronnode] (drop_neuron_y2') at (5*\nodespace,-2*\neuronsep) {\scriptsize{$\tilde{x}_{2}^{l}$}};
\node [neuronnode] (drop_neuron_y1') at (5*\nodespace,-3*\neuronsep) {\scriptsize{$\tilde{x}_{1}^{l}$}}; \node [neuronnode] (drop_neuron_y1') at (5*\nodespace,-3*\neuronsep) {\scriptsize{$\tilde{x}_{1}^{l}$}};
...@@ -60,12 +60,12 @@ ...@@ -60,12 +60,12 @@
%equ %equ
\node [anchor=west,inner sep = 2pt] (line1) at (9*\nodespace,0) {未应用Dropout:}; \node [anchor=west,inner sep = 2pt] (line1) at (9*\nodespace,0) {未应用Dropout:};
\node [anchor=north west,inner sep = 2pt] (line2) at (line1.south west) {$z_{i}^{l+1}=\mathbf{w}^{l} \mathbf{x}^{l} + b_{i}^{l}$}; \node [anchor=north west,inner sep = 2pt] (line2) at (line1.south west) {$z_{i}^{l+1}=\mathbf{w}^{l} \mathbf{x}^{l} + b^{l}$};
\node [anchor=north west,inner sep = 2pt] (line3) at (line2.south west) {$x_{i}^{l+1}=f\left(z_{i}^{l+1}\right)$}; \node [anchor=north west,inner sep = 2pt] (line3) at (line2.south west) {$x_{i}^{l+1}=f\left(z_{i}^{l+1}\right)$};
\node [anchor=north west,inner sep = 2pt] (line4) at (line3.south west) {应用Dropout:}; \node [anchor=north west,inner sep = 2pt] (line4) at (line3.south west) {应用Dropout:};
\node [anchor=north west,inner sep = 2pt] (line5) at (line4.south west) {$r_{j}^{l} \sim$ Bernoulli $(1-p)$}; \node [anchor=north west,inner sep = 2pt] (line5) at (line4.south west) {$r_{j}^{l} \sim$ Bernoulli $(1-p)$};
\node [anchor=north west,inner sep = 2pt] (line6) at (line5.south west) {$\tilde{\mathbf{x}}=\mathbf{r} * \mathbf{x}$}; \node [anchor=north west,inner sep = 2pt] (line6) at (line5.south west) {$\tilde{\mathbf{x}}=\mathbf{r} * \mathbf{x}$};
\node [anchor=north west,inner sep = 2pt] (line7) at (line6.south west) {$z_{i}^{l+1}=\mathbf{w}^{l} \widetilde{\mathbf{x}}^{l} + b_{i}^{l}$}; \node [anchor=north west,inner sep = 2pt] (line7) at (line6.south west) {$z_{i}^{l+1}=\mathbf{w}^{l} \widetilde{\mathbf{x}}^{l} + b^{l}$};
\node [anchor=north west,inner sep = 2pt] (line8) at (line7.south west) {$x_{i}^{l+1}=f\left(z_{i}^{l+1}\right)$}; \node [anchor=north west,inner sep = 2pt] (line8) at (line7.south west) {$x_{i}^{l+1}=f\left(z_{i}^{l+1}\right)$};
\end{tikzpicture} \end{tikzpicture}
\ No newline at end of file
\begin{tikzpicture} \begin{tikzpicture}
\node[rounded corners=3pt,minimum width=1.0em,minimum height=2.0em,font=\scriptsize,fill=green!5,drop shadow,thick,draw](top) at (0,0) { \node[rounded corners=3pt,minimum width=1.0em,minimum height=2.0em,font=\scriptsize,fill=green!5,drop shadow,thick](top) at (0,0) {
\begin{tabular}{ll} \begin{tabular}{lllllll}
\multicolumn{2}{c}{BPE词表:} \\ \multicolumn{7}{c}{符号合并表} \\
errrr$<$e$>$ & tain$<$e$>$ \\ r\ $<$e$>$, & e\ s, & l\ o, & es\ t, & lo\ w, & est\ $<$e$>$, & e\ r$<$e$>$,
moun & est$<$e$>$ \\
high & the$<$e$>$ \\
a$<$e$>$ &
\end{tabular} \end{tabular}
}; };
\node[font=\scriptsize,anchor=west] (node1) at ([xshift=0.5em,yshift=1em]top.east) {原始序列:}; \node[font=\footnotesize,anchor=north] (l1) at ([xshift=0em,yshift=-1em]top.south) {(a) 符号合并表};
\node[font=\scriptsize,anchor=west] (this) at (node1.east) {"this$<$e$>$" ,}; \node[font=\scriptsize,anchor=west] (n1) at ([xshift=-6em,yshift=-6em]top.west) {l\ o\ w\ e\ r\ $<$e$>$};
\node[font=\scriptsize,anchor=west] (highest) at (this.east) {"highest$<$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] (mountain) at (highest.east) { "mountain$<$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] (n5) at ([xshift=2.6em]n4.east) {low\ {\red er$<$e$>$}};
\node[font=\scriptsize,anchor=west] (node2) at ([yshift=-1.5em]node1.south west) {BPE切分:}; \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] (unk) at (node2.east) {"$<$unk$>$",}; \node[font=\scriptsize,anchor=west] (t2) at ([xshift=0.8em]t1.east) {l\ o\ w\ {\red es}\ t\ $<$e$>$};
\node[font=\scriptsize,anchor=west] (high) at (unk.east) {"high",}; \node[font=\scriptsize,anchor=west] (t3) at ([xshift=0.8em]t2.east) {{\red lo}\ w\ es\ t\ $<$e$>$};
\node[font=\scriptsize,anchor=west] (est) at (high.east) {"est$<$e$>$",}; \node[font=\scriptsize,anchor=west] (t4) at ([xshift=0.8em]t3.east) {lo\ w\ {\red est}\ $<$e$>$};
\node[font=\scriptsize,anchor=west] (moun) at (est.east) {"moun",}; \node[font=\scriptsize,anchor=west] (t5) at ([xshift=0.8em]t4.east) {{\red low}\ est\ $<$e$>$};
\node[font=\scriptsize,anchor=west] (tain) at (moun.east) {"tain$<$e$>$"}; \node[font=\scriptsize,anchor=west] (t6) at ([xshift=0.8em]t5.east) {low\ {\red est$<$e$>$}};
\node[font=\footnotesize,anchor=north] (l2) at ([xshift=1.5em,yshift=-1em]t3.south) {(b) 合并样例};
\draw[->,thick](n1.east) -- (n2.west);
\draw[->,thick](n2.east) -- (n3.west);
\draw[->,thick](n3.east) -- (n4.west);
\draw[->,thick](n4.east) -- (n5.west);
\draw[->,thick](t1.east) -- (t2.west);
\draw[->,thick](t2.east) -- (t3.west);
\draw[->,thick](t3.east) -- (t4.west);
\draw[->,thick](t4.east) -- (t5.west);
\draw[->,thick](t5.east) -- (t6.west);
%\draw[->,thick](node1.south) -- ([xshift=-1.0em]node2.north);
\draw[->,thick]([xshift=-0.2em]this.south) -- (unk);
\draw[->,thick](highest.south) -- (high);
\draw[->,thick](highest.south) -- (est);
\draw[->,thick](mountain.south) -- (moun);
\draw[->,thick](mountain.south) -- (tain);
\end{tikzpicture} \end{tikzpicture}
\ No newline at end of file
...@@ -120,7 +120,7 @@ ...@@ -120,7 +120,7 @@
\subsection{双字节编码(BPE)} \subsection{双字节编码(BPE)}
\parinterval {\small\bfnew{字节对编码}}\index{字节对编码}{\small\bfnew{双字节编码}}\index{双字节编码}(Byte Pair Encoding\index{Byte Pair Encoding}BPE)是一种常用的子词词表构建方法。BPE方法最早用于数据压缩,该方法将数据中常见的连续字符串替换为一个不存在的字符,之后通过构建一个替换关系的对应表,对压缩后的数据进行还原\upcite{Gage1994ANA}。机器翻译借用了这种思想,把子词切分看作是学习对自然语言句子进行压缩编码表示的问题\upcite{DBLP:conf/acl/SennrichHB16a}。其目的是,保证编码后的结果(即子词切分)占用的字节尽可能少。这样,子词单元会尽可能被不同单词复用,同时又不会因为使用过小的单元造成子词切分序列过长。使用BPE算法构建符号合并表可以分为如下几个步骤: \parinterval 字节对编码或双字节编码(BPE)是一种常用的子词词表构建方法。BPE方法最早用于数据压缩,该方法将数据中常见的连续字符串替换为一个不存在的字符,之后通过构建一个替换关系的对应表,对压缩后的数据进行还原\upcite{Gage1994ANA}。机器翻译借用了这种思想,把子词切分看作是学习对自然语言句子进行压缩编码表示的问题\upcite{DBLP:conf/acl/SennrichHB16a}。其目的是,保证编码后的结果(即子词切分)占用的字节尽可能少。这样,子词单元会尽可能被不同单词复用,同时又不会因为使用过小的单元造成子词切分序列过长。使用BPE算法构建符号合并表可以分为如下几个步骤:
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
...@@ -143,7 +143,7 @@ ...@@ -143,7 +143,7 @@
%---------------------------------------------- %----------------------------------------------
\end{itemize} \end{itemize}
\parinterval\ref{fig:7-9}给出了BPE算法执行的实例。其中预先设定的合并表的大小为10。在得到了符号合并表后,便需要对用字符表示的单词进行合并,得到以子词形式表示的文本。首先,将单词切分为以字符表示的符号序列,并在尾部加上终结符。然后按照符号合并表的顺序依次遍历,如果存在相同的2-gram符号组合,则对其进行合并,直至遍历结束。图1.4给出了一个使用字符合并表对单词进行子词切分的实例。红色单元为每次合并后得到的新符号,直至无法合并,或遍历结束,得到最终的合并结果。其中每一个单元为一个子词,如图\ref{fig:7-10}{\red{图有问题}} \parinterval\ref{fig:7-9}给出了BPE算法执行的实例。其中预先设定的合并表的大小为10。在得到了符号合并表后,便需要对用字符表示的单词进行合并,得到以子词形式表示的文本。首先,将单词切分为以字符表示的符号序列,并在尾部加上终结符。然后按照符号合并表的顺序依次遍历,如果存在相同的2-gram符号组合,则对其进行合并,直至遍历结束。图1.4给出了一个使用字符合并表对单词进行子词切分的实例。红色单元为每次合并后得到的新符号,直至无法合并,或遍历结束,得到最终的合并结果。其中每一个单元为一个子词,如图\ref{fig:7-10}
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -189,7 +189,7 @@ ...@@ -189,7 +189,7 @@
\sectionnewpage \sectionnewpage
\section{正则化}\label{subsection-13.2} \section{正则化}\label{subsection-13.2}
\parinterval {\small\bfnew{正则化}}\index{正则化}(Regularization)\index{Regularization}是机器学习中的经典技术,通常用于缓解过拟合问题。正则化的概念源自线性代数和代数几何。在实践中,它更多的是指对{\small\bfnew{反问题}}\index{反问题}(The Inverse Problem)\index{Inverse Problem}的一种求解方式。假设输入$x$和输出$y$之间存在一种映射$f$ \parinterval 正则化是机器学习中的经典技术,通常用于缓解过拟合问题。正则化的概念源自线性代数和代数几何。在实践中,它更多的是指对{\small\bfnew{反问题}}\index{反问题}(The Inverse Problem)\index{Inverse Problem}的一种求解方式。假设输入$x$和输出$y$之间存在一种映射$f$
\begin{eqnarray} \begin{eqnarray}
y &=& f(x) y &=& f(x)
\label{eq:13-1} \label{eq:13-1}
...@@ -262,11 +262,11 @@ R(\mathbf{w}) & = & (\big| |\mathbf{w}| {\big|}_2)^2 \\ ...@@ -262,11 +262,11 @@ R(\mathbf{w}) & = & (\big| |\mathbf{w}| {\big|}_2)^2 \\
\subsection{标签平滑} \subsection{标签平滑}
\parinterval 神经机器翻译在每个目标语位置$j$会输出一个分布$\mathbf{y}_j$,这个分布描述了每个目标语言单词出现的可能性。在训练时,每个目标语言位置上的答案是一个单词,也就对应了One-hot分布$\tilde{\mathbf{y}}_j$,它仅仅在正确答案那一维为1,其它维均为0。模型训练可以被看作是一个调整模型参数让$\mathbf{y}_j$逼近$\tilde{\mathbf{y}}_j$的过程。但是,$\tilde{\mathbf{y}}_j$的每一个维度是一个非0即1的目标,这样也就无法考虑类别之间的相关性。具体来说,除非模型在答案那一维输出1,否则都会得到惩罚。即使模型把一部分概率分配给与答案相近的单词(比如同义词),这个相近的单词仍被视为完全错误的预测。 \parinterval 神经机器翻译在每个目标语位置$j$会输出一个分布$\tilde{\mathbf{y}}_j$,这个分布描述了每个目标语言单词出现的可能性。在训练时,每个目标语言位置上的答案是一个单词,也就对应了One-hot分布${\mathbf{y}}_j$,它仅仅在正确答案那一维为1,其它维均为0。模型训练可以被看作是一个调整模型参数让$\tilde{\mathbf{y}}_j$逼近${\mathbf{y}}_j$的过程。但是,${\mathbf{y}}_j$的每一个维度是一个非0即1的目标,这样也就无法考虑类别之间的相关性。具体来说,除非模型在答案那一维输出1,否则都会得到惩罚。即使模型把一部分概率分配给与答案相近的单词(比如同义词),这个相近的单词仍被视为完全错误的预测。
\parinterval {\small\bfnew{标签平滑}}\index{标签平滑}(Label Smoothing)\index{Label Smoothing}的思想很简单\upcite{Szegedy_2016_CVPR}:答案所对应的单词不应该“独享”所有的概率,其它单词应该有机会作为答案。这个观点与{\chaptertwo}中语言模型的平滑非常类似。在复杂模型的参数估计中,往往需要给未见或者低频事件分配一些概率,以保证模型具有更好的泛化能力。具体实现时,标签平滑使用了一个额外的分布$\mathbf{q}$,它是在词汇表$V$ 上的一个均匀分布,即$\mathbf{q}(k)=\frac{1}{|V|}$,其中$\mathbf{q}(k)$表示分布的第$k$维。然后,答案分布被重新定义为$\tilde{\mathbf{y}}_j$$\mathbf{q}$的线性插值: \parinterval 标签平滑的思想很简单\upcite{Szegedy_2016_CVPR}:答案所对应的单词不应该“独享”所有的概率,其它单词应该有机会作为答案。这个观点与{\chaptertwo}中语言模型的平滑非常类似。在复杂模型的参数估计中,往往需要给未见或者低频事件分配一些概率,以保证模型具有更好的泛化能力。具体实现时,标签平滑使用了一个额外的分布$\mathbf{q}$,它是在词汇表$V$ 上的一个均匀分布,即$\mathbf{q}(k)=\frac{1}{|V|}$,其中$\mathbf{q}(k)$表示分布的第$k$维。然后,答案分布被重新定义为${\mathbf{y}}_j$$\mathbf{q}$的线性插值:
\begin{eqnarray} \begin{eqnarray}
\mathbf{y}_{j}^{ls} &=& (1-\alpha) \cdot \tilde{\mathbf{y}}_j + \alpha \cdot \mathbf{q} \mathbf{y}_{j}^{ls} &=& (1-\alpha) \cdot {\mathbf{y}}_j + \alpha \cdot \mathbf{q}
\label{eq:13-5} \label{eq:13-5}
\end{eqnarray} \end{eqnarray}
...@@ -306,7 +306,7 @@ R(\mathbf{w}) & = & (\big| |\mathbf{w}| {\big|}_2)^2 \\ ...@@ -306,7 +306,7 @@ R(\mathbf{w}) & = & (\big| |\mathbf{w}| {\big|}_2)^2 \\
\end{figure} \end{figure}
%---------------------------------------------- %----------------------------------------------
\parinterval 具体实现时,可以设置一个参数$p \in (0,1)$。在每次参数更新所使用的前向和反向计算中,每个神经元都以概率$p$停止工作。相当于每层神经网络会有以$p$为比例的神经元被“屏蔽”掉。每一次参数更新中会随机屏蔽不同的神经元,图\ref{fig:13-14}给出了Dropout方法和传统方法计算方式的对比。 \parinterval 具体实现时,可以设置一个参数$p \in (0,1)$。在每次参数更新所使用的前向和反向计算中,每个神经元都以概率$p$停止工作。相当于每层神经网络会有以$p$为比例的神经元被“屏蔽”掉。每一次参数更新中会随机屏蔽不同的神经元,图\ref{fig:13-14}给出了Dropout方法和传统方法计算方式的对比。其中,$x_{i}^{l}$代表第$l+1$层神经网络的第$i$个输入,$w_{i}^{l}$为输入所对应的权重,$b^{l}$表示第$l+1$层神经网络输入的偏置,$z_{i}^{l+1}$表示第$l+1$层神经网络的线性运算的结果,$f$表示激活函数,$r_{j}^{l}$的值服从于概率为$1-p$的伯努利分布。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -362,11 +362,11 @@ R(\mathbf{w}) & = & (\big| |\mathbf{w}| {\big|}_2)^2 \\ ...@@ -362,11 +362,11 @@ R(\mathbf{w}) & = & (\big| |\mathbf{w}| {\big|}_2)^2 \\
\label{eq:13-8} \label{eq:13-8}
\end{eqnarray} \end{eqnarray}
\noindent 其中,$(\mathbi{x},\mathbi{y})$为原样本,$(\mathbi{x}',\mathbi{y})$为输入中含有扰动的对抗样本,函数$\funp{C}(\cdot)$为模型。公式\eqref{eq:13-8}$\funp{R}(\mathbi{x},\mathbi{x}')$表示扰动后的输入$\mathbi{x}'$和原输入$\mathbi{x}$之间的距离,$\varepsilon$表示扰动的受限范围。当模型对包含噪声的数据容易给出较差的结果时,往往意味着该模型的抗干扰能力差,因此可以利用对抗样本检测现有模型的健壮性\upcite{DBLP:conf/emnlp/JiaL17}。同时,采用类似数据增强的方式将对抗样本混合至训练数据中,能够帮助模型学习到更普适的特征使模型得到稳定的输出,这种方式也被称为对抗训练\upcite{DBLP:journals/corr/GoodfellowSS14,DBLP:conf/emnlp/BekoulisDDD18,DBLP:conf/naacl/YasunagaKR18} \noindent 其中,$(\mathbi{x},\mathbi{y})$为原样本{\red(样本和上面的输入输出是不是不太统一?)}$(\mathbi{x}',\mathbi{y})$为输入中含有扰动的对抗样本,函数$\funp{C}(\cdot)$为模型。公式\eqref{eq:13-8}$\funp{R}(\mathbi{x},\mathbi{x}')$表示扰动后的输入$\mathbi{x}'$和原输入$\mathbi{x}$之间的距离,$\varepsilon$表示扰动的受限范围。当模型对包含噪声的数据容易给出较差的结果时,往往意味着该模型的抗干扰能力差,因此可以利用对抗样本检测现有模型的健壮性\upcite{DBLP:conf/emnlp/JiaL17}。同时,采用类似数据增强的方式将对抗样本混合至训练数据中,能够帮助模型学习到更普适的特征使模型得到稳定的输出,这种方式也被称为对抗训练\upcite{DBLP:journals/corr/GoodfellowSS14,DBLP:conf/emnlp/BekoulisDDD18,DBLP:conf/naacl/YasunagaKR18}
\parinterval 通过对抗样本训练来提升模型健壮性的首要问题是:如何生成对抗样本。通过当前模型$\funp{C}$和样本$(\mathbi{x},\mathbi{y})$,生成对抗样本的过程,被称为{\small\bfnew{对抗攻击}}\index{对抗攻击}(Adversarial Attack)\index{Adversarial Attack}。对抗攻击可以被分为两种,分别是黑盒攻击和白盒攻击。在白盒攻击中,攻击算法可以访问模型的完整信息,包括模型结构、网络参数、损失函数、激活函数、输入和输出数据等。而黑盒攻击不需要知道神经网络的详细信息,仅仅通过访问模型的输入和输出就可以达到攻击目的,{\red 因此通常依赖启发式方法来生成对抗样本}。由于神经网络本身便是一个黑盒模型,因此对模型内部的参数干预度有限,因此黑盒攻击在许多实际应用中更加实用({\color{red} 为啥干预度有限就更加实用?} \parinterval 通过对抗样本训练来提升模型健壮性的首要问题是:如何生成对抗样本。通过当前模型$\funp{C}$和样本$(\mathbi{x},\mathbi{y})$,生成对抗样本的过程,被称为{\small\bfnew{对抗攻击}}\index{对抗攻击}(Adversarial Attack)\index{Adversarial Attack}。对抗攻击可以被分为两种,分别是黑盒攻击和白盒攻击。在白盒攻击中,攻击算法可以访问模型的完整信息,包括模型结构、网络参数、损失函数、激活函数、输入和输出数据等。而黑盒攻击不需要知道神经网络的详细信息,仅仅通过访问模型的输入和输出就可以达到攻击目的,{\red 因此通常依赖启发式方法来生成对抗样本(Adversarial Examples for Evaluating Reading Comprehension Systems)}。由于神经网络对模型内部的参数干预度有限,其本身便是一个黑盒模型,并且黑盒攻击只需要在输入部分引入攻击信号,因此在神经网络的相关应用中黑盒攻击方法更加实用
\parinterval 在神经机器翻译中,输入所包含的细小的扰动会使模型变得脆弱\upcite{DBLP:conf/iclr/BelinkovB18}。由于图像和文本数据之间存在着一定的差异,以像素值等表示的图像数据是连续的\upcite{DBLP:conf/naacl/MichelLNP19}{\red (如何理解连续?)},而文本中的一个个单词本身离散的,因此图像中的对抗攻击方法难以直接应用于自然语言处理领域。简单替换这些离散的单词,可能会生成语法错误或者语义错误的句子。简单替换产生的扰动过大,模型很容易判别。即使对词嵌入等连续表示的部分进行扰动,也会产生无法与词嵌入空间中的任何词匹配的向量\upcite{Gong2018AdversarialTW}。针对这些问题,下面着重介绍神经机器翻译任务中如何有效生成和使用对抗样本。 \parinterval 在神经机器翻译中,输入所包含的细小的扰动会使模型变得脆弱\upcite{DBLP:conf/iclr/BelinkovB18}。由于图像和文本数据之间存在着一定的差异,对计算机而言,以像素值等表示的图像数据本身就是连续的\upcite{DBLP:conf/naacl/MichelLNP19},而文本中的一个个单词本身离散的,因此图像中的对抗攻击方法难以直接应用于自然语言处理领域。简单替换这些离散的单词,可能会生成语法错误或者语义错误的句子。简单替换产生的扰动过大,模型很容易判别。即使对词嵌入等连续表示的部分进行扰动,也会产生无法与词嵌入空间中的任何词匹配的向量\upcite{Gong2018AdversarialTW}。针对这些问题,下面着重介绍神经机器翻译任务中如何有效生成和使用对抗样本。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SECTION % NEW SUB-SECTION
...@@ -387,9 +387,26 @@ R(\mathbf{w}) & = & (\big| |\mathbf{w}| {\big|}_2)^2 \\ ...@@ -387,9 +387,26 @@ R(\mathbf{w}) & = & (\big| |\mathbf{w}| {\big|}_2)^2 \\
\end{figure} \end{figure}
%---------------------------------------------- %----------------------------------------------
%----------------------------------------------
\begin{table}[htp]{
\begin{center}
\caption{对抗样本实例{\red 换成这个行吗?}}
\label{tab:comparison-of-different-MT}
\begin{tabular}{l | l }
\rule{0pt}{15pt} 原始输入 & We are looking forward to the school holiday as soon as possible \\
\hline
\rule{0pt}{15pt} 替换操作 & We are looking forward to the school {\red vacation} as soon as possible \\
\rule{0pt}{15pt} 插入操作 & We are {\red extraordinary} looking forward to the school holiday as soon as possible \\
\end{tabular}
\end{center}
\label{tab:13-2}
}\end{table}
%-------------------------------------------
\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 在基于语义的方法中,除了通过不同的算法修改输入以外,也可以通过神经网络模型增加扰动。例如,在机器翻译中常用的回译技术,也是生成对抗样本的一种有效方式。回译就是,通过反向模型将目标语言翻译成源语言,并将翻译得到的双语数据用于模型训练。除了翻译模型,语言模型也可以用于生成对抗样本。{\red 前面}已经介绍过,语言模型可以用于检测句子的流畅度,它根据上文预测当前位置可能出现的单词。因此,此时可以使用语言模型预测出当前位置最可能出现的多个单词,并用这些词替换序列中原本的单词。在机器翻译任务中,可以通过与神经机器翻译系统联合训练,共享词向量矩阵的方式得到语言模型。{\red (引用} \parinterval 在基于语义的方法中,除了通过不同的算法修改输入以外,也可以通过神经网络模型增加扰动。例如,在机器翻译中常用的回译技术,也是生成对抗样本的一种有效方式。回译就是,通过反向模型将目标语言翻译成源语言,并将翻译得到的双语数据用于模型训练。除了翻译模型,语言模型也可以用于生成对抗样本。{\chapterfive}已经介绍过,语言模型可以用于检测句子的流畅度,它根据上文预测当前位置可能出现的单词。因此,此时可以使用语言模型预测出当前位置最可能出现的多个单词,并用这些词替换序列中原本的单词。在机器翻译任务中,可以通过与神经机器翻译系统联合训练,共享词向量矩阵的方式得到语言模型。{\red (Soft contextual data augmentation for neural machine translation}
\parinterval 此外,{\small\bfnew{生成对抗网络}}\index{生成对抗网络}(Generative Adversarial Networks\index{Generative Adversarial Networks}, GANs)也可以被用来生成对抗样本\upcite{DBLP:conf/iclr/ZhaoDS18}。与回译方法类似,基于GAN的方法将原始的输入映射为潜在分布$\funp{P}$,并在其中搜索出服从相同分布的文本构成对抗样本。一些研究也对这种方法进行了优化\upcite{DBLP:conf/iclr/ZhaoDS18},在稠密的向量空间中进行搜索,也就是说在定义$\funp{P}$的基础稠密向量空间中找到对抗性表示$\mathbi{z}'$,然后利用生成模型将其映射回$\mathbi{x}'$,使最终生成的对抗样本在语义上接近原始输入。{\red(既然GAN不是主流,可以考虑把这部分放到拓展阅读中)} \parinterval 此外,{\small\bfnew{生成对抗网络}}\index{生成对抗网络}(Generative Adversarial Networks\index{Generative Adversarial Networks}, GANs)也可以被用来生成对抗样本\upcite{DBLP:conf/iclr/ZhaoDS18}。与回译方法类似,基于GAN的方法将原始的输入映射为潜在分布$\funp{P}$,并在其中搜索出服从相同分布的文本构成对抗样本。一些研究也对这种方法进行了优化\upcite{DBLP:conf/iclr/ZhaoDS18},在稠密的向量空间中进行搜索,也就是说在定义$\funp{P}$的基础稠密向量空间中找到对抗性表示$\mathbi{z}'$,然后利用生成模型将其映射回$\mathbi{x}'$,使最终生成的对抗样本在语义上接近原始输入。{\red(既然GAN不是主流,可以考虑把这部分放到拓展阅读中)}
...@@ -407,7 +424,7 @@ R(\mathbf{w}) & = & (\big| |\mathbf{w}| {\big|}_2)^2 \\ ...@@ -407,7 +424,7 @@ R(\mathbf{w}) & = & (\big| |\mathbf{w}| {\big|}_2)^2 \\
\vspace{0.5em} \vspace{0.5em}
\item 除了引入标准的噪声外,还可以根据模型所存在的具体问题,构建不同的扰动。例如,针对输入中包含同音字错误导致的模型输出误差较大的问题,可以将单词的发音转换为一个包含$n$个发音单元的发音序列,如音素,音节等。并训练相应的嵌入矩阵将每一个发音单元转换为对应的向量表示。对发音序列中发音单元的嵌入表示进行平均后,得到当前单词的发音表示。最后将词嵌入与单词的发音表示进行加权求和,并将结果作为模型的输入\upcite{DBLP:conf/acl/LiuMHXH19}。通过这种方式可以提高模型对同音异形词的健壮性,得到更准确的翻译结果。此外除了在词嵌入层增加扰动,例如,在端到端模型中的编码端输出中引入额外的噪声,能起到与在层输入中增加扰动相类似的效果,增强了模型训练的健壮性\upcite{DBLP:conf/acl/LiLWJXZLL20} \item 除了引入标准的噪声外,还可以根据模型所存在的具体问题,构建不同的扰动。例如,针对输入中包含同音字错误导致的模型输出误差较大的问题,可以将单词的发音转换为一个包含$n$个发音单元的发音序列,如音素,音节等。并训练相应的嵌入矩阵将每一个发音单元转换为对应的向量表示。对发音序列中发音单元的嵌入表示进行平均后,得到当前单词的发音表示。最后将词嵌入与单词的发音表示进行加权求和,并将结果作为模型的输入\upcite{DBLP:conf/acl/LiuMHXH19}。通过这种方式可以提高模型对同音异形词的健壮性,得到更准确的翻译结果。此外除了在词嵌入层增加扰动,例如,在端到端模型中的编码端输出中引入额外的噪声,能起到与在层输入中增加扰动相类似的效果,增强了模型训练的健壮性\upcite{DBLP:conf/acl/LiLWJXZLL20}
\vspace{0.5em} \vspace{0.5em}
\item 此外还可以使用基于梯度的方法来生成对抗样本。例如,可以利用替换词与原始单词词向量之间的差值,以及候选词的梯度之间的相似度来生成对抗样本\upcite{DBLP:conf/acl/ChengJM19},具体的计算方式如下:{\red 下面的是sin还是sim,而且文字中是余弦?下面三角是不是delta} \item 此外还可以使用基于梯度的方法来生成对抗样本。例如,可以利用替换词与原始单词词向量之间的差值,以及候选词的梯度之间的相似度来生成对抗样本\upcite{DBLP:conf/acl/ChengJM19},具体的计算方式如下:
\begin{eqnarray} \begin{eqnarray}
{\mathbi{x}'}_i &=& \arg\max_{\mathbi{x}\in V}\textrm{sim}(\funp{e}(\mathbi{x})-\funp{e}(\mathbi{x}_i),\mathbi{g}_{\mathbi{x}_i}) {\mathbi{x}'}_i &=& \arg\max_{\mathbi{x}\in V}\textrm{sim}(\funp{e}(\mathbi{x})-\funp{e}(\mathbi{x}_i),\mathbi{g}_{\mathbi{x}_i})
\label{eq:13-9} \\ \label{eq:13-9} \\
...@@ -415,7 +432,7 @@ R(\mathbf{w}) & = & (\big| |\mathbf{w}| {\big|}_2)^2 \\ ...@@ -415,7 +432,7 @@ R(\mathbf{w}) & = & (\big| |\mathbf{w}| {\big|}_2)^2 \\
\label{eq:13-10} \label{eq:13-10}
\end{eqnarray} \end{eqnarray}
\noindent 其中,$\mathbi{x}_i$为输入中第$i$个词,$\mathbi{g}_{\mathbi{x}_i}$为对应的梯度向量,$\funp{e}(\cdot)$用于获取词向量,$\textrm{sim}(\cdot,\cdot)$用于评估两个向量之间距离的函数{\red $\bigtriangledown_{\funp{e}(\mathbi{x}_i)}$是什么?}$V$为源语的词表。但是,由于对词表中所有单词进行枚举时,计算成本较大。因此利用语言模型选择最可能的$n$ 个词作为候选,进而缩减匹配范围,并从中采样出源语词进行替换是一种更有效地方式。同时,为了保护模型不受解码器预测误差的影响,此时需要对模型目标端的输入做出同样的调整。与在源语端操作不同的地方时,此时会将公式\eqref{eq:13-10}中的损失替换为$- \log \funp{P}(\mathbi{y}|\mathbi{x}')$。同时,在如何利用语言模型选择候选和采样方面,也做出了相应的调整。在进行对抗性训练时,在原有的训练损失上增加了三个额外的损失,最终的训练目标为: \noindent 其中,$\mathbi{x}_i$为输入中第$i$个词,$\mathbi{g}_{\mathbi{x}_i}$为对应的梯度向量,$\funp{e}(\cdot)$用于获取词向量,$\textrm{sim}(\cdot,\cdot)$是用于评估两个向量之间相似度(距离)的函数,$V$为源语的词表,$\bigtriangledown$表示求梯度操作,因此公式\eqref{eq:13-10}表示求$- \log \funp{P}(\mathbi{y}|\mathbi{x};\theta)$$\funp{e}(\mathbi{x}_i)$的梯度。由于对词表中所有单词进行枚举时,计算成本较大。因此利用语言模型选择最可能的$n$ 个词作为候选,进而缩减匹配范围,并从中采样出源语词进行替换是一种更有效地方式。同时,为了保护模型不受解码器预测误差的影响,此时需要对模型目标端的输入做出同样的调整。与在源语端操作不同的地方时,此时会将公式\eqref{eq:13-10}中的损失替换为$- \log \funp{P}(\mathbi{y}|\mathbi{x}')$。同时,在如何利用语言模型选择候选和采样方面,也做出了相应的调整。在进行对抗性训练时,在原有的训练损失上增加了三个额外的损失,最终的训练目标为:
\begin{eqnarray} \begin{eqnarray}
Loss(\theta_{\textrm{mt}},\theta_{\textrm{lm}}^{\mathbi{x}},\theta_{\textrm{lm}}^{\mathbi{y}}) &=& Loss_{\textrm{clean}}(\theta_{\textrm{mt}}) + Loss_{\textrm{lm}}(\theta_{\textrm{lm}}^{\mathbi{x}}) + \nonumber \\ Loss(\theta_{\textrm{mt}},\theta_{\textrm{lm}}^{\mathbi{x}},\theta_{\textrm{lm}}^{\mathbi{y}}) &=& Loss_{\textrm{clean}}(\theta_{\textrm{mt}}) + Loss_{\textrm{lm}}(\theta_{\textrm{lm}}^{\mathbi{x}}) + \nonumber \\
& & Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) + Loss_{\textrm{lm}}(\theta_{\textrm{lm}}^{\mathbi{y}}) & & Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) + Loss_{\textrm{lm}}(\theta_{\textrm{lm}}^{\mathbi{y}})
...@@ -451,7 +468,7 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\ ...@@ -451,7 +468,7 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
\item 曝光偏置问题:在训练过程中,模型使用标注数据进行训练,因此模型在预测下一个单词时,解码器的输入是正确的译文片段,也就是预测单词$y_j$时,系统使用了标准答案$\{\mathbi{y}_1,...,\mathbi{y}_{j-1}\}$作为历史信息。但是对新的句子进行翻译时,预测第$j$个单词使用的是模型自己生成的前$j-1$个单词,即$\{\hat{\mathbi{y}}_1,...,\hat{\mathbi{y}}_{j-1}\}$。这意味着,训练时使用的输入数据(目标语言端)与真实翻译时的情况不符,而且二者所对应的概率分布可能会存在较大差异,如图\ref{fig:13-21} 所示。由于在训练过程中暴露于标注数据,因此模型可能适应了标注数据,在推断阶段无法很好地适应模型自动生成的数据,这就是曝光偏置问题\upcite{Bengio2015ScheduledSF,Ranzato2016SequenceLT}{\red(转录时,w改为y,并在图中补充:$y_1,y_2,y_3,…, y_V$ 表示目标语言词表里的V 个词){\color{blue} 我上面用的是$\mathbi{y}_j$下面图里用的是$w$,这个没有问题,因为$w$是词典里的词,但是怎么表达这个事情}} \item 曝光偏置问题:在训练过程中,模型使用标注数据进行训练,因此模型在预测下一个单词时,解码器的输入是正确的译文片段,也就是预测单词$y_j$时,系统使用了标准答案$\{\mathbi{y}_1,...,\mathbi{y}_{j-1}\}$作为历史信息。但是对新的句子进行翻译时,预测第$j$个单词使用的是模型自己生成的前$j-1$个单词,即$\{\tilde{\mathbi{y}}_1,...,\tilde{\mathbi{y}}_{j-1}\}$。这意味着,训练时使用的输入数据(目标语言端)与真实翻译时的情况不符,而且二者所对应的概率分布可能会存在较大差异,如图\ref{fig:13-21} 所示。由于在训练过程中暴露于标注数据,因此模型可能适应了标注数据,在推断阶段无法很好地适应模型自动生成的数据,这就是曝光偏置问题\upcite{Bengio2015ScheduledSF,Ranzato2016SequenceLT}{\red(转录时,w改为y,并在图中补充:$y_1,y_2,y_3,…, y_V$ 表示目标语言词表里的V 个词){\color{blue} 我上面用的是$\mathbi{y}_j$下面图里用的是$w$,这个没有问题,因为$w$是词典里的词,但是怎么表达这个事情}}
\vspace{0.5em} \vspace{0.5em}
%---------------------------------------------- %----------------------------------------------
...@@ -483,7 +500,7 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\ ...@@ -483,7 +500,7 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\
\parinterval 对于曝光偏置问题,一般可以使用束搜索等启发式搜索方法来进行缓解。也就是,训练过程可以模拟推断时的行为。但是即使使用束搜索,最终得到的有效序列数量很小,仍然无法完全解决训练和推断行为不一致的问题。 \parinterval 对于曝光偏置问题,一般可以使用束搜索等启发式搜索方法来进行缓解。也就是,训练过程可以模拟推断时的行为。但是即使使用束搜索,最终得到的有效序列数量很小,仍然无法完全解决训练和推断行为不一致的问题。
\parinterval 对于一个目标序列$\seq{y}=\{\mathbi{y}_1,\mathbi{y}_2,\ldots,\mathbi{y}_n\}$,在预测第$j$个单词$\mathbi{y}_j$时,训练过程与推断过程之间的主要区别在于:训练过程中使用标注答案$\{\mathbi{y}_{1},...,\mathbi{y}_{j-1}\}$,而推断过程使用的是来自模型本身的预测结果$\{\hat{\mathbi{y}}_{1},...,\hat{\mathbi{y}}_{j-1}\}$。此时可以采取一种{\small\bfnew{调度采样}}\index{调度采样}(Scheduled Sampling\index{Scheduled Sampling})机制({\color{red} 参考文献!}),在训练中随机决定使用$\mathbi{y}_{j-1}$还是$\hat{\mathbi{y}}_{j-1}$。 假设训练时使用的是基于小批量的随机梯度下降方法,对于第$i$ 个批次中序列每一个位置的预测,以概率$\epsilon_i$使用标准答案或以概率${(1-\epsilon_i)}^2$使用来自模型本身的预测。具体到序列中的每一个位置$j$,可以根据模型预测$\hat{\mathbi{y}}_{t-1}$ 单词的概率进行采样。在得到若干个单词之后,同$\mathbi{y}_{j-1}$一起以$\epsilon_i$控制的调度策略随机送入位置$j$作为输入,此过程如图\ref{fig:13-22}所示。这个过程与束搜索可以很好的融合。 \parinterval 对于一个目标序列$\seq{y}=\{\mathbi{y}_1,\mathbi{y}_2,\ldots,\mathbi{y}_n\}$,在预测第$j$个单词$\mathbi{y}_j$时,训练过程与推断过程之间的主要区别在于:训练过程中使用标准答案$\{\mathbi{y}_{1},...,\mathbi{y}_{j-1}\}$,而推断过程使用的是来自模型本身的预测结果$\{\tilde{\mathbi{y}}_{1},...,\tilde{\mathbi{y}}_{j-1}\}$。此时可以采取一种{\small\bfnew{调度采样}}\index{调度采样}(Scheduled Sampling\index{Scheduled Sampling})机制({\color{red} 参考文献!}),在训练中随机决定使用$\mathbi{y}_{j-1}$还是$\tilde{\mathbi{y}}_{j-1}$。 假设训练时使用的是基于小批量的随机梯度下降方法,在第$i$ 个批次中,对序列每一个位置进行预测时以概率$\epsilon_i$使用标准答案,或以概率${(1-\epsilon_i)}^2$使用来自模型本身的预测。具体到序列中的每一个位置$j$,可以根据模型预测$\tilde{\mathbi{y}}_{t-1}$ 单词的概率进行采样。{\red 在得到若干个单词之后,同$\mathbi{y}_{j-1}$一起以$\epsilon_i$控制的调度策略随机送入位置$j$作为输入,此过程如图\ref{fig:13-22}所示。这个过程与束搜索可以很好的融合。 (再顺一下)}
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -494,7 +511,7 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\ ...@@ -494,7 +511,7 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\
\end{figure} \end{figure}
%---------------------------------------------- %----------------------------------------------
\parinterval$\epsilon_i=1$时,模型的训练与以前完全相同,而当$\epsilon_i=0$时,模型的训练与推断使用的策略完全一样。在这里使用到了一种{\small\bfnew{课程学习}}\index{课程学习}(Curriculum Learning)\index{curriculum learning}策略({\color{red} 参考文献!}),该策略认为应从一种学习策略过渡到另一种学习策略:在训练开始时,由于模型训练不充分,因此如果从模型中随机采样,会导致收敛速度非常慢。因此,在模型训练的前期,通常会选择使用标准答案$\{\mathbi{y}_{1},...,\mathbi{y}_{j-1}\}$。在模型训练的后期,应该更倾向于使用自模型本身的预测$\{\hat{\mathbi{y}}_{1},...,\hat{\mathbi{y}}_{j-1}\}$。关于课程学习的内容在\ref{sec:curriculum-learning}节还会有详细介绍。 \parinterval$\epsilon_i=1$时,模型的训练与原始的训练策略完全相同,而当$\epsilon_i=0$时,模型的训练则与推断时使用的策略完全一样。在这里使用到了一种{\small\bfnew{课程学习}}\index{课程学习}(Curriculum Learning)\index{curriculum learning}策略({\color{red} 参考文献!}),该策略认为应从一种学习策略过渡到另一种学习策略:在训练开始时,由于模型训练不充分,因此如果从模型中随机采样,会导致收敛速度非常慢。因此,在模型训练的前期,通常会选择使用标准答案$\{\mathbi{y}_{1},...,\mathbi{y}_{j-1}\}$。在模型训练的后期,应该更倾向于使用自模型本身的预测$\{\tilde{\mathbi{y}}_{1},...,\tilde{\mathbi{y}}_{j-1}\}$。关于课程学习的内容在\ref{sec:curriculum-learning}节还会有详细介绍。
\parinterval 在使用调度策略时,需要调整关于$i$的函数来降低$\epsilon_i$,与梯度下降方法中降低学习率的方式相似。调度策略可以采用如下几种方式: \parinterval 在使用调度策略时,需要调整关于$i$的函数来降低$\epsilon_i$,与梯度下降方法中降低学习率的方式相似。调度策略可以采用如下几种方式:
...@@ -516,7 +533,7 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\ ...@@ -516,7 +533,7 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\
\parinterval 调度采样解决曝光偏置的方法是:把模型历史预测的结果作为输入,并用于预测下一时刻的输出。但是,如果模型预测的结果中有错误,再使用错误的结果预测未来的序列也会产生问题。这里面的核心问题是,如何知道模型预测的好与坏,进而在训练中有效的使用它们。如果生成好的结果,那么可以使用它进行模型训练,否则就不使用。生成对抗网络就是这样一种技术,它引入了一个额外的模型(判别器)来对原有模型(生成器)的生成结果进行评价,并根据评价结果同时训练两个模型。 \parinterval 调度采样解决曝光偏置的方法是:把模型历史预测的结果作为输入,并用于预测下一时刻的输出。但是,如果模型预测的结果中有错误,再使用错误的结果预测未来的序列也会产生问题。这里面的核心问题是,如何知道模型预测的好与坏,进而在训练中有效的使用它们。如果生成好的结果,那么可以使用它进行模型训练,否则就不使用。生成对抗网络就是这样一种技术,它引入了一个额外的模型(判别器)来对原有模型(生成器)的生成结果进行评价,并根据评价结果同时训练两个模型。
\parinterval\ref{sec:adversarial-examples}已经提到了生成对抗网络,这里进行一些展开。 在机器翻译中,基于对抗神经网络的架构被命名为{\small\bfnew{对抗神经机器翻译}}\index{对抗神经机器翻译}(Adversarial-NMT)\index{Adversarial-NMT}{\color{red} 参考文献!})。其总体框架如图\ref{fig:13-23} 所示,{\red 其中“Ref”是“Reference”的缩写,表示标准答案,而“ Hyp”是“Hypothesis”的缩写,表示模型翻译句子结果(准备直接吧图中英文改为中文,然后把这句话删掉)}。黄色部分表示神经机器翻译模型$G$,该模型将源语言句子$\seq{x}$映射为目标语言句子。红色部分是对抗网络$D$,该网络预测目标语言句子是否是源语言句子$\seq{x}$的真实翻译。$G$$D$相互对抗,同时生成翻译结果$\seq{y}'$来训练$D$,并生成奖励信号来通过策略梯度训练$G$ \parinterval\ref{sec:adversarial-examples}已经提到了生成对抗网络,这里进行一些展开。 在机器翻译中,基于对抗神经网络的架构被命名为{\small\bfnew{对抗神经机器翻译}}\index{对抗神经机器翻译}(Adversarial-NMT)\index{Adversarial-NMT}{\color{red} 参考文献!})。其总体框架如图\ref{fig:13-23} 所示,{\red 其中“Ref”是“Reference”的缩写,表示标准答案,而“ Hyp”是“Hypothesis”的缩写,表示模型翻译句子结果(准备直接吧图中英文改为中文,然后把这句话删掉)}。黄色部分表示神经机器翻译模型$G$,该模型将源语言句子$\seq{x}$映射为目标语言句子。红色部分是对抗网络$D$,该网络预测目标语言句子是否是源语言句子$\seq{x}$的真实翻译。$G$$D$相互对抗,同时生成翻译结果$\tilde{\seq{y}}$来训练$D$,并生成奖励信号来通过策略梯度训练$G$
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -527,7 +544,7 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\ ...@@ -527,7 +544,7 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\
\end{figure} \end{figure}
%---------------------------------------------- %----------------------------------------------
\parinterval 对于训练用双语句对$(\seq{x},\seq{y})=(\{\mathbi{x}_1,\mathbi{x}_2,\ldots,\mathbi{x}_m\},\{\mathbi{y}_1,\mathbi{y}_2,\ldots,\mathbi{y}_n\})$,其中$\mathbi{x}_i$ 是源句子中的第$i$个单词的表示向量,$\mathbi{y}_j$是目标句子中的第$j$个单词的表示向量。令$\seq{y}'$表示神经机器翻译系统对源语言句子$\mathbi{x}$的翻译结果。实际上,对抗神经机器翻译的训练目标就是强制$\seq{y}'$$\seq{y}$ 相似。在理想情况下,$\seq{y}'$与人类标注的答案$\seq{y}$非常相似,以至于人类也无法分辨$\seq{y}'$是由机器还是人类产生的。 \parinterval 对于训练用双语句对$(\seq{x},\seq{y})=(\{\mathbi{x}_1,\mathbi{x}_2,\ldots,\mathbi{x}_m\},\{\mathbi{y}_1,\mathbi{y}_2,\ldots,\mathbi{y}_n\})$,其中$\mathbi{x}_i$ 是源句子中的第$i$个单词的表示向量,$\mathbi{y}_j$是目标句子中的第$j$个单词的表示向量。令$\tilde{\seq{y}}$表示神经机器翻译系统对源语言句子$\seq{x}$的翻译结果。实际上,对抗神经机器翻译的训练目标就是强制$\tilde{\seq{y}}$$\seq{y}$ 相似。在理想情况下,$\tilde{\seq{y}}$与人类标注的答案$\seq{y}$非常相似,以至于人类也无法分辨$\tilde{\seq{y}}$是由机器还是人类产生的。
\parinterval 为了实现这一目标,需要引入一个额外的对抗网络\upcite{DBLP:conf/nips/GoodfellowPMXWOCB14}。在这个框架中,原始的神经机器翻译模型为生成网络,其训练由对抗网络协助。对抗网络的目标是将神经机器翻译模型生成的翻译结果与人的翻译结果区分开,而生成网络的目标是产生高质量的翻译,以欺骗对抗网络。生成网络和对抗网络作为对手,由策略梯度方法来共同训练。为了使得生成网络和对抗网络能够提高彼此性能,可以通过学习人为产生的正例和从神经机器翻译取得的负例来提高对手的辨别力。通过这种方式,神经机器翻译的结果可以尽可能接近真实答案。 \parinterval 为了实现这一目标,需要引入一个额外的对抗网络\upcite{DBLP:conf/nips/GoodfellowPMXWOCB14}。在这个框架中,原始的神经机器翻译模型为生成网络,其训练由对抗网络协助。对抗网络的目标是将神经机器翻译模型生成的翻译结果与人的翻译结果区分开,而生成网络的目标是产生高质量的翻译,以欺骗对抗网络。生成网络和对抗网络作为对手,由策略梯度方法来共同训练。为了使得生成网络和对抗网络能够提高彼此性能,可以通过学习人为产生的正例和从神经机器翻译取得的负例来提高对手的辨别力。通过这种方式,神经机器翻译的结果可以尽可能接近真实答案。
...@@ -551,19 +568,19 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\ ...@@ -551,19 +568,19 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\
\begin{eqnarray} \begin{eqnarray}
\hat{\theta}_{\textrm{MRT}} & = & \arg\max_{\theta}\{\funp{R}(\theta)\} \\ \hat{\theta}_{\textrm{MRT}} & = & \arg\max_{\theta}\{\funp{R}(\theta)\} \\
\funp{R}(\theta) & = & \sum_{k=1}^N \mathbb{E}_{\mathbi{y}_k|\mathbi{x}_k;\theta}[\vartriangle(\mathbi{y}_k,\widetilde{\mathbi{y}})] \nonumber \\ \funp{R}(\theta) & = & \sum_{k=1}^N \mathbb{E}_{\tilde{\seq{y}}|\seq{x}_k;\theta}[\vartriangle(\tilde{\seq{y}},\seq{y}_k)] \nonumber \\
& = & \sum_{k=1}^N \sum_{\mathbi{y}_k \in \chi(\mathbi{x}_k)}\funp{P}(\mathbi{y}_k|\mathbi{x}_k;\theta)\vartriangle(\mathbi{y}_k,\widetilde{\mathbi{y}}) & = & \sum_{k=1}^N \sum_{\tilde{\seq{y}} \in \chi(\seq{x}_k)}\funp{P}(\tilde{\seq{y}}|\seq{x}_k;\theta)\vartriangle(\tilde{\seq{y}},\seq{y}_k)
\label{eq:13-13} \label{eq:13-13}
\end{eqnarray} \end{eqnarray}
\noindent 这里,$\mathbi{y}_i$是模型预测的译文,$\chi(\mathbi{x}_i)$$\mathbi{x}_i$所对应的所有候选翻译的集合,损失函数$\vartriangle(\mathbi{y}_i,{\mathbi{y}})$用来衡量模型预测$\mathbi{y}_i$与标准答案$\widetilde{\mathbi{y}}$间的差异,损失函数一般用翻译质量评价指标定义,例如,BLEU,TER等。在MRT中,对模型参数$\theta$的偏导数公式\eqref{eq:13-14}所示, \noindent 这里,$\tilde{\seq{y}}$是模型预测的译文,$\chi(\seq{x}_k)$$\seq{x}_k$所对应的所有候选翻译的集合,损失函数$\vartriangle(\tilde{\seq{y}},\seq{y}_k)$用来衡量模型预测$\tilde{\seq{y}}$与标准答案$\seq{y}_k$间的差异,损失函数一般用翻译质量评价指标定义,例如,BLEU,TER等。在MRT中,对模型参数$\theta$的偏导数公式\eqref{eq:13-14}所示,
\begin{eqnarray} \begin{eqnarray}
\frac{\partial \funp{R}(\theta)}{\partial \theta} & = & \sum_{k=1}^N \mathbb{E}_{\mathbi{y}_k|\mathbi{x}_k;\theta}[\vartriangle(\mathbi{y}_k,\widetilde{\mathbi{y}}) \times \sum_{j=1}^{|\widetilde{y}_k|}\frac{\partial \funp{P}(\widetilde{\mathbi{y}}_{k,j}|\mathbi{x}_k,\widetilde{\mathbi{y}}_{k,<m};\theta)/\partial \theta}{\funp{P}(\widetilde{\mathbi{y}}_{k,j}|\mathbi{x}_k,\widetilde{\mathbi{y}}_{k,<j};\theta)}] \frac{\partial \funp{R}(\theta)}{\partial \theta} & = & \sum_{k=1}^N \mathbb{E}_{\tilde{\seq{y}}|\seq{x}_k;\theta}[\vartriangle(\tilde{\seq{y}},\seq{y}_k) \times \frac{\partial \funp{P}(\tilde{\seq{y}}|\seq{x}_k;\theta)/\partial \theta}{\funp{P}(\tilde{\seq{y}}|\seq{x}_k;\theta)}]
\label{eq:13-14} \label{eq:13-14}
\end{eqnarray} \end{eqnarray}
\noindent 其中,$\widetilde{\mathbi{y}}_{k,j}$表示第$i$个样本的第$j$个目标语言单词,$\widetilde{\mathbi{y}}_{k,<m}$表示第$i$个样本所有位置小于$m$的目标语言单词。公式\eqref{eq:13-14}使用了{\small\bfnew{策略梯度}}\index{策略梯度}(Policy Gradient\index{Policy Gradient})的手段将$\vartriangle(\mathbi{y}_i,\widetilde{\mathbi{y}})$提到微分操作之外({\color{red} 引用策略梯度的论文!})。这样,就无需对$\vartriangle(\mathbi{y}_i,\widetilde{\mathbi{y}})$进行微分,因此最小风险训练允许任意不可微的损失函数,包括BLEU等常用的评价函数。 \noindent 公式\eqref{eq:13-14}使用了{\small\bfnew{策略梯度}}\index{策略梯度}(Policy Gradient\index{Policy Gradient})的手段将$\vartriangle(\tilde{\seq{y}},\seq{y}_k)$提到微分操作之外({\color{red} 引用策略梯度的论文!})。这样,就无需对$\vartriangle(\tilde{\seq{y}},\seq{y}_k)$进行微分,因此最小风险训练允许任意不可微的损失函数,包括BLEU等常用的评价函数。
\parinterval 相比于最大似然估计,最小风险训练有着以下优点: \parinterval 相比于最大似然估计,最小风险训练有着以下优点:
...@@ -577,7 +594,7 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\ ...@@ -577,7 +594,7 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
\parinterval\ref{fig:13-24}展示了四个模型及所对应的损失函数$\vartriangle(\mathbi{y}_i,{\mathbi{y}})$的值,四个模型顺序为从差到好。假设有三个译文:$\mathbi{y}_1=$“今天 天气 很 好”,$\mathbi{y}_2=$“今天 天气 不错”,$\mathbi{y}_3=$“今天 天 很 晴朗”。显然$\mathbi{y}_1$是最好的候选,$\mathbi{y}_3$是次优的候选,$\mathbi{y}_2$是最差的候选,于是按翻译质量好坏的排序为$\mathbi{y}_1>\mathbi{y}_3>\mathbi{y}_2$。模型1以和标准答案相反的顺序排序所有候选结果,$\mathbi{y}_2>\mathbi{y}_3>\mathbi{y}_1$,因此他得到了最高的风险分数-0.50,模型2相对于第一列的模型得到了一个更好的分数-0.61,模型3得到的分数最高,为-0.71。通过将概率质量集中在$\mathbi{y}_1$上,可以进一步降低风险。通过最大程度地减少风险,可以期望获得一个模型,它的预测与标准答案最一致。 \parinterval\ref{fig:13-24}展示了四个模型及所对应的损失函数$\vartriangle(\tilde{\seq{y}},\seq{y}_k)$的值,四个模型顺序为从差到好。假设在源语言$\seq{x}_k$的候选翻译集合$\chi(\seq{x}_k)$中有三个译文:$\tilde{\seq{y}}_1=$“今天 天气 很 好”,$\tilde{\seq{y}}_2=$“今天 天气 不错”,$\tilde{\seq{y}}_3=$“今天 天 很 晴朗”。显然$\tilde{\seq{y}}_1$是最好的候选,$\tilde{\seq{y}}_3$是次优的候选,$\tilde{\seq{y}}_2$是最差的候选,于是按翻译质量好坏的排序为$\tilde{\seq{y}}_1>\tilde{\seq{y}}_3>\tilde{\seq{y}}_2$。模型1以和标准答案相反的顺序排序所有候选结果,$\tilde{\seq{y}}_2>\tilde{\seq{y}}_3>\tilde{\seq{y}}_1$,因此他得到了最高的风险分数-0.50,模型2相对于第一列的模型得到了一个更好的分数-0.61,模型3得到的分数最高,为-0.71(模型4最高吧?)。{\red 通过将概率质量集中在$\tilde{\seq{y}}_1$上,可以进一步降低风险。通过最大程度地减少风险,可以期望获得一个模型,它的预测与标准答案最一致。(怎样集中?图中和公式中都没体现呀)}
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -594,28 +611,28 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\ ...@@ -594,28 +611,28 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\
\subsubsection{2. 基于演员-评论家的强化学习方法} \subsubsection{2. 基于演员-评论家的强化学习方法}
\parinterval 基于策略的强化学习是要寻找一个策略$\funp{p}(a|\hat{\mathbi{y}}_{1 \ldots j},\mathbi{x})$,使得该策略选择的行动$a$未来可以获得的奖励期望(也被称为动作价值函数)最大化({\color{red} 句子里的专有名词要加黑,加英文})。这个过程通常用函数$Q$来描述: \parinterval 基于策略的强化学习是要寻找一个策略$\funp{p}(a|\hat{\mathbi{y}}_{1 \ldots j},\seq{x})$,使得该策略选择的行动$a$未来可以获得的奖励期望(也被称为动作价值函数)最大化({\color{red} 句子里的专有名词要加黑,加英文})。这个过程通常用函数$Q$来描述:
\begin{eqnarray} \begin{eqnarray}
\funp{Q}(a;\hat{\mathbi{y}}_{1 \ldots j},\widetilde{\mathbi{y}}) & = & \mathbb{E}_{\hat{\mathbi{y}}_{j+1 \ldots J} \sim \funp{p}(a|\hat{\mathbi{y}}_{1 \ldots j} a,\mathbi{x})}[\funp{r}_j(a;\hat{\mathbi{y}}_{1 \ldots j-1},\widetilde{\mathbi{y}}) + \nonumber \\ \funp{Q}(a;\hat{\mathbi{y}}_{1 \ldots j},\seq{y}) & = & \mathbb{E}_{\hat{\mathbi{y}}_{j+1 \ldots J} \sim \funp{p}(a|\hat{\mathbi{y}}_{1 \ldots j} a,\seq{x})}[\funp{r}_j(a;\hat{\mathbi{y}}_{1 \ldots j-1},\seq{y}) + \nonumber \\
& & \sum_{i=j+1}^J\funp{r}_i(\hat{\mathbi{y}}_i;\hat{\mathbi{y}}_{1 \ldots i-1}a\hat{\mathbi{y}}_{j+1 \ldots i},\widetilde{\mathbi{y}})] & & \sum_{i=j+1}^J\funp{r}_i(\hat{\mathbi{y}}_i;\hat{\mathbi{y}}_{1 \ldots i-1}a\hat{\mathbi{y}}_{j+1 \ldots i},\seq{y})]
\label{eq:13-35} \label{eq:13-35}
\end{eqnarray} \end{eqnarray}
\noindent 其中,$\funp{r}_j(\textrm{a};\hat{\mathbi{y}}_{1 \ldots j-1},\widetilde{\mathbi{y}})$$j$时刻做出行动$a$获得的奖励,$\mathbi{x}$是源语言句子,$\widetilde{\mathbi{y}}$是正确译文,$\hat{\mathbi{y}}_{1 \ldots j}$是策略$\funp{p}$产生的译文的前$j$个词,{\red $J$是???}。其(在一个源语句子$x$上的)定义的目标为: \noindent 其中,$\funp{r}_j(a;\hat{\mathbi{y}}_{1 \ldots j-1},\seq{y})$$j$时刻做出行动$a$获得的奖励,$\seq{x}$是源语言句子,$\seq{y}$是正确译文,$\hat{\mathbi{y}}_{1 \ldots j}$是策略$\funp{p}$产生的译文的前$j$个词,{\red $J$是???}。其(在一个源语句子$x$上的)定义的目标为:{\red 这里的$\hat{y}$仍然是模型生成的译文吧,能否用$\tilde{y}$代替$\hat{y}$。在书里面$\hat{y}$都是表示最优解,不换的话,下面公式中的$\hat{p}$$\hat{\mathbi{y}}$可能有冲突?}
\begin{eqnarray} \begin{eqnarray}
\hat{p} & = & \max_{\funp{p}}\mathbb{E}_{\hat{\mathbi{y}} \sim \funp{p}(\hat{\mathbi{y}} | \mathbi{x})}\sum_{j=1}^J\sum_{a \in A}\funp{p}(a|\hat{\mathbi{y}}_{1 \ldots j},\mathbi{x})\funp{Q}(a;\hat{\mathbi{y}}_{1 \ldots j},\widetilde{\mathbi{y}}) \hat{p} & = & \max_{\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{\mathbi{y}}_{1 \ldots j},\seq{x})\funp{Q}(a;\hat{\mathbi{y}}_{1 \ldots j},\seq{y})
\label{eq:13-15} \label{eq:13-15}
\end{eqnarray} \end{eqnarray}
\noindent 其中,$A$表示所有可能的行动组成的空间,也就是词表$V$。公式\eqref{eq:13-15}的含义是,计算动作价值函数$\funp{Q}$需要枚举$j$时刻以后所有可能的序列,而可能的序列数目是随着其长度呈指数级增长,因此只能估计$\funp{Q}$。基于策略的强化学习方法,如最小风险训练(风险$\vartriangle=-\funp{Q}$)等都使用了采样的方法来估计$\funp{Q}$。尽管采样估计的结果是$\funp{Q}$的无偏估计,但是它的缺点在于估计的方差比较大。而$\funp{Q}$直接关系到梯度更新的大小,不稳定的数值会导致模型更新不稳定,难以优化。 \noindent 其中,$A$表示所有可能的行动组成的空间,也就是词表$V$。公式\eqref{eq:13-15}的含义是,计算动作价值函数$\funp{Q}$需要枚举$j$时刻以后所有可能的序列,而可能的序列数目是随着其长度呈指数级增长,因此只能估计的方法计算$\funp{Q}$的值。基于策略的强化学习方法,如最小风险训练(风险$\vartriangle=-\funp{Q}$)等都使用了采样的方法来估计$\funp{Q}$。尽管采样估计的结果是$\funp{Q}$的无偏估计,但是它的缺点在于估计的方差比较大。而$\funp{Q}$直接关系到梯度更新的大小,不稳定的数值会导致模型更新不稳定,难以优化。
\parinterval 为了避免采样的开销和随机性带来的不稳定,基于{\small\bfnew{演员-评论家}}\index{演员-评论家}(Actor-critic\index{Actor-critic})的强化学习方法\upcite{DBLP:conf/iclr/BahdanauBXGLPCB17}引入一个可学习的函数$\hat{\funp{Q}}$,通过函数$\hat{\funp{Q}}$来逼近动作价值函数$\funp{Q}$。但是由于$\hat{\funp{Q}}$是人工设计的一个函数,该函数有着自身的偏置,因此$\hat{\funp{Q}}$不是$\funp{Q}$的一个无偏估计,所以使用$\hat{\funp{Q}}$来指导$\funp{p}$的优化无法到达理论上的最优解。尽管如此,得益于神经网络强大的拟合能力,基于演员-评论家的强化学习方法仍更具优势。 \parinterval 为了避免采样的开销和随机性带来的不稳定,基于{\small\bfnew{演员-评论家}}\index{演员-评论家}(Actor-critic\index{Actor-critic})的强化学习方法\upcite{DBLP:conf/iclr/BahdanauBXGLPCB17}引入一个可学习的函数$\hat{\funp{Q}}$,通过函数$\hat{\funp{Q}}$来逼近动作价值函数$\funp{Q}$。但是由于$\hat{\funp{Q}}$是人工设计的一个函数,该函数有着自身的偏置,因此$\hat{\funp{Q}}$不是$\funp{Q}$的一个无偏估计,所以使用$\hat{\funp{Q}}$来指导$\funp{p}$的优化无法到达理论上的最优解。尽管如此,得益于神经网络强大的拟合能力,基于演员-评论家的强化学习方法仍更具优势。
\parinterval 对于基于演员-评论家的强化学习方法,演员就是策略$\funp{p}$,而评论家就是动作价值函数$\funp{Q}$的估计$\hat{\funp{Q}}$。对于演员,它的目标函数如下: \parinterval 对于基于演员-评论家的强化学习方法,演员就是策略$\funp{p}$,而评论家就是动作价值函数$\funp{Q}$的估计$\hat{\funp{Q}}$。对于演员,它的目标函数如下:
\begin{eqnarray} \begin{eqnarray}
\hat{p} & = & \max_{\funp{p}}\mathbb{E}_{\hat{\mathbi{y}} \sim \funp{p}(\hat{\mathbi{y}} | \mathbi{x})}\sum_{j=1}^J\sum_{a \in A}\funp{p}(a|\hat{\mathbi{y}}_{1 \ldots j},\mathbi{x})\hat{\funp{Q}}(a;\hat{\mathbi{y}}_{1 \ldots j},\widetilde{\mathbi{y}}) \hat{p} & = & \max_{\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{\mathbi{y}}_{1 \ldots j},\seq{x})\hat{\funp{Q}}(a;\hat{\mathbi{y}}_{1 \ldots j},\seq{y})
\label{eq:13-16} \label{eq:13-16}
\end{eqnarray} \end{eqnarray}
...@@ -623,24 +640,24 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\ ...@@ -623,24 +640,24 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\
\parinterval 而对于评论家,它的优化目标并不是那么显而易见。尽管可以通过采样得方式来估计$\funp{Q}$,然后使用该估计作为目标让$\hat{\funp{Q}}$进行拟合,但是这样会导致非常高的(采样)代价,同时可以想象,既然有了一个无偏估计,为什么还要用有偏估计$\hat{\funp{Q}}$呢? \parinterval 而对于评论家,它的优化目标并不是那么显而易见。尽管可以通过采样得方式来估计$\funp{Q}$,然后使用该估计作为目标让$\hat{\funp{Q}}$进行拟合,但是这样会导致非常高的(采样)代价,同时可以想象,既然有了一个无偏估计,为什么还要用有偏估计$\hat{\funp{Q}}$呢?
\parinterval 回顾动作价值函数的定义,可以对它做适当的展开,可以得到如下等式: \parinterval 回顾动作价值函数的定义,可以对它做适当的展开,可以得到如下等式:{\red 原版word中小写y是一个字,应该有下标的呀,这个没下标,指的是什么?}
\begin{eqnarray} \begin{eqnarray}
\funp{Q}(\hat{\mathbi{y}};\hat{\mathbi{y}}_{1 \ldots j -1},\widetilde{\mathbi{y}}) & = & \funp{r}_j(\hat{\mathbi{y}}_j;\hat{\mathbi{y}}_{1 \ldots j-1},\widetilde{\mathbi{y}}) + \nonumber \\ \funp{Q}({\red \hat{\mathbi{y}}};\hat{\mathbi{y}}_{1 \ldots j -1},\seq{y}) & = & \funp{r}_j(\hat{\mathbi{y}}_j;\hat{\mathbi{y}}_{1 \ldots j-1},\seq{y}) + \nonumber \\
& & \sum_{a \in A}\funp{p}(a|\hat{\mathbi{y}}_{1 \ldots j},\mathbi{x})\funp{Q}(a;\hat{\mathbi{y}}_{1 \ldots j},\widetilde{\mathbi{y}}) & & \sum_{a \in A}\funp{p}(a|\hat{\mathbi{y}}_{1 \ldots j},\seq{x})\funp{Q}(a;\hat{\mathbi{y}}_{1 \ldots j},\seq{y})
\label{eq:13-17} \label{eq:13-17}
\end{eqnarray} \end{eqnarray}
\parinterval 这个等式也被称为{\small\bfnew{贝尔曼方程}}\index{贝尔曼方程}(Bellman Equation\index{Bellman Equation}\upcite{sutton2018reinforcement}。这个等式告诉我们$j-1$时刻的动作价值函数$\funp{Q}(\hat{\mathbi{y}};\hat{\mathbi{y}}_{1 \ldots j-1},\widetilde{\mathbi{y}})$跟下一时刻$j$的动作价值函数$\funp{Q}(\textrm{a};\hat{\mathbi{y}}_{1 \ldots j},\widetilde{\mathbi{y}})$ 之间的关系。因此可以很自然的使用等式右部作为等式左部$\funp{Q}(\hat{\mathbi{y}};\hat{\mathbi{y}}_{1 \ldots j-1},\widetilde{\mathbi{y}})$的目标。而由于动作价值函数的输出是数值,通常会选用均方误差来计算目标函数值({\color{red} 为啥输出是数值,就要用局方误差来计算目标函数?})。 \parinterval 这个等式也被称为{\small\bfnew{贝尔曼方程}}\index{贝尔曼方程}(Bellman Equation\index{Bellman Equation}\upcite{sutton2018reinforcement}。这个等式告诉我们$j-1$时刻的动作价值函数$\funp{Q}({\red \hat{\mathbi{y}}};\hat{\mathbi{y}}_{1 \ldots j-1},\seq{y})$跟下一时刻$j$的动作价值函数$\funp{Q}(a;\hat{\mathbi{y}}_{1 \ldots j},\seq{y})$之间的关系。因此可以很自然的使用等式右部作为等式左部$\funp{Q}({\red \hat{\mathbi{y}}};\hat{\mathbi{y}}_{1 \ldots j-1},\seq{y})$的目标。而由于动作价值函数的输出是数值,通常会选用均方误差来计算目标函数值({\color{red} 为啥输出是数值,就要用局方误差来计算目标函数?})。
\parinterval 进一步,可以定义$j$时刻动作价值函数的目标如下:{\red (下面开始用q?)} \parinterval 进一步,可以定义$j$时刻动作价值函数的目标如下:
\begin{eqnarray} \begin{eqnarray}
\funp{q}_j & = & \funp{r}_j(\hat{\mathbi{y}}_j;\hat{\mathbi{y}}_{1 \ldots j-1},\widetilde{\mathbi{y}}) + \sum_{a \in A}\funp{p}(a|\hat{\mathbi{y}}_{1 \ldots j},\mathbi{x})\hat{\funp{Q}}(a;\hat{\mathbi{y}}_{1 \ldots j},\widetilde{\mathbi{y}}) \funp{q}_j & = & \funp{r}_j(\hat{\mathbi{y}}_j;\hat{\mathbi{y}}_{1 \ldots j-1},\seq{y}) + \sum_{a \in A}\funp{p}(a|\hat{\mathbi{y}}_{1 \ldots j},\seq{x})\hat{\funp{Q}}(a;\hat{\mathbi{y}}_{1 \ldots j},\seq{y})
\label{eq:13-18} \label{eq:13-18}
\end{eqnarray} \end{eqnarray}
\parinterval 而评论家对应的目标函数定义如下: \parinterval 而评论家对应的目标函数定义如下:
\begin{eqnarray} \begin{eqnarray}
\hat{\hat{\funp{Q}}} & = & \min_{\hat{\funp{Q}}}\sum_{j=1}^J{(\hat{\funp{Q}}(\hat{\mathbi{y}};\hat{\mathbi{y}}_{1 \ldots j-1},\widetilde{\mathbi{y}}) - \funp{q}_j)}^2 \hat{\hat{\funp{Q}}} & = & \min_{\hat{\funp{Q}}}\sum_{j=1}^J{(\hat{\funp{Q}}(\hat{\mathbi{y}}_j;\hat{\mathbi{y}}_{1 \ldots j-1},\seq{y}) - \funp{q}_j)}^2
\label{eq:13-19} \label{eq:13-19}
\end{eqnarray} \end{eqnarray}
...@@ -663,7 +680,7 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\ ...@@ -663,7 +680,7 @@ Loss_{\textrm{robust}}(\theta_{\textrm{mt}}) &=& \frac{1}{N}\sum_{(\mathbi{x},\
\vspace{0.5em} \vspace{0.5em}
\item 优化目标:评论家的优化目标是由自身输出所构造。当模型更新比较快的时候模型的输出变化也会很快,导致构造的优化目标不稳定,影响模型收敛。一个解决方案是在一定更新次数内固定构造优化目标使用的模型,然后再使用比较新的模型来构造后续一定更新次数内的优化目标,如此往复\upcite{DBLP:journals/nature/SilverHMGSDSAPL16} \item 优化目标:评论家的优化目标是由自身输出所构造。当模型更新比较快的时候模型的输出变化也会很快,导致构造的优化目标不稳定,影响模型收敛。一个解决方案是在一定更新次数内固定构造优化目标使用的模型,然后再使用比较新的模型来构造后续一定更新次数内的优化目标,如此往复\upcite{DBLP:journals/nature/SilverHMGSDSAPL16}
\vspace{0.5em} \vspace{0.5em}
\item 方差惩罚:在机器翻译中使用强化学习方法一个问题是动作空间过大,这是由词表过大造成的。因为模型只根据被采样到的结果来进行更新,很多动作很难得到更新,因此对不同动作的动作价值函数估计值会有很大差异。通常会引入一个正则项$C_j = \sum_{a \in A}{(\hat{\funp{Q}}(a;\hat{\mathbi{y}}_{1 \ldots j},\widetilde{\mathbi{y}}) - \frac{1}{|A|} \sum_{b \in A}\hat{\funp{Q}}(b;\hat{\mathbi{y}}_{1 \ldots j},\widetilde{\mathbi{y}}))}^2$来约束不同动作的动作函数估计值,使其不会偏离他们的均值太远\upcite{DBLP:conf/icml/ZarembaMJF16} \item 方差惩罚:在机器翻译中使用强化学习方法一个问题是动作空间过大,这是由词表过大造成的。因为模型只根据被采样到的结果来进行更新,很多动作很难得到更新,因此对不同动作的动作价值函数估计值会有很大差异。通常会引入一个正则项$C_j = \sum_{a \in A}{(\hat{\funp{Q}}(a;\hat{\mathbi{y}}_{1 \ldots j-1},\seq{y}) - \frac{1}{|A|} \sum_{b \in A}\hat{\funp{Q}}(b;\hat{\mathbi{y}}_{1 \ldots j-1},\seq{y}))}^2$来约束不同动作的动作函数估计值,使其不会偏离他们的均值太远\upcite{DBLP:conf/icml/ZarembaMJF16}
\vspace{0.5em} \vspace{0.5em}
\item 函数塑形:在机器翻译里面使用强化学习方法另一个问题就是奖励的稀疏性。评价指标如BLEU等只能对完整的句子进行打分,也就是奖励只有在句子结尾有值,而在句子中间只能为0。这种情况意味着模型在生成句子的过程中没有任何信号来指导它的行为,从而大大增加了学习难度。常见的解决方案是进行{\small\bfnew{函数塑形}}\index{函数塑形}(Reward Shaping\index{Reward Shaping}),使得奖励在生成句子的过程中变得稠密,同时也不会改变模型的最优解\upcite{DBLP:conf/icml/NgHR99} \item 函数塑形:在机器翻译里面使用强化学习方法另一个问题就是奖励的稀疏性。评价指标如BLEU等只能对完整的句子进行打分,也就是奖励只有在句子结尾有值,而在句子中间只能为0。这种情况意味着模型在生成句子的过程中没有任何信号来指导它的行为,从而大大增加了学习难度。常见的解决方案是进行{\small\bfnew{函数塑形}}\index{函数塑形}(Reward Shaping\index{Reward Shaping}),使得奖励在生成句子的过程中变得稠密,同时也不会改变模型的最优解\upcite{DBLP:conf/icml/NgHR99}
\vspace{0.5em} \vspace{0.5em}
...@@ -846,11 +863,11 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\mathbf{y}} | \mathbf{x}) ...@@ -846,11 +863,11 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\mathbf{y}} | \mathbf{x})
\subsubsection{2. 数据降噪} \subsubsection{2. 数据降噪}
\parinterval 除了领域差异,训练数据中也存在噪声,比如,机器翻译所使用的数据中经常出现句子未对齐、多种语言单词混合、单词丢失等问题。相关研究表明神经机器翻译对于噪声数据很敏感,当噪声过多时就会带来模型性能的显著下降\upcite{DBLP:conf/aclnmt/KhayrallahK18},因此无论是从模型健壮性还是训练效率出发,数据降噪都是很有意义的。事实上,数据降噪从统计机器翻译时代就已经开展了许多工作\upcite{DBLP:conf/coling/FormigaF12,DBLP:conf/acl/CuiZLLZ13,DBLP:phd/dnb/Mediani17},因此很多方法也可以应用到神经机器翻译中来。 \parinterval 除了领域差异,训练数据中也存在噪声,比如,机器翻译所使用的数据中经常出现句子未对齐、多种语言文字混合、单词丢失等问题。相关研究表明神经机器翻译对于噪声数据很敏感\upcite{DBLP:conf/aclnmt/KhayrallahK18},因此无论是从模型健壮性还是训练效率出发,数据降噪都是很有意义的。事实上,在统计机器翻译时代,就有很多数据降噪方面的研究工作\upcite{DBLP:conf/coling/FormigaF12,DBLP:conf/acl/CuiZLLZ13,DBLP:phd/dnb/Mediani17},因此许多方法也可以应用到神经机器翻译中来。
\parinterval 含有噪声的数据通常都具有较为明显的特征,因此可以用诸如句子长度比、词对齐率、最长连续未对齐序列长度等一些特征来对句子进行综合评分\upcite{rarrick2011mt,taghipour2011parallel,Xu2017ZipporahAF};也可以将该问题转化为分类任务来对句子进行筛选\upcite{DBLP:conf/aclnmt/CarpuatVN17,DBLP:conf/naacl/VyasNC18};此外,从某种意义上来说,数据降噪其实也可以算是一种领域数据选择,因为它的目标是选择可信度高的样本,因此也可以人工构建一个可信度高的小数据集,然后利用该数据集和通用数据集之间的差异性进行选择\upcite{DBLP:conf/wmt/WangWHNC18} \parinterval 含有噪声的数据通常都具有较为明显的特征,因此可以用诸如句子长度比、词对齐率、最长连续未对齐序列长度等一些特征来对句子进行综合评分\upcite{rarrick2011mt,taghipour2011parallel,Xu2017ZipporahAF};也可以将该问题转化为分类任务来对句子进行筛选\upcite{DBLP:conf/aclnmt/CarpuatVN17,DBLP:conf/naacl/VyasNC18};此外,从某种意义上来说,数据降噪其实也可以算是一种领域数据选择,因为它的目标是选择可信度高的样本,因此也可以人工构建一个可信度高的小数据集,然后利用该数据集和通用数据集之间的差异性进行选择\upcite{DBLP:conf/wmt/WangWHNC18}
\parinterval 早期的工作大多在关注过滤噪声数据的方法,对于噪声数据中模型的健壮性训练和噪声样本的利用探讨较少。事实上,噪声是有强度的,有些噪声数据对于模型可能是有价值的,而且它们的价值可能会随着模型的状态而改变\upcite{DBLP:conf/wmt/WangWHNC18}。一个例子如图\ref{fig:13-51}所示{\red (画图的时候zh-gloss那行不要了,zh翻译为汉语,引用:Denoising Neural Machine Translation Training with Trusted Data and Online Data Selection})。 \parinterval 早期的工作大多在关注过滤噪声样本,但对如何利用噪声样本探讨较少。事实上,噪声是有强度的,有些噪声样本对于模型可能是有价值的,而且它们的价值可能会随着模型的状态而改变\upcite{DBLP:conf/wmt/WangWHNC18}。一个例子如图\ref{fig:13-51}所示{\red (画图的时候zh-gloss那行不要了,zh翻译为汉语,引用:Denoising Neural Machine Translation Training with Trusted Data and Online Data Selection})。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -861,7 +878,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\mathbf{y}} | \mathbf{x}) ...@@ -861,7 +878,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\mathbf{y}} | \mathbf{x})
\end{figure} \end{figure}
%------------------------------------------- %-------------------------------------------
\parinterval 一方面来说,虽然图中这两个句子都很流畅,但是由于汉语句子中缺少了一部分翻译,因此简单的基于长度或双语词典的方法可以很容易将其过滤掉。从另一方面来说,这个训练样本对于训练机器翻译模型仍然有用,特别是在数据稀缺的情况下,因为汉语句子和英语句子的前半部分仍然是正确的互译结果。这表明了噪声数据的微妙之处,它不是一个简单的二元分类问题:一些训练样本可能部分有用,而它们的有用性也可能随着训练的进展而改变。因此简单的过滤并不一种很好的办法,一种合理的学习策略应该是既可以合理的利用这些数据,又不让其对模型产生负面影响。直觉上,这是一个动态的过程,当模型能力较弱时(比如在训练初期),这些数据就能对模型起到正面作用,反之亦然。受课程学习、微调等方法的启发,研究人员也提出了类似的学习策略,它的主要思想是:在训练过程中对批量数据的噪声水平进{\small\bfnew{退火}}\index{退火}(Anneal)\index{Anneal},使得模型在越来越干净的数据上进行训练\upcite{DBLP:conf/wmt/WangWHNC18,DBLP:conf/acl/WangCC19}。从宏观上看,整个训练过程其实是一个持续微调的过程,这和微调的思想基本一致。这种学习策略一方面充分利用了训练数据,一方面又避免了噪声数据对模型的负面影响,因此取得了不错的效果。 \parinterval 一方面来说,虽然图\ref{fig:13-51}中这两个句子都很流畅,但是由于汉语句子中缺少了一部分翻译,因此简单的基于长度或双语词典的方法可以很容易将其过滤掉。从另一方面来说,这个样本对于训练机器翻译模型仍然有用,特别是在数据稀缺的情况下,因为汉语句子和英语句子的前半部分仍然是正确的互译结果。这表明了噪声数据的微妙之处,它不是对应着简单的二元分类问题:一些训练样本可能部分有用,而它们的价值也可能随着训练的进展而改变。因此简单的过滤并不一种很好的办法,一种更加理想的学习策略应该是既可以合理的利用这些数据,又不让其对模型产生负面影响。直觉上,这是一个动态的过程,当模型能力较弱时(比如在训练初期),这些数据就能对模型起到正面作用,反之亦然。受课程学习、微调等方法的启发,研究人员也提出了类似的学习策略,它的主要思想是:在训练过程中对批量数据的噪声水平进行{\small\bfnew{退火}}\index{退火}(Anneal)\index{Anneal},使得模型在越来越干净的数据上进行训练\upcite{DBLP:conf/wmt/WangWHNC18,DBLP:conf/acl/WangCC19}。从宏观上看,整个训练过程其实是一个持续微调的过程,这和微调的思想基本一致。这种学习策略一方面充分利用了训练数据,一方面又避免了噪声数据对模型的负面影响,因此取得了不错的效果。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION % NEW SUBSUB-SECTION
...@@ -869,11 +886,11 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\mathbf{y}} | \mathbf{x}) ...@@ -869,11 +886,11 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\mathbf{y}} | \mathbf{x})
\subsubsection{3. 主动学习} \subsubsection{3. 主动学习}
\parinterval {\small\bfnew{主动学习}}\index{主动学习}(Active Learning\index{Active Learning})也是一种数据选择策略。它最初的应用场景式是:标注大量的数据成本过高,因此希望优先标注对模型最有价值的数据,这样可以最大化模型学习的效率,同时整体降低标注的代价\upcite{DBLP:conf/coling/ZhuWH08}。主动学习主要由五个部分组成,包括:未标注样本池、筛选策略、标注者、标注样本集、目标模型。在主动学习过程中,会根据当前的模型状态找到未标注样本池中最优价值的样本,之后送给标注者。标注结束后,会把标注的样本加入到标注样本集中,之后用这些标注的样本更新模型。之后,重复这个过程,直到到达某种收敛状态。 \parinterval {\small\bfnew{主动学习}}\index{主动学习}(Active Learning\index{Active Learning})也是一种数据选择策略。它最初的应用场景式是:标注大量的数据成本过高,因此希望优先标注对模型最有价值的数据,这样可以最大化模型学习的效率,同时降低标注的整体代价\upcite{DBLP:conf/coling/ZhuWH08}。主动学习主要由五个部分组成,包括:未标注样本池、筛选策略、标注者、标注样本集、目标模型。在主动学习过程中,会根据当前的模型状态找到未标注样本池中最有价值的样本,之后送给标注者。标注结束后,会把标注的样本加入到标注样本集中,之后用这些标注的样本更新模型。之后,重复这个过程,直到到达某种收敛状态。
\parinterval 主动学习的一个核心问题是:如何选择出那些最有价值的未标注样本?通常会假设模型认为最“难”的样本是最有价值的。具体实现有很多思路,例如,基于置信度的方法、基于分类错误的方法等等\upcite{DBLP:journals/tslp/ZhuM12,DBLP:conf/coling/ZhuWYT08} \parinterval 主动学习的一个核心问题是:如何选择出那些最有价值的未标注样本?通常会假设模型认为最“难”的样本是最有价值的。具体实现有很多思路,例如,基于置信度的方法、基于分类错误的方法等等\upcite{DBLP:journals/tslp/ZhuM12,DBLP:conf/coling/ZhuWYT08}
\parinterval 在机器翻译中,主动学习可以被用于低资源翻译,以减少人工标注的成本\upcite{DBLP:conf/conll/LiuBH18,DBLP:conf/emnlp/ZhaoZZZ20}。也可以被用于交互式翻译,让模型持续从外界反馈中受益\upcite{Peris2018ActiveLF,DBLP:journals/pbml/TurchiNFF17,DBLP:journals/csl/PerisC19}。不过,总的来说,主动学习在机器翻译中应用不算广泛。这是由于,机器翻译任务较为复杂,设计样本价值的评价函数较为困难。而且,在很多场景中,并不是要简单的选择样本,而是希望训练装置能够考虑样本的价值,以充分发挥所有数据的优势。这也正是即将介绍的课程学习等方法要解决的问题。 \parinterval 在机器翻译中,主动学习可以被用于低资源翻译,以减少人工标注的成本\upcite{DBLP:conf/conll/LiuBH18,DBLP:conf/emnlp/ZhaoZZZ20}。也可以被用于交互式翻译,让模型持续从外界反馈中受益\upcite{Peris2018ActiveLF,DBLP:journals/pbml/TurchiNFF17,DBLP:journals/csl/PerisC19}。不过,总的来说,主动学习在机器翻译中应用不算广泛。这是由于,机器翻译任务复杂,设计样本价值的评价函数较为困难。而且,在很多场景中,并不是要简单的选择样本,而是希望训练装置能够考虑样本的价值,以充分发挥所有数据的优势。这也正是即将介绍的课程学习等方法要解决的问题。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SECTION % NEW SUB-SECTION
...@@ -882,17 +899,17 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\mathbf{y}} | \mathbf{x}) ...@@ -882,17 +899,17 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\mathbf{y}} | \mathbf{x})
\subsection{课程学习} \subsection{课程学习}
\label{sec:curriculum-learning} \label{sec:curriculum-learning}
\parinterval 课程学习(Curriculum Learning)的基本思想是:先学习简单的、普适性的知识,然后逐渐增加难度,学习更复杂、更专业化的知识。在统计模型训练中,这体现在让模型按照由“易”到”难“ 的顺序对样本进行学习\upcite{DBLP:conf/icml/BengioLCW09},这本质上是一种样本使用策略。以神经机器翻译翻译使用的随机梯度下降为例,在传统的方法中,所有训练样本都是随机呈现给模型的,换句话说,就是让模型来平等地对待所有的训练样本,这忽略了数据样本的各种复杂性和当前模型的学习状态。所以模拟人类由易到难的学习过程就是一种很自然的想法,这样做的好处在于: \parinterval 课程学习(Curriculum Learning)的基本思想是:先学习简单的、普适性的知识,然后逐渐增加难度,学习更复杂、更专业化的知识。在统计模型训练中,这种思想可以体现在让模型按照由“易”到”难“ 的顺序对样本进行学习\upcite{DBLP:conf/icml/BengioLCW09},这本质上是一种样本使用策略。以神经机器翻译翻译使用的随机梯度下降为例,在传统的方法中,所有训练样本都是随机呈现给模型的,换句话说,就是让模型平等地对待所有的训练样本,这忽略了数据样本的各种复杂性和当前模型的学习状态。所以模拟人类由易到难的学习过程就是一种很自然的想法,这样做的好处在于:
\begin{itemize} \begin{itemize}
\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}
\parinterval 课程学习是符合直觉的,可以想象,对于一个数学零基础的人来说,如果一开始就同时学习加减乘除和高等数学,效率自然是比较低下的。而如果按照正常的学习顺序,比如先学习加减乘除,然后学习各种函数,最后再学习高等数学,有了前面的基础,再学习后面的知识,效率就可以更高。事实上,课程学习自从一被提出就受到了研究人员的极大关注,除了想法本身有趣之外,还因为它作为一种和模型无关的训练策略,具有即插即用的特点。神经机器翻译就是自然语言处理中一个很契合课程学习的任务,这是因为神经机器翻译往往需要大规模的平行语料来训练模型,训练成本很高,所以使用课程学习来加快收敛是一个很自然的想法。 \parinterval 课程学习是符合直觉的,可以想象,对于一个数学零基础的人来说,如果一开始就同时学习加减乘除和高等数学,效率自然是比较低下的。而如果按照正常的学习顺序,比如先学习加减乘除,然后学习各种函数,最后再学习高等数学,有了前面的基础,再学习后面的知识,效率就可以更高。事实上,课程学习自从被提出就受到了研究人员的极大关注,除了想法本身有趣之外,还因为它作为一种和模型无关的训练策略,具有即插即用的特点。神经机器翻译就一种很契合课程学习的任务,这是因为神经机器翻译往往需要大规模的平行语料来训练模型,训练成本很高,所以使用课程学习来加快收敛是一个很自然的想法。
\parinterval 那么如何设计课程学习方法呢?有两个核心问题: \parinterval 那么如何设计课程学习方法呢?有两个核心问题:
...@@ -900,7 +917,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\mathbf{y}} | \mathbf{x}) ...@@ -900,7 +917,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\mathbf{y}} | \mathbf{x})
\vspace{0.5em} \vspace{0.5em}
\item 如何评估每个样本的难度?即设计评估样本学习难易度的准则,简称{\small\bfnew{难度评估准则}}\index{难度评估准则}(Difficulty Criteria\index{Difficulty Criteria} \item 如何评估每个样本的难度?即设计评估样本学习难易度的准则,简称{\small\bfnew{难度评估准则}}\index{难度评估准则}(Difficulty Criteria\index{Difficulty Criteria}
\vspace{0.5em} \vspace{0.5em}
\item 以何种策略来规划训练数据?即何时为训练提供更复杂的数据,以及提供多少数据等,称为{\small\bfnew{课程规划}}\index{课程规划}(Curriculum Schedule\index{Curriculum Schedule} \item 以何种策略来规划训练数据?即何时为训练提供更复杂的样本,以及提供多少样本等,称为{\small\bfnew{课程规划}}\index{课程规划}(Curriculum Schedule\index{Curriculum Schedule}
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
...@@ -915,15 +932,15 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\mathbf{y}} | \mathbf{x}) ...@@ -915,15 +932,15 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\mathbf{y}} | \mathbf{x})
\end{figure} \end{figure}
%------------------------------------------- %-------------------------------------------
\parinterval 评估样本的难度和具体的任务相关,在神经机器翻译中,有很多种评估方法,可以利用语言学上的困难准则,比如句子长度、句子平均词频、句法树深度等\upcite{DBLP:conf/naacl/PlataniosSNPM19,DBLP:conf/ranlp/KocmiB17}。这些准则本质上属于人类的先验知识,符合人类的直觉,但不一定和模型相匹配,对人类来说简单的句子对模型来说并不总是容易的,所以研究学者们也提出了基于模型的方法,比如:语言模型\upcite{DBLP:conf/acl/WangCC19,DBLP:conf/naacl/ZhangSKMCD19},或者神经机器翻译模型\upcite{zhang2018empirical,DBLP:conf/coling/XuHJFWHJXZ20}都可以用于评价样本的难度。值得注意的是,利用神经机器翻译来打分的方法分为静态和动态两种,静态的方法是利用在小数据集上训练的、更小的翻译模型模型来打分\upcite{zhang2018empirical}动态的方法则是利用当前模型的状态来打分,这在广义上也叫作{\small\bfnew{自步学习}}\index{自步学习}(Self-Paced Learning\index{Self-Paced Learning}),通常可以利用模型的训练误差或变化率等指标进行样本难度的估计\upcite{DBLP:conf/coling/XuHJFWHJXZ20} \parinterval 评估样本的难度和具体的任务相关,在神经机器翻译中,有很多种评估方法,可以利用语言学上的困难准则,比如句子长度、句子平均词频、句法树深度等\upcite{DBLP:conf/naacl/PlataniosSNPM19,DBLP:conf/ranlp/KocmiB17}。这些准则本质上属于人类的先验知识,符合人类的直觉,但不一定和模型相匹配。对人类来说简单的句子对模型来说可能并不简单,所以研究学者们也提出了基于模型的方法,比如:语言模型\upcite{DBLP:conf/acl/WangCC19,DBLP:conf/naacl/ZhangSKMCD19},或者神经机器翻译模型\upcite{zhang2018empirical,DBLP:conf/coling/XuHJFWHJXZ20}都可以用于评价样本的难度。值得注意的是,利用神经机器翻译来打分的方法分为静态和动态两种。静态的方法是利用在小数据集上训练的、更小的翻译模型模型来打分\upcite{zhang2018empirical}动态的方法则是利用当前模型的状态来打分,这在广义上也叫作{\small\bfnew{自步学习}}\index{自步学习}(Self-Paced Learning\index{Self-Paced Learning}),通常可以利用模型的训练误差或变化率等指标进行样本难度的估计\upcite{DBLP:conf/coling/XuHJFWHJXZ20}
\parinterval 虽然样本难度的度量在不同的数据类型和任务中有所不同,但课程规划通常与数据和任务无关。在各种场景中,大多数课程学习都利用了类似的调度策略。具体而言,调度策略可以分为预定义的和自动的两种。预定义的调度策略通常是将按照难易程度排序好的样本划分为块,每个块中包含一定数量的难度相似的样本。然后按照“先易后难”的原则人工定义一个调度策略,比如,一种较为流行的方法是:在训练早期,模型只在简单块中进行采样,随着训练过程的进行,比如在固定数量的训练轮次之后,将下一个块的样本合并到当前训练子集中,继续训练,直到合并了整个数据块,即整个训练集可见为止,之后再继续进行几个额外轮次的训练直到收敛。这个过程如图\ref{fig:13-55}所示。类似的还有一些其他变体,比如,训练到模型可见整个数据集之后,将最难的样本块复制并添加到训练集中,或者是将最容易的数据块逐渐删除,然后再添加回来等,这些方法的基本想法都是想让模型在具备一定的能力之后更多关注于困难样本。 \parinterval 虽然样本难度的度量在不同的数据类型和任务中有所不同,但课程规划通常与数据和任务无关。在各种场景中,大多数课程学习都利用了类似的调度策略。具体而言,调度策略可以分为预定义的和自动两种。预定义的调度策略通常按照难易程度排序好的样本划分为块,每个块中包含一定数量的难度相似的样本。然后按照“先易后难”的原则人工定义一个调度策略,比如,一种较为流行的方法是:在训练早期,模型只在简单块中进行采样,随着训练过程的进行,将下一个块的样本合并到当前训练子集中,继续训练,直到合并了整个数据块,即整个训练集可见为止,之后再继续进行几个额外轮次的训练直到收敛。这个过程如图\ref{fig:13-55}所示。类似的还有一些其他变体,比如,训练到模型可见整个数据集之后,将最难的样本块复制并添加到训练集中,或者是将最容易的数据块逐渐删除,然后再添加回来等,这些方法的基本想法都是想让模型在具备一定的能力之后更多关注于困难样本。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
\centering \centering
\includegraphics[scale=0.5]{./Chapter13/Figures/figure-a-predefined-course-planning.jpg} \includegraphics[scale=0.5]{./Chapter13/Figures/figure-a-predefined-course-planning.jpg}
\caption{一种预定义的课程规划} \caption{“先易后难”数据块选择({\color{red} 感觉这个图不能很好的说明问题,比如上面的颜色深浅是什么意思}}
\label{fig:13-55} \label{fig:13-55}
\end{figure} \end{figure}
%------------------------------------------- %-------------------------------------------
...@@ -936,13 +953,13 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\mathbf{y}} | \mathbf{x}) ...@@ -936,13 +953,13 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\mathbf{y}} | \mathbf{x})
\subsection{持续学习} \subsection{持续学习}
\parinterval 人类具有不断学习、调整和转移知识的能力,这种能力称之为{\small\bfnew{持续学习}}\index{持续学习}(Continual Learning\index{Continual Learning}),也叫{\small\bfnew{终生学习}}(Lifelong Learning\index{Lifelong Learning})、{\small\bfnew{增量式学习}}\index{增量式学习}(Incremental Learning\index{Incremental Learning})。人类学习的新任务时,会很自然的利用以前的知识并将新学习的知识整合到以前的知识中。然而对于机器学习系统来说,尤其在连接主义的范式下(如深度神经网络模型),这是一个很大的挑战,这是由神经网络的特性所决定的。当前的神经网络模型依赖于标注的训练样本,通过反向传播算法对模型参数进行训练更新,最终达到拟合数据分布的目的。当把模型切换到新的任务时,本质上是数据的分布发生了变化,从这种分布差异过大的数据中不断增量获取可用信息很容易导致{\small\bfnew{灾难性遗忘}}\index{灾难性遗忘}(Catastrophic Forgetting\index{Catastrophic Forgetting})问题,即用新数据训练模型的时候会干扰先前学习的知识。这是因为模型在学习新任务时,为了最大程度地减少新任务的损失,会用新训练数据对整个网络权重进行更新,这很容易造成模型过分拟合新的数据,忘记旧数据中的知识。甚至,这在最坏的情况下会导致旧知识被新知识完全重写。在机器翻译,类似的问题经常发生不断增加数据的场景中,因为当用户使用少量数据对模型进行更新之后,发现在旧的数据上的性能下降了(见{\chaptereighteen})。 \parinterval 人类具有不断学习、调整和转移知识的能力,这种能力被称为{\small\bfnew{持续学习}}\index{持续学习}(Continual Learning\index{Continual Learning}),也叫{\small\bfnew{终生学习}}(Lifelong Learning\index{Lifelong Learning})、{\small\bfnew{增量式学习}}\index{增量式学习}(Incremental Learning\index{Incremental Learning})。人类学习的新任务时,会很自然的利用以前的知识并将新学习的知识整合到以前的知识中。然而对于机器学习系统来说,尤其在连接主义的范式下(如深度神经网络模型),这是一个很大的挑战,这是由神经网络的特性所决定的。当前的神经网络模型依赖于标注的训练样本,通过反向传播算法对模型参数进行训练更新,最终达到拟合数据分布的目的。当把模型切换到新的任务时,本质上是数据的分布发生了变化,从这种分布差异过大的数据中不断增量获取可用信息很容易导致{\small\bfnew{灾难性遗忘}}\index{灾难性遗忘}(Catastrophic Forgetting\index{Catastrophic Forgetting})问题,即用新数据训练模型的时候会干扰先前学习的知识。这是因为模型在学习新任务时,会用新训练数据对整个网络权重进行更新,这很容易造成模型过分拟合新的数据,忘记旧数据中的知识。甚至,这在最坏的情况下会导致旧知识被新知识完全重写。在机器翻译领域,类似的问题经常发生不断增加数据的场景中,因为当用户使用少量数据对模型进行更新之后,发现在旧的数据上的性能下降了(见{\chaptereighteen})。
\parinterval 为克服灾难性遗忘问题,学习系统一方面必须能连续获取新知识和完善现有知识,另一方面,还应防止新数据输入明显干扰现有的知识,这个问题称作{\small\bfnew{稳定性-可塑性}}\index{稳定性- 可塑性}(Stability-Plasticity\index{Stability-Plasticity})问题。可塑性指整合新知识的能力,稳定性指在编码时会保留先前的知识不至于遗忘。要解决这些问题,就需要模型在保留先前任务的知识与学习当前任务的新知识之间取得平衡。目前的解决方法可以分为以下几类: \parinterval 为克服灾难性遗忘问题,学习系统一方面必须能连续获取新知识和完善现有知识,另一方面,还应防止新数据输入明显干扰现有的知识,这个问题称作{\small\bfnew{稳定性-可塑性}}\index{稳定性- 可塑性}(Stability-Plasticity\index{Stability-Plasticity})问题。可塑性指整合新知识的能力,稳定性指在编码时会保留先前的知识不至于遗忘。要解决这些问题,就需要模型在保留先前任务的知识与学习当前任务的新知识之间取得平衡。目前的解决方法可以分为以下几类:
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
\item 基于正则化的方法。通过对神经权重的更新施加约束来减轻灾难性的遗忘,通常是在损失函数中引入了一个额外的正则化项,使得模型在学习新数据时巩固先前的知识\upcite{DBLP:journals/pami/LiH18a,DBLP:conf/iccv/TrikiABT17} \item 基于正则化的方法。通过对模型参数的更新施加约束来减轻灾难性的遗忘,通常是在损失函数中引入了一个额外的正则化项,使得模型在学习新数据时巩固先前的知识\upcite{DBLP:journals/pami/LiH18a,DBLP:conf/iccv/TrikiABT17}
\vspace{0.5em} \vspace{0.5em}
\item 基于实例的方法。以原始格式存储样本,或使用生成模型生成伪样本,在学习新任务的同时重放先前的任务样本以减轻遗忘\upcite{DBLP:conf/cvpr/RebuffiKSL17,DBLP:conf/eccv/CastroMGSA18} \item 基于实例的方法。以原始格式存储样本,或使用生成模型生成伪样本,在学习新任务的同时重放先前的任务样本以减轻遗忘\upcite{DBLP:conf/cvpr/RebuffiKSL17,DBLP:conf/eccv/CastroMGSA18}
\vspace{0.5em} \vspace{0.5em}
...@@ -966,7 +983,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\mathbf{y}} | \mathbf{x}) ...@@ -966,7 +983,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\mathbf{y}} | \mathbf{x})
\item 对抗样本除了用于提高模型的健壮性之外,还有很多其他的应用场景。其中最主要的便是用于评估模型。通过构建由对抗样本构造的数据集,可以验证模型对于不同类型噪声健壮性\upcite{DBLP:conf/emnlp/MichelN18}。正是由于对抗样本在检测和提高模型健壮性具有明显的效果,因此很多的研究人员在针对不同的任务提出了很多有效的方法。但是在生成对抗样本时常常要注意或考虑很多问题,比如扰动是否足够细微,在人类难以察觉的同时做到欺骗模型的目的,对抗样本在不同的模型结构或数据集上是否具有足够的泛化能力。生成的方法是否足够高效等等。({\color{red}参考文献是不是有些少?加个2-3篇?} \item 对抗样本除了用于提高模型的健壮性之外,还有很多其他的应用场景。其中最主要的便是用于评估模型。通过构建由对抗样本构造的数据集,可以验证模型对于不同类型噪声健壮性\upcite{DBLP:conf/emnlp/MichelN18}。正是由于对抗样本在检测和提高模型健壮性具有明显的效果,因此很多的研究人员在针对不同的任务提出了很多有效的方法。但是在生成对抗样本时常常要注意或考虑很多问题,比如扰动是否足够细微,在人类难以察觉的同时做到欺骗模型的目的,对抗样本在不同的模型结构或数据集上是否具有足够的泛化能力。生成的方法是否足够高效等等。({\color{red}参考文献是不是有些少?加个2-3篇?}
\vspace{0.5em} \vspace{0.5em}
\item 强化学习在MT的应用? \item 强化学习在机器翻译里的应用除了前面提到的方法外还有很多,比如MIXER算法用混合策略梯度和极大似然估计目标函数来更新模型{\red Sequence Level Training with Recurrent Neural Networks},DAgger{\red A Reduction of Imitation Learning and Structured Prediction to No-Regret Online Learning}以及DAD{\red Improving Multi-step Prediction of Learned Time Series Models}等算法在训练过程之中逐渐让模型适应推断阶段的模式。此外,强化学习的效果目前还相当不稳定,研究人员提出了大量的方法来进行改善,比如降低方差{\red An Actor-Critic Algorithm for Sequence Prediction;Reinforcement Learning for Bandit Neural Machine Translation with Simulated Human Feedback}、使用单语语料{\red Improving Neural Machine Translation Models with Monolingual Data;A Study of Reinforcement Learning for Neural Machine Translation}等等。由于强化学习能从反馈的奖励中学习的特性,有不少研究探究如何在交互式场景中使用强化学习来提升系统性能。在交互式的场景下,系统能够直接和人类进行交互,在这种情况下人类的回复可以被视作是一种较弱的信号,能够用来提升系统的性能。典型的例子就是对话系统,人类的反馈可以被用来训练系统,例如small-talk{\red A Deep Reinforcement Learning Chatbot}以及task-oriented dialogue{\red Continuously Learning Neural Dialogue Management}。另外,强化学习也被应用在领域适应上,需要根据用户或是领域进行客制化的系统,用户偏好或者是评分可以用来调整系统。在工业界,大范围的收集用户反馈意见被应用在个性化新闻推荐{\red A contextual-bandit approach to personalized news article recommendation}或是电子商务推荐系统之中{\red Can Neural Machine Translation be Improved with User Feedback?}
\vspace{0.5em} \vspace{0.5em}
\item 从广义上说,大多数课程学习方法都是遵循由易到难的原则,然而在实践过程中人们逐渐赋予了课程学习更多的内涵,课程学习的含义早已超越了最原始的定义。一方面,课程学习可以与许多任务相结合,此时,评估准则并不一定总是样本的困难度,这取决于具体的任务,比如在{\small\bfnew{多任务学习}}\index{多任务学习}(multi-task learning)\index{multi-task learning}\upcite{DBLP:conf/cvpr/PentinaSL15,DBLP:conf/iccvw/SarafianosGNK17},指的任务的难易程度或相关性;在领域适应任务中\upcite{DBLP:conf/naacl/ZhangSKMCD19},指的是数据与领域的相似性;在噪声数据场景中,指的是样本的可信度\upcite{DBLP:conf/acl/WangCC19}。另一方面,在一些任务或数据中,由易到难并不总是有效,有时困难优先反而会取得更好的效果\upcite{DBLP:conf/medprai/SurendranathJ18,zhang2018empirical},实际上这和我们的直觉不太符合,一种合理的解释是课程学习更适合标签噪声、离群值较多或者是目标任务困难的场景,能提高模型的健壮性和收敛速度,而困难优先则更适合数据集干净的场景,能使随机梯度下降更快更稳定\upcite{DBLP:conf/nips/ChangLM17} \item 从广义上说,大多数课程学习方法都是遵循由易到难的原则,然而在实践过程中人们逐渐赋予了课程学习更多的内涵,课程学习的含义早已超越了最原始的定义。一方面,课程学习可以与许多任务相结合,此时,评估准则并不一定总是样本的困难度,这取决于具体的任务,比如在{\small\bfnew{多任务学习}}\index{多任务学习}(multi-task learning)\index{multi-task learning}\upcite{DBLP:conf/cvpr/PentinaSL15,DBLP:conf/iccvw/SarafianosGNK17},指的任务的难易程度或相关性;在领域适应任务中\upcite{DBLP:conf/naacl/ZhangSKMCD19},指的是数据与领域的相似性;在噪声数据场景中,指的是样本的可信度\upcite{DBLP:conf/acl/WangCC19}。另一方面,在一些任务或数据中,由易到难并不总是有效,有时困难优先反而会取得更好的效果\upcite{DBLP:conf/medprai/SurendranathJ18,zhang2018empirical},实际上这和我们的直觉不太符合,一种合理的解释是课程学习更适合标签噪声、离群值较多或者是目标任务困难的场景,能提高模型的健壮性和收敛速度,而困难优先则更适合数据集干净的场景,能使随机梯度下降更快更稳定\upcite{DBLP:conf/nips/ChangLM17}
......
...@@ -172,7 +172,7 @@ ...@@ -172,7 +172,7 @@
\parinterval 浅融合方法独立训练翻译模型和语言模型,在生成每个词的时候,对两个模型的预测概率进行加权求和得到最终的预测概率。浅融合的不足在于,解码过程对每个词均采用相同的语言模型权重,缺乏灵活性。针对这个问题,深融合联合翻译模型和语言模型进行训练,从而在解码过程中动态地计算语言模型的权重,更好地融合翻译模型和语言模型来计算预测概率。 \parinterval 浅融合方法独立训练翻译模型和语言模型,在生成每个词的时候,对两个模型的预测概率进行加权求和得到最终的预测概率。浅融合的不足在于,解码过程对每个词均采用相同的语言模型权重,缺乏灵活性。针对这个问题,深融合联合翻译模型和语言模型进行训练,从而在解码过程中动态地计算语言模型的权重,更好地融合翻译模型和语言模型来计算预测概率。
\parinterval 大多数情况下,目标语言端语言模型的使用可以提高译文的流畅度。不过,它并不会增加翻译结果对源语言句子表达的{\small\bfnew{充分性}}\index{充分性}(Adequacy\index{Adequacy},即源语言句子的信息是否被充分体现到了译文中。也有一些研究发现,神经机器翻译过于关注译文的流畅度,但是充分性的问题没有得到很好考虑,比如,神经机器翻译系统的结果中经常出现漏译等问题。也有一些研究人员提出控制翻译充分性的方法,让译文在流畅度和充分性之间达到平衡\upcite{DBLP:conf/acl/TuLLLL16,li-etal-2018-simple,DBLP:journals/tacl/TuLLLL17} \parinterval 大多数情况下,目标语言端语言模型的使用可以提高译文的流畅度。不过,它并不会增加翻译结果对源语言句子表达的充分性,即源语言句子的信息是否被充分体现到了译文中。也有一些研究发现,神经机器翻译过于关注译文的流畅度,但是充分性的问题没有得到很好考虑,比如,神经机器翻译系统的结果中经常出现漏译等问题。也有一些研究人员提出控制翻译充分性的方法,让译文在流畅度和充分性之间达到平衡\upcite{DBLP:conf/acl/TuLLLL16,li-etal-2018-simple,DBLP:journals/tacl/TuLLLL17}
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SUB-SECTION % NEW SUB-SUB-SECTION
......
...@@ -106,7 +106,7 @@ ...@@ -106,7 +106,7 @@
\section{交互式机器翻译} \section{交互式机器翻译}
\parinterval 机器翻译的结果会存在错误,因此很多时候需要人工的修改才能被使用。例如,在{\small\bfnew 译后编辑}\index{译后编辑}(Post-editing)\index{Post-editing}中,译员对机器翻译的译文进行修改,最终使译文达到要求。但是,译后编辑的成本仍然很高,因为它需要译员阅读机器翻译的结果,同时做出修改的动作。有时候,由于译文修改的内容较为复杂,译后编辑的时间甚至比人工直接翻译源语言句子的时间都长。因此在机器翻译应用中,需要更高效的方式调整机器翻译的结果,使其达到可用。比如,可以使用质量评估方法(见{\chapterfour}),选择模型置信度较高的译文进行译后编辑,对置信度低的译文直接进行人工翻译。而另一种思路是,让人的行为直接影响机器翻译生成译文的过程,让人和机器翻译系统进行交互,在不断的修正中生成更好的译文。这种方法也被称作{\small\bfnew 交互式机器翻译}\index{交互式机器翻译}(Interactive Machine Translation,,IMT)\index{Interactive Machine Translation,,IMT} \parinterval 机器翻译的结果会存在错误,因此很多时候需要人工的修改才能被使用。例如,在{\small\bfnew 译后编辑}\index{译后编辑}(Post-editing)\index{Post-editing}中,译员对机器翻译的译文进行修改,最终使译文达到要求。但是,译后编辑的成本仍然很高,因为它需要译员阅读机器翻译的结果,同时做出修改的动作。有时候,由于译文修改的内容较为复杂,译后编辑的时间甚至比人工直接翻译源语言句子的时间都长。因此在机器翻译应用中,需要更高效的方式调整机器翻译的结果,使其达到可用。比如,可以使用质量评估方法(见{\chapterfour}),选择模型置信度较高的译文进行译后编辑,对置信度低的译文直接进行人工翻译。而另一种思路是,让人的行为直接影响机器翻译生成译文的过程,让人和机器翻译系统进行交互,在不断的修正中生成更好的译文。这种方法也被称作{\small\bfnew 交互式机器翻译}\index{交互式机器翻译}(Interactive Machine Translation,IMT)\index{Interactive Machine Translation}
\parinterval 交互式机器翻译的大致流程如下:机器翻译系统根据用户输入的源语言句子预测出可能的译文交给用户,然后用户在现有翻译的基础上进行接受、修改或者删除等操作,然后翻译系统根据用户的反馈信息再次生成比前一次更好的翻译并提交给用户。以此循环,直到得到最终的译文。 \parinterval 交互式机器翻译的大致流程如下:机器翻译系统根据用户输入的源语言句子预测出可能的译文交给用户,然后用户在现有翻译的基础上进行接受、修改或者删除等操作,然后翻译系统根据用户的反馈信息再次生成比前一次更好的翻译并提交给用户。以此循环,直到得到最终的译文。
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
与所有从事机器翻译研究的人一样,笔者也梦想着有朝一日机器翻译能够完全实现。这个想法可以追溯到1980年,姚天顺教授和王宝库教授创立了东北大学自然语言处理实验室,把机器翻译作为毕生为之奋斗的目标。这也影响了包括笔者在内的许多人。虽然,那时的机器翻译技术并不先进,研究条件也异常艰苦,但是实现机器翻译的梦想从未改变。 与所有从事机器翻译研究的人一样,笔者也梦想着有朝一日机器翻译能够完全实现。这个想法可以追溯到1980年,姚天顺教授和王宝库教授创立了东北大学自然语言处理实验室,把机器翻译作为毕生为之奋斗的目标。这也影响了包括笔者在内的许多人。虽然,那时的机器翻译技术并不先进,研究条件也异常艰苦,但是实现机器翻译的梦想从未改变。
步入二十一世纪后,统计学习方法的兴起给机器翻译带来了全新的思路,同时也带来了巨大的技术进步。笔者有幸经历了那个年代,目睹了机器翻译的成长。同时,也加入到机器翻译研究的浪潮中。从2007年开始研发NiuTrans开源系统,到2012年正式进行机器翻译产业化,并创立小牛翻译,笔者不断地被机器翻译所取得的进步所感动。那时,笔者就曾经思考过将机器翻译的模型和方法进行总结,形成资料供人阅读。虽然粗略写过一些文字,但是未成体系,只是在相关的教学环节中进行使用,供实验室同学闲暇时参考阅读。 步入二十一世纪后,统计学习方法的兴起给机器翻译带来了全新的思路,同时也带来了巨大的技术进步。笔者有幸经历了那个时代,同时也加入到机器翻译研究的浪潮中,从2007年开始研发NiuTrans开源系统,到2012年正式进行机器翻译产业化,并创立小牛翻译,笔者目睹了机器翻译的成长,并且不断地被机器翻译取得的进步所感动。那时,笔者就曾经思考过将机器翻译的模型和方法进行总结,形成资料供人阅读。虽然粗略写过一些文字,但是未成体系,只是在相关的教学环节中进行使用,供实验室同学闲暇时参考阅读。
但是机器翻译领域进展之快是无法预见的。2016年之后,随着深度学习方法在机器翻译中的进一步应用,机器翻译迎来了前所未有的大好机遇。新的技术方法层出不穷,机器翻译系统也得到了广泛应用。这时,笔者心里又涌现出将机器翻译的技术内容编撰成书的想法。这种强烈的念头使得笔者完成了本书的第一个版本(包含七章),并开源供人广泛阅读。承蒙同行们厚爱,得到了很多反馈,包括一些批评意见。这些使得笔者可以更加全面地梳理思路。 但是机器翻译领域进展之快是无法预见的。2016年之后,随着深度学习方法在机器翻译中的进一步应用,机器翻译迎来了前所未有的大好机遇。新的技术方法层出不穷,机器翻译系统也得到了广泛应用。这时,笔者心里又涌现出将机器翻译的技术内容编撰成书的想法。这种强烈的念头使得笔者完成了本书的第一个版本(包含七章),并开源供人广泛阅读。承蒙同行们厚爱,得到了很多反馈,包括一些批评意见。这些使得笔者可以更加全面地梳理思路。
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
\vspace{0.5em} \vspace{0.5em}
本书全面回顾了近三十年内机器翻译的技术发展历程,并围绕{\sffamily\bfseries 机器翻译的建模}这一主题对机器翻译的技术方法进行了全面介绍。在写作中,笔者力求用朴实的语言和简洁的实例阐述机器翻译的基本模型,同时对相关的技术前沿进行讨论。其中也会涉及大量的实践经验,包括许多机器翻译系统开发的细节。从这个角度来说,本书不单单是一本理论书籍,它还结合了机器翻译的应用,给读者提供了很多机器翻译技术落地的具体思路。 本书全面回顾了近三十年内机器翻译的技术发展历程,并围绕{\sffamily\bfseries 机器翻译的建模和深度学习方法}这两个主题对机器翻译的技术方法进行了全面介绍。在写作中,笔者力求用朴实的语言和简洁的实例阐述机器翻译的基本模型,同时对相关的技术前沿进行讨论。其中也会涉及大量的实践经验,包括许多机器翻译系统开发的细节。从这个角度来说,本书不单单是一本理论书籍,它还结合了机器翻译的应用,给读者提供了很多机器翻译技术落地的具体思路。
本书可以供计算机相关专业高年级本科生及研究生学习之用,也可以作为自然语言处理领域,特别是机器翻译方向相关研究人员的参考资料。此外,本书各章的主题都十分明确,内容也相对集中。因此,读者也可将每章作为某一专题的学习资料。 本书可以供计算机相关专业高年级本科生及研究生学习之用,也可以作为自然语言处理领域,特别是机器翻译方向相关研究人员的参考资料。此外,本书各章的主题都十分明确,内容也相对集中。因此,读者也可将每章作为某一专题的学习资料。
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论