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
511e5866
Commit
511e5866
authored
May 09, 2020
by
zengxin
Browse files
Options
Browse Files
Download
Plain Diff
合并分支 'zengxin' 到 'caorunzhe'
chapter6 fig 查看合并请求
!102
parents
f61614e4
4dacb27e
隐藏空白字符变更
内嵌
并排
正在显示
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
查看文件 @
511e5866
...
...
@@ -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
查看文件 @
f61614e4
18.4 KB
Book/Chapter6/Figures/figure-A-working-example-of-neural-machine-translation.tex
查看文件 @
511e5866
...
...
@@ -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
查看文件 @
511e5866
...
...
@@ -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
查看文件 @
511e5866
...
...
@@ -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
查看文件 @
511e5866
...
...
@@ -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
查看文件 @
511e5866
...
...
@@ -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
查看文件 @
511e5866
...
...
@@ -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
查看文件 @
511e5866
...
...
@@ -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
查看文件 @
511e5866
...
...
@@ -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
查看文件 @
511e5866
...
...
@@ -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
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论