From 650df88f8b0d7a80d6a1a97e8a2cd7e585458bbc Mon Sep 17 00:00:00 2001 From: KevinLee1992 Date: Fri, 9 Dec 2016 16:13:50 +0800 Subject: [PATCH] correct formula in chap3 and chap6 Former-commit-id: b69418fd53575535187a906a2c457904f83f5678 Former-commit-id: bdbf525f8c44721fcaf8cf1c743305c1af69dbc0 --- .../probability_and_information_theory.tex | 50 ++++---- Chapter6/deep_feedforward_networks.tex | 108 +++++++++++------- 2 files changed, 89 insertions(+), 69 deletions(-) diff --git a/Chapter3/probability_and_information_theory.tex b/Chapter3/probability_and_information_theory.tex index b14fa63..a0d9577 100644 --- a/Chapter3/probability_and_information_theory.tex +++ b/Chapter3/probability_and_information_theory.tex @@ -199,10 +199,10 @@ \section{\gls{conditional_probability}} 在很多情况下,我们感兴趣的是某个事件,在给定其他事件发生时,出现的概率。 这种概率叫做\gls{conditional_probability}。 -我们将给定$\RSx = x$时$\RSy = y$发生的\gls{conditional_probability}记为$P(\RSy = y| \RSx =x)$。 +我们将给定$\RSx = x$时$\RSy = y$发生的\gls{conditional_probability}记为$P(\RSy = y\mid \RSx =x)$。 这个\gls{conditional_probability}可以通过下面的公式计算: \begin{equation} -P(\RSy = y| \RSx = x) = \frac{P(\RSy = y, \RSx = x)}{P(\RSx = x)} +P(\RSy = y\mid \RSx = x) = \frac{P(\RSy = y, \RSx = x)}{P(\RSx = x)} \label{eq: 3.5} \end{equation} \gls{conditional_probability}只在$P(\RSx = x)>0$时有定义。 @@ -218,7 +218,7 @@ \section{\gls{conditional_probability}的\gls{chain_rule}} 任何多维\gls{RV}的\gls{joint_probability_distribution},都可以分解成只有一个变量的\gls{conditional_probability}相乘的形式: \begin{equation} -P(\RSx^{(1)}, \ldots, \RSx^{(n)}) = P(\RSx^{(1)}) \Pi_{i=2}^n P(\RSx^{(i)} | \RSx^{(1)}, \ldots, \RSx^{(i-1)}) +P(\RSx^{(1)}, \ldots, \RSx^{(n)}) = P(\RSx^{(1)}) \Pi_{i=2}^n P(\RSx^{(i)} \mid \RSx^{(1)}, \ldots, \RSx^{(i-1)}) \end{equation} % -- 57 -- @@ -227,9 +227,9 @@ \section{\gls{conditional_probability}的\gls{chain_rule}} 它可以直接从公式\ref{eq: 3.5}\gls{conditional_probability}的定义中得到。 例如,使用两次定义可以得到 \begin{eqnarray*} -P(\RSa, \RSb, \RSc) &=& P(\RSa | \RSb, \RSc) P(\RSb, \RSc)\\ -P(\RSb, \RSc) &=& P(\RSb | \RSc) P(\RSc)\\ -P(\RSa, \RSb, \RSc) &=& P(\RSa | \RSb, \RSc) P(\RSb | \RSc) P(\RSc). +P(\RSa, \RSb, \RSc) &=& P(\RSa \mid \RSb, \RSc) P(\RSb, \RSc)\\ +P(\RSb, \RSc) &=& P(\RSb \mid \RSc) P(\RSc)\\ +P(\RSa, \RSb, \RSc) &=& P(\RSa \mid \RSb, \RSc) P(\RSb \mid \RSc) P(\RSc). \end{eqnarray*} \section{独立性和条件独立性} @@ -242,11 +242,11 @@ \section{独立性和条件独立性} 两个\gls{RV}$\RSx$和$\RSy$在给定\gls{RV}$z$是\firstgls{conditionally_independent},如果关于$\RSx$和$\RSy$的\gls{conditional_probability}分布对于$z$的每一个值都可以写成乘积的形式: \begin{equation} -\forall x \in \RSx, y \in \RSy, z \in \RSz, p( \RSx=x, \RSy=y | \RSz=z) = -p(\RSx = x | \RSz = z) p(\RSy = y | \RSz = z). +\forall x \in \RSx, y \in \RSy, z \in \RSz, p( \RSx=x, \RSy=y \mid \RSz=z) = +p(\RSx = x \mid \RSz = z) p(\RSy = y \mid \RSz = z). \end{equation} -我们可以采用一种简化形式来表示独立性和条件独立性:$\RSx \bot \RSy$表示$\RSx$和$\RSy$相互独立,$\RSx \bot \RSy | \RSz$表示$\RSx$和$\RSy$在给定$\RSz$时条件独立。 +我们可以采用一种简化形式来表示独立性和条件独立性:$\RSx \bot \RSy$表示$\RSx$和$\RSy$相互独立,$\RSx \bot \RSy \mid \RSz$表示$\RSx$和$\RSy$在给定$\RSz$时条件独立。 \section{\gls{expectation},\gls{variance}和\gls{covariance}} \label{sec:expectation_variance_and_covariance} @@ -429,7 +429,7 @@ \subsection{\gls{exponential_distribution}和\gls{laplace_distribution}} 一个非常相关的\gls{PD}是\firstgls{laplace_distribution},它允许我们在任意一点$\mu$处设置\gls{PD}的峰值 \begin{equation} -\text{Laplace}(x; \mu, \gamma) = \frac{1}{2\gamma} \exp \left( -\frac{|x-\mu|}{\gamma} \right) +\text{Laplace}(x; \mu, \gamma) = \frac{1}{2\gamma} \exp \left( -\frac{|x-\mu|}{\gamma} \right). \end{equation} \subsection{\gls{dirac_distribution}和\gls{empirical_distribution}} @@ -467,7 +467,7 @@ \subsection{分布的混合} 混合分布由一些组件(component)分布构成。 每次实验,样本是由哪个组件分布产生的取决于从一个\gls{multinoulli_distribution}中采样的结果: \begin{equation} -P(\RSx) = \sum_i P(\RSc = i) P(\RSx | \RSc = i) +P(\RSx) = \sum_i P(\RSc = i) P(\RSx \mid \RSc = i), \end{equation} 这里$P(\RSc)$是对各组件的一个\gls{multinoulli_distribution}。 @@ -481,11 +481,11 @@ \subsection{分布的混合} 混合模型使我们能够一瞥以后会用到的一个非常重要的概念——\firstgls{latent_variable}。 \gls{latent_variable}是我们不能直接观测到的\gls{RV}。 混合模型的组件变量$\RSc$就是其中一个例子。 -\gls{latent_variable}在联合分布中可能和$\RSx$有关,在这种情况下,$P(\RSx, \RSc) = P(\RSx | \RSc)P(\RSc)$。 -\gls{latent_variable}的分布$P(\RSc)$以及关联\gls{latent_variable}和观测变量的条件分布$P(\RSx |\RSc)$,共同决定了分布$P(\RSx)$的形状,尽管描述$P(\RSx)$时可能并不需要\gls{latent_variable}。 +\gls{latent_variable}在联合分布中可能和$\RSx$有关,在这种情况下,$P(\RSx, \RSc) = P(\RSx \mid \RSc)P(\RSc)$。 +\gls{latent_variable}的分布$P(\RSc)$以及关联\gls{latent_variable}和观测变量的条件分布$P(\RSx \mid\RSc)$,共同决定了分布$P(\RSx)$的形状,尽管描述$P(\RSx)$时可能并不需要\gls{latent_variable}。 \gls{latent_variable}会在\ref{sec:learning_about_dependencies}一节中深入讨论。 -一个非常强大且常见的混合模型是\firstgls{GMM},它的组件$p(\RSx | \RSc= i)$是\gls{gaussian_distribution}。 +一个非常强大且常见的混合模型是\firstgls{GMM},它的组件$p(\RSx \mid \RSc= i)$是\gls{gaussian_distribution}。 每个组件都有各自的参数,均值$\bm{\mu}^{(i)}$和\gls{covariance_matrix}$\bm{\Sigma}^{(i)}$。 有一些混合可以有更多的限制。 例如,\gls{covariance_matrix}可以通过$\bm{\Sigma}^{(i)} = \bm{\Sigma}, \forall i$的形式在组件之间共享参数。 @@ -493,7 +493,7 @@ \subsection{分布的混合} 除了均值和\gls{covariance}以外,\gls{GMM}的参数指明了给每个组件$i$的\firstgls{prior_probability}$\alpha_i = P(\RSc = i)$。 ``先验''一词表明了在观测到$\RSx$\emph{之前}传递给模型关于$\RSc$的信念。 -作为对比,$P(\RSc | \bm{x})$是\firstgls{posterior_probability},因为它是在观测到$\RSx$\emph{之后}进行计算的。 +作为对比,$P(\RSc \mid \bm{x})$是\firstgls{posterior_probability},因为它是在观测到$\RSx$\emph{之后}进行计算的。 \gls{GMM}是概率密度的\firstgls{universal_approximator},在这种意义上,任何平滑的概率密度都可以用具有足够多组件的\gls{GMM}以任意精度来逼近。 图\ref{fig:chap3_mog_color}演示了某个\gls{GMM}生成的样例。 @@ -534,7 +534,7 @@ \section{常用函数的一些性质} 另外一个经常遇到的函数是\firstgls{softplus_function}\citep{secondorder:2001:nips}: \begin{equation} -\zeta(x) = \log(1+\exp(x)) +\zeta(x) = \log(1+\exp(x)). \end{equation} \gls{softplus_function}可以用来产生\gls{normal_distribution}的$\beta$和$\sigma$参数,因为它的范围是$(0,\infty)$。 当处理包含sigmoid函数的表达式时它也经常出现。 @@ -582,12 +582,12 @@ \section{常用函数的一些性质} \section{\gls{bayes_rule}} \label{sec:bayes_rule} -我们经常会需要在已知$P(\RSy | \RSx)$时计算$P(\RSx | \RSy)$。 +我们经常会需要在已知$P(\RSy \mid \RSx)$时计算$P(\RSx \mid \RSy)$。 幸运的是,如果还知道$P(\RSx)$,我们可以用\firstgls{bayes_rule}来实现这一目的: \begin{equation} -P(\RSx | \RSy) = \frac{P(\RSx) P(\RSy | \RSx)}{P(\RSy)}. +P(\RSx \mid \RSy) = \frac{P(\RSx) P(\RSy \mid \RSx)}{P(\RSy)}. \end{equation} -注意到$P(\RSy)$出现在上面的公式中,它通常使用$P(\RSy) = \sum_x P(\RSy | x) P(x)$来计算,所以我们并不需要事先知道$P(\RSy)$的信息。 +注意到$P(\RSy)$出现在上面的公式中,它通常使用$P(\RSy) = \sum_x P(\RSy \mid x) P(x)$来计算,所以我们并不需要事先知道$P(\RSy)$的信息。 \gls{bayes_rule}可以从\gls{conditional_probability}的定义直接推导得出,但我们最好记住这个公式的名字,因为很多文献通过名字来引用这个公式。 这个公式是以Reverend Thomas Bayes来命名的,他是第一个发现这个公式的特例的人。 @@ -691,7 +691,7 @@ \section{信息论} 为了满足上述三个性质,我们定义一个事件$\RSx = x$的\firstgls{self_information}为 \begin{equation} -I(x) = -\log P(x) +I(x) = -\log P(x). \end{equation} 在本书中,我们总是用$\log$来表示自然对数,底数为$e$。 因此我们定义的$I(x)$单位是\firstgls{nats}。 @@ -704,7 +704,7 @@ \section{信息论} \gls{self_information}只处理单个的输出。 我们可以用\firstgls{Shannon_entropy}来对整个\gls{PD}中的不确定性总量进行量化: \begin{equation} -H(\RSx) = \SetE_{\RSx \sim P}[I(x)] = -\SetE_{\RSx \sim P}[\log P(x)]. +H(\RSx) = \SetE_{\RSx \sim P}[I(x)] = -\SetE_{\RSx \sim P}[\log P(x)], \end{equation} 也记作$H(P)$。 换言之,一个分布的\gls{Shannon_entropy}是指遵循这个分布的事件所产生的期望信息总量。 @@ -773,7 +773,7 @@ \section{\gls{structured_probabilistic_models}} 例如,假设我们有三个\gls{RV}$\RSa, \RSb$和$\RSc$,并且$\RSa$影响$\RSb$的取值,$\RSb$影响$\RSc$的取值,但是$\RSa$和$\RSc$在给定$\RSb$时是条件独立的。 我们可以把全部三个变量的\gls{PD}重新表示为两个变量的\gls{PD}的连乘形式: \begin{equation} -p(\RSa, \RSb, \RSc) = p(\RSa)p(\RSb| \RSa)p(\RSc|\RSb). +p(\RSa, \RSb, \RSc) = p(\RSa)p(\RSb\mid \RSa)p(\RSc\mid\RSb). \end{equation} 这种因子分解可以极大地减少用来描述一个分布的参数的数量。 @@ -790,7 +790,7 @@ \section{\gls{structured_probabilistic_models}} \firstgls{directed}模型使用带有有向边的图,它们用\gls{conditional_probability}分布来表示因子分解,就像上面的例子。 特别地,有向模型对于分布中的每一个\gls{RV}$\RSx_i$都包含着一个影响因子,这个组成$\RSx_i$\gls{conditional_probability}的影响因子被称为$\RSx_i$的双亲,记为$Pa_\CalG(\RSx_i)$: \begin{equation} -p(\RVx) = \prod_i p(\RSx_i | Pa_\CalG(\RSx_i)). +p(\RVx) = \prod_i p(\RSx_i \mid Pa_\CalG(\RSx_i)). \end{equation} 图\ref{fig:chap3_directed}给出了一个有向图的例子以及它表示的\gls{PD}的因子分解。 \begin{figure}[!htb] @@ -837,9 +837,9 @@ \section{\gls{structured_probabilistic_models}} 它们不是互相排斥的\gls{PD}族。 有向或者无向不是\gls{PD}的特性;它是\gls{PD}的一种特殊\firstgls{description}所具有的特性,但是任何的\gls{PD}都可以用两种方式进行描述。 -在本书第|||c|||部分和第|||c|||部分中, 我们使用\gls{structured_probabilistic_models}仅仅是作为一门语言,来描述不同的机器学习算法选择表示的直接的概率关系。 +在本书第\ref{part:applied_math_and_machine_learning_basics}部分和第\ref{part:deep_networks_modern_practices}部分中, 我们使用\gls{structured_probabilistic_models}仅仅是作为一门语言,来描述不同的机器学习算法选择表示的直接的概率关系。 一直到研究课题的讨论之前,不会需要用到\gls{structured_probabilistic_models}的深入理解。 -在第|||c|||部分的研究课题中,我们会更为详尽地探讨\gls{structured_probabilistic_models}。 +在第\ref{part:deep_learning_research}部分的研究课题中,我们会更为详尽地探讨\gls{structured_probabilistic_models}。 本章复习了概率论中与深度学习最为相关的一些基本概念。 还剩下一些基本的数学工具需要讨论:数值方法。 diff --git a/Chapter6/deep_feedforward_networks.tex b/Chapter6/deep_feedforward_networks.tex index 50de93e..a68a234 100644 --- a/Chapter6/deep_feedforward_networks.tex +++ b/Chapter6/deep_feedforward_networks.tex @@ -132,6 +132,7 @@ \section{实例:学习XOR} 为什么会发生这种事? 图\ref{fig:chap6_xor_space_gray}演示了线性模型为什么不能用来表示XOR函数。 解决这个问题的其中一种方法是使用一个模型来学习一个不同的特征空间,在这个空间上线性模型能够表示这个解。 +% fig 6.1 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} @@ -150,6 +151,7 @@ \section{实例:学习XOR} 第二层就是这个网络的输出层。 输出层仍然只是一个线性回归模型,只不过现在它作用于$\bm{h}$而不是$\bm{x}$。 网络现在包含链接在一起的两个函数:$\bm{h}=f^{(1)}(\bm{x}; \bm{W}, \bm{c})$和$y = f^{(2)}(\bm{h}; \bm{w}, b)$,完整的模型是$f(\bm{x}; \bm{W}, \bm{c}, \bm{w}, b) = f^{(2)}(f^{(1)}(\bm{x}))$。 +% fig 6.2 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} @@ -175,6 +177,7 @@ \section{实例:学习XOR} 现在,因为我们描述的是向量$\bm{x}$到向量$\bm{h}$的仿射变换,所以我们需要一整个向量的偏置参数。 激活函数$g$通常选择一个对每个元素分别智能作用的函数,有$h_i =g(\bm{x}^\top \bm{W}_{:, i} + c_i)$。 在现代神经网络中,默认的推荐是使用由激活函数$g(z)=\max\{0, x\}$定义的\firstgls{ReLU}或者称为\glssymbol{ReLU}\citep{Jarrett-ICCV2009-small,Nair-2010-small,Glorot+al-AI-2011-small},如图\ref{fig:chap6_relu_color}所示。 +% fig 6.3 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} @@ -309,7 +312,7 @@ \subsection{代价函数} 深度神经网络设计中的一个重要方面是代价函数的选择。 幸运的是,神经网络的代价函数或多或少是和其他参数模型例如线性模型的代价函数相同的。 -在大多数情况下, 我们的参数模型定义了一个分布$p(\bm{y}|\bm{x};\bm{\theta})$并且我们简单地使用最大似然原理。 +在大多数情况下, 我们的参数模型定义了一个分布$p(\bm{y}\mid\bm{x};\bm{\theta})$并且我们简单地使用最大似然原理。 这意味着我们使用训练数据和模型预测间的交叉熵作为代价函数。 有时,我们使用一个更简单的方法,不是预测$\bm{y}$的完整概率分布,而是仅仅预测在给定$\bm{x}$的条件下$\bm{y}$的某种统计量。 @@ -329,12 +332,12 @@ \subsubsection{用最大似然学习条件分布} 这意味着代价函数就是负的对数似然,它与训练数据和模型分布间的交叉熵等价。 这个代价函数表示为 \begin{equation} -J(\bm{\theta}) = -\SetE_{\mathbf{x}, \mathbf{y} \sim \hat{p}_\text{data}} \log p_\text{model} (\bm{y} \vert \bm{x}). +J(\bm{\theta}) = -\SetE_{\mathbf{x}, \mathbf{y} \sim \hat{p}_\text{data}} \log p_\text{model} (\bm{y} \mid \bm{x}). \end{equation} 代价函数的具体形式随着模型而改变,取决于$\log p_\text{model}$的具体形式。 上述方程的展开形式通常会有一些项不依赖于模型的参数,我们可以舍去。 -例如,正如我们在\ref{sec:the_task_t}节中看到的,如果$p_\text{model}(\bm{y}|\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})$,那么我们恢复均方误差代价, \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} @@ -343,7 +346,7 @@ \subsubsection{用最大似然学习条件分布} 先前,我们看到了对输出分布的最大似然估计和线性模型均方误差的最小化之间的等价性,但事实上,这种等价性并不要求$f(\bm{x}; \bm{\theta})$用于预测Gaussian分布的均值。 使用最大似然来导出代价函数的方法的一个优势是,它减轻了为每个模型设计代价函数的负担。 -明确一个模型$p(\bm{y}|\bm{x})$则自动地确定了一个代价函数$\log p(\bm{y}|\bm{x})$。 +明确一个模型$p(\bm{y}\mid\bm{x})$则自动地确定了一个代价函数$\log p(\bm{y}\mid\bm{x})$。 贯穿神经网络设计的一个反复出现的主题是代价函数的梯度必须足够的大和具有足够的预测性,来为学习算法提供一个好的指引。 饱和(变得非常平)的函数破坏了这一目标,因为它们把梯度变得非常小。 @@ -364,7 +367,7 @@ \subsubsection{用最大似然学习条件分布} \subsubsection{学习条件统计量} \label{sec:learning_conditional_statistics} -有时我们并不是想学习一个完整的概率分布$p(\bm{y}|\bm{x}; \bm{\theta})$,而仅仅是想学习在给定$\bm{x}$时$\bm{y}$的某个条件统计量。 +有时我们并不是想学习一个完整的概率分布$p(\bm{y}\mid\bm{x}; \bm{\theta})$,而仅仅是想学习在给定$\bm{x}$时$\bm{y}$的某个条件统计量。 例如,我们可能有一个预测器$f(\bm{x}; \bm{\theta})$,我们想用它来预测$\bm{y}$的均值。 如果我们使用一个足够强大的神经网络,我们可以认为这个神经网络能够表示一大类函数中的任何一个函数$f$,这个类仅仅被一些特征所限制,例如连续性和有界,而不是具有特殊的参数形式。 @@ -399,7 +402,7 @@ \subsubsection{学习条件统计量} 不幸的是,均方误差和平均绝对误差当使用基于梯度的优化方式时往往会导致糟糕的结果。 一些饱和的输出单元当结合这些代价函数时会产生非常小的梯度。 -这就是为什么交叉熵代价函数比均方误差或者平均绝对误差更受欢迎的原因之一了,即使是在没必要估计整个$p(\bm{y}|\bm{x})$分布时。 +这就是为什么交叉熵代价函数比均方误差或者平均绝对误差更受欢迎的原因之一了,即使是在没必要估计整个$p(\bm{y}\mid\bm{x})$分布时。 \subsection{输出单元} @@ -428,7 +431,7 @@ \subsubsection{用于Gaussian输出分布的线性单元} 线性输出层经常被用来产生条件Gaussian分布的均值: \begin{equation} -p(\bm{y}|\bm{x}) = \CalN(\bm{y}; \hat{\bm{y}}, \bm{I} ). +p(\bm{y}\mid\bm{x}) = \CalN(\bm{y}; \hat{\bm{y}}, \bm{I} ). \end{equation} 最大化对数似然此时等价于最小化均方误差。 @@ -447,13 +450,13 @@ \subsubsection{用于Bernoulli输出分布的sigmoid单元} 此时最大似然的方法是定义$y$在$\bm{x}$条件下的Bernoulli分布。 -Bernoulli分布仅需一个单独的数来定义,神经网络只需要预测$P(y =1|\bm{x})$即可。 +Bernoulli分布仅需一个单独的数来定义,神经网络只需要预测$P(y =1\mid\bm{x})$即可。 为了使这个数是有效的概率,它必须处在区间$[0, 1]$中。 满足这个限制需要一些细致的设计工作。 假设我们打算使用线性单元,并且通过阈值来限制它成为一个有效的概率: \begin{equation} -P(y=1 | \bm{x}) = \max \left \{ 0, \min \{1, \bm{w}^\top \bm{h}+b \} \right \}. +P(y=1 \mid \bm{x}) = \max \left \{ 0, \min \{1, \bm{w}^\top \bm{h}+b \} \right \}. \end{equation} 这的确定义了一个有效的条件概率分布,但我们并不能使用梯度下降来高效地训练它。 任何时候当$\bm{w}^\top \bm{h}+b$处于单位区间外时,模型的输出对它的参数的梯度都将为$\bm{0}$。 @@ -466,7 +469,7 @@ \subsubsection{用于Bernoulli输出分布的sigmoid单元} sigmoid输出单元定义为 \begin{equation} -\hat{y} = \sigma \left (\bm{w}^\top \bm{h} + b \right ) +\hat{y} = \sigma \left (\bm{w}^\top \bm{h} + b \right ), \end{equation} 这里$\sigma$是第\ref{sec:useful_properties_of_common_functions}节中介绍的logistic sigmoid函数。 @@ -480,9 +483,9 @@ \subsubsection{用于Bernoulli输出分布的sigmoid单元} 如果我们假定非标准化的对数概率对$y$ 和$z$是线性的,可以对它取指数来得到非标准化的概率。 我们然后对它归一化,可以发现这服从Bernoulli分布,它受$z$的sigmoid形式的变换控制: \begin{align} -\log \tilde{P}(y) &= yz\\ -\tilde{P}(y) &= \exp(yz)\\ -P(y) &= \frac{\exp(yz)}{\sum_{y' = 0}^1 \exp(y' z)}\\ +\log \tilde{P}(y) &= yz,\\ +\tilde{P}(y) &= \exp(yz),\\ +P(y) &= \frac{\exp(yz)}{\sum_{y' = 0}^1 \exp(y' z)},\\ P(y) &= \sigma((2y-1)z). \end{align} 基于指数和归一化的概率分布在统计建模的文献中很常见。 @@ -491,11 +494,11 @@ \subsubsection{用于Bernoulli输出分布的sigmoid单元} % -- 177 -- 这种在对数空间里预测概率的方法可以很自然地使用最大似然学习。 -因为用于最大似然的代价函数是$-\log P(y|\bm{x})$,代价函数中的log抵消了sigmoid中的exp。 +因为用于最大似然的代价函数是$-\log P(y\mid\bm{x})$,代价函数中的log抵消了sigmoid中的exp。 如果没有这个效果,sigmoid的饱和性会阻止基于梯度的学习做出好的改进。 我们使用最大似然来学习一个由sigmoid参数化的Bernoulli分布,它的损失函数为 \begin{align} -J(\bm{\theta}) &= -\log P(y|\bm{x})\\ +J(\bm{\theta}) &= -\log P(y\mid\bm{x})\\ &= -\log \sigma ((2y-1)z)\\ &= \zeta((1-2y)z). \end{align} @@ -530,23 +533,23 @@ \subsubsection{用于multinoulli输出分布的softmax单元} 在二元变量的情况下,我们希望计算一个单独的数 \begin{equation} -\hat{y} = P(y=1|\bm{x}). +\hat{y} = P(y=1\mid\bm{x}). \end{equation} -因为这个数需要处在0和1之间,并且我们想要让这个数的对数可以很好地用于对数似然的基于梯度的优化,我们选择去预测另外一个数$z=\log \hat{P}(y=1|\bm{x})$。 +因为这个数需要处在0和1之间,并且我们想要让这个数的对数可以很好地用于对数似然的基于梯度的优化,我们选择去预测另外一个数$z=\log \hat{P}(y=1\mid\bm{x})$。 对其指数化和归一化,我们就得到了一个由sigmoid函数控制的Bernoulli分布。 -为了推广到具有$n$个值的离散型变量的情况,我们现在需要创造一个向量$\hat{\bm{y}}$,它的每个元素是$\hat{y}_i = P(y=i|\bm{x})$。 +为了推广到具有$n$个值的离散型变量的情况,我们现在需要创造一个向量$\hat{\bm{y}}$,它的每个元素是$\hat{y}_i = P(y=i\mid\bm{x})$。 我们不仅要求每个$\hat{y}_i$元素介于0和1之间,还要使得整个向量的和为1使得它表示一个有效的概率分布。 用于Bernoulli分布的方法同样可以推广到multinoulli分布。 首先,线性层预测了非标准化的对数概率: \begin{equation} \bm{z} = \bm{W}^\top \bm{h}+\bm{b}, \end{equation} -其中$z_i=\log \hat{P}(y=i|\bm{x})$。 +其中$z_i=\log \hat{P}(y=i\mid\bm{x})$。 softmax函数然后可以对$z$指数化和归一化来获得需要的$\hat{\bm{y}}$。 最终,softmax函数的形式为 \begin{equation} -\text{softmax}(\bm{z})_i = \frac{\exp(z_i)}{\sum_i \exp(z_j)}. +\text{softmax}(\bm{z})_i = \frac{\exp(z_i)}{\sum_j \exp(z_j)}. \end{equation} 和logistic sigmoid一样,当使用最大化对数似然训练softmax来输出目标值$\RSy$时,使用指数函数工作地非常好。 @@ -611,7 +614,7 @@ \subsubsection{用于multinoulli输出分布的softmax单元} 因此,我们可以强制要求$\bm{z}$的一个元素是固定的。 例如,我们可以要求$z_n=0$。 事实上,这正是sigmoid单元所做的。 -定义$P(y=1|\bm{x})=\sigma(z)$等价于用二维的$\bm{z}$以及$z_1=0$来定义$P(y=1|\bm{x})=\text{softmax}(\bm{z})_1$。 +定义$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$个变量的方法,都描述了相同的概率分布,但会产生不同的学习机制。 在实践中,无论是过度参数化的版本还是限制的版本都很少有差别,并且实现过度参数化的版本更为简单。 @@ -635,7 +638,7 @@ \subsubsection{其他的输出类型} 神经网络可以推广到我们希望的几乎任何种类的输出层。 最大似然原则为如何为几乎任何种类的输出层设计一个好的代价函数提供了指导。 -一般的,如果我们定义了一个条件分布$p(\bm{y}|\bm{x}; \bm{\theta})$,最大似然原则建议我们使用$-\log p(\bm{y}| \bm{x};\bm{\theta})$作为代价函数。 +一般的,如果我们定义了一个条件分布$p(\bm{y}\mid\bm{x}; \bm{\theta})$,最大似然原则建议我们使用$-\log p(\bm{y}\mid \bm{x};\bm{\theta})$作为代价函数。 一般来说,我们可以认为神经网络表示函数$f(\bm{x};\bm{\theta})$。 这个函数的输出不是对$\bm{y}$值的直接预测。 @@ -644,7 +647,7 @@ \subsubsection{其他的输出类型} 例如,我们想要学习在给定$\RVx$时$\RVy$的条件Gaussian分布的方差。 简单情况下,方差$\sigma^2$是一个常数,此时有一个闭合的表达式,这是因为方差的最大似然估计量仅仅是观测值$\RVy$与它们的期望值的差值的平方平均。 -一种计算上更加昂贵但是不需要写特殊情况代码的方法是简单地将方差作为分布$p(\RVy|\bm{x})$的其中一个属性,这个分布受$\bm{\omega}=f(\bm{x};\bm{\theta})$控制。 +一种计算上更加昂贵但是不需要写特殊情况代码的方法是简单地将方差作为分布$p(\RVy\mid\bm{x})$的其中一个属性,这个分布受$\bm{\omega}=f(\bm{x};\bm{\theta})$控制。 负对数似然$-\log p(\bm{y};\bm{\omega}(\bm{x}))$将为代价函数提供一个必要的合适项来使我们的优化过程可以逐渐地学到方差。 在标准差不依赖于输入的简单情况下,我们可以在网络中创建一个直接复制到$\bm{\omega}$中的新参数。 这个新参数可以是$\sigma$本身,或者可以是表示$\sigma^2$的参数$v$,或者可以是表示$\frac{1}{\sigma^2}$的参数$\beta$,取决于我们怎样对分布参数化。 @@ -678,17 +681,17 @@ \subsubsection{其他的输出类型} % -- 183 -- -我们经常想要执行多模型回归,即预测条件分布$p(\bm{y}|\bm{x})$的实值,该条件分布对于相同的$\bm{x}$值在$\bm{y}$空间中有多个不同的峰值。 +我们经常想要执行多模型回归,即预测条件分布$p(\bm{y}\mid\bm{x})$的实值,该条件分布对于相同的$\bm{x}$值在$\bm{y}$空间中有多个不同的峰值。 在这种情况下,Gaussian混合是输出的自然表示\citep{Jacobs-nc91,bishop1994mixture}。 带有将Gaussian混合作为其输出的神经网络通常被称为\firstgls{mixture_density_network}。 具有$n$个分量的Gaussian混合输出由下面的条件分布定义 \begin{equation} -p(\bm{y}|\bm{x}) = \sum_{i=1}^n p(\RSc = i | \bm{x}) \CalN(\bm{y}; \bm{\mu}^{(i)}(\bm{x}), \bm{\Sigma}^{(i)}(\bm{x})). +p(\bm{y}\mid\bm{x}) = \sum_{i=1}^n p(\RSc = i \mid \bm{x}) \CalN(\bm{y}; \bm{\mu}^{(i)}(\bm{x}), \bm{\Sigma}^{(i)}(\bm{x})). \end{equation} -神经网络必须有三个输出:定义$p(\RSc=i|\bm{x})$的向量,对所有的$i$给出$\bm{\mu}^{(i)}(\bm{x})$的矩阵,以及对所有的$i$给出$\bm{\Sigma}^{(i)}(\bm{x})$的张量。 +神经网络必须有三个输出:定义$p(\RSc=i\mid\bm{x})$的向量,对所有的$i$给出$\bm{\mu}^{(i)}(\bm{x})$的矩阵,以及对所有的$i$给出$\bm{\Sigma}^{(i)}(\bm{x})$的张量。 这些输出必须满足不同的约束: \begin{enumerate} -\item 混合组件$p(\RSc=i|\bm{x})$:它们由隐变量 +\item 混合组件$p(\RSc=i\mid\bm{x})$:它们由隐变量 \footnote{我们认为$\RSc$是隐变量是因为我们不能直接在数据中观测到它:给定输入$\RVx$和目标$\RVy$,不可能确切地知道是哪个Gaussian组件产生$\RVy$,但我们可以想象$\RVy$是通过选择其中一个来产生的,并且将那个未被观测到的选择作为随机变量。} $\RSc$关联着,在$n$个不同组件上形成multinoulli分布。 这个分布通常可以由$n$维向量的softmax来获得,以确保这些输出是正的并且和为1。 @@ -712,6 +715,7 @@ \subsubsection{其他的输出类型} Gaussian混合输出在语音生成模型\citep{schuster1999supervised}和物理运动\citep{Graves-arxiv2013}中特别有效。 混合密度策略为网络提供了一种方法来表示多种输出模式,并且控制输出的方差,这对于在这些实数域中获得高质量的结果是至关重要的。 混合密度网络的一个实例如图\ref{fig:chap6_mdn_color}所示。 +% fig 6.4 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} @@ -784,7 +788,7 @@ \subsection{修正线性单元及其扩展} 修正线性单元通常用于仿射变换之上: \begin{equation} -\bm{h} = g(\bm{W}^\top \bm{x} + \bm{b}) +\bm{h} = g(\bm{W}^\top \bm{x} + \bm{b}). \end{equation} 当初始化仿射变换的参数时,可以将$\bm{b}$的所有元素设置成一个小的正值,例如0.1。 这使得修正线性单元很可能初始时就对训练集中的大多数输入呈现激活状态,并且允许导数通过。 @@ -931,11 +935,11 @@ \section{结构设计} 大多数神经网络结构将这些层布置成链式结构,其中每一层都是前一层的函数。 在这种结构中,第一层由下式给出: \begin{equation} -\bm{h}^{(1)}= g^{(1)}\left ( \bm{W}^{(1)\top} \bm{x} + \bm{b}^{(1)}\right ), +\bm{h}^{(1)}= g^{(1)}\left ( \bm{W}^{(1)\top} \bm{x} + \bm{b}^{(1)}\right ); \end{equation} 第二层由 \begin{equation} -\bm{h}^{(2)} = g^{(2)}\left ( \bm{W}^{(2)\top}\bm{h}^{(1)}+\bm{b}^{(2)} \right ), +\bm{h}^{(2)} = g^{(2)}\left ( \bm{W}^{(2)\top}\bm{h}^{(1)}+\bm{b}^{(2)} \right ); \end{equation} 给出,以此类推。 @@ -992,6 +996,7 @@ \subsection{通用近似性质和深度} 图\ref{fig:chap6_space_folding}对值修正的网络如何创建在某些隐含单元顶部计算的函数的镜像,相对于隐含单元的输入。 每个隐含单元指定在哪里折叠输入空间,来创造镜像响应(在绝对值非线性的两侧)。 通过组合这些折叠操作,我们获得指数级的分段线性区域,他们可以概括所有种类的规则模式(例如,重复)。 +% fig 6.5 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} @@ -1026,6 +1031,7 @@ \subsection{通用近似性质和深度} 根据经验,更深的模型似乎确实会更适用于广泛的任务\citep{Bengio-NIPS2007,Erhan2009,Bengio-2009-book,UTLC+LISA-2011-small,Ciresan-et-al-2012,Krizhevsky-2012-small,sermanet-cvpr-13,Farabet-et-al-2013,couprie-iclr-13,LISA-EmotiW2013,Goodfellow+et+al-ICLR2014a,Szegedy-et-al-arxiv2014}。 图\ref{fig:chap6_depth_color}和图\ref{fig:chap6_model_size_color}展示了一些经验结果的例子。 这表明使用深层结构确实在模型学习的函数空间上表示了一个有用的先验。 +% fig 6.6 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} @@ -1036,6 +1042,7 @@ \subsection{通用近似性质和深度} \label{fig:chap6_depth_color} \end{figure} +% fig 6.7 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} @@ -1122,6 +1129,7 @@ \subsection{计算图} 我们有时用操作的名称来注释输出的节点,当上下文很明确时有时也会省略这个标注。 计算图的实例可以参见图\ref{fig:chap6_computational_graph}。 +% fig 6.8 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} @@ -1149,7 +1157,7 @@ \subsection{微积分中的链式法则} 假设$\bm{x}\in \SetR^m, \bm{y}\in \SetR^n$,$g$是从$\SetR^m$到$\SetR^n$的映射,$f$是从$\SetR^n$到$\SetR$的映射。 如果$\bm{y}=g(\bm{x})$并且$z=f(\bm{y})$,那么 \begin{equation} -\frac{\partial z}{\partial x_i} = \sum_i \frac{\partial z}{\partial y_j} \frac{\partial y_j}{\partial x_i}. +\frac{\partial z}{\partial x_i} = \sum_j \frac{\partial z}{\partial y_j} \frac{\partial y_j}{\partial x_i}. \end{equation} 使用向量记法,可以等价地写成 \begin{equation} @@ -1194,15 +1202,6 @@ \subsection{递归地使用链式法则来实现BP} 在某些情况下,计算两次相同的子表达式纯粹是浪费。 在复杂图中,可能存在指数多的这种计算上的浪费,使得简单的链式法则不可实现。 在其他情况下,计算两次相同的子表达式可能是以较高的运行时间为代价来减少内存开销的有效手段。 -\begin{figure}[!htb] -\ifOpenSource -\centerline{\includegraphics{figure.pdf}} -\else -\centerline{\includegraphics{Chapter6/figures/repeated_subexpression}} -\fi -\caption{Tmp} -\label{fig:chap6_repeated_subexpression} -\end{figure} 我们首先给出一个版本的反向传播算法,它指明了梯度的直接计算方式(算法|||c|||以及相关的正向计算的算法|||c|||),按照它实际完成的顺序并且递归地使用链式法则。 可以直接执行这些计算或者将算法的描述视为用于计算反向传播的计算图的符号表示。 @@ -1219,7 +1218,7 @@ \subsection{递归地使用链式法则来实现BP} 我们将假设图的节点已经以一种特殊的方式被排序,使得我们可以一个接一个地计算他们的输出,从$u^{(n_i+1)}$开始,一直上升到$u^{(n)}$。 如算法|||c|||中所定义的,每个节点$u^{(i)}$与操作$f^{(i)}$相关联,并且通过对该函数求值来得到 \begin{equation} - u^{(i)} = f(\SetA^{(i)}) + u^{(i)} = f(\SetA^{(i)}), \end{equation} 其中$\SetA^{(i)}$是$u^{(i)}$所有双亲节点的集合。 @@ -1231,7 +1230,7 @@ \subsection{递归地使用链式法则来实现BP} $\CalB$中的计算和$\CalG$中的计算顺序完全相反,而且$\CalB$中的每个节点计算导数$\frac{\partial u^{(n)}}{\partial u^{(i)}}$与前向图中的节点$u^{(i)}$相关联。 这通过对标量输出$u^{(n)}$使用链式法则来完成 \begin{equation} - \frac{\partial u^{(n)}}{\partial u^{(j)}} = \sum_{i:j \in Pa(u^{(i)})} \frac{\partial u^{(n)} \partial u^{(i)}}{ \partial u^{(i)} \partial u^{(j)} } + \frac{\partial u^{(n)}}{\partial u^{(j)}} = \sum_{i:j \in Pa(u^{(i)})} \frac{\partial u^{(n)} }{ \partial u^{(i)} } \frac{ \partial u^{(i)} }{ \partial u^{(j)} } \label{eq:6.49} \end{equation} 在算法|||c|||中详细说明。 @@ -1240,6 +1239,25 @@ \subsection{递归地使用链式法则来实现BP} 另外,对于每个节点都要执行一个内积,内积的一个因子是对于$u^{j}$孩子节点$u^{(i)}$的已经计算的梯度,另一个因子是对于相同孩子节点$u^{(i)}$ 的偏导数$\frac{\partial u^{(i)}}{\partial u^{(j)}}$组成的向量。 总而言之,执行反向传播所需的计算量与$\CalG$中的边的数量成比例,其中每条边的计算包括计算偏导数(节点关于它的一个双亲节点的偏导数)以及执行一次乘法和一次加法。 下面,我们将此分析推广到张量值节点,这只是在同一节点中对多个标量值进行分组并能够更有效的实现。 +% fig 6.9 +\begin{figure}[!htb] +\ifOpenSource +\centerline{\includegraphics{figure.pdf}} +\else +\centerline{\includegraphics{Chapter6/figures/repeated_subexpression}} +\fi +\captionsetup{singlelinecheck=off} +\caption[.]{ +TODO. +\begin{align} +& \frac{\partial z}{\partial w}\\ +=& \frac{\partial z}{\partial y} \frac{\partial y}{\partial x} \frac{\partial x}{\partial w}\\ +=& f'(y)f'(x)f'(w)\\ +=& f'(f(f(w))) f'(f(w)) f'(w). +\end{align} +TODO.} +\label{fig:chap6_repeated_subexpression} +\end{figure} % -- 203 -- @@ -1288,6 +1306,7 @@ \subsection{符号到符号的导数} 这种方法的主要优点是导数可以使用与原始表达式相同的语言来描述。 因为导数只是另外一张计算图,可以再次运行反向传播,对导数再进行求导以得到更高阶的导数。 高阶导数的计算在\ref{sec:higher_order_derivatives}中描述。 +% fig 6.10 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} @@ -1385,7 +1404,7 @@ \subsection{一般化的BP} \begin{equation} \frac{\partial u^{(n)}}{\partial u^{(j)}} = \sum_{\substack{\text{path}(u^{(\pi_1)}, u^{(\pi_2)}, \ldots, u^{(\pi_t)} ),\\ \text{from } \pi_1=j \text{ to }\pi_t = n}} - \prod_{k=2}^t \frac{\partial u^{(\pi_k)}}{\partial u^{(\pi_{k-1})}} + \prod_{k=2}^t \frac{\partial u^{(\pi_k)}}{\partial u^{(\pi_{k-1})}}. \end{equation} 由于节点$j$到节点$n$的路径数目可以在这些路径的长度上指数地增长,所以上述求和符号中的项数(这些路径的数目),可能以前向传播图的深度的指数级增长。 会产生如此大的成本是因为对于$\frac{\partial u^{(i)}}{\partial u^{(j)}}$,相同的计算会重复进行很多次。 @@ -1414,10 +1433,11 @@ \subsection{实例:用于MLP训练的BP} 然而,为了使得这个例子更加真实,我们也包含一个正则项。 总的代价函数为 \begin{equation} - J = J_{\text{MLE}} + \lambda \left ( \sum_{i, j} (W_{i, j}^{(1)})^2 + \sum_{i, j} (W_{i, j}^{(2)})^2 \right ) + 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$的权重衰减项。 它的计算图在图\label{fig:chap6_mlp_example}中给出。 +% fig 6.11 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}}