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
48eda392
Commit
48eda392
authored
Nov 27, 2020
by
孟霞
Browse files
Options
Browse Files
Download
Plain Diff
合并分支 'mengxia' 到 'caorunzhe'
Mengxia 查看合并请求
!496
parents
7e6bba70
5e72e252
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
20 行增加
和
20 行删除
+20
-20
Chapter9/chapter9.tex
+20
-20
没有找到文件。
Chapter9/chapter9.tex
查看文件 @
48eda392
...
...
@@ -158,7 +158,7 @@
\subsubsection
{
2. 深度学习的效果
}
\parinterval
相比于传统的基于特征工程的方法,基于深度学习的模型更加方便、通用,在系统性能上也普遍更优。这里以语言建模任务为例。语言建模的目的是开发一个模型来描述词串出现的可能性(见
{
\chaptertwo
}
)。这个任务已经有着很长时间的历史。表
\ref
{
tab:9-1
}
给出了不同方法在常用的PTB数据集上的困惑度结果
\footnote
{
困惑度越低
标
明语言建模的效果越好。
}
。传统的
$
n
$
-gram语言模型由于面临维度灾难和数据稀疏问题,最终语言模型的性能并不是很好。而在深度学习模型中,通过引入循环神经网络等结构,所得到的语言模型可以更好地描述序列生成的问题。而最新的基于Transformer架构的语言模型将PPL从最初的178.0 下降到了惊人的35.7。可见深度学习为这个任务带来的进步是巨大的。
\parinterval
相比于传统的基于特征工程的方法,基于深度学习的模型更加方便、通用,在系统性能上也普遍更优。这里以语言建模任务为例。语言建模的目的是开发一个模型来描述词串出现的可能性(见
{
\chaptertwo
}
)。这个任务已经有着很长时间的历史。表
\ref
{
tab:9-1
}
给出了不同方法在常用的PTB数据集上的困惑度结果
\footnote
{
困惑度越低
表
明语言建模的效果越好。
}
。传统的
$
n
$
-gram语言模型由于面临维度灾难和数据稀疏问题,最终语言模型的性能并不是很好。而在深度学习模型中,通过引入循环神经网络等结构,所得到的语言模型可以更好地描述序列生成的问题。而最新的基于Transformer架构的语言模型将PPL从最初的178.0 下降到了惊人的35.7。可见深度学习为这个任务带来的进步是巨大的。
%----------------------------------------------------------------------------------------------------
\begin{table}
[htp]
...
...
@@ -400,7 +400,7 @@
\subsubsection
{
5. 线性映射
}
\parinterval
{
\small\sffamily\bfseries
{
线性映射
}}
\index
{
线性映射
}
( Linear Mapping)
\index
{
Linear Mapping
}
或
{
\small\sffamily\bfseries
{
线性变换
}}
\index
{
线性变换
}
(Linear Transformation)
\index
{
Linear Transformation
}
是
从
一个向量空间V到另一个向量空间W的映射函数
$
f:v
\rightarrow
w
$
,且该映射函数保持加法运算和数量乘法运算,即对于空间V中任何两个向量
$
{
\mathbi
{
u
}}
$
和
$
{
\mathbi
{
v
}}
$
以及任何标量
$
c
$
,始终符合公式
\eqref
{
eq:9-9
}
和公式
\eqref
{
eq:9-10
}
:
\parinterval
{
\small\sffamily\bfseries
{
线性映射
}}
\index
{
线性映射
}
( Linear Mapping)
\index
{
Linear Mapping
}
或
{
\small\sffamily\bfseries
{
线性变换
}}
\index
{
线性变换
}
(Linear Transformation)
\index
{
Linear Transformation
}
是一个向量空间V到另一个向量空间W的映射函数
$
f:v
\rightarrow
w
$
,且该映射函数保持加法运算和数量乘法运算,即对于空间V中任何两个向量
$
{
\mathbi
{
u
}}
$
和
$
{
\mathbi
{
v
}}
$
以及任何标量
$
c
$
,始终符合公式
\eqref
{
eq:9-9
}
和公式
\eqref
{
eq:9-10
}
:
\begin{eqnarray}
f(
{
\mathbi
{
u
}}
+
{
\mathbi
{
v
}}
)
&
=
&
f(
{
\mathbi
{
u
}}
)+f(
{
\mathbi
{
v
}}
)
\label
{
eq:9-9
}
\\
f(c
{
\mathbi
{
v
}}
)
&
=
&
cf(
{
\mathbi
{
v
}}
)
...
...
@@ -578,7 +578,7 @@ x_1\cdot w_1+x_2\cdot w_2+x_3\cdot w_3 & = & 0\cdot 1+0\cdot 1+1\cdot 1 \nonumbe
\begin{figure}
[htp]
\centering
\input
{
./Chapter9/Figures/figure-perceptron-to-predict-2
}
\caption
{
预测是否去剧场的感知机(
改变权重
)
}
\caption
{
预测是否去剧场的感知机(
权重不同
)
}
\label
{
fig:9-7
}
\end{figure}
%-------------------------------------------
...
...
@@ -764,12 +764,12 @@ x_1\cdot w_1+x_2\cdot w_2+x_3\cdot w_3 & = & 0\cdot 1+0\cdot 1+1\cdot 1 \nonumbe
\begin{figure}
[htp]
\centering
\input
{
./Chapter9/Figures/figure-four-layers-of-neural-network
}
\caption
{
具有四层神经元的(三层)
神经网络
}
\caption
{
三层
神经网络
}
\label
{
fig:9-17
}
\end{figure}
%-------------------------------------------
\parinterval
在多层神经网络中,通常包括输入层、输出层和至少一个隐藏层。图
\ref
{
fig:9-17
}
展示了一个
由四层神经网络构成的模型,包括输入层
、输出层和两个隐藏层。
\\
\parinterval
在多层神经网络中,通常包括输入层、输出层和至少一个隐藏层。图
\ref
{
fig:9-17
}
展示了一个
三层神经网络,包括输入层
\footnote
{
由于输入层不存在神经元,因此在计算神经网络层数时不将其包括在内。
}
、输出层和两个隐藏层。
\\
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
...
...
@@ -1040,23 +1040,23 @@ f(x)=\begin{cases} 0 & x\le 0 \\x & x>0\end{cases}
\begin{tabular}
{
l | l
}
\rule
{
0pt
}{
15pt
}
函数
&
描述
\\
\hline
\rule
{
0pt
}{
15pt
}
\texttt
{
a.Reshape(o,s)
}
&
把
$
{
\mathbi
{
a
}}
$
变换成阶为o、形状为s的张量
\\
\rule
{
0pt
}{
15pt
}
\texttt
{
a.Get(pos)
}
&
取张量中位置为pos的元素
\\
\rule
{
0pt
}{
15pt
}
\texttt
{
a.Set(v,pos)
}
&
把张量中位置为pos的元素值设为v
\\
\rule
{
0pt
}{
15pt
}
\texttt
{
a.Dump(file)
}
&
把张量存到file中,file为文件句柄
\\
\rule
{
0pt
}{
15pt
}
\texttt
{
a.Read(file)
}
&
从file中读取张量,file为文件句柄
\\
\rule
{
0pt
}{
15pt
}
\texttt
{
a.Reshape(o,s)
}
&
把
张量
$
{
\mathbi
{
a
}}
$
变换成阶为o、形状为s的张量
\\
\rule
{
0pt
}{
15pt
}
\texttt
{
a.Get(pos)
}
&
取张量
$
{
\mathbi
{
a
}}
$
中位置为pos的元素
\\
\rule
{
0pt
}{
15pt
}
\texttt
{
a.Set(v,pos)
}
&
把张量
$
{
\mathbi
{
a
}}
$
中位置为pos的元素值设为v
\\
\rule
{
0pt
}{
15pt
}
\texttt
{
a.Dump(file)
}
&
把张量
$
{
\mathbi
{
a
}}
$
存到file中,file为文件句柄
\\
\rule
{
0pt
}{
15pt
}
\texttt
{
a.Read(file)
}
&
从file中读取张量
$
{
\mathbi
{
a
}}
$
,file为文件句柄
\\
\rule
{
0pt
}{
15pt
}
\texttt
{
Power(a,p)
}
&
计算指数
$
a
^
p
$
\\
\rule
{
0pt
}{
15pt
}
\texttt
{
Linear(a,s,b)
}
&
计算
${
\mathbi
{
a
}}
\ast
s
+
b
$
,s和b都是一个实数
\\
\rule
{
0pt
}{
15pt
}
\texttt
{
CopyValue(a)
}
&
构建
$
{
\mathbi
{
a
}}
$
的一个拷贝
\\
\rule
{
0pt
}{
15pt
}
\texttt
{
ReduceMax(a,d)
}
&
对
$
{
\mathbi
{
a
}}
$
沿着方向d进行规约,得到最大值
\\
\rule
{
0pt
}{
15pt
}
\texttt
{
ReduceSum(a,d)
}
&
对
$
{
\mathbi
{
a
}}
$
沿着方向d进行规约,得到和
\\
\rule
{
0pt
}{
15pt
}
\texttt
{
CopyValue(a)
}
&
构建
张量
$
{
\mathbi
{
a
}}
$
的一个拷贝
\\
\rule
{
0pt
}{
15pt
}
\texttt
{
ReduceMax(a,d)
}
&
对
张量
$
{
\mathbi
{
a
}}
$
沿着方向d进行规约,得到最大值
\\
\rule
{
0pt
}{
15pt
}
\texttt
{
ReduceSum(a,d)
}
&
对
张量
$
{
\mathbi
{
a
}}
$
沿着方向d进行规约,得到和
\\
\rule
{
0pt
}{
15pt
}
\texttt
{
Concatenate(a,b,d)
}
&
把两个张量
$
{
\mathbi
{
a
}}
$
和
$
{
\mathbi
{
b
}}
$
沿d方向级联
\\
\rule
{
0pt
}{
15pt
}
\texttt
{
Merge(a,d)
}
&
对张量
$
{
\mathbi
{
a
}}
$
沿d方向合并
\\
\rule
{
0pt
}{
15pt
}
\texttt
{
Split(a,d,n)
}
&
对张量
$
{
\mathbi
{
a
}}
$
沿d方向分裂成n份
\\
\rule
{
0pt
}{
15pt
}
\texttt
{
Sigmoid(a)
}
&
对
${
\mathbi
{
a
}}$
进行Sigmoid变换
\\
\rule
{
0pt
}{
15pt
}
\texttt
{
Softmax(a)
}
&
对
$
{
\mathbi
{
a
}}
$
进行Softmax变换,沿最后一个方向
\\
\rule
{
0pt
}{
15pt
}
\texttt
{
HardTanh(a)
}
&
对
$
{
\mathbi
{
a
}}
$
进行hard Tanh变换(双曲正切的近似)
\\
\rule
{
0pt
}{
15pt
}
\texttt
{
Rectify(a)
}
&
对
$
{
\mathbi
{
a
}}
$
进行ReLU变换
\\
\rule
{
0pt
}{
15pt
}
\texttt
{
Sigmoid(a)
}
&
对
张量
${
\mathbi
{
a
}}$
进行Sigmoid变换
\\
\rule
{
0pt
}{
15pt
}
\texttt
{
Softmax(a)
}
&
对
张量
$
{
\mathbi
{
a
}}
$
进行Softmax变换,沿最后一个方向
\\
\rule
{
0pt
}{
15pt
}
\texttt
{
HardTanh(a)
}
&
对
张量
$
{
\mathbi
{
a
}}
$
进行hard Tanh变换(双曲正切的近似)
\\
\rule
{
0pt
}{
15pt
}
\texttt
{
Rectify(a)
}
&
对
张量
$
{
\mathbi
{
a
}}
$
进行ReLU变换
\\
\end{tabular}
\end{table}
%--------------------------------------------------------------------
...
...
@@ -1946,7 +1946,7 @@ z_t&=&\gamma z_{t-1}+(1-\gamma) \frac{\partial J}{\partial {\theta}_t} \cdot \f
\label
{
eq:9-120
}
\end{eqnarray}
\noindent
这里,exp(
$
\cdot
$
)表示指数函数。Softmax函数是一个典型的
标准
化函数,它可以将输入的向量的每一维都转化为0-1之间的数,同时保证所有维的和等于1。Softmax的另一个优点是,它本身(对于输出的每一维)都是可微的(如图
\ref
{
fig:softmax
}
所示),因此可以直接使用基于梯度的方法进行优化。实际上,Softmax经常被用于分类任务。也可以把机器翻译中目标语单词的生成看作一个分类问题,它的类别数是|
$
V
$
|。
\noindent
这里,exp(
$
\cdot
$
)表示指数函数。Softmax函数是一个典型的
归一
化函数,它可以将输入的向量的每一维都转化为0-1之间的数,同时保证所有维的和等于1。Softmax的另一个优点是,它本身(对于输出的每一维)都是可微的(如图
\ref
{
fig:softmax
}
所示),因此可以直接使用基于梯度的方法进行优化。实际上,Softmax经常被用于分类任务。也可以把机器翻译中目标语单词的生成看作一个分类问题,它的类别数是|
$
V
$
|。
%----------------------------------------------
\begin{figure}
[htp]
...
...
@@ -1965,7 +1965,7 @@ z_t&=&\gamma z_{t-1}+(1-\gamma) \frac{\partial J}{\partial {\theta}_t} \cdot \f
\parinterval
值得注意的是,在FNNLM中,单词已经不再是一个孤立的符号串,而是被表示为一个实数向量。这样,两个单词之间可以通过向量计算某种相似度或距离。这导致相似的单词会具有相似的分布,进而缓解
$
n
$
-gram语言模型的问题
\ \dash
\
明明意思很相近的两个词但是概率估计的结果差异性却很大。
\parinterval
在FNNLM中,所有的参数、输入、输出都是连续变量,因此FNNLM也是
典型的一个连续空间模型。通过使用交叉熵等损失函数,FNNLM很容易
进行优化。比如,可以使用梯度下降方法对FNNLM的模型参数进行训练。
\parinterval
在FNNLM中,所有的参数、输入、输出都是连续变量,因此FNNLM也是
一个典型的连续空间模型。通过使用交叉熵等损失函数,可以很容易地对FNNLM
进行优化。比如,可以使用梯度下降方法对FNNLM的模型参数进行训练。
\parinterval
虽然FNNLM形式简单,却为处理自然语言提供了一个全新的视角。首先,该模型重新定义了“词是什么”
\ \dash
\
它并非词典的一项,而是可以用一个连续实数向量进行表示的可计算的“量”。此外,由于
$
n
$
-gram不再是离散的符号序列,模型不需要记录
$
n
$
-gram,所以很好的缓解了上面所提到的数据稀疏问题,模型体积也大大减小。
...
...
@@ -2024,7 +2024,7 @@ z_t&=&\gamma z_{t-1}+(1-\gamma) \frac{\partial J}{\partial {\theta}_t} \cdot \f
\parinterval
针对这个问题,一种解决方法是使用卷积神经网络
\upcite
{
Pham2016ConvolutionalNN
}
。卷积神经网络的特点是可以对一定窗口大小内的连续单词进行统一建模,这样非常易于捕捉窗口内单词之间的依赖,同时对它们进行整体的表示。进一步,卷积操作可以被多次叠加使用,通过更多层的卷积神经网络可以捕捉更大范围的依赖关系。关于卷积神经网络及其在机器翻译中的应用,
{
\chaptereleven
}
会有详细论述。
\parinterval
此外,研究者也提出了另一种新的结构
$
\ \dash
\
${
\small\bfnew
{
自注意力机制
}}
\index
{
自注意力机制
}
(Self-attention Mechanism)
\index
{
Self-attention Mechanism
}
。自注意力是一种特殊的神经网络结构,它可以对序列上任意两个词的相互作用直接进行建模,这样也就避免了循环神经网络中随着距离变长信息传递步骤增多的缺陷。在自然语言处理领域,自注意力机制被成功地应用在机器翻译任务上,
形成了著名的Transformer模型
\upcite
{
vaswani2017attention
}
。
{
\chaptertwelve
}
会系统地介绍自注意力机制和Transformer模型。
\parinterval
此外,研究者也提出了另一种新的结构
$
\ \dash
\
${
\small\bfnew
{
自注意力机制
}}
\index
{
自注意力机制
}
(Self-attention Mechanism)
\index
{
Self-attention Mechanism
}
。自注意力是一种特殊的神经网络结构,它可以对序列上任意两个词的相互作用直接进行建模,这样也就避免了循环神经网络中随着距离变长信息传递步骤增多的缺陷。在自然语言处理领域,自注意力机制被成功地应用在机器翻译任务上,
著名的Transformer模型
\upcite
{
vaswani2017attention
}
就是基于该原理工作的
。
{
\chaptertwelve
}
会系统地介绍自注意力机制和Transformer模型。
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论