From 38745495e9dad684167d16882ce7444e8fc1b879 Mon Sep 17 00:00:00 2001 From: wuyijun Date: Sat, 9 Nov 2019 23:50:26 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=BE=88=E6=9C=89=E6=8A=8A=E6=8F=A1?= =?UTF-8?q?=E7=9A=84=E6=9B=B4=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Chapter10/sequence_modeling_rnn.tex | 112 ++++++------- Chapter11/practical_methodology.tex | 18 +- Chapter12/applications.tex | 156 +++++++++--------- Chapter5/machine_learning_basics.tex | 24 +-- Chapter6/deep_feedforward_networks.tex | 20 +-- Chapter7/regularization.tex | 42 ++--- .../optimization_for_training_deep_models.tex | 108 ++++++------ Chapter9/convolutional_networks.tex | 46 +++--- 8 files changed, 263 insertions(+), 263 deletions(-) diff --git a/Chapter10/sequence_modeling_rnn.tex b/Chapter10/sequence_modeling_rnn.tex index 550791e..a43492b 100644 --- a/Chapter10/sequence_modeling_rnn.tex +++ b/Chapter10/sequence_modeling_rnn.tex @@ -9,10 +9,10 @@ \chapter{序列建模:循环和递归网络} 从多层网络出发到\gls{recurrent_network},我们需要利用上世纪80年代\gls{ML}和统计模型早期思想的优点:在模型的不同部分共享参数。 \gls{parameter_sharing}使得模型能够扩展到不同形式的样本(这里指不同长度的样本)并进行泛化。 -如果我们在每个时间点都有一个单独的参数,我们不但不能泛化到训练时没有见过序列长度,也不能在时间上共享不同序列长度和不同位置的统计强度。 +如果我们在每个时间点都有一个单独的参数,我们不但不能泛化到训练时没有见过序列长度,也不能在不同序列长度和不同时间位置上共享统计强度。 当信息的特定部分会在序列内多个位置出现时,这样的共享尤为重要。 例如,考虑这两句话:``I went to Nepal in 2009''和``In 2009, I went to Nepal.'' -如果我们让一个\gls{ML}模型读取这两个句子,并提取叙述者去\ENNAME{Nepal}的年份,无论``2009年''是作为句子的第六个单词还是第二个单词出现,我们都希望模型能认出``2009年''作为相关资料片段。 +如果我们让一个\gls{ML}模型读取这两个句子,并提取叙述者去\ENNAME{Nepal}的年份,无论``2009年''是作为句子的第六个单词还是第二个单词出现,我们都希望模型能认出``2009年''为相关资料片段。 假设我们要训练一个处理固定长度句子的\gls{feedforward_network}。 传统的全连接\gls{feedforward_network}会给每个输入特征分配一个单独的参数,所以需要分别学习句子每个位置的所有语言规则。 相比之下,\gls{RNN}在几个\gls{time_step}内共享相同的权重,不需要分别学习句子每个位置的所有语言规则。 @@ -21,12 +21,12 @@ \chapter{序列建模:循环和递归网络} 一个相关的想法是在1维时间序列上使用卷积。 这种卷积方法是\gls{TDNNs}的基础\citep{Lang+Hinton88,Waibel89b,lang1990time}。 -卷积操作允许网络跨时间共享参数,但是浅层的。 +卷积操作允许网络跨时间共享参数,但这种共享是浅层的。 卷积的输出是一个序列,其中输出中的每一项是相邻几项输入的函数。 \gls{parameter_sharing}的概念体现在每个\gls{time_step}中使用的相同卷积核。 \gls{RNN}以不同的方式共享参数。 输出的每一项是前一项的函数。 -输出的每一项对先前的输出应用相同的更新规则而产生。 +输出的每一项通过对先前的输出应用相同的更新规则而产生。 这种循环方式导致参数通过很深的\gls{computational_graph}共享。 为简单起见,我们说的~\glssymbol{RNN}~是指在序列上的操作,并且该序列在时刻$t$(从1到$\tau$)包含向量$\Vx^{(t)}$。 @@ -34,8 +34,8 @@ \chapter{序列建模:循环和递归网络} 我们省略了\gls{minibatch}索引来简化记号。 此外,\gls{time_step}索引不必是字面上现实世界中流逝的时间。 有时,它仅表示序列中的位置。 -\glssymbol{RNN}~也可以应用于跨越两个维度的空间数据(如图像)。 -当应用于涉及时间的数据,并且将整个序列提供给网络之前就能观察到整个序列时,该网络可具有关于时间向后的连接。 +\glssymbol{RNN}~也可以应用于二维的空间数据(如图像)。 +甚至当应用于涉及时间的数据,该网络也可具有时间上朝向过去方向的连接,前提是整个序列在提供给网络之前就已经被完整地观察到。 本章将\gls{computational_graph}的思想扩展到包括循环。 @@ -277,11 +277,11 @@ \subsection{\glsentrytext{teacher_forcing}和输出\glsentrytext{recurrent_netwo 因为输出单元明确地训练成匹配训练集的目标,它们不太能捕获关于过去输入历史的必要信息,除非用户知道如何描述系统的全部状态,并将它作为训练目标的一部分。 消除隐藏到隐藏循环的优点在于,任何基于比较时刻$t$的预测和时刻$t$的训练目标的\gls{loss_function}中的所有\gls{time_step}都解耦了。 因此训练可以并行化,即在各时刻$t$分别计算\gls{gradient}。 -因为训练集提供输出的理想值,所以没有必要先计算前一时刻的输出。 +没有必要先计算前一时刻的输出,因为训练集提供了前一时刻输出的理想值。 由输出反馈到模型而产生循环连接的模型可用\firstgls{teacher_forcing}进行训练。 -\gls{teacher_forcing}一个源自于最大似然\gls{criterion}的过程,在训练模型时的时刻$t+1$接收真实值$y^{(t)}$作为输入。 -我们可以通过检查两个\gls{time_step}的序列得知这一点。 +\gls{teacher_forcing}是从最大似然\gls{criterion}派生出来的一个训练过程,训练模型时,在时刻$t+1$接收真实值$y^{(t)}$作为输入。 +我们可以通过检查两个\gls{time_step}的序列看清楚这一点。 条件最大似然\gls{criterion}是 \begin{align} &\log p(\Vy^{(1)},\Vy^{(2)} \mid \Vx^{(1)}, \Vx^{(2)} ) \\ @@ -291,7 +291,7 @@ \subsection{\glsentrytext{teacher_forcing}和输出\glsentrytext{recurrent_netwo % -- 372 -- 在这个例子中,\emph{同时}给定迄今为止的$\Vx$序列和来自训练集的前一$\Vy$值,我们可以看到在时刻$t=2$时,模型被训练为最大化$\Vy^{(2)}$的条件概率。 -因此最大似然在训练时指定正确反馈,而不是将自己的输出反馈到模型。 +因此最大似然在训练时指定使用正确的目标值作为反馈,而不是将自己的输出反馈到模型。 如\figref{fig:chap10_teacher_forcing}所示。 \begin{figure}[!htb] \ifOpenSource @@ -309,17 +309,17 @@ \subsection{\glsentrytext{teacher_forcing}和输出\glsentrytext{recurrent_netwo \end{figure} 我们使用\gls{teacher_forcing}的最初动机是为了在缺乏隐藏到隐藏连接的模型中避免\gls{BPTT}。 -只要模型一个\gls{time_step}的输出与下一\gls{time_step}计算的值存在连接,\gls{teacher_forcing}仍然可以应用到这些存在隐藏到隐藏连接的模型。 -然而,只要\gls{hidden_unit}成为较早\gls{time_step}的函数,\glssymbol{BPTT}~算法是必要的。 -因此训练某些模型时要同时使用\gls{teacher_forcing}和~\glssymbol{BPTT}。 +对于那些存在隐藏到隐藏连接的模型,只要模型一个\gls{time_step}的输出与下一\gls{time_step}计算的值存在连接,\gls{teacher_forcing}仍然可以适用。 +只不过,只要\gls{hidden_unit}成为较早\gls{time_step}的函数,\glssymbol{BPTT}~算法就是必要的。 +因此训练某些模型时可能要同时使用\gls{teacher_forcing}和~\glssymbol{BPTT}。 % -- 373 -- 如果之后网络在\textbf{开环}(open-loop)模式下使用,即网络输出(或输出分布的样本)反馈作为输入,那么完全使用\gls{teacher_forcing}进行训练的缺点就会出现。 在这种情况下,训练期间该网络看到的输入与测试时看到的会有很大的不同。 -减轻此问题的一种方法是同时使用\gls{teacher_forcing}和自由运行的输入进行训练,例如在展开循环的输出到输入路径上预测几个步骤的正确目标值。 +减轻此问题的一种方法是同时使用\gls{teacher_forcing}和自由运行的输入进行训练,例如在展开循环的输出到输入路径上预测若干个步骤之后的正确目标值。 通过这种方式,网络可以学会考虑在训练时没有接触到的输入条件(如自由运行模式下,自身生成自身),以及将状态映射回使网络几步之后生成正确输出的状态。 -另外一种方式\citep{SamyBengio-et-al-arxiv2015}是通过随意选择生成值或真实的数据值作为输入以减小训练时和测试时看到的输入之间的差别。 +另外一种方式\citep{SamyBengio-et-al-arxiv2015}是通过随机选择生成值或真实的数据值作为输入以减小训练时和测试时看到的输入之间的差别。 这种方法利用了\gls{curriculum_learning}策略,逐步使用更多生成值作为输入。 \subsection{计算\glsentrytext{RNN}的\glsentrytext{gradient}} @@ -488,11 +488,11 @@ \subsection{作为\glsentrytext{directed_graphical_model}的\glsentrytext{recurr 在\gls{recurrent_network}中使用的\gls{parameter_sharing}的前提是相同参数可用于不同\gls{time_step}的假设。 也就是说,假设给定时刻$t$的变量后,时刻$t +1$变量的条件概率分布是\firstgls{stationary},这意味着之前的\gls{time_step}与下个\gls{time_step}之间的关系并不依赖于$t$。 原则上,可以使用$t$作为每个\gls{time_step}的额外输入,并让学习器在发现任何时间依赖性的同时,在不同\gls{time_step}之间尽可能多地共享。 -相比在每个$t$使用不同的条件概率分布已经好很多了,但网络将必须在面对新$t$时进行推断。 +相比在每个$t$使用不同的条件概率分布已经好很多了,但网络将必须在面对新$t$时进行外推。 为了完整描述将~\glssymbol{RNN}~作为\gls{graphical_model}的观点,我们必须描述如何从模型采样。 我们需要执行的主要操作是简单地从每一\gls{time_step}的条件分布采样。 -然而,这会导致额外的复杂性。 +然而,还有一个额外的复杂性。 \glssymbol{RNN}~必须有某种机制来确定序列的长度。 这可以通过多种方式实现。 @@ -503,9 +503,9 @@ \subsection{作为\glsentrytext{directed_graphical_model}的\glsentrytext{recurr % -- 379 -- 另一种选择是在模型中引入一个额外的~\ENNAME{Bernoulli}~输出,表示在每个\gls{time_step}决定继续生成或停止生成。 -相比向词汇表增加一个额外符号,这种方法更普遍,因为它适用于任何~\glssymbol{RNN},而不仅仅是输出符号序列的~\glssymbol{RNN}。 +相比向词汇表增加一个额外符号,这种方法更通用,因为它适用于任何~\glssymbol{RNN},而不仅仅是输出符号序列的~\glssymbol{RNN}。 例如,它可以应用于一个产生实数序列的~\glssymbol{RNN}。 -新的输出单元通常使用~\ENNAME{sigmoid}~单元,并通过\gls{cross_entropy}训练。 +新的输出单元通常使用~\ENNAME{sigmoid}~单元,并以\gls{cross_entropy}作为损失函数进行训练。 在这种方法中,\ENNAME{sigmoid}~被训练为最大化正确预测的对数似然,即在每个\gls{time_step}序列决定结束或继续。 确定序列长度$\tau$的另一种方法是将一个额外的输出添加到模型并预测整数$\tau$本身。 @@ -596,7 +596,7 @@ \section{双向~\glssymbol{RNN}} 我们还讨论了某些在$\Vy$可用时,允许过去的$\Vy$值信息影响当前状态的模型。 然而,在许多应用中,我们要输出的$\Vy^{(t)}$的预测可能依赖于整个输入序列。 -例如,在语音识别中,由于协同发音,当前声音作为音素的正确解释可能取决于未来几个音素,甚至潜在的可能取决于未来的几个词,因为词与附近的词之间的存在语义依赖:如果当前的词有两种声学上合理的解释,我们可能要在更远的未来(和过去)寻找信息区分它们。 +例如,在语音识别中,由于协同发音,当前声音作为音素的正确解释可能取决于未来几个音素,甚至潜在的可能取决于未来的几个词,因为词与附近的词之间存在语言学上的依赖:如果当前的词有两种声学上合理的解释,我们可能要在更远的未来(和过去)寻找信息区分它们。 这在手写识别和许多其他序列到序列学习的任务中也是如此,将会在下一节中描述。 双向\gls{RNN}(或双向~\glssymbol{RNN})为满足这种需要而被发明\citep{Schuster+Paliwal-1997}。 @@ -604,7 +604,7 @@ \section{双向~\glssymbol{RNN}} 顾名思义,双向~\glssymbol{RNN}~结合时间上从序列起点开始移动的~\glssymbol{RNN}~和另一个时间上从序列末尾开始移动的~\glssymbol{RNN}。 \figref{fig:chap10_bidirectional_rnn}展示了典型的双向~\glssymbol{RNN},其中$\Vh^{(t)}$代表通过时间向前移动的子~\glssymbol{RNN}~的状态,$\Vg^{(t)}$代表通过时间向后移动的子~\glssymbol{RNN}~的状态。 -这允许输出单元$\Vo^{(t)}$能够计算同时依赖于过去和未来且对时刻$t$的输入值最敏感的表示,而不必指定$t$周围固定大小的窗口(这是\gls{feedforward_network}、\gls{convolutional_network}或具有固定大小的先行缓存器的常规~\glssymbol{RNN}~所必须要做的)。 +这允许输出单元$\Vo^{(t)}$能够计算同时依赖于过去和未来且对时刻$t$周围的输入值最敏感的表示,而不必指定$t$周围固定大小的窗口(这是\gls{feedforward_network}、\gls{convolutional_network}或具有固定大小的先行缓存器的常规~\glssymbol{RNN}~所必须要做的)。 % -- 383 -- @@ -622,7 +622,7 @@ \section{双向~\glssymbol{RNN}} \end{figure} 这个想法可以自然地扩展到2维输入,如图像,由\emph{四个}~\glssymbol{RNN}~组成,每一个沿着四个方向中的一个计算:上、下、左、右。 -如果~\glssymbol{RNN}~能够学习到承载长期信息,那在2维网格每个点$(i, j)$的输出$O_{i,j}$就能计算一个能捕捉到大多局部信息但仍依赖于长期输入的表示。 +如果~\glssymbol{RNN}~能够学习到承载长期信息,那在2维网格每个点$(i, j)$的输出$O_{i,j}$就能计算一个主要捕捉局部信息但同时又依赖于长期输入的表示。 相比\gls{convolutional_network},应用于图像的~\glssymbol{RNN}~计算成本通常更高,但允许同一特征图的特征之间存在长期横向的相互作用\citep{Visin-et-al-arxiv2015-renet,kalchbrenner2015grid}。 实际上,对于这样的~\glssymbol{RNN},\gls{forward_propagation}公式可以写成表示使用卷积的形式,计算自底向上到每一层的输入(在整合横向相互作用的特征图的循环传播之前)。 @@ -752,7 +752,7 @@ \section{递归神经网络} \label{fig:chap10_recursive_net} \end{figure} -递归网络想法的变种存在很多。 +递归网络想法的变种存在很多可能。 例如,\cite{Frasconi97}和~\cite{Frasconi-1998}将数据与树结构相关联,并将输入和目标与树的单独节点相关联。 由每个节点执行的计算无须是传统的人工神经计算(所有输入的仿射变换后跟一个单调非线性)。 例如,\cite{Socher-et-al-EMNLP2013}提出用张量运算和双线性形式,在这之前人们已经发现当概念是由连续向量(嵌入)表示时,这种方式有利于建模概念之间的联系\citep{Weston+Bengio+Usunier-2010,Bordes-et-al-AISTATS2012-small}。 @@ -787,12 +787,12 @@ \section{\glsentrytext{long_term_dependency}的挑战} \end{figure} 特别地,\gls{RNN}所使用的函数组合有点像矩阵乘法。 -我们可以认为,循环联系 +我们可以把如下的循环联系 \begin{align} \Vh^{(t)} = \MW^\top \Vh^{(t-1)} \end{align} -是一个非常简单的、缺少非线性激活函数和输入$\Vx$的\gls{RNN}。 -如\secref{sec:long_term_dependencies}描述,这种递推关系本质上描述了幂法。 +看做是一个非常简单的、缺少非线性激活函数和输入$\Vx$的\gls{RNN}。 +如\secref{sec:long_term_dependencies}描述,这种循环关系本质上描述了幂法。 它可以被简化为 \begin{align} \Vh^{(t)} = (\MW^t)^\top \Vh^{(0)}, @@ -816,7 +816,7 @@ \section{\glsentrytext{long_term_dependency}的挑战} 如果初始状态给定为$1$,那么时刻$t$的状态可以由$\prod_t w^{(t)}$给出。 假设$w^{(t)}$的值是随机生成的,各自独立,且有$0$均值$v$方差。 乘积的方差就为$\CalO(v^n)$。 -为了获得某些期望的方差$v^*$,我们可以选择单个方差为$v=\sqrt[n]{v^*}$权重。 +为了获得某个期望的方差$v^*$,我们可以选择让单个权重的方差为$v=\sqrt[n]{v^*}$。 因此,非常深的\gls{feedforward_network}通过精心设计的比例可以避免\gls{gradient}消失和爆炸问题,如~\cite{Sussillo14}所主张的。 % -- 391 -- @@ -824,7 +824,7 @@ \section{\glsentrytext{long_term_dependency}的挑战} \glssymbol{RNN}~\gls{gradient}消失和爆炸问题是由不同研究人员独立发现\citep{Hochreiter91-small,Bengio_icnn93,Bengio1994ITNN}。 有人可能会希望通过简单地停留在\gls{gradient}不消失或爆炸的参数空间来避免这个问题。 不幸的是,为了储存记忆并对小扰动具有鲁棒性,\glssymbol{RNN}~必须进入参数空间中的\gls{gradient}消失区域\citep{Bengio_icnn93,Bengio1994ITNN}。 -具体来说,每当模型能够表示\gls{long_term_dependency}时,长期相互作用的\gls{gradient}幅值就会变得指数小(相比短期相互作用的\gls{gradient}幅值)。 +具体来说,每当模型能够表示\gls{long_term_dependency}时,长期相互作用的\gls{gradient}幅值就会变得指数级小(相比短期相互作用的\gls{gradient}幅值)。 这并不意味着这是不可能学习的,由于\gls{long_term_dependency}关系的信号很容易被短期相关性产生的最小波动隐藏,因而学习\gls{long_term_dependency}可能需要很长的时间。 实践中,\cite{Bengio1994ITNN}的实验表明,当我们增加了需要捕获的依赖关系的跨度,基于\gls{gradient}的优化变得越来越困难,\glssymbol{SGD}~在长度仅为10或20的序列上成功训练传统~\glssymbol{RNN}~的概率迅速变为0。 @@ -872,11 +872,11 @@ \section{\glsentrytext{ESN}} % -- 393 -- -当然,这个例子假定~\gls{jacobian}~矩阵在每个\gls{time_step}是相同的,即对应于没有非线性\gls{recurrent_network}。 +当然,这个例子假定~\gls{jacobian}~矩阵在每个\gls{time_step}是相同的,即对应于没有非线性的\gls{recurrent_network}。 当非线性存在时,非线性的导数将在许多\gls{time_step}后接近零,并有助于防止因过大的\gls{spectral_radius}而导致的爆炸。 事实上,关于\gls{ESN}的最近工作提倡使用远大于1的\gls{spectral_radius}~\citep{yildiz2012re,jaeger2012long}。 -我们已经说过多次,通过反复矩阵乘法的\gls{backward_propagation}同样适用于没有非线性的正向传播的网络,其状态为$\Vh^{(t+1)} = \Vh^{(t)\top} \MW $。 +我们上面说的这些关于用重复矩阵相乘进行\gls{backward_propagation}的\gls{recurrent_network}的事实同样适用于没有非线性的正向传播的网络,其状态为$\Vh^{(t+1)} = \Vh^{(t)\top} \MW $。 如果线性映射$\MW^\top$在$L^2$范数的测度下总是缩小$\Vh$,那么我们说这个映射是\firstgls{contractive}的。 当\gls{spectral_radius}小于一,则从$\Vh^{(t)}$到$\Vh^{(t+1)}$的映射是\gls{contractive}的,因此小变化在每个\gls{time_step}后变得更小。 @@ -906,7 +906,7 @@ \section{\glsentrytext{leaky_unit}和其他多时间尺度的策略} \label{sec:leaky_units_and_other_strategiesfor_multiple_time_scales} 处理\gls{long_term_dependency}的一种方法是设计工作在多个时间尺度的模型,使模型的某些部分在细粒度时间尺度上操作并能处理小细节,而其他部分在粗时间尺度上操作并能把遥远过去的信息更有效地传递过来。 存在多种同时构建粗细时间尺度的策略。 -这些策略包括在时间轴增加\gls{skip_connection},``\gls{leaky_unit}''使用不同时间常数整合信号,并去除一些用于建模细粒度时间尺度的连接。 +这些策略包括在时间轴增加\gls{skip_connection},``\gls{leaky_unit}''使用不同时间常数整合信号,以及去除一些用于建模细粒度时间尺度的连接。 \subsection{时间维度的\glsentrytext{skip_connection}} \label{sec:adding_skip_connections_through_time} @@ -934,7 +934,7 @@ \subsection{\glsentrytext{leaky_unit}和一系列不同时间尺度} $d$~\gls{time_step}的\gls{skip_connection}可以确保单元总能被$d$个\gls{time_step}前的那个值影响。 使用权重接近1的线性自连接是确保该单元可以访问过去值的不同方式。 -线性自连接通过调节实值$\alpha$更平滑灵活地调整这种效果,而不是调整整数值的跳跃长度。 +线性自连接通过调节实值$\alpha$(而不是调整整数值的跳跃长度)更平滑灵活地调整这种效果。 这个想法由~\cite{Mozer-nips92}和~\cite{ElHihi+Bengio-nips8}提出。 在\gls{ESN}中,\gls{leaky_unit}也被发现很有用\citep{JaegerLPS07}。 @@ -951,7 +951,7 @@ \subsection{删除连接} 这个想法与之前讨论的时间维度上的\gls{skip_connection}不同,因为它涉及主动\emph{删除}长度为一的连接并用更长的连接替换它们。 以这种方式修改的单元被迫在长时间尺度上运作。 而通过时间\gls{skip_connection}是\emph{添加}边。 -收到这种新连接的单元,可以学习在长时间尺度上运作,但也可以选择专注于自己其他的短期连接。 +收到这种新连接的单元,可能会学习在长时间尺度上运作,但也可能选择专注于自己其他的短期连接。 % -- 396 -- @@ -1017,13 +1017,13 @@ \subsection{\glssymbol{LSTM}} f_i^{(t)} = \sigma \Big( b_i^f + \sum_j U_{i,j}^f x_j^{(t)} + \sum_j W_{i,j}^f h_j^{(t-1)} \Big), \end{align} 其中$\Vx^{(t)}$是当前输入向量,$\Vh^{t}$是当前隐藏层向量,$\Vh^{t}$包含所有~\glssymbol{LSTM}~细胞的输出。 -$\Vb^f, \MU^f, \MW^f$分别是\gls{bias_aff}、输入权重和\gls{forget_gate}的循环权重。 +$\Vb^f, \MU^f, \MW^f$分别是\gls{forget_gate}的\gls{bias_aff}、输入权重和循环权重。 因此~\glssymbol{LSTM}~细胞内部状态以如下方式更新,其中有一个条件的自环权重$f_i^{(t)}$: \begin{align} s_i^{(t)} = f_i^{(t)} s_i^{(t-1)} + g_i^{(t)} \sigma \Big( b_i + \sum_j U_{i,j} x_j^{(t)} + \sum_j W_{i,j} h_j^{(t-1)} \Big), \end{align} -其中$\Vb, \MU, \MW$分别是~\glssymbol{LSTM}~细胞中的\gls{bias_aff}、输入权重和\gls{forget_gate}的循环权重。 +其中$\Vb, \MU, \MW$分别是~\glssymbol{LSTM}~细胞中的\gls{bias_aff}、输入权重和循环权重。 \textbf{外部输入门}(external input gate)单元$g_i^{(t)}$以类似\gls{forget_gate}(使用\ENNAME{sigmoid}获得一个0和1之间的值)的方式更新,但有自身的参数: \begin{align} g_i^{(t)} = \sigma \Big( b_i^g + \sum_j U_{i,j}^g x_j^{(t)} + \sum_j W_{i,j}^g h_j^{(t-1)} \Big). @@ -1033,8 +1033,8 @@ \subsection{\glssymbol{LSTM}} h_i^{(t)} &= \text{tanh}\big( s_i^{(t)} \big) q_i^{(t)}, \\ q_i^{(t)} &= \sigma \Big( b_i^o + \sum_j U_{i,j}^o x_j^{(t)} + \sum_j W_{i,j}^o h_j^{(t-1)} \Big), \end{align} -其中$\Vb^o, \MU^o, \MW^o$分别是\gls{bias_aff}、输入权重和\gls{forget_gate}的循环权重。 -在这些变体中,可以选择使用细胞状态$s_i^{(t)}$作为额外的输入(及其权重),输入到第$i$个单元的三个门,如\figref{fig:chap10_lstm}所示。 +其中$\Vb^o, \MU^o, \MW^o$分别是输出门的\gls{bias_aff}、输入权重和循环权重。 +在某些变体中,可以选择使用细胞状态$s_i^{(t)}$作为额外的输入(及其权重),输入到第$i$个单元的三个门,如\figref{fig:chap10_lstm}所示。 这将需要三个额外的参数。 % -- 399 -- @@ -1045,7 +1045,7 @@ \subsection{\glssymbol{LSTM}} \subsection{其他\glsentrytext{gated_rnn}} \label{sec:other_gated_rnns} \glssymbol{LSTM}~架构中哪些部分是真正必须的? -还可以设计哪些其他成功架构允许网络动态地控制时间尺度和不同单元的遗忘行为? +还可以设计哪些其他成功架构允许网络动态地控制不同单元的时间尺度和遗忘行为? 最近关于\gls{gated_rnn}~的工作给出了这些问题的某些答案,其单元也被称为\gls{gated_recurrent_unit}或~\glssymbol{gated_recurrent_unit}~\citep{cho-al-arxiv14-ssst8,Chung-et-al-NIPSDL2014-small,chung-icml15-gated,Jozefowicz-et-al-ICML2015,Chrupala-et-al-arxiv2015}。 与~\glssymbol{LSTM}~的主要区别是,单个\gls{gated}单元同时控制遗忘因子和更新状态单元的决定。 @@ -1098,8 +1098,8 @@ \subsection{\glsentrytext{clipping_gradient}} 这导致的困难是,当参数\gls{gradient}非常大时,\gls{gradient}下降的参数更新可以将参数抛出很远,进入\gls{objective_function}较大的区域,到达当前解所作的努力变成了无用功。 \gls{gradient}告诉我们,围绕当前参数的无穷小区域内最速下降的方向。 -这个无穷小区域之外,\gls{cost_function}可能开始沿曲线背面而上。 -更新必须被选择为足够小,以避免过分穿越向上的曲面。 +这个无穷小区域之外,\gls{cost_function}可能开始拐头向上。 +更新必须被选择为足够小,以避免沿向上的曲面走太远。 我们通常使用衰减速度足够慢的学习率,使连续的步骤具有大致相同的学习率。 适合于一个相对线性的地形部分的步长经常在下一步进入地形中更加弯曲的部分时变得不适合,会导致上坡运动。 @@ -1139,11 +1139,11 @@ \subsection{\glsentrytext{clipping_gradient}} 事实上,当\gls{gradient}大小高于阈值时,即使是采取简单的\emph{随机步骤}往往工作得几乎一样好。 如果爆炸非常严重,\gls{gradient}数值上为{\tt Inf}或{\tt Nan}(无穷大或不是一个数字),则可以采取大小为$v$的随机一步,通常会离开数值不稳定的状态。 截断每\gls{minibatch}\gls{gradient}范数不会改变单个\gls{minibatch}的\gls{gradient}方向。 -然而,许多\gls{minibatch}使用范数截断\gls{gradient}后的平均值不等同于截断真实\gls{gradient}(使用所有的实例所形成的\gls{gradient})的范数。 -大导数范数的样本,和像这样的出现在同一\gls{minibatch}的样本,其对最终方向的贡献将消失。 +然而,对许多\gls{minibatch}使用范数截断\gls{gradient}后的平均值不等同于截断真实\gls{gradient}(使用所有的实例所形成的\gls{gradient})的范数。 +大导数范数的样本,和与之一起出现在同一\gls{minibatch}的样本,其对最终方向的贡献将被截断。 不像传统\gls{minibatch}\gls{gradient}下降,其中真实\gls{gradient}的方向是等于所有\gls{minibatch}\gls{gradient}的平均。 -换句话说,传统的\gls{SGD}使用\gls{gradient}的无偏估计,而与使用范数截断的\gls{gradient}下降引入了经验上是有用的启发式\gls{bias_aff}。 -通过逐元素截断,更新的方向与真实\gls{gradient}或\gls{minibatch}的\gls{gradient}不再对齐,但是它仍然是一个下降方向。 +换句话说,传统的\gls{SGD}使用\gls{gradient}的无偏估计,而使用范数截断的\gls{gradient}下降引入了经验上是有用的启发式\gls{bias_aff}。 +而对于逐元素截断,更新的方向与真实\gls{gradient}或\gls{minibatch}的\gls{gradient}不再对齐,但是它仍然是一个下降方向。 还有学者提出\citep{Graves-arxiv2013}(相对于隐藏单元)截断\gls{backward_propagation}\gls{gradient},但没有公布与这些变种之间的比较; 我们推测,所有这些方法表现类似。 % -- 403 -- @@ -1171,8 +1171,8 @@ \subsection{引导信息流的正则化} {\norm{\nabla_{\Vh^{(t)}} L}} -1 \Bigg)^2. \end{align} 计算这一\gls{gradient}的正则项可能会出现困难,但~\cite{Pascanu+al-ICML2013-small}提出可以将后向传播向量$\nabla_{\Vh^{(t)}} L$考虑为恒值作为近似(为了计算正则化的目的,没有必要通过它们向后传播)。 -使用该正则项的实验表明,如果与标准的启发式截断(处理梯度爆炸)相结合,该正则项可以显著地增加~\glssymbol{RNN}~可以学习的依赖跨度。 -\gls{gradient_clipping}特别重要,因为它保持了爆炸\gls{gradient}边缘的~\glssymbol{RNN}~动态。 +使用该正则项的实验表明,如果与标准的启发式截断(处理梯度爆炸)相结合,该正则项可以显著地增加~\glssymbol{RNN}~可以学习的依赖的跨度。 +因为这种方法将~\glssymbol{RNN}~的动态保持在爆炸\gls{gradient}的边缘,\gls{gradient_clipping}特别重要。 如果没有\gls{gradient_clipping},\gls{gradient}爆炸将阻碍学习的成功。 这种方法的一个主要弱点是,在处理数据冗余的任务时如\gls{language_model},它并不像~\glssymbol{LSTM}~一样有效。 @@ -1208,9 +1208,9 @@ \section{外显记忆} 为了缓解这一问题,\glssymbol{NTM}~实际同时从多个记忆单元写入或读取。 读取时,它们采取许多单元的加权平均值。 写入时,他们对多个单元修改不同的数值。 -用于这些操作的系数被选择为集中在一个小数目的单元,如通过~\ENNAME{softmax}~函数产生它们。 -使用这些具有非零导数的权重允许函数控制访问存储器,从而能使用梯度下降法优化。 -关于这些系数的\gls{gradient}指示着其中每个参数是应该增加还是减少,但\gls{gradient}通常只在接收大系数的存储器地址上变大。 +用于这些操作的系数被选择为集中在少数单元,如通过~\ENNAME{softmax}~函数产生它们。 +使用这些具有非零导数的权重允许控制访问存储器的函数能使用梯度下降法优化。 +关于这些系数的\gls{gradient}指示着其中每个参数是应该增加还是减少,但\gls{gradient}通常只在接收大系数的存储器地址上具有大的值。 这些记忆单元通常扩充为包含向量,而不是由~\glssymbol{LSTM}~或GRU存储单元所存储的单个标量。 增加记忆单元大小的原因有两个。 @@ -1218,15 +1218,15 @@ \section{外显记忆} 我们为产生用于许多单元的系数付出计算成本,但我们预期这些系数聚集在周围小数目的单元。 通过读取向量值,而不是一个标量,我们可以抵消部分成本。 使用向量值的记忆单元的另一个原因是,它们允许\textbf{基于内容的寻址}(content-based addressing),其中从一个单元读或写的权重是该单元的函数。 -如果我们能够生产符合某些但并非所有元素的模式,向量值单元允许我们检索一个完整向量值的记忆。 +如果我们能够产生一个模式来匹配某些但并非所有元素,向量值单元允许我们检索一个完整向量值的记忆。 这类似于人们能够通过几个歌词回忆起一首歌曲的方式。 我们可以认为基于内容的读取指令是说,``检索一首副歌歌词中带有'我们都住在黄色潜水艇'的歌''。 当我们要检索的对象很大时,基于内容的寻址更为有用——如果歌曲的每一个字母被存储在单独的记忆单元中,我们将无法通过这种方式找到他们。 通过比较,\textbf{基于位置的寻址}(location-based addressing)不允许引用存储器的内容。 我们可以认为基于位置的读取指令是说``检索347档的歌的歌词''。 -即使当存储单元很小时,基于位置的寻址通常也是完全合理的机制。 +当存储单元哪怕很小时,基于位置的寻址常常也可以是完全合理的机制。 -如果一个存储单元的内容在大多数\gls{time_step}上会被复制(不被忘记),则它包含的信息可以在时间上向前传播,随时间向后传播的\gls{gradient}也不会消失或爆炸。 +如果一个存储单元的内容在大多数\gls{time_step}上会被复制(不被忘记),则它包含的信息可以在时间上向前传播,\gls{gradient}随时间向后传播,而不会消失或爆炸。 \begin{figure}[!htb] \ifOpenSource @@ -1241,15 +1241,15 @@ \section{外显记忆} \label{fig:chap10_memory_network} \end{figure} -外显记忆的方法在\figref{fig:chap10_memory_network}说明,其中我们可以看到与存储器耦接的``任务神经网络''。 +外显记忆的方法在\figref{fig:chap10_memory_network}说明,其中我们可以看到一个``任务神经网络''搭配了一个存储器。 虽然这一任务神经网络可以是前馈或循环的,但整个系统是一个\gls{recurrent_network}。 -任务网络可以选择读取或写入的特定内存地址。 +任务网络可以选择读取或写入特定的存储器地址。 外显记忆似乎允许模型学习普通~\glssymbol{RNN}~或~\glssymbol{LSTM} \glssymbol{RNN}~不能学习的任务。 -这种优点的一个原因可能是因为信息和\gls{gradient}可以在非常长的持续时间内传播(分别在时间上向前或向后)。 +这种优点的一个原因可能是因为信息和\gls{gradient}可以(分别在时间上向前和向后)在非常长的持续时间内传播。 % -- 406 -- -作为存储器单元的加权平均值\gls{backward_propagation}的替代,我们可以将存储器寻址系数解释为概率,并随机从一个单元读取\citep{Zaremba+Sutskever-arxiv2015}。 +作为存储器单元的加权平均值\gls{backward_propagation}的替代,我们可以将存储器寻址系数解释为概率,并依据此概率随机从一个单元读取\citep{Zaremba+Sutskever-arxiv2015}。 优化离散决策的模型需要专门的优化算法,这将在\secref{sec:back_propagating_through_discrete_stochastic_operations}中描述。 目前为止,训练这些做离散决策的随机架构,仍比训练进行软判决的确定性算法更难。 diff --git a/Chapter11/practical_methodology.tex b/Chapter11/practical_methodology.tex index f40fcf7..c82ee88 100644 --- a/Chapter11/practical_methodology.tex +++ b/Chapter11/practical_methodology.tex @@ -269,7 +269,7 @@ \subsection{手动调整\glsentrytext{hyperparameter}} 在某个极端情况下,\gls{hyperparameter}对应着低\gls{capacity},并且\gls{generalization_error}由于\gls{training_error}较大而很高。 这便是\gls{underfitting}的情况。 另一种极端情况,\gls{hyperparameter}对应着高\gls{capacity},并且\gls{generalization_error}由于\gls{training_error}和\gls{test_error}之间的差距较大而很高。 -最优的模型\gls{capacity}位于曲线中间的某个位置,能够达到最低可能的\gls{generalization_error},由某个中等的\gls{generalization_error}和某个中等的\gls{training_error}相加构成。 +最优的模型\gls{capacity}位于曲线中间的某个位置,能够达到最低可能的\gls{generalization_error},由某个中等的泛化差距(generalization gap)和某个中等的\gls{training_error}相加构成。 % -- 416 end @@ -312,7 +312,7 @@ \subsection{手动调整\glsentrytext{hyperparameter}} \caption{\gls{training_error}和\gls{learning_rate}之间的典型关系。 注意当\gls{learning_rate}大于最优值时误差会有显著的提升。 此图针对固定的训练时间,越小的\gls{learning_rate}有时候可以以一个正比于\gls{learning_rate}减小量的因素来减慢训练过程。 -\gls{generalization_error}也会得到类似的曲线,由于正则项作用在\gls{learning_rate}过大或过小处比较复杂。 +\gls{generalization_error}也会得到类似的曲线,或者由于\gls{learning_rate}过大或过小引起的正则化作用而变得复杂化。 由于一个糟糕的优化从某种程度上说可以避免\gls{overfitting},即使是\gls{training_error}相同的点也会拥有完全不同的\gls{generalization_error}。} \label{fig:chap11_lr} \end{figure} @@ -412,7 +412,7 @@ \subsection{\glsentrytext{grid_search}} 对于每个\gls{hyperparameter},使用者选择一个较小的有限值集去探索。 然后,这些\gls{hyperparameter}笛卡尔乘积得到一组组\gls{hyperparameter},\gls{grid_search}使用每组\gls{hyperparameter}训练模型。 挑选\gls{validation_set}误差最小的\gls{hyperparameter}作为最好的\gls{hyperparameter}。 -如\figref{fig:chap11_grid_vs_random}所示\gls{hyperparameter}值的网络。 +如\figref{fig:chap11_grid_vs_random}所示\gls{hyperparameter}值的网格。 % -- 420 end @@ -458,7 +458,7 @@ \subsection{\glsentrytext{grid_search}} \gls{grid_search}带来的一个明显问题是,计算代价会随着\gls{hyperparameter}数量呈指数级增长。 如果有$m$个\gls{hyperparameter},每个最多取$n$个值,那么训练和估计所需的试验数将是$O(n^m)$。 我们可以并行地进行实验,并且并行要求十分宽松(进行不同搜索的机器之间几乎没有必要进行通信)。 -令人遗憾的是,由于\gls{grid_search}指数级增长计算代价,即使是并行,我们也无法提供令人满意的搜索规模。 +令人遗憾的是,由于\gls{grid_search}指数级增长的计算代价,即使是并行,我们也无法提供令人满意的搜索规模。 \subsection{\glsentrytext{random_search}} @@ -490,7 +490,7 @@ \subsection{\glsentrytext{random_search}} \gls{random_search}能比\gls{grid_search}更快地找到良好\gls{hyperparameter}的原因是,没有浪费的实验,不像\gls{grid_search}有时会对一个\gls{hyperparameter}的两个不同值(给定其他\gls{hyperparameter}值不变)给出相同结果。 在\gls{grid_search}中,其他\gls{hyperparameter}将在这两次实验中拥有相同的值,而在\gls{random_search}中,它们通常会具有不同的值。 -因此,如果这两个值的变化所对应的\gls{validation_set}误差没有明显区别的话,\gls{grid_search}没有必要重复两个等价的实验,而\gls{random_search}仍然会对其他\gls{hyperparameter}进行两次独立地探索。 +因此,如果这两个值的变化所对应的\gls{validation_set}误差没有明显区别的话,\gls{grid_search}会没有必要地重复两个等价的实验,而\gls{random_search}仍然会对其他\gls{hyperparameter}进行两次独立地探索。 % 423 head @@ -574,12 +574,12 @@ \section{调试策略} 例如,基于\,\gls{softmax}\,输出层的分类器给每个类分配一个概率。 因此,分配给最有可能的类的概率给出了模型在其分类决定上的置信估计值。 通常,相比于正确预测的概率最大似然训练会略有高估。 -但是由于实际上模型的较小概率不太可能对应着正确的标签,因此它们在一定意义上还是有些用的。 +但是由于实际上模型的较小概率指示结果对应着正确的标签的可能也较小,因此它们在一定意义上还是有些用的。 通过查看\gls{training_set}中很难正确建模的样本,通常可以发现该数据预处理或者标记方式的问题。 例如,街景\gls{transcription_system}原本有个问题是,地址号码检测系统会将图像裁剪得过于紧密,而省略掉了一些数字。 然后转录网络会给这些图像的正确答案分配非常低的概率。 将图像排序,确定置信度最高的错误,显示系统的裁剪有问题。 -修改检测系统裁剪更宽的图像,从而使整个系统获得更好的性能,但是转录网络需要能够处理地址号码中位置和范围更大变化的情况。 +修改检测系统裁剪更宽的图像,使整个系统获得了更好的性能,即便转录网络需要能够处理地址号码中位置和范围更大变化的情况。 % 425 end @@ -665,7 +665,7 @@ \section{调试策略} \section{示例:多位数字识别} \label{sec:example_multi_digit_number_recognition} -为了\gls{end_to_end}说明如何在实践中应用我们的设计方法论,我们从设计\gls{DL}组件出发,简单地介绍下街景\gls{transcription_system}。 +为了\gls{end_to_end}说明如何在实践中应用我们的设计方法论,我们从设计\gls{DL}组件的视角出发,简单地介绍下街景\gls{transcription_system}。 显然,整个系统的许多其他组件,如街景车、数据库设施等等,也是极其重要的。 % 428 mid @@ -676,7 +676,7 @@ \section{示例:多位数字识别} % 428 mid -转录项目开始于\gls{performance_metrics}的选择和对这些度量的期望值。 +转录项目开始于选择\gls{performance_metrics}和对这些度量的期望值。 一个重要的总原则是度量的选择要符合项目的业务目标。 因为地图只有是高\gls{accuracy}时才有用,所以为这个项目设置高\gls{accuracy}的要求非常重要。 具体地,目标是达到人类水平,$98\%$的\gls{accuracy}。 diff --git a/Chapter12/applications.tex b/Chapter12/applications.tex index a8d6ab6..dbc4402 100644 --- a/Chapter12/applications.tex +++ b/Chapter12/applications.tex @@ -40,12 +40,12 @@ \subsection{快速的CPU实现} 例如,在2011年,最好的CPU在训练\gls{NN}时使用\gls{fixed_point_arithmetic}能够比\gls{float_point_arithmetic}跑得更快。 通过调整\gls{fixed_point_arithmetic}的实现方式,\citet{Vanhoucke-et-al-2011}获得了3倍于一个强\gls{float_point_arithmetic}系统的速度。 % 相对一个很强的\gls{float_point_arithmetic}系统3倍的加速 -因为各个新型CPU都有各自不同的特性,所以有时候采用\gls{float_point_arithmetic}实现会更快。 +因为各个新型CPU都有各自不同的特性,所以也有时候采用\gls{float_point_arithmetic}实现会更快。 % 一条重要的准则就是通过特殊设计的数值运算可以获得巨大的回报。 一条重要的准则就是,通过特殊设计的数值运算,我们可以获得巨大的回报。 除了选择\gls{fixed_point_arithmetic}或者\gls{float_point_arithmetic}以外,其他的策略还包括了如通过优化数据结构避免高速缓存缺失、使用向量指令等。 %还包括其他的策略,如通过优化数据结构避免高速缓存缺失、使用向量指令等。 -如果模型规模不会限制模型表现(不会影响模型精度)时,\gls{ML}的研究者们一般忽略这些实现的细节。 +\gls{ML}的研究者们一般会忽略这些实现的细节,但是如果模型的性能限制了模型能达到的规模,那该模型的准确性就要受到影响。 % 432 \subsection{GPU 实现} @@ -150,13 +150,13 @@ \subsection{大规模的分布式实现} 这个问题可以使用\firstgls{ASGD}\citep{BenDucVin01-small,Recht-et-al-NIPS2011}解决。 在这个方法中,几个处理器的核共用存有参数的内存。 -每一个核在无锁情况下读取这些参数并计算对应的梯度,然后在无锁状态下更新这些参数。 +每一个核在无锁情况下读取这些参数并计算对应的梯度,然后在无锁状态下增量更新这些参数。 %这种方法减少了每一个\gls{GD}所获得的平均提升,因为一些核把其他的核所更新的参数(写)覆盖了。 由于一些核把其他的核所更新的参数覆盖了,因此这种方法减少了每一步\gls{GD}所获得的平均提升。 但因为更新步数的速率增加,总体上还是加快了学习过程。 -\citet{Dean-et-al-NIPS2012}率先提出了多机器无锁的\gls{GD}方法,其中参数是由\firstgls{parameter_server}管理而非存储在共用的内存中。 -分布式的异步\gls{GD}方法保留了训练\gls{DNN}的基本策略,并被工业界很多\gls{ML}组所使用\citep{chilimbi2014project,Wu-et-al-arXiv2015}。 -学术界的\gls{DL}研究者们通常无法负担那么大规模的分布式学习系统,但是一些研究仍关注于如何在校园环境中使用相对廉价的硬件系统构造分布式网络~\citep{icml2013_coates13}。 +\citet{Dean-et-al-NIPS2012}率先尝试了无锁的\gls{GD}方法的多机器实现,其中参数是由\firstgls{parameter_server}管理而非存储在共用的内存中。 +分布式的异步\gls{GD}方法目前依然是训练大型\gls{DNN}的基本策略,并被工业界很多\gls{ML}组所使用\citep{chilimbi2014project,Wu-et-al-arXiv2015}。 +学术界的\gls{DL}研究者们通常无法负担那么大规模的分布式学习系统,但是仍有一些研究关注于如何在校园环境中使用相对廉价的硬件系统构造分布式网络~\citep{icml2013_coates13}。 % 435 @@ -167,15 +167,15 @@ \subsection{\glsentrytext{model_compression}} 在许多商业应用的\gls{ML}模型中,一个时间和内存开销较小的推断算法比一个时间和内存开销较小的训练算法要更为重要。 对于那些不需要个性化设计的应用来说,我们只需要一次性的训练模型,然后它就可以被成千上万的用户使用。 在许多情况下,相比开发者,终端用户的可用资源往往更有限。 -例如,开发者们可以使用巨大的计算机集群训练一个\gls{SR}的网络,然后将其部署到移动手机上。 +例如,开发者们可能会使用巨大的计算机集群训练一个\gls{SR}的网络,然后将其部署到移动手机上。 减少推断所需开销的一个关键策略是\firstgls{model_compression}~\citep{bucilua2006model}。 -\gls{model_compression}的基本思想是用一个更小的模型取代原始耗时的模型,从而使得用来存储与评估所需的内存与运行时间更少。 +\gls{model_compression}的基本思想是用一个更小的模型取代原始耗时的模型,从而使得存储与评估模型所需的内存与运行时间更少。 -当原始模型的规模很大,且我们需要防止\gls{overfitting}时,\gls{model_compression}就可以起到作用。 +当原始模型的规模主要由防止\gls{overfitting}的需求驱动时,\gls{model_compression}就可以起到作用。 在许多情况下,拥有最小\gls{generalization}误差的模型往往是多个独立训练而成的模型的\gls{ensemble}。 评估所有$n$个\gls{ensemble}成员的成本很高。 有时候,当单个模型很大(例如,如果它使用~\gls{dropout}~正则化)时,其\gls{generalization}能力也会很好。 @@ -216,7 +216,7 @@ \subsection{\glsentrytext{dynamic_structure}} 换句话说,他们被训练为确保对象存在时,我们不会错误地拒绝输入。 最后一个分类器被训练为具有高精度。 在测试时,我们按照顺序运行分类器进行推断,一旦\gls{cascade}中的任何一个拒绝它,就选择抛弃。 -总的来说,这允许我们使用高\gls{capacity}模型以较高的置信度验证对象的存在,而不是强制我们为每个样本付出完全推断的成本。 +总的来说,这允许我们使用高\gls{capacity}模型以较高的置信度验证对象的存在,而又不会强制我们为每个样本付出完全推断的成本。 有两种不同的方式可以使得\gls{cascade}实现高\gls{capacity}。 一种方法是使\gls{cascade}中靠后的成员单独具有高\gls{capacity}。 在这种情况下,由于系统中的一些个体成员具有高\gls{capacity},因此系统作为一个整体显然也具有高\gls{capacity}。 @@ -224,7 +224,7 @@ \subsection{\glsentrytext{dynamic_structure}} \citet{Viola01}使用\gls{cascade}的增强\gls{decision_tree}实现了适合在手持数字相机中使用的快速并且鲁棒的面部检测器。 本质上,它们的分类器使用滑动窗口方法来定位面部。 分类器会检查许多的窗口,如果这些窗口内不包含面部则被拒绝。 -\gls{cascade}的另一个版本使用早期模型来实现一种硬\gls{attention_mechanism}:\gls{cascade}的先遣成员定位对象,并且\gls{cascade}的后续成员在给定对象位置的情况下执行进一步处理。 +\gls{cascade}的另一个版本使用靠前的模型来实现一种硬\gls{attention_mechanism}:\gls{cascade}的先遣成员定位对象,\gls{cascade}的后续成员在给定对象位置的情况下执行进一步处理。 例如,Google使用两步\gls{cascade}从街景视图图像中转换地址编号:首先使用一个\gls{ML}模型查找地址编号,然后使用另一个\gls{ML}模型将其转录\citep{Goodfellow+et+al-ICLR2014a}。 % 437 @@ -259,7 +259,7 @@ \subsection{\glsentrytext{dynamic_structure}} 不幸的是,这些专用的子程序难以高效地实现。 由于缺乏高速缓存的一致性,CPU实现会十分缓慢。 此外,由于缺乏\gls{coalesced}的内存操作以及~\gls{warp}~成员使用不同分支时需要串行化操作,\glssymbol{GPU}~的实现也会很慢。 -在一些情况下,我们可以通过将样本分成组,并且都采用相同的分支并且同时处理这些样本组的方式来缓解这些问题。 +在一些情况下,我们可以通过将走同一个分支的样本分到同一组,从而可以同时处理这些样本组的方式来缓解这些问题。 在离线环境中,这是最小化处理固定量样本所需时间的一项可接受的策略。 然而在实时系统中,样本必须连续处理,对工作负载进行分区可能会导致负载均衡问题。 例如,如果我们分配一台机器处理\gls{cascade}中的第一步,另一台机器处理\gls{cascade}中的最后一步,那么第一台机器将倾向于过载,最后一个机器倾向于欠载。 @@ -285,7 +285,7 @@ \subsection{深度网络的专用硬件实现} 虽然CPU和~\glssymbol{GPU}~上的软件实现通常使用32或64位的精度来表示浮点数,但是长期以来使用较低的精度在更短的时间内完成推断也是可行的\citep{Holt-et-al-1991,Holi+Hwang-1993,Presley-et-al-1994,Simard+Graf-NIPS1994,Wawrzynek-et-al-IEEE1996,Savich-et-al-2007}。 这已成为近年来更迫切的问题,因为\gls{DL}在工业产品中越来越受欢迎,并且由于更快的硬件产生的巨大影响已经通过~\glssymbol{GPU}~的使用得到了证明。 激励当前对深度网络专用硬件研究的另一个因素是单个CPU或~\glssymbol{GPU}~核心的进展速度已经减慢,并且最近计算速度的改进来自于核心的并行化(无论CPU还是~\glssymbol{GPU})。 -这与20世纪90年代的情况(上一个神经网络时代)的不同之处在于,\gls{NN}的硬件实现(从开始到芯片可用可能需要两年)跟不上快速进展和价格低廉的通用CPU的脚步。 +这与20世纪90年代的情况(上一个神经网络时代)不同,当时\gls{NN}的硬件实现(从开始到芯片可用可能需要两年)跟不上快速进展和价格低廉的通用CPU的脚步。 因此,在针对诸如手机等低功率设备开发新的硬件设计,并且想要用于\gls{DL}的一般公众应用(例如,具有语音、\gls{CV}或自然语言功能的设施)等时,研究专用硬件能够进一步推动其发展。 % 440 head @@ -295,7 +295,7 @@ \subsection{深度网络的专用硬件实现} 传统的定点数被限制在了一个固定范围之内(其对应于浮点表示中的给定指数)。 而动态定点表示在一组数字 (例如一个层中的所有权重) 之间共享该范围。 使用定点代替浮点表示并且每个数使用较少的比特能够减少执行乘法所需的硬件表面积、功率需求和计算时间。 -而乘法已经是使用或训练\gls{BP}的现代深度网络中要求最高的操作。 +而乘法是使用或训练\gls{BP}的现代深度网络中要求最高的操作。 @@ -313,11 +313,11 @@ \section{\glsentrytext{CV}} \gls{CV}的应用广泛:从复现人类视觉能力(比如识别人脸)到创造全新的视觉能力。 举个后者的例子,近期一个新的\gls{CV}应用是从视频中可视物体的振动中识别相应的声波\citep{Davis2014VisualMic}。 大多数\gls{CV}领域的\gls{DL}研究未曾关注过这样一个奇异的应用,它扩展了图像的范围,而不是仅仅关注于\gls{AI}中较小的核心目标——复制人类的能力。 -无论是报告图像中存在哪个物体,还是给图像中每个对象周围添加注释性的边框, +无论是报告图像中存在哪个物体,还是给图像中每个对象添加包围它的边框, 或从图像中转录符号序列,或给图像中的每个像素标记它所属对象的标识, 大多数\gls{CV}中的\gls{DL}往往用于\gls{object_recognition}或者某种形式的检测。 由于\gls{generative_model}已经是\gls{DL}研究的指导原则,因此还有大量图像合成工作使用了深度模型。 -尽管图像合成(``\emph{无中生有}'')通常不包括在\gls{CV}内,但是能够进行图像合成的模型通常用于图像恢复,即修复图像中的缺陷或从图像中移除对象这样的\gls{CV}任务。 +尽管图像合成(``\emph{无中生有}'')通常不包括在\gls{CV}内,但是能够进行图像合成的模型常常用于图像恢复,即修复图像中的缺陷或从图像中移除对象这样的\gls{CV}任务。 % 441 \subsection{预处理} @@ -345,7 +345,7 @@ \subsection{预处理} 减少数据中的变化量既能够减少\gls{generalization}误差,也能够减小拟合训练集所需模型的大小。 更简单的任务可以通过更小的模型来解决,而更简单的解决方案\gls{generalization}能力一般更好。 这种类型的预处理通常被设计为去除输入数据中的某种可变性,这对于人工设计者来说是容易描述的,并且人工设计者能够保证不受到任务影响。 -当使用大型数据集和大型模型训练时,这种预处理通常是不必要的,并且最好只是让模型学习哪些变化性应该保留。 +当使用大型数据集和大型模型训练时,这种预处理通常是不必要的,并且最好就让模型去学习哪些变化性应该保留。 例如,用于分类ImageNet的AlexNet系统仅具有一个预处理步骤:对每个像素减去训练样本的平均值\citep{Krizhevsky-2012}。 % 442 @@ -385,7 +385,7 @@ \subsubsection{对比度归一化} % 442 end -从大图像中剪切感兴趣的对象所组成的数据集不可能包含任何强度几乎恒定的图像。 +从大图像中剪切感兴趣的对象所组成的数据集不太可能包含任何强度几乎恒定的图像。 在这些情况下,通过设置$\lambda = 0$来忽略小分母问题是安全的,并且在非常罕见的情况下为了避免除以$0$,通过将$\epsilon$设置为一个非常小的值比如说$10^{-8}$。 这也是~\citet{Goodfellow+al-arxiv-2013}在CIFAR-10数据集上所使用的方法。 随机剪裁的小图像更可能具有几乎恒定的强度,使得激进的\gls{regularization}更有用。 @@ -398,10 +398,10 @@ \subsubsection{对比度归一化} \eqnref{eqn:123}中的\gls{standard_deviation}仅仅是对图片$L^2$范数的重新缩放(假设图像的平均值已经被移除)。 我们更偏向于根据\gls{standard_deviation}而不是$L^2$范数来定义~\glssymbol{GCN},因为\gls{standard_deviation}包括除以像素数量这一步,从而基于\gls{standard_deviation}的~\glssymbol{GCN}~能够使用与图像大小无关的固定的$s$。 -然而,观察到$L^2$范数与\gls{standard_deviation}成比例,这符合我们的直觉。 +然而,观察到$L^2$范数与\gls{standard_deviation}成比例,能够帮助我们建立一种直观的感觉。 我们可以把~\glssymbol{GCN}~理解成到球壳的一种映射。 \figref{fig:gcn_sphere_color}对此有所说明。 -这可能是一个有用的属性,因为\gls{NN}往往更好地响应空间方向,而不是精确的位置。 +这可能是一个有用的属性,因为\gls{NN}往往能更好地响应空间方向,而不是精确的位置。 响应相同方向上的多个距离需要具有共线权重向量但具有不同偏置的\gls{hidden_unit}。 这样的情况对于学习算法来说可能是困难的。 此外,许多浅层的图模型把多个分离的模式表示在一条线上会出现问题。 @@ -466,12 +466,13 @@ \subsubsection{对比度归一化} \gls{LCN}的各种定义都是可行的。 在所有情况下,我们可以通过减去邻近像素的平均值并除以邻近像素的\gls{standard_deviation}来修改每个像素。 -在一些情况下,要计算以当前要修改的像素为中心的矩形窗口中所有像素的平均值和\gls{standard_deviation}~\citep{Pinto08}。 +在一些情况下,计算的是以当前要修改的像素为中心的矩形窗口中所有像素的平均值和\gls{standard_deviation}~\citep{Pinto08}。 在其他情况下,使用的则是以要修改的像素为中心的高斯权重的加权平均和加权\gls{standard_deviation}。 在彩色图像的情况下,一些策略单独处理不同的颜色通道,而其他策略组合来自不同通道的信息以使每个像素归一化\citep{sermanet-icpr-12}。 % 444 \gls{LCN}通常可以通过使用可分离卷积(参考\secref{sec:efficient_convolution_algorithms})来计算\gls{feature_map}的局部平均值和局部\gls{standard_deviation},然后在不同的\gls{feature_map}上使用逐元素的减法和除法。 +\gls{LCN}通常可以通过使用可分离卷积(参考\secref{sec:efficient_convolution_algorithms})来计算\gls{feature_map}的局部平均值和局部\gls{standard_deviation},然后在不同的\gls{feature_map}上使用逐元素的减法和除法来实现。 % 444 \gls{LCN}是可微分的操作,并且还可以作为一种非线性作用应用于网络隐藏层,以及应用于输入的预处理操作。 @@ -488,7 +489,7 @@ \subsection{\glsentrytext{dataset_augmentation}} 如\secref{sec:dataset_augmentation_chap7}中讲到的一样,我们很容易通过增加训练集的额外副本来增加训练集的大小,进而改进分类器的\gls{generalization}能力。 这些额外副本可以通过对原始图像进行一些变化来生成,但是并不改变其类别。 \gls{object_recognition}这个分类任务特别适合于这种形式的\gls{dataset_augmentation},因为类别信息对于许多变换是不变的,而我们可以简单地对输入应用诸多几何变换。 -如前所述,分类器可以受益于随机转换或者旋转,某些情况下输入的翻转可以增强数据集。 +如前所述,分类器可以受益于随机平移或者旋转,以及某些情况下输入的翻转,以此增强数据集。 在专门的\gls{CV}应用中,存在很多更高级的用以\gls{dataset_augmentation}的变换。 这些方案包括图像中颜色的随机扰动~\citep{Krizhevsky-2012},以及对输入的非线性几何变形~\citep{LeCun98-small}。 % 445 @@ -500,7 +501,7 @@ \section{\glsentrytext{SR}} \label{sec:speech_recognition} % 446 -\gls{SR}任务在于将一段包括了自然语言发音的声学信号投影到对应说话人的词序列上。 +\gls{SR}任务在于将一段包括了自然语言发音的声学信号映射到对应说话人意图表达的词序列上。 令$\MX=(\Vx^{(1)},\Vx^{(2)},\ldots,\Vx^{(T)})$表示语音的输入向量(传统做法以$20$ms为一帧分割信号)。 许多\gls{SR}的系统通过特殊的手工设计方法预处理输入信号,从而提取特征,但是某些\gls{DL}系统\citep{jaitly2011learning}直接从原始输入中学习特征。 令$\Vy=(y_{1},y_{2},\ldots,y_{N})$表示目标的输出序列(通常是一个词或者字符的序列)。 @@ -521,7 +522,7 @@ \section{\glsentrytext{SR}} 比如说,\citet{Robinson+Fallside91}在TIMIT数据集\citep{garofolo1993darpa}(有$39$个区分的\gls{phoneme}% ?? error )上达到了$26$\%的\gls{phoneme}错误率,这个结果优于或者说是可以与基于~\glssymbol{HMM}~的结果相比。 从那时起,TIMIT成为了\gls{phoneme}识别的一个基准数据集,在\gls{SR}中的作用就和MNIST在\gls{object_recognition}中的作用差不多。 -然而,由于\gls{SR}软件系统中复杂的工程因素以及在基于~\glssymbol{GMM}-\glssymbol{HMM}~的系统中已经付出的巨大努力,工业界并没有迫切转向\gls{NN}的需求。 +然而,由于\gls{SR}软件系统中复杂的工程因素以及在基于~\glssymbol{GMM}-\glssymbol{HMM}~的系统中已经付出的巨大努力,工业界并没有看到迫切转向\gls{NN}的需求。 结果,直到21世纪00年代末期,学术界和工业界的研究者们更多的是用\gls{NN}为~\glssymbol{GMM}-\glssymbol{HMM}~系统学习一些额外的特征。 % 447 @@ -552,18 +553,18 @@ \section{\glsentrytext{SR}} % 448 其中的一个创新点是\gls{convolutional_network}的应用~\citep{Sainath-et-al-ICASSP2013}。 -\gls{convolutional_network}在时域与频域上复用了权重,改进了之前的仅在时域上使用重复权值的\gls{TDNNs}。 +\gls{convolutional_network}在时域与频域上复用了权重,改进了之前的仅在时域上复用权重的\gls{TDNNs}。 这种新的二维的卷积模型并不是将输入的频谱当作一个长的向量,而是当成是一个图像,其中一个轴对应着时间,另一个轴对应的是谱分量的频率。 % 448 完全抛弃~\glssymbol{HMM}~并转向研究\gls{end_to_end}\gls{DL}\gls{SR}系统是至今仍然活跃的另一个重要推动。 -这个领域第一个主要的突破是~\citet{Graves-et-al-ICASSP2013},其中训练了一个深度的\gls{LSTM}\gls{RNN}(见\secref{sec:the_long_short_term_memory_and_other_gated_rnns}),使用了帧-\gls{phoneme}排列的~\glssymbol{MAP}~推断,就像~\citet{LeCun98-small}以及CTC框架~\citep{Graves-et-al-2006,Graves-book2012}中一样。 -一个深度\gls{RNN}~\citep{Graves-et-al-ICASSP2013}每个\gls{time_step}的各层都有状态变量,两种\gls{unfolded_graph}的方式导致两种不同深度:一种是普通的根据层的堆叠衡量的深度,另一种根据时间\gls{unfolding}衡量的深度。 +这个领域第一个主要的突破是~\citet{Graves-et-al-ICASSP2013},其中训练了一个深度的\gls{LSTM}\gls{RNN}(见\secref{sec:the_long_short_term_memory_and_other_gated_rnns}),使用了帧到\gls{phoneme}对其的~\glssymbol{MAP}~推断,就像~\citet{LeCun98-small}以及CTC框架~\citep{Graves-et-al-2006,Graves-book2012}中一样。 +一个深度\gls{RNN}~\citep{Graves-et-al-ICASSP2013}每个\gls{time_step}的各层都有状态变量,使得它的\gls{unfolded_graph}具有两种不同深度:一种是普通的根据层的堆叠衡量的深度,另一种根据时间\gls{unfolding}衡量的深度。 这个工作把TIMIT数据集上\gls{phoneme}的错误率记录降到了的新低$17.7$\%。 关于应用于其他领域的深度\gls{RNN}的变种可以参考~\citet{Pascanu-et-al-ICLR2014,Chung-et-al-NIPSDL2014-small}。 % 448 -另一个\gls{end_to_end}\gls{DL}\gls{SR}方向的最新方法是让系统学习如何利用\firstgls{phonetic}层级的信息``排列''\firstgls{acoustic}层级的信息~\citep{Chorowski-et-al-arxiv2014,llu_is2015b}。 +另一个\gls{end_to_end}\gls{DL}\gls{SR}方向的最新进展是让系统学习如何将\firstgls{phonetic}层级的信息与\firstgls{acoustic}层级的信息``对齐''~\citep{Chorowski-et-al-arxiv2014,llu_is2015b}。 % 448 @@ -573,8 +574,8 @@ \section{\glsentrytext{NLP}} \firstgls{NLP}让计算机能够使用人类语言,例如英语或法语。 为了让简单的程序能够高效明确地解析,计算机程序通常读取和发出特殊化的语言。 -而自然的语言通常是模糊的,并且可能不遵循形式的描述。 -\gls{NLP}中的应用如机器翻译,学习者需要读取一种人类语言的句子,并用另一种人类语言发出等同的句子。 +而自然的语言通常是模糊的,并且可能不遵循严格的形式描述。 +\gls{NLP}中的应用如机器翻译,学习者需要读取一种人类语言的句子,并用另一种人类语言发出相同意思的句子。 许多~\glssymbol{NLP}~应用程序基于\gls{language_model},\gls{language_model}定义了关于自然语言中的字、字符或字节序列的概率分布。 % -- 448 -- @@ -596,8 +597,8 @@ \subsection{\glsentrytext{n_gram}} 一个~\gls{n_gram}~是一个包含$n$个\gls{token}的序列。 -基于~\gls{n_gram}~的模型定义一个条件概率——给定前$n-1$个\gls{token}后的第$n$个\gls{token}的条件概率。 -该模型使用这些条件分布的乘积定义较长序列的概率分布: +基于~\gls{n_gram}~的模型定义一个条件概率——给定前$n-1$个\gls{token}后,第$n$个\gls{token}出现的条件概率。 +该模型使用这些条件分布的乘积定义更长(长度大于$n$)序列的概率分布: \begin{align} P(x_1, \dots, x_\tau) = P(x_1, \dots, x_{n-1}) \prod_{t=n}^\tau P(x_t \mid x_{t-n+1}, \dots, x_{t-1} ). \end{align} @@ -608,7 +609,7 @@ \subsection{\glsentrytext{n_gram}} 几十年来,基于~\gls{n_gram}~的模型都是统计\gls{language_model}的核心模块~\citep{Jelinek+Mercer80,Katz87,Chen+Goodman99}。 对于小的$n$值,模型有特定的名称:$n=1$称为\firstgls{unigram},$n=2$称为\firstgls{bigram}及$n=3$称为\firstgls{trigram}。 -这些名称源于相应数字的拉丁前缀和希腊后缀``-gram'',分别表示所写之物。 +这些名称源于相应数字的拉丁前缀和希腊后缀``-gram'',gram的意思是所写之物。 % -- 449 -- @@ -638,7 +639,7 @@ \subsection{\glsentrytext{n_gram}} \gls{smoothing}技术将概率质量从观察到的元组转移到类似的未观察到的元组。 见~\citet{Chen+Goodman99}的综述和实验对比。 其中一种基本技术基于向所有可能的下一个符号值添加非零概率质量。 -这个方法可以被证明是,计数参数具有均匀或~\ENNAME{Dirichlet}~先验的贝叶斯\gls{inference}。 +这个方法可以被看作带有一个计数参数符合均匀或~\ENNAME{Dirichlet}~分布的先验的贝叶斯\gls{inference}。 另一个非常流行的想法是包含高阶和低阶~\gls{n_gram}~模型的混合模型,其中高阶模型提供更多的\gls{capacity},而低阶模型尽可能地避免零计数。 如果上下文$x_{t-n+k}, \ldots, x_{t-1}$的频率太小而不能使用高阶模型,\textbf{回退方法}(back-off methods)就查找低阶~\gls{n_gram} 。 更正式地说,它们通过上下文$x_{t-n+k}, \ldots, x_{t-1}$估计$x_t$上的分布,并增加$k$直到找到足够可靠的估计。 @@ -648,17 +649,17 @@ \subsection{\glsentrytext{n_gram}} 经典的~\gls{n_gram}~模型特别容易引起\gls{curse_of_dimensionality}。 因为存在$|\SetV|^n$可能的~\gls{n_gram},而且 $|\SetV|$ 通常很大。 即使有大量训练数据和适当的$n$,大多数~\gls{n_gram}~也不会出现在训练集中。 -经典~\gls{n_gram}~模型的一种观点是执行最近邻查询。 +看待经典~\gls{n_gram}~模型的一种观点是把它看作执行最近邻查询。 换句话说,它可以被视为局部\gls{nonparametric}预测器,类似于$k$-最近邻。 这些极端局部预测器面临的统计问题已经在\secref{sec:local_constancy_and_smoothness_regularization}中描述过。 \gls{language_model}的问题甚至比普通模型更严重,因为任何两个不同的词在\gls{one_hot}向量空间中的距离彼此相同。 -因此,难以大量利用来自任意``邻居''的信息 —— 只有重复相同上下文的训练样本对局部泛化有用。 +因此,难以大量利用来自任何``邻居''的信息 —— 只有重复相同上下文的训练样本对局部泛化有用。 为了克服这些问题,\gls{language_model}必须能够在一个词和其他语义相似的词之间共享知识。 为了提高~\gls{n_gram}~模型的统计效率,\textbf{基于类的语言模型}(class-based language model)~\citep{Brown92,Ney+Kneser93,Niesler98}引入词类别的概念,然后属于同一类别的词共享词之间的统计强度。 这个想法使用了聚类算法,基于它们与其他词同时出现的频率,将该组词分成集群或类。 随后,模型可以在条件竖杠的右侧使用词类ID而不是单个词ID。 -混合(或回退)词模型和类模型的复合模型也是可能的。 +使用混合或回退(fallback)策略将词模型和类模型组成复合模型也是可能的。 尽管词类提供了在序列之间泛化的方式,但其中一些词被相同类的另一个替换,导致该\gls{representation}丢失了很多信息。 \subsection{\glsentrytext{NLM}} @@ -668,7 +669,7 @@ \subsection{\glsentrytext{NLM}} 不同于基于类的~\gls{n_gram}~模型,\gls{NLM}在能够识别两个相似的词,并且不丧失将每个词编码为彼此不同的能力。 \gls{NLM}共享一个词(及其上下文)和其他类似词(和上下文之间)的统计强度。 模型为每个词学习的\gls{distributed_representation},允许模型处理具有类似共同特征的词来实现这种共享。 -例如,如果词{\tt dog}和词{\tt cat}映射到具有许多属性的表示,则包含词{\tt cat}的句子可以告知模型对包含词{\tt dog}的句子做出预测,反之亦然。 +例如,如果词{\tt dog}和词{\tt cat}映射到具有许多共同属性的表示,则包含词{\tt cat}的句子可以影响模型对包含词{\tt dog}的句子做出的预测,反之亦然。 因为这样的属性很多,所以存在许多泛化的方式,可以将信息从每个训练语句传递到指数数量的语义相关语句。 \gls{curse_of_dimensionality}需要模型泛化到指数多的句子(指数相对句子长度而言)。 该模型通过将每个训练句子与指数数量的类似句子相关联克服这个问题。 @@ -702,7 +703,7 @@ \subsection{\glsentrytext{NLM}} 其他领域的\gls{NN}也可以定义嵌入。 例如,\gls{convolutional_network}的隐藏层提供``图像嵌入''。 因为自然语言最初不在实值向量空间上,所以~\glssymbol{NLP}~从业者通常对嵌入的这个想法更感兴趣。 -隐藏层在表示数据的方式上提供了更质变的戏剧性变化。 +隐藏层在表示数据的方式上提供了更显著的质上的变化。 % -- 452 -- @@ -713,7 +714,7 @@ \subsection{高维输出} \label{sec:high_dimensional_outputs} 在许多自然语言应用中,我们通常希望我们的模型产生词(而不是字符)作为输出的基本单位。 -对于大词汇表,由于词汇量很大,在词的选择上表示输出分布的计算成本可能非常高。 +对于大词汇表,由于词汇量很大,以在所有可能的词上进行选择的形式表示输出分布的计算成本可能非常高。 在许多应用中,$\SetV$包含数十万词。 表示这种分布的朴素方法是应用一个仿射变换,将隐藏表示转换到输出空间,然后应用~\ENNAME{softmax}~函数。 假设我们的词汇表$\SetV$大小为$| \SetV |$。 @@ -731,7 +732,7 @@ \subsection{高维输出} \hat{y}_i &= \frac{e^{a_i}}{\sum_{i'=1}^{|\SetV|} e^{a_{i'}}}. \end{align} 如果$\Vh$包含$n_h$个元素,则上述操作复杂度是 $O(|\SetV| n_h)$。 -在$n_h$为数千和$| \SetV |$数十万的情况下,这个操作占据了\gls{NLM}的大多数计算。 +在$n_h$为数千和$| \SetV |$数十万的情况下,这个操作占据了\gls{NLM}的计算开销的一大部分。 % -- 453 -- @@ -740,7 +741,7 @@ \subsubsection{使用\glsentrytext{shortlist}} \citet{Schwenk+Gauvain2002}和 \citet{Schwenk-2007}在这种方法的基础上建立新的方式,将词汇表$\SetV$分为最常见词汇(由\gls{NN}处理)的\firstgls{shortlist}~$\SetL$和较稀有词汇的尾列表$\SetT = \SetV \backslash \SetL$(由\gls{n_gram}模型处理)。 为了组合这两个预测,\gls{NN}还必须预测在上下文$C$之后出现的词位于尾列表的概率。 我们可以添加额外的~\ENNAME{sigmoid}~输出单元估计 $P(i \in \SetT \mid C)$实现这个预测。 -额外输出则可以用来估计$\SetV$中所有词的概率分布,如下: +用上这个额外输出,我们就可以估计$\SetV$中所有词的概率分布,如下: \begin{align} P(y=i\mid C) =& 1_{i \in \SetL} P(y=i\mid C, i \in \SetL) (1 - P(i \in \SetT\mid C)) \nonumber \\ & + 1_{i \in \SetT} P(y=i\mid C, i \in \SetT) P(i \in \SetT\mid C), @@ -748,7 +749,7 @@ \subsubsection{使用\glsentrytext{shortlist}} 其中$P(y=i\mid C, i \in \SetL)$由\gls{NLM}提供$P(y=i\mid C, i \in \SetT)$由~\gls{n_gram}~模型提供。 稍作修改,这种方法也可以在\gls{NLM}的~\ENNAME{softmax}~层中使用额外的输出值,而不是单独的~\ENNAME{sigmoid}~单元。 -\gls{shortlist}方法的一个明显缺点是,\gls{NLM}的潜在泛化优势仅限于最常用的词,这大概是最没用的。 +\gls{shortlist}方法的一个明显缺点是,\gls{NLM}的潜在泛化优势仅限于最常用的词,而在这部分词上,\gls{NLM}大概相对来说是用处最小的。 这个缺点引发了处理高维输出替代方法的探索,如下所述。 \subsubsection{分层Softmax} @@ -764,7 +765,7 @@ \subsubsection{分层Softmax} 选择一个词的概率是由路径(从树根到包含该词叶子的路径)上的每个节点通向该词分支概率的乘积给出。 \figref{fig:chap12_word_hierarchy}是一个简单的例子。 \citet{Mnih+Hinton-2009}也描述了使用多个路径来识别单个词的方法,以便更好地建模具有多个含义的词。 -计算词的概率则涉及在导向该词所有路径上的求和。 +此时计算词的概率则涉及在导向该词的所有路径上进行求和。 \begin{figure}[htp] \centering \ifOpenSource @@ -800,24 +801,24 @@ \subsubsection{分层Softmax} 因为可以高效地计算输出对数似然(低至$\log |\SetV|$而不是$ |\SetV|$),所以也可以高效地计算梯度。 这不仅包括关于输出参数的梯度,而且还包括关于隐藏层激活的梯度。 -优化树结构最小化期望的计算数量是可能的,但通常不切实际。 +优化树结构从而最小化期望的计算量是可能的,但通常不实际。 给定词的相对频率,信息理论的工具可以指定如何选择最佳的二进制编码。 为此,我们可以构造树,使得与词相关联的位数量近似等于该词频率的对数。 然而在实践中,节省计算通常事倍功半,因为输出概率的计算仅是\gls{NLM}中总计算的一部分。 例如,假设有$l$个全连接的宽度为$n_h$的隐藏层。 令$n_b$是识别一个词所需比特数的加权平均值,其加权由这些词的频率给出。 在这个例子中,计算隐藏激活所需的操作数增长为$O(ln_h^2)$,而输出计算增长为$O(n_h n_b)$。 -只要$ n_b \leq l n_h$,我们可以通过收缩$n_h$比收缩$n_b$减少更多的计算量。 +只要$ n_b \leq l n_h$,相比于收缩$n_b$,我们可以通过收缩$n_h$减少更多的计算量。 事实上,$n_b$通常很小。 因为词汇表的大小很少超过一百万而$\log_ 2(10^6) \approx 20$,所以可以将$n_b$减小到大约20,但$n_h$通常大得多,大约为$10^3$或更大。 -我们可以定义深度为2和分支因子为$\sqrt{|\SetT|}$的树,而不用仔细优化分支因子为$2$的树。 +与其仔细优化分支因子为$2$的树,我们不如定义深度为2和分支因子为$\sqrt{|\SetT|}$的树。 这样的树对应于简单定义一组互斥的词类。 基于深度为$2$的树的简单方法可以获得层级策略大部分的计算益处。 % -- 455 -- -一个仍然有点开放的问题是如何最好地定义这些词类,或者如何定义一般的词层次结构。 -早期工作使用现有的层次结构\citep{Morin+Bengio-2005-small} ,但也可以理想地与\gls{NLM}联合学习层次结构。 +一个仍然有点开放的问题是如何最好地定义这些词类,或者说如何定义一般的词层次结构。 +早期工作使用现有的层次结构\citep{Morin+Bengio-2005-small} ,但理想情况下也可以与\gls{NLM}联合学习层次结构。 学习层次结构很困难。 对数似然的精确优化似乎难以解决,因为词层次的选择是离散的,不适于基于梯度的优化。 然而,我们可以使用离散优化来近似地最优化词类的分割。 @@ -828,7 +829,7 @@ \subsubsection{分层Softmax} 另一个重要的操作是在给定上下文中选择最可能的词。 不幸的是,树结构不能为这个问题提供高效精确的解决方案。 -缺点是在实践中,分层~\ENNAME{softmax}~倾向于更差的测试结果(相对基于采样的方法),我们将在下文描述。 +分层~\ENNAME{softmax}~的一个缺点是在实践中倾向于表现得比基于采样的方法差,基于采样的方法我们将在下文描述。 这可能是因为词类选择得不好。 \subsubsection{\glsentrytext{importance_sampling}} @@ -853,17 +854,17 @@ \subsubsection{\glsentrytext{importance_sampling}} 我们可以从另一个分布中采样,而不是从模型中采样,这个分布称为\firstgls{proposal_distribution}(记为$q$),并通过适当的权重校正从错误分布采样引入的\gls{bias_sta} \citep{Bengio+Senecal-2003-small,Bengio+Senecal-2008}。 这是一种称为\firstgls{importance_sampling}的更通用技术的应用,我们将在\secref{sec:importance_sampling_chap12}中更详细地描述。 不幸的是,即使精确\gls{importance_sampling}也不一定有效,因为我们需要计算权重$p_i / q_i$,其中的$p_i = P(i \mid C)$只能在计算所有得分$a_i$后才能计算。 -这个应用采取的解决方案称为\gls{biased_importance_sampling},其中重要性权重被归一化加和为1。 +这个应用采取的解决方案称为\gls{biased_importance_sampling},其中重要性权重被归一化至加和为1。 当对负词$n_i$进行采样时,相关联的梯度被加权为: \begin{align} w_i = \frac{p_{n_i} / q_{n_i}}{\sum_{j=1}^N p_{n_j} / q_{n_j}}. \end{align} -这些权重用于对来自$q$的$m$个负样本给出适当的重要性,以形成负相估计对梯度的贡献: +这些权重用于对来自$q$的$m$个负样本给出适当的重要性,以估计负相项对梯度的贡献: \begin{align} \sum_{i=1}^{|\SetV|} P(i \mid C) \frac{\partial a_i}{\partial \theta} \approx \frac{1}{m} \sum_{i=1}^m w_i \frac{\partial a_{n_i}}{\partial \theta}. \end{align} - \gls{unigram}或\gls{bigram}分布与\gls{proposal_distribution} $q$工作得一样好。 -从数据估计这种分布的参数是很容易。 + \gls{unigram}或\gls{bigram}分布可以很好地作为\gls{proposal_distribution} $q$。 +从数据估计这种分布的参数是很容易的。 在估计参数之后,也可以非常高效地从这样的分布采样。 \firstgls{importance_sampling}不仅可以加速具有较大~\ENNAME{softmax}~输出的模型。 @@ -874,10 +875,10 @@ \subsubsection{\glsentrytext{importance_sampling}} 由于各种原因,训练产生这种稀疏向量的\gls{ML}模型的成本可能很高。 在学习的早期,模型可能不会真的使输出真正稀疏。 此外,将输出的每个元素与目标的每个元素进行比较,可能是描述训练的\gls{loss_function}最自然的方式。 -这意味着稀疏输出并不一定能带来计算上的好处,因为模型可以选择使大多数输出非零,并且所有这些非零值需要与相应的训练目标进行比较( 即使训练目标是零)。 +这意味着稀疏输出并不一定能带来计算上的好处,因为模型可能会选择使大多数输出非零,而所有这些非零值都需要与相应的训练目标进行比较( 即使训练目标是零)。 \citet{Dauphin2011-small} 证明可以使用\gls{importance_sampling}加速这种模型。 高效算法最小化``正词''(在目标中非零的那些词)和相等数量的``负词''的重构损失。 -负词是被随机选取的,如使用启发式采样更可能被误解的词。 +负词是被随机选取的,如使用启发式采样更可能被误判的词。 该启发式过采样引入的偏差则可以使用重要性权重校正。 % -- 458 -- @@ -890,7 +891,7 @@ \subsubsection{噪声对比估计和排名损失} \label{sec:combining_neural_language_models_with_n_grams} 为减少训练大词汇表的\gls{NLM}的计算成本,研究者也提出了其他基于采样的方法。 -早期的例子是 \citet{Collobert+Weston-ICML2008}提出的排名损失,将\gls{NLM}每个词的输出视为一个得分,并试图使正确词的得分$a_y$比其他词$a_i$排名更高。提出的排名损失则是 +早期的例子是 \citet{Collobert+Weston-ICML2008}提出的排名损失,将\gls{NLM}每个词的输出视为一个得分,并试图使正确词的得分$a_y$比其他词的得分$a_i$排名更高。提出的排名损失则是 \begin{align} L = \sum_i \max(0,1-a_y+a_i). \end{align} @@ -912,8 +913,8 @@ \subsection{结合\glsentrytext{n_gram}和\glsentrytext{NLM}} 因此,增加\gls{capacity}的一种简单方法是将两种方法结合,由\gls{NLM}和~\gls{n_gram}~\gls{language_model}组成\gls{ensemble}~\citep{BenDucVin01-small,Bengio-nnlm2003-small}。 -对于任何\gls{ensemble},如果\gls{ensemble}成员产生独立的错误,这种技术可以减少测试误差。 -\gls{ensemble}学习领域提供了许多方法来组合\gls{ensemble}成员的预测,包括统一加权和在验证集上选择权重。 +对于任何\gls{ensemble},如果\gls{ensemble}成员产生的错误相互独立,这种技术可以减少测试误差。 +\gls{ensemble}学习领域提供了许多方法来组合\gls{ensemble}成员的预测,包括平均权重的加权和针对验证集选择权重。 \citet{Mikolov-Interspeech-2011} 扩展了\gls{ensemble},不是仅包括两个模型,而是包括大量模型。 我们也可以将\gls{NN}与最大熵模型配对并联合训练\citep{Mikolov-ASRU-2011}。 该方法可以被视为训练具有一组额外输入的\gls{NN},额外输入直接连接到输出并且不连接到模型的任何其他部分。 @@ -926,11 +927,11 @@ \subsection{\glsentrytext{NMT}} 机器翻译以一种自然语言读取句子并产生等同含义的另一种语言的句子。 机器翻译系统通常涉及许多组件。 -在高层次,一个组件通常会提出许多候选翻译。 +在高层次,通常有一个组件负责提出许多候选翻译。 由于语言之间的差异,这些翻译中的许多翻译是不符合语法的。 例如,许多语言在名词后放置形容词,因此直接翻译成英语时,它们会产生诸如``apple red''的短语。 提议机制提出建议翻译的许多变体,理想情况下应包括``red apple''。 -翻译系统的第二个组成部分(\gls{language_model})评估提议的翻译,并可以评估``red apple''比``apple red''更好。 +翻译系统的第二个组件(\gls{language_model})评估提议的翻译,并可以评估``red apple''比``apple red''更好。 % -- 460 -- @@ -949,9 +950,9 @@ \subsection{\glsentrytext{NMT}} 基于~\glssymbol{MLP}~方法的缺点是需要将序列预处理为固定长度。 为了使翻译更加灵活,我们希望模型允许可变的输入长度和输出长度。 \glssymbol{RNN}~具备这种能力。 -\secref{sec:modeling_sequences_conditioned_on_context_with_rnns}描述了给定某些输入后,关于序列条件分布~\glssymbol{RNN}~的几种构造方法,并且\secref{sec:encoder_decoder_sequence_to_sequence_architectures}描述了当输入是序列时如何实现这种条件分布。 +\secref{sec:modeling_sequences_conditioned_on_context_with_rnns}描述了给定某些输入后,表示(输出)序列上的条件分布的~\glssymbol{RNN}~的几种构造方法,并且\secref{sec:encoder_decoder_sequence_to_sequence_architectures}描述了当输入是序列时如何实现这种条件分布。 在所有情况下,一个模型首先读取输入序列并产生概括输入序列的数据结构。我们称这个概括为``上下文''~$C$。 -上下文$C$可以是向量列表,或者向量或张量。 +上下文$C$可以是向量列表,也可以是向量或张量。 读取输入以产生$C$的模型可以是~\glssymbol{RNN}~\citep{Cho-et-al-EMNLP2014,Sutskever-et-al-NIPS2014,Jean-et-al-arxiv2014}或\gls{convolutional_network}~\citep{Kalchbrenner+Blunsom-EMNLP2013}。 另一个模型(通常是RNN),则读取上下文$C$并且生成目标语言的句子。 在\figref{fig:chap12_encoder_decoder_architecture}中展示了这种用于机器翻译的\gls{encoder}-\gls{decoder}框架的总体思想。 @@ -965,7 +966,7 @@ \subsection{\glsentrytext{NMT}} \centerline{\includegraphics{Chapter12/figures/encoder_decoder_architecture.pdf}} \fi \caption{\gls{encoder}-\gls{decoder}架构在直观\gls{representation}(例如词序列或图像)和语义\gls{representation}之间来回映射。 -使用来自一种模态数据的\gls{encoder}输出(例如从法语句子到捕获句子含义的隐藏\gls{representation}的\gls{encoder}映射)作为用于另一模态的\gls{decoder}输入(如\gls{decoder}将捕获句子含义的隐藏\gls{representation}映射到英语),我们可以训练将一种模态转换到另一种模态的系统。 +通过将一种模态数据的\gls{encoder}的输出(例如从法语句子到捕获句子含义的隐藏\gls{representation}的\gls{encoder}映射)作为另一模态数据的\gls{decoder}的输入(如\gls{decoder}将捕获句子含义的隐藏\gls{representation}映射到英语),我们可以训练将一种模态转换到另一种模态的系统。 这个想法已经成功应用于很多领域,不仅仅是机器翻译,还包括为图像生成标题。 } \label{fig:chap12_encoder_decoder_architecture} @@ -998,7 +999,7 @@ \subsubsection{使用\glsentrytext{attention_mechanism}并对齐数据片段} \gls{attention_mechanism}对具有权重$\alpha^{(t)}$的特征向量$\Vh^{(t)}$进行加权平均形成上下文向量$\Vc$。 在一些应用中,特征向量$\Vh$是\gls{NN}的\gls{hidden_unit},但它们也可以是模型的原始输入。 权重$\alpha^{(t)}$由模型本身产生。 -它们通常是区间$[0,1]$中的值,并且旨在仅仅集中在单个$\Vh^{(t)}$周围,使得加权平均精确地读取接近一个特定\gls{time_step}的特征向量。 +它们通常是区间$[0,1]$中的值,并且旨在仅仅集中在单个$\Vh^{(t)}$周围,使得加权平均近似模拟精确地读取一个特定\gls{time_step}的特征向量。 权重$\alpha^{(t)}$通常由模型另一部分发出的相关性得分应用softmax函数后产生。 \gls{attention_mechanism}在计算上需要比直接索引期望的$\Vh^{(t)}$付出更高的代价,但直接索引不能使用\gls{GD}训练。 基于加权平均的\gls{attention_mechanism}是平滑、可微的近似,可以使用现有优化算法训练。 @@ -1008,11 +1009,11 @@ \subsubsection{使用\glsentrytext{attention_mechanism}并对齐数据片段} 我们可以认为基于\gls{attention_mechanism}的系统有三个组件: \begin{itemize} - \item 读取器\emph{读取}原始数据(例如源语句中的源词)并将其转换为\gls{distributed_representation},其中一个特征向量与每个词的位置相关联。 - \item 存储器存储读取器输出的特征向量列表。这可以被理解为包含事实序列的\emph{存储器},而之后不必以相同的顺序从中检索,也不必访问全部。 + \item 读取器\emph{读取}原始数据(例如源语句中的源词)并将其转换为\gls{distributed_representation},其中一个特征向量与一个词的位置相关联。 + \item 用于存储读取器输出的特征向量的列表。这可以被理解为一个包含事实序列的\emph{存储器},之后可以从中检索,而检索不必以相同的顺序发生,也不必访问全部。 \item 最后一个程序\emph{利用}存储器的内容顺序地执行任务,每个\gls{time_step}聚焦于某个存储器元素的内容(或几个,具有不同权重)。 \end{itemize} -第三组件可以生成翻译语句。 +第三组件可以生成翻译结果语句。 % -- 463 -- @@ -1025,26 +1026,26 @@ \subsubsection{使用\glsentrytext{attention_mechanism}并对齐数据片段} \subsection{历史展望} \label{sec:historical_perspective_chap12} -在对\gls{back_propagation}的第一次探索中,\citet{Rumelhart86b-small}等人提出了\gls{distributed_representation}符号的思想,其中符号对应于族成员的身份,而\gls{NN}捕获族成员之间的关系,训练样本形成三元组如(Colin,Mother,Victoria)。 +在对\gls{back_propagation}的第一次探索中,\citet{Rumelhart86b-small}等人提出了\gls{distributed_representation}符号的思想,其中符号对应于家族成员的标识,而\gls{NN}捕获家族成员之间的关系,训练样本形成三元组如(Colin,Mother,Victoria)。 \gls{NN}的第一层学习每个族成员的表示。例如,Colin的特征可能代表Colin所在的族树,他所在树的分支,他来自哪一代等等。 -我们可以将\gls{NN}认为是将这些属性关联在一起的计算学习规则,可以获得期望预测。 -模型则可以进行预测,例如推断谁是Colin的母亲。 +我们可以将\gls{NN}认为是计算一组学到的规则,这些规则将属性关联在一起从而可以获得期望的预测结果。 +模型于是可以进行预测,例如推断谁是Colin的母亲。 \cite{Deerwester90}将符号嵌入的想法扩展到对词的嵌入。 这些嵌入使用SVD学习。 -之后,嵌入将通过\gls{NN}学习。 +后来,嵌入通过\gls{NN}学习。 \gls{NLP}的历史是由流行表示(对模型输入不同方式的表示)的变化为标志的。 在早期对符号和词建模的工作之后,\gls{NN}在\glssymbol{NLP}上一些最早的应用\citep{Miikkulainen91,Schmidhuber96}将输入表示为字符序列。 \citet{BenDucVin01-small} 将焦点重新引到对词建模并引入\gls{NLM},能产生可解释的\gls{word_embedding}。 -这些神经模型已经从在一小组符号上的定义表示(20世纪80年代)扩展到现代应用中的数百万字(包括专有名词和拼写错误)。 +这些神经模型已经从一开始在一小组符号上定义的表示(20世纪80年代)扩展到现代应用中的数百万字(包括专有名词和拼写错误)。 这种计算扩展的努力导致了\secref{sec:high_dimensional_outputs}中描述的技术发明。 % -- 464 -- -最初,使用词作为\gls{language_model}的基本单元可以改进语言建模的性能 \citep{BenDucVin01-small}。 -而今,新技术不断推动基于字符 \citep{Sutskever-et-al-ICML2011})和基于词的模型向前发展,最近的工作 \citep{gillick2015multilingual}甚至建模Unicode字符的单个字节。 +最初,使用词作为\gls{language_model}的基本单元改进了语言建模的性能 \citep{BenDucVin01-small}。 +而今,新技术不断推动基于字符 \citep{Sutskever-et-al-ICML2011})和基于词的模型一起向前发展,最近的工作 \citep{gillick2015multilingual}甚至建模Unicode字符的单个字节。 \gls{NLM}背后的思想已经扩展到多个\gls{NLP}应用,如解析\citep{Henderson-NAACL2003,Henderson-ACL2004,Collobert-AISTATS2011}、词性标注、语义角色标注、分块等,有时使用共享\gls{word_embedding}的单一多任务学习架构\citep{Collobert+Weston-ICML2008,collobert2011natural}。 @@ -1065,8 +1066,7 @@ \subsection{\glsentrytext{recommender_system}} 目前,互联网的资金主要来自于各种形式的在线广告。 经济的主要部分依靠网上购物。 包括Amazon和eBay在内的公司都使用了\gls{ML}(包括\gls{DL})推荐他们的产品。 -有时,项目不是实际出售的产品。 -如选择在社交网络新闻信息流上显示的帖子、推荐观看的电影、推荐笑话、推荐专家建议、匹配视频游戏的玩家或匹配约会的人。 +有时,项目不是实际出售的产品,而是如选择在社交网络新闻信息流上显示的帖子、推荐观看的电影、推荐笑话、推荐专家建议、匹配视频游戏的玩家或匹配约会的人。 % -- 465 -- 通常,这种关联问题可以作为\gls{supervised_learning}问题来处理:给出一些关于项目和关于用户的信息,预测感兴趣的行为(用户点击广告、输入评级、点击``喜欢''按钮、 购买产品,在产品上花钱、花时间访问产品页面等)。 @@ -1171,7 +1171,7 @@ \subsubsection{\glsentrytext{exploration}与\glsentrytext{exploitation}} \subsection{知识表示、推理和回答} \label{sec:knowledge_representation_reasoning and_question_answering} -因为使用符号\citep{Rumelhart86b-small}和词嵌入\citep{Deerwester90,BenDucVin01-small},\gls{DL}方法在\gls{language_model}、机器翻译和\gls{NLP}方面非常成功。 +因为使用符号嵌入\citep{Rumelhart86b-small}和词嵌入\citep{Deerwester90,BenDucVin01-small},\gls{DL}方法在\gls{language_model}、机器翻译和\gls{NLP}方面非常成功。 这些嵌入表示关于单个词或概念的语义知识。 研究前沿是为短语或词和事实之间的关系开发嵌入。 搜索引擎已经使用\gls{ML}来实现这一目的,但是要改进这些更高级的表示还有许多工作要做。 diff --git a/Chapter5/machine_learning_basics.tex b/Chapter5/machine_learning_basics.tex index 647b5db..36eebda 100644 --- a/Chapter5/machine_learning_basics.tex +++ b/Chapter5/machine_learning_basics.tex @@ -551,8 +551,8 @@ \section{\glsentrytext{capacity}、\glsentrytext{overfitting}和\glsentrytext{un 理想模型假设我们能够预先知道生成数据的真实概率分布。 然而这样的模型仍然会在很多问题上发生一些错误,因为分布中仍然会有一些\gls{noise}。 -在\gls{supervised_learning}中,从$\Vx$到$y$的映射可能内在是随机的,或者$y$可能是其他变量(包括$\Vx$在内)的确定性函数。 -从预先知道的真实分布$p(\Vx,y)$预测而出现的误差被称为\firstgls{bayes_error}。 +在\gls{supervised_learning}中,从$\Vx$到$y$的映射可能本质上是随机的,或者$y$虽然是确定性函数,但不光受$\Vx$影响,还受$\Vx$之外的其他变量的影响。 +从预先知道的真实分布$p(\Vx,y)$进行预测而出现的误差被称为\firstgls{bayes_error}。 \gls{training_error}和\gls{generalization_error}会随训练集的大小发生变化。 泛化误差的期望从不会因训练\gls{example:chap5}数目的增加而增加。 @@ -626,7 +626,7 @@ \subsection{\glsentrytext{regularization}} \end{equation} 其中$\lambda$是提前挑选的值,控制我们偏好小范数权重的程度。 当$\lambda =0$,我们没有任何偏好。 -越大的$\lambda$偏好范数越小的权重。 +越大的$\lambda$越偏好范数小的权重。 最小化$J(\Vw)$可以看作是拟合训练数据和偏好小权重范数之间的权衡。 这会使得解决方案的斜率较小,或是将权重放在较少的\gls{feature}上。 我们可以训练具有不同$\lambda$值的高次多项式回归模型,来举例说明如何通过权重衰减控制模型欠拟合或过拟合的趋势。 @@ -902,7 +902,7 @@ \subsection{方差和\glsentrytext{standard_error}} \text{SE}(\hat{\mu}_m) = \sqrt{ \text{Var} \left[ \frac{1}{m} \sum_{i=1}^m x^{(i)} \right] } = \frac{\sigma}{\sqrt{m}}, \end{equation} 其中$\sigma^2$是\gls{example:chap5} $x^{(i)}$的真实方差。 -\gls{standard_error}通常被记作$\sigma$。 +通常通过$\sigma$的估计值来估计\gls{standard_error}。 可惜,样本方差的平方根和方差无偏估计的平方根都不是\gls{standard_deviation}的无偏估计。 这两种计算方法都倾向于低估真实的\gls{standard_deviation},但仍用于实际中。 相较而言,方差无偏估计的平方根较少被低估。 @@ -1093,7 +1093,7 @@ \subsection{条件对数似然和\glsentrytext{mean_squared_error}} \text{MSE}_{\text{train}} = \frac{1}{m} \sum_{i=1}^m \norm{\hat{y}^{(i)} - y^{(i)}}^2, \end{equation} 我们立刻可以看出最大化关于$\Vw$的对数似然和最小化\gls{mean_squared_error}会得到相同的参数估计$\Vw$。 -但是对于相同的最优$\Vw$,这两个准则有着不同的值。 +这两个准则的值虽然不同,但是在相同的最优$\Vw$位置取得最优值。 这验证了\,\glssymbol{mean_squared_error}\,可以用于\gls{maximum_likelihood_estimation}。 正如我们将看到的,\gls{maximum_likelihood_estimation}有几个理想的性质。 @@ -1132,7 +1132,7 @@ \section{贝叶斯统计} 另一种方法是在做预测时会考虑所有可能的$\Vtheta$。 后者属于\firstgls{bayesian_statistics}的范畴。 -正如\secref{sec:point_estimation}中讨论的,频率派的视角是真实参数$\Vtheta$是未知的定值,而点估计$\hat{\Vtheta}$是考虑\gls{dataset}上函数(可以看作是随机的)的随机变量。 +正如\secref{sec:point_estimation}中讨论的,频率派的视角是真实参数$\Vtheta$是未知的定值,而点估计$\hat{\Vtheta}$是\gls{dataset}(可以看作是随机的)上的函数,从而是一个随机变量。 贝叶斯统计的视角完全不同。 贝叶斯用概率反映知识状态的确定性程度。 @@ -1396,9 +1396,9 @@ \subsection{\glsentrytext{SVM}} 那么判断新\gls{example:chap5}的类别仅需要计算非零$\alpha_i$对应的训练\gls{example:chap5}的核函数。 这些训练\gls{example:chap5}被称为\firstgls{support_vectors}。 -当\gls{dataset}很大时,\gls{kernel_machines}的计算量也会很大。 +当\gls{dataset}很大时,\gls{kernel_machines}的计算量也会很大。这成为核机器方法的另一个痛点。 我们将会在\secref{sec:stochastic_gradient_descent_chap5}回顾这个想法。 -带通用核的核机器致力于泛化得更好。 +带通用核的核机器并不总是泛化得很好。 我们将在\secref{sec:challenges_motivating_deep_learning}解释原因。 现代\gls{DL}的设计旨在克服核机器的这些限制。 当前\gls{DL}的复兴始于~\cite{Hinton06-small}表明神经网络能够在MNIST基准数据上胜过RBF核的\gls{SVM}。 @@ -1416,7 +1416,7 @@ \subsection{其他简单的\glsentrytext{supervised_learning}算法} 然后我们返回训练集上对应的$y$值的平均值。 这几乎适用于任何类型可以确定$y$值平均值的\gls{supervised_learning}。 在分类情况中,我们可以关于~\gls{one_hot}~编码向量$\Vc$求平均,其中$c_y = 1$,其他的$i$值取$c_i=0$。 -然后,我们可以解释这些~\gls{one_hot}~编码的均值为类别的概率分布。 +然后,我们可以将这些~\gls{one_hot}~编码的均值解释为类别的概率分布。 作为一个非参数学习算法,$k$-近邻能达到非常高的容量。 例如,假设我们有一个用$0$-$1$误差度量性能的多分类任务。 在此设定中,当训练\gls{example:chap5}数目趋向于无穷大时,$1$-最近邻收敛到两倍贝叶斯误差。 @@ -1470,7 +1470,7 @@ \section{\glsentrytext{unsupervised_learning}算法} 该术语通常与密度估计相关,学习从分布中采样、学习从分布中\gls{denoise}、寻找数据分布的流形或是将数据中相关的\gls{example:chap5}聚类。 一个经典的\gls{unsupervised_learning}任务是找到数据的``最佳''表示。 -``最佳''可以是不同的表示,但是一般来说,是指该表示在比本身表示的信息\emph{更简单}或更易访问而受到一些惩罚或限制的情况下,尽可能地保存关于$\Vx$更多的信息。 +``最佳''可以有不同的定义,但是一般来说,我们想要的是一个能尽量保留关于$\Vx$的更多信息,同时受到一些惩罚或遵循一些约束的表示。这些惩罚或约束的目的是使表示保持简单的形式,或使其比$\Vx$本身易于获取或使用。 % -- 142 -- @@ -1489,7 +1489,7 @@ \section{\glsentrytext{unsupervised_learning}算法} 表示的概念是\gls{DL}核心主题之一,因此也是本书的核心主题之一。 本节会介绍表示学习算法中的一些简单示例。 总的来说,这些示例算法会说明如何实施上面的三个标准。 -剩余的大部分章节会介绍额外的表示学习算法,它们以不同方式处理这三个标准或是引入其他标准。 +剩余的大部分章节会介绍额外的表示学习算法,它们以不同方式体现和发展这三个标准或是引入其他标准。 \subsection{\glsentrytext{PCA}} \label{sec:principal_components_analysis_chap5} @@ -1811,7 +1811,7 @@ \subsection{局部不变性和平滑\glsentrytext{regularization}} 当一个区域里的所有点$\Vx$在训练集中的$k$个最近邻是一样的,那么对这些点的预测也是一样的。 当$k=1$时,不同区域的数目不会比训练\gls{example:chap5}还多。 -虽然$k$-最近邻算法复制了附近训练\gls{example:chap5}的输出,大部分核机器也是在和附近训练\gls{example:chap5}相关的训练集输出上插值。 +$k$-最近邻算法只是复制了附近训练\gls{example:chap5}的输出,而大部分核机器会在和附近训练\gls{example:chap5}相关的训练集输出上插值。 一类重要的核函数是\firstgls{local_kernel},其核函数$k(\Vu,\Vv)$在$\Vu=\Vv$时很大, 当$\Vu$和$\Vv$距离拉大时而减小。 局部核可以看作是执行模版匹配的相似函数,用于度量测试\gls{example:chap5} $\Vx$和每个训练\gls{example:chap5} $\Vx^{(i)}$有多么相似。 diff --git a/Chapter6/deep_feedforward_networks.tex b/Chapter6/deep_feedforward_networks.tex index a2b77a0..087490d 100644 --- a/Chapter6/deep_feedforward_networks.tex +++ b/Chapter6/deep_feedforward_networks.tex @@ -641,7 +641,7 @@ \subsubsection{用于 这是~\gls{sigmoid}~单元饱和方式的一般化,并且如果损失函数不被设计成对其进行补偿,那么也会造成类似的学习困难。 softmax函数的变量$\Vz$可以通过两种方式产生。 -最常见的是简单地使神经网络较早的层输出$\Vz$的每个元素,就像先前描述的使用线性层$\Vz={W}^\top\Vh+\Vb$。 +最常见的是简单地使神经网络中softmax之前的层输出$\Vz$的每个元素,就像先前描述的使用线性层$\Vz={W}^\top\Vh+\Vb$。 虽然很直观,但这种方法是对分布的过度参数化。 $n$个输出总和必须为1的约束意味着只有$n-1$个参数是必要的;第$n$个概率值可以通过1减去前面$n-1$个概率来获得。 因此,我们可以强制要求$\Vz$的一个元素是固定的。 @@ -926,7 +926,7 @@ \subsection{其他\gls{hidden_unit}} 然而,神经网络的一些层是纯线性也是可以接受的。 考虑具有$n$个输入和$p$个输出的神经网络层$\Vh=g(\MW^\top \Vx+\Vb)$。 我们可以用两层来代替它,一层使用权重矩阵$\MU$,另一层使用权重矩阵$\MV$。 -如果第一层没有激活函数,那么我们对基于$\MW$的原始层的权重矩阵进行因式分解。 +如果第一层没有激活函数,那么我们(用$\MU$和$\MV$替代$\MW$)实际上是对基于$\MW$的原始层的权重矩阵进行了因式分解。 分解方法是计算$\Vh=g(\MV^\top \MU^\top \Vx+\Vb)$。 如果$U$产生了$q$个输出,那么$\MU$和$V$一起仅包含$(n+p)q$个参数,而$\MW$包含$np$个参数。 如果$q$很小,这可以在很大程度上节省参数。 @@ -1007,7 +1007,7 @@ \subsection{万能近似性质和深度} 其次,训练算法可能由于过拟合而选择了错误的函数。 回忆\secref{sec:the_no_free_lunch_theorem}中的``没有免费的午餐''定理,说明了没有普遍优越的机器学习算法。 \gls{feedforward_network}提供了表示函数的万能系统,在这种意义上,给定一个函数,存在一个\gls{feedforward_network}能够近似该函数。 -不存在万能的过程既能够验证训练集上的特殊样本,又能够选择一个函数来扩展到训练集上没有的点。 +不存在万能的过程能够通过检查训练集上的样本,来找到一个能对训练集上没有的点也适用的函数。 \gls{universal_approximation_theorem}说明了,存在一个足够大的网络能够达到我们所希望的任意精度,但是定理并没有说这个网络有多大。 \cite{Barron93}提供了单层网络近似一大类函数所需大小的一些界。 @@ -1019,9 +1019,9 @@ \subsection{万能近似性质和深度} % -- 193 -- -存在一些函数族能够在网络的深度大于某个值$d$时被高效地近似,而当深度被限制到小于或等于$d$时需要一个远远大于之前的模型。 +存在一些函数族能够被深度大于某个值$d$的网络高效地近似,而当深度被限制到小于或等于$d$时需要一个远远大于之前的模型。 在很多情况下,浅层模型所需的\gls{hidden_unit}的数量是$n$的指数级。 -这个结果最初被证明是在那些不与连续可微的神经网络类似的机器学习模型中出现,但现在已经扩展到了这些模型。 +这个结果最初是在那些不与连续可微的神经网络类似的机器学习模型中被证明,但现在已经扩展到了这些模型。 第一个结果是关于逻辑门电路的\citep{Hastad86}。 后来的工作将这些结果扩展到了具有非负权重的线性阈值单元\citep{Hastad91,Hajnal-et-al-1993},然后扩展到了具有连续值激活的网络\citep{Maass-1992,Maass-et-al-1994}。 许多现代神经网络使用\gls{ReLU}。 @@ -1097,8 +1097,8 @@ \subsection{万能近似性质和深度} \caption{参数数量的影响。 更深的模型往往表现更好。 这不仅仅是因为模型更大。 -\cite{Goodfellow+et+al-ICLR2014a}的这项实验表明,增加\gls{convolutional_network}层中参数的数量,但是不增加它们的深度,在提升测试集性能方面几乎没有效果,如此图所示。 -图例标明了用于画出每条曲线的网络深度,以及曲线表示的是卷积层还是全连接层的大小变化。 +\cite{Goodfellow+et+al-ICLR2014a}的这项实验表明,增加\gls{convolutional_network}层中参数的数量,但是不增加它们的深度,在提升测试集性能方面没有同样显著的效果,如此图所示。 +图例标明了每条曲线对应的网络深度,以及曲线表示的是卷积层还是全连接层的大小变化。 我们可以观察到,在这种情况下,浅层模型在参数数量达到2000万时就过拟合,而深层模型在参数数量超过6000万时仍然表现良好。 这表明,使用深层模型表达出了对模型可以学习的函数空间的有用偏好。 具体来说,它表达了一种信念,即该函数应该由许多更简单的函数复合在一起而得到。 @@ -1118,7 +1118,7 @@ \subsection{其他架构上的考虑} % -- 195 -- -一般的,层不需要连接在链中,尽管这是最常见的做法。 +一般的,层并不一定都需要连接在一条链中,尽管这是最常见的做法。 许多架构构建了一个主链,但随后又添加了额外的架构特性,例如从层$i$到层$i+2$或者更高层的跳跃连接。 这些跳跃连接使得梯度更容易从输出层流向更接近输入的层。 @@ -1492,7 +1492,7 @@ \subsection{符号到符号的导数} 基于符号到符号的方法的描述包含了符号到数值的方法。 符号到数值的方法可以理解为执行了与符号到符号的方法中构建图的过程中完全相同的计算。 -关键的区别是符号到数值的方法不会显示出计算图。 +关键的区别是符号到数值的方法不向外暴露出计算图。 \subsection{一般化的\glsentrytext{BP}} \label{sec:general_back_propagation} @@ -1708,7 +1708,7 @@ \subsection{复杂化} 反向传播的现实实现还需要处理各种数据类型,例如32位浮点数、64位浮点数和整型。 处理这些类型的策略需要特别的设计考虑。 -一些操作具有未定义的梯度,并且重要的是跟踪这些情况并且确定用户请求的梯度是否是未定义的。 +一些操作具有未定义的梯度,重要的是跟踪这种情况并且确定用户请求的梯度是否是未定义的。 各种其他技术的特性使现实世界的微分更加复杂。 这些技术性并不是不可逾越的,本章已经描述了计算微分所需的关键知识工具,但重要的是要知道还有许多的精妙之处存在。 diff --git a/Chapter7/regularization.tex b/Chapter7/regularization.tex index 6a649f3..06cb1e4 100644 --- a/Chapter7/regularization.tex +++ b/Chapter7/regularization.tex @@ -32,7 +32,7 @@ \chapter{\glsentrytext{DL}中的正则化} 在\gls{DL}的背景下,大多数\gls{regularization}策略都会对\gls{estimator}进行\gls{regularization}。 \gls{estimator}的\gls{regularization}以\gls{bias_sta}的增加换取\gls{variance}的减少。 一个有效的\gls{regularization}是有利的``交易'',也就是能显著减少\gls{variance}而不过度增加\gls{bias_sta}。 -我们在\chapref{chap:machine_learning_basics}中讨论\gls{generalization}和\gls{overfitting}时,主要侧重模型族训练的3个情形:(1)不包括真实的数据生成过程——对应\gls{underfitting}和含有\gls{bias_sta}的情况,(2)匹配真实数据生成过程,(3)除了包括真实的数据生成过程,还包括许多其他可能的生成过程——\gls{variance}(而不是\gls{bias_sta})主导的\gls{overfitting}。 +我们在\chapref{chap:machine_learning_basics}中讨论\gls{generalization}和\gls{overfitting}时,主要侧重模型族训练的3个情形:(1)不包括真实的数据生成过程——对应\gls{underfitting}和含有\gls{bias_sta}的情况,(2)匹配真实数据生成过程,(3)包括真实的数据生成过程,同时还包括许多其他可能的生成过程——\gls{variance}(而不是\gls{bias_sta})主导的\gls{overfitting}。 \gls{regularization}的目标是使模型从第三种情况转化为第二种情况。 在实践中,过于复杂的模型族不一定包括目标函数或真实数据生成过程,甚至也不包括近似过程。 @@ -208,7 +208,7 @@ \subsection{$L^2$参数\glsentrytext{regularization}} $L^2$正则项将这个矩阵替换为\eqnref{eq:717mw}中的$ (\MX^\top \MX + \alpha \MI)^{-1}$ 这个新矩阵与原来的是一样的,不同的仅仅是在对角加了$\alpha$。 这个矩阵的对角项对应每个输入特征的\gls{variance}。 -我们可以看到,$L^2$\gls{regularization}能让学习算法``感知''到具有较高方差的输入$\Vx$,因此与输出目标的\gls{covariance}较小(相对增加方差)的特征的权重将会收缩。 +我们可以看到,$L^2$\gls{regularization}能让学习算法``感知''到输入$\Vx$具有较高的方差,这会使得学习算法压缩那些与输出目标的\gls{covariance}较小(相对增加方差)的特征的权重。 \subsection{$L^1$参数\glsentrytext{regularization}} \label{sec:l1_regularization} @@ -219,7 +219,7 @@ \subsection{$L^1$参数\glsentrytext{regularization}} \begin{align} \Omega(\Vtheta) = \norm{ \Vw }_1 = \sum_i | w_i |, \end{align} -即各个参数的绝对值之和\footnote{如同$L^2$\gls{regularization},我们能将参数\gls{regularization}到其他非零值$\Vw^{(o)}$。在这种情况下,$L^1$\gls{regularization}将会引入不同的项$\Omega(\Vtheta)= +即各个参数的绝对值之和\footnote{如同$L^2$\gls{regularization},我们也可以将参数\gls{regularization}到其他非零值$\Vw^{(o)}$。在这种情况下,$L^1$\gls{regularization}将会引入不同的项$\Omega(\Vtheta)= \|\Vw - \Vw^{(o)} \|_1 = \sum_i | w_i - w_i^{(o)} |$。}。 接着我们将讨论$L^1$\gls{regularization}对简单\gls{linear_regression}模型的影响,与分析$L^2$\gls{regularization}时一样不考虑\gls{bias_aff}参数。 我们尤其感兴趣的是找出$L^1$和$L^2$\gls{regularization}之间的差异。 @@ -370,8 +370,8 @@ \section{\glsentrytext{regularization}和欠约束问题} \gls{ML}中许多\gls{linear_model},包括\gls{linear_regression}和PCA,都依赖于对矩阵$\MX^\top\MX$求逆。 只要$\MX^\top\MX$是奇异的,这些方法就会失效。 当数据生成分布在一些方向上确实没有差异时,或因为例子较少(即相对输入特征的维数来说)而在一些方向上没有观察到\gls{variance}时,这个矩阵就是奇异的。 -在这种情况下,\gls{regularization}的许多形式对应求逆$\MX^\top\MX + \alpha \MI$。 -这个\gls{regularization}矩阵可以保证是可逆的。 +在这种情况下,(人们往往使得)\gls{regularization}的许多形式对应求逆$\MX^\top\MX + \alpha \MI$。 +(因为)这个\gls{regularization}矩阵可以保证是可逆的。 相关矩阵可逆时,这些线性问题有\gls{closed_form_solution}。 没有\gls{closed_form_solution}的问题也可能是欠定的。 @@ -546,7 +546,7 @@ \section{\glsentrytext{multitask_learning}} \centerline{\includegraphics{Chapter7/figures/multi_factor_output}} \fi \caption{\gls{multitask_learning}在深度学习框架中可以以多种方式进行,该图说明了任务共享相同输入但涉及不同目标随机变量的常见情况。 -\gls{deep_network}的较低层(无论是\gls{supervised}前馈的,还是包括向下箭头的生成组件)可以跨这样的任务共享,而任务特定的参数(分别与从$\Vh^{(1)}$和$\Vh^{(2)}$进入和发出的权重)可以在共享表示$\Vh^{(\text{shared})}$之上学习。 +\gls{deep_network}的较低层(无论是\gls{supervised}前馈的,还是包括向下箭头的生成组件)可以跨这样的任务共享,而任务特定的参数(分别关联于从$\Vh^{(1)}$和$\Vh^{(2)}$进入和发出的权重)可以在共享表示$\Vh^{(\text{shared})}$之上学习。 这里的基本假设是存在解释输入$\RVx$变化的共同因素池,而每个任务与这些因素的子集相关联。 在该示例中,额外假设顶层\gls{hidden_unit} $\Vh^{(1)}$和$\Vh^{(2)}$专用于每个任务(分别预测$\RVy^{(1)}$和$\RVy^{(2)}$),而一些中间层表示$\Vh^{(\text{shared})}$在所有任务之间共享。 在\gls{unsupervised_learning}情况下,一些顶层因素不与输出任务$(\Vh^{(3)})$的任意一个关联是有意义的:这些因素可以解释一些输入变化但与预测$\RVy^{(1)}$或$\RVy^{(2)}$不相关。 @@ -564,7 +564,7 @@ \section{\glsentrytext{multitask_learning}} \section{\glsentrytext{early_stopping}} \label{sec:early_stopping} 当训练有足够的表示能力甚至会过拟合的大模型时,我们经常观察到,训练误差会随着时间的推移逐渐降低但验证集的误差会再次上升。 -\figref{fig:chap7_learning_curve}是这些现象的一个例子,这种现象几乎一定会出现。 +\figref{fig:chap7_learning_curve}是这些现象的一个例子,这种现象总是非常可靠地反复出现。 这意味着我们只要返回使验证集误差最低的参数设置,就可以获得验证集误差更低的模型(并且因此有希望获得更好的测试误差)。 @@ -788,7 +788,7 @@ \section{\glsentrytext{early_stopping}} 当然,在\gls{early_stopping}的情况下,这实际上意味着在大曲率方向的参数比较小曲率方向的参数更早地学习到。 本节中的推导表明长度为$\tau$的轨迹结束于$L^2$\gls{regularization}目标的极小点。 -当然,\gls{early_stopping}比简单的轨迹长度限制更丰富;取而代之,\gls{early_stopping}通常涉及监控验证集误差,以便在空间特别好的点处终止轨迹。 +当然,\gls{early_stopping}比简单的轨迹长度限制更丰富————\gls{early_stopping}通常涉及监控验证集误差,以便在空间特别好的点处终止轨迹。 因此\gls{early_stopping}比\gls{weight_decay}更具有优势,\gls{early_stopping}能自动确定\gls{regularization}的正确量,而\gls{weight_decay}需要进行多个不同超参数值的训练实验。 % -- 245 -- @@ -843,7 +843,7 @@ \section{\glsentrytext{sparse}\glsentrytext{representation}} 这种策略间接地对模型参数施加了复杂惩罚。 我们已经讨论过(在\secref{sec:l1_regularization}中)$L^1$惩罚如何诱导\gls{sparse}的参数,即许多参数为零(或接近于零)。 -另一方面,\gls{representation}的\gls{sparse}描述了许多元素是零(或接近零)的\gls{representation}。 +另一方面,\gls{representation}的\gls{sparse}性描述了一个\gls{representation}中许多元素是零(或接近零)的情况。 我们可以\gls{linear_regression}的情况下简单说明这种区别: \begin{align} \underset{\Vy ~\in~ \SetR^m}{ @@ -978,7 +978,7 @@ \section{\glsentrytext{bagging}和其他\glsentrytext{ensemble}方法} % -- 250 -- \gls{model_averaging}是一个减少泛化误差的非常强大可靠的方法。 -在作为科学论文算法的基准时,它通常是不鼓励使用的,因为任何\gls{ML}算法都可以从\gls{model_averaging}中大幅获益(以增加计算和存储为代价)。 +在科学论文中比较算法的表现时,它通常是不鼓励使用的,因为任何\gls{ML}算法都可以从\gls{model_averaging}中大幅获益(以增加计算和存储为代价)。 \gls{ML}比赛中的取胜算法通常是使用超过几十种\gls{model_averaging}的方法。 最近一个突出的例子是\ENNAME{Netflix Grand Prize}\citep{Koren09}。 @@ -991,7 +991,7 @@ \section{\glsentrytext{bagging}和其他\glsentrytext{ensemble}方法} \section{\glsentrytext{dropout}} \label{sec:dropout} \textbf{Dropout}~\citep{Srivastava14}提供了\gls{regularization}一大类模型的方法,计算方便但功能强大。 -在第一种近似下,\gls{dropout}可以被认为是\gls{ensemble}大量深层\gls{NN}的实用\gls{bagging}方法。 +为了有个初步的近似感受,我们可以认为\gls{dropout}是\gls{ensemble}大量深层\gls{NN}的实用\gls{bagging}方法。 \gls{bagging}涉及训练多个模型,并在每个测试样本上评估多个模型。 当每个模型都是一个很大的\gls{NN}时,这似乎是不切实际的,因为训练和评估这样的网络需要花费很多运行时间和内存。 通常我们只能\gls{ensemble}五至十个神经网络,如\cite{Szegedy-et-al-arxiv2014}\gls{ensemble}了六个神经网络赢得ILSVRC,超过这个数量就会迅速变得难以处理。 @@ -1011,7 +1011,7 @@ \section{\glsentrytext{dropout}} 我们从具有两个可见单元和两个\gls{hidden_unit}的基本网络开始。 这四个单元有十六个可能的子集。 右图展示了从原始网络中丢弃不同的单元子集而形成的所有十六个子网络。 -在这个小例子中,所得到的大部分网络没有输入单元或没有从输入连接到输出的路径。 +在这个小例子中,所得到的网络中相当一部分没有输入单元或没有从输入连接到输出的路径。 当层较宽时,丢弃所有从输入到输出的可能路径的概率变小,所以这个问题不太可能在出现层较宽的网络中。} \label{fig:chap7_subnetworks} \end{figure} @@ -1107,7 +1107,7 @@ \section{\glsentrytext{dropout}} 该模型具有所有单元,但我们将单元$i$的输出的权重乘以单元$i$的被包含概率。 这个修改的动机是得到从该单元输出的正确期望值。 我们把这种方法称为\firstgls{weight_scaling_inference_rule}。 -目前还没有在深度非线性网络上对这种近似推断规则的准确性作任何理论分析,但经验上表现得很好。 +目前还没有在深度非线性网络上对这种近似推断规则的准确性作任何理论分析,但经验上它表现得很好。 % -- 255 -- @@ -1179,7 +1179,7 @@ \section{\glsentrytext{dropout}} 包括前馈神经网络、概率模型,如\gls{RBM}\citep{Srivastava14},以及\gls{RNN}\citep{Bayer-et-al-arXiv-2014,Pascanu-et-al-ICLR2014}。 许多效果差不多的其他\gls{regularization}策略对模型结构的限制更严格。 -虽然\gls{dropout}在特定模型上每一步的代价是微不足道的,但在一个完整的系统上使用\gls{dropout}的代价可能非常显著。 +虽然\gls{dropout}在特定模型上每一步的代价是微不足道的,但在一个完整的系统上使用\gls{dropout}的代价可能会是显著的。 因为\gls{dropout}是一个\gls{regularization}技术,它减少了模型的有效容量。 为了抵消这种影响,我们必须增大模型规模。 不出意外的话,使用\gls{dropout}时最佳验证集的误差会低很多,但这是以更大的模型和更多训练算法的迭代次数为代价换来的。 @@ -1210,8 +1210,8 @@ \section{\glsentrytext{dropout}} \gls{dropout_boosting}训练整个\gls{ensemble}以最大化训练集上的似然。 从传统\gls{dropout}类似于\gls{bagging}的角度来看,这种方式类似于\gls{boosting}。 如预期一样,和单一模型训练整个网络相比,\gls{dropout_boosting}几乎没有\gls{regularization}效果。 -这表明,使用\gls{bagging}解释\gls{dropout}比使用稳健性噪声解释\gls{dropout}更好。 -只有当随机抽样的\gls{ensemble}成员相互独立地训练好后,才能达到\gls{bagging}\gls{ensemble}的\gls{regularization}效果。 +这表明,使用\gls{bagging}解释\gls{dropout}具有使用稳健性噪声解释\gls{dropout}之外的额外价值。 +只有当随机抽样的\gls{ensemble}成员相互独立地训练,才能达到\gls{bagging}\gls{ensemble}的\gls{regularization}效果。 \gls{dropout}启发其他以随机方法训练指数量级的共享权重的\gls{ensemble}。 \ENNAME{DropConnect}是 @@ -1241,7 +1241,7 @@ \section{\glsentrytext{dropout}} \gls{hidden_unit}必须准备好进行模型之间的交换和互换。 \cite{Hinton-et-al-arxiv2012-small}由生物学的想法受到启发:有性繁殖涉及到两个不同生物体之间交换基因,进化产生的压力使得基因不仅是良好的而且要准备好不同有机体之间的交换。 这样的基因和这些特点对环境的变化是非常稳健的,因为它们一定会正确适应任何一个有机体或模型不寻常的特性。 -因此\gls{dropout}\gls{regularization}每个\gls{hidden_unit}不仅是一个很好的特征,更要在许多情况下是良好的特征。 +因此\gls{dropout}\gls{regularization}使得每个\gls{hidden_unit}不仅要是一个很好的特征,更要在许多情况下是良好的特征。 \cite{WardeFarley+al-ICLR2014}将\gls{dropout}与大\gls{ensemble}的训练相比并得出结论:相比独立模型\gls{ensemble}获得泛化误差改进,\gls{dropout}会带来额外的改进。 \gls{dropout}强大的大部分原因来自施加到\gls{hidden_unit}的\gls{mask}噪声,了解这一事实是重要的。 @@ -1316,10 +1316,10 @@ \section{对抗训练} 对抗训练有助于体现积极\gls{regularization}与大型函数族结合的力量。 纯粹的\gls{linear_model},如\gls{logistic_regression},由于它们被限制为线性而无法抵抗\gls{adversarial_example}。 -\gls{NN}能够将函数从接近线性转化为局部近似恒定,从而可以灵活地捕获到训练数据中的线性趋势同时学习抵抗局部扰动。 +\gls{NN}能够表示范围广泛的函数,从接近线性到局部近似恒定,从而可以灵活地捕获到训练数据中的线性趋势同时学习抵抗局部扰动。 \gls{adversarial_example}也提供了一种实现\gls{semi_supervised_learning}的方法。 -在与数据集中的标签不相关联的点$\Vx$处,模型本身为其分配一些标签$\hat y$。 +在数据集中没有分配标签的点$\Vx$处,模型自己为其分配一些标签$\hat y$。 模型的标记$\hat y$未必是真正的标签,但如果模型是高品质的,那么$\hat y$提供正确标签的可能性很大。 我们可以搜索一个\gls{adversarial_example} $\Vx'$,导致分类器输出一个标签$y'$且$y' \neq \hat y$。 不使用真正的标签,而是由训练好的模型提供标签产生的\gls{adversarial_example}被称为\firstgls{virtual_adversarial_example}\citep{miyato2015distributional}。 @@ -1351,7 +1351,7 @@ \section{\glsentrytext{tangent_distance}、\glsentrytext{tangent_prop}和流形 \Omega(f) = \sum_i \Big((\nabla_{\Vx} f(\Vx)^\top \Vv^{(i)}) \Big)^2 . \end{align} 这个\gls{regularization}项当然可以通过适当的超参数缩放,并且对于大多数\gls{NN},我们需要对许多输出求和(此处为描述简单,$f(\Vx)$为唯一输出)。 -与\gls{tangent_distance}算法一样,我们根据切向量推导先验,通常从变换(如平移、旋转和缩放图像)的效果获得形式知识。 +与\gls{tangent_distance}算法一样,切向量是从先验知识推导的,通常是从变换(如平移、旋转和缩放图像)的效果获得的形式知识。 \gls{tangent_prop}不仅用于\gls{supervised_learning}\citep{Simard92-short},还在\gls{RL}\citep{Thrun-NIPS1994}中有所应用。 \begin{figure}[!htb] \ifOpenSource @@ -1361,7 +1361,7 @@ \section{\glsentrytext{tangent_distance}、\glsentrytext{tangent_prop}和流形 \fi \caption{\gls{tangent_prop}算法\citep{Simard92-short}和\gls{manifold}正切分类器主要思想的示意图\citep{Dauphin-et-al-NIPS2011-small},它们都\gls{regularization}分类器的输出函数$f(\Vx)$。 每条曲线表示不同类别的\gls{manifold},这里表示嵌入二维空间中的一维\gls{manifold}。 -在一条曲线上,我们选择单个点并绘制一个与类别\gls{manifold}(平行并接触\gls{manifold})相切的向量以及与类别\gls{manifold}(与\gls{manifold}正交)垂直的向量。 +在一条曲线上,我们选择单个点并绘制一个与类别\gls{manifold}相切(平行并接触\gls{manifold})的向量以及与类别\gls{manifold}垂直(与\gls{manifold}正交)的向量。 在多维情况下,可以存在许多切线方向和法线方向。 我们希望分类函数在垂直于\gls{manifold}方向上快速改变,并且在类别\gls{manifold}的方向上保持不变。 \gls{tangent_prop}和\gls{manifold}正切分类器都会\gls{regularization} $f(\Vx)$,使其不随$\Vx$沿\gls{manifold}的移动而剧烈变化。 diff --git a/Chapter8/optimization_for_training_deep_models.tex b/Chapter8/optimization_for_training_deep_models.tex index 94d7194..6f2d66d 100644 --- a/Chapter8/optimization_for_training_deep_models.tex +++ b/Chapter8/optimization_for_training_deep_models.tex @@ -34,7 +34,7 @@ \section{学习和纯优化有什么不同} \gls{ML}通常是间接作用的。 在大多数\gls{ML}问题中,我们关注某些性能度量$P$,其定义于\gls{test_set}上并且可能是不可解的。 因此,我们只是间接地优化$P$。 -我们希望通过降低\gls{cost_function} $J(\Vtheta)$来提高$P$。 +我们希望通过降低一个不同的\gls{cost_function} $J(\Vtheta)$来提高$P$。 这一点与纯优化不同,纯优化最小化目标$J$本身。 训练\gls{deep_model}的优化算法通常也会包括一些针对\gls{ML}\gls{objective_function}的特定结构进行的特化。 % 268 mid @@ -118,9 +118,9 @@ \subsection{\glsentrytext{surrogate_loss_function}和\glsentrytext{early_stoppin 一般的优化和我们用于训练算法的优化有一个重要不同:训练算法通常不会停止在\gls{local_minimum}。 -反之,\gls{ML}通常优化\gls{surrogate_loss_function},但是在基于\gls{early_stopping}(\secref{sec:early_stopping})的收敛条件满足时停止。 +反之,\gls{ML}通常最小化\gls{surrogate_loss_function},但是在基于\gls{early_stopping}(\secref{sec:early_stopping})的收敛条件满足时停止。 通常,\gls{early_stopping}使用真实\gls{underlying}\gls{loss_function},如\gls{validation_set}上的$0-1$损失,并设计为在\gls{overfitting}发生之前终止。 -与纯优化不同的是,\gls{early_stopping}时\gls{surrogate_loss_function}仍然有较大的导数,而纯优化终止时导数较小。 +与纯优化不同的是,\gls{early_stopping}时\gls{surrogate_loss_function}仍然有较大的导数,而纯优化终止时过程已经收敛,导数较小。 % 270 mid @@ -229,7 +229,7 @@ \subsection{\gls{batch}算法和\gls{minibatch}算法} 假设$\MH$被精确估计,但是有\gls{poor_conditioning}数。 乘以$\MH$或是其逆会放大之前存在的误差(这个示例中是指$\Vg$的估计误差)。 即使$\MH$被精确估计,$\Vg$中非常小的变化也会导致更新值$\MH^{-1}\Vg$中非常大的变化。 -当然,我们通常只会近似地估计$\MH$,因此相对于我们使用具有较差条件的操作去估计$\Vg$,更新$\MH^{-1}\Vg$会含有更多的误差。 +当然,我们通常只会近似地估计$\MH$,因此相对于我们使用具有较差条件数的操作去估计$\Vg$,更新$\MH^{-1}\Vg$会含有更多的误差。 % 273 head % 273 head @@ -263,15 +263,15 @@ \subsection{\gls{batch}算法和\gls{minibatch}算法} % 274 head -我们不难从\gls{online_learning}的情况中看出\gls{SGD}最小化\gls{generalization_error}的原因。 -这时样本或者\gls{minibatch}都是从数据\firstgls{stream}中抽取出来的。 +从\gls{online_learning}的情况中我们最容易看出\gls{SGD}最小化的是真实的\gls{generalization_error}的原因。 +这时样本或者说(单个样本的)\gls{minibatch}都是从数据\firstgls{stream}中抽取出来的。 换言之,\gls{learner}好像是一个每次看到新样本的人, 每个样本$(\Vx,y)$都来自\gls{DGD}~$p_{\text{data}}(\Vx,y)$,而不是使用大小固定的\gls{training_set}。 这种情况下,样本永远不会重复;每次更新的样本是从分布$p_\text{data}$中采样获得的无偏样本。 % 274 mid -在$\Vx$和$y$是离散时,以上的等价性很容易得到。 +在$\Vx$和$y$是离散时,以上的等价性最容易被看出来。 在这种情况下,\gls{generalization_error}(\eqnref{eq:8.2})可以表示为 \begin{equation} \label{eq:8.7} @@ -283,7 +283,7 @@ \subsection{\gls{batch}算法和\gls{minibatch}算法} \Vg = \nabla_{\Vtheta} J^*(\Vtheta) = \sum_{\Vx} \sum_y p_{\text{data}} (\Vx, y) \nabla_{\Vtheta} L(f(\Vx;\Vtheta),y) . \end{equation} -在\eqnref{eq:8.5}和\eqnref{eq:8.6}中,我们已经在对数似然中看到了相同的结果;现在我们发现这一点在包括似然的其他函数$L$上也是成立的。 +在\eqnref{eq:8.5}和\eqnref{eq:8.6}中,我们已经在对数似然中看到了同样的结果;现在我们发现这一点在似然之外的其他函数$L$上也是成立的。 在一些关于$p_\text{data}$和$L$的温和假设下,在$\Vx$和$y$是连续时也能得到类似的结果。 % 274 mid @@ -294,7 +294,7 @@ \subsection{\gls{batch}算法和\gls{minibatch}算法} \hat{\Vg} = \frac{1}{m} \nabla_{\Vtheta} \sum_i L(f(\Vx^{(i)};\Vtheta),y^{(i)} ). \end{equation} 以此获得\gls{generalization_error}准确梯度的\gls{unbiased}估计。 -最后,在\gls{generalization_error}上使用\,\glssymbol{SGD}\,方法在方向$\hat{\Vg}$上更新$\Vtheta$。 +最后,在方向$\hat{\Vg}$上更新$\Vtheta$也就意味着以(真实)\gls{generalization_error}为目标进行\,\glssymbol{SGD}\,。 % 274 end @@ -331,10 +331,10 @@ \subsection{\glsentrytext{ill_conditioning}} % -- 275 mid \gls{ill_conditioning}问题一般被认为存在于\gls{NN}训练过程中。 -\gls{ill_conditioning}体现在\gls{SGD}会``卡''在某些情况,此时即使很小的更新步长也会增加\gls{cost_function}。 +\gls{ill_conditioning}体现在\gls{SGD}会``卡''在某些地方,此时即使很小的更新步长也会增加\gls{cost_function}。 % -- 275 mid -回顾\eqnref{eq:4.9},\gls{cost_function}的二阶\gls{taylor}级数展开预测\gls{GD}中的$-\epsilon\Vg$会增加 +回顾\eqnref{eq:4.9},\gls{cost_function}的二阶\gls{taylor}级数展开预测\gls{GD}中的$-\epsilon\Vg$步骤会增加 \begin{equation} \frac{1}{2} \epsilon^2 \Vg^\top \MH\Vg - \epsilon\Vg^\top\Vg \end{equation} @@ -514,20 +514,20 @@ \subsection{高原、\glsentrytext{saddle_points}和其他平坦区域} 而\gls{newton_method}的目标是寻求梯度为零的点。 如果没有适当的修改,\gls{newton_method}就会跳进一个\gls{saddle_points}。 高维空间中\gls{saddle_points}的激增或许解释了在\gls{NN}训练中为什么\gls{second_order_method}无法成功取代\gls{GD}。 -\cite{Dauphin-et-al-NIPS2014-small}介绍了二阶优化的\firstgls{saddle_free_newton_method},并表明和传统算法相比有显著改进。 -\gls{second_order_method}仍然难以扩展到大型\gls{NN},但是如果这类无鞍算法能够扩展的话,还是很有希望的。 +\cite{Dauphin-et-al-NIPS2014-small}介绍了二阶优化的\firstgls{saddle_free_newton_method},并表明和传统版本的牛顿法相比有显著改进。 +\gls{second_order_method}目前仍然难以扩展到大型\gls{NN},但是如果这类无鞍算法能够扩展的话,还是很有希望的。 % -- 280 mid 除了\gls{minima}和\gls{saddle_points},还存在其他梯度为零的点。 -例如从优化的角度看与\gls{saddle_points}很相似的\gls{maxima},很多算法不会被吸引到\gls{maxima},除了未经修改的\gls{newton_method}。 +例如\gls{maxima},它的情况从优化的角度看与\gls{saddle_points}很类似,很多算法不会被吸引到\gls{maxima},除了未经修改的\gls{newton_method}。 和\gls{minima}一样,许多种类的随机函数的\gls{maxima}在高维空间中也是指数级稀少。 % -- 280 mid 也可能存在恒值的、宽且平坦的区域。 在这些区域,梯度和\,\gls{hessian}\,矩阵都是零。 -这种退化的情形是所有\gls{nume_optimization}算法的主要问题。 +这种退化的情形对所有\gls{nume_optimization}算法而言都是主要问题。 在凸问题中,一个宽而平坦的区间肯定包含\gls{global_minima},但是对于一般的优化问题而言, 这样的区域可能会对应着\gls{objective_function}中一个较高的值。 % -- 280 end @@ -536,7 +536,7 @@ \subsection{高原、\glsentrytext{saddle_points}和其他平坦区域} \subsection{悬崖和\glsentrytext{explode_gradient}} \label{sec:cliffs_and_exploding_gradients} % 281 head -多层\gls{NN}通常存在像悬崖一样的斜率较大区域,如\figref{fig:chap8_cliff}所示。 +多层\gls{NN}经常存在像悬崖一样的斜率较大区域,如\figref{fig:chap8_cliff}所示。 这是由于几个较大的权重相乘导致的。 遇到斜率极大的悬崖结构时,梯度更新会很大程度地改变参数值,通常会完全跳过这类悬崖结构。 % 281 head @@ -582,7 +582,7 @@ \subsection{\glsentrytext{long_term_dependency}} \begin{equation} \MW^t = (\MV \text{diag}(\Vlambda) \MV^{-1})^t = \MV\text{diag}(\Vlambda)^t \MV^{-1}. \end{equation} -当特征值$\lambda_i$不在$1$附近时,若在量级上大于$1$则会爆炸;若小于$1$时则会消失。 +当特征值$\lambda_i$的绝对值不在$1$附近时,若绝对值大于$1$则会爆炸;若小于$1$时则会消失。 \firstgls{vanish_explode_gradient}是指该\gls{computational_graph}上的梯度也会因为$\text{diag}(\Vlambda)^t$大幅度变化。 \gls{vanish_gradient}使得我们难以知道参数朝哪个方向移动能够改进\gls{cost_function},而\gls{explode_gradient}会使得学习不稳定。 之前描述的促使我们使用\gls{gradient_clipping}的悬崖结构便是\gls{explode_gradient}现象的一个例子。 @@ -679,7 +679,7 @@ \subsection{局部和全局结构间的弱对应} \gls{GD}和基本上所有的可以有效训练\gls{NN}的学习算法,都是基于局部较小更新。 之前的小节主要集中于为何这些局部范围更新的正确方向难以计算。 我们也许能计算\gls{objective_function}的一些性质,如近似的有偏梯度或正确方向估计的方差。 -在这些情况下,难以确定局部下降能否定义通向有效解的足够短的路径,但我们并不能真的遵循局部下降的路径。 +在这些情况下,局部下降有可能定义了通向有效解的足够短的路径,也有可能没有,但真正糟糕的是我们并不能真的做到遵循局部下降的路径。 \gls{objective_function}可能有诸如\gls{poor_conditioning}或不连续梯度的问题,使得梯度为\gls{objective_function}提供较好近似的区间非常小。 在这些情况下,步长为$\epsilon$的局部下降可能定义了到达解的合理的短路经,但是我们只能计算步长为$\delta \ll \epsilon$的局部下降方向。 在这些情况下,局部下降或许能定义通向解的路径,但是该路径包含很多次更新,因此遵循该路径会带来很高的计算代价。 @@ -691,7 +691,7 @@ \subsection{局部和全局结构间的弱对应} % 285 head 不管哪个问题最重要,如果存在一个区域,我们遵循\gls{local_descent}便能合理地直接到达某个解,并且我们能够在该良好区域上初始化学习,那么这些问题都可以避免。 -最终的观点还是建议在传统优化算法上研究怎样选择更佳的初始化点,以此来实现目标更切实可行。 +最后的这个观点建议在传统优化算法上研究怎样选择更佳的初始化点,以此来实现目标更切实可行。 % 285 mid @@ -795,14 +795,14 @@ \subsection{\glsentrytext{SGD}} 温和的振荡是良好的,容易在训练随机\gls{cost_function}(例如使用\,\gls{dropout}\,的\gls{cost_function})时出现。 如果\gls{learning_rate}太小,那么学习过程会很缓慢。 如果初始\gls{learning_rate}太低,那么学习可能会卡在一个相当高的\gls{cost}值。 -通常,就总训练时间和最终\gls{cost}值而言,最优初始\gls{learning_rate}会高于大约迭代$100$次左右后达到最佳效果的\gls{learning_rate}。 +通常,就总训练时间和最终\gls{cost}值而言,最优的初始\gls{learning_rate}会高于在大约迭代$100$次左右后效果最佳的\gls{learning_rate}。 因此,通常最好是检测最早的几轮迭代,选择一个比在效果上表现最佳的\gls{learning_rate}更大的\gls{learning_rate},但又不能太大导致严重的震荡。 % 287 mid -\glssymbol{SGD}\,及相关的\gls{minibatch}亦或更广义的基于梯度优化的在线学习算法,一个重要的性质是每一步更新的计算时间不依赖训练样本数目的多寡。 -即使训练样本数目非常大时,它们也能收敛。 -对于足够大的数据集,\glssymbol{SGD}\,可能会在处理整个\gls{training_set}之前就收敛到最终\gls{test_set}误差的某个固定容差范围内。 +\glssymbol{SGD}\,及相关的\gls{minibatch}亦或更广义的基于梯度优化的在线学习算法,一个重要的性质是每一步更新的计算时间不依赖完整训练集样本数目的多寡。 +即使训练集样本数目非常大时,它们也能收敛。 +对于足够大的数据集,\glssymbol{SGD}\,可能会在处理完整个\gls{training_set}之前就收敛到最终\gls{test_set}误差的某个固定容差范围内。 % 287 mid @@ -815,8 +815,8 @@ \subsection{\glsentrytext{SGD}} 然而,Cram\'er-Rao界限~\citep{Cramer-1946,Rao-1945}指出,\gls{generalization_error}的下降速度不会快于$O(\frac{1}{k})$。 \cite{bottou-bousquet-2008-small}因此认为对于\gls{ML}任务,不值得探寻收敛快于$O(\frac{1}{k})$的优化算法——更快的收敛可能对应着\gls{overfitting}。 此外,渐近分析掩盖了\gls{SGD}在少量更新步之后的很多优点。 -对于大数据集,\glssymbol{SGD}\,只需非常少量样本计算梯度从而实现初始快速更新,远远超过了其缓慢的渐近收敛。 -本章剩余部分介绍的大多数算法在实践中都受益于这种性质,但是损失了常数倍$O(\frac{1}{k})$的渐近分析。 +对于大数据集,\glssymbol{SGD}\,只需非常少量样本计算梯度从而实现初始快速更新,其好处超过了其缓慢的渐近收敛带来的坏处。 +本章剩余部分介绍的大多数算法致力于追求实践中有价值的好处,而不在意它的学习率有常数级别的额外误差(在渐进分析上比不上$O(\frac{1}{k})$的额外误差)。 我们也可以在学习过程中逐渐增大\gls{minibatch}的大小,以此权衡\gls{batch}\gls{GD}和\gls{SGD}两者的优点。 % 288 mid @@ -936,7 +936,7 @@ \subsection{\glsentrytext{momentum}} % 290 mid -这解释了\gls{momentum}更新的基本形式,但具体什么是力呢? +这解释了\gls{momentum}更新的基本形式,但具体是哪些力呢? 一个力正比于\gls{cost_function}的负梯度$-\nabla_{\Vtheta} J(\Vtheta)$。 该力推动粒子沿着\gls{cost_function}表面下坡的方向移动。 \gls{GD}算法基于每个梯度简单地更新一步,而使用\gls{momentum}算法的牛顿方案则使用该力改变粒子的速度。 @@ -1033,7 +1033,7 @@ \section{参数初始化策略} 大多数初始化策略基于在\gls{NN}初始化时实现一些很好的性质。 然而,我们并没有很好地理解这些性质中的哪些会在学习开始进行后的哪些情况下得以保持。 进一步的难点是,有些初始点从优化的观点看或许是有利的,但是从\gls{generalization}的观点看是不利的。 -我们对于初始点如何影响\gls{generalization}的理解是相当原始的,几乎没有提供如何选择初始点的任何指导。 +我们对于初始点如何影响\gls{generalization}的理解更是相当原始的,几乎没有提供如何选择初始点的任何指导。 % 293 mid @@ -1041,11 +1041,11 @@ \section{参数初始化策略} 如果具有相同\gls{activation_function}的两个\gls{hidden_unit}连接到相同的输入,那么这些单元必须具有不同的初始参数。 如果它们具有相同的初始参数,然后应用到确定性损失和模型的确定性学习算法将一直以相同的方式更新这两个单元。 即使模型或训练算法能够使用随机性为不同的单元计算不同的更新(例如使用\,\gls{dropout}的训练),通常来说,最好还是初始化每个单元使其和其他单元计算不同的函数。 -这或许有助于确保没有输入模式丢失在\gls{forward_propagation}的零空间中,没有梯度模式丢失在\gls{backward_propagation}的零空间中。 +这或许有助于确保没有输入模式丢失在\gls{forward_propagation}的零空间中,以及没有梯度模式丢失在\gls{backward_propagation}的零空间中。 每个单元计算不同函数的目标促使了参数的随机初始化。 我们可以明确地搜索一大组彼此互不相同的基函数,但这经常会导致明显的计算代价。 例如,如果我们有和输出一样多的输入,我们可以使用Gram-Schmidt正交化于初始的权重矩阵,保证每个单元计算彼此非常不同的函数。 -在高维空间上使用高熵分布来随机初始化,计算代价小并且不太可能分配单元计算彼此相同的函数。 +与之相比,在高维空间上使用高熵分布来随机初始化,计算代价更小并且不太可能分配单元计算彼此相同的函数。 % 293 mid @@ -1095,7 +1095,7 @@ \section{参数初始化策略} % 295 head -\cite{Saxe-et-al-ICLR13}推荐初始化为随机正交矩阵,仔细挑选负责每一层非线性缩放或\,\textbf{增益}(gain)因子$g$。 +\cite{Saxe-et-al-ICLR13}推荐初始化为随机正交矩阵,仔细挑选负责每一层非线性缩放或者说\,\textbf{增益}(gain)因子$g$。 他们得到了用于不同类型的非线性\gls{activation_function}的特定缩放因子。 这种初始化方案也是启发于不含非线性的矩阵相乘序列的\gls{deep_network}。 在该模型下,这个初始化方案保证了达到收敛所需的训练迭代总数独立于深度。 @@ -1190,8 +1190,8 @@ \section{参数初始化策略} 在本书第三部分讨论的一个常用策略是使用相同的输入数据集,用无监督模型训练出来的参数来初始化监督模型。 我们也可以在相关问题上使用监督训练。 即使是在一个不相关的任务上运行监督训练,有时也能得到一个比随机初始化具有更快收敛率的初始值。 -这些初始化策略有些能够得到更快的收敛率和更好的\gls{generalization_error},因为它们编码了模型初始参数的分布信息。 -其他策略显然效果不错的原因主要在于它们设置参数为正确的数值范围,或是设置不同单元计算互相不同的函数。 +这些初始化策略有些能够得到更快的收敛率和更好的\gls{generalization_error},原因在于它们编码了模型初始参数的分布信息。 +其他一些策略表现出效果不错的原因则主要在于它们设置参数为正确的数值范围,或是设置不同单元计算互相不同的函数。 % 298 mid @@ -1219,7 +1219,7 @@ \section{自适应\glsentrytext{learning_rate}算法} % 299 head \subsection{\glsentrytext{adagrad}} \label{sec:adagrad} -\textbf{AdaGrad}算法,如\algref{alg:ada_grad}所示,独立地适应所有模型参数的\gls{learning_rate},缩放每个参数反比于其所有梯度历史平方值总和的平方根\citep{Duchi+al-2011}。 +\textbf{AdaGrad}算法,如\algref{alg:ada_grad}所示,独立地适应所有模型参数的\gls{learning_rate},按照每个参数的梯度历史值的平方和的平方根成反比缩放每个参数\citep{Duchi+al-2011}。 具有损失最大偏导的参数相应地有一个快速下降的\gls{learning_rate},而具有小偏导的参数在\gls{learning_rate}上有相对较小的下降。 净效果是在参数空间中更为平缓的倾斜方向会取得更大的进步。 % 299 head @@ -1255,9 +1255,9 @@ \subsection{RMSProp} \label{sec:rmsprop} \textbf{RMSProp}算法\citep{Hinton-ipam2012}修改AdaGrad以在\gls{nonconvex}设定下效果更好,改变梯度积累为指数加权的移动平均。 \gls{adagrad}\,旨在应用于凸问题时快速收敛。 -当应用于\gls{nonconvex}函数训练\gls{NN}时,学习轨迹可能穿过了很多不同的结构,最终到达一个局部是凸碗的区域。 +当应用于\gls{nonconvex}函数训练\gls{NN}时,学习轨迹可能穿过了很多不同的结构,最终到达一个局部是凸的碗状的区域。 AdaGrad根据平方梯度的整个历史收缩\gls{learning_rate},可能使得\gls{learning_rate}在达到这样的凸结构前就变得太小了。 -RMSProp使用指数衰减平均以丢弃遥远过去的历史,使其能够在找到凸碗状结构后快速收敛, +RMSProp使用指数衰减平均以丢弃遥远过去的历史,使其能够在找到碗状凸结构后快速收敛, 它就像一个初始化于该碗状结构的AdaGrad算法实例。 % -- 299 -- @@ -1318,14 +1318,14 @@ \subsection{Adam} \label{sec:adam} \textbf{Adam}~\citep{kingma2014adam}是另一种\gls{learning_rate}自适应的优化算法,如\algref{alg:adam}所示。 ``Adam''这个名字派生自短语``adaptive moments''。 -早期算法背景下,它也许最好被看作结合RMSProp和具有一些重要区别的\gls{momentum}的变种。 +在前述算法背景下,它也许最好被看作结合了RMSProp和\gls{momentum}的具有一些重要区别的变种。 首先,在Adam中,\gls{momentum}直接并入了梯度一阶矩(指数加权)的估计。 将\gls{momentum}加入RMSProp最直观的方法是将\gls{momentum}应用于缩放后的梯度。 结合缩放的\gls{momentum}使用没有明确的理论动机。 其次,Adam包括偏置修正,修正从原点初始化的一阶矩(\gls{momentum}项)和(非中心的)二阶矩的估计(\algref{alg:adam})。 RMSProp也采用了(非中心的)二阶矩估计,然而缺失了修正因子。 因此,不像Adam,RMSProp二阶矩估计可能在训练初期有很高的偏置。 -Adam通常被认为对\gls{hyperparameter}的选择相当鲁棒,尽管\gls{learning_rate}有时需要从建议的默认修改。 +Adam通常被认为对\gls{hyperparameter}的选择相当鲁棒,尽管\gls{learning_rate}有时需要改为与建议的默认值不同的值。 \begin{algorithm}[ht] \caption{Adam算法} @@ -1392,7 +1392,7 @@ \subsection{\glsentrytext{newton_method}} J(\Vtheta) \approx J(\Vtheta_0) + (\Vtheta - \Vtheta_0)^\top \nabla_{\Vtheta} J(\Vtheta_0) + \frac{1}{2} (\Vtheta - \Vtheta_0)^\top \MH(\Vtheta - \Vtheta_0), \end{equation} -其中$\MH$是$J$相对于$\Vtheta$的\,\gls{hessian}\,矩阵在$\Vtheta_0$处的估计。 +最速下降法中$\MH$是$J$相对于$\Vtheta$的\,\gls{hessian}\,矩阵在$\Vtheta_0$处的估计。 如果我们再求解这个函数的\gls{critical_points},我们将得到牛顿参数更新规则: \begin{equation} \Vtheta^* = \Vtheta_0 - \MH^{-1}\nabla_{\Vtheta} J(\Vtheta_0). @@ -1473,7 +1473,7 @@ \subsection{\glsentrytext{CG}法} % -- 304 -- 假设上一个搜索方向是$\Vd_{t-1}$。 -在极小值处,线搜索终止,方向$\Vd_{t-1}$处的方向导数为零:$\nabla_{\Vtheta} J(\Vtheta) \cdot \Vd_{t-1} = 0$。 +在极小值处,也就是(上一次)线搜索终止的地方,方向$\Vd_{t-1}$处的方向导数为零:$\nabla_{\Vtheta} J(\Vtheta) \cdot \Vd_{t-1} = 0$。 因为该点的梯度定义了当前的搜索方向,$\Vd_t = \nabla_{\Vtheta} J(\Vtheta)$将不会贡献于方向$\Vd_{t-1}$。 因此方向$\Vd_t$正交于$\Vd_{t-1}$。 最速下降多次迭代中,方向$\Vd_{t-1}$和$\Vd_t$之间的关系如\figref{fig:chap8_steepest_descent_quadratic}所示。 @@ -1513,8 +1513,8 @@ \subsection{\glsentrytext{CG}法} { \nabla_{\Vtheta} J(\Vtheta_{t-1})^\top \nabla_{\Vtheta} J(\Vtheta_{t-1}) } \end{equation} \end{enumerate} -对于二次曲面而言,共轭方向确保梯度沿着前一方向大小不变。 -因此,我们在前一方向上仍然是极小值。 +对于二次曲面而言,共轭方向确保梯度沿着前一方向幅度不会变大。 +因此,我们在前一方向上仍然处于极小值。 其结果是,在$k$-维参数空间中,\gls{CG}法只需要至多$k$次线搜索就能达到极小值。 \gls{CG}法如\algref{alg:cg}所示。 @@ -1574,7 +1574,7 @@ \subsection{\glsentrytext{BFGS}} \gls{BFGS}\,近似的说明和推导出现在很多关于优化的教科书中,包括\cite{Lue84}。 -当\,\gls{hessian}\,逆近似$\MM_t$更新时,下降方向$\Vrho_t$为$\Vrho_t = \MM_t \Vg_t$。 +当\,\gls{hessian}\,逆的近似$\MM_t$更新时,下降方向$\Vrho_t$为$\Vrho_t = \MM_t \Vg_t$。 该方向上的线搜索用于决定该方向上的步长$\epsilon^*$。 参数的最后更新为: \begin{equation} @@ -1582,22 +1582,22 @@ \subsection{\glsentrytext{BFGS}} \end{equation} 和\gls{CG}法相似,\gls{BFGS}\,算法迭代一系列线搜索,其方向含二阶信息。 -然而和\gls{CG}法不同的是,该方法的成功并不严重依赖于线搜索寻找该方向上和真正极小值很近的一点。 -因此,相比于\gls{CG}法,\gls{BFGS}\,的优点是其花费较少的时间改进每个线搜索。 +然而和\gls{CG}法不同的是,该方法的成功并不严重依赖于线搜索找到该方向上和真正极小值很近的一点。 +因此,相比于\gls{CG}法,\gls{BFGS}\,的优点是其可以花费较少的时间改进每个线搜索。 在另一方面,\gls{BFGS}\,算法必须存储\,\gls{hessian}\,逆矩阵$\MM$,需要$O(n^2)$的存储空间,使\,\gls{BFGS}\,不适用于大多数具有百万级参数的现代\gls{DL}模型。 \paragraph{存储受限的\,\gls{BFGS}(或\,\gls{LBFGS})} 通过避免存储完整的\,\gls{hessian}\,逆近似$\MM$,\gls{BFGS}\,算法的存储代价可以显著降低。 -\gls{LBFGS}\,算法使用和\,\gls{BFGS}\,算法相同的方法计算$\MM$的近似,但起始假设是$\MM^{(t-1)}$是单位矩阵,而不是一步一步都要存储近似。 +\gls{LBFGS}\,算法使用和\,\gls{BFGS}\,算法相同的方法计算$\MM$的近似,但开始时假设上一步的$\MM$即$\MM^{(t-1)}$是单位矩阵,而不是每一步都为下一步存储近似。 如果使用精确的线搜索,\gls{LBFGS}\,定义的方向会是相互共轭的。 -然而,不同于\gls{CG}法,即使只是近似线搜索的极小值,该过程的效果仍然不错。 +然而,不同于\gls{CG}法,即使线搜索只是找到近似的极小值点,该过程的效果仍然不错。 这里描述的无存储的\,\gls{LBFGS}\,方法可以拓展为包含\,\gls{hessian}\,矩阵更多的信息,每步存储一些用于更新$\MM$的向量,且每步的存储代价是$O(n)$。 % -- 308 -- \section{优化策略和元算法} \label{sec:optimization_strategies_and_meta_algorithms} -许多优化技术并非真正的算法,而是一般化的模板,可以特定地产生算法,或是并入到很多不同的算法中。 +许多优化技术并非真正的算法,而是一般化的模板,可以特殊化而产生算法,或是并入到很多不同的算法中。 \subsection{\glsentrytext{Batch_normalization}} \label{sec:batch_normalization} @@ -1658,7 +1658,7 @@ \subsection{\glsentrytext{Batch_normalization}} 这是\gls{batch_normalization}方法的一个重大创新。 以前的方法添加\gls{cost_function}的惩罚,以鼓励单元标准化激活统计量,或是在每个\gls{GD}步骤之后重新标准化单元统计量。 前者通常会导致不完全的标准化,而后者通常会显著地消耗时间,因为学习算法会反复改变均值和方差而标准化步骤会反复抵消这种变化。 -\gls{batch_normalization}重参数化模型,以使一些单元总是被定义标准化,巧妙地回避了这两个问题。 +\gls{batch_normalization}重参数化模型,以使一些单元在定义上就总是标准化的,巧妙地回避了这两个问题。 % -- 310 -- @@ -1666,13 +1666,13 @@ \subsection{\glsentrytext{Batch_normalization}} 这使得模型可以对单一样本评估,而无需使用定义于整个\gls{minibatch}的$\Vmu$和$\Vsigma$。 回顾例子$\hat{y} = x w_1 w_2 \dots w_l$,我们看到,我们可以通过标准化$h_{l-1}$很大程度地解决了学习这个模型的问题。 -假设$x$采样自一个单位高斯。 -那么$h_{l-1}$也是来自高斯,因为从$x$到$h_l$的变换是线性的。 +假设$x$采样自一个单位高斯分布, +那么$h_{l-1}$也是来自高斯分布,因为从$x$到$h_l$的变换是线性的。 然而,$h_{l-1}$不再有零均值和单位方差。 使用\gls{batch_normalization}后,我们得到的归一化$\hat{h}_{l-1}$恢复了零均值和单位方差的特性。 -对于底层的几乎任意更新而言,$\hat{h}_{l-1}$仍然保持着单位高斯。 +对于底层的几乎任意更新而言,$\hat{h}_{l-1}$仍然保持着单位高斯分布。 然后输出$\hat{y}$可以学习为一个简单的线性函数$\hat{y} = w_l \hat{h}_{l-1}$。 -现在学习这个模型非常简单,因为低层的参数在大多数情况下没有什么影响;它们的输出总是重新标准化为单位高斯。 +现在学习这个模型非常简单,因为低层的参数在大多数情况下没有什么影响;它们的输出总是重新标准化为单位高斯分布。 只在少数个例中,低层会有影响。 改变某个低层权重为$0$,可能使输出退化;改变低层权重的符号可能反转$\hat{h}_{l-1}$和$y$之间的关系。 这些情况都是非常罕见的。 @@ -1682,7 +1682,7 @@ \subsection{\glsentrytext{Batch_normalization}} 在我们的线性示例中,较低层不再有任何有害的影响,但它们也不再有任何有益的影响。 这是因为我们已经标准化了一阶和二阶统计量,这是线性网络可以影响的所有因素。 在具有非线性\gls{activation_function}的\gls{DNN}中,较低层可以进行数据的非线性变换,所以它们仍然是有用的。 -\gls{batch_normalization}仅标准化每个单元的均值和方差,以稳定化学习,但允许单元和单个单元的非线性统计量之间的关系发生变化。 +\gls{batch_normalization}仅标准化每个单元的均值和方差,以稳定化学习,但允许单元和单元之间的关系,以及单个单元的非线性统计量之间的关系发生变化。 由于网络的最后一层能够学习线性变换,实际上我们可能希望移除一层内单元之间的所有线性关系。 事实上,这是~\cite{Desjardins2015}中采用的方法,为\gls{batch_normalization}提供了灵感。 @@ -1705,7 +1705,7 @@ \subsection{\glsentrytext{Batch_normalization}} 更具体地,$\MX\MW+\Vb$应替换为$\MX\MW$的标准化形式。 偏置项应被忽略,因为参数$\Vbeta$会加入\gls{batch_normalization}重参数化,它是冗余的。 一层的输入通常是前一层的非线性\gls{activation_function}(如\gls{rectified_linear}函数)的输出。 -因此,输入的统计量更符合非高斯,而更不服从线性操作的标准化。 +因此,输入的统计量更符合非高斯分布,而更不服从线性操作的标准化。 \chapref{chap:convolutional_networks}所述的卷积网络,在特征映射中每个空间位置同样地标准化$\Vmu$和$\Vsigma$是很重要的,能使特征映射的统计量在不同的空间位置,仍然保持相同。 diff --git a/Chapter9/convolutional_networks.tex b/Chapter9/convolutional_networks.tex index f4177bd..6df7b7e 100644 --- a/Chapter9/convolutional_networks.tex +++ b/Chapter9/convolutional_networks.tex @@ -214,7 +214,7 @@ \section{动机} \centerline{\includegraphics{Chapter9/figures/parameter_sharing}} \fi \caption{\gls{parameter_sharing}。 -黑色箭头表示在两个不同的模型中使用了特殊参数的连接。 +黑色箭头表示在两个不同的模型中使用了特定参数的连接。 \emph{(上)}黑色箭头表示在卷积模型中对3元素核的中间元素的使用。 因为\gls{parameter_sharing},这个单独的参数被用于所有的输入位置。 \emph{(下)}这个单独的黑色箭头表示在全连接模型中对权重矩阵的中间元素的使用。 @@ -266,7 +266,7 @@ \section{动机} 如果我们把输入中的一个事件向后延时,在输出中仍然会有完全相同的表示,只是时间延后了。 图像与之类似,卷积产生了一个2维映射来表明某些特征在输入中出现的位置。 如果我们移动输入中的对象,它的表示也会在输出中移动同样的量。 -当处理多个输入位置时,一些作用在邻居像素的函数是很有用的。 +当我们知道某个相邻小规模像素的函数在不同的位置都是有用的的时候,前述性质是有用的。 例如在处理图像时,在\gls{convolutional_network}的第一层进行图像的边缘检测是很有用的。 相同的边缘或多或少地散落在图像的各处,所以应当对整个图像进行\gls{parameter_sharing}。 但在某些情况下,我们并不希望对整幅图进行\gls{parameter_sharing}。 @@ -429,7 +429,7 @@ \section{卷积与\glsentrytext{pooling}作为一种无限强的先验} 弱先验具有较高的熵值,例如方差很大的\gls{gaussian_distribution}。这样的先验允许数据对于参数的改变具有或多或少的自由性。 强先验具有较低的熵值,例如方差很小的\gls{gaussian_distribution}。这样的先验在决定参数最终取值时起着更加积极的作用。 -一个无限强的先验需要对一些参数的概率置零并且完全禁止对这些参数赋值,无论数据对于这些参数的值给出了多大的支持。 +一个无限强的先验需要对一些参数取某些值的概率置零并且完全禁止对这些参数赋予这些值,无论数据对于这些参数值给出了多大的支持。 我们可以把\gls{convolutional_network}类比成全连接网络,但对于这个全连接网络的权重有一个无限强的先验。 这个无限强的先验是说一个\gls{hidden_unit}的权重必须和它邻居的权重相同,但可以在空间上移动。 @@ -474,7 +474,7 @@ \section{基本卷积函数的变体} 因为\gls{convolutional_network}通常使用多通道的卷积,所以即使使用了核翻转, 也不一定保证网络的线性运算是可交换的。 只有当其中的每个运算的输出和输入具有相同的通道数时,这些多通道的运算才是可交换的。 -假定我们有一个4维的核张量$\TSK$,它的每一个元素是$\TEK_{i,j,k,l}$,表示输出中处于通道$i$的一个单元和输入中处于通道$j$中的一个单元的连接强度,并且在输出单元和输入单元之间有$k$行$l$列的偏置。 +假定我们有一个4维的核张量$\TSK$,它的每一个元素是$\TEK_{i,j,k,l}$,表示输出中处于通道$i$的一个单元和输入中处于通道$j$中的一个单元的连接强度,并且在输出单元和输入单元之间有$k$行$l$列的偏移。 假定我们的输入由观测数据$\TSV$组成,它的每一个元素是$\TEV_{i,j,k}$,表示处在通道$i$中第$j$行第$k$列的值。 假定我们的输出$\TSZ$和输入$\TSV$具有相同的形式。 如果输出$\TSZ$是通过对$\TSK$和$\TSV$进行卷积而不涉及翻转$\TSK$得到的,那么 @@ -680,7 +680,7 @@ \section{基本卷积函数的变体} 转置运算返回的输出的大小取决于三个方面:零填充的策略、\gls{forward_propagation}运算的\gls{stride}以及\gls{forward_propagation}的输出映射的大小。 在一些情况下,不同大小的输入通过\gls{forward_propagation}过程能够得到相同大小的输出映射,所以必须明确地告知转置运算原始输入的大小。 -这三种运算——卷积、从输出到权重的反向传播和从输出到输入的反向传播——对于训练任意深度的前馈\gls{convolutional_network},以及训练带有(基于卷积的转置的)重构函数的\gls{convolutional_network},这三种运算都足以计算它们所需的所有梯度。 +这三种运算——卷积、从输出到权重的反向传播和从输出到输入的反向传播——对于训练任意深度的前馈\gls{convolutional_network},以及训练带有(基于卷积的转置的)重建函数的\gls{convolutional_network},这三种运算都足以计算它们所需的所有梯度。 对于完全一般的多维、多样例情况下的公式,完整的推导可以参考~\cite{Goodfellow-TR2010}。 为了直观说明这些公式是如何起作用的,我们这里给出一个二维单个样例的版本。 @@ -744,7 +744,7 @@ \section{结构化输出} 经常出现的一个问题是输出平面可能比输入平面要小,如\figref{fig:chap9_zero_pad_shrink}所示。 用于对图像中单个对象分类的常用结构中,网络空间维数的最大减少来源于使用大\gls{stride}的\gls{pooling}层。 -为了产生与输入大小相似的输出映射,我们可以避免把\gls{pooling}放在一起\citep{jain2007supervised}。 +为了产生与输入大小相似的输出映射,我们可以完全避免使用\gls{pooling}\citep{jain2007supervised}。 另一种策略是单纯地产生一张低分辨率的标签网格\citep{Pinheiro+Collobert-ICML2014,Pinheiro+Collobert-CVPR2015}。 最后,原则上可以使用具有单位\gls{stride}的\gls{pooling}操作。 @@ -796,7 +796,7 @@ \section{数据类型} 音频波形:卷积的轴对应于时间。我们将时间离散化并且在每个时间点测量一次波形的振幅。 & 骨架动画(skeleton animation)数据:计算机渲染的3D角色动画是通过随时间调整``骨架''的姿势而生成的。 在每个时间点,角色的姿势通过骨架中的每个关节的角度来描述。我们输入到卷积模型的数据的每个通道,表示一个关节关于一个轴的角度。\\ \hline 2维 & -已经使用\gls{Fourier_transform}预处理过的音频数据:我们可以将音频波形变换成2维张量,不同的行对应不同的频率,不同的列对应不同的时间点。在时间轴上使用卷积使模型等效于在时间上移动。在频率轴上使用卷积使得模型等效于在频率上移动,这使得在不同八度音阶中播放的相同旋律产生相同的表示,但处于网络输出中的不同高度。 & %Fourier transform这里不是很清楚,在频率上使用卷积是做什么的? +已经使用\gls{Fourier_transform}预处理过的音频数据:我们可以将音频波形变换成2维张量,不同的行对应不同的频率,不同的列对应不同的时间点。在时间轴上使用卷积对于时间上的移动具有等变性。在频率轴上使用卷积使得模型对于在频率上的移动具有等变性,这使得在不同八度音阶中播放的相同旋律产生相同的表示,但处于网络输出中的不同高度。 & %Fourier transform这里不是很清楚,在频率上使用卷积是做什么的? 彩色图像数据:其中一个通道包含红色像素,另一个包含绿色像素,最后一个包含蓝色像素。在图像的水平轴和竖直轴上移动卷积核,赋予了两个方向上平移等变性。\\ \hline 3维 & 体积数据:这种数据一般来源于医学成像技术,例如CT扫描等。 & @@ -882,7 +882,7 @@ \section{随机或无监督的特征} \chapref{chap:optimization_for_training_deep_models}描述了如何实现\gls{supervised}的\gls{greedy_layer_wise_pretraining},第\ref{part:deep_learning_research}部分将此扩展到了无监督的范畴。 卷积模型的\gls{greedy_layer_wise_pretraining}的经典模型是卷积\gls{DBN}\citep{HonglakL2009}。 \gls{convolutional_network}为我们提供了相对于多层感知机更进一步采用预训练策略的机会。 -并非一次训练整个卷积层,我们可以训练一小块模型,就像~\cite{Coates2011}使用$k$均值做的那样。 +我们可以训练一小块模型,而并非一次训练整个卷积层,就像~\cite{Coates2011}使用$k$均值做的那样。 然后,我们可以用来自这个小块模型的参数来定义卷积层的核。 这意味着使用无监督学习来训练\gls{convolutional_network}\emph{并且在训练的过程中完全不使用卷积}是可能的。 使用这种方法,我们可以训练非常大的模型,并且只在推断期间产生高计算成本\citep{ranzato-cvpr-07-small,Jarrett-ICCV2009-small,koray-nips-10-small,icml2013_coates13}。 @@ -891,16 +891,16 @@ \section{随机或无监督的特征} % -- 352 -- -与其他无监督预训练的方法一样,使用这种方法的一些好处仍然难以说清。 -无监督预训练可以提供一些相对于\gls{supervised}训练的正则化,或者它可以简单地允许我们训练更大的结构,因为它的学习规则降低了计算成本。 +与其他无监督预训练的方法一样,使用这种方法的一些好处仍然难以说清成因。 +可能是无监督预训练可以提供一些相对于\gls{supervised}训练的正则化,或者它可以简单地允许我们训练更大的结构,因为它的学习规则降低了计算成本。 \section{\glsentrytext{convolutional_network}的神经科学基础} \label{sec:the_neuroscientific_basis_for_convolutional_networks} \gls{convolutional_network}也许是生物学启发人工智能的最为成功的案例。 -虽然\gls{convolutional_network}也经过许多其他领域的指导,但是神经网络的一些关键设计原则来自于神经科学。 +虽然\gls{convolutional_network}也受到了许多其他领域的指导,但是神经网络的一些关键设计原则来自于神经科学。 -\gls{convolutional_network}的历史始于神经科学实验,远早于相关计算模型的发展。 +\gls{convolutional_network}的历史始于神经科学实验,这些实验远早于相关计算模型的发展。 为了确定关于哺乳动物视觉系统如何工作的许多最基本的事实,神经生理学家David Hubel和Torsten Wiesel合作多年\citep{Hubel+Wiesel-1959,Hubel62,Hubel+Wiesel-1968}。 他们的成就最终获得了诺贝尔奖。 他们的发现对当代深度学习模型有最大影响的是基于记录猫的单个神经元的活动。 @@ -921,18 +921,18 @@ \section{\glsentrytext{convolutional_network}的神经科学基础} \gls{convolutional_network}层被设计为描述V1的三个性质: \begin{enumerate} - \item V1可以进行空间映射。 + \item V1是以某种具有空间对应关系的方式排布的。 %这里翻译不好 它实际上具有二维结构来反映视网膜中的图像结构。 - 例如,到达视网膜下半部的光仅影响V1相应的一半。 - \gls{convolutional_network}通过用二维映射定义特征的方式来描述该特性。 + 例如,到达视网膜下半部的光仅影响V1中相应的一半。 + \gls{convolutional_network}通过用二维映射定义特征的方式来体现该特性。 \item V1包含许多\firstgls{simple_cells}。 简单细胞的活动在某种程度上可以概括为在一个小的空间位置感受野内的图像的线性函数。 \gls{convolutional_network}的检测器单元被设计为模拟简单细胞的这些性质。 \item V1还包括许多\firstgls{complex_cells}。 - 这些细胞响应类似于由简单细胞检测的那些特征,但是复杂细胞对于特征的位置微小偏移具有不变性。 + 这些细胞响应的特征类似于由简单细胞检测的那些特征,但是复杂细胞对于特征的位置微小偏移具有不变性。 这启发了\gls{convolutional_network}的\gls{pooling}单元。 复杂细胞对于照明中的一些变化也是不变的,不能简单地通过在空间位置上\gls{pooling}来刻画。 这些不变性激发了\gls{convolutional_network}中的一些跨通道\gls{pooling}策略,例如maxout单元\citep{Goodfellow-et-al-ICML2013}。 @@ -940,7 +940,7 @@ \section{\glsentrytext{convolutional_network}的神经科学基础} 虽然我们最了解V1,但是一般认为相同的基本原理也适用于视觉系统的其他区域。 在我们视觉系统的草图视图中,当我们逐渐深入大脑时,遵循\gls{pooling}的基本探测策略被反复执行。 -当我们穿过大脑的多个解剖层时,我们最终找到了响应一些特定概念的细胞,并且这些细胞对输入的很多种变换都具有不变性。 +当我们穿过大脑的多个解剖层时,我们最终会看到一些响应特定概念的细胞,这些细胞对输入的很多种变换都具有不变性。 这些细胞被昵称为``祖母细胞''——这个想法是一个人可能有一个神经元,当看到他祖母的照片时该神经元被激活,无论祖母是出现在照片的左边或右边,无论照片是她的脸部的特写镜头还是她的全身照,也无论她处在光亮还是黑暗中,等等。 这些祖母细胞已经被证明确实存在于人脑中,在一个被称为\emph{内侧颞叶}的区域\citep{quiroga2005invariant}。 @@ -973,11 +973,11 @@ \section{\glsentrytext{convolutional_network}的神经科学基础} 在深度学习的背景下,\gls{attention_mechanism}对于自然语言处理是最成功的,参考\secref{sec:using_an_attention_mechanism_and_aligning_pieces_of_data}。 研究者已经研发了几种具有视觉机制的视觉模型,但到目前为止还没有成为主导方法\citep{Larochelle2010,Denil2012}。 - \item 人类视觉系统集成了许多其他感觉,例如听觉,以及像我们的心情和想法一样的因素。 + \item 人类视觉系统与许多其他感觉相集成,例如听觉,以及像我们的心情和想法一样的因素。 \gls{convolutional_network}迄今为止纯粹是视觉的。 \item 人类视觉系统不仅仅用于识别对象。 - 它能够理解整个场景,包括许多对象和对象之间的关系,以及处理我们的身体与世界交互所需的丰富的三维几何信息。 + 它能够理解整个场景,包括许多对象,对象和对象之间的关系,以及处理我们的身体与世界交互所需的丰富的三维几何信息。 \gls{convolutional_network}已经应用于这些问题中的一些,但是这些应用还处于起步阶段。 \item 即使像V1这样简单的大脑区域也受到来自较高级别的反馈的严重影响。 @@ -1001,7 +1001,7 @@ \section{\glsentrytext{convolutional_network}的神经科学基础} 用于这些模型的反向传播不受任何神经科学观察的启发,并且被一些人认为是生物不可信的。 在基于使用反向传播训练的TDNN成功之后,\cite{LeCun89d}通过将相同的训练算法应用于图像的2维卷积来发展现代\gls{convolutional_network}。 -到目前为止,我们已经描述了简单细胞对于某些特征是如何呈现粗略的线性和选择性,复杂细胞是如何更加的非线性,并且对于这些简单细胞特征的某些变换具有不变性,以及在选择性和不变性之间交替放置的层可以产生对非常特定现象的祖母细胞。 +到目前为止,我们已经描述了简单细胞对于某些特征是如何呈现粗略的线性和选择性,复杂细胞是如何更加的非线性,并且对于这些简单细胞特征的某些变换具有不变性,以及在选择性和不变性之间交替放置的层可以产生对非常特定现象作出反应的祖母细胞。 我们还没有精确描述这些单个细胞检测到了什么。 在深度非线性网络中,可能难以理解单个细胞的功能。 第一层中的简单细胞相对更容易分析,因为它们的响应由线性函数驱动。 @@ -1088,13 +1088,13 @@ \section{\glsentrytext{convolutional_network}的神经科学基础} 一个重要的特殊情况是当$s_1$和$s_0$具有除$\phi$ 以外都相同的参数,并且$\phi$被设置为使得$s_1$与$s_0$相位相差四分之一周期时。 在这种情况下,$s_0$和$s_1$形成\firstgls{quadrature_pair}。 当高斯重新加权的图像$I(x,y)\exp(-\beta_x x'^2 -\beta_y y^2)$包含具有频率$f$、在方向$\tau$上、接近$(x_0, y_0)$的高振幅正弦波时,用先前方法定义的复杂细胞会响应,并且\emph{不管该波的相位偏移}。 -换句话说,复杂细胞对于图像在方向$\tau$上的微小变换或者翻转图像(用白色代替黑色,反之亦然)具有不变性。 +换句话说,复杂细胞对于图像在方向$\tau$上的微小平移或者翻转图像(用白色代替黑色,反之亦然)具有不变性。 神经科学和机器学习之间最显著的对应关系,是从视觉上比较机器学习模型学得的特征与使用V1得到的特征。 \cite{Olshausen+Field-1996}说明,一个简单的无监督学习算法,稀疏编码,学习的特征具有与简单细胞类似的感受野。 -从那时起,我们发现,当应用于自然图像时,极其多样的统计学习算法学习类\gls{Gabor_function}的特征。这包括大多数深度学习算法,它们在其第一层中学习这些特征。 +从那时起,我们发现,当应用于自然图像时,极其多样的统计学习算法都会学习到类\gls{Gabor_function}的特征。这包括大多数深度学习算法,它们在其第一层中学习这些特征。 \figref{fig:chap9_feature_detectors}给出了一些例子。 -因为如此众多不同的学习算法学习边缘检测器,所以很难仅基于学习算法学得的特征,来断定哪一个特定的学习算法是``正确''的大脑模型(虽然,当应用于自然图像时,如果一个算法\emph{不能}学得某种检测器时,它能够作为一种否定标志)。 +因为如此众多不同的学习算法会学习到边缘检测器,所以很难仅基于学习算法学得的特征,来断定哪一个特定的学习算法是``正确''的大脑模型(虽然,当应用于自然图像时,如果一个算法\emph{不能}学得某种检测器时,它能够作为一种否定标志)。 这些特征是自然图像的统计结构的重要部分,并且可以通过许多不同的统计建模方法来重新获得。 读者可以参考\citep{hyvarinen-book2009}来获得自然图像统计领域的综述。 % fig 9.19 From a72df5c299388c8a3d571ef661f602cfa3e2d64d Mon Sep 17 00:00:00 2001 From: wuyijun Date: Sun, 10 Nov 2019 00:00:58 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=88=A0=E9=99=A4=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=8E=89=E7=9A=84=E5=8E=9F=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Chapter12/applications.tex | 1 - 1 file changed, 1 deletion(-) diff --git a/Chapter12/applications.tex b/Chapter12/applications.tex index dbc4402..5ce2e24 100644 --- a/Chapter12/applications.tex +++ b/Chapter12/applications.tex @@ -471,7 +471,6 @@ \subsubsection{对比度归一化} 在彩色图像的情况下,一些策略单独处理不同的颜色通道,而其他策略组合来自不同通道的信息以使每个像素归一化\citep{sermanet-icpr-12}。 % 444 -\gls{LCN}通常可以通过使用可分离卷积(参考\secref{sec:efficient_convolution_algorithms})来计算\gls{feature_map}的局部平均值和局部\gls{standard_deviation},然后在不同的\gls{feature_map}上使用逐元素的减法和除法。 \gls{LCN}通常可以通过使用可分离卷积(参考\secref{sec:efficient_convolution_algorithms})来计算\gls{feature_map}的局部平均值和局部\gls{standard_deviation},然后在不同的\gls{feature_map}上使用逐元素的减法和除法来实现。 % 444