diff --git a/Chapter19/approximate_inference.tex b/Chapter19/approximate_inference.tex index 2586bfb..8ee6821 100644 --- a/Chapter19/approximate_inference.tex +++ b/Chapter19/approximate_inference.tex @@ -623,9 +623,9 @@ \subsection{\glsentrytext{calculus_of_variations}} % p 638 -我们不能简单的关于函数$p(x)$最大化$H[p]$,因为那样的话结果可能不是一个概率分布。 +我们不能简单地仅仅关于函数$p(x)$最大化$H[p]$,因为那样的话结果可能不是一个概率分布。 为了解决这个问题,我们需要使用一个拉格朗日乘子来添加一个$p(x)$积分值为1的约束。 -此外,当方差增大的时候,熵也会无限制的增加。 +同样的,当方差增大的时候,熵也会无限制的增加。 因此,寻找哪一个分布有最大熵这个问题是没有意义的。 但是,在给定固定的方差$\sigma^2$的时候,我们可以寻找一个最大熵的分布。 最后,这个问题还是无法确定因为在不改变熵的条件下一个分布可以被随意的改变。 @@ -675,7 +675,7 @@ \subsection{\glsentrytext{calculus_of_variations}} 为什么我们无法发现第二个最小值的临界点呢? 原因是没有一个特定的函数能够达到最小的熵值。 当函数把越多的概率密度加到$x = \mu + \sigma$和$x = \mu - \sigma$两个点上和越少的概率密度到其他点上时,他们的熵值会减少,而方差却不变。 -然而任何把所有的权重都放在这两点的函数的积分并不为1。 +然而任何把所有的权重都放在这两点的函数的积分并不为$1$也不是一个有效地概率分布。 所以不存在一个最小熵的概率分布函数,就像不存在一个最小的正实数一样。 然而,我们发现存在一个收敛的概率分布的序列,收敛到权重都在两个点上。 这种情况能够退化为混合\gls{dirac_distribution}。 @@ -698,8 +698,8 @@ \subsection{连续型\gls{latent_variable}} % 640 head -在大多数情况下,研究者并不需要解决任何的\gls{calculus_of_variations}的问题。 -取而代之的是,\gls{mean_field}固定点迭代有一种通用的方程。 +在大多数情况下,研究者并不需要解决任何\gls{calculus_of_variations}的问题。 +取而代之的是,\gls{mean_field}固定点迭代更新有一种通用的方程。 如果我们做了\gls{mean_field}的近似: \begin{align} \label{eqn:1955} diff --git a/Chapter6/deep_feedforward_networks.tex b/Chapter6/deep_feedforward_networks.tex index c2c2597..821148a 100644 --- a/Chapter6/deep_feedforward_networks.tex +++ b/Chapter6/deep_feedforward_networks.tex @@ -312,25 +312,25 @@ \section{实例:学习XOR} \section{基于梯度的学习} \label{sec:gradient_based_learning} -设计和训练神经网络与使用梯度下降训练其他的任何机器学习模型并没有太大不同。 +设计和训练神经网络与使用梯度下降训练其他任何机器学习模型并没有太大不同。 在\ref{sec:building_a_machine_learning_algorithm}节中,我们描述了如何通过指明一个优化过程、代价函数和一个模型族来构建一个机器学习算法。 我们到目前为止看到的线性模型和神经网络的最大区别,在于神经网络的非线性导致大多数我们感兴趣的损失函数都成为了非凸的。 -这意味着神经网络的训练通常使用迭代的、基于梯度的优化,仅仅使得代价函数达到一个非常小的值;而不是用于训练线性回归模型的线性方程求解器,或者是用于训练\gls{logistic_regression}或者\glssymbol{SVM}的具有全局收敛保证的凸优化算法。 -凸优化从任何一种初始参数出发都会收敛(仅仅是理论上——在实践中也很鲁棒但可能会遇到数值问题)。 +这意味着神经网络的训练通常使用的迭代的、基于梯度的优化,仅仅使得代价函数达到一个非常小的值;而不是像用于训练线性回归模型的线性方程求解器,或者用于训练\gls{logistic_regression}或\glssymbol{SVM}的凸优化算法那样具有全局的收敛保证。 +凸优化从任何一种初始参数出发都会收敛(理论上如此——在实践中也很鲁棒但可能会遇到数值问题)。 用于非凸损失函数的随机梯度下降没有这种收敛性保证,并且对参数的初始值很敏感。 对于\gls{feedforward_neural_network},将所有的权重值初始化为小随机数是很重要的。 偏置可以初始化为零或者小的正值。 -这种用于训练\gls{feedforward_neural_network}以及几乎所有深度模型的迭代的基于梯度的优化算法会在第\ref{chap:optimization_for_training_deep_models}章详细介绍,参数初始化会在\ref{sec:parameter_initialization_strategies}节中特别说明。 -就目前而言,只需要懂得,训练算法几乎总是基于使用代价函数的梯度下降的这种或那种方式即可。 +这种用于训练\gls{feedforward_neural_network}以及几乎所有深度模型的迭代的基于梯度的优化算法会在第\ref{chap:optimization_for_training_deep_models}章详细介绍,参数初始化会在\ref{sec:parameter_initialization_strategies}节中具体说明。 +就目前而言,只需要懂得,训练算法几乎总是基于使用梯度来使得代价函数下降的各种方法即可。 一些特别的算法是对梯度下降思想的改进和提纯,在\ref{sec:gradient_based_optimization}节中介绍,还有一些更特别的,大多数是对随机梯度下降算法的改进,在\ref{sec:stochastic_gradient_descent_chap5}节中介绍。 % -- 171 -- -我们当然也可以用梯度下降来训练诸如线性回归和支持向量机之类的模型,并且事实上当训练集相当大时这是很常用的。 +我们当然也可以用梯度下降来训练诸如线性回归和\gls{SVM}之类的模型,并且事实上当训练集相当大时这是很常用的。 从这点来看,训练神经网络和训练其他任何模型并没有太大区别。 计算梯度对于神经网络会略微复杂一些,但仍然可以很高效而精确地实现。 -\ref{sec:back_propagation_and_other_differentiation_algorithms}节将会介绍如何用反向传播算法以及它的现代扩展算法来求得梯度。 +\ref{sec:back_propagation_and_other_differentiation_algorithms}节将会介绍如何用\gls{BP}算法以及它的现代扩展算法来求得梯度。 和其他的机器学习模型一样,为了使用基于梯度的学习方法我们必须选择一个代价函数,并且我们必须选择如何表示模型的输出。 现在,我们重温这些设计上的考虑,并且特别强调神经网络的情景。 @@ -339,15 +339,15 @@ \subsection{代价函数} \label{sec:cost_functions} 深度神经网络设计中的一个重要方面是代价函数的选择。 -幸运的是,神经网络的代价函数或多或少是和其他参数模型例如线性模型的代价函数相同的。 +幸运的是,神经网络的代价函数或多或少是和其他的参数模型例如线性模型的代价函数相同的。 在大多数情况下, 我们的参数模型定义了一个分布$p(\bm{y}\mid\bm{x};\bm{\theta})$并且我们简单地使用最大似然原理。 -这意味着我们使用训练数据和模型预测间的交叉熵作为代价函数。 +这意味着我们使用训练数据和模型预测间的\gls{cross_entropy}作为代价函数。 有时,我们使用一个更简单的方法,不是预测$\bm{y}$的完整概率分布,而是仅仅预测在给定$\bm{x}$的条件下$\bm{y}$的某种统计量。 -某些专门的损失函数允许我们来训练这些估计的预测器。 +某些专门的损失函数允许我们来训练这些估计量的预测器。 -用于训练神经网络的完整的代价函数通常在我们这里描述的基本代价函数的基础上结合一个正则项。 +用于训练神经网络的完整的代价函数,通常在我们这里描述的基本代价函数的基础上结合一个正则项。 我们已经在\ref{sec:regularization}节中看到正则化应用到线性模型中的一些简单的例子。 用于线性模型的权值衰减方法也直接适用于深度神经网络,而且是最流行的正则化策略之一。 用于神经网络的更高级的正则化策略会在第\ref{chap:regularization_for_deep_learning}章中讨论。 @@ -358,7 +358,7 @@ \subsubsection{用最大似然学习条件分布} \label{sec:learning_conditional_distributions_with_maximum_likelihood} 大多数现代的神经网络使用最大似然来训练。 -这意味着代价函数就是负的对数似然,它与训练数据和模型分布间的交叉熵等价。 +这意味着代价函数就是负的对数似然,它与训练数据和模型分布间的\gls{cross_entropy}等价。 这个代价函数表示为 \begin{equation} J(\bm{\theta}) = -\SetE_{\mathbf{x}, \mathbf{y} \sim \hat{p}_\text{data}} \log p_\text{model} (\bm{y} \mid \bm{x}). @@ -366,13 +366,13 @@ \subsubsection{用最大似然学习条件分布} 代价函数的具体形式随着模型而改变,取决于$\log p_\text{model}$的具体形式。 上述方程的展开形式通常会有一些项不依赖于模型的参数,我们可以舍去。 -例如,正如我们在\ref{sec:the_task_t}节中看到的,如果$p_\text{model}(\bm{y}\mid\bm{x}) = \CalN(\bm{y};f(\bm{x};\bm{\theta}), \bm{I})$,那么我们恢复均方误差代价, +例如,正如我们在\ref{sec:the_task_t}节中看到的,如果$p_\text{model}(\bm{y}\mid\bm{x}) = \CalN(\bm{y};f(\bm{x};\bm{\theta}), \bm{I})$,那么我们恢复\gls{mean_squared_error}代价, \begin{equation} J(\theta) = \frac{1}{2} \SetE_{\RVx, \RVy \sim \hat{p}_\text{data}} || \bm{y} - f(\bm{x}; \bm{\theta}) ||^2 + \text{const}, \end{equation} 至少系数$\frac{1}{2}$和常数项不依赖于$\bm{\theta}$。 舍弃的常数是基于\gls{gaussian_distribution}的方差,在这种情况下我们选择不把它参数化。 -先前,我们看到了对输出分布的最大似然估计和线性模型均方误差的最小化之间的等价性,但事实上,这种等价性并不要求$f(\bm{x}; \bm{\theta})$用于预测\gls{gaussian_distribution}的均值。 +先前,我们看到了对输出分布的最大似然估计和对线性模型\gls{mean_squared_error}的最小化之间的等价性,但事实上,这种等价性并不要求$f(\bm{x}; \bm{\theta})$用于预测\gls{gaussian_distribution}的均值。 使用最大似然来导出代价函数的方法的一个优势是,它减轻了为每个模型设计代价函数的负担。 明确一个模型$p(\bm{y}\mid\bm{x})$则自动地确定了一个代价函数$\log p(\bm{y}\mid\bm{x})$。 @@ -387,11 +387,11 @@ \subsubsection{用最大似然学习条件分布} % -- 173 -- -用于实现最大似然估计的交叉熵代价函数有一个不同寻常的特性,那就是当应用到实践中经常遇到的模型上时它通常没有最小值。 +用于实现最大似然估计的\gls{cross_entropy}代价函数有一个不同寻常的特性,那就是当它被应用于实践中经常遇到的模型时,它通常没有最小值。 对于离散型输出变量,大多数模型以一种特殊的形式来参数化,即它们不能表示概率零和一,但是可以无限接近。 \gls{logistic_regression}是其中一个例子。 -对于实值的输出变量,如果模型可以控制输出分布的密度(例如,通过学习Gaussian输出分布的方差参数),那么它可能对正确的训练集输出赋予极其高的密度,这将导致交叉熵趋向负无穷。 -第\ref{chap:regularization_for_deep_learning}章中描述的正则化技术提供了一些不同的方法来修正学习问题,所以模型不会通过这种方式来获得无限制的奖赏。 +对于实值的输出变量,如果模型可以控制输出分布的密度(例如,通过学习\gls{gaussian_output_distribution}的方差参数),那么它可能对正确的训练集输出赋予极其高的密度,这将导致\gls{cross_entropy}趋向负无穷。 +第\ref{chap:regularization_for_deep_learning}章中描述的正则化技术提供了一些不同的方法来修正学习问题,所以模型不会通过这种方式来获得无限制的收益。 \subsubsection{学习条件统计量} \label{sec:learning_conditional_statistics} @@ -402,15 +402,15 @@ \subsubsection{学习条件统计量} 如果我们使用一个足够强大的神经网络,我们可以认为这个神经网络能够表示一大类函数中的任何一个函数$f$,这个类仅仅被一些特征所限制,例如连续性和有界,而不是具有特殊的参数形式。 从这个角度来看,我们可以把代价函数看作是一个\firstgls{functional}而不仅仅是一个函数。 泛函是函数到实数的映射。我们因此可以将学习看作是选择一个函数而不仅仅是选择一组参数。 -我们可以设计代价泛函在我们希望的某些特殊函数处取得最小值。 +我们可以设计代价泛函在我们想要的某些特殊函数处取得最小值。 例如,我们可以设计一个代价泛函,使它的最小值处于一个特殊的函数上,这个函数将$\bm{x}$映射到给定$\bm{x}$时$\bm{y}$的期望值。 对函数求解优化问题需要用到\firstgls{calculus_of_variations}这个数学工具,我们将在\ref{sec:calculus_of_variations}节中讨论。 -理解变分法对于理解本章的内容不是必要的。 -目前,只需要知道变分法可以被用来导出下面的两个结果。 +理解\gls{calculus_of_variations}对于理解本章的内容不是必要的。 +目前,只需要知道\gls{calculus_of_variations}可以被用来导出下面的两个结果。 % -- 174 -- -我们使用变分法导出的第一个结果是解优化问题 +我们使用\gls{calculus_of_variations}导出的第一个结果是解优化问题 \begin{equation} f^* = \underset{f}{\argmin} \ \SetE_{\RVx, \RVy \sim p_\text{data}} ||\bm{y}-f(\bm{x})||^2 \end{equation} @@ -419,42 +419,42 @@ \subsubsection{学习条件统计量} f^*(\bm{x}) = \SetE_{\RVy\sim p_\text{data}(\bm{y}|\bm{x})} [\bm{y}], \end{equation} 要求这个函数处在我们要优化的类里。 -换句话说,如果我们能够用无穷多的、来源于真实的数据生成分布的样例进行训练,最小化均方误差代价函数将得到一个函数,它可以用来对每个$\bm{x}$的值预测出$\bm{y}$的均值。 +换句话说,如果我们能够用无穷多的、来源于真实的数据生成分布的样例进行训练,最小化\gls{mean_squared_error}代价函数将得到一个函数,它可以用来对每个$\bm{x}$的值预测出$\bm{y}$的均值。 不同的代价函数给出不同的统计量。 -第二个使用变分法得到的结果是 +第二个使用\gls{calculus_of_variations}得到的结果是 \begin{equation} f^* = \underset{f}{\argmin} \ \SetE_{\RVx, \RVy \sim p_\text{data}} ||\bm{y} - f(\bm{x})||_1 \end{equation} -得到一个函数可以对每个$\bm{x}$预测$\bm{y}$取值的\emph{中位数},只要这个函数在我们要优化的函数族里。 +将得到一个函数可以对每个$\bm{x}$预测$\bm{y}$取值的\emph{中位数},只要这个函数在我们要优化的函数族里。 这个代价函数通常被称为\firstgls{mean_absolute_error}。 -不幸的是,均方误差和平均绝对误差当使用基于梯度的优化方式时往往会导致糟糕的结果。 +不幸的是,\gls{mean_squared_error}和\gls{mean_absolute_error}在使用基于梯度的优化方法时往往会导致糟糕的结果。 一些饱和的输出单元当结合这些代价函数时会产生非常小的梯度。 -这就是为什么交叉熵代价函数比均方误差或者平均绝对误差更受欢迎的原因之一了,即使是在没必要估计整个$p(\bm{y}\mid\bm{x})$分布时。 +这就是为什么\gls{cross_entropy}代价函数比\gls{mean_squared_error}或者\gls{mean_absolute_error}更受欢迎的原因之一了,即使是在没必要估计整个$p(\bm{y}\mid\bm{x})$分布时。 \subsection{输出单元} \label{sec:output_units} 代价函数的选择与输出单元的选择紧密相关。 -大多数时候,我们简单地使用数据分布和模型分布间的交叉熵。 -选择怎样表示输出决定了交叉熵函数的形式。 +大多数时候,我们简单地使用数据分布和模型分布间的\gls{cross_entropy}。 +选择怎样表示输出决定了\gls{cross_entropy}函数的形式。 -任何种类的可以被用作输出的神经网络单元也可以被用作\gls{hidden_unit}。 +任何种类的可以被用作输出的神经网络单元,也可以被用作\gls{hidden_unit}。 这里,我们关注把这些单元用作模型的输出,但是原则上它们也可以在内部使用。 -我们将在\ref{sec:hidden_units}节中重温这些单元并且提供当它们被用作\gls{hidden_unit}时额外的细节。 +我们将在\ref{sec:hidden_units}节中重温这些单元并且给出当它们被用作\gls{hidden_unit}时一些额外的细节。 在本节中,我们假设\gls{feedforward_network}提供了一组定义为$\bm{h}=f(\bm{x};\bm{\theta})$的隐藏特征。 -输出层的作用是随后对这些特征提供一些额外的变换来完成整个网络必须完成的任务。 +输出层的作用是随后对这些特征进行一些额外的变换来完成整个网络必须完成的任务。 % -- 175 -- -\subsubsection{用于Gaussian输出分布的线性单元} +\subsubsection{用于\glsentrytext{gaussian_output_distribution}的线性单元} \label{sec:linear_units_for_gaussian_output_distributions} -一种简单的输出单元是基于没有非线性存在的仿射变换的输出单元。 -它们往往被称为线性单元。 +一种简单的输出单元是基于仿射变换的输出单元,仿射变换不带有非线性。 +这些单元往往被直接称为线性单元。 给定特征$\bm{h}$,线性输出单元层产生一个向量$\hat{\bm{y}} = \bm{W}^\top \bm{h}+\bm{b}$。 @@ -462,24 +462,25 @@ \subsubsection{用于Gaussian输出分布的线性单元} \begin{equation} p(\bm{y}\mid\bm{x}) = \CalN(\bm{y}; \hat{\bm{y}}, \bm{I} ). \end{equation} -最大化对数似然此时等价于最小化均方误差。 +最大化对数似然此时等价于最小化\gls{mean_squared_error}。 最大化似然的框架使它也可以很直观的来学习\gls{gaussian_distribution}的协方差矩阵,或者使得\gls{gaussian_distribution}的协方差是输入的函数。 -然而,对于所有输入协方差矩阵都必须被限制成一个正定的矩阵。 -用线性输出层来满足这种限制是困难的,所以通常其他的输出单元被用来对协方差参数化。 +然而,对于所有输入,协方差矩阵都必须被限制成一个正定的矩阵。 +用线性输出层来满足这种限制是困难的,所以通常使用其他的输出单元来对协方差参数化。 对协方差建模的方法在\ref{sec:other_output_types}节中简要介绍。 因为线性模型不会饱和,所以它们对基于梯度的优化算法没有任何困难并且可以被用在相当广泛的优化算法中。 -\subsubsection{用于Bernoulli输出分布的sigmoid单元} +\subsubsection{用于\glsentrytext{bernoulli_output_distribution}的\glsentrytext{sigmoid}单元} \label{sec:sigmoid_units_for_bernoulli_output_distributions} -许多任务需要预测二元变量$y$的值。 +许多任务需要预测二值型变量$y$的值。 具有两个类的分类问题可以归结为这种形式。 -此时最大似然的方法是定义$y$在$\bm{x}$条件下的Bernoulli分布。 +此时最大似然的方法是定义$y$在$\bm{x}$条件下的\gls{bernoulli_distribution}。 -Bernoulli分布仅需一个单独的数来定义,神经网络只需要预测$P(y =1\mid\bm{x})$即可。 +\gls{bernoulli_distribution}仅需单个参数来定义。 +神经网络只需要预测$P(y =1\mid\bm{x})$即可。 为了使这个数是有效的概率,它必须处在区间$[0, 1]$中。 满足这个限制需要一些细致的设计工作。 @@ -494,23 +495,23 @@ \subsubsection{用于Bernoulli输出分布的sigmoid单元} % -- 176 -- 与之相对的,最好是使用一种不同的方法来保证无论何时模型给出了错误的答案时总能有一个很强的梯度。 -这种方法是基于使用sigmoid输出单元结合最大似然来实现的。 +这种方法是基于使用\gls{sigmoid}输出单元结合最大似然来实现的。 -sigmoid输出单元定义为 +\gls{sigmoid}输出单元定义为 \begin{equation} \hat{y} = \sigma \left (\bm{w}^\top \bm{h} + b \right ), \end{equation} -这里$\sigma$是第\ref{sec:useful_properties_of_common_functions}节中介绍的logistic sigmoid函数。 +这里$\sigma$是第\ref{sec:useful_properties_of_common_functions}节中介绍的\gls{logistic_sigmoid}函数。 -我们可以认为sigmoid输出单元具有两个部分。 +我们可以认为\gls{sigmoid}输出单元具有两个部分。 首先,它使用一个线性层来计算$z=\bm{w}^\top \bm{h}+b$。 -接着,它使用sigmoid激活函数将$z$转化成概率。 +接着,它使用\gls{sigmoid}激活函数将$z$转化成概率。 我们暂时忽略对于$\bm{x}$的依赖性,只讨论如何用$z$的值来定义$y$的概率分布。 -sigmoid可以通过构造一个非标准化(和不为1)的概率分布$\tilde{P}(y)$来实现。 +\gls{sigmoid}可以通过构造一个非归一化(和不为1)的概率分布$\tilde{P}(y)$来得到。 我们可以随后除以一个合适的常数来得到有效的概率分布。 -如果我们假定非标准化的对数概率对$y$ 和$z$是线性的,可以对它取指数来得到非标准化的概率。 -我们然后对它归一化,可以发现这服从Bernoulli分布,它受$z$的sigmoid形式的变换控制: +如果我们假定非归一化的对数概率对$y$ 和$z$是线性的,可以对它取指数来得到非归一化的概率。 +我们然后对它归一化,可以发现这服从\gls{bernoulli_distribution},它受$z$的\gls{sigmoid}变换控制: \begin{align} \log \tilde{P}(y) &= yz,\\ \tilde{P}(y) &= \exp(yz),\\ @@ -518,14 +519,14 @@ \subsubsection{用于Bernoulli输出分布的sigmoid单元} P(y) &= \sigma((2y-1)z). \end{align} 基于指数和归一化的概率分布在统计建模的文献中很常见。 -定义这种二元变量分布的变量$z$被称为\firstgls{logit}。 +用于定义这种二值型变量分布的变量$z$被称为\firstgls{logit}。 % -- 177 -- 这种在对数空间里预测概率的方法可以很自然地使用最大似然学习。 -因为用于最大似然的代价函数是$-\log P(y\mid\bm{x})$,代价函数中的log抵消了sigmoid中的exp。 -如果没有这个效果,sigmoid的饱和性会阻止基于梯度的学习做出好的改进。 -我们使用最大似然来学习一个由sigmoid参数化的Bernoulli分布,它的损失函数为 +因为用于最大似然的代价函数是$-\log P(y\mid\bm{x})$,代价函数中的log抵消了\gls{sigmoid}中的exp。 +如果没有这个效果,\gls{sigmoid}的饱和性会阻止基于梯度的学习做出好的改进。 +我们使用最大似然来学习一个由\gls{sigmoid}参数化的\gls{bernoulli_distribution},它的损失函数为 \begin{align} J(\bm{\theta}) &= -\log P(y\mid\bm{x})\\ &= -\log \sigma ((2y-1)z)\\ @@ -533,43 +534,44 @@ \subsubsection{用于Bernoulli输出分布的sigmoid单元} \end{align} 这个推导使用了\ref{sec:useful_properties_of_common_functions}节中的一些性质。 -通过将损失函数写成softplus函数的形式,我们可以看到它仅仅在$(1-2y)z$取绝对值非常大的负值时才会饱和。 +通过将损失函数写成\gls{softplus_function}的形式,我们可以看到它仅仅在$(1-2y)z$取绝对值非常大的负值时才会饱和。 因此饱和只会出现在模型已经得到正确答案时——当$y=1$且$z$取非常大的正值时,或者$y=0$且$z$取非常小的负值时。 -当$z$的符号错误时,softplus函数的变量$(1-2y)z$可以简化为$|z|$。 -当$|z|$变得很大并且$z$的符号错误时,softplus函数渐进地趋向于它的变量$|z|$。 -对$z$求导则渐进地趋向于$\text{sign}(z)$,所以,对于极限情况下极度不正确的$z$,softplus函数完全不会收缩梯度。 +当$z$的符号错误时,\gls{softplus_function}的变量$(1-2y)z$可以简化为$|z|$。 +当$|z|$变得很大并且$z$的符号错误时,\gls{softplus_function}渐进地趋向于它的变量$|z|$。 +对$z$求导则渐进地趋向于$\text{sign}(z)$,所以,对于极限情况下极度不正确的$z$,\gls{softplus_function}完全不会收缩梯度。 这个性质很有用,因为它意味着基于梯度的学习可以很快地改正错误的$z$。 -当我们使用其他的损失函数,例如均方误差之类的,损失函数会在任何$\sigma(z)$饱和时饱和。 -sigmoid激活函数在$z$取非常小的负值时会饱和到0,当$z$取非常大的正值时会饱和到1。 +当我们使用其他的损失函数,例如\gls{mean_squared_error}之类的,损失函数会在任何$\sigma(z)$饱和时饱和。 +\gls{sigmoid}激活函数在$z$取非常小的负值时会饱和到0,当$z$取非常大的正值时会饱和到1。 这种情况一旦发生,梯度会变得非常小以至于不能用来学习,无论此时模型给出的是正确还是错误的答案。 -因为这个原因,最大似然总是训练sigmoid输出单元的优选方法。 +因为这个原因,最大似然几乎总是训练\gls{sigmoid}输出单元的优选方法。 -理论上,sigmoid的对数总是确定和有限的,因为sigmoid的返回值总是被限制在开区间$(0, 1)$上,而不是使用整个闭区间$[0, 1]$的有效概率。 +理论上,\gls{sigmoid}的对数总是确定和有限的,因为\gls{sigmoid}的返回值总是被限制在开区间$(0, 1)$上,而不是使用整个闭区间$[0, 1]$的有效概率。 在软件实现时,为了避免数值问题,最好将负的对数似然写作$z$的函数,而不是$\hat{y}=\sigma(z)$的函数。 -如果sigmoid函数下溢到零,那么之后对$\hat{y}$取对数会得到负无穷。 +如果\gls{sigmoid}函数下溢到零,那么之后对$\hat{y}$取对数会得到负无穷。 -\subsubsection{用于multinoulli输出分布的softmax单元} +\subsubsection{用于 +\glsentrytext{multinoulli_output_distribution}的softmax单元} \label{sec:softmax_units_for_multinoulli_output_distributions} 任何时候当我们想要表示一个具有$n$个可能取值的离散型随机变量的分布时,我们都可以使用softmax函数。 -它可以看作是sigmoid函数的扩展,sigmoid函数用来表示二元变量的分布。 +它可以看作是\gls{sigmoid}函数的扩展,\gls{sigmoid}函数用来表示二值型变量的分布。 % -- 178 -- softmax函数最常用作分类器的输出,来表示$n$个不同类上的概率分布。 比较少见的是,softmax函数可以在模型内部使用,例如如果我们想要在某个内部变量的$n$个不同选项中进行选择。 -在二元变量的情况下,我们希望计算一个单独的数 +在二值型变量的情况下,我们希望计算一个单独的数 \begin{equation} \hat{y} = P(y=1\mid\bm{x}). \end{equation} 因为这个数需要处在0和1之间,并且我们想要让这个数的对数可以很好地用于对数似然的基于梯度的优化,我们选择去预测另外一个数$z=\log \hat{P}(y=1\mid\bm{x})$。 -对其指数化和归一化,我们就得到了一个由sigmoid函数控制的Bernoulli分布。 +对其指数化和归一化,我们就得到了一个由\gls{sigmoid}函数控制的\gls{bernoulli_distribution}。 为了推广到具有$n$个值的离散型变量的情况,我们现在需要创造一个向量$\hat{\bm{y}}$,它的每个元素是$\hat{y}_i = P(y=i\mid\bm{x})$。 我们不仅要求每个$\hat{y}_i$元素介于0和1之间,还要使得整个向量的和为1使得它表示一个有效的概率分布。 -用于Bernoulli分布的方法同样可以推广到multinoulli分布。 +用于\gls{bernoulli_distribution}的方法同样可以推广到\gls{multinoulli_distribution}。 首先,线性层预测了非标准化的对数概率: \begin{equation} \bm{z} = \bm{W}^\top \bm{h}+\bm{b}, @@ -581,7 +583,7 @@ \subsubsection{用于multinoulli输出分布的softmax单元} \text{softmax}(\bm{z})_i = \frac{\exp(z_i)}{\sum_j \exp(z_j)}. \end{equation} -和logistic sigmoid一样,当使用最大化对数似然训练softmax来输出目标值$\RSy$时,使用指数函数工作地非常好。 +和\gls{logistic_sigmoid}一样,当使用最大化对数似然训练softmax来输出目标值$\RSy$时,使用指数函数工作地非常好。 这种情况下,我们想要最大化$\log P(\RSy =i; \bm{z})=\log \text{softmax}(\bm{z})_i$。 将softmax定义成指数的形式是很自然的因为对数似然中的log可以抵消softmax中的exp: \begin{equation} @@ -613,8 +615,8 @@ \subsubsection{用于multinoulli输出分布的softmax单元} 特别是,平方误差对于softmax单元来说是一个很差的损失函数,即使模型做出高度可信的不正确预测,也不能训练模型改变其输出\citep{Bridle90}。 要理解为什么这些损失函数可能失败,我们需要检查softmax函数本身。 -像sigmoid一样,softmax激活函数可能会饱和。 -sigmoid函数具有单个输出,当它的输入极端负或者极端正时会饱和。 +像\gls{sigmoid}一样,softmax激活函数可能会饱和。 +\gls{sigmoid}函数具有单个输出,当它的输入极端负或者极端正时会饱和。 对于softmax的情况,它有多个输出值。 当输入值之间的差异变得极端时,这些输出值可能饱和。 当softmax饱和时,基于softmax的许多代价函数也饱和,除非它们能够转化饱和的激活函数。 @@ -634,7 +636,7 @@ \subsubsection{用于multinoulli输出分布的softmax单元} 当其中一个输入是最大($z_i = \max_i z_i$)并且$z_i$远大于其他的输入时,相应的输出$\text{softmax}(\bm{z})_i$会饱和到1。 当$z_i$不是最大值并且最大值非常大时,相应的输出$\text{softmax}(\bm{z})_i$也会饱和到0。 -这是sigmoid单元饱和方式的一般化,并且如果损失函数不被设计成对其进行补偿,那么也会造成类似的学习困难。 +这是\gls{sigmoid}单元饱和方式的一般化,并且如果损失函数不被设计成对其进行补偿,那么也会造成类似的学习困难。 softmax函数的变量$\bm{z}$可以用两种方式产生。 最常见的是简单地使神经网络较早的层输出$\bm{z}$的每个元素,就像先前描述的使用线性层$\bm{z}={W}^\top\bm{h}+\bm{b}$。 @@ -642,7 +644,7 @@ \subsubsection{用于multinoulli输出分布的softmax单元} $n$个输出总和必须为1的约束意味着只有$n-1$个参数是必要的;第$n$个概率值可以通过1减去前面$n-1$个概率来获得。 因此,我们可以强制要求$\bm{z}$的一个元素是固定的。 例如,我们可以要求$z_n=0$。 -事实上,这正是sigmoid单元所做的。 +事实上,这正是\gls{sigmoid}单元所做的。 定义$P(y=1\mid\bm{x})=\sigma(z)$等价于用二维的$\bm{z}$以及$z_1=0$来定义$P(y=1\mid\bm{x})=\text{softmax}(\bm{z})_1$。 无论是$n-1$个变量还是$n$个变量的方法,都描述了相同的概率分布,但会产生不同的学习机制。 在实践中,无论是过度参数化的版本还是限制的版本都很少有差别,并且实现过度参数化的版本更为简单。 @@ -663,7 +665,7 @@ \subsubsection{用于multinoulli输出分布的softmax单元} \subsubsection{其他的输出类型} \label{sec:other_output_types} -先前描述的线性、sigmoid和softmax输出单元是最常见的。 +先前描述的线性、\gls{sigmoid}和softmax输出单元是最常见的。 神经网络可以推广到我们希望的几乎任何种类的输出层。 最大似然原则为如何为几乎任何种类的输出层设计一个好的代价函数提供了指导。 @@ -722,7 +724,7 @@ \subsubsection{其他的输出类型} \begin{enumerate} \item 混合组件$p(\RSc=i\mid\bm{x})$:它们由隐变量 \footnote{我们认为$\RSc$是隐变量是因为我们不能直接在数据中观测到它:给定输入$\RVx$和目标$\RVy$,不可能确切地知道是哪个Gaussian组件产生$\RVy$,但我们可以想象$\RVy$是通过选择其中一个来产生的,并且将那个未被观测到的选择作为随机变量。} -$\RSc$关联着,在$n$个不同组件上形成multinoulli分布。 +$\RSc$关联着,在$n$个不同组件上形成\gls{multinoulli_distribution}。 这个分布通常可以由$n$维向量的softmax来获得,以确保这些输出是正的并且和为1。 \item 均值$\bm{\mu}^{(i)}(\bm{x})$:它们指明了与第$i$个Gaussian组件相关联的中心或者均值,并且是无约束的(通常对于这些输出单元完全没有非线性)。 @@ -806,7 +808,7 @@ \section{\glsentrytext{hidden_unit}} 除非另有说明,大多数的\gls{hidden_unit}都可以描述为接受输入向量$\bm{x}$,计算仿射变换$\bm{z}=\bm{W}^\top \bm{x}+\bm{b}$,然后使用一个作用于每个元素的非线性函数$g(\bm{z})$。 大多数\gls{hidden_unit}的区别仅仅在于激活函数$g(\bm{z})$的形式。 -\subsection{\gls{ReLU}及其扩展} +\subsection{\glsentrytext{ReLU}及其扩展} \label{sec:rectified_linear_units_and_their_generalizations} \gls{ReLU}使用激活函数$g(z)=\max\{0, z\}$。 @@ -815,7 +817,7 @@ \subsection{\gls{ReLU}及其扩展} 线性单元和\gls{ReLU}的唯一区别在于\gls{ReLU}在其一半的定义域上输出为零。 这使得只要\gls{ReLU}处于激活状态它的导数都能保持较大。 它的梯度不仅大而且一致。 -修正操作的二阶导数几乎处处为0,并且在\gls{ReLU}处于激活状态时它的一阶导数处处为1。 +整流操作的二阶导数几乎处处为0,并且在\gls{ReLU}处于激活状态时它的一阶导数处处为1。 这意味着它的梯度方向对于学习来说更加有用,相比于引入二阶效应的激活函数。 \gls{ReLU}通常用于仿射变换之上: @@ -840,28 +842,28 @@ \subsection{\gls{ReLU}及其扩展} % -- 187 -- \firstgls{maxout_unit}\citep{Goodfellow_maxout_2013}进一步扩展了\gls{ReLU}。 -并不是使用作用于每个元素的函数$g(z)$,maxout单元将$\bm{z}$划分为具有$k$个值的组。 -每个maxout单元然后输出其中一组的最大元素: +并不是使用作用于每个元素的函数$g(z)$,\gls{maxout_unit}将$\bm{z}$划分为具有$k$个值的组。 +每个\gls{maxout_unit}然后输出其中一组的最大元素: \begin{equation} g(\bm{z})_i = \underset{j\in \SetG^{(i)}}{\max} z_j \end{equation} 这里$\SetG^{(i)}$是组$i$的输入指标集$\{(i-1)k+1, \ldots, ik\}$。 这提供了一种方法来学习对输入$\bm{x}$空间中多个方向响应的分段线性函数。 -maxout单元可以学习具有多达$k$段的分段线性的凸函数。 -maxout单元因此可以视为\textbf{学习激活函数}本身而不仅仅是单元之间的关系。 -使用足够大的$k$,maxout单元可以以任意的逼真度来近似任何凸函数。 -特别地,具有每组两块的maxout层可以学习实现和传统层相同的输入$\bm{x}$的函数,包括\gls{rectified_linear}激活函数、绝对值修正函数、leaky或参数化ReLU、或者可以学习实现与这些都不同的函数。 +\gls{maxout_unit}可以学习具有多达$k$段的分段线性的凸函数。 +\gls{maxout_unit}因此可以视为\textbf{学习激活函数}本身而不仅仅是单元之间的关系。 +使用足够大的$k$,\gls{maxout_unit}可以以任意的逼真度来近似任何凸函数。 +特别地,具有每组两块的maxout层可以学习实现和传统层相同的输入$\bm{x}$的函数,包括\gls{rectified_linear}激活函数、\gls{absolute_value_rectification}、\gls{leaky_ReLU} 或\gls{PReLU}、或者可以学习实现与这些都不同的函数。 maxout层的参数化当然也将与这些层不同,所以即使是maxout学习去实现和其他种类的层相同的$\bm{x}$的函数这种情况下,学习的机理也是不一样的。 -每个maxout单元现在由$k$个权重向量来参数化,而不仅仅是一个,所以maxout单元通常比\gls{ReLU}需要更多的正则化。 +每个\gls{maxout_unit}现在由$k$个权重向量来参数化,而不仅仅是一个,所以\gls{maxout_unit}通常比\gls{ReLU}需要更多的正则化。 如果训练集很大并且每个单元分得的块数保持很低的话,它们可以在没有正则化的情况下正常工作\citep{cai2013deep}。 -Maxout单元还有一些其他的优点。 +\gls{maxout_unit}还有一些其他的优点。 在某些情况下,需要更少的参数可以获得一些统计和计算上的优点。 具体来说,如果由$n$个不同的线性过滤器描述的特征可以在不损失信息的情况下,用每一组$k$个特征的最大值来概括的话,那么下一层可以获得$k$倍更少的权重数 。 -因为每个单元由多个过滤器驱动,maxout单元具有一些冗余来帮助它们抵抗一种被称为\firstgls{catastrophic_forgetting}的现象,这个现象是说神经网络忘记了如何执行它们过去训练的任务\citep{Goodfellow+al-ICLR2014-small}。 +因为每个单元由多个过滤器驱动,\gls{maxout_unit}具有一些冗余来帮助它们抵抗一种被称为\firstgls{catastrophic_forgetting}的现象,这个现象是说神经网络忘记了如何执行它们过去训练的任务\citep{Goodfellow+al-ICLR2014-small}。 \gls{ReLU}和它们的这些扩展都是基于一个原则,那就是如果它们的行为更接近线性,那么模型更容易优化。 使用线性行为更容易优化的一般性原则同样也适用在除了深度线性网络以外的内容。 @@ -872,10 +874,10 @@ \subsection{\gls{ReLU}及其扩展} % -- 188 -- -\subsection{Logistic Sigmoid与双曲正切函数} +\subsection{\gls{logistic_sigmoid}与双曲正切函数} \label{sec:logistic_sigmoid_and_hyperbolic_tangent} -在引入\gls{ReLU}之前,大多数神经网络使用logistic sigmoid激活函数 +在引入\gls{ReLU}之前,大多数神经网络使用\gls{logistic_sigmoid}激活函数 \begin{equation} g(z) = \sigma(z) \end{equation} @@ -885,21 +887,21 @@ \subsection{Logistic Sigmoid与双曲正切函数} \end{equation} 这些激活函数紧密相关,因为$\text{tanh}(z)=2\sigma(2z)-1$。 -我们已经看过sigmoid单元作为输出单元用来预测二元变量取值为1的概率。 -与分段线性单元不同,sigmoid单元在其大部分定义域内都饱和——当$z$取绝对值很大的正值时,它们饱和到一个高值,当$z$取绝对值很大的负值时,它们饱和到一个低值,并且仅仅当$z$接近0时它们才对输入强烈敏感。 -sigmoid单元的广泛饱和性会使得基于梯度的学习变得非常困难。 +我们已经看过\gls{sigmoid}单元作为输出单元用来预测二值型变量取值为1的概率。 +与分段线性单元不同,\gls{sigmoid}单元在其大部分定义域内都饱和——当$z$取绝对值很大的正值时,它们饱和到一个高值,当$z$取绝对值很大的负值时,它们饱和到一个低值,并且仅仅当$z$接近0时它们才对输入强烈敏感。 +\gls{sigmoid}单元的广泛饱和性会使得基于梯度的学习变得非常困难。 因为这个原因,现在不鼓励将它们用作前馈网络中的\gls{hidden_unit}。 -它们作为输出单元可以与基于梯度的学习相兼容,如果使用了一个合适的代价函数来抵消sigmoid的饱和性的话。 +它们作为输出单元可以与基于梯度的学习相兼容,如果使用了一个合适的代价函数来抵消\gls{sigmoid}的饱和性的话。 -当必须要使用sigmoid激活函数时,双曲正切激活函数通常要比logistic sigmoid函数表现更好。 +当必须要使用\gls{sigmoid}激活函数时,双曲正切激活函数通常要比\gls{logistic_sigmoid}函数表现更好。 在$\text{tanh}(0)=0$而$\sigma(0)=\frac{1}{2}$的意义上,它更像是单位函数。 因为$\text{tanh}$在0附近与单位函数类似,训练深层神经网络$\hat{y}=\bm{w}^\top \text{tanh}(\bm{U}^\top \text{tanh}(\bm{V}^\top \bm{x}))$类似于训练一个线性模型$\hat{y}= \bm{w}^\top \bm{U}^\top \bm{V}^\top \bm{x}$,只要网络的激活能够被保持地很小。 这使得训练$\text{tanh}$网络更加容易。 % -- 189 -- -sigmoid激活函数在除了\gls{feedforward_network}以外的配置中更为常见。 -循环网络、许多概率模型以及一些自动编码器有一些额外的要求使得它们不能使用分段线性激活函数,并且使得sigmoid单元更具有吸引力,尽管它存在饱和性的问题。 +\gls{sigmoid}激活函数在除了\gls{feedforward_network}以外的配置中更为常见。 +循环网络、许多概率模型以及一些自动编码器有一些额外的要求使得它们不能使用分段线性激活函数,并且使得\gls{sigmoid}单元更具有吸引力,尽管它存在饱和性的问题。 \subsection{其他\gls{hidden_unit}} \label{sec:other_hidden_units} @@ -947,10 +949,10 @@ \subsection{其他\gls{hidden_unit}} \item \textbf{\gls{softplus}}函数:$g(a)=\zeta(a)=\log(1+e^a)$。 这是\gls{ReLU}的平滑版本,由\cite{Dugas01}引入用于函数近似,由\cite{Nair-2010-small}引入用于无向概率模型的条件分布。 \cite{Glorot+al-AI-2011-small}比较了softplus和\gls{ReLU},发现后者的结果更好。 -通常不鼓励使用softplus函数。 +通常不鼓励使用\gls{softplus_function}。 softplus表明\gls{hidden_unit}类型的性能可能是非常反直觉的——因为它处处可导或者因为它不完全饱和,人们可能希望它具有优于\gls{ReLU}的点,但根据经验来看,它并没有。 -\item \firstgls{hard_tanh}:它的形状和$\text{tanh}$以及修正先行单元类似,但是不同于后者,它是有界的,$g(a)=\max(-1, \min(1,a))$。 +\item \firstgls{hard_tanh}:它的形状和$\text{tanh}$以及\gls{ReLU}类似,但是不同于后者,它是有界的,$g(a)=\max(-1, \min(1,a))$。 它由\cite{Collobert04}引入。 \end{itemize} @@ -990,7 +992,7 @@ \subsection{通用近似性质和深度} 乍一看,我们可能认为学习非线性函数需要为我们想要学习的那种非线性专门设计一类模型族。 幸运的是,具有\gls{hidden_layer}的\gls{feedforward_network}提供了一种通用近似框架。 -具体来说,\firstgls{universal_approximation_theorem}\citep{Hornik89,Cybenko89}表明,一个\gls{feedforward_neural_network}如果具有线性输出层和至少一层具有任何一种``挤压''性质的激活函数(例如logistic sigmoid激活函数)的\gls{hidden_layer},只要给予网络足够数量的\gls{hidden_unit},它可以以任意的精度来近似任何从一个有限维空间到另一个有限维空间的Borel可测函数。 +具体来说,\firstgls{universal_approximation_theorem}\citep{Hornik89,Cybenko89}表明,一个\gls{feedforward_neural_network}如果具有线性输出层和至少一层具有任何一种``挤压''性质的激活函数(例如\gls{logistic_sigmoid}激活函数)的\gls{hidden_layer},只要给予网络足够数量的\gls{hidden_unit},它可以以任意的精度来近似任何从一个有限维空间到另一个有限维空间的Borel可测函数。 \gls{feedforward_network}的导数也可以任意好地来近似函数的导数\citep{hornik1990universal}。 Borel可测的概念超出了本书的范畴;对于我们想要实现的目标,只需要知道定义在$\SetR^n$的有界闭集上的任意连续函数是Borel可测的,因此可以用神经网络来近似。 神经网络也可以近似从任何有限维离散空间映射到另一个的任意函数。 @@ -1025,8 +1027,8 @@ \subsection{通用近似性质和深度} 许多现代神经网络使用\gls{ReLU}。 \cite{Leshno-et-al-1993}证明带有一大类非多项式激活函数族的浅层网络,包括\gls{ReLU},具有通用的近似性质,但是这些结果并没有强调深度或效率的问题——它们仅指出足够宽的\gls{rectifier_network}能够表示任意函数。 \cite{Montufar-et-al-NIPS2014}指出一些用深度\gls{rectifier_network}表示的函数可能需要浅层网络(一个\gls{hidden_layer})指数级的\gls{hidden_unit}才能表示。 -更确切的说,他们说明分段线性网络(可以通过修正非线性或maxout单元获得)可以表示区域的数量是网络深度的指数级的函数。 -图\ref{fig:chap6_space_folding}解释了带有绝对值修正的网络是如何创建函数的镜像图像的,这些函数在某些\gls{hidden_unit}的顶部计算,作用于\gls{hidden_unit}的输入。 +更确切的说,他们说明分段线性网络(可以通过整流非线性或\gls{maxout_unit}获得)可以表示区域的数量是网络深度的指数级的函数。%这里为什么是非线性? +图\ref{fig:chap6_space_folding}解释了带有\gls{absolute_value_rectification}的网络是如何创建函数的镜像图像的,这些函数在某些\gls{hidden_unit}的顶部计算,作用于\gls{hidden_unit}的输入。 每个\gls{hidden_unit}指定在哪里折叠输入空间,来创造镜像响应(在绝对值非线性的两侧)。 通过组合这些折叠操作,我们获得指数级的分段线性区域,他们可以概括所有种类的规则模式(例如,重复)。 % fig 6.5 @@ -1649,14 +1651,14 @@ \subsection{实例:用于MLP训练的BP} 为了简化表示,我们在这个模型中不使用偏置。 假设我们的图语言包含\verb|relu|操作,该操作可以对$\max\{0,\bm{Z}\}$表达式的每个元素分别进行计算。 类的非归一化对数概率的预测将随后由$\bm{H}\bm{W}^{(2)}$ 给出。 -假设我们的图语言包含\verb|cross_entropy|操作,用以计算目标$\bm{y}$和由这些未归一化对数概率定义的概率分布间的交叉熵。 -所得到的交叉熵定义了代价函数$J_\text{MLE}$。最小化这个交叉熵将执行对分类器的最大似然估计。 +假设我们的图语言包含\verb|cross_entropy|操作,用以计算目标$\bm{y}$和由这些未归一化对数概率定义的概率分布间的\gls{cross_entropy}。 +所得到的\gls{cross_entropy}定义了代价函数$J_\text{MLE}$。最小化这个\gls{cross_entropy}将执行对分类器的最大似然估计。 然而,为了使得这个例子更加真实,我们也包含一个正则项。 总的代价函数为 \begin{equation} J = J_{\text{MLE}} + \lambda \left ( \sum_{i, j} \left (W_{i, j}^{(1)} \right )^2 + \sum_{i, j} \left (W_{i, j}^{(2)} \right)^2 \right ) \end{equation} -包含了交叉熵和系数为$\lambda$的权重衰减项。 +包含了\gls{cross_entropy}和系数为$\lambda$的权重衰减项。 它的计算图在图\ref{fig:chap6_mlp_example}中给出。 % fig 6.11 \begin{figure}[!htb] @@ -1674,12 +1676,12 @@ \subsection{实例:用于MLP训练的BP} 我们可以通过观察图\ref{fig:chap6_mlp_example}中的正向传播图来粗略地描述反向传播算法的行为。 为了训练,我们希望计算$\nabla_{\bm{W}^{(1)}} J$和$\nabla_{\bm{W}^{(2)}} J$。 -有两种不同的路径从$J$后退到权重:一条通过交叉熵成本,另一条通过权重衰减成本。 +有两种不同的路径从$J$后退到权重:一条通过\gls{cross_entropy}成本,另一条通过权重衰减成本。 权重衰减成本相对简单,它总是对$\bm{W}^{(i)}$上的梯度贡献$2\lambda \bm{W}^{(i)}$。 % -- 212 -- -另一条通过交叉熵成本的路径稍微复杂一些。 +另一条通过\gls{cross_entropy}成本的路径稍微复杂一些。 令$\bm{G}$是由\verb|cross_entropy|操作提供的对未归一化对数概率$\bm{U}^{(2)}$的梯度。 反向传播算法现在需要探索两个不同的分支。 在较短的分支上,它使用对矩阵乘法的第二个变量的反向传播规则,将$\bm{H}^\top \bm{G}$加到$\bm{W}^{(2)}$的梯度上。 @@ -1738,7 +1740,7 @@ \subsection{深度学习界以外的微分} \begin{equation} q_i = \frac{\exp(z_i)}{\sum_i \exp(z_i)}, \end{equation} -其中我们通过指数化、求和与除法运算构建softmax函数,并构造交叉熵损失函数$J=-\sum_i p_i\log q_i$。 +其中我们通过指数化、求和与除法运算构建softmax函数,并构造\gls{cross_entropy}损失函数$J=-\sum_i p_i\log q_i$。 人类数学家可以观察到$J$对$z_i$的导数采用了非常简单的形式:$p_iq_i-p_i$。 反向传播算法不能够以这种方式来简化梯度,而是会通过原始图中的所有对数和指数操作显示地传播梯度。 一些软件库如Theano\citep{bergstra+al:2010-scipy-small,Bastien-Theano-2012}能够执行某些种类的代数替换来改进由纯反向传播算法提出的图。 @@ -1840,19 +1842,19 @@ \section{历史小记} % -- 218 -- -其中一个算法上的变化是用损失函数的交叉熵族替代均方误差。 -均方误差在20世纪80年代和90年代流行,但逐渐被交叉熵损失替代,并且最大似然原理的想法在统计学界和机器学习界之间广泛传播。 -使用交叉熵损失大大提高了具有sigmoid和softmax输出的模型的性能,而当使用均方误差损失时会存在饱和和学习缓慢的问题。 - -另一个显著改善\gls{feedforward_network}性能的算法上的主要变化是使用分段线性\gls{hidden_unit}来替代sigmoid\gls{hidden_unit},例如用\gls{ReLU}。 -使用$\max\{0, z\}$函数的修正在早期神经网络中已经被引入,并且至少可以追溯到认知机(Cognitron)和神经认知机(Neocognitron)\citep{Fukushima75,Fukushima80}。 -这些早期的模型没有使用\gls{ReLU},而是将修正用于非线性函数。 -尽管修正在早期很普及,在20世纪80年代,修正很大程度上被sigmoid所取代,也许是因为当神经网络非常小时,sigmoid表现更好。 +其中一个算法上的变化是用损失函数的\gls{cross_entropy}族替代\gls{mean_squared_error}。 +\gls{mean_squared_error}在20世纪80年代和90年代流行,但逐渐被\gls{cross_entropy}损失替代,并且最大似然原理的想法在统计学界和机器学习界之间广泛传播。 +使用\gls{cross_entropy}损失大大提高了具有\gls{sigmoid}和softmax输出的模型的性能,而当使用\gls{mean_squared_error}损失时会存在饱和和学习缓慢的问题。 + +另一个显著改善\gls{feedforward_network}性能的算法上的主要变化是使用分段线性\gls{hidden_unit}来替代\gls{sigmoid}\gls{hidden_unit},例如用\gls{ReLU}。 +使用$\max\{0, z\}$函数的整流在早期神经网络中已经被引入,并且至少可以追溯到认知机(Cognitron)和神经认知机(Neocognitron)\citep{Fukushima75,Fukushima80}。 +这些早期的模型没有使用\gls{ReLU},而是将整流用于非线性函数。 +尽管整流在早期很普及,在20世纪80年代,整流很大程度上被\gls{sigmoid}所取代,也许是因为当神经网络非常小时,\gls{sigmoid}表现更好。 到21世纪初,由于有些迷信的观念,相信必须避免具有不可导点的激活函数,所以避免了\gls{ReLU}。 这在2009年开始发生改变。 -\cite{Jarrett-ICCV2009-small}观察到,在神经网络结构设计的几个不同因素中``使用修正非线性是提高识别系统性能的最重要的唯一因素''。 +\cite{Jarrett-ICCV2009-small}观察到,在神经网络结构设计的几个不同因素中``使用整流非线性是提高识别系统性能的最重要的唯一因素''。 -对于小的数据集,\cite{Jarrett-ICCV2009-small}观察到,使用修正非线性甚至比学习\gls{hidden_layer}的权重值更加重要。 +对于小的数据集,\cite{Jarrett-ICCV2009-small}观察到,使用整流非线性甚至比学习\gls{hidden_layer}的权重值更加重要。 随机的权重足以通过\gls{rectifier_network}传播有用的信息,允许在顶部的分类器层学习如何将不同的特征向量映射到类标识。 当有更多数据可用时,学习开始提取足够的有用知识来超越随机选择参数的性能。 @@ -1860,9 +1862,9 @@ \section{历史小记} \gls{ReLU}还具有历史意义,因为它们表明神经科学继续对深度学习算法的发展产生影响。 \cite{Glorot+al-AI-2011-small}从生物学考虑\gls{ReLU}的导出。 -半修正非线性旨在描述生物神经元的这些性质:1)对于某些输入,生物神经元是完全不活跃的。 -2)对于某些输入,生物神经元的输出和它的输入成比例。 -3)大多数时间,生物神经元是在它们不活跃的状态下进行操作(即它们应该具有\firstgls{sparse_activation})。 +半整流非线性旨在描述生物神经元的这些性质:(1) 对于某些输入,生物神经元是完全不活跃的。 +(2) 对于某些输入,生物神经元的输出和它的输入成比例。 +(3) 大多数时间,生物神经元是在它们不活跃的状态下进行操作(即它们应该具有\firstgls{sparse_activation})。 % -- 219 -- diff --git a/terminology.tex b/terminology.tex index e3c99db..5a38783 100644 --- a/terminology.tex +++ b/terminology.tex @@ -2405,6 +2405,13 @@ sort={Bernoulli distribution}, } +\newglossaryentry{bernoulli_output_distribution} +{ + name=Bernoulli输出分布, + description={Bernoulli output distribution}, + sort={Bernoulli output distribution}, +} + \newglossaryentry{multinoulli_distribution} { name=multinoulli分布, @@ -2412,6 +2419,13 @@ sort={multinoulli distribution}, } +\newglossaryentry{multinoulli_output_distribution} +{ + name=multinoulli输出分布, + description={multinoulli output distribution}, + sort={multinoulli output distribution}, +} + \newglossaryentry{categorical_distribution} { name=分类分布, @@ -3229,6 +3243,13 @@ sort={activation function}, } +\newglossaryentry{gaussian_output_distribution} +{ + name=高斯输出分布, + description={Gaussian output distribution}, + sort={Gaussian output distribution}, +} + \newglossaryentry{back_propagation} { name=反向传播,