Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
M
mtbookv2
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
NiuTrans
mtbookv2
Commits
759119e1
Commit
759119e1
authored
Sep 17, 2020
by
xiaotong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wording (sec 10, training)
parent
15c8412f
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
16 行增加
和
12 行删除
+16
-12
Chapter10/chapter10.tex
+16
-12
没有找到文件。
Chapter10/chapter10.tex
查看文件 @
759119e1
...
...
@@ -897,14 +897,15 @@ a (\vectorn{\emph{s}},\vectorn{\emph{h}}) = \left\{ \begin{array}{ll}
\centering
\caption
{
GNMT与其他翻译模型对比
\upcite
{
Wu2016GooglesNM
}}
\label
{
tab:10-10
}
\begin{tabular}
{
l l l l
}
\multicolumn
{
1
}{
l|
}{
\multirow
{
2
}{
*
}{
\#
}}
&
\multicolumn
{
2
}{
c
}{
BLEU
}
&
\multirow
{
2
}{
*
}{
CPU decoding time
}
\\
\multicolumn
{
1
}{
l|
}{}
&
EN-DE
&
EN-FR
&
\\
\hline
\multicolumn
{
1
}{
l|
}{
PBMT
}
&
20.7
&
37.0
&
-
\\
\multicolumn
{
1
}{
l|
}{
RNNSearch
}
&
16.5
&
-
&
-
\\
\multicolumn
{
1
}{
l|
}{
LSTM(6 layers)
}
&
-
&
31.5
&
-
\\
\multicolumn
{
1
}{
l|
}{
Deep-Att
}
&
20.6
&
37.7
&
-
\\
\multicolumn
{
1
}{
l|
}{
GNMT
}
&
24.6
&
39.0
&
0.2s per sentence
\\
\begin{tabular}
{
l l l
}
\multicolumn
{
1
}{
l|
}{
\multirow
{
3
}{
*
}{
\#
}}
&
\multicolumn
{
2
}{
c
}{
BLEU[
\%
]
}
\\
\multicolumn
{
1
}{
l|
}{}
&
英德
&
英法
\\
\multicolumn
{
1
}{
l|
}{}
&
EN-DE
&
EN-FR
\\
\hline
\multicolumn
{
1
}{
l|
}{
PBMT
}
&
20.7
&
37.0
\\
\multicolumn
{
1
}{
l|
}{
RNNSearch
}
&
16.5
&
-
\\
\multicolumn
{
1
}{
l|
}{
LSTM(6 layers)
}
&
-
&
31.5
\\
\multicolumn
{
1
}{
l|
}{
Deep-Att
}
&
20.6
&
37.7
\\
\multicolumn
{
1
}{
l|
}{
GNMT
}
&
24.6
&
39.0
\\
\end{tabular}
\end{table}
%----------------------------------------------
...
...
@@ -915,18 +916,21 @@ a (\vectorn{\emph{s}},\vectorn{\emph{h}}) = \left\{ \begin{array}{ll}
\sectionnewpage
\section
{
训练及推断
}
神经机器翻译模型的训练大多使用基于梯度的方法(见
{
\chapternine
}
),本节将介绍这种方法训练循环神经网络的应用细节。进一步,会介绍神经机器翻译模型的推断方法。
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
%----------------------------------------------------------------------------------------
\subsection
{
训练
}
\parinterval
第九章已经介绍了神经网络的训练方法。其中最常用的是基于梯度的方法,即:使用一定量样本进行神经网络的前向计算,之后进行反向计算,并得到所有参数的梯度信息,再使用下面的规则进行参数更新:
\parinterval
在基于梯度的方法中,模型参数可以通过损失函数
$
L
$
对于参数的梯度进行不断更新。对于第
$
step
$
步参数更新,首先进行神经网络的前向计算,之后进行反向计算,并得到所有参数的梯度信息,再使用下面的规则进行参数更新:
\begin{eqnarray}
\vectorn
{
\emph
{
w
}}_{
step+1
}
=
\vectorn
{
\emph
{
w
}}_{
step
}
-
\alpha
\cdot
\frac
{
\partial
L(
\vectorn
{
\emph
{
w
}}_{
step
}
)
}
{
\partial
\vectorn
{
\emph
{
w
}}_{
step
}
}
\label
{
eq:10-30
}
\end{eqnarray}
\noindent
其中,
$
\vectorn
{
\emph
{
w
}}_{
step
}$
表示更新前的模型参数,
$
\vectorn
{
\emph
{
w
}}_{
step
+
1
}$
表示更新后的模型参数,
$
L
(
\vectorn
{
\emph
{
w
}}_{
step
}
)
$
表示模型相对于
$
\vectorn
{
\emph
{
w
}}_{
step
}$
的损失,
$
\frac
{
\partial
L
(
\vectorn
{
\emph
{
w
}}_{
step
}
)
}
{
\partial
\vectorn
{
\emph
{
w
}}_{
step
}
}$
表示损失函数的梯度,
$
\alpha
$
是更新的步进值。也就是说,给定一定量的训练数据,不断执行公式
\ref
{
eq:10-30
}
的过程。反复使用训练数据,直至模型参数达到收敛或者损失函数不再变化。通常,把公式的一次执行称为“一步”更新/训练,把访问完所有样本的训练称为“一轮”训练。
\noindent
其中,
$
\vectorn
{
\emph
{
w
}}_{
step
}$
表示更新前的模型参数,
$
\vectorn
{
\emph
{
w
}}_{
step
+
1
}$
表示更新后的模型参数,
$
L
(
\vectorn
{
\emph
{
w
}}_{
step
}
)
$
表示模型相对于
$
\vectorn
{
\emph
{
w
}}_{
step
}$
的损失,
$
\frac
{
\partial
L
(
\vectorn
{
\emph
{
w
}}_{
step
}
)
}
{
\partial
\vectorn
{
\emph
{
w
}}_{
step
}
}$
表示损失函数的梯度,
$
\alpha
$
是更新的步进值。也就是说,给定一定量的训练数据,不断执行公式
\ref
{
eq:10-30
}
的过程。反复使用训练数据,直至模型参数达到收敛或者损失函数不再变化。通常,把公式的一次执行称为“一步”更新/训练,把访问完所有样本的训练称为“一轮”训练。
\parinterval
将公式
\ref
{
eq:10-30
}
应用于神经机器翻译有几个基本问题需要考虑:1)损失函数的选择;2)参数初始化的策略,也就是如何设置
$
\vectorn
{
\emph
{
w
}}_
0
$
;3)优化策略和学习率调整策略;4)训练加速。下面对这些问题进行讨论。
...
...
@@ -936,13 +940,13 @@ a (\vectorn{\emph{s}},\vectorn{\emph{h}}) = \left\{ \begin{array}{ll}
\subsubsection
{
1. 损失函数
}
\parinterval
因为神经机器翻译在每个目标语言位置都会输出一个概率分布,表示这个位置上不同单词出现的可能性,因此需要知道当前位置输出的分布相比于标准答案的“损失
”。对于这个问题,常用的是交叉熵损失函数。令
$
\vectorn
{
\emph
{
y
}}$
表示机器翻译模型输出的分布,
$
\hat
{
\vectorn
{
\emph
{
y
}}}$
表示标准答案,则交叉熵损失可以被定义为:
\parinterval
神经机器翻译在目标端的每个位置都会输出一个概率分布,表示这个位置上不同单词出现的可能性。设计损失函数时,需要知道当前位置输出的分布相比于标准答案的“差异
”。对于这个问题,常用的是交叉熵损失函数。令
$
\vectorn
{
\emph
{
y
}}$
表示机器翻译模型输出的分布,
$
\hat
{
\vectorn
{
\emph
{
y
}}}$
表示标准答案,则交叉熵损失可以被定义为:
\begin{eqnarray}
L
_{
\textrm
{
ce
}}
(
\vectorn
{
\emph
{
y
}}
,
\hat
{
\vectorn
{
\emph
{
y
}}}
) = -
\sum
_{
k=1
}^{
|V|
}
\vectorn
{
\emph
{
y
}}
[k]
\textrm
{
log
}
(
\hat
{
\vectorn
{
\emph
{
y
}}}
[k])
\label
{
eq:10-3222
}
\end{eqnarray}
\noindent
其中
$
\vectorn
{
\emph
{
y
}}
[
k
]
$
和
$
\hat
{
\vectorn
{
\emph
{
y
}}}
[
k
]
$
分别表示向量
$
\vectorn
{
\emph
{
y
}}$
和
$
\hat
{
\vectorn
{
\emph
{
y
}}}$
的第
$
k
$
维,
$
|V|
$
表示输出向量的维度(等于词表大小)。
对于一个模型输出的概率分布
$
\vectorn
{
\emph
{
Y
}}
=
\{
\vectorn
{
\emph
{
y
}}_
1
,
\vectorn
{
\emph
{
y
}}_
2
,...,
\vectorn
{
\emph
{
y
}}_
n
\}
$
和标准答案分布
$
\widehat
{
\vectorn
{
\emph
{
Y
}}}
=
\{
\hat
{
\vectorn
{
\emph
{
y
}}}_
1
,
\hat
{
\vectorn
{
\emph
{
y
}}}_
2
,...,
\hat
{
\vectorn
{
\emph
{
y
}}}_
n
\}
$
,
损失函数可以被定义为:
\noindent
其中
$
\vectorn
{
\emph
{
y
}}
[
k
]
$
和
$
\hat
{
\vectorn
{
\emph
{
y
}}}
[
k
]
$
分别表示向量
$
\vectorn
{
\emph
{
y
}}$
和
$
\hat
{
\vectorn
{
\emph
{
y
}}}$
的第
$
k
$
维,
$
|V|
$
表示输出向量的维度(等于词表大小)。
假设有
$
n
$
个训练样本,模型输出的概率分布为
$
\vectorn
{
\emph
{
Y
}}
=
\{
\vectorn
{
\emph
{
y
}}_
1
,
\vectorn
{
\emph
{
y
}}_
2
,...,
\vectorn
{
\emph
{
y
}}_
n
\}
$
,标准答案的分布
$
\widehat
{
\vectorn
{
\emph
{
Y
}}}
=
\{
\hat
{
\vectorn
{
\emph
{
y
}}}_
1
,
\hat
{
\vectorn
{
\emph
{
y
}}}_
2
,...,
\hat
{
\vectorn
{
\emph
{
y
}}}_
n
\}
$
。这个训练样本集合上的
损失函数可以被定义为:
\begin{eqnarray}
L(
\vectorn
{
\emph
{
Y
}}
,
\widehat
{
\vectorn
{
\emph
{
Y
}}}
) =
\sum
_{
j=1
}^
n L
_{
\textrm
{
ce
}}
(
\vectorn
{
\emph
{
y
}}_
j,
\hat
{
\vectorn
{
\emph
{
y
}}}_
j)
\label
{
eq:10-31
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论