Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
T
Toy-MT-Introduction
概览
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
Toy-MT-Introduction
Commits
4dacb27e
Commit
4dacb27e
authored
May 09, 2020
by
zengxin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chapter6 fig
parent
d85642f9
隐藏空白字符变更
内嵌
并排
正在显示
11 个修改的文件
包含
59 行增加
和
88 行删除
+59
-88
Book/Chapter6/Chapter6.tex
+15
-15
Book/Chapter6/Figures/Big learning rate vs Small learning rate.png
+0
-0
Book/Chapter6/Figures/figure-A-working-example-of-neural-machine-translation.tex
+11
-5
Book/Chapter6/Figures/figure-Calculation-of-context-vector-C.tex
+2
-1
Book/Chapter6/Figures/figure-Generate-summary.tex
+1
-1
Book/Chapter6/Figures/figure-Multi-Head-Attention-Model.tex
+14
-14
Book/Chapter6/Figures/figure-Point-product-attention-model.tex
+4
-4
Book/Chapter6/Figures/figure-Query-model-corresponding-to-traditional-query-model-vs-attention-mechanism.tex
+0
-40
Book/Chapter6/Figures/figure-convergence&lr.tex
+6
-6
Book/Chapter6/Figures/figure-transformer.tex
+4
-0
Book/mt-book-xelatex.tex
+2
-2
没有找到文件。
Book/Chapter6/Chapter6.tex
查看文件 @
4dacb27e
...
...
@@ -232,7 +232,7 @@ NMT & $ 21.7^{\ast}$ & $18.7^{\ast}$ & -1
\begin{figure}
[htp]
\centering
\input
{
./Chapter6/Figures/figure-encoder-decoder-process
}
\caption
{
encoder-d
ecoder过程
}
\caption
{
Encoder-D
ecoder过程
}
\label
{
fig:6-5
}
\end{figure}
%----------------------------------------------
...
...
@@ -385,12 +385,12 @@ NMT & $ 21.7^{\ast}$ & $18.7^{\ast}$ & -1
\begin{figure}
[htp]
\centering
\input
{
./Chapter6/Figures/figure-structure-of-a-recurrent-network-model
}
\caption
{
循环
网络模型的结构
}
\caption
{
循环
神经网络处理序列的实例
}
\label
{
fig:6-9
}
\end{figure}
%----------------------------------------------
\parinterval
在神经机器翻译里使用循环神经网络也很简单。我们只需要把源语言句子和目标语言句子分别看作两个序列,之后使用两个循环神经网络分别对其进行建模。这
种网络结构
如图
\ref
{
fig:6-10
}
所示。图中,下半部分是编码器,上半部分是解码器。编码器利用循环神经网络对源语言序列逐词进行编码处理,同时利用循环单元的记忆能力,不断累积序列信息,遇到终止符<eos>后便得到了包含源语言句子全部信息的表示结果。解码器利用编码器的输出和起始符<sos>开始逐词的进行解码,即逐词翻译,每得到一个译文单词,便将其作为当前时刻解码端循环单元的输入,这也是一个典型的神经语言模型的序列生成过程。解码器通过循环神经网络不断的累积已经得到的译文的信息,并继续生成下一个单词,直到遇到结束符<eos>,便得到了最终完整的译文。
\parinterval
在神经机器翻译里使用循环神经网络也很简单。我们只需要把源语言句子和目标语言句子分别看作两个序列,之后使用两个循环神经网络分别对其进行建模。这
个过程
如图
\ref
{
fig:6-10
}
所示。图中,下半部分是编码器,上半部分是解码器。编码器利用循环神经网络对源语言序列逐词进行编码处理,同时利用循环单元的记忆能力,不断累积序列信息,遇到终止符<eos>后便得到了包含源语言句子全部信息的表示结果。解码器利用编码器的输出和起始符<sos>开始逐词的进行解码,即逐词翻译,每得到一个译文单词,便将其作为当前时刻解码端循环单元的输入,这也是一个典型的神经语言模型的序列生成过程。解码器通过循环神经网络不断的累积已经得到的译文的信息,并继续生成下一个单词,直到遇到结束符<eos>,便得到了最终完整的译文。
%----------------------------------------------
% 图3.10
...
...
@@ -481,21 +481,21 @@ $\textrm{P}({y_j | \mathbf{s}_{j-1} ,y_{j-1},\mathbf{C}})$由Softmax实现,Sof
\begin{figure}
[htp]
\centering
\input
{
./Chapter6/Figures/figure-word-embedding-structure
}
\caption
{
词嵌入
层结构
}
\caption
{
词嵌入
的生成过程
}
\label
{
fig:6-12
}
\end{figure}
%----------------------------------------------
\parinterval
需要注意的是,在上面这个过程中One-hot表示和词嵌入矩阵并不必须调用矩阵乘法才得到词嵌入结果。只需要获得One-hot向量中1对应的索引,从词嵌入矩阵中取出对应的行即可。这种利用索引``取''结果的方式避免了计算代价较高的矩阵乘法,因此在实际系统中很常用。
\parinterval
在解码端,需要在每个位置预测输出的单词。在循环神经网络中,每一时刻循环单元的输出向量为
$
\mathbf
{
s
}_
j
$
,它可以被看作这个时刻的目标语单词的一种表示,但是我们无法根据这个向量得出要生成的目标语单词的概率。而输出层的目的便是通过向量
$
\mathbf
{
s
}_
j
$
计算词表中每个单词的生成概率,进而选取概率最高的单词作为当前时刻的输出。图
\ref
{
fig:6-13
}
展示了一个输出层
的运行
实例。
\parinterval
在解码端,需要在每个位置预测输出的单词。在循环神经网络中,每一时刻循环单元的输出向量为
$
\mathbf
{
s
}_
j
$
,它可以被看作这个时刻的目标语单词的一种表示,但是我们无法根据这个向量得出要生成的目标语单词的概率。而输出层的目的便是通过向量
$
\mathbf
{
s
}_
j
$
计算词表中每个单词的生成概率,进而选取概率最高的单词作为当前时刻的输出。图
\ref
{
fig:6-13
}
展示了一个输出层
进行单词预测的
实例。
%----------------------------------------------
% 图3.10
\begin{figure}
[htp]
\centering
\input
{
./Chapter6/Figures/figure-output-layer-structur
}
\caption
{
输出层
结构
}
\caption
{
输出层
的预测过程
}
\label
{
fig:6-13
}
\end{figure}
%----------------------------------------------
...
...
@@ -680,7 +680,7 @@ $\textrm{P}({y_j | \mathbf{s}_{j-1} ,y_{j-1},\mathbf{C}})$由Softmax实现,Sof
\begin{figure}
[htp]
\centering
\input
{
./Chapter6/Figures/figure-bi-RNN
}
\caption
{
双向循环神经网络
}
\caption
{
基于双向循环神经网络的机器翻译模型结构
}
\label
{
fig:6-18
}
\end{figure}
%----------------------------------------------
...
...
@@ -698,7 +698,7 @@ $\textrm{P}({y_j | \mathbf{s}_{j-1} ,y_{j-1},\mathbf{C}})$由Softmax实现,Sof
\begin{figure}
[htp]
\centering
\input
{
./Chapter6/Figures/figure-double-layer-RNN
}
\hspace
{
10em
}
\caption
{
双层循环神经网络
}
\caption
{
基于双层循环神经网络的机器翻译模型结构
}
\label
{
fig:6-19
}
\end{figure}
%----------------------------------------------
...
...
@@ -831,7 +831,7 @@ a (\mathbf{s},\mathbf{h}) = \left\{ \begin{array}{ll}
%----------------------------------------------
\end{itemize}
\parinterval
图
\ref
{
fig:6-25
}
展示了一个上下文向量的计算过程。首先,计算目标语第一个单词``Have''与源语中的所有单词的相关性,即注意力权重,对应图中第一列
$
\alpha
_{
i,
1
}$
,则当前时刻所使用的上下文向量
$
\mathbf
{
C
}_
1
=
\sum
_{
i
=
1
}^
8
\alpha
_{
i,
1
}
\mathbf
{
h
}_
i
$
;然后,计算第二个单词``you''的注意力权重对应第二列
$
\alpha
_{
i,
2
}$
,其上下文向量
$
\mathbf
{
C
}_
2
=
\sum
_{
i
=
1
}^
8
\alpha
_{
i,
2
}
\mathbf
{
h
}_
i
$
,以此类推,可以得到任意目标语位置
$
j
$
的上下文向量
$
\mathbf
{
C
}_
j
$
。很容易看出,不同目标语单词的上下文向量对应的源语言词的权重
$
\alpha
_{
i,j
}$
是不同的,不同的注意力权重为不同位置赋予了不同重要性,对应了注意力机制的思想。
\parinterval
图
\ref
{
fig:6-25
}
展示了一个上下文向量的计算过程
实例
。首先,计算目标语第一个单词``Have''与源语中的所有单词的相关性,即注意力权重,对应图中第一列
$
\alpha
_{
i,
1
}$
,则当前时刻所使用的上下文向量
$
\mathbf
{
C
}_
1
=
\sum
_{
i
=
1
}^
8
\alpha
_{
i,
1
}
\mathbf
{
h
}_
i
$
;然后,计算第二个单词``you''的注意力权重对应第二列
$
\alpha
_{
i,
2
}$
,其上下文向量
$
\mathbf
{
C
}_
2
=
\sum
_{
i
=
1
}^
8
\alpha
_{
i,
2
}
\mathbf
{
h
}_
i
$
,以此类推,可以得到任意目标语位置
$
j
$
的上下文向量
$
\mathbf
{
C
}_
j
$
。很容易看出,不同目标语单词的上下文向量对应的源语言词的权重
$
\alpha
_{
i,j
}$
是不同的,不同的注意力权重为不同位置赋予了不同重要性,对应了注意力机制的思想。
%----------------------------------------------
% 图3.10
...
...
@@ -872,14 +872,14 @@ a (\mathbf{s},\mathbf{h}) = \left\{ \begin{array}{ll}
\parinterval
那么,如何理解这个过程?注意力机制的本质又是什么呢?换一个角度来看,实际上,目标语位置
$
j
$
本质上是一个查询,我们希望从源语言端找到与之最匹配的源语言位置,并返回相应的表示结果。为了描述这个问题,可以建立一个查询系统。假设有一个库,里面包含若干个
$
\mathrm
{
key
}$
-
$
\mathrm
{
value
}$
单元,其中
$
\mathrm
{
key
}$
代表这个单元的索引关键字,
$
\mathrm
{
value
}$
代表这个单元的值。比如,对于学生信息系统,
$
\mathrm
{
key
}$
可以是学号,
$
\mathrm
{
value
}$
可以是学生的身高。当输入一个查询
$
\mathrm
{
query
}$
,我们希望这个系统返回与之最匹配的结果。也就是,希望找到匹配的
$
\mathrm
{
key
}$
,并输出其对应的
$
\mathrm
{
value
}$
。比如,当查询某个学生的身高信息时,可以输入学生的学号,之后在库中查询与这个学号相匹配的记录,并把这个记录中的
$
\mathrm
{
value
}$
(即身高)作为结果返回。
\parinterval
图
\ref
{
fig:6-26
}
(a)
展示了一个这样的查询系统。里面包含四个
$
\mathrm
{
key
}$
-
$
\mathrm
{
value
}$
单元,当输入查询
$
\mathrm
{
query
}$
,就把
$
\mathrm
{
query
}$
与这四个
$
\mathrm
{
key
}$
逐个进行匹配,如果完全匹配就返回相应的
$
\mathrm
{
value
}$
。在图中的例子中,
$
\mathrm
{
query
}$
和
$
\mathrm
{
key
}_
3
$
是完全匹配的(因为都是横纹),因此系统返回第三个单元的值,即
$
\mathrm
{
value
}_
3
$
。当然,如果库中没有与
$
\mathrm
{
query
}$
匹配的
$
\mathrm
{
key
}$
,则返回一个空结果。
\parinterval
图
\ref
{
fig:6-26
}
展示了一个这样的查询系统。里面包含四个
$
\mathrm
{
key
}$
-
$
\mathrm
{
value
}$
单元,当输入查询
$
\mathrm
{
query
}$
,就把
$
\mathrm
{
query
}$
与这四个
$
\mathrm
{
key
}$
逐个进行匹配,如果完全匹配就返回相应的
$
\mathrm
{
value
}$
。在图中的例子中,
$
\mathrm
{
query
}$
和
$
\mathrm
{
key
}_
3
$
是完全匹配的(因为都是横纹),因此系统返回第三个单元的值,即
$
\mathrm
{
value
}_
3
$
。当然,如果库中没有与
$
\mathrm
{
query
}$
匹配的
$
\mathrm
{
key
}$
,则返回一个空结果。
%----------------------------------------------
% 图3.10
\begin{figure}
[htp]
\centering
\input
{
./Chapter6/Figures/figure-query-model-corresponding-to-traditional-query-model-vs-attention-mechanism
}
\caption
{
传统查询模型
(a)和注意力机制所对应的查询模型(b)
}
\caption
{
传统查询模型
}
\label
{
fig:6-26
}
\end{figure}
%----------------------------------------------
...
...
@@ -993,7 +993,7 @@ L(\mathbf{Y},\widehat{\mathbf{Y}}) = \sum_{j=1}^n L_{\textrm{ce}}(\mathbf{y}_j,\
\noindent
其中
$
\gamma
$
是手工设定的梯度大小阈值,
$
\|
\cdot
\|
_
2
$
是L2范数,
$
\mathbf
{
w
}
'
$
表示梯度裁剪后的参数。这个公式的含义在于只要梯度大小超过阈值,就按照阈值与当前梯度大小的比例进行放缩。
%%%%%%%%%%%%%%%%%%
\subsubsection
{
学习率策略
}
\parinterval
在公式
\ref
{
eq:6-30
}
中,
$
\alpha
$
决定了每次参数更新时更新的步幅大小,称之为
{
\small\bfnew
{
学习率
}}
\index
{
学习率
}
(Learning Rate)
\index
{
Learning Rate
}
。学习率作为基于梯度方法中的重要超参数,它决定目标函数能否收敛到较好的局部最优点以及收敛的速度。合理的学习率能够使模型快速、稳定地达到较好的状态。但是,如果学习率太小,收敛过程会很慢;而学习率太大,则模型的状态可能会出现震荡,很难达到稳定,甚至使模型无法收敛。图
\ref
{
fig:6-28
}
对比了不同学习率对
损失函数
的影响。
\parinterval
在公式
\ref
{
eq:6-30
}
中,
$
\alpha
$
决定了每次参数更新时更新的步幅大小,称之为
{
\small\bfnew
{
学习率
}}
\index
{
学习率
}
(Learning Rate)
\index
{
Learning Rate
}
。学习率作为基于梯度方法中的重要超参数,它决定目标函数能否收敛到较好的局部最优点以及收敛的速度。合理的学习率能够使模型快速、稳定地达到较好的状态。但是,如果学习率太小,收敛过程会很慢;而学习率太大,则模型的状态可能会出现震荡,很难达到稳定,甚至使模型无法收敛。图
\ref
{
fig:6-28
}
对比了不同学习率对
优化过程
的影响。
%----------------------------------------------
% 图3.10
...
...
@@ -1026,7 +1026,7 @@ L(\mathbf{Y},\widehat{\mathbf{Y}}) = \sum_{j=1}^n L_{\textrm{ce}}(\mathbf{y}_j,\
\end{eqnarray}
%-------
\noindent
另一方面,当模型训练逐渐接近收敛的时候,使用太大学习率会很容易让模型在局部最优解附近震荡,从而错过局部极小,因此需要通过减小学习率来调整更新的步长,以此来不断的逼近局部最优,这一阶段也称为学习率的衰减阶段。学习率衰减的方法有很多,比如指数衰减,余弦衰减等,图
\ref
{
fig:6-29
}
展示的是
{
\small\bfnew
{
分段常数衰减
}}
\index
{
分段常数衰减
}
(Piecewise Constant Decay)
\index
{
Piecewise Constant Decay
}
,即每经过
$
m
$
次更新,学习率衰减为原来的
$
\beta
_
m
$
(
$
\beta
_
m<
1
$
)倍,其中
$
m
$
和
$
\beta
_
m
$
为经验设置的超参。
\noindent
另一方面,当模型训练逐渐接近收敛的时候,使用太大学习率会很容易让模型在局部最优解附近震荡,从而错过局部极小,因此需要通过减小学习率来调整更新的步长,以此来不断的逼近局部最优,这一阶段也称为学习率的衰减阶段。学习率衰减的方法有很多,比如指数衰减,余弦衰减等,图
\ref
{
fig:6-29
}
右侧
展示的是
{
\small\bfnew
{
分段常数衰减
}}
\index
{
分段常数衰减
}
(Piecewise Constant Decay)
\index
{
Piecewise Constant Decay
}
,即每经过
$
m
$
次更新,学习率衰减为原来的
$
\beta
_
m
$
(
$
\beta
_
m<
1
$
)倍,其中
$
m
$
和
$
\beta
_
m
$
为经验设置的超参。
%%%%%%%%%%%%%%%%%%
\subsubsection
{
并行训练
}
\parinterval
机器翻译是自然语言处理中很``重''的任务。因为数据量巨大而且模型较为复杂,模型训练的时间往往很长。比如,使用一千万句的训练数据,性能优异的系统往往需要几天甚至一周的时间。更大规模的数据会导致训练时间更长。特别是使用多层网络同时增加模型容量时(比如增加隐层宽度)时,神经机器翻译的训练会更加缓慢。对于这个问题,一个思路是从模型训练算法上进行改进。比如前面提到的Adam就是一种高效的训练策略。另一种思路是利用多设备进行加速,也称作分布式训练。
...
...
@@ -1377,7 +1377,7 @@ L(\mathbf{Y},\widehat{\mathbf{Y}}) = \sum_{j=1}^n L_{\textrm{ce}}(\mathbf{y}_j,\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection
{
位置编码
}
\parinterval
在使用循环神经网络进行序列的信息提取时,每个时刻的运算都要依赖前一个时刻的输出,具有一定的时序性,这也与语言具有顺序的特点相契合。而采用自注意力机制对源语言和目标语言序列进行处理时,直接对当前位置和序列中的任意位置进行建模,忽略了词之间的顺序关系,例如图
\ref
{
fig:6-41
}
中两个语义不同的句子,通过自注意力得到的表示
$
\
mathbf
{
C
}$
(``机票'')却是相同的。
\parinterval
在使用循环神经网络进行序列的信息提取时,每个时刻的运算都要依赖前一个时刻的输出,具有一定的时序性,这也与语言具有顺序的特点相契合。而采用自注意力机制对源语言和目标语言序列进行处理时,直接对当前位置和序列中的任意位置进行建模,忽略了词之间的顺序关系,例如图
\ref
{
fig:6-41
}
中两个语义不同的句子,通过自注意力得到的表示
$
\
tilde
{
\mathbf
{
h
}
}$
(``机票'')却是相同的。
%----------------------------------------------
% 图3.10
...
...
@@ -1594,7 +1594,7 @@ x_{l+1} = x_l + \digamma (x_l)
\noindent
该公式使用均值
$
\mu
$
和方差
$
\sigma
$
对样本进行平移缩放,将数据规范化为均值为0,方差为1的标准分布。
$
g
$
和
$
b
$
是可学习的参数。
\parinterval
在Transformer中经常使用的层正则化操作有两种结构,分别是
{
\small\bfnew
{
后正则化
}}
\index
{
后正则化
}
(Post-norm)
\index
{
Post-norm
}
和
{
\small\bfnew
{
前正则化
}}
\index
{
前正则化
}
(Pre-norm)
\index
{
Pre-norm
}
。后正则化中先进行残差连接再进行层正则化,而前正则化则是在子层输入之前进行层正则化操作。在很多实践中已经发现,前正则化的方式更有利于信息传递,因此适合训练深层的Transformer模型
\cite
{
WangLearning
}
。
\parinterval
在Transformer中经常使用的层正则化操作有两种结构,分别是
{
\small\bfnew
{
后正则化
}}
\index
{
后正则化
}
(Post-norm)
\index
{
Post-norm
}
和
{
\small\bfnew
{
前正则化
}}
\index
{
前正则化
}
(Pre-norm)
\index
{
Pre-norm
}
,结构如图
\ref
{
fig:6-51
}
。后正则化中先进行残差连接再进行层正则化,而前正则化则是在子层输入之前进行层正则化操作。在很多实践中已经发现,前正则化的方式更有利于信息传递,因此适合训练深层的Transformer模型
\cite
{
WangLearning
}
。
%----------------------------------------------
% 图3.10
...
...
Book/Chapter6/Figures/Big learning rate vs Small learning rate.png
deleted
100644 → 0
查看文件 @
d85642f9
18.4 KB
Book/Chapter6/Figures/figure-A-working-example-of-neural-machine-translation.tex
查看文件 @
4dacb27e
...
...
@@ -4,12 +4,13 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{tikzpicture}
\setlength
{
\base
}{
0.9cm
}
\tikzstyle
{
rnnnode
}
= [rounded corners=1pt,minimum size=0.5
\base
,draw,inner sep=0pt,outer sep=0pt]
\tikzstyle
{
wordnode
}
= [font=
\
tiny
]
\tikzstyle
{
wordnode
}
= [font=
\
scriptsize
]
% RNN translation model
\begin{scope}
[local bounding box=RNNMT]
...
...
@@ -23,8 +24,12 @@
\node
[wordnode,anchor=east]
(init2) at ([xshift=-3.0em]init.west)
{}
;
{
\node
[rnnnode,fill=purple]
(repr) at (enc4)
{}
;
\node
[wordnode]
(label) at ([xshift=3.5em]enc4.east)
{
源语言句子表示
}
;
\draw
[->,dashed,thick]
(label.west) -- (enc4.east);
\node
[wordnode]
(label) at ([yshift=2.5em]enc4.north)
{
\begin{tabular}
{
c
}
源语言句
\\
子表示
\end{tabular}
}
;
\draw
[->,dashed,thick]
(label.south) -- (enc4.north);
}
\node
[wordnode,below=0pt of eemb1,font=\scriptsize]
(encwordin1)
{
我
}
;
...
...
@@ -37,7 +42,7 @@
% RNN Decoder
\foreach
\x
in
{
1,2,...,4
}
\node
[rnnnode,minimum height=0.5\base,fill=green!30!white,anchor=south]
(demb
\x
) at ([xshift=
0.0em,yshift=3.0
em]enc
\x
.north)
{}
;
\node
[rnnnode,minimum height=0.5\base,fill=green!30!white,anchor=south]
(demb
\x
) at ([xshift=
9.0em,yshift=-3.5
em]enc
\x
.north)
{}
;
\foreach
\x
in
{
1,2,...,4
}
\node
[rnnnode,fill=blue!30!white,anchor=south]
(dec
\x
) at ([yshift=0.5
\base
]demb
\x
.north)
{}
;
\foreach
\x
in
{
1,2,...,4
}
...
...
@@ -86,7 +91,7 @@
\draw
[-latex']
(dec
\x
.east) to (dec
\y
.west);
}
\coordinate
(bridge) at ([yshift=-1.15
\base
]demb2);
\draw
[-latex']
(enc4.
north) .. controls +(north:0.4
\base
) and +(east:0.5
\base
) .. (bridge) .. controls +(west:2.4
\base
) and +(west:0.5
\base
) ..
(dec1.west);
\draw
[-latex']
(enc4.
east) --
(dec1.west);
\end{scope}
\end{tikzpicture}
...
...
@@ -124,3 +129,4 @@
Book/Chapter6/Figures/figure-Calculation-of-context-vector-C.tex
查看文件 @
4dacb27e
...
...
@@ -50,7 +50,7 @@
\vspace
{
-1.0em
}
\footnotesize
{
\begin{eqnarray}
\t
extbf
{
C
}
(
\textrm
{
''机票''
}
)
&
=
&
0.2
\times
\textbf
{
h
}
(
\textrm
{
``沈阳''
}
) + 0.3
\times
\textbf
{
h
}
(
\textrm
{
``到''
}
) +
\nonumber
\\
\t
ilde
{
\mathbf
{
h
}}
(
\textrm
{
''机票''
}
)
&
=
&
0.2
\times
\textbf
{
h
}
(
\textrm
{
``沈阳''
}
) + 0.3
\times
\textbf
{
h
}
(
\textrm
{
``到''
}
) +
\nonumber
\\
&
&
0.1
\times
\textbf
{
h
}
(
\textrm
{
``广州''
}
) + ... + 0.3
\times
\textbf
{
h
}
(
\textrm
{
``机票''
}
)
\nonumber
\end{eqnarray}
}
\ No newline at end of file
Book/Chapter6/Figures/figure-Generate-summary.tex
查看文件 @
4dacb27e
...
...
@@ -16,7 +16,7 @@ Jenson Button was denied his 100th race for McLaren after an ERS prevented him f
}
;
%译文1--------------mt1
\node
[font=\small]
(mt1) at ([xshift=0em,yshift=-16.8em]original0.south)
{
系统生成
\quad
}
;
\node
[font=\small]
(mt-2) at ([xshift=0em,yshift=-0.5em]mt1.south)
{
\quad
的摘要:
}
;
\node
[font=\small]
(mt-2) at ([xshift=0em,yshift=-0.5em]mt1.south)
{
的摘要:
\quad
}
;
\node
[font=\small]
(ts1) at ([xshift=0em,yshift=-3em]original1.south)
{
\begin{tabular}
[t]
{
l
}
\parbox
{
32em
}{
...
...
Book/Chapter6/Figures/figure-Multi-Head-Attention-Model.tex
查看文件 @
4dacb27e
...
...
@@ -4,28 +4,28 @@
\begin{tikzpicture}
\begin{scope}
\node
[anchor=west,draw=black!30,inner sep=4pt,fill=ugreen!20!white] (Linear0) at (0,0)
{
\
tiny
{
Linear
}}
;
\node
[anchor=south west,draw=black!50,fill=ugreen!20!white,draw,inner sep=4pt] (Linear01) at ([shift=
{
(-0.2em,-0.2em)
}
]Linear0.south west)
{
\
tiny
{
Linear
}}
;
\node
[anchor=south west,fill=ugreen!20!white,draw,inner sep=4pt] (Linear02) at ([shift=
{
(-0.2em,-0.2em)
}
]Linear01.south west)
{
\
tiny
{
Linear
}}
;
\node
[anchor=west,draw=black!30,inner sep=4pt,fill=ugreen!20!white] (Linear0) at (0,0)
{
\
footnotesize
{
Linear
}}
;
\node
[anchor=south west,draw=black!50,fill=ugreen!20!white,draw,inner sep=4pt] (Linear01) at ([shift=
{
(-0.2em,-0.2em)
}
]Linear0.south west)
{
\
footnotesize
{
Linear
}}
;
\node
[anchor=south west,fill=ugreen!20!white,draw,inner sep=4pt] (Linear02) at ([shift=
{
(-0.2em,-0.2em)
}
]Linear01.south west)
{
\
footnotesize
{
Linear
}}
;
\node
[anchor=north] (Q) at ([xshift=0em,yshift=-1em]Linear02.south)
{
\footnotesize
{$
\mathbf
{
Q
}$}}
;
\node
[anchor=west,draw=black!30,inner sep=4pt,fill=ugreen!20!white] (Linear1) at ([xshift=1.5em]Linear0.east)
{
\
tiny
{
Linear
}}
;
\node
[anchor=south west,draw=black!50,fill=ugreen!20!white,draw,inner sep=4pt] (Linear11) at ([shift=
{
(-0.2em,-0.2em)
}
]Linear1.south west)
{
\
tiny
{
Linear
}}
;
\node
[anchor=south west,fill=ugreen!20!white,draw,inner sep=4pt] (Linear12) at ([shift=
{
(-0.2em,-0.2em)
}
]Linear11.south west)
{
\
tiny
{
Linear
}}
;
\node
[anchor=west,draw=black!30,inner sep=4pt,fill=ugreen!20!white] (Linear1) at ([xshift=1.5em]Linear0.east)
{
\
footnotesize
{
Linear
}}
;
\node
[anchor=south west,draw=black!50,fill=ugreen!20!white,draw,inner sep=4pt] (Linear11) at ([shift=
{
(-0.2em,-0.2em)
}
]Linear1.south west)
{
\
footnotesize
{
Linear
}}
;
\node
[anchor=south west,fill=ugreen!20!white,draw,inner sep=4pt] (Linear12) at ([shift=
{
(-0.2em,-0.2em)
}
]Linear11.south west)
{
\
footnotesize
{
Linear
}}
;
\node
[anchor=north] (K) at ([xshift=0em,yshift=-1em]Linear12.south)
{
\footnotesize
{$
\mathbf
{
K
}$}}
;
\node
[anchor=west,draw=black!30,inner sep=4pt,fill=ugreen!20!white] (Linear2) at ([xshift=1.5em]Linear1.east)
{
\
tiny
{
Linear
}}
;
\node
[anchor=south west,draw=black!50,fill=ugreen!20!white,draw,inner sep=4pt] (Linear21) at ([shift=
{
(-0.2em,-0.2em)
}
]Linear2.south west)
{
\
tiny
{
Linear
}}
;
\node
[anchor=south west,fill=ugreen!20!white,draw,inner sep=4pt] (Linear22) at ([shift=
{
(-0.2em,-0.2em)
}
]Linear21.south west)
{
\
tiny
{
Linear
}}
;
\node
[anchor=west,draw=black!30,inner sep=4pt,fill=ugreen!20!white] (Linear2) at ([xshift=1.5em]Linear1.east)
{
\
footnotesize
{
Linear
}}
;
\node
[anchor=south west,draw=black!50,fill=ugreen!20!white,draw,inner sep=4pt] (Linear21) at ([shift=
{
(-0.2em,-0.2em)
}
]Linear2.south west)
{
\
footnotesize
{
Linear
}}
;
\node
[anchor=south west,fill=ugreen!20!white,draw,inner sep=4pt] (Linear22) at ([shift=
{
(-0.2em,-0.2em)
}
]Linear21.south west)
{
\
footnotesize
{
Linear
}}
;
\node
[anchor=north] (V) at ([xshift=0em,yshift=-1em]Linear22.south)
{
\footnotesize
{$
\mathbf
{
V
}$}}
;
\node
[anchor=south,draw=black!30,minimum width=
9em,inner sep=4pt,fill=blue!20!white] (Scale) at ([yshift=1em]Linear1.north)
{
\tiny
{
Scaled Dot-Product Attention
}}
;
\node
[anchor=south west,draw=black!50,minimum width=
9em,fill=blue!20!white,draw,inner sep=4pt] (Scale1) at ([shift=
{
(-0.2em,-0.2em)
}
]Scale.south west)
{
\tiny
{
Scaled Dot-Product Attention
}}
;
\node
[anchor=south west,fill=blue!20!white,draw,minimum width=
9em,inner sep=4pt] (Scale2) at ([shift=
{
(-0.2em,-0.2em)
}
]Scale1.south west)
{
\tiny
{
Scaled Dot-Product Attention
}}
;
\node
[anchor=south,draw=black!30,minimum width=
12em,minimum height=2em,inner sep=4pt,fill=blue!20!white] (Scale) at ([yshift=1em]Linear1.north)
{
\footnotesize
{
Scaled Dot-Product Attention
}}
;
\node
[anchor=south west,draw=black!50,minimum width=
12em,minimum height=2em,fill=blue!20!white,draw,inner sep=4pt] (Scale1) at ([shift=
{
(-0.2em,-0.2em)
}
]Scale.south west)
{
\footnotesize
{
Scaled Dot-Product Attention
}}
;
\node
[anchor=south west,fill=blue!20!white,draw,minimum width=
12em,minimum height=2em,inner sep=4pt] (Scale2) at ([shift=
{
(-0.2em,-0.2em)
}
]Scale1.south west)
{
\footnotesize
{
Scaled Dot-Product Attention
}}
;
\node
[anchor=south,draw,minimum width=4em,inner sep=4pt,fill=yellow!30] (Concat) at ([yshift=1em]Scale2.north)
{
\
tiny
{
Concat
}}
;
\node
[anchor=south,draw,minimum width=4em,inner sep=4pt,fill=yellow!30] (Concat) at ([yshift=1em]Scale2.north)
{
\
footnotesize
{
Concat
}}
;
\node
[anchor=south,draw,minimum width=4em,inner sep=4pt,fill=ugreen!20!white] (Linear) at ([yshift=1em]Concat.north)
{
\
tiny
{
Linear
}}
;
\node
[anchor=south,draw,minimum width=4em,inner sep=4pt,fill=ugreen!20!white] (Linear) at ([yshift=1em]Concat.north)
{
\
footnotesize
{
Linear
}}
;
\draw
[->] ([yshift=0.1em]Q.north) -- ([yshift=-0.1em]Linear02.south);
...
...
Book/Chapter6/Figures/figure-Point-product-attention-model.tex
查看文件 @
4dacb27e
...
...
@@ -23,11 +23,11 @@
\draw
[->] ([yshift=0.1em]Scale3.north) -- ([yshift=-0.1em]Mask.south);
\draw
[->] ([yshift=0.1em]Mask.north) -- ([yshift=-0.1em]SoftMax.south);
\draw
[->] ([yshift=0.1em]SoftMax.north) -- ([yshift=0.9em]SoftMax.north);
\draw
[->] ([yshift=0.1em]V1.north) -- ([yshift=9.
1
em]V1.north);
\draw
[->] ([yshift=0.1em]V1.north) -- ([yshift=9.
3
em]V1.north);
\draw
[->] ([yshift=0.1em]MatMul1.north) -- ([yshift=0.8em]MatMul1.north);
{
\node
[anchor=east] (line1) at ([xshift=-
3
em,yshift=1em]MatMul.west)
{
\scriptsize
{
自注意力机制的Query
}}
;
\node
[anchor=east] (line1) at ([xshift=-
4
em,yshift=1em]MatMul.west)
{
\scriptsize
{
自注意力机制的Query
}}
;
\node
[anchor=north west] (line2) at ([yshift=0.3em]line1.south west)
{
\scriptsize
{
Key和Value均来自同一句子
}}
;
\node
[anchor=north west] (line3) at ([yshift=0.3em]line2.south west)
{
\scriptsize
{
编码-解码注意力机制
}}
;
\node
[anchor=north west] (line4) at ([yshift=0.3em]line3.south west)
{
\scriptsize
{
与前面讲的一样
}}
;
...
...
@@ -60,7 +60,7 @@
{
\node
[rectangle,inner sep=0.2em,rounded corners=1pt,fill=green!10,drop shadow,draw=ugreen] [fit = (line1) (line2) (line3) (line4)] (box1)
{}
;
\node
[rectangle,inner sep=0.1em,rounded corners=1pt,very thick,dotted,draw=ugreen] [fit = (Q1) (K1) (V1)] (box0)
{}
;
\draw
[->,dotted,very thick,ugreen] ([yshift=-1.5em,xshift=
0.8
em]box1.east) -- ([yshift=-1.5em,xshift=0.1em]box1.east);
\draw
[->,dotted,very thick,ugreen] ([yshift=-1.5em,xshift=
1.2
em]box1.east) -- ([yshift=-1.5em,xshift=0.1em]box1.east);
}
{
\node
[rectangle,inner sep=0.2em,rounded corners=1pt,fill=blue!20!white,drop shadow,draw=blue] [fit = (line11) (line12) (line13)] (box2)
{}
;
...
...
@@ -74,7 +74,7 @@
{
\node
[rectangle,inner sep=0.2em,rounded corners=1pt,fill=red!10,drop shadow,draw=red] [fit = (line31) (line32) (line33) (line34)] (box4)
{}
;
\draw
[->,dotted,very thick,red] ([yshift=-1.
5em,xshift=1.5em]box4.east) -- ([yshift=-1.5
em,xshift=0.1em]box4.east);
\draw
[->,dotted,very thick,red] ([yshift=-1.
2em,xshift=2.2em]box4.east) -- ([yshift=-1.2
em,xshift=0.1em]box4.east);
}
{
...
...
Book/Chapter6/Figures/figure-Query-model-corresponding-to-traditional-query-model-vs-attention-mechanism.tex
查看文件 @
4dacb27e
...
...
@@ -28,46 +28,7 @@
\draw
[->] ([yshift=1pt]query.north) .. controls +(90:2em) and +(90:2em) .. ([yshift=1pt]key3.north) node [pos=0.5,below,yshift=0.2em]
{
\scriptsize
{
匹配
}}
;
\node
[anchor=north] (result) at (value3.south)
{
\scriptsize
{
{
\red
返回结果
}
}}
;
\node
[anchor=north] (result2) at ([xshift=-2em,yshift=-2em]value2.south)
{
\footnotesize
{
{
(a)索引的查询过程
}
}}
;
\end{scope}
\end{tikzpicture}
\begin{tikzpicture}
\begin{scope}
\tikzstyle
{
rnode
}
= [draw,minimum width=3em,minimum height=1.2em]
\node
[rnode,anchor=south west,fill=red!20!white] (value1) at (0,0)
{
\scriptsize
{
value
$_
1
$}}
;
\node
[rnode,anchor=south west,fill=red!20!white] (value2) at ([xshift=1em]value1.south east)
{
\scriptsize
{
value
$_
2
$}}
;
\node
[rnode,anchor=south west,fill=red!20!white] (value3) at ([xshift=1em]value2.south east)
{
\scriptsize
{
value
$_
3
$}}
;
\node
[rnode,anchor=south west,fill=red!20!white] (value4) at ([xshift=1em]value3.south east)
{
\scriptsize
{
value
$_
4
$}}
;
\node
[rnode,anchor=south west,pattern=north east lines] (key1) at ([yshift=0.2em]value1.north west)
{}
;
\node
[rnode,anchor=south west,pattern=dots] (key2) at ([yshift=0.2em]value2.north west)
{}
;
\node
[rnode,anchor=south west,pattern=horizontal lines] (key3) at ([yshift=0.2em]value3.north west)
{}
;
\node
[rnode,anchor=south west,pattern=crosshatch dots] (key4) at ([yshift=0.2em]value4.north west)
{}
;
\node
[fill=white,inner sep=1pt] (key1label) at (key1)
{
\scriptsize
{
key
$_
1
$}}
;
\node
[fill=white,inner sep=1pt] (key1label) at (key2)
{
\scriptsize
{
key
$_
2
$}}
;
\node
[fill=white,inner sep=1pt] (key1label) at (key3)
{
\scriptsize
{
key
$_
3
$}}
;
\node
[fill=white,inner sep=1pt] (key1label) at (key4)
{
\scriptsize
{
key
$_
4
$}}
;
\node
[rnode,anchor=east,pattern=vertical lines] (query) at ([xshift=-3em]key1.west)
{}
;
\node
[anchor=east] (querylabel) at ([xshift=-0.2em]query.west)
{
\scriptsize
{
query
}}
;
\draw
[->] ([yshift=1pt,xshift=6pt]query.north) .. controls +(90:1em) and +(90:1em) .. ([yshift=1pt]key1.north);
\draw
[->] ([yshift=1pt,xshift=3pt]query.north) .. controls +(90:1.5em) and +(90:1.5em) .. ([yshift=1pt]key2.north);
\draw
[->] ([yshift=1pt]query.north) .. controls +(90:2em) and +(90:2em) .. ([yshift=1pt]key3.north);
\draw
[->] ([yshift=1pt,xshift=-3pt]query.north) .. controls +(90:2.5em) and +(90:2.5em) .. ([yshift=1pt]key4.north);
\node
[anchor=south east] (alpha1) at (key1.north east)
{
\scriptsize
{$
\alpha
_
1
$}}
;
\node
[anchor=south east] (alpha2) at (key2.north east)
{
\scriptsize
{$
\alpha
_
2
$}}
;
\node
[anchor=south east] (alpha3) at (key3.north east)
{
\scriptsize
{$
\alpha
_
3
$}}
;
\node
[anchor=south east] (alpha4) at (key4.north east)
{
\scriptsize
{$
\alpha
_
4
$}}
;
\node
[anchor=north] (result) at ([xshift=-1.5em]value2.south east)
{
\scriptsize
{{
\red
返回结果
}
=
$
\alpha
_
1
\cdot
\textrm
{
value
}_
1
+
\alpha
_
2
\cdot
\textrm
{
value
}_
2
+
\alpha
_
3
\cdot
\textrm
{
value
}_
3
+
\alpha
_
4
\cdot
\textrm
{
value
}_
4
$}}
;
\node
[anchor=north] (result2) at ([xshift=-1em,yshift=-2.5em]value2.south)
{
\footnotesize
{
{
(b)注意力机制查询过程
}
}}
;
\end{scope}
\end{tikzpicture}
\ No newline at end of file
Book/Chapter6/Figures/figure-convergence&lr.tex
查看文件 @
4dacb27e
...
...
@@ -2,14 +2,14 @@
\begin{tikzpicture}
\begin{axis}
[
name=s1,
width=7cm, height=4cm,
width=7cm, height=4
.5
cm,
xtick=
{
-4,-3,-2,-1,0,1,2,3,4
}
,
ytick=
{
0,1,...,4
}
,
xticklabel style=
{
opacity=0
}
,
yticklabel style=
{
opacity=0
}
,
xlabel=
{$
w
$}
,
ylabel=
{$
L
(
w
)
$}
,
axis line style=
{
->
}
,
axis line style=
{
->
,very thick
}
,
xlabel style=
{
xshift=2.2cm,yshift=1.2cm
}
,
ylabel style=
{
rotate=-90,xshift=1.5cm,yshift=1.6cm
}
,
tick align=inside,
...
...
@@ -19,7 +19,7 @@
xmin=-4,
xmax=4,
ymin=0,
ymax=4]
ymax=4
.5
]
\addplot
[dashed,ublue,thick]
{
x
^
2/4
}
;
\addplot
[quiver=
{
u=1,v=x/2,scale arrows = 0.25
}
,domain=-4:-0.3,->,samples=10,red!60,ultra thick]
{
x
^
2/4
}
;
\addplot
[draw=ublue,fill=red,mark=*] coordinates
{
(0,0)
}
;
...
...
@@ -29,14 +29,14 @@
anchor=south,
xshift=6cm,
yshift=0cm,
width=7cm, height=4cm,
width=7cm, height=4
.5
cm,
xtick=
{
-4,-3,-2,-1,0,1,2,3,4
}
,
ytick=
{
0,1,...,4
}
,
xticklabel style=
{
opacity=0
}
,
yticklabel style=
{
opacity=0
}
,
xlabel=
{$
w
$}
,
ylabel=
{$
L
(
w
)
$}
,
axis line style=
{
->
}
,
axis line style=
{
->
,very thick
}
,
xlabel style=
{
xshift=2.2cm,yshift=1.2cm
}
,
ylabel style=
{
rotate=-90,xshift=1.5cm,yshift=1.6cm
}
,
tick align=inside,
...
...
@@ -46,7 +46,7 @@
xmin=-4,
xmax=4,
ymin=0,
ymax=4]
ymax=4
.5
]
\addplot
[dashed,ublue,thick]
{
x
^
2/4
}
;
\addplot
[quiver=
{
u=-x-(x/abs(x))*(1+x
^
2-4)
^
(1/2),v=-0.7
}
,domain=-4:3.6,->,samples=2,red!60,ultra thick]
{
x
^
2/4
}
;
\addplot
[quiver=
{
u=-x-(x/abs(x))*(1+x
^
2-4)
^
(1/2),v=-0.7
}
,domain=-3.13:2.6,->,samples=2,red!60,ultra thick]
{
x
^
2/4
}
;
...
...
Book/Chapter6/Figures/figure-transformer.tex
查看文件 @
4dacb27e
...
...
@@ -62,5 +62,8 @@
\node
[rectangle,inner sep=0.7em,rounded corners=1pt,very thick,dotted,draw=ugreen!70] [fit = (sa1) (res1) (ffn1) (res2)] (box0)
{}
;
\node
[rectangle,inner sep=0.7em,rounded corners=1pt,very thick,dotted,draw=red!60] [fit = (sa2) (res3) (res5)] (box1)
{}
;
\node
[ugreen] (count) at ([xshift=-1.7em,yshift=-1em]encoder.south)
{$
6
\times
$}
;
\node
[red] (count) at ([xshift=11em,yshift=0em]decoder.south)
{$
\times
6
$}
;
\end{scope}
\end{tikzpicture}
\ No newline at end of file
Book/mt-book-xelatex.tex
查看文件 @
4dacb27e
...
...
@@ -127,8 +127,8 @@
%\include{Chapter3/chapter3}
%\include{Chapter4/chapter4}
%\include{Chapter5/chapter5}
%
\include{Chapter6/chapter6}
\include
{
Chapter7/chapter7
}
\include
{
Chapter6/chapter6
}
%
\include{Chapter7/chapter7}
%\include{ChapterAppend/chapterappend}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论