Commit 19043049 by xiaotong

minor updates of the outline

parent a2910ddf
......@@ -29,3 +29,4 @@ Book/mt-book-xelatex.bcf
Book/mt-book-xelatex.idx
Book/mt-book-xelatex.run.xml
Book/mt-book-xelatex.synctex(busy)
Book/mt-book-xelatex.pdf
......@@ -578,7 +578,7 @@ His house is on the south bank of the river.
\parinterval 《统计自然语言处理》\cite{宗成庆2013统计自然语言处理}由中国科学院自动化所宗成庆教授所著,其中全面介绍了统计自然语言处理的基本概念、理论方法和最新研究进展,既有对基础知识和理论模型的介绍,也有对相关问题的研究背景、实现方法和技术现状的详细阐述。可供从事自然语言处理、机器翻译等研究的相关人员参考。
\parinterval Ian Goodfellow、Yoshua Bengio,Aaron Courville三位机器学习领域的学者所写的《深度学习》\cite{HeatonIan}也是值得一读的参考书。其讲解了有关深度学习常用的方法,其中很多都会在深度学习模型设计和使用中用到。同时在《深度学习》应用一章中也简单讲解了神经机器翻译的任务定义和发展过程。
\parinterval Ian Goodfellow、Yoshua Bengio,Aaron Courville三位机器学习领域的学者所写的《Deep Learning》\cite{HeatonIan}也是值得一读的参考书。其讲解了有关深度学习常用的方法,其中很多都会在深度学习模型设计和使用中用到。同时在《Deep Learning》应用一章中也简单讲解了神经机器翻译的任务定义和发展过程。
\parinterval 《Neural Network Methods in Natural Language Processing》\cite{Goldberg2017Neural}是Yoav Goldberg编写的面向自然语言处理的深度学习参考书。相比《深度学习》,该书聚焦在自然语言处理中的深度学习方法,内容更加易读。
......
......@@ -937,7 +937,7 @@ $\textrm{a}(\cdot)$可以被看作是目标语表示和源语言表示的一种`
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{神经机器翻译模型的训练}\index{Chapter6.3.5}
\subsection{训练}\index{Chapter6.3.5}
\parinterval 在第五章中,我们已经介绍了神经网络的训练方法。其中最常用的是基于梯度的方法,即:使用一定量样本进行神经网络的前向计算,之后进行反向计算,并得到所有参数的梯度信息,再使用下面的规则进行参数更新:
\begin{equation}
\mathbf{w}_{step+1} = \mathbf{w}_{step} - \alpha \cdot \frac{\partial L(\mathbf{w}_{step})} {\partial \mathbf{w}_{step} }
......@@ -1096,7 +1096,7 @@ L(\mathbf{Y},\hat{\mathbf{Y}}) = \sum_{j=1}^n L_{ce}(\mathbf{y}_j,\hat{\mathbf{y
\ref{fig:6-30}以三层循环网络为例展示了对句子``你 很 不错 。''进行模型并行的过程。其中,每一层网络都被放到了一个设备上。当模型根据已经生成的第一个词``你''后预测下一个词时(\ref{fig:6-30}(a)),同层的下一个时刻的计算和对``你''的第二层的计算就可以同时开展(\ref{fig:6-30}(b))。以此类推,就完成了模型的并行计算。
\end{itemize}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{神经机器翻译模型的推断}\index{Chapter6.3.6}
\subsection{推断}\index{Chapter6.3.6}
\parinterval 神经机器翻译的推断是指:利用已经训练好的模型对新的源语言句子进行翻译的过程。具体来说,首先利用编码器生成源语言句子的表示,之后利用解码器预测目标语译文。也就是,对于源语言句子$\mathbf{x}$,生成一个使翻译概率$\textrm{P}(\mathbf{y} | \mathbf{x})$最大的目标语译文$\hat{\mathbf{y}}$,如下(详细过程见\ref{sec:6.3.1}节):
\begin{eqnarray}
\begin{array}{ll} \hat{\mathbf{y}} &= \argmax_y \textrm{P}(\mathbf{y} | \mathbf{x}) \\
......@@ -1649,7 +1649,7 @@ x_{l+1} = x_l + \digamma (x_l)
\noindent 其中,$\mathbf{W}_1$$\mathbf{W}_2$$\mathbf{b}_1$$\mathbf{b}_2$为模型的参数。通常情况下,前馈神经网络的隐层维度要比注意力部分的隐层维度大,比如,注意力部分的隐层维度为512,前馈神经网络部分的隐层维度为2048。当然,继续增大前馈神经网络的隐层大小,比如设为4096,甚至8192,还可以带来性能的增益,但是前馈部分的存储消耗较大,需要更大规模GPU设备的支持。因此在具体实现时,往往需要在翻译准确性和存储/速度之间找到一个平衡。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Transformer的训练}\index{Chapter6.4.9}
\subsection{训练}\index{Chapter6.4.9}
\parinterval 与前面介绍的神经机器翻译模型的训练一样,Transformer的训练流程为:首先对模型进行初始化,然后在编码器输入包含结束符的源语言单词序列。前面已经介绍过,解码端每个位置单词的预测都要依赖已经生成的序列。我们在解码端输入包含起始符号的目标语序列,通过起始符号预测目标语的第一个单词,用真实的目标语第一个单词去预测第二个单词,以此类推,然后用真实的目标语序列和预测的结果比较,计算它的损失。损失越小说明模型的预测越接近真实输出。然后利用反向传播来调整模型中的参数。Transformer使用了交叉熵损失函数(Cross Entropy Loss),如图\ref{fig:6-51}。由于Transformer将任意时刻输入信息之间的距离拉近为1,摒弃了RNN中每一个时刻的计算都要基于前一时刻的计算这种具有时序性的训练方式,因此Transformer中训练的不同位置可以并行化训练,大大提高了训练效率。
%----------------------------------------------
......@@ -1739,7 +1739,7 @@ Transformer Deep(48层) & 30.2 & 43.1 & 194$\times 10^{6}$
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Transformer的推断}\index{Chapter6.4.10}
\subsection{推断}\index{Chapter6.4.10}
\parinterval Transformer解码器生成目标语的过程和前面介绍的循环网络翻译模型类似,都是从左往右生成,且下一个单词的预测依赖已经生成的上一个单词。其具体推断过程如图\ref{fig:6-54}所示,其中$\mathbf{C}_i$是编解码注意力的结果,解码器首先根据``<eos>''和$\mathbf{C}_1$生成第一个单词``how'',然后根据``how''和$\mathbf{C}_2$生成第二个单词``are'',以此类推,当解码器生成``<eos>''时结束推断。
\parinterval 但是,Transformer在推断阶段无法对所有位置进行并行化操作,因为对于每一个目标语单词都需要对前面所有单词进行注意力操作,因此它推断速度非常慢。可以采用的加速手段有:低精度\cite{DBLP:journals/corr/CourbariauxB16}、Cache(缓存需要重复计算的变量)\cite{DBLP:journals/corr/abs-1805-00631}、共享注意力网络等\cite{Xiao2019SharingAW}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论