diff --git a/README.md b/README.md index 56c3473..0496fba 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ | [第六章 深度前馈网络](https://exacity.github.io/deeplearningbook-chinese/Chapter6_deep_feedforward_networks/) | @KevinLee1110 | David_Chow, @linzhp, @sailordiary | | 完成合并 | | [第七章 深度学习中的正则化](https://exacity.github.io/deeplearningbook-chinese/Chapter7_regularization/) | @swordyork | | | 等待合并 | | [第八章 深度模型中的优化](https://exacity.github.io/deeplearningbook-chinese/Chapter8_optimization_for_training_deep_models/) | @liber145 | @happynoom, @codeVerySlow | @huangpingchun | 完成合并 | -| [第九章 卷积网络](https://via.hypothes.is/https://exacity.github.io/deeplearningbook-chinese/Chapter9_convolutional_networks/) | @KevinLee1110 | @TonyHan0915, @zhaoyu611, @corenel | @zhiding | 等待合并 | +| [第九章 卷积网络](https://exacity.github.io/deeplearningbook-chinese/Chapter9_convolutional_networks/) | @KevinLee1110 | @zhaoyu611, @corenel | @zhiding | 完成合并 | | [第十章 序列建模:循环和递归网络](https://exacity.github.io/deeplearningbook-chinese/Chapter10_sequence_modeling_rnn/) | @swordyork | lc | @zhaoyu611, @yinruiqing | 完成合并 | | [第十一章 实践方法论](https://exacity.github.io/deeplearningbook-chinese/Chapter11_practical_methodology/) | @liber145 | | | 完成合并 | | [第十二章 应用](https://exacity.github.io/deeplearningbook-chinese/Chapter12_applications/) | @swordyork, @futianfan | | @corenel | 完成合并 | diff --git a/docs/_posts/2016-12-02-Chapter2_linear_algebra.md b/docs/_posts/2016-12-02-Chapter2_linear_algebra.md index 565c2f1..172fe2a 100644 --- a/docs/_posts/2016-12-02-Chapter2_linear_algebra.md +++ b/docs/_posts/2016-12-02-Chapter2_linear_algebra.md @@ -12,7 +12,7 @@ share: false 如果你已经很熟悉线性代数,那么你可以轻松地跳过本章。 如果你已经了解这些概念,但是需要一份索引表来回顾一些重要公式,那么我们推荐\emph{The Matrix Cookbook} {cite?}。 -如果你没有接触过线性代数,那么本章将告诉你本书所需的线性代数知识,不过我们仍然非常建议你参考其他专注于讲解线性代数的文献,例如{shilov1977linear}。 +如果你没有接触过线性代数,那么本章将告诉你本书所需的线性代数知识,不过我们仍然非常建议你参考其他专注于讲解线性代数的文献,例如~{shilov1977linear}。 最后,本章跳过了很多重要但是对于理解深度学习非必需的线性代数知识。 @@ -417,7 +417,7 @@ $L^1$范数可以简化如下: -另外一个经常在机器学习中出现的范数是$L^\infty$范数,也被称为~max 范数。 +另外一个经常在机器学习中出现的范数是$L^\infty$范数,也被称为\,最大范数。 这个范数表示向量中具有最大幅值的元素的绝对值: \begin{equation} \norm{\Vx}_\infty = \max_i |x_i|. @@ -581,8 +581,8 @@ $L^1$范数可以简化如下: \caption{特征向量和特征值的作用效果。 特征向量和特征值的作用效果的一个实例。 在这里,矩阵$\MA$有两个标准正交的特征向量,对应特征值为$\lambda_1$的$\Vv^{(1)}$以及对应特征值为$\lambda_2$的$\Vv^{(2)}$。 -(左)我们画出了所有的单位向量$\Vu\in\SetR^2$的集合,构成一个单位圆。 -(右)我们画出了所有的$\MA\Vu$点的集合。 +\emph{(左)}我们画出了所有的单位向量$\Vu\in\SetR^2$的集合,构成一个单位圆。 +\emph{(右)}我们画出了所有的$\MA\Vu$点的集合。 通过观察$\MA$拉伸单位圆的方式,我们可以看到它将$\Vv^{(i)}$方向的空间拉伸了$\lambda_i$倍。 } \end{figure} @@ -648,7 +648,7 @@ $\MA$的右奇异向量是$\MA^\top\MA$的特征向量。 $\MA$的非零奇异值是$\MA^\top\MA$特征值的平方根,同时也是$\MA\MA^\top$特征值的平方根。 -SVD最有用的一个性质可能是拓展矩阵求逆到非方矩阵上。我们将在下一节中探讨。 +SVD\,最有用的一个性质可能是拓展矩阵求逆到非方矩阵上。我们将在下一节中探讨。 @@ -788,13 +788,13 @@ PCA由我们选择的解码函数而定。 计算这个解码器的最优编码可能是一个困难的问题。 -为了使编码问题简单一些,PCA限制$\MD$的列向量彼此正交(注意,除非$l=n$,否则严格意义上$\MD$不是一个正交矩阵)。 +为了使编码问题简单一些,PCA\,限制$\MD$的列向量彼此正交(注意,除非$l=n$,否则严格意义上$\MD$不是一个正交矩阵)。 为了将这个基本想法变为我们能够实现的算法,首先我们需要明确如何根据每一个输入$\Vx$得到一个最优编码$\Vc^*$。 一种方法是最小化原始输入向量$\Vx$和重构向量$g(\Vc^*)$之间的距离。 我们使用范数来衡量它们之间的距离。 -在PCA算法中,我们使用$L^2$范数: +在\,PCA\,算法中,我们使用$L^2$范数: \begin{equation} \Vc^* = \underset{\Vc}{\arg\min} \norm{\Vx-g(\Vc)}_2. \end{equation} @@ -853,7 +853,7 @@ PCA由我们选择的解码函数而定。 \begin{equation} f(\Vx)=\MD^\top\Vx. \end{equation} -进一步使用矩阵乘法,我们也可以定义PCA重构操作: +进一步使用矩阵乘法,我们也可以定义\,PCA\,重构操作: \begin{equation} r(\Vx)=g(f(\Vx)) = \MD\MD^\top \Vx. \end{equation} @@ -862,7 +862,7 @@ PCA由我们选择的解码函数而定。 接下来,我们需要挑选编码矩阵$\MD$。 要做到这一点,我们回顾最小化输入和重构之间$L^2$距离的这个想法。 因为我们用相同的矩阵$\MD$对所有点进行解码,我们不能再孤立地看待每个点。 -反之,我们必须最小化所有维数和所有点上的误差矩阵的Frobenius 范数: +反之,我们必须最小化所有维数和所有点上的误差矩阵的\,Frobenius 范数: \begin{equation} \MD^* = \underset{\MD}{\arg\min} \sqrt{\sum_{i,j}\left( \Vx_j^{(i)} - r(\Vx^{(i)})_j\right)^2} \text{ subject to } \MD^\top\MD = \MI_l. \end{equation} @@ -901,7 +901,7 @@ PCA由我们选择的解码函数而定。 \Vd^* = \underset{\Vd}{\arg\min} \norm{\MX - \MX\Vd\Vd^\top}_F^2 \text{ subject to } \Vd^\top \Vd = 1. \end{equation} -暂时不考虑约束,我们可以将Frobenius 范数简化成下面的形式: +暂时不考虑约束,我们可以将\,Frobenius 范数简化成下面的形式: \begin{equation} \underset{\Vd}{\arg\min} \norm{\MX - \MX \Vd\Vd^\top}_F^2 \end{equation} diff --git a/docs/_posts/2016-12-03-Chapter3_probability_and_information_theory.md b/docs/_posts/2016-12-03-Chapter3_probability_and_information_theory.md index bb5ceb9..dca5f3f 100644 --- a/docs/_posts/2016-12-03-Chapter3_probability_and_information_theory.md +++ b/docs/_posts/2016-12-03-Chapter3_probability_and_information_theory.md @@ -394,7 +394,7 @@ Bernoulli分布和Multinoulli分布足够用来描述在它们领域内的任意 正态分布由两个参数控制,$\mu \in \SetR$和$\sigma \in (0, \infty)$。 参数$\mu$给出了中心峰值的坐标,这也是分布的均值:$\SetE[\RSx] = \mu$。 -分布的标准误差用$\sigma$表示,方差用$\sigma^2$表示。 +分布的标准差用$\sigma$表示,方差用$\sigma^2$表示。 当我们要对概率密度函数求值时,我们需要对$\sigma$平方并且取倒数。 当我们需要经常对不同参数下的概率密度函数求值时,一种更高效的参数化分布的方式是使用参数$\beta \in (0, \infty)$,来控制分布的精度(或方差的倒数): @@ -445,7 +445,7 @@ p(x; \lambda) = \lambda \bm{1}_{x\ge 0} \exp(-\lambda x). \end{equation} 指数分布使用指示函数(indicator function)$\bm{1}_{x\ge 0}$来使得当$x$取负值时的概率为零。 -一个非常相关的概率分布是Laplace分布,它允许我们在任意一点$\mu$处设置概率质量的峰值 +一个联系紧密的概率分布是Laplace分布,它允许我们在任意一点$\mu$处设置概率质量的峰值 \begin{equation} \text{Laplace}(x; \mu, \gamma) = \frac{1}{2\gamma} \exp \left( -\frac{|x-\mu|}{\gamma} \right). \end{equation} @@ -680,7 +680,7 @@ p_y(y) = p_x(g^{-1}(y)) \left \vert \frac{\partial x}{\partial y} \right \vert \begin{equation} p_x(x) = p_y(g(x)) \left | \frac{\partial g(x)}{\partial x} \right |. \end{equation} -在高维空间中,微分运算扩展为Jacobi矩阵的行列式——矩阵的每个元素为$J_{i, j} = \frac{\partial x_i}{\partial y_j}$。 +在高维空间中,微分运算扩展为Jacobian矩阵的行列式——矩阵的每个元素为$J_{i, j} = \frac{\partial x_i}{\partial y_j}$。 因此,对于实值向量$\Vx$和$\Vy$, \begin{equation} p_x(\Vx) = p_y(g(\Vx)) \left | \det \left ( \frac{\partial g(\Vx)}{\partial \Vx} \right) \right |. diff --git a/docs/_posts/2016-12-04-Chapter4_numerical_computation.md b/docs/_posts/2016-12-04-Chapter4_numerical_computation.md index f3d1a5f..3e05bc6 100644 --- a/docs/_posts/2016-12-04-Chapter4_numerical_computation.md +++ b/docs/_posts/2016-12-04-Chapter4_numerical_computation.md @@ -26,7 +26,7 @@ share: false 另一个极具破坏力的数值错误形式是上溢。 当大量级的数被近似为$\infty$或$-\infty$时发生上溢。 -进一步的运算通常导致这些无限值变为非数字。 +进一步的运算通常会导致这些无限值变为非数字。 必须对上溢和下溢进行数值稳定的一个例子是softmax函数。 softmax函数经常用于预测与Multinoulli分布相关联的概率,定义为 @@ -46,14 +46,14 @@ softmax函数经常用于预测与Multinoulli分布相关联的概率,定义 还有一个小问题。 分子中的下溢仍可以导致整体表达式被计算为零。 -这意味着,如果我们在计算$\log ~\text{softmax}(\Vx)$时先计算$\text{softmax}$再把结果传给$\log$函数,会错误地得到$-\infty$。 +这意味着,如果我们在计算$\log ~\text{softmax}(\Vx)$时,先计算$\text{softmax}$再把结果传给$\log$函数,会错误地得到$-\infty$。 相反,我们必须实现一个单独的函数,并以数值稳定的方式计算$\log \text{softmax}$。 -我们可以使用相同的技巧稳定$\log \text{softmax}$函数。 +我们可以使用相同的技巧来稳定$\log \text{softmax}$函数。 在大多数情况下,我们没有明确地对本书描述的各种算法所涉及的数值考虑进行详细说明。 底层库的开发者在实现深度学习算法时应该牢记数值问题。 本书的大多数读者可以简单地依赖保证数值稳定的底层库。 -在某些情况下,有可能在实现一个新的算法时自动保持数值稳定。 +在某些情况下,我们有可能在实现一个新的算法时自动保持数值稳定。 Theano~{cite?}就是这样软件包的一个例子,它能自动检测并稳定深度学习中许多常见的数值不稳定的表达式。 @@ -83,7 +83,7 @@ Theano~{cite?}就是这样软件包的一个例子,它能自动检测并稳定 # 基于梯度的优化方法 -大多数深度学习算法涉及某种形式的优化。 +大多数深度学习算法都涉及某种形式的优化。 优化指的是改变$\Vx$以最小化或最大化某个函数$f(\Vx)$的任务。 我们通常以最小化$f(\Vx)$指代大多数最优化问题。 最大化可经由最小化算法最小化$-f(\Vx)$来实现。 @@ -125,7 +125,7 @@ $f(\Sx+\epsilon) \approx f(\Sx) + \epsilon f^\prime(\Sx) $。 当$f^\prime(\Sx)=0$,导数无法提供往哪个方向移动的信息。 $ f^\prime(\Sx)=0 $的点称为临界点或驻点。 一个局部极小点意味着这个点的$f(\Sx)$小于所有邻近点,因此不可能通过移动无穷小的步长来减小$f(\Sx)$。 -一个局部极大点是$f(x)$意味着这个点的$f(\Sx)$大于所有邻近点,因此不可能通过移动无穷小的步长来增大$f(x)$。 +一个局部极大点意味着这个点的$f(\Sx)$大于所有邻近点,因此不可能通过移动无穷小的步长来增大$f(\Sx)$。 有些临界点既不是最小点也不是最大点。这些点被称为鞍点。 见\fig?给出的各种临界点的例子。 \begin{figure}[!htb] @@ -144,9 +144,9 @@ $ f^\prime(\Sx)=0 $的点称为临界点或驻点。 使$f(x)$取得绝对的最小值(相对所有其他值)的点是全局最小点。 函数可能只有一个全局最小点或存在多个全局最小点, 还可能存在不是全局最优的局部极小点。 -在深度学习的背景下,我们优化的函数可能含有许多不是最优的局部极小点,或者还有很多处于非常平坦的区域内的鞍点。 +在深度学习的背景下,我们要优化的函数可能含有许多不是最优的局部极小点,或者还有很多处于非常平坦的区域内的鞍点。 尤其是当输入是多维的时候,所有这些都将使优化变得困难。 -因此,我们通常寻找$f$非常小的值,但在任何形式意义下并不一定是最小。 +因此,我们通常寻找使$f$非常小的点,但这在任何形式意义下并不一定是最小。 见\fig?的例子。 \begin{figure}[!htb] \ifOpenSource @@ -156,7 +156,7 @@ $ f^\prime(\Sx)=0 $的点称为临界点或驻点。 \fi \caption{近似最小化。 当存在多个局部极小点或平坦区域时,优化算法可能无法找到全局最小点。 -在深度学习的背景下,即使找到的解不是真正最小的,但只要它们对应于代价函数的显著低的值,我们通常就能接受这样的解。 +在深度学习的背景下,即使找到的解不是真正最小的,但只要它们对应于代价函数显著低的值,我们通常就能接受这样的解。 } \end{figure} @@ -220,7 +220,7 @@ $ f^\prime(\Sx)=0 $的点称为临界点或驻点。 二阶导数告诉我们,一阶导数将如何随着输入的变化而改变。 它表示只基于梯度信息的梯度下降步骤是否会产生如我们预期的那样大的改善,因此它是重要的。 我们可以认为,二阶导数是对曲率的衡量。 -假设我们有一个二次函数(虽然很多实践中的函数都不是二次,但至少在局部可以很好地用二次近似)。 +假设我们有一个二次函数(虽然很多实践中的函数都不是二次的,但至少在局部可以很好地用二次近似)。 如果这样的函数具有零二阶导数,那就没有曲率。 也就是一条完全平坦的线,仅用梯度就可以预测它的值。 我们使用沿负梯度方向大小为$\epsilon$的下降步,当该梯度是$1$时,代价函数将下降$\epsilon$。 @@ -244,7 +244,7 @@ $ f^\prime(\Sx)=0 $的点称为临界点或驻点。 \end{figure} 当我们的函数具有多维输入时,二阶导数也有很多。 -我们可以这些导数合并成一个矩阵,称为Hessian矩阵。 +我们可以将这些导数合并成一个矩阵,称为Hessian矩阵。 Hessian矩阵$\MH(f)(\Vx)$定义为 \begin{align} \MH(f)(\Vx)_{i,j} = \frac{\partial^2}{\partial \Sx_i \partial \Sx_j} f(\Vx). @@ -259,10 +259,10 @@ Hessian等价于梯度的Jacobian矩阵。 \end{align} 这意味着$H_{i,j} = H_{j,i}$, 因此Hessian矩阵在这些点上是对称的。 在深度学习背景下,我们遇到的大多数函数的Hessian几乎处处都是对称的。 -因为Hessian矩阵是实对称的,我们可以将其分解成一组实特征值和特征向量的正交基。 +因为Hessian矩阵是实对称的,我们可以将其分解成一组实特征值和一组特征向量的正交基。 在特定方向$\Vd$上的二阶导数可以写成$\Vd^\Tsp \MH \Vd$。 当$\Vd$是$\MH$的一个特征向量时,这个方向的二阶导数就是对应的特征值。 -对于其他的方向$\Vd$,方向二阶导数是所有特征值的加权平均,权重在0和1之间,且与$\Vd$夹角越小的特征向量有更大的权重。 +对于其他的方向$\Vd$,方向二阶导数是所有特征值的加权平均,权重在0和1之间,且与$\Vd$夹角越小的特征向量的权重越大。 最大特征值确定最大二阶导数,最小特征值确定最小二阶导数。 @@ -280,8 +280,8 @@ Hessian等价于梯度的Jacobian矩阵。 f(\Vx^{(0)} - \epsilon \Vg ) \approx f(\Vx^{(0)}) - \epsilon \Vg^\Tsp \Vg + \frac{1}{2} \epsilon^2 \Vg^\Tsp \MH \Vg. \end{align} 其中有3项:函数的原始值、函数斜率导致的预期改善、函数曲率导致的校正。 -当这最后一项太大时,梯度下降实际上是可能向上移动的。 -当$\Vg^\Tsp \MH \Vg$为零或负时,近似的泰勒级数表明增加$\epsilon$将永远导致$f$的下降。 +当最后一项太大时,梯度下降实际上是可能向上移动的。 +当$\Vg^\Tsp \MH \Vg$为零或负时,近似的泰勒级数表明增加$\epsilon$将永远使$f$下降。 在实践中,泰勒级数不会在$\epsilon$大的时候也保持准确,因此在这种情况下我们必须采取更启发式的选择。 当$\Vg^\Tsp \MH \Vg$为正时,通过计算可得,使近似泰勒级数下降最多的最优步长为 \begin{align} @@ -328,7 +328,7 @@ $x_1$轴是Hessian的一个特征向量,并且具有正特征值。 名称"鞍点"源自该处函数的鞍状形状。 这是具有鞍点函数的典型示例。 维度多于一个时,鞍点不一定要具有0特征值:仅需要同时具有正特征值和负特征值。 -我们可以想象这样一个鞍点(具有正负特征值)在一个横截面内是局部极大点,另一个横截面内是局部极小点。 +我们可以想象这样一个鞍点(具有正负特征值)在一个横截面内是局部极大点,而在另一个横截面内是局部极小点。 } \end{figure} @@ -338,7 +338,7 @@ Hessian的条件数衡量这些二阶导数的变化范围。 这是因为一个方向上的导数增加得很快,而在另一个方向上增加得很慢。 梯度下降不知道导数的这种变化,所以它不知道应该优先探索导数长期为负的方向。 病态条件也导致很难选择合适的步长。 -步长必须足够小,以免冲过最小而向具有较强的正曲率方向上升。 +步长必须足够小,以免冲过最小而向具有较强正曲率的方向上升。 这通常意味着步长太小,以致于在其他较小曲率的方向上进展不明显。 见\fig?的例子。 \begin{figure}[!htb] @@ -361,7 +361,7 @@ Hessian的条件数衡量这些二阶导数的变化范围。 -使用Hessian矩阵的信息指导搜索可以解决这个问题。 +我们可以使用Hessian矩阵的信息来指导搜索,以解决这个问题。 其中最简单的方法是牛顿法。 牛顿法基于一个二阶泰勒展开来近似$\Vx^{(0)}$附近的$f(\Vx)$: \begin{align} @@ -491,7 +491,7 @@ $中的$\alpha_i = 0$。 换句话说,对于所有的$i$, $\alpha_i \geq 0$或$ h^{(j)}(\Vx) \leq 0$在收敛时必有一个是活跃的。 为了获得关于这个想法的一些直观解释,我们可以说这个解是由不等式强加的边界,我们必须通过对应的KKT乘子影响$\Vx$的解,或者不等式对解没有影响,我们则归零KKT乘子。 -可以使用一组简单性质描述约束优化问题的最优点。 +我们可以使用一组简单的性质来描述约束优化问题的最优点。 这些性质称为Karush–Kuhn–Tucker条件{cite?}。 这些是确定一个点是最优点的必要条件,但不一定是充分条件。 这些条件是: @@ -511,7 +511,7 @@ $中的$\alpha_i = 0$。 \begin{align} f(\Vx) = \frac{1}{2}\| \MA \Vx - \Vb \|_2^2 . \end{align} -有专门的线性代数算法能够高效地解决这个问题;但是,我们也可以探索如何使用基于梯度的优化来解决这个问题,这可以作为这些技术是如何工作的一个简单例子。 +存在专门的线性代数算法能够高效地解决这个问题;但是,我们也可以探索如何使用基于梯度的优化来解决这个问题,这可以作为这些技术是如何工作的一个简单例子。 首先,我们计算梯度: \begin{align} @@ -534,7 +534,7 @@ $ f(\Vx) = \frac{1}{2} || \MA \Vx - \Vb ||_2^2$的算法。 我们也可以使用牛顿法解决这个问题。 -因为在这个情况下真实的函数是二次的,牛顿法所用的二次近似是精确的,该算法会在一步后收敛到全局最小点。 +因为在这个情况下,真实函数是二次的,牛顿法所用的二次近似是精确的,该算法会在一步后收敛到全局最小点。 现在假设我们希望最小化同样的函数,但受 $\Vx^\Tsp \Vx \leq 1$ 的约束。 要做到这一点,我们引入Lagrangian diff --git a/docs/_posts/2016-12-07-Chapter7_regularization.md b/docs/_posts/2016-12-07-Chapter7_regularization.md index ed8a6bd..6dd8cf4 100644 --- a/docs/_posts/2016-12-07-Chapter7_regularization.md +++ b/docs/_posts/2016-12-07-Chapter7_regularization.md @@ -1,49 +1,49 @@ --- -title: 深度学习中的正则化技术 +title: 深度学习中的正则化 layout: post share: false --- -设计不仅在训练数据上表现好,并且能在新输入上泛化好的算法是机器学习中的一个核心问题。 -在机器学习中许多策略通过明确设计,以增大训练误差为代价来减少测试误差。 -这些策略统称为正则化。 -正如我们将看到的,深度学习工作者可以使用许多形式的正则化。 +机器学习中的一个核心问题是设计不仅在训练数据上表现好,并且能在新输入上泛化好的算法。 +在机器学习中,许多策略显式地被设计为减少测试误差(可能会以增大训练误差为代价)。 +这些策略被统称为正则化。 +我们将在后文看到,深度学习工作者可以使用许多不同形式的正则化策略。 事实上,开发更有效的正则化策略已成为本领域的主要研究工作之一。 \chap?介绍了泛化、欠拟合、过拟合、偏差、方差和正则化的基本概念。 如果你不熟悉这些概念,请参考该章节再继续阅读本章。 -在本章中,我们会更详细地描述正则化,重点描述深度模型(或组成深度模型的模块)的正则化策略。 +在本章中,我们会更详细地介绍正则化,重点介绍深度模型(或组成深度模型的模块)的正则化策略。 -本章某些节涉及机器学习中的标准概念。 +本章中的某些章节涉及机器学习中的标准概念。 如果你已经熟悉了这些概念,可以随意跳过相关章节。 -然而,本章的大多数内容涉及这些基本概念在特定神经网络中的扩展。 +然而,本章的大多数内容涉及这些基本概念在特定神经网络中的扩展概念。 -在\sec?,我们将正则化定义为"对学习算法的修改——旨在减少泛化误差而不是训练误差"。 +在\sec?中,我们将正则化定义为"对学习算法的修改——旨在减少泛化误差而不是训练误差"。 目前有许多正则化策略。 -有些向机器学习模型添加额外的约束,如增加对参数的限制。 -有些向目标函数增加额外项,对应于参数值的软约束。 -如果仔细选择,这些额外的约束和惩罚可以改善模型在测试集上的表现。 -有时,这些约束和惩罚设计为编码特定类型的先验知识。 -其他时候,这些约束和惩罚的目的是表达对简单模型的一般偏好,以便提高泛化能力。 -有时候,惩罚和约束对于确定欠定的问题是必要的。 +有些策略向机器学习模型添加限制参数的额外约束。 +有些策略向目标函数增加参数值软约束的额外项。 +如果我们仔细选择,这些额外的约束和惩罚可以改善模型在测试集上的表现。 +有时侯,这些约束和惩罚被设计为编码特定类型的先验知识; +其他时候,这些约束和惩罚被设计为偏好简单模型,以便提高泛化能力。 +有时,惩罚和约束对于确定欠定的问题是必要的。 其他形式的正则化(如集成方法)结合多个假说来解释训练数据。 -在深度学习的背景下,大多数正则化策略都对估计进行正则化。 +在深度学习的背景下,大多数正则化策略都会对估计进行正则化。 估计的正则化以偏差的增加换取方差的减少。 一个有效的正则化是有利的"交易",也就是能显著减少方差而不过度增加偏差。 -我们在\chap?中讨论泛化和过拟合时,主要侧重模型族训练的3个情形:(1)不包括真实的数据生成过程——对应于欠拟合和偏差引入,(2)匹配真实数据生成过程,(3)除了包含真实的数据生成过程,还包含了许多其他可能的生成过程——方差(而不是偏差)主导的过拟合。 -正则化的目标是使模型从第三种情况进入到第二个情况。 +我们在\chap?中讨论泛化和过拟合时,主要侧重模型族训练的3个情形:(1)不包括真实的数据生成过程——对应欠拟合和含有偏差的情况,(2)匹配真实数据生成过程,(3)除了包括真实的数据生成过程,还包括许多其他可能的生成过程——方差(而不是偏差)主导的过拟合。 +正则化的目标是使模型从第三种情况转化为第二种情况。 -在实践中,过于复杂的模型族不一定包括目标函数或真实数据生成过程,甚至近似的过程都不包含。 -我们几乎从来无法知晓真实数据的生成过程,所以我们永远不知道被估计的模型族是否包括生成过程。 -然而,深度学习算法的大多数应用都是针对这样的领域,其中真实数据的生成过程几乎肯定在模型族之外。 -深度学习算法通常应用于极为复杂的领域,如图像、音频序列和文本,本质上这些领域的真正生成过程涉及模拟整个宇宙。 +在实践中,过于复杂的模型族不一定包括目标函数或真实数据生成过程,甚至也不包括近似过程。 +我们几乎从未知晓真实数据的生成过程,所以我们永远不知道被估计的模型族是否包括生成过程。 +然而,深度学习算法的大多数应用都是针对这样的情况,其中真实数据的生成过程几乎肯定在模型族之外。 +深度学习算法通常应用于极为复杂的领域,如图像、音频序列和文本,本质上这些领域的真实生成过程涉及模拟整个宇宙。 从某种程度上说,我们总是持方枘(数据生成过程)而欲内圆凿(我们的模型族)。 -这意味着控制模型的复杂性不是找到合适规模的模型(带有正确的参数个数)这样一个简单的事情。 -相反,我们可能会发现,或者说在实际的深度学习场景中我们几乎总是会发现,最好的拟合模型(最小化泛化误差的意义上)是一个适当正则化的大型模型。 +这意味着控制模型的复杂度不是找到合适规模的模型(带有正确的参数个数)这样一个简单的事情。 +相反,我们可能会发现,或者说在实际的深度学习场景中我们几乎总是会发现,最好的拟合模型(从最小化泛化误差的意义上)是一个适当正则化的大型模型。 现在我们回顾几种创建这些大型深度正则化模型的策略。 @@ -52,8 +52,8 @@ share: false # 参数范数惩罚 -正则化在深度学习的出现前就已经应用了数十年。 -线性模型,如线性回归和逻辑回归可以使用简单、直接有效的正则化策略。 +正则化在深度学习的出现前就已经被使用了数十年。 +线性模型,如线性回归和逻辑回归可以使用简单、直接、有效的正则化策略。 许多正则化方法通过对目标函数 $J$添加一个参数范数惩罚$\Omega(\Vtheta)$,限制模型(如神经网络、线性回归或逻辑回归)的学习能力。 我们将正则化后的目标函数记为$\tilde{J}$: @@ -61,37 +61,37 @@ share: false \tilde{J}(\Vtheta;\MX, \Vy) = J(\Vtheta;\MX, \Vy) + \alpha \Omega(\Vtheta), \end{align} 其中$\alpha \in [0, \infty)$是权衡范数惩罚项$\Omega$和标准目标函数 $J(\MX;\Vtheta)$相对贡献的超参数。 -将$\alpha$设为0就是没有正则化。 -越大的$\alpha$,对应于越多的正则化惩罚。 +将$\alpha$设为0表示没有正则化。 +$\alpha$越大,对应正则化惩罚越大。 当我们的训练算法最小化正则化后的目标函数 $\tilde{J}$时,它会降低原始目标$J$关于训练数据的误差并同时减小参数$\Vtheta$的规模(或在某些衡量下参数子集的规模)。 -参数范数$\Omega$的不同选择会导致不同的优先解。 -在本节中,我们讨论各种范数惩罚对模型的影响。 +选择不同的参数范数$\Omega$会偏好不同的解法。 +在本节中,我们会讨论各种范数惩罚对模型的影响。 -在探究不同范数的正则化表现之前,我们需要提一下,在神经网络中我们通常只对每一层仿射变换的\emph{权重}做惩罚而不对偏置做正则惩罚。 +在探究不同范数的正则化表现之前,我们需要说明一下,在神经网络中我们通常只对每一层仿射变换的\emph{权重}做惩罚而不对偏置做正则惩罚。 精确拟合偏置所需的数据通常比拟合权重少得多。 -每个权重指定两个变量如何相互作用。 -我们需要在各种条件下观察这两个变量才能拟合权重。 +每个权重会指定两个变量如何相互作用。 +我们需要在各种条件下观察这两个变量才能良好地拟合权重。 而每个偏置仅控制一个单变量。 -这意味着,我们不对其进行正则化也不会引起太大的方差。 -另外,正则化的偏置参数可能会引起显著的欠拟合。 +这意味着,我们不对其进行正则化也不会导致太大的方差。 +另外,正则化偏置参数可能会导致明显的欠拟合。 因此,我们使用向量$\Vw$表示所有应受范数惩罚影响的权重,而向量$\Vtheta$表示所有参数(包括$\Vw$和无需正则化的参数)。 在神经网络的情况下,有时希望对网络的每一层使用单独的惩罚,并分配不同的$\alpha$系数。 -搜索多个正确超参数的代价很大,因此为了减少搜索空间在所有层使用相同权重衰减是合理的。 +拟合多个超参数的代价很大,因此为了减少搜索空间,我们会在所有层使用相同的权重衰减。 ## $L^2$参数正则化 -在\sec?中我们已经看到最简单和最常见的参数范数惩罚是,通常被称为权重衰减的$L^2$参数范数惩罚。 -这个正则化策略通过向目标函数添加一个正则项$\Omega(\Vtheta) = \frac{1}{2} \norm{\Vw}_2^2$,使权重更加接近原点\footnote{更一般地,我们可以将参数正则化为接近空间中的任意特定点,令人惊讶的是仍有正则化效果,并且更接近真实值将获得更好的结果。 -当我们不知道正确的值应该是正还是负,零是有意义的默认值。 -由于将模型参数正则化为零的情况更常见,我们将关注这种特殊情况。}。 +在\sec?中我们已经看到过最简单和最常见的参数范数惩罚,即通常被称为权重衰减的$L^2$参数范数惩罚。 +这个正则化策略通过向目标函数添加一个正则项$\Omega(\Vtheta) = \frac{1}{2} \norm{\Vw}_2^2$,使权重更加接近原点\footnote{更一般地,我们可以将参数正则化为接近空间中的任意特定点,令人惊讶的是这样也仍有正则化效果,但是特定点越接近真实值结果越好。 +当我们不知道正确的值应该是正还是负时,零是有意义的默认值。 +由于模型参数正则化为零的情况更为常见,我们将只探讨这种特殊情况。}。 在其他学术圈,$L^2$也被称为岭回归或Tikhonov正则。 -我们可以研究正则化化后目标函数的梯度洞察一些权重衰减的正则化表现。 +我们可以通过研究正则化化后目标函数的梯度,洞察一些权重衰减的正则化表现。 为了简单起见,我们假定其中没有偏置参数,因此$\Vtheta$就是$\Vw$。 这样一个模型具有以下总的目标函数: \begin{align} @@ -109,51 +109,51 @@ share: false \begin{align} \Vw \leftarrow (1-\epsilon \alpha)\Vw - \epsilon \nabla_{\Vw} J(\Vw;\MX, \Vy). \end{align} -我们可以看到,加入权重衰减后会修改学习规则,即在每步执行通常的梯度更新之前先收缩权重向量(将权重向量乘以一个常数因子)。 +我们可以看到,加入权重衰减后会引起学习规则的修改,即在每步执行通常的梯度更新之前先收缩权重向量(将权重向量乘以一个常数因子)。 这是单个步骤发生的变化。 -但是,在训练的整个过程会发生什么? +但是,在训练的整个过程会发生什么呢? -我们进一步简化分析,令$\Vw^*$为没有正则化时目标函数取得最小训练误差的权重向量,即$\Vw^* = \argmin_{\Vw} J(\Vw)$, 并在$\Vw^*$的邻域作二次近似。 -如果目标函数确实是二次的(如以均方误差拟合线性回归模型的情况下),则该近似是完美的。 +我们进一步简化分析,令$\Vw^*$为不含正则化的目标函数取得最小训练误差时的权重向量,即$\Vw^* = \argmin_{\Vw} J(\Vw)$, 并在$\Vw^*$的邻域对目标函数做二次近似。 +如果目标函数确实是二次的(如以均方误差拟合线性回归模型的情况),则该近似是完美的。 近似的$\hat J(\Vtheta)$如下 \begin{align} \hat J(\Vtheta) = J(\Vw^*) + \frac{1}{2}(\Vw - \Vw^*)^\top \MH (\Vw - \Vw^*), \end{align} 其中$\MH$是$J$在$\Vw^*$处计算的Hessian矩阵(关于$\Vw$)。 -因为$\Vw^*$被定义为最小,即梯度消失为0,所以该二次近似中没有一阶项。 -同样,因为$\Vw^*$是$J$的一个最小点,我们可以得出$\MH$是半正定的结论。 +因为$\Vw^*$被定义为最优,即梯度消失为$0$,所以该二次近似中没有一阶项。 +同样地,因为$\Vw^*$是$J$的一个最优点,我们可以得出$\MH$是半正定的结论。 -当$\hat J$取最小时,其梯度 +当$\hat J$取得最小时,其梯度 \begin{align} \nabla_{\Vw} \hat{J}(\Vw) = \MH (\Vw - \Vw^*) \end{align} -为0。 +为$0$。 -为了研究权重衰减的影响,我们将权重衰减的梯度加到\eqn?中。 -现在我们要找正则化版本$\hat J$的最小值。 -我们使用变量$\tilde{\Vw}$表示最小值的位置: +为了研究权重衰减带来的影响,我们在\eqn?中添加权重衰减的梯度。 +现在我们探讨最小化含有正则化的$\hat J$。 +我们使用变量$\tilde{\Vw}$表示此时的最优点: \begin{align} \alpha \tilde{\Vw} + \MH (\tilde{\Vw} - \Vw^*) = 0 \\ (\MH + \alpha \MI) \tilde{\Vw} = \MH \Vw^* \\ \end{align} -当$\alpha$趋向于0, 正则化的解$\tilde{\Vw}$趋向$\Vw^*$。 -那么当$\alpha$增加时会发生什么? -因为$\MH$是实对称的,我们可以将其分解为一个对角矩阵$\VLambda$和一组特征向量的标准正交基$\MQ$,并且$\MH = \MQ \VLambda \MQ^\top$。 +当$\alpha$趋向于$0$时,正则化的解$\tilde{\Vw}$会趋向$\Vw^*$。 +那么当$\alpha$增加时会发生什么呢? +因为$\MH$是实对称的,所以我们可以将其分解为一个对角矩阵$\VLambda$和一组特征向量的标准正交基$\MQ$,并且有$\MH = \MQ \VLambda \MQ^\top$。 将其应用于\eqn?,可得: \begin{align} \tilde \Vw &= ( \MQ \VLambda \MQ^\top + \alpha \MI)^{-1} \MQ \VLambda \MQ^\top \Vw^* \\ &= [ \MQ( \VLambda+ \alpha \MI) \MQ^\top ]^{-1} \MQ \VLambda \MQ^\top \Vw^* \\ \end{align} 我们可以看到权重衰减的效果是沿着由$\MH$的特征向量所定义的轴缩放$\Vw^*$。 -具体来说,与$\MH$第$i$个特征向量对齐的$\Vw^*$的分量根据$\frac{\lambda_i}{\lambda_i + \alpha}$因子缩放。 +具体来说,我们会根据$\frac{\lambda_i}{\lambda_i + \alpha}$因子缩放与$\MH$第$i$个特征向量对齐的$\Vw^*$的分量。 (不妨查看\fig?回顾这种缩放的原理)。 沿着$\MH$特征值较大的方向(如$\lambda_i \gg \alpha$)正则化的影响较小。 而$\lambda_i \ll \alpha$的分量将会收缩到几乎为零。 -这种效应在\fig?示出。 +这种效应如\fig?所示。 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} @@ -176,15 +176,15 @@ share: false -只有显著减小目标函数方向上的参数会保留得相对完好。 -无助于目标函数减小的方向,即Hessian小的特征值告诉我们,在这个方向的移动不会显著增加梯度。 -对应于这种不重要方向的分量会随训练过程中使用的正则化而衰减掉。 +只有在显著减小目标函数方向上的参数会保留得相对完好。 +在无助于目标函数减小的方向(对应Hessian矩阵较小的特征值)上改变参数不会显著增加梯度。 +这种不重要方向对应的分量会在训练过程中因正则化而衰减掉。 目前为止,我们讨论了权重衰减对优化一个抽象通用的二次代价函数的影响。 -这些影响具体怎样与机器学习关联? -我们可以研究线性回归,它的真实代价函数是二次的,因此适合目前为止我们使用的分析。 -再次应用分析,我们将能够获得相同结果的特例,但这次我们使用训练数据的术语表述。 +这些影响具体是怎么和机器学习关联的呢? +我们可以研究线性回归,它的真实代价函数是二次的,因此我们可以使用相同的方法分析。 +再次应用分析,我们会在这种情况下得到相同的结果,但这次我们使用训练数据的术语表述。 线性回归的代价函数是平方误差之和: \begin{align} (\MX \Vw - \Vy)^\top (\MX \Vw - \Vy). @@ -204,25 +204,25 @@ share: false \eqn?中的矩阵$\MX^\top\MX$与协方差矩阵$\frac{1}{m}\MX^\top\MX$成正比。 $L^2$正则项将这个矩阵替换为\eqn?中的$ (\MX^\top \MX + \alpha \MI)^{-1}$ 这个新矩阵与原来的是一样的,不同的仅仅是在对角加了$\alpha$。 -这个矩阵的对角项对应于每个输入特征的方差。 -我们可以看到,$L^2$正则化能让学习算法"感知"到具有较高方差的输入$\Vx$, 因此与输出目标的协方差较小(相对增加方差)的特征的权重将会收缩。 +这个矩阵的对角项对应每个输入特征的方差。 +我们可以看到,$L^2$正则化能让学习算法"感知"到具有较高方差的输入$\Vx$,因此与输出目标的协方差较小(相对增加方差)的特征的权重将会收缩。 ## $L^1$参数正则化 -$L^2$权重衰减是权重衰减最常见的形式,我们还可以使用其他的方法惩罚模型参数的大小。 -另一种选择是使用$L^1$正则化。 +$L^2$权重衰减是权重衰减最常见的形式,我们还可以使用其他的方法限制模型参数的大小。 +比如我们还可以使用$L^1$正则化。 -对模型参数$\Vw$的$L^1$正则化形式定义为: +形式地,对模型参数$\Vw$的$L^1$正则化被定义为: \begin{align} \Omega(\Vtheta) = \norm{ \Vw }_1 = \sum_i | w_i |, \end{align} 即各个参数的绝对值之和\footnote{如同$L^2$正则化,我们能将参数正则化到其他非零值$\Vw^{(o)}$。在这种情况下,$L^1$正则化将会引入不同的项$\Omega(\Vtheta)= \|\Vw - \Vw^{(o)} \|_1 = \sum_i | w_i - w_i^{(o)} |$。}。 -接着我们将讨论$L^1$正则化对简单线性回归模型的影响, 与分析$L^2$正则化时一样不考虑偏置参数。 +接着我们将讨论$L^1$正则化对简单线性回归模型的影响,与分析$L^2$正则化时一样不考虑偏置参数。 我们尤其感兴趣的是找出$L^1$和$L^2$正则化之间的差异。 -与$L^2$权重衰减类似,$L^1$权重衰减的强度也可以通过缩放惩罚项$\Omega$的正超参数$\alpha$控制。 -因此,正则化的目标函数 $\tilde{J}(\Vw;\MX, \Vy)$如下给出 +与$L^2$权重衰减类似,我们也可以通过缩放惩罚项$\Omega$的正超参数$\alpha$来控制$L^1$权重衰减的强度。 +因此,正则化的目标函数 $\tilde{J}(\Vw;\MX, \Vy)$如下所示 \begin{align} \tilde{J}(\Vw;\MX, \Vy) = \alpha \| \Vw \|_1 + J(\Vw;\MX, \Vy) , \end{align} @@ -230,13 +230,13 @@ $L^2$权重衰减是权重衰减最常见的形式,我们还可以使用其他 \begin{align} \nabla_{\Vw} \tilde{J}(\Vw; \MX, \Vy) = \alpha \text{sign}(\Vw) + \nabla_{\Vw} J(\Vw; \MX, \Vy), % ?? may be wrong \end{align} -其中$\text{sign}(\Vw)$只是简单地取$\Vw$各个元素的符号。 +其中$\text{sign}(\Vw)$只是简单地取$\Vw$各个元素的正负号。 观察\eqn?,我们立刻发现$L^1$的正则化效果与$L^2$大不一样。 -具体来说,我们可以看到正则化对梯度的贡献不再是线性地缩放每个$w_i$;而是使用与$\text{sign}(w_i)$同号的常数因子。 -这种形式的梯度的一个后果是,我们不一定能得到$J(\MX, \Vy;\Vw)$二次近似的直接算术解($L^2$正则化时可以)。 +具体来说,我们可以看到正则化对梯度的影响不再是线性地缩放每个$w_i$;而是添加了一项与$\text{sign}(w_i)$同号的常数。 +使用这种形式的梯度之后,我们不一定能得到$J(\MX, \Vy;\Vw)$二次近似的直接算术解($L^2$正则化时可以)。 简单线性模型具有二次代价函数,我们可以通过泰勒级数表示。 或者我们可以设想,这是逼近更复杂模型的代价函数的截断泰勒级数。 @@ -244,10 +244,10 @@ $L^2$权重衰减是权重衰减最常见的形式,我们还可以使用其他 \begin{align} \nabla_{\Vw} \hat{J}(\Vw) = \MH (\Vw - \Vw^*), \end{align} -同样,$\MH$是$J$在$\Vw^*$处计算的Hessian矩阵(关于$\Vw$)。 +同样,$\MH$是$J$在$\Vw^*$处的Hessian矩阵(关于$\Vw$)。 由于$L^1$惩罚项在满的、一般的Hessian的情况下,无法得到直接清晰的代数表达式,因此我们将进一步简化假设Hessian是对角的,即$\MH = \text{diag}([H_{1,1},\dots, H_{n,n}])$,其中每个$H_{i,i}>0$。 -如果用于线性回归问题的数据已被预处理(如可以使用PCA),去除了输入特征之间的相关性,那么这一假设成立。 +如果线性回归问题中的数据已被预处理(如可以使用PCA),去除了输入特征之间的相关性,那么这一假设成立。 我们可以将$L^1$正则化目标函数的二次近似分解成关于参数的求和: \begin{align} @@ -262,27 +262,27 @@ w_i = \text{sign}(w_i^*) \max\Big\{ |w_i^*| - \frac{\alpha}{H_{i,i}} , 0\Big\} . \begin{enumerate} + $w_i^* \leq \frac{\alpha}{H_{i,i}}$的情况。 正则化后目标中的$w_i$最优值是$w_i = 0$。 -这是因为在方向$i$上$J(\Vw; \MX, \Vy) $对$ \hat J(\Vw; \MX, \Vy)$的贡献受到压制,$L^1$正则化项将$w_i$推向0。 -+ $w_i^* > \frac{\alpha}{H_{i,i}}$的情况。在这种情况,正则化不会将$w_i$的最优值移向0,而仅仅在那个方向移动$\frac{\alpha}{H_{i,i}}$的距离。 +这是因为在方向$i$上$J(\Vw; \MX, \Vy) $对$ \hat J(\Vw; \MX, \Vy)$的贡献受到抑制,$L^1$正则化项将$w_i$推向0。 ++ $w_i^* > \frac{\alpha}{H_{i,i}}$的情况。在这种情况下,正则化不会将$w_i$的最优值推向0,而仅仅在那个方向上移动$\frac{\alpha}{H_{i,i}}$的距离。 \end{enumerate} $w_i^* < 0$的情况与之类似,但是$L^1$惩罚项使$w_i$更接近0(增加$ \frac{\alpha}{H_{i,i}}$)或者为0。 相比$L^2$正则化,$L^1$正则化会产生更稀疏的解。 -此处稀疏性指的是一些参数具有0的最优值。 -$L^1$正则化的稀疏性是相比$L^2$正则化是质的不同。 +此处稀疏性指的是一些参数具有最优值0。 +和$L^2$正则化相比,$L^1$正则化的稀疏性具有本质的不同。 \eqn?给出了$L^2$正则化的解$\tilde \Vw$。 -如果我们使用Hessian $\MH$为对角正定的假设(与$L^1$正则化分析时一样),重新考虑这个等式,我们发现 +如果我们使用Hessian $\MH$为对角正定矩阵的假设(与$L^1$正则化分析时一样),重新考虑这个等式,我们发现 $\tilde{w_i} = \frac{H_{i,i}}{H_{i,i} + \alpha} w_i^*$。 -如果$w_i^*$不是0,那$\tilde{w_i}$也会保持非0。 -这表明$L^2$正则化不会导致参数变得稀疏,而$L^1$正则化有可能通过足够大的$\alpha$实现稀疏。 +如果$w_i^*$不是零,那么$\tilde{w_i}$也会保持非零。 +这表明$L^2$正则化不会使参数变得稀疏,而$L^1$正则化有可能通过足够大的$\alpha$实现稀疏。 由$L^1$正则化导出的稀疏性质已经被广泛地用于特征选择机制。 -特征选择从可用的特征子集选择应该使用的子集,简化了机器学习问题。 -特别是著名的LASSO{cite?}(Least Absolute Shrinkage and +特征选择从可用的特征子集选择出有意义的特征,化简机器学习问题。 +著名的LASSO{cite?}(Least Absolute Shrinkage and Selection Operator)模型将$L^1$惩罚和线性模型结合,并使用最小二乘代价函数。 $L^1$惩罚使部分子集的权重为零,表明相应的特征可以被安全地忽略。 -在\sec?,我们看到许多正则化策略可以解释为MAP贝叶斯推断, +在\sec?,我们看到许多正则化策略可以被解释为MAP贝叶斯推断, 特别是$L^2$正则化相当于权重是高斯先验的MAP贝叶斯推断。 对于$L^1$正则化,用于正则化代价函数的惩罚项$\alpha \Omega(\Vw) = \alpha \sum_i |w_i |$与通过MAP贝叶斯推断最大化的对数先验项是等价的($\Vw \in \SetR^n$并且权重先验是各向同性的拉普拉斯分布(\eqn?)): \begin{align} @@ -299,8 +299,8 @@ $L^1$惩罚使部分子集的权重为零,表明相应的特征可以被安全 \tilde{J}(\Vtheta;\MX, \Vy) = J(\Vtheta;\MX, \Vy) + \alpha \Omega(\Vtheta) . \end{align} -回顾\sec?我们可以构造一个广义Lagrange函数来最小化受约束的函数,即在原始目标函数加上一系列惩罚项。 -每个惩罚是一个系数之间的乘积,称为Karush–Kuhn–Tucker乘子,以及一个表示约束是否满足的函数。 +回顾\sec?我们可以构造一个广义Lagrange函数来最小化带约束的函数,即在原始目标函数上添加一系列惩罚项。 +每个惩罚是一个系数之间的乘积,被称为Karush–Kuhn–Tucker乘子,以及一个表示约束是否满足的函数。 如果我们想约束$\Omega(\Vtheta)$小于某个常数$k$,我们可以构建广义Lagrange函数 \begin{align} \CalL(\Vtheta, \alpha; \MX, \Vy) = J(\Vtheta; \MX, \Vy) + \alpha (\Omega(\Vtheta) - k). @@ -311,11 +311,11 @@ $L^1$惩罚使部分子集的权重为零,表明相应的特征可以被安全 \Vtheta^* = \underset{\Vtheta}{ \argmin} \underset{\alpha, \alpha \geq 0}{\max} \CalL(\Vtheta, \alpha). \end{align} -如\sec?中描述,解决这个问题需要同时改变$\Vtheta$和$\alpha$。 +如\sec?中描述的,解决这个问题我们需要同时改变$\Vtheta$和$\alpha$。 \sec?给出了一个带$L^2$约束的线性回归实例。 -许多不同的优化过程是可能的,有些可能会利用梯度下降而其他可能使用梯度为0的解析解,但在所有程序中$\alpha$在$\Omega(\Vtheta) > k$时必须增加,在$\Omega(\Vtheta) < k$时必须减小。 -所有正的$\alpha$鼓励$\Omega(\Vtheta)$收缩。 -最佳值$\alpha^*$也将鼓励$\Omega(\Vtheta)$收缩,但不会如$\Omega(\Vtheta)$小于$k$时那么强烈。 +还有许多不同的优化方法,有些可能会使用梯度下降而其他可能会使用梯度为0的解析解,但在所有程序中$\alpha$在$\Omega(\Vtheta) > k$时必须增加,在$\Omega(\Vtheta) < k$时必须减小。 +所有正值的$\alpha$都鼓励$\Omega(\Vtheta)$收缩。 +最优值$\alpha^*$也将鼓励$\Omega(\Vtheta)$收缩,但不会像$\Omega(\Vtheta)$小于$k$时那么强烈。 为了洞察约束的影响,我们可以固定$\alpha^*$,把这个问题看成只跟$\Vtheta$有关的函数: \begin{align} @@ -330,26 +330,26 @@ $L^1$惩罚使部分子集的权重为零,表明相应的特征可以被安全 通常我们不知道权重衰减系数$\alpha^*$约束的区域大小,因为$\alpha^*$的值不直接告诉我们$k$的值。 原则上我们可以解得$k$,但$k$和$\alpha^*$之间的关系取决于$J$的形式。 虽然我们不知道约束区域的确切大小,但我们可以通过增加或者减小$\alpha$来大致扩大或收缩约束区域。 -较大的$\alpha$,将导致一个较小的约束区域。 -较小的$\alpha$,将导致一个较大的约束区域。 +较大的$\alpha$,将得到一个较小的约束区域。 +较小的$\alpha$,将得到一个较大的约束区域。 有时候,我们希望使用显式的限制,而不是惩罚。 -如\sec?所描述,我们能修改下降算法(如随机梯度下降算法),使其先计算$J(\Vtheta)$的下降步,然后将$\Vtheta$投影到满足$\Omega(\Vtheta) < k$的最近点。 +如\sec?所述,我们可以修改下降算法(如随机梯度下降算法),使其先计算$J(\Vtheta)$的下降步,然后将$\Vtheta$投影到满足$\Omega(\Vtheta) < k$的最近点。 如果我们知道什么样的$k$是合适的,而不想花时间寻找对应于此$k$处的$\alpha$值,这会非常有用。 -另一个使用显式约束和重投影而不是使用惩罚强加约束的原因是惩罚可能导致非凸优化过程而陷入局部极小(对应于小的$\Vtheta$)。 +另一个使用显式约束和重投影而不是使用惩罚强加约束的原因是惩罚可能会导致目标函数非凸而使算法陷入局部极小(对应于小的$\Vtheta$)。 当训练神经网络时,这通常表现为训练带有几个"死亡单元"的神经网络。 -这些单元不会对网络学到的函数的行为有太大贡献,因为进入或离开他们的权重都非常小。 -当使用权重范数的惩罚训练时,即使可能通过增加权重以显著减少$J$,这些配置也可能是局部最优的。 -因为重投影实现的显式约束不鼓励权重接近原点,所以在这些情况下工作得更好。 +这些单元不会对网络学到的函数有太大影响,因为进入或离开它们的权重都非常小。 +当使用权重范数的惩罚训练时,即使可以通过增加权重以显著减少$J$,这些配置也可能是局部最优的。 +因为重投影实现的显式约束不鼓励权重接近原点,所以在这些情况下效果更好。 通过重投影实现的显式约束只在权重变大并试图离开限制区域时产生作用。 最后,因为重投影的显式约束还对优化过程增加了一定的稳定性,所以这是另一个好处。 -当使用较高的学习率时,很可能进入正反馈,即大的权重诱导大梯度,然后诱发权重的大更新。 +当使用较高的学习率时,很可能进入正反馈,即大的权重诱导大梯度,然后使得权重获得较大更新。 如果这些更新持续增加权重的大小,$\Vtheta$就会迅速增大,直到离原点很远而发生溢出。 -重投影的显式约束可以防止这种反馈环引起的权重无限制的持续增加。 +重投影的显式约束可以防止这种反馈环引起权重无限制地持续增加。 {Hinton-et-al-arxiv2012}建议结合使用约束和高学习速率,这样能更快地探索参数空间,并保持一定的稳定性。 @@ -358,16 +358,16 @@ $L^1$惩罚使部分子集的权重为零,表明相应的特征可以被安全 分别限制每一列的范数可以防止某一隐藏单元有非常大的权重。 如果我们将此约束转换成Lagrange函数中的一个惩罚,这将与$L^2$ 权重衰减类似但每个隐藏单元的权重都具有单独的KKT乘子。 每个KKT乘子分别会被动态更新,以使每个隐藏单元服从约束。 -在实践中,列范数的限制总是通过重投影的显式约束实现。 +在实践中,列范数的限制总是通过重投影的显式约束来实现。 # 正则化和欠约束问题 在某些情况下,为了正确定义机器学习问题,正则化是必要的。 机器学习中许多线性模型,包括线性回归和PCA,都依赖于求逆矩阵$\MX^\top\MX$。 -只要$\MX^\top\MX$是奇异的这就是不可能的。 -每当数据生成分布的一些方向上确实没有差异时,或因为例子较少(即相对输入特征($\MX$的列)来说)而在一些方向没有观察到方差,这个矩阵就是奇异的。 -在这种情况下,正则化的许多形式对应于求逆$\MX^\top\MX + \alpha \MI$。 +只要$\MX^\top\MX$是奇异的,这些方法就会失效。 +当数据生成分布在一些方向上确实没有差异时,或因为例子较少(即相对输入特征($\MX$的列)来说)而在一些方向上没有观察到方差时,这个矩阵就是奇异的。 +在这种情况下,正则化的许多形式对应求逆$\MX^\top\MX + \alpha \MI$。 这个正则化矩阵可以保证是可逆的。 相关矩阵可逆时,这些线性问题有闭式解。 @@ -380,17 +380,17 @@ $L^1$惩罚使部分子集的权重为零,表明相应的特征可以被安全 大多数形式的正则化能够保证应用于欠定问题的迭代方法收敛。 例如,当似然的斜率等于权重衰减的系数时, 权重衰减将阻止梯度下降继续增加权重的大小。 -使用正则化解决欠定问题的想法超出了机器学习范畴。 +使用正则化解决欠定问题的想法超出了机器学习的范畴。 同样的想法在几个基本线性代数问题中也非常有用。 -正如我们在\sec?看到,我们可以使用Moore-Penrose求解欠定线性方程。 +正如我们在\sec?看到的,我们可以使用Moore-Penrose求解欠定线性方程。 回想$\MX$伪逆$\MX^+$的一个定义: \begin{align} \MX^+ = \lim_{\alpha \searrow 0} (\MX^\top \MX + \alpha \MI)^{-1}\MX^\top. \end{align} -现在我们可以将\sec?看作执行具有权重衰减的线性回归。 +现在我们可以将\sec?看作进行具有权重衰减的线性回归。 具体来说,当正则化系数趋向0时,\eqn?是\eqn?的极限。 因此,我们可以将伪逆解释为使用正则化来稳定欠定问题。 @@ -399,8 +399,8 @@ $L^1$惩罚使部分子集的权重为零,表明相应的特征可以被安全 # 数据集增强 让机器学习模型泛化得更好的最好办法是使用更多的数据进行训练。 -当然,在实践中,我们拥有数据量是有限的。 -解决这个问题的一种方法是创建假数据并把它添加到训练集。 +当然,在实践中,我们拥有的数据量是很有限的。 +解决这个问题的一种方法是创建假数据并添加到训练集中。 对于一些机器学习任务,创建新的假数据相当简单。 对分类来说这种方法是最简单的。 @@ -409,15 +409,15 @@ $L^1$惩罚使部分子集的权重为零,表明相应的特征可以被安全 我们可以轻易通过转换训练集中的$\Vx$来生成新的$(\Vx, y)$对。 这种方法对于其他许多任务来说并不那么容易。 -例如,除非我们已经解决了密度估计问题,否则在密度估计任务中生成新的假数据是困难的。 +例如,除非我们已经解决了密度估计问题,否则在密度估计任务中生成新的假数据是很困难的。 数据集增强对一个具体的分类问题来说是特别有效的方法:对象识别。 图像是高维的并包括各种巨大的变化因素,其中有许多可以轻易地模拟。 即使模型已使用卷积和池化技术(\chap?)对部分平移保持不变,沿训练图像每个方向平移几个像素的操作通常可以大大改善泛化。 许多其他操作如旋转图像或缩放图像也已被证明非常有效。 -我们必须要小心,不能应用改变正确类别的转换。 -例如,光学字符识别任务需要认识到"b"和"d"以及"6"和"9"的区别,所以对这些任务来说,水平翻转和旋转$180^{\circ}$并不是适当的数据集增强方式。 +我们必须要小心,不能使用会改变类别的转换。 +例如,光学字符识别任务需要认识到"b"和"d"以及"6"和"9"的区别,所以对这些任务来说,水平翻转和旋转$180^{\circ}$并不是合适的数据集增强方式。 @@ -426,21 +426,21 @@ $L^1$惩罚使部分子集的权重为零,表明相应的特征可以被安全 数据集增强对语音识别任务也是有效的{cite?}。 -在神经网络的输入层注入噪声{cite?}也可以被看作是数据增强的一种形式。 -对于许多分类甚至一些回归任务,即使小的随机噪声被加到输入,任务仍应该是能解决的。 +在神经网络的输入层注入噪声{cite?}也可以被看作是数据增强的一种方式。 +对于许多分类甚至一些回归任务而言,即使小的随机噪声被加到输入,任务仍应该是能够被解决的。 然而 ,神经网络被证明对噪声不是非常健壮{cite?}。 -改善神经网络健壮性的方法之一是简单地将随机噪声施加到输入再进行训练。 +改善神经网络健壮性的方法之一是简单地将随机噪声添加到输入再进行训练。 输入噪声注入是一些无监督学习算法的一部分,如去噪自编码器{cite?}。 向隐藏单元施加噪声也是可行的,这可以被看作在多个抽象层上进行的数据集增强。 {Poole14}最近表明,噪声的幅度被细心调整后,该方法是非常高效的。 -Dropout,一个将在\sec?描述的强大正则化策略,可以被看作通过\emph{乘}性噪声构建新输入的过程。 +Dropout,一个将在\sec?介绍的强大正则化策略,可以被看作是通过与噪声\emph{相乘}构建新输入的过程。 -当比较机器学习基准测试的结果时,考虑其采取的数据集增强是很重要的。 +在比较机器学习基准测试的结果时,考虑其采取的数据集增强是很重要的。 通常情况下,人工设计的数据集增强方案可以大大减少机器学习技术的泛化误差。 将一个机器学习算法的性能与另一个进行对比时,对照实验是必要的。 -当比较机器学习算法A和机器学习算法B时,应该确保这两个算法使用同一人工设计的数据集增强方案进行评估。 +在比较机器学习算法A和机器学习算法B时,应该确保这两个算法使用同一人工设计的数据集增强方案进行评估。 假设算法$A$在没有数据集增强时表现不佳,而$B$结合大量人工转换的数据后表现良好。 -在这样的情况下,很可能是合成转化引起了性能改进,而不是机器学习算法$B$。 +在这样的情况下,很可能是合成转化引起了性能改进,而不是机器学习算法$B$比算法$A$更好。 有时候,确定实验是否已经适当控制需要主观判断。 例如,向输入注入噪声的机器学习算法是执行数据集增强的一种形式。 通常,普适操作(例如,向输入添加高斯噪声)被认为是机器学习算法的一部分, @@ -452,28 +452,28 @@ Dropout,一个将在\sec?描述的强大正则化策略,可以被看作通 # 噪声鲁棒性 -\sec?已经启发将噪声作用于输入,作为数据集增强策略。 -对于某些模型,在模型的输入加上方差极小的噪音等价于对权重施加范数惩罚{cite?}。 -在一般情况下,噪声注入远比简单地收缩参数强大,特别是噪声被添加到隐藏单元时更加强大。 -向隐藏单元添加噪音是值得单独讨论重要的话题;在\sec?所述Dropout算法是这种做法的主要发展方向。 +\sec?已经提出将噪声作用于输入,作为数据集增强策略。 +对于某些模型而言,向输入添加方差极小的噪声等价于对权重施加范数惩罚{cite?}。 +在一般情况下,噪声注入远比简单地收缩参数强大,特别是噪声被添加到隐藏单元时会更加强大。 +向隐藏单元添加噪声是值得单独讨论重要的话题;在\sec?所述Dropout算法是这种做法的主要发展方向。 另一种正则化模型的噪声使用方式是将其加到的权重。 这项技术主要用于循环神经网络{cite?}。 -这可以解释为关于权重的贝叶斯推断的随机实现。 -使用贝叶斯处理学习过程将权重视为不确定的,并且可以通过概率分布表示这种不确定性。 +这可以被解释为关于权重的贝叶斯推断的随机实现。 +贝叶斯学习过程将权重视为不确定的,并且可以通过概率分布表示这种不确定性。 向权重添加噪声是反映这种不确定性的一种实用的随机方法。 -在某些假设下,施加于权重的噪声可以被解释为与更传统正则化形式等同,鼓励要学习的函数的稳定性。 +在某些假设下,施加于权重的噪声可以被解释为与更传统的正则化形式等同,鼓励要学习的函数保持稳定。 我们研究回归的情形,也就是训练将一组特征$\Vx$映射成一个标量的函数$\hat y(\Vx)$,并使用最小二乘代价函数衡量模型预测值$\hat y(\Vx)$与真实值$y$的误差: \begin{align} J = \SetE_{p(x,y)}[(\hat y(\Vx) - y)^2]. \end{align} -训练集包含$m$对标注样例$\{(\Vx^{(1)}, y^{(1)}),\dots,(\Vx^{(m)}, y^{(m)})\}$ +训练集包含$m$对标注样例$\{(\Vx^{(1)}, y^{(1)}),\dots,(\Vx^{(m)}, y^{(m)})\}$。 -现在我们假设在每个输入表示上添加网络权重的随机扰动$\epsilon_{\Vw} \sim \CalN(\Vepsilon;0, \eta\MI )$ +现在我们假设对每个输入表示,网络权重添加随机扰动$\epsilon_{\Vw} \sim \CalN(\Vepsilon;0, \eta\MI )$。 想象我们有一个标准的$l$层MLP。 我们将扰动模型记为$\hat y_{\epsilon_{\MW}} (\Vx)$。 -尽管有噪声注入,我们仍对减少网络输出误差的平方感兴趣。 +尽管有噪声注入,我们仍然希望减少网络输出误差的平方。 因此目标函数变为: \begin{align} \tilde J_{\MW} &= \SetE_{p(\Vx,y,\epsilon_{\MW})}[(\hat y_{\epsilon_{\MW}}(\Vx) - y)^2] \\ @@ -485,7 +485,7 @@ Dropout,一个将在\sec?描述的强大正则化策略,可以被看作通 $ \eta \SetE_{p(\Vx,y)}[\norm{\nabla_{\MW}~\hat y(\Vx)}^2]$。 这种形式的正则化鼓励参数进入权重小扰动对输出相对影响较小的参数空间区域。 换句话说,它推动模型进入对权重小的变化相对不敏感的区域,找到的点不只是极小点,还是由平坦区域所包围的最小点{cite?}。 -在简化的线性回归中(例如,$\hat y(\Vx) = \Vw^\top \Vx + b$),正则项退化为$ \eta \SetE_{p(\Vx)}[\norm{\Vx}^2]$,这与函数的参数无关,因此不会对$\tilde J_{\Vw}$关于模型参数的梯度有贡献。 +在简化的线性回归中(例如,$\hat y(\Vx) = \Vw^\top \Vx + b$),正则项退化为$ \eta \SetE_{p(\Vx)}[\norm{\Vx}^2]$,这与函数的参数无关,因此不会对$\tilde J_{\Vw}$关于模型参数的梯度有影响。 @@ -493,16 +493,16 @@ $ \eta \SetE_{p(\Vx,y)}[\norm{\nabla_{\MW}~\hat y(\Vx)}^2]$。 ## 向输出目标注入噪声 大多数数据集的$y$标签都有一定错误。 -当$y$是错误的,对最大化$\log p(y \mid \Vx)$会是有害的。 -为了防止这一点的一种方法是显式地对标签上的噪声进行建模。 -例如,我们可以假设,对于一些小常数$\epsilon$,训练集标记$y$是正确的概率是$1-\epsilon$,任何其他可能的标签可能是正确的。 -这个假设很容易就能解析地与代价函数结合,而不用显式地采噪声样本。 -例如, \textbf{标签平滑}(label smoothing)基于$k$个输出的softmax函数,把明确分类0和1替换成$\frac{\epsilon}{k-1}$和$1-\epsilon$,对模型进行正则化。 +错误的$y$不利于最大化$\log p(y \mid \Vx)$。 +避免这种情况的一种方法是显式地对标签上的噪声进行建模。 +例如,我们可以假设,对于一些小常数$\epsilon$,训练集标记$y$是正确的概率是$1-\epsilon$,(以$\epsilon$的概率)任何其他可能的标签可能是正确的。 +这个假设很容易就能解析地与代价函数结合,而不用显式地抽取噪声样本。 +例如,\textbf{标签平滑}(label smoothing)通过把确切分类目标从0和1替换成$\frac{\epsilon}{k-1}$和$1-\epsilon$,正则化具有$k$个输出的softmax函数的模型。 标准交叉熵损失可以用在这些非确切目标的输出上。 使用softmax函数和明确目标的最大似然学习可能永远不会收敛—— softmax函数永远无法真正预测0概率或1概率,因此它会继续学习越来越大的权重,使预测更极端。 使用如权重衰减等其他正则化策略能够防止这种情况。 -标签平滑的优势是能防止模型追求明确概率而不妨碍正确分类。 +标签平滑的优势是能够防止模型追求确切概率而不影响模型学习正确分类。 这种策略自20世纪80年代就已经被使用,并在现代神经网络继续保持显著特色{cite?}。 @@ -516,15 +516,15 @@ softmax函数永远无法真正预测0概率或1概率,因此它会继续学 学习表示的目的是使相同类中的样本有类似的表示。 无监督学习可以为如何在表示空间聚集样本提供有用线索。 在输入空间紧密聚集的样本应该被映射到类似的表示。 -许多情况下,新空间上的线性分类器可以达到较好的泛化{cite?}。 -这种方法长期存在的一个变种是应用主成分分析主成分分析作为分类前(在投影后的数据上分类)的预处理步骤。 +在许多情况下,新空间上的线性分类器可以达到较好的泛化{cite?}。 +这种方法的一个经典变种是使用主成分分析主成分分析作为分类前(在投影后的数据上分类)的预处理步骤。 -我们可以构建这样一个模型,其中生成模型$P(\RVx)$或$P(\RVx, \RVy)$与判别模型$P(\RVy \mid \RVx)$共享参数,而不用将无监督和监督部分分离。 -我们权衡监督准则 $-\log P(\RVy \mid \RVx)$和无监督或生成的准则(如$-\log P(\RVx)$或$-\log P(\RVx, \RVy)$)。 +我们可以构建这样一个模型,其中生成模型$P(\RVx)$或$P(\RVx, \RVy)$与判别模型$P(\RVy \mid \RVx)$共享参数,而不用分离无监督和监督部分。 +我们权衡监督模型准则 $-\log P(\RVy \mid \RVx)$和无监督或生成模型准则(如$-\log P(\RVx)$或$-\log P(\RVx, \RVy)$)。 生成模型准则表达了对监督学习问题解的特殊形式的先验知识{cite?},即$P(\RVx)$的结构通过某种共享参数的方式连接到$P(\RVy \mid \RVx)$。 -通过控制在总准则中的生成准则,我们可以找到比纯生成或纯判别训练准则更好的权衡{cite?}。 +通过控制在总准则中的生成准则,我们可以获得比纯生成或纯判别训练准则更好的权衡{cite?}。 -{Russ+Geoff-nips-2007}描述了一种学习回归核机器中核函数的方法,其中建模的$P(\RVx)$时使用的未标记样本大大提高了$P(\RVy \mid \RVx)$。 +{Russ+Geoff-nips-2007}描述了一种学习回归核机器中核函数的方法,其中建模$P(\RVx)$时使用的未标记样本大大提高了$P(\RVy \mid \RVx)$的效果。 更多半监督学习的信息,请参阅{SSL-Book-2006}。 @@ -535,7 +535,7 @@ softmax函数永远无法真正预测0概率或1概率,因此它会继续学 额外的训练样本以同样的方式将模型的参数推向泛化更好的方向,当模型的一部分在任务之间共享时,模型的这一部分更多地被约束为良好的值(假设共享是合理的),往往能更好地泛化。 \fig?展示了多任务学习中非常普遍的一种形式,其中不同的监督任务(给定$\RVx$预测$\RVy^{(i)}$)共享相同的输入$\RVx$以及一些中间层表示$\Vh^{(\text{share})}$,能学习共同的因素池。 -该模型通常可以分为两个部分并相关参数: +该模型通常可以分为两类相关的参数: \begin{enumerate} + 具体任务的参数 (只能从各自任务的样本中实现良好的泛化)。如\fig?中的上层。 + 所有任务共享的通用参数(从所有任务的汇集数据中获益)。如\fig?中的下层。 @@ -554,24 +554,24 @@ softmax函数永远无法真正预测0概率或1概率,因此它会继续学 } \end{figure} -因为共享参数,其统计强度可大大提高(共享参数的样本数量相对于单任务模式增加的比例),能改善泛化和泛化误差的范围{cite?}。 -当然,仅当不同的任务之间存在某些统计关系的假设是合理时才会发生,也就是意味着某些参数能通过不同任务共享。 +因为共享参数,其统计强度可大大提高(共享参数的样本数量相对于单任务模式增加的比例),并能改善泛化和泛化误差的范围{cite?}。 +当然,仅当不同的任务之间存在某些统计关系的假设是合理(意味着某些参数能通过不同任务共享)时才会发生这种情况。 -从深度学习的观点看,底层的先验知识如下:\emph{能解释数据变化(在与之相关联的不同任务中观察到)的因素中,一些是跨两个或更多任务共享的。} +从深度学习的观点看,底层的先验知识如下:\emph{能解释数据变化(在与之相关联的不同任务中观察到)的因素中,某些因素是跨两个或更多任务共享的。} # 提前终止 -当训练有足够的表示能力甚至会过度拟合的大模型时,我们经常观察到,训练误差会随着时间的推移逐渐降低但验证集的误差会再次上升。 +当训练有足够的表示能力甚至会过拟合任务的大模型时,我们经常观察到,训练误差会随着时间的推移逐渐降低但验证集的误差会再次上升。 \fig?是这些现象的一个例子,这种现象几乎一定会出现。 这意味着如果我们返回使验证集误差最低的参数设置,就可以获得更好的模型(因此,有希望获得更好的测试误差)。 在每次验证集误差有所改善后,我们存储模型参数的副本。 当训练算法终止时,我们返回这些参数而不是最新的参数。 -当验证集上的误差在事先指定的循环内没有进一步改善时,算法就会终止。 -此过程在\alg?有更正式的说明。 +当验证集上的误差在事先指定的循环次数内没有进一步改善时,算法就会终止。 +此过程在\alg?中有更正式的说明。 @@ -582,7 +582,7 @@ softmax函数永远无法真正预测0概率或1概率,因此它会继续学 \begin{algorithm}[ht] \caption{用于确定最佳训练时间量的提前终止元算法。 -这种元算法是一种通用策略,可以很好在各种训练算法和各种量化验证集误差的方法上工作。 +这种元算法是一种通用策略,可以很好地在各种训练算法和各种量化验证集误差的方法上工作。 } \begin{algorithmic} \STATE 令 $n$ 为评估间隔的步数。 @@ -615,17 +615,17 @@ softmax函数永远无法真正预测0概率或1概率,因此它会继续学 我们可以认为提前终止是非常高效的超参数选择算法。 按照这种观点,训练步数仅是另一个超参数。 -我们从\fig?可以看到的,这个超参数在验证集上的具有U形性能曲线。 +我们从\fig?可以看到,这个超参数在验证集上具有U型性能曲线。 很多控制模型容量的超参数在验证集上都是这样的U型性能曲线,如\fig?。 在提前终止的情况下,我们通过拟合训练集的步数来控制模型的有效容量。 -大多数超参数的选择必须使用昂贵的猜测和检查过程,我们需要在训练开始时猜测一个超参数,然后运行几个步骤检查它的训练效果。 +大多数超参数的选择必须使用高代价的猜测和检查过程,我们需要在训练开始时猜测一个超参数,然后运行几个步骤检查它的训练效果。 "训练时间"是唯一只要跑一次训练就能尝试很多值的超参数。 通过提前终止自动选择超参数的唯一显著的代价是训练期间要定期评估验证集。 -理想情况下,这可以并行在与主训练过程分离的机器上,或独立的CPU,或独立的GPU上完成。 +在理想情况下,这可以并行在与主训练过程分离的机器上,或独立的CPU,或独立的GPU上完成。 如果没有这些额外的资源,可以使用比训练集小的验证集或较不频繁地评估验证集来减小评估代价,较粗略地估算取得最佳的训练时间。 另一个提前终止的额外代价是需要保持最佳的参数副本。 -这种代价一般是可忽略的,因为将它储存在较慢较大的存储器上(例如,在GPU内存中训练,但将最佳参数存储在主存储器或磁盘驱动器上)。 +这种代价一般是可忽略的,因为可以将它储存在较慢较大的存储器上(例如,在GPU内存中训练,但将最佳参数存储在主存储器或磁盘驱动器上)。 由于最佳参数的写入很少发生而且从不在训练过程中读取,这些偶发的慢写入对总训练时间的影响不大。 \begin{figure}[!htb] @@ -642,32 +642,32 @@ softmax函数永远无法真正预测0概率或1概率,因此它会继续学 -提前终止是正则化非常不显眼的形式,它几乎不需要对基本训练过程、目标函数或一组允许的参数值进行变化。 +提前终止是一种非常不显眼的正则化形式,它几乎不需要改变基本训练过程、目标函数或一组允许的参数值。 这意味着,无需破坏学习动态就能很容易地使用提前终止。 -相对于权重衰减,必须小心不能使用太多的权重衰减,以防止网络陷入不良局部极小点(对应于病态的小权重)。 +相对于权重衰减,必须小心不能使用太多的权重衰减,以防网络陷入不良局部极小点(对应于病态的小权重)。 -提前终止可单独使用或与其他的正则化策略相结合。 -即使为鼓励更好泛化,使用修改目标函数的正则化策略,在训练目标的局部极小点达到最好泛化也是非常罕见的。 +提前终止可单独使用或与其他的正则化策略结合使用。 +即使为鼓励更好泛化,使用正则化策略改进目标函数,在训练目标的局部极小点达到最好泛化也是非常罕见的。 提前终止需要验证集,这意味着某些训练数据不能被馈送到模型。 -为了更好地利用这一额外的数据,我们可以使用提前终止进行初步训练之后,进行额外的训练。 +为了更好地利用这一额外的数据,我们可以在完成提前终止的首次训练之后,进行额外的训练。 在第二轮额外的训练步骤中,所有的训练数据都被包括在内。 -两个基本的策略可以用于第二轮训练过程。 +有两个基本的策略都可以用于第二轮训练过程。 -一种策略(\alg?)是再次初始化模型,然后使用所有数据再次训练。 +一个策略(\alg?)是再次初始化模型,然后使用所有数据再次训练。 在这个第二轮训练过程中,我们使用第一轮提前终止训练确定的最佳步数。 此过程有一些细微之处。 例如,我们没有办法知道重新训练时,对参数进行相同次数的更新和对数据集进行相同的遍数哪一个更好。 -由于训练集变大了,在第二轮训练时,每遍历一次数据集将会对应更多次的参数更新。 +由于训练集变大了,在第二轮训练时,每一次遍历数据集将会更多次地更新参数。 另一个策略是保持从第一轮训练获得的参数,然后使用全部的数据\emph{继续}训练。 在这个阶段,已经没有验证集指导我们需要在训练多少步后终止。 相反,我们可以监控验证集的平均损失函数,并继续训练,直到它低于提前终止过程终止时的目标值。 此策略避免了重新训练模型的高成本,但表现并没有那么好。 例如,验证集的目标不一定能达到之前的目标值,所以这种策略甚至不能保证终止。 -这个过程在\alg?中更正式地表述。 +我们会在\alg?中更正式地介绍这个过程。 提前终止对减少训练过程的计算成本也是有用的。 除了由于限制训练的迭代次数而明显减少的计算成本,还带来了正则化的益处(不需要添加惩罚项的代价函数或计算这种附加项的梯度)。 @@ -703,14 +703,14 @@ softmax函数永远无法真正预测0概率或1概率,因此它会继续学 -\paragraph{提前终止是如何充当正则化的:} -目前为止,我们已经声明提前终止是一种正则化策略,但我们只通过展示验证集误差的学习曲线是一个U形的来支持这种说法。 -提前终止正则化模型的真正机制是什么? +\paragraph{提前终止为何具有正则化效果:} +目前为止,我们已经声明提前终止是一种正则化策略,但我们只通过展示验证集误差的学习曲线是一个U型曲线来支持这种说法。 +提前终止正则化模型的真正机制是什么呢? {Bishop1995}和{Sjoberg95}认为提前终止可以将优化过程的参数空间限制在初始参数值$\Vtheta_0$的小邻域内。 更具体地,想象用学习率$\epsilon$进行$\tau$个优化步骤(对应于$\tau$个训练迭代)。 我们可以将$\epsilon \tau$作为有效容量的度量。 -假设梯度有界,限制迭代的次数和学习速率会限制从$\Vtheta_0$到达的参数空间大小,如\fig?所示。 -在这个意义上,$\epsilon \tau$的行为就好像它是权重衰减系数的倒数。 +假设梯度有界,限制迭代的次数和学习速率能够限制从$\Vtheta_0$到达的参数空间的大小,如\fig?所示。 +在这个意义上,$\epsilon \tau$的效果就好像是权重衰减系数的倒数。 \begin{figure}[!htb] \ifOpenSource @@ -719,17 +719,17 @@ softmax函数永远无法真正预测0概率或1概率,因此它会继续学 \centerline{\includegraphics[width=0.8\textwidth]{Chapter7/figures/reg_l1_vs_l2_mistake}} \fi \caption{提前终止效果的示意图。 -(左)实线轮廓线表示负对数似然的轮廓。 +\emph{(左)}实线轮廓线表示负对数似然的轮廓。 虚线表示从原点开始的SGD所经过的轨迹。 % ?? 提前终止的轨迹在较早的点$\tilde \Vw$处停止,而不是停止在最小化代价的点$\Vw^*$处。 -(右)为了对比,使用$L^2$正则化效果的示意图。 +\emph{(右)}为了对比,使用$L^2$正则化效果的示意图。 虚线圆圈表示$L^2$惩罚的轮廓,$L^2$惩罚使得总代价的最小值比非正则化代价的最小值更靠近原点。 } \end{figure} 事实上,在二次误差的简单线性模型和简单的梯度下降情况下,我们可以展示提前终止相当于$L^2$正则化。 -为了与经典$L^2$正则化比较,我们考察唯一的参数是线性权重($\Vtheta = \Vw$)的简单情形。 +为了与经典$L^2$正则化比较,我们只考察唯一的参数是线性权重($\Vtheta = \Vw$)的简单情形。 我们在权重$\Vw$的经验最佳值$\Vw^*$附近以二次近似建模代价函数 $J$: \begin{align} \hat J(\Vtheta) = J(\Vw^*) + \frac{1}{2} (\Vw- \Vw^*)^\top \MH (\Vw - \Vw^*), @@ -743,10 +743,10 @@ softmax函数永远无法真正预测0概率或1概率,因此它会继续学 -我们要研究训练时参数向量的轨迹。 -为简化起见,我们参数向量初始化为原点\footnote{对于神经网络,我们需要打破隐藏单元间的对称平衡因此不能将所有参数都初始化为$\mathbf{0}$(如\sec?所讨论的)。 +接下来我们研究训练时参数向量的轨迹。 +为简化起见,我们将参数向量初始化为原点\footnote{对于神经网络,我们需要打破隐藏单元间的对称平衡因此不能将所有参数都初始化为$\mathbf{0}$(如\sec?所讨论的)。 然而,对于其他任何初始值$\Vw_{(0)}$该论证都成立},也就是$\Vw^{(0)} = 0$。 -我们通过分析$\hat{J}$的梯度下降研究$J$上近似的梯度下降行为: +我们通过分析$\hat{J}$上的梯度下降来研究$J$上近似的梯度下降的效果: \begin{align} \Vw^{(\tau)} &= \Vw^{(\tau-1)} -\epsilon \nabla_{\Vw} \hat{J}( \Vw^{(\tau-1)} ) \\ &= \Vw^{(\tau-1)} - \epsilon \MH ( \Vw^{(\tau-1)} - \Vw^* ), \\ @@ -778,10 +778,10 @@ softmax函数永远无法真正预测0概率或1概率,因此它会继续学 也就是说,在这些假设下,训练迭代次数$\tau$起着与$L^2$参数成反比的作用,$\tau \epsilon$的倒数与权重衰减系数的作用类似。 对应显著曲率(目标函数)方向的参数值正则化小于小曲率方向。 -当然,在提前终止的情况下,这实际上意味着对应于显著曲率方向的参数比较小的曲率方向的参数学习得更早。 +当然,在提前终止的情况下,这实际上意味着对应于显著曲率方向的参数比较小的曲率方向的参数更早地停止学习。 本节中的推导表明长度为$\tau$的轨迹结束于$L^2$正则化目标的极小点。 -当然,提前终止比简单的轨迹长度限制更丰富;相反,提前终止通常涉及监控验证集的错误,以便在空间特别好的点处终止轨迹。 +当然,提前终止比简单的轨迹长度限制更丰富;相反,提前终止通常涉及监控验证集误差,以便在空间特别好的点处终止轨迹。 因此提前终止比权重衰减更具有优势,提前终止能自动确定正则化的正确量,而权重衰减需要多个训练实验测试其超参数的不同值。 @@ -792,26 +792,26 @@ softmax函数永远无法真正预测0概率或1概率,因此它会继续学 目前为止,本章讨论对参数添加约束或惩罚时,一直是相对于固定的区域或点。 例如,$L^2$正则化(或权重衰减)对参数偏离零的固定值进行惩罚。 然而,有时我们可能需要其他的方式来表达我们对模型参数适当值的先验知识。 -有时候,我们可能无法准确地知道应该采取什么样的参数,但我们从领域和模型结构方面的知识得知模型参数之间应该存在一些相关性。 +有时候,我们可能无法准确地知道应该使用什么样的参数,但我们根据领域和模型结构方面的知识得知模型参数之间应该存在一些相关性。 -我们经常想要表达的常见类型的依赖之一是某些参数应当彼此接近。 +我们经常想要表达的一种常见依赖是某些参数应当彼此接近。 考虑以下情形:我们有两个模型执行相同的分类任务(具有相同类别),但输入分布稍有不同。 形式地,我们有参数为$\Vw^{(A)}$的模型$A$和参数为$\Vw^{(B)}$的模型$B$。 这两种模型将输入映射到两个不同但相关的输出:$\hat y^{(A)} = f(\Vw^{(A)}, \Vx)$和$\hat y^{(B)} = f(\Vw^{(B)}, \Vx)$。 -我们可以想象,这些任务足够相似(或许具有相似的输入和输出分布),因此我们认为模型参数应彼此靠近: +我们可以想象,这些任务会足够相似(或许具有相似的输入和输出分布),因此我们认为模型参数应彼此靠近: $\forall i, w_i^{(A)}$应该与$ w_i^{(B)}$接近。 我们可以通过正则化利用此信息。 具体来说,我们可以使用以下形式的参数范数惩罚: $\Omega(\Vw^{(A)}, \Vw^{(B)}) = \norm{\Vw^{(A)}-\Vw^{(B)}}_2^2$。 在这里我们使用$L^2$惩罚,但也可以使用其他选择。 -这种方法由{LasserreJ2006}提出,正则化一个模型(监督模式下训练的分类器)的参数接近另一个无监督模式下训练的模型(捕捉观察到的输入数据的分布)。 -这样构造的架构使得许多分类模型中的参数能与之对应的无监督模型的参数匹配。 +这种方法由{LasserreJ2006}提出,正则化一个模型(监督模式下训练的分类器)的参数,使其接近另一个无监督模式下训练的模型(捕捉观察到的输入数据的分布)的参数。 +这种构造架构使得许多分类模型中的参数能与之对应的无监督模型的参数匹配。 -参数范数惩罚是正则化参数彼此接近的一种方式,在更流行的方法是使用约束:强迫某些集合中的参数相等。 +参数范数惩罚是正则化参数使其彼此接近的一种方式,而更流行的方法是使用约束:\emph{强迫某些参数相等}。 由于我们将各种模型或模型组件解释为共享唯一的一组参数,这种正则化方法通常被称为参数共享。 -参数共享相对于正则化参数接近(通过范数惩罚)的一个显著优点是,只有参数(唯一一个集合)的子集需要被存储在内存中。 +和正则化参数使其接近(通过范数惩罚)相比,参数共享的一个显著优点是,只有参数(唯一一个集合)的子集需要被存储在内存中。 对于某些特定模型,如卷积神经网络,这可能可以显著减少模型所占用的内存。 @@ -819,17 +819,17 @@ $\Omega(\Vw^{(A)}, \Vw^{(B)}) = \norm{\Vw^{(A)}-\Vw^{(B)}}_2^2$。 ## 卷积神经网络 -目前为止,最流行和广泛使用的参数共享出现在应用于计算机视觉的卷积神经网络。 +目前为止,最流行和广泛使用的参数共享出现在应用于计算机视觉的卷积神经网络中。 自然图像有许多统计属性是对转换不变的。 例如,猫的照片即使向右边移了一个像素,仍保持猫的照片。 -CNN通过在图像多个位置共享参数考虑这个特性。 -相同的特征(具有相同权重的隐藏单元)在输入的不同位置上计算。 +CNN通过在图像多个位置共享参数来考虑这个特性。 +相同的特征(具有相同权重的隐藏单元)在输入的不同位置上计算获得。 这意味着无论猫出现在图像中的第$i$列或$i + 1$列,我们都可以使用相同的猫探测器找到猫。 -参数共享显著降低CNN模型不同参数的数量,并显著提高了网络的大小而不需要增加相应的训练数据。 +参数共享显著降低了CNN模型的参数数量,并显著提高了网络的大小而不需要相应地增加训练数据。 它仍然是将领域知识有效地整合到网络架构的最佳范例之一。 -卷积神经网络将会在\chap?更详细地讨论。 +我们将会在\chap?中更详细地讨论卷积神经网络。 # 稀疏表示 @@ -969,7 +969,7 @@ Bagging训练程序通过替换采样构建这些数据集。 \end{figure} 神经网络的解能达到足够多的变化意味着他们可以从模型平均中受益(即使所有模型都在同一数据集上训练)。 -神经网络中随机初始化的差异、minibatch的随机选择、超参数的差异或不同输出的非确定性实现往往足以引起集成中不同成员的误差部分独立。 +神经网络中随机初始化的差异、小批量的随机选择、超参数的差异或不同输出的非确定性实现往往足以引起集成中不同成员的误差部分独立。 @@ -1016,8 +1016,8 @@ Dropout提供了一种廉价的Bagging集成近似,能够训练和评估指数 回想一下使用Bagging学习,我们定义$k$个不同的模型,从训练集有替换采样构造$k$个不同的数据集,然后在训练集$i$上训练模型$i$。 Dropout的目标是在指数级数量的神经网络上近似这个过程。 -具体来说,训练中使用Dropout,我们使用基于minibatch的学习算法和小的步长,如梯度下降等。 -我们每次在minibatch加载一个样本,然后随机抽样应用于网络中所有输入和隐藏单元的不同二值掩码。 +具体来说,训练中使用Dropout,我们使用基于小批量的学习算法和小的步长,如梯度下降等。 +我们每次在小批量加载一个样本,然后随机抽样应用于网络中所有输入和隐藏单元的不同二值掩码。 对于每个单元,掩码是独立采样的。 掩码值为1的采样概率(导致包含一个单元)是训练开始前固定一个超参数。 它不是模型当前参数值或输入样本的函数。 @@ -1069,7 +1069,7 @@ Bagging集成必须从所有成员的累积投票做一个预测。 在Dropout的情况下,通过掩码 $\Vmu$定义每个子模型的概率分布$p(y \mid \Vx, \Vmu)$。 关于所有掩码的算术平均值由下式给出 \begin{align} - \sum_{u} p(\Vmu) p(y \mid \Vx, \Vmu), + \sum_{\Vmu} p(\Vmu) p(y \mid \Vx, \Vmu), \end{align} 其中$p(\Vmu)$是训练时采$\Vmu$的概率分布。 @@ -1204,7 +1204,7 @@ Dropout的另一个显著优点是不怎么限制适用的模型或训练过程 Dropout Boosting训练整个集成以最大化训练集上的似然。 在相同意义上,传统的Dropout类似于Bagging,这种方式类似于Boosting。 如预期一样,比较单一模型训练整个网络的情况,Dropout Boosting几乎没有正则化效果。 -这表明,Dropout Bagging的解释超过Dropout作为稳健性噪音的解释。 +这表明,Dropout Bagging的解释超过Dropout作为稳健性噪声的解释。 当随机抽样的集成成员相互独立地训练好后,Bagging集成的正则化效果才能达到。 Dropout启发其他以随机方法训练指数量级的共享权重的集成。 @@ -1251,9 +1251,9 @@ Dropout的另一个重要方面是噪声是乘性的。 -另一种深度学习算法——batch normalization,在训练时向隐藏单元引入加性和乘性噪声重参数化模型。 -batch normalization的主要目的是改善优化,但噪音具有正则化的效果,有时使Dropout变得没有必要。 -batch normalization将会在\sec?更详细地讨论。 +另一种深度学习算法——批标准化,在训练时向隐藏单元引入加性和乘性噪声重参数化模型。 +批标准化的主要目的是改善优化,但噪声具有正则化的效果,有时使Dropout变得没有必要。 +批标准化将会在\sec?更详细地讨论。 diff --git a/docs/_posts/2016-12-08-Chapter8_optimization_for_training_deep_models.md b/docs/_posts/2016-12-08-Chapter8_optimization_for_training_deep_models.md index bef850b..5588e63 100644 --- a/docs/_posts/2016-12-08-Chapter8_optimization_for_training_deep_models.md +++ b/docs/_posts/2016-12-08-Chapter8_optimization_for_training_deep_models.md @@ -5,7 +5,7 @@ share: false --- 深度学习算法在许多情况下都涉及到优化。 -例如,模型中的进行推断(如PCA)涉及到求解优化问题。 +例如,模型中的进行推断(如\,PCA)涉及到求解优化问题。 我们经常使用解析优化去证明或设计算法。 在深度学习涉及到的诸多优化问题中,最难的是神经网络训练。 甚至是用几百台机器投入几天到几个月来解决单个神经网络训练问题,也是很常见的。 @@ -54,7 +54,7 @@ share: false \eqn?定义了训练集上的目标函数。 -通常,我们更希望最小化取自\emph{数据生成分布}$p_{\text{data}}$的期望,而不仅仅是有限训练集上的对应目标函数: +通常,我们更希望最小化取自\emph{数据生成分布}\,$p_{\text{data}}$的期望,而不仅仅是有限训练集上的对应目标函数: \begin{equation} J^*(\Vtheta) = \SetE_{(\RVx, \RSy) \sim p_\text{data}} L(f(\Vx ;\Vtheta),y). % ?? \end{equation} @@ -73,7 +73,7 @@ share: false 将机器学习问题转化回一个优化问题的最简单方法是最小化训练集上的期望损失。 -这意味着用训练集上的经验分布$\hat{p}(\Vx,y)$替代真实分布$p(\Vx,y)$。 +这意味着用训练集上的经验分布\,$\hat{p}(\Vx,y)$替代真实分布$p(\Vx,y)$。 现在,我们将最小化经验风险: \begin{equation} \SetE_{\RVx, \RSy \sim \hat{p}_\text{data}} [L(f(\Vx ; \Vtheta), y)] % ?? \RVx @@ -163,10 +163,10 @@ share: false -回想一下,$n$个样本均值的标准误差(\eqn?)是$\sigma/\sqrt{n}$,其中$\sigma$是样本值真实的标准差。 +回想一下,$n$个样本均值的标准差(\eqn?)是$\sigma/\sqrt{n}$,其中$\sigma$是样本值真实的标准差。 分母$\sqrt{n}$表明使用更多样本来估计梯度的方法的回报是低于线性的。 比较两个假想的梯度计算,一个基于$100$个样本,另一个基于$10,000$个样本。 -后者需要的计算量是前者的$100$倍,但却只降低了$10$倍的均值标准误差。 +后者需要的计算量是前者的$100$倍,但却只降低了$10$倍的均值标准差。 如果能够快速地计算出梯度估计值,而不是缓慢地计算准确值,那么大多数优化算法会收敛地更快(就总的计算量而言,而不是指更新次数)。 @@ -207,7 +207,7 @@ share: false 对于很多硬件设施,这是批量大小的限制因素。 + 在某些硬件上使用特定大小的数组时,运行时间会更少。 - 尤其是在使用GPU时,通常使用$2$的幂数作为批量大小可以获得更少的运行时间。 + 尤其是在使用\,GPU\,时,通常使用$2$的幂数作为批量大小可以获得更少的运行时间。 一般,$2$的幂数的取值范围是$32$到$256$,$16$有时在尝试大模型时使用。 + @@ -290,7 +290,7 @@ share: false \hat{\Vg} = \frac{1}{m} \nabla_{\Vtheta} \sum_i L(f(\Vx^{(i)};\Vtheta),y^{(i)} ). \end{equation} 以此获得泛化误差准确梯度的无偏估计。 -最后,在泛化误差上使用SGD方法在方向$\hat{\Vg}$上更新$\Vtheta$。 +最后,在泛化误差上使用\,SGD\,方法在方向$\hat{\Vg}$上更新$\Vtheta$。 @@ -304,7 +304,7 @@ share: false 随着数据集的规模迅速增长,超越了计算能力的增速, 机器学习应用每个样本只使用一次的情况变得越来越常见,甚至是不完整地使用训练集。 在使用一个非常大的训练集时,过拟合不再是问题,而欠拟合和计算效率变成了主要的顾虑。 -读者也可以参考{bottou-bousquet-2008}中关于训练样本数目增长时,泛化误差上计算瓶颈影响的讨论。 +读者也可以参考~{bottou-bousquet-2008}中关于训练样本数目增长时,泛化误差上计算瓶颈影响的讨论。 @@ -324,7 +324,7 @@ share: false ## 病态 在优化凸函数时,会遇到一些挑战。 -这其中最突出的是Hessian矩阵$\MH$的病态。 +这其中最突出的是\,Hessian\,矩阵$\MH$的病态。 这是数值优化、凸优化或其他形式的优化中普遍存在的问题,更多细节请回顾\sec?。 @@ -366,7 +366,7 @@ share: false 尽管病态还存在于除了神经网络训练的其他情况中,有些适用于其他情况的解决病态的技术并不适用于神经网络。 -例如,牛顿法在解决带有病态条件的Hessian矩阵的凸优化问题时,是一个非常优秀的工具, +例如,牛顿法在解决带有病态条件的\,Hessian\,矩阵的凸优化问题时,是一个非常优秀的工具, 但是我们将会在以下小节中说明牛顿法运用到神经网络时需要很大的改动。 @@ -436,26 +436,26 @@ share: false 对于很多高维非凸函数而言,局部极小值(以及极大值)事实上都远少于另一类梯度为零的点:鞍点。 鞍点附近的某些点比鞍点有更大的代价,而其他点则有更小的代价。 -在鞍点处,Hessian矩阵同时具有正负特征值。 +在鞍点处,Hessian\,矩阵同时具有正负特征值。 位于正特征值对应的特征向量方向的点比鞍点有更大的代价,反之,位于负特征值对应的特征向量方向的点有更小的代价。 我们可以将鞍点视为代价函数某个横截面上的局部极小点,同时也可以视为代价函数某个横截面上的局部极大点。 -\fig?给了一个示例。 +\fig?\,给了一个示例。 多类随机函数表现出以下性质:低维空间中,局部极小值很普遍。 在更高维空间中,局部极小值很罕见,而鞍点则很常见。 对于这类函数$f:\SetR^n \to \SetR$而言,鞍点和局部极小值的数目比率的期望随$n$指数级增长。 -我们可以从直觉上理解这种现象——Hessian矩阵在局部极小点处只有正特征值。 -而在鞍点处,Hessian矩阵则同时具有正负特征值。 +我们可以从直觉上理解这种现象——Hessian\,矩阵在局部极小点处只有正特征值。 +而在鞍点处,Hessian\,矩阵则同时具有正负特征值。 试想一下,每个特征值的正负号由抛硬币决定。 在一维情况下,很容易抛硬币得到正面朝上一次而获取局部极小点。 在$n$-维空间中,要抛掷$n$次硬币都正面朝上的难度是指数级的。 -具体可以参看{Dauphin-et-al-NIPS2014-small},它回顾了相关的理论工作。 +具体可以参考~{Dauphin-et-al-NIPS2014-small},它回顾了相关的理论工作。 -很多随机函数一个惊人性质是,当我们到达代价较低的区间时,Hessian矩阵的特征值为正的可能性更大。 +很多随机函数一个惊人性质是,当我们到达代价较低的区间时,Hessian\,矩阵的特征值为正的可能性更大。 和抛硬币类比,这意味着如果我们处于低代价的临界点时,抛掷硬币正面朝上$n$次的概率更大。 这也意味着,局部极小值具有低代价的可能性比高代价要大得多。 具有高代价的临界点更有可能是鞍点。 @@ -479,7 +479,7 @@ share: false 对于只使用梯度信息的一阶优化算法而言,目前情况还不清楚。 鞍点附近的梯度通常会非常小。 另一方面,实验中梯度下降似乎可以在许多情况下逃离鞍点。 -{GoodfellowOptimization15}可视化了最新神经网络的几个学习轨迹,\fig?给了一个例子。 +{GoodfellowOptimization15}可视化了最新神经网络的几个学习轨迹,\fig?\,给了一个例子。 这些可视化显示,在突出的鞍点附近,代价函数都是平坦的,权重都为零。 但是他们也展示了梯度下降轨迹能够迅速逸出该区间。 {GoodfellowOptimization15}也主张,应该可以通过分析来表明连续时间的梯度下降会逃离而不是吸引到鞍点,但对梯度下降更现实的使用场景来说,情况或许会有所不同。 @@ -498,9 +498,9 @@ share: false 这些可视化对应用于真实对象识别和自然语言处理任务的前馈神经网络、卷积网络和循环网络而言是类似的。 令人惊讶的是,这些可视化通常不会显示出很多明显的障碍。 大约2012年,在随机梯度下降开始成功训练非常大的模型之前,相比这些投影所显示的神经网络代价函数的表面通常被认为有更多的非凸结构。 -该投影所显示的主要障碍是初始参数附近的高代价鞍点,但如由蓝色路径所示,SGD训练轨迹能轻易地逃脱该鞍点。 -大多数训练时间花费在横穿代价函数中相对平坦的峡谷,可能由于梯度中的高噪声、或该区域中Hessian矩阵的病态条件,或者需要经过间接的弧路径绕过图中可见的高"山" 。 -图经{GoodfellowOptimization15}许可改编。 +该投影所显示的主要障碍是初始参数附近的高代价鞍点,但如由蓝色路径所示,SGD\,训练轨迹能轻易地逃脱该鞍点。 +大多数训练时间花费在横穿代价函数中相对平坦的峡谷,可能由于梯度中的高噪声、或该区域中\,Hessian\,矩阵的病态条件,或者需要经过间接的弧路径绕过图中可见的高"山" 。 +图经~{GoodfellowOptimization15}许可改编。 } \end{figure} @@ -524,7 +524,7 @@ share: false 也可能存在恒值的、宽且平坦的区域。 -在这些区域,梯度和Hessian矩阵都是零。 +在这些区域,梯度和\,Hessian\,矩阵都是零。 这种退化的情形是所有数值优化算法的主要问题。 在凸问题中,一个宽而平坦的区间肯定包含全局极小值,但是对于一般的优化问题而言, 这样的区域可能会对应着目标函数中一个较高的值。 @@ -605,7 +605,7 @@ share: false ## 非精确梯度 -大多数优化算法的先决条件都是我们知道精确的梯度或是Hessian矩阵。 +大多数优化算法的先决条件都是我们知道精确的梯度或是\,Hessian\,矩阵。 在实践中,通常这些量会有噪声,甚至是有偏的估计。 几乎每一个深度学习算法都需要基于采样的估计,至少使用训练样本的小批量来计算梯度。 @@ -644,7 +644,7 @@ share: false \fig?表明神经网络通常不会到达梯度很小的区域。 甚至,这些临界点不一定存在。 例如,损失函数 $-\log p(y\mid\Vx;\Vtheta)$ 可以没有全局最小点,而是当随着训练模型逐渐稳定后,渐近地收敛于某个值。 -对于具有离散的$y$和~softmax分布$p(y\mid\Vx)$的分类器而言,若模型能够正确分类训练集上的每个样本,则负对数似然可以无限趋近但不会等于零。 +对于具有离散的$y$和\,softmax\,分布$p(y\mid\Vx)$的分类器而言,若模型能够正确分类训练集上的每个样本,则负对数似然可以无限趋近但不会等于零。 同样地,实值模型$p(y\mid\Vx) = \mathcal{N}(y;f(\Vtheta),\beta^{-1})$的负对数似然会趋向于负无穷——如果$f(\Vtheta)$能够正确预测所有训练集中的目标$y$,学习算法会无限制地增加$\beta$。 \fig?给出了一个失败的例子,即使没有局部极小值和鞍点,该例还是不能从局部优化中找到一个良好的代价函数值。 @@ -739,7 +739,7 @@ share: false \begin{algorithm}[ht] -\caption{随机梯度下降(SGD)在第$k$个训练迭代的更新} +\caption{随机梯度下降(SGD)在第$k$个训练迭代的更新} \begin{algorithmic} \REQUIRE 学习率 $\epsilon_k$ \REQUIRE 初始参数$\Vtheta$ @@ -756,15 +756,15 @@ share: false -SGD算法中的一个关键参数是学习率。 -之前,我们介绍的SGD使用固定的学习率。 +SGD\,算法中的一个关键参数是学习率。 +之前,我们介绍的\,SGD\,使用固定的学习率。 在实践中,有必要随着时间的推移逐渐降低学习率,因此我们将第$k$步迭代的学习率记作$\epsilon_k$。 -这是因为SGD中梯度估计引入的噪声源($m$个训练样本的随机采样)并不会在极小点处消失。 +这是因为\,SGD\,中梯度估计引入的噪声源($m$个训练样本的随机采样)并不会在极小点处消失。 相比之下,当我们使用批量梯度下降到达极小点时,整个代价函数的真实梯度会变得很小,之后为$\mathbf{0}$,因此批量梯度下降可以使用固定的学习率。 -保证SGD收敛的一个充分条件是 +保证\,SGD\,收敛的一个充分条件是 \begin{equation} \sum_{k=1}^\infty \epsilon_k = \infty, \end{equation} @@ -791,7 +791,7 @@ SGD算法中的一个关键参数是学习率。 通常$\epsilon_\tau$应设为大约$\epsilon_0$的$1\%$。 主要问题是如何设置$\epsilon_0$。 若$\epsilon_0$太大,学习曲线将会剧烈振荡,代价函数值通常会明显增加。 -温和的振荡是良好的,容易在训练随机代价函数(例如使用Dropout的代价函数)时出现。 +温和的振荡是良好的,容易在训练随机代价函数(例如使用\,Dropout\,的代价函数)时出现。 如果学习率太小,那么学习过程会很缓慢。 如果初始学习率太低,那么学习可能会卡在一个相当高的代价值。 通常,就总训练时间和最终代价值而言,最优初始学习率的效果会好于大约迭代$100$次左右后最佳的效果。 @@ -799,28 +799,28 @@ SGD算法中的一个关键参数是学习率。 -SGD及相关的小批量亦或更广义的基于梯度优化的在线学习算法,一个重要的性质是每一步更新的计算时间不依赖训练样本数目的多寡。 +SGD\,及相关的小批量亦或更广义的基于梯度优化的在线学习算法,一个重要的性质是每一步更新的计算时间不依赖训练样本数目的多寡。 即使训练样本数目非常大时,它们也能收敛。 -对于足够大的数据集,SGD可能会在处理整个训练集之前就收敛到最终测试集误差的某个固定容差范围内。 +对于足够大的数据集,SGD\,可能会在处理整个训练集之前就收敛到最终测试集误差的某个固定容差范围内。 研究优化算法的收敛率,一般会衡量额外误差 $J(\Vtheta) - \min_{\Vtheta} J(\Vtheta)$,即当前代价函数超出最低可能代价的量。 -SGD应用于凸问题时,$k$步迭代后的额外误差量级是$O(\frac{1}{\sqrt{k}})$,在强凸情况下是$O(\frac{1}{k})$。 +SGD\,应用于凸问题时,$k$步迭代后的额外误差量级是$O(\frac{1}{\sqrt{k}})$,在强凸情况下是$O(\frac{1}{k})$。 除非假定额外的条件,否则这些界限不能进一步改进。 批量梯度下降在理论上比随机梯度下降有更好的收敛率。 然而,Cram\'er-Rao界限~{cite?}指出,泛化误差的下降速度不会快于$O(\frac{1}{k})$。 {bottou-bousquet-2008-small}因此认为对于机器学习任务,不值得探寻收敛快于$O(\frac{1}{k})$的优化算法——更快的收敛可能对应着过拟合。 此外,渐近分析掩盖了随机梯度下降在少量更新步之后的很多优点。 -对于大数据集,SGD只需非常少量样本计算梯度从而实现初始快速更新,远远超过了其缓慢的渐近收敛。 +对于大数据集,SGD\,只需非常少量样本计算梯度从而实现初始快速更新,远远超过了其缓慢的渐近收敛。 本章剩余部分介绍的大多数算法在实践中都受益于这种性质,但是损失了常数倍$O(\frac{1}{k})$的渐近分析。 我们也可以在学习过程中逐渐增大小批量的大小,以此权衡批量梯度下降和随机梯度下降两者的优点。 -了解SGD更多的信息,请参看{Bottou98}。 +了解\,SGD\,更多的信息,请查看~{Bottou98}。 @@ -842,9 +842,9 @@ SGD应用于凸问题时,$k$步迭代后的额外误差量级是$O(\frac{1}{\s \else \centerline{\includegraphics{Chapter8/figures/momentum_color}} \fi -\caption{动量的主要目的是解决两个问题:Hessian矩阵的病态条件和随机梯度的方差。 +\caption{动量的主要目的是解决两个问题:Hessian\,矩阵的病态条件和随机梯度的方差。 我们通过此图说明动量如何克服这两个问题的第一个。 -等高线描绘了一个二次损失函数(具有病态条件的Hessian矩阵)。 +等高线描绘了一个二次损失函数(具有病态条件的\,Hessian\,矩阵)。 横跨轮廓的红色路径表示动量学习规则所遵循的路径,它使该函数最小化。 我们在该路径的每个步骤画一个箭头,表示梯度下降将在该点采取的步骤。 我们可以看到,一个病态条件的二次目标函数看起来像一个长而窄的山谷或具有陡峭边的峡谷。 @@ -868,14 +868,14 @@ SGD应用于凸问题时,$k$步迭代后的额外误差量级是$O(\frac{1}{\s \end{align} 速度$\Vv$累积了梯度元素$\nabla_{\Vtheta}( \frac{1}{m} \sum_{i=1}^m L( \Vf(\Vx^{(i)}; \Vtheta), \Vy^{(i)} ) )$。 相对于$\epsilon$,$\alpha$越大,之前梯度对现在方向的影响也越大。 -带动量的SGD算法如\alg?所示。 +带动量的\,SGD\,算法如\alg?所示。 \begin{algorithm}[ht] -\caption{使用动量的随机梯度下降(SGD)} +\caption{使用动量的随机梯度下降(SGD)} \begin{algorithmic} \REQUIRE 学习率 $\epsilon$, 动量参数 $\alpha$ \REQUIRE 初始参数 $\Vtheta$,初始速度 $\Vv$ @@ -982,13 +982,13 @@ SGD应用于凸问题时,$k$步迭代后的额外误差量级是$O(\frac{1}{\s Nesterov 动量和标准动量之间的区别体现在梯度计算上。 Nesterov 动量中,梯度计算在施加当前速度之后。 因此,Nesterov 动量可以解释为往标准动量方法中添加了一个\emph{校正因子}。 -完整的Nesterov 动量算法如\alg?所示。 +完整的\,Nesterov 动量算法如\alg?所示。 \begin{algorithm}[ht] -\caption{使用Nesterov 动量的随机梯度下降(SGD)} +\caption{使用\,Nesterov 动量的随机梯度下降(SGD)} \begin{algorithmic} \REQUIRE 学习率 $\epsilon$, 动量参数 $\alpha$ \REQUIRE 初始参数 $\Vtheta$,初始速度 $\Vv$ @@ -1008,7 +1008,7 @@ Nesterov 动量中,梯度计算在施加当前速度之后。 -在凸批量梯度的情况下,Nesterov 动量将额外误差收敛率从$O(1/k)$($k$步后)改进到$O(1/k^2)$,如{Nesterov83b}所示。 +在凸批量梯度的情况下,Nesterov 动量将额外误差收敛率从$O(1/k)$($k$步后)改进到$O(1/k^2)$,如~{Nesterov83b}所示。 可惜,在随机梯度的情况下,Nesterov 动量没有改进收敛率。 @@ -1039,7 +1039,7 @@ Nesterov 动量中,梯度计算在施加当前速度之后。 也许完全确知的唯一特性是初始参数需要在不同单元间"破坏对称性"。 如果具有相同激活函数的两个隐藏单元连接到相同的输入,那么这些单元必须具有不同的初始参数。 如果它们具有相同的初始参数,然后应用到确定性损失和模型的确定性学习算法将一直以相同的方式更新这两个单元。 -即使模型或训练算法能够使用随机性为不同的单元计算不同的更新(例如使用Dropout的训练),通常来说,最好还是初始化每个单元使其和其他单元计算不同的函数。 +即使模型或训练算法能够使用随机性为不同的单元计算不同的更新(例如使用\,Dropout的训练),通常来说,最好还是初始化每个单元使其和其他单元计算不同的函数。 这或许有助于确保没有输入模式丢失在前向传播的零空间中,没有梯度模式丢失在反向传播的零空间中。 每个单元计算不同函数的目标促使了参数的随机初始化。 我们可以明确地搜索一大组彼此互不相同的基函数,但这经常会导致明显的计算代价。 @@ -1084,7 +1084,7 @@ Nesterov 动量中,梯度计算在施加当前速度之后。 有些启发式方法可用于选择权重的初始大小。 一种初始化$m$个输入和$n$输出的全连接层的权重的启发式方法是从分布$U(-\frac{1}{\sqrt{m}}, \frac{1}{\sqrt{m}})$中采样权重, -而{Glorot+al-AI-2011-small}建议使用标准初始化, % ? +而~{Glorot+al-AI-2011-small}建议使用标准初始化, % ? \begin{equation} W_{i,j} \sim U \left(-\sqrt{\frac{6}{m+n}}, \sqrt{\frac{6}{m+n}}\right) . \end{equation} @@ -1094,7 +1094,7 @@ Nesterov 动量中,梯度计算在施加当前速度之后。 -{Saxe-et-al-ICLR13}推荐初始化为随机正交矩阵,仔细挑选负责每一层非线性缩放或\textbf{增益}(gain)因子$g$。 +{Saxe-et-al-ICLR13}推荐初始化为随机正交矩阵,仔细挑选负责每一层非线性缩放或\,\textbf{增益}(gain)因子$g$。 他们得到了用于不同类型的非线性激活函数的特定缩放因子。 这种初始化方案也是启发于不含非线性的矩阵相乘序列的深度网络。 在该模型下,这个初始化方案保证了达到收敛所需的训练迭代总数独立于深度。 @@ -1122,7 +1122,7 @@ Nesterov 动量中,梯度计算在施加当前速度之后。 这个想法保持该单元输入的总数量独立于输入数目$m$,而不使单一权重元素的大小随$m$缩小。 稀疏初始化有助于实现单元之间在初始化时更具多样性。 但是,它也非常偏好于具有很大高斯值的权重。 -因为梯度下降需要很长时间缩小"不正确"的大值,这个初始化方案可能会导致某些单元出问题,例如maxout单元有几个过滤器,互相之间必须仔细调整。 +因为梯度下降需要很长时间缩小"不正确"的大值,这个初始化方案可能会导致某些单元出问题,例如\,maxout\,单元有几个过滤器,互相之间必须仔细调整。 @@ -1134,7 +1134,7 @@ Nesterov 动量中,梯度计算在施加当前速度之后。 通过重复识别具有小得不可接受的激活值的第一层,并提高其权重,最终有可能得到一个初始激活全部合理的网络。 如果学习在这点上仍然很慢,观测梯度的幅度或标准差可能也会有所帮助。 这个过程原则上是自动的,且通常计算量低于基于验证集误差的超参数优化,因为它是基于初始模型在单批数据上的行为反馈,而不是在验证集上训练模型的反馈。 -由于这个协议很长时间都被启发式使用,最近{mishkin2015all}更正式地研究了该协议。 +由于这个协议很长时间都被启发式使用,最近~{mishkin2015all}更正式地研究了该协议。 @@ -1169,7 +1169,7 @@ Nesterov 动量中,梯度计算在施加当前速度之后。 在这种情况下,我们有一个单元输出$u$,另一个单元$h\in[0,1]$,那么我们可以将$h$视作门,以决定$uh\approx 1$还是$uh\approx 0$。 在这种情形下,我们希望设置偏置 $h$,使得在初始化的大多数情况下$h\approx 1$。 否则,$u$没有机会学习。 -例如,{Jozefowicz-et-al-ICML2015}提议设置LSTM模型遗忘门的偏置为$1$,如\sec?所述。 +例如,{Jozefowicz-et-al-ICML2015}提议设置\,LSTM\,模型遗忘门的偏置为$1$,如\sec?所述。 @@ -1205,7 +1205,7 @@ Nesterov 动量中,梯度计算在施加当前速度之后。 -delta-bar-delta算法{cite?}是一个早期的在训练时适应模型参数各自学习率的启发式方法。 +\textbf{Delta-bar-delta}算法{cite?}是一个早期的在训练时适应模型参数各自学习率的启发式方法。 该方法基于一个很简单的想法,如果损失对于某个给定模型参数的偏导保持相同的符号,那么学习率应该增加。如果对于该参数的偏导变化了符号,那么学习率应减小。 当然,这种方法只能应用于全批量优化中。 @@ -1228,7 +1228,7 @@ AdaGrad算法,如\alg?所示,独立地适应所有模型参数的学习率 在凸优化背景中,AdaGrad 算法具有一些令人满意的理论性质。 然而,经验上已经发现,对于训练深度神经网络模型而言,\emph{从训练开始时}积累梯度平方会导致有效学习率过早和过量的减小。 -AdaGrad在某些深度学习模型上效果不错,但不是全部。 +AdaGrad\,在某些深度学习模型上效果不错,但不是全部。 \begin{algorithm}[ht] @@ -1255,7 +1255,7 @@ AdaGrad在某些深度学习模型上效果不错,但不是全部。 ## RMSProp \textbf{RMSProp}算法{cite?}修改AdaGrad以在非凸设定下效果更好,改变梯度积累为指数加权的移动平均。 -AdaGrad旨在应用于凸问题时快速收敛。 +AdaGrad\,旨在应用于凸问题时快速收敛。 当应用于非凸函数训练神经网络时,学习轨迹可能穿过了很多不同的结构,最终到达一个局部是凸碗的区域。 AdaGrad根据平方梯度的整个历史收缩学习率,可能使得学习率在达到这样的凸结构前就变得太小了。 RMSProp使用指数衰减平均以丢弃遥远过去的历史,使其能够在找到凸碗状结构后快速收敛, @@ -1293,7 +1293,7 @@ RMSProp的标准形式如\alg?所示,结合Nesterov动量的形式如\alg?所 \end{algorithm} \begin{algorithm}[ht] -\caption{使用Nesterov动量的RMSProp算法} +\caption{使用Nesterov\,动量的RMSProp算法} \begin{algorithmic} \REQUIRE 全局学习率 $\epsilon$,衰减速率$\rho$, 动量系数$\alpha$ \REQUIRE 初始参数$\Vtheta$,初始参数$\Vv$ @@ -1316,8 +1316,8 @@ RMSProp的标准形式如\alg?所示,结合Nesterov动量的形式如\alg?所 ## Adam -\textbf{Adam}{cite?}是另一种学习率自适应的优化算法,如\alg?所示。 -"Adam"这个名字派生自短语"Adaptive moments"。 +\textbf{Adam}~{cite?}是另一种学习率自适应的优化算法,如\alg?所示。 +"Adam"这个名字派生自短语"adaptive moments"。 早期算法背景下,它也许最好被看作结合RMSProp和具有一些重要区别的动量的变种。 首先,在Adam中,动量直接并入了梯度一阶矩(指数加权)的估计。 将动量加入RMSProp最直观的方法是将动量应用于缩放后的梯度。 @@ -1399,29 +1399,29 @@ Adam通常被认为对超参数的选择相当鲁棒,尽管学习率有时需 \begin{equation} \Vtheta^* = \Vtheta_0 - \MH^{-1}\nabla_{\Vtheta} J(\Vtheta_0). \end{equation} -因此,对于局部的二次函数(具有正定的$\MH$),用$\MH^{-1}$重新调整梯度,牛顿法会直接跳到极小值。 +因此,对于局部的二次函数(具有正定的$\MH$\,),用$\MH^{-1}$重新调整梯度,牛顿法会直接跳到极小值。 如果目标函数是凸的但非二次的(有高阶项),该更新将是迭代的,得到和牛顿法相关的算法,如\alg?所示。 -对于非二次的表面,只要Hessian保持正定,牛顿法能够迭代地应用。 +对于非二次的表面,只要\,Hessian\,矩阵保持正定,牛顿法能够迭代地应用。 这意味着一个两步迭代过程。 -首先,更新或计算Hessian逆(通过更新二阶近似)。 +首先,更新或计算\,Hessian\,逆(通过更新二阶近似)。 其次,根据\eqn?更新参数。 -在\sec?,我们讨论了牛顿法只适用于Hessian是正定的情况。 +在\sec?,我们讨论了牛顿法只适用于\,Hessian\,矩阵是正定的情况。 在深度学习中,目标函数的表面通常非凸(有很多特征),如鞍点。 因此使用牛顿法是有问题的。 -如果Hessian矩阵的特征值并不都是正的,例如,靠近鞍点处,牛顿法实际上会导致更新朝错误的方向移动。 -这种情况可以通过正则化Hessian来避免。 -常用的正则化策略包括在Hessian矩阵对角线上增加常数$\alpha$。 +如果\,Hessian\,矩阵的特征值并不都是正的,例如,靠近鞍点处,牛顿法实际上会导致更新朝错误的方向移动。 +这种情况可以通过正则化\,Hessian\,矩阵来避免。 +常用的正则化策略包括在\,Hessian\,矩阵对角线上增加常数$\alpha$。 正则化更新变为 \begin{equation} \Vtheta^* = \Vtheta_0 - [ H( f(\Vtheta_0)) + \alpha \MI ]^{-1} \nabla_{\Vtheta} f(\Vtheta_0). \end{equation} -这个正则化策略用于牛顿法的近似,例如Levenberg-Marquardt算法{cite?},只要Hessian矩阵的负特征值仍然相对接近零,效果就会很好。 +这个正则化策略用于牛顿法的近似,例如Levenberg-Marquardt算法{cite?},只要\,Hessian\,矩阵的负特征值仍然相对接近零,效果就会很好。 在曲率方向更极端的情况下,$\alpha$的值必须足够大,以抵消负特征值。 -然而,如果$\alpha$持续增加,Hessian矩阵会变得由对角矩阵$\alpha \MI$主导,通过牛顿法所选择的方向会收敛到普通梯度除以$\alpha$。 +然而,如果$\alpha$持续增加,Hessian\,矩阵会变得由对角矩阵$\alpha \MI$主导,通过牛顿法所选择的方向会收敛到普通梯度除以$\alpha$。 当很强的负曲率存在时,$\alpha$可能需要特别大,以致于牛顿法比选择合适学习率的梯度下降的步长更小。 \begin{algorithm}[ht] @@ -1432,9 +1432,9 @@ Adam通常被认为对超参数的选择相当鲁棒,尽管学习率有时需 \WHILE{没有达到停止准则} \STATE 计算梯度: $\Vg \leftarrow \frac{1}{m} \nabla_{\Vtheta} \sum_i L(f(\Vx^{(i)};\Vtheta),\Vy^{(i)})$ - \STATE 计算Hessian:$\MH \leftarrow + \STATE 计算\,Hessian\,矩阵:$\MH \leftarrow \frac{1}{m} \nabla_{\Vtheta}^2 \sum_i L(f(\Vx^{(i)};\Vtheta),\Vy^{(i)})$ - \STATE 计算Hessian逆:$\MH^{-1}$ + \STATE 计算\,Hessian\,逆:$\MH^{-1}$ \STATE 计算更新: $\Delta \Vtheta = - \MH^{-1} \Vg$ \STATE 应用更新:$\Vtheta = \Vtheta+\Delta \Vtheta$ \ENDWHILE @@ -1443,15 +1443,15 @@ Adam通常被认为对超参数的选择相当鲁棒,尽管学习率有时需 除了目标函数的某些特征带来的挑战,如鞍点,牛顿法用于训练大型神经网络还受限于其显著的计算负担。 -Hessian矩阵中元素数目是参数数量的平方,因此,如果参数数目为$k$(甚至是在非常小的神经网络中$k$也可能是百万级别),牛顿法需要计算$k\times k$矩阵的逆,计算复杂度为$O(k^3)$。 -另外,由于参数将每次更新都会改变,\emph{每次训练迭代}都需要计算Hessian矩阵的逆。 +Hessian\,矩阵中元素数目是参数数量的平方,因此,如果参数数目为$k$(甚至是在非常小的神经网络中$k$也可能是百万级别),牛顿法需要计算$k\times k$矩阵的逆,计算复杂度为$O(k^3)$。 +另外,由于参数将每次更新都会改变,\emph{每次训练迭代}都需要计算\,Hessian\,矩阵的逆。 其结果是,只有参数很少的网络才能在实际中用牛顿法训练。 在本节的剩余部分,我们将讨论一些试图保持牛顿法优点,同时避免计算障碍的替代算法。 ## 共轭梯度 -共轭梯度是一种通过迭代下降的共轭方向以有效避免Hessian矩阵求逆计算的方法。 +共轭梯度是一种通过迭代下降的共轭方向以有效避免\,Hessian\,矩阵求逆计算的方法。 这种方法的灵感来自于对最速下降方法弱点的仔细研究(详细信息请查看\sec?),其中线性搜索迭代地用于与梯度相关的方向上。 \fig?说明了该方法在二次碗型目标中如何表现的,是一个相当低效的来回往复,锯齿形模式。 这是因为每一个由梯度给定的线性搜索方向,都保证正交于上一个线性搜索方向。 @@ -1492,7 +1492,7 @@ Hessian矩阵中元素数目是参数数量的平方,因此,如果参数数 -如果$\Vd_t^\top \MH \Vd_{t-1} = 0$,其中$\MH$是Hessian矩阵,则两个方向$\Vd_t$和$\Vd_{t-1}$被称为共轭的。 +如果$\Vd_t^\top \MH \Vd_{t-1} = 0$,其中$\MH$是\,Hessian\,矩阵,则两个方向$\Vd_t$和$\Vd_{t-1}$被称为共轭的。 适应共轭的直接方法会涉及到$\MH$特征向量的计算以选择$\beta_t$。 这将无法满足我们的开发目标:寻找在大问题比牛顿法计算更加可行的方法。 @@ -1549,30 +1549,30 @@ Hessian矩阵中元素数目是参数数量的平方,因此,如果参数数 当然,本章我们主要关注于探索训练神经网络和其他相关深度学习模型的优化方法,其对应的目标函数比二次函数复杂得多。 或许令人惊讶,共轭梯度法在这种情况下仍然是适用的,尽管需要作一些修改。 没有目标是二次的保证,共轭方向也不再保证在以前方向上的目标仍是极小值。 -其结果是,\textbf{非线性共轭梯度}算法会包括一些偶尔的重设,共轭梯度法沿未修改的梯度重启线性搜索。 +其结果是,\textbf{非线性共轭梯度}\,算法会包括一些偶尔的重设,共轭梯度法沿未修改的梯度重启线性搜索。 实践者报告在实践中使用非线性共轭梯度算法训练神经网络是合理的,尽管在开始非线性共轭梯度前使用随机梯度下降迭代若干步来初始化效果更好。 -另外,尽管(非线性)共轭梯度算法传统上作为批方法,小批量版本已经成功用于训练神经网络{cite?}。 +另外,尽管(非线性)共轭梯度算法传统上作为批方法,小批量版本已经成功用于训练神经网络~{cite?}。 针对神经网路的共轭梯度应用早已被提出,例如缩放的共轭梯度算法{cite?}。 ## BFGS \textbf{Broyden-Fletcher-Goldfarb-Shanno}(\textbf{BFGS})算法具有牛顿法的一些优点,但没有牛顿法的计算负担。 -在这方面,BFGS和CG很像。 -然而,BFGS使用了一个更直接的方法近似牛顿更新。回顾牛顿更新由下式给出 +在这方面,BFGS\,和CG很像。 +然而,BFGS\,使用了一个更直接的方法近似牛顿更新。回顾牛顿更新由下式给出 \begin{equation} \Vtheta^* = \Vtheta_0 - \MH^{-1} \nabla_{\Vtheta} J(\Vtheta_0), \end{equation} -其中,$\MH$是$J$相对于$\Vtheta$的Hessian矩阵在$\Vtheta_0$处的估计。 -运用牛顿法的主要计算难点在于计算Hessian逆$\MH^{-1}$。 -拟牛顿法所采用的方法(BFGS是其中最突出的)是使用矩阵$\MM_t$近似逆,迭代地低秩更新精度以更好地近似$\MH^{-1}$。 +其中,$\MH$是$J$相对于$\Vtheta$的\,Hessian\,矩阵在$\Vtheta_0$处的估计。 +运用牛顿法的主要计算难点在于计算\,Hessian\,逆$\MH^{-1}$。 +拟牛顿法所采用的方法(BFGS\,是其中最突出的)是使用矩阵$\MM_t$近似逆,迭代地低秩更新精度以更好地近似$\MH^{-1}$。 -BFGS近似的说明和推导出现在很多关于优化的教科书中,包括{Lue84}。 +BFGS\,近似的说明和推导出现在很多关于优化的教科书中,包括{Lue84}。 当Hessian逆近似$\MM_t$更新时,下降方向$\Vrho_t$为$\Vrho_t = \MM_t \Vg_t$。 该方向上的线性搜索用于决定该方向上的步长$\epsilon^*$。 @@ -1581,17 +1581,17 @@ BFGS近似的说明和推导出现在很多关于优化的教科书中,包括{ \Vtheta_{t+1} = \Vtheta_t + \epsilon^* \Vrho_t. \end{equation} -和共轭梯度法相似,BFGS算法迭代一系列线性搜索,其方向含二阶信息。 +和共轭梯度法相似,BFGS\,算法迭代一系列线性搜索,其方向含二阶信息。 然而和共轭梯度不同的是,该方法的成功并不严重依赖于线性搜索寻找该方向上和真正极小值很近的一点。 -因此,相比于共轭梯度,BFGS的优点是其花费较少的时间改进每个线性搜索。 -在另一方面,BFGS算法必须存储Hessian逆矩阵$\MM$,需要$O(n^2)$的存储空间,使BFGS不适用于大多数具有百万级参数的现代深度学习模型。 +因此,相比于共轭梯度,BFGS\,的优点是其花费较少的时间改进每个线性搜索。 +在另一方面,BFGS\,算法必须存储\,Hessian\,逆矩阵$\MM$,需要$O(n^2)$的存储空间,使\,BFGS\,不适用于大多数具有百万级参数的现代深度学习模型。 -\paragraph{存储受限的BFGS(或L-BFGS)} -通过避免存储完整的Hessian逆近似$\MM$,BFGS算法的存储代价可以显著降低。 -L-BFGS算法使用和BFGS算法相同的方法计算$\MM$的近似,但起始假设是$\MM^{(t-1)}$是单位矩阵,而不是一步一步都要存储近似。 -如果使用精确的线性搜索,L-BFGS定义的方向会是相互共轭的。 +\paragraph{存储受限的\,BFGS(或\,L-BFGS)} +通过避免存储完整的\,Hessian\,逆近似$\MM$,BFGS\,算法的存储代价可以显著降低。 +L-BFGS\,算法使用和\,BFGS\,算法相同的方法计算$\MM$的近似,但起始假设是$\MM^{(t-1)}$是单位矩阵,而不是一步一步都要存储近似。 +如果使用精确的线性搜索,L-BFGS\,定义的方向会是相互共轭的。 然而,不同于共轭梯度法,即使只是近似线性搜索的极小值,该过程的效果仍然不错。 -这里描述的无存储的L-BFGS方法可以拓展为包含Hessian矩阵更多的信息,每步存储一些用于更新$\MM$的向量,且每步的存储代价是$O(n)$。 +这里描述的无存储的\,L-BFGS\,方法可以拓展为包含\,Hessian\,矩阵更多的信息,每步存储一些用于更新$\MM$的向量,且每步的存储代价是$O(n)$。 @@ -1603,7 +1603,7 @@ L-BFGS算法使用和BFGS算法相同的方法计算$\MM$的近似,但起始 ## 批标准化 -批标准化{cite?}是优化深度神经网络中最激动人心的最新创新之一。 +批标准化~{cite?}是优化深度神经网络中最激动人心的最新创新之一。 实际上它并不是一个优化算法,而是一个自适应的重参数化的方法,试图解决训练非常深的模型的困难。 非常深的模型会涉及多个函数或层组合。 @@ -1687,7 +1687,7 @@ $\hat{y}$的更新值为 批标准化仅标准化每个单元的均值和方差,以稳定化学习,但允许单元和单个单元的非线性统计量之间的关系发生变化。 由于网络的最后一层能够学习线性变换,实际上我们可能希望移除一层内单元之间的所有线性关系。 -事实上,这是{Desjardins2015}中采用的方法,为批标准化提供了灵感。 +事实上,这是~{Desjardins2015}中采用的方法,为批标准化提供了灵感。 令人遗憾的是,消除所有的线性关联比标准化各个独立单元的均值和标准差代价更高,因此批标准化仍是迄今最实用的方法。 @@ -1761,7 +1761,7 @@ Polyak平均{cite?}会平均优化算法在参数空间访问轨迹中的几个 \hat{\Vtheta}^{(t)} = \alpha \hat{\Vtheta}^{(t-1)} + (1-\alpha) \Vtheta^{(t)} . \end{equation} -这个计算平均值的方法被用于大量数值应用中。最近的例子请参看{Szegedy-et-al-2015}。 +这个计算平均值的方法被用于大量数值应用中。最近的例子请查看{Szegedy-et-al-2015}。 ## 监督预训练 @@ -1785,11 +1785,11 @@ Polyak平均{cite?}会平均优化算法在参数空间访问轨迹中的几个 在贪心监督预训练的原始版本{cite?}中,每个阶段包括一个仅涉及最终神经网络的子集层的监督学习训练任务。 -贪心监督预训练的一个例子如\fig?所示,其中每个附加的隐藏层作为浅监督MLP的一部分预训练,以先前训练的隐藏层输出作为输入。 -{Simonyan2015}预训练深度卷积网络(11层权重),然后使用该网络前四层和最后三层初始化更深的网络(多达19层权重),并非一次预训练一层。 +贪心监督预训练的一个例子如\fig?所示,其中每个附加的隐藏层作为浅层监督多层感知机的一部分预训练,以先前训练的隐藏层输出作为输入。 +{Simonyan2015}~预训练深度卷积网络(11层权重),然后使用该网络前四层和最后三层初始化更深的网络(多达19层权重),并非一次预训练一层。 非常深的新网络的中间层是随机初始化的。 然后联合训练新网络。 -还有一种选择,由{Yu+al-2010}提出,将先前训练MLP的\emph{输出},以及原始输入,作为每个附加阶段的输入。 +还有一种选择,由{Yu+al-2010}提出,将先前训练多层感知机的\emph{输出},以及原始输入,作为每个附加阶段的输入。 \begin{figure}[!htb] \ifOpenSource @@ -1801,7 +1801,7 @@ Polyak平均{cite?}会平均优化算法在参数空间访问轨迹中的几个 (a)我们从训练一个足够浅的架构开始。 (b)同一个架构的另一描绘。 (c)我们只保留原始网络的输入到隐藏层,并丢弃隐藏到输出层。 -我们将第一层隐藏层的输出作为输入发送到另一监督单隐层MLP(使用与第一个网络相同的目标训练),从而可以添加第二层隐藏层。 +我们将第一层隐藏层的输出作为输入发送到另一监督单隐层\,MLP(使用与第一个网络相同的目标训练),从而可以添加第二层隐藏层。 这可以根据需要重复多层。 (d)所得架构的另一种描绘,可视为前馈网络。 为了进一步改进优化,我们可以联合地精调所有层(仅在该过程的结束或者该过程的每个阶段)。 @@ -1810,16 +1810,16 @@ Polyak平均{cite?}会平均优化算法在参数空间访问轨迹中的几个 为什么贪心监督预训练会有帮助呢? -最初由{Bengio-nips-2006}提出的假说是,其有助于更好地指导深层结构的中间层的学习。 +最初由~{Bengio-nips-2006}提出的假说是,其有助于更好地指导深层结构的中间层的学习。 一般情况下,预训练对于优化和泛化都是有帮助的。 另一个与监督预训练有关的方法扩展了迁移学习的想法:{yosinski-nips2014}在一组任务上预训练了$8$层权重的深度卷积网络(1000个ImageNet对象类的子集),然而用该网络的前$k$层初始化同样规模的网络。 然后第二个网络的所有层(上层随机初始化)联合训练以执行不同的任务(1000个ImageNet对象类的另一个子集),但训练样本少于第一个任务。 神经网络中另一个和迁移学习相关的方法将在\sec?讨论。 -另一条相关的工作线是\textbf{FitNets}{cite?}方法。 +另一条相关的工作线是\textbf{FitNets}~{cite?}方法。 这种方法始于训练深度足够低和宽度足够大(每层单元数),容易训练的网络。 -然后,这个网络成为第二个网络(被指定为\textbf{学生})的\textbf{老师}。 +然后,这个网络成为第二个网络(被指定为\,\textbf{学生})的\,\textbf{老师}。 学生网络更深更窄(11至19层),且在正常情况下很难用SGD训练。 训练学生网络不仅需要预测原任务的输出,还需要预测教师网络中间层的值,这样使得训练学生网络变得更容易。 这个额外的任务说明了隐藏层应如何使用,并且能够简化优化问题。 @@ -1845,15 +1845,15 @@ Polyak平均{cite?}会平均优化算法在参数空间访问轨迹中的几个 1980年代用于训练神经网络的带动量的随机梯度下降,仍然是现代神经网络应用中的前沿算法。 具体来说,现代神经网络的\emph{设计选择}体现在层之间的线性变换,几乎处处可导的激活函数,和大部分定义域都有明显的梯度。 -特别地,创新的模型,如LSTM,整流线性单元和maxout单元都比先前的模型(如基于sigmoid单元的深度网络)使用更多的线性函数。 +特别地,创新的模型,如\,LSTM,整流线性单元和\,maxout\,单元都比先前的模型(如基于\,sigmoid\,单元的深度网络)使用更多的线性函数。 这些模型都具有简化优化的性质。 -如果线性变换的Jacobian具有相对合理的奇异值,那么梯度能够流经很多层。 +如果线性变换的\,Jacobian\,具有相对合理的奇异值,那么梯度能够流经很多层。 此外,线性函数在一个方向上一致增加,所以即使模型的输出远离正确值,也可以简单清晰地计算梯度,使其输出方向朝降低损失函数的方向移动。 换言之,现代神经网络的设计方案旨在使其\emph{局部}梯度信息合理地对应着移向一个遥远的解。 其他的模型设计策略有助于使优化更简单。 例如,层之间的线性路径或是跳跃连接减少了从较低层参数到输出最短路径的长度,因而缓解了梯度消失的问题{cite?}。 -一个和跳跃连接相关的想法是添加和网络中间隐藏层相连的输出的额外副本,如GoogLeNet{cite?}和深度监督网络{cite?}。 +一个和跳跃连接相关的想法是添加和网络中间隐藏层相连的输出的额外副本,如GoogLeNet~{cite?}和深度监督网络{cite?}。 这些"辅助头"被训练来执行和网络顶层主要输出相同的任务,以确保底层网络能够接受较大的梯度。 当训练完成时,辅助头可能被丢弃。 这是之前小节介绍到的预训练策略的替代方法。 @@ -1879,10 +1879,10 @@ Polyak平均{cite?}会平均优化算法在参数空间访问轨迹中的几个 因此,我们首先解决一个简单的问题,然后改进解以解决逐步变难的问题,直到我们求解真正问题的解。 传统的延拓法(用于神经网络训练之前的延拓法)通常基于平滑目标函数。 -读者可以参靠{Wu-97}了解这类方法的示例,以及一些相关方法的综述。 +读者可以查看~{Wu-97}了解这类方法的示例,以及一些相关方法的综述。 延拓法也和参数中加入噪声的模拟退火紧密相关{cite?}。 延拓法在最近几年非常成功。 -参看{Mobahi+Fisher-AAAI2015}了解近期文献的概述,特别是在AI方面的应用。 +参考~{Mobahi+Fisher-AAAI2015}了解近期文献的概述,特别是在~AI~方面的应用。 @@ -1905,7 +1905,7 @@ Polyak平均{cite?}会平均优化算法在参数空间访问轨迹中的几个 尽管延拓法最初用来解决局部最小值的问题,而局部最小值已不再认为是神经网络优化中的主要问题了。 幸运的是,延拓法仍然有所帮助。 -延拓法引入的简化目标函数能够消除平坦区域,减少梯度估计的方差,提高Hessian矩阵的条件数,使局部更新更容易计算,或是改进局部更新方向与朝向全局解方向之间的对应关系。 +延拓法引入的简化目标函数能够消除平坦区域,减少梯度估计的方差,提高\,Hessian\,矩阵的条件数,使局部更新更容易计算,或是改进局部更新方向与朝向全局解方向之间的对应关系。 {Bengio+al-2009}指出被称为课程学习或者塑造, % ? 整的方法可以被解释为延拓法。 课程学习基于规划学习过程的想法,首先学习简单的概念,然后逐步学习依赖于这些简化概念的复杂概念。 diff --git a/docs/_posts/2016-12-09-Chapter9_convolutional_networks.md b/docs/_posts/2016-12-09-Chapter9_convolutional_networks.md index a4ba74f..59e621b 100644 --- a/docs/_posts/2016-12-09-Chapter9_convolutional_networks.md +++ b/docs/_posts/2016-12-09-Chapter9_convolutional_networks.md @@ -1,5 +1,5 @@ --- -title: 卷积神经网络 +title: 卷积网络 layout: post share: false --- @@ -7,21 +7,23 @@ share: false 卷积网络{cite?},也叫做卷积神经网络,是一种专门用来处理具有类似网格结构的数据的神经网络。 例如时间序列数据(可以认为是在时间轴上有规律地采样形成的一维网格)和图像数据(可以看作是二维的像素网格)。 卷积网络在诸多应用领域都表现优异。 -"卷积网络"一词表明该网络使用了卷积这种数学运算。 +"卷积神经网络"一词表明该网络使用了卷积这种数学运算。 卷积是一种特殊的线性运算。 \emph{卷积网络是指那些至少在网络的一层中使用卷积运算来替代一般的矩阵乘法运算的神经网络。} 本章,我们首先说明什么是卷积运算。 接着,我们会解释在神经网络中使用卷积运算的动机。 -然后我们会介绍一种几乎所有的卷积神经网络都会用到的操作池化。 +然后我们会介绍池化,这是一种几乎所有的卷积网络都会用到的操作。 通常来说,卷积神经网络中用到的卷积运算和其他领域(例如工程领域以及纯数学领域)中的定义并不完全一致。 -我们会对神经网络实践中用得比较多的几种卷积函数的变体进行说明。 +我们会对神经网络实践中广泛应用的几种卷积函数的变体进行说明。 我们也会说明如何在多种不同维数的数据上使用卷积运算。 之后我们讨论使得卷积运算更加高效的一些方法。 -卷积神经网络是神经科学的原理影响深度学习的典型代表,我们之后也会讨论这些神经科学的原理,并对卷积神经网络在深度学习发展史中的作用作出评价。 -本章没有涉及如何为你的卷积神经网络选择合适的结构,因为本章的目标是说明卷积神经网络提供的强大工具,第\?章会对在具体环境中使用相应的工具给出一些指导。 -对于卷积网络结构的研究进展得如此迅速,以至于针对特定问题,数月甚至几周就会产生一个新的最优的网络结构,甚至在写这本书时也不好描述究竟哪种结构是最好的。 -然而,最好的结构也是由本章所描述的基本部件一点一点搭建起来的。 +卷积网络是神经科学原理影响深度学习的典型代表。 +我们之后也会讨论这些神经科学的原理,并对卷积网络在深度学习发展史中的作用作出评价。 +本章没有涉及如何为你的卷积网络选择合适的结构,因为本章的目标是说明卷积网络提供的各种工具。 +第\?将会对如何在具体环境中选择使用相应的工具给出通用的准则。 +对于卷积网络结构的研究进展得如此迅速,以至于针对特定基准(benchmark),数月甚至几周就会公开一个新的最优的网络结构,甚至在写这本书时也不好描述究竟哪种结构是最好的。 +然而,最好的结构也是由本章所描述的基本部件逐步搭建起来的。 @@ -29,18 +31,18 @@ share: false # 卷积运算 -在通常形式中,卷积是对两个实值函数的一种数学运算。 +在通常形式中,卷积是对两个实变函数的一种数学运算\footnote{译者注:本书中operation视语境有时翻译成"运算",有时翻译成"操作"。}。 为了给出卷积的定义,我们从两个可能会用到的函数的例子出发。 假设我们正在用激光传感器追踪一艘宇宙飞船的位置。 我们的激光传感器给出一个单独的输出$x(t)$,表示宇宙飞船在时刻$t$ 的位置。 $x$和$t$都是实值的,这意味着我们可以在任意时刻从传感器中读出飞船的位置。 -现在假设我们的传感器含有噪声。 +现在假设我们的传感器受到一定程度的噪声干扰。 为了得到飞船位置的低噪声估计,我们对得到的测量结果进行平均。 -显然,时间上越近的测量结果越相关,所以我们采用一种加权平均的方法,对于最近的测量结果赋予更高的权值。 -我们可以采用一个加权函数$w(a)$ 来实现,其中$a$表示测量结果据当前时刻的时间间隔。 -如果我们对任意时刻都采用这种加权平均的操作,就得到了对于飞船位置的连续估计函数$s$: +显然,时间上越近的测量结果越相关,所以我们采用一种加权平均的方法,对于最近的测量结果赋予更高的权重。 +我们可以采用一个加权函数$w(a)$ 来实现,其中$a$表示测量结果距当前时刻的时间间隔。 +如果我们对任意时刻都采用这种加权平均的操作,就得到了一个新的对于飞船位置的平滑估计函数$s$: \begin{equation} s(t) = \int x(a)w(t-a)da. \end{equation} @@ -52,30 +54,31 @@ s(t) = (x*w)(t). \end{equation} 在我们的例子中,$w$必须是一个有效的概率密度函数,否则输出就不再是一个加权平均。 -另外,$w$在参数为负值时必须为0,否则它会涉及到未来,这不是我们能够做到的。 +另外,在参数为负值时,$w$的取值必须为0,否则它会预测到未来,这不是我们能够推测得了的。 但这些限制仅仅是对我们这个例子来说。 通常,卷积被定义在满足上述积分式的任意函数上,并且也可能被用于加权平均以外的目的。 -在卷积神经网络的术语中,第一个参数(在这个例子中,函数$x$)叫做输入,第二个参数(函数$w$)叫做核函数。 +在卷积网络的术语中,卷积的第一个参数(在这个例子中,函数$x$)通常叫做输入,第二个参数(函数$w$)叫做核函数。 输出有时被称作特征映射。 -在我们的例子中,激光传感器能够在任意时刻给出测量结果的想法是不现实的。 -一般地,当我们用计算机处理数据时,时间会被离散化,传感器会给出特定时间间隔的数据。 -所以比较现实的的假设是传感器每秒给出一次测量结果,这样,时间$t$只能取整数值。 -如果我们假设$x$和$w$都定义在整数时刻$t$上,就得到了离散形式的卷积: +在本例中,激光传感器在每个瞬间反馈测量结果的想法是不切实际的。 +一般地,当我们用计算机处理数据时,时间会被离散化,传感器会定期地反馈数据。 +所以在我们的例子中,假设传感器每秒反馈一次测量结果是比较现实的。 +这样,时刻$t$只能取整数值。 +如果我们假设$x$和$w$都定义在整数时刻$t$上,就可以定义离散形式的卷积: \begin{equation} s(t) = (x*w)(t) = \sum_{a = -\infty}^{\infty} x(a)w(t-a). \end{equation} -在机器学习的应用中,输入通常是高维数据数组,而核也是由算法产生的高维参数数组。 -我们把这种高维数组叫做张量。 -因为输入与核的每一个元素都分开存储,我们经常假设在存储了数据的有限点集以外,这些函数的值都为零。 -这意味着在实际操作中,我们可以统一地把无限的求和当作对有限个数组元素的求和来用。 +在机器学习的应用中,输入通常是多维数组的数据,而核通常是由学习算法优化得到的多维数组的参数。 +我们把这些多维数组叫做张量。 +因为在输入与核中的每一个元素都必须明确地分开存储,我们通常假设在存储了数值的有限点集以外,这些函数的值都为零。 +这意味着在实际操作中,我们可以通过对有限个数组元素的求和来实现无限求和。 -最后,我们有时对多个维度进行卷积运算。 -例如,如果把二维的图像$I$作为输入,我们也相应的需要使用二维的核$K$: +最后,我们经常一次在多个维度上进行卷积运算。 +例如,如果把一张二维的图像$I$作为输入,我们也许也想要使用一个二维的核$K$: \begin{equation} S(i,j) = (I*K)(i,j) = \sum_m \sum_n I(m,n) K(i-m, j-n). \end{equation} @@ -85,23 +88,23 @@ S(i,j) = (I*K)(i,j) = \sum_m \sum_n I(m,n) K(i-m, j-n). S(i, j) = (K*I)(i,j) = \sum_m \sum_n I(i-m, j-n) K(m, n). \end{equation} -通常,下面的公式在机器学习库中更方便应用,因为它在$m$和$n$的有效范围内变化更少。%(这是为什么?) +通常,下面的公式在机器学习库中实现更为简单,因为$m$和$n$的有效取值范围相对较小。 -卷积运算可交换性的出现是因为我们相对输入翻转了核,这意味着当$m$增大时,输入的索引增大,但核的索引相应的减小。 -翻转核的唯一目的就是为了得到可交换性。 +卷积运算可交换性的出现是因为我们将核相对输入进行了翻转,从$m$增大的角度来看,输入的索引在增大,但是核的索引在减小。 +我们将核翻转的唯一目是实现可交换性。 尽管可交换性在证明时很有用,但在神经网络的应用中却不是一个重要的性质。 -与之不同的是,许多神经网络库会实现一个相关的函数,称为互相关函数,和卷积运算几乎一样但是并不翻转核: +与之不同的是,许多神经网络库会实现一个相关的函数,称为互相关函数,和卷积运算几乎一样但是并没有对核进行翻转: \begin{equation} S(i, j) = (I*K)(i, j) = \sum_m \sum_n I(i+m, j+n) K(m, n). \end{equation} -许多机器学习的库使用互相关函数但是叫它卷积。 -在这本书中我们遵循把两种运算都叫做卷积的这个传统,只有在用到核的翻转时才会在上下文中特别指明区别。 +许多机器学习的库实现的是互相关函数但是称之为卷积。 +在这本书中我们遵循把两种运算都叫做卷积的这个传统,在与核翻转有关的上下文中,我们会特别指明是否对核进行了翻转。 在机器学习中,学习算法会在核合适的位置学得恰当的值, 所以一个基于核翻转的卷积运算的学习算法所学得的核,是对未进行翻转的算法学得的核的翻转。 -单独使用卷积运算在机器学习中是很少见的,卷积经常和其他的函数一起使用,无论卷积运算是否翻转了它的核,这些函数的组合通常是不可交换的。 +单独使用卷积运算在机器学习中是很少见的,卷积经常与其他的函数一起使用,无论卷积运算是否对它的核进行了翻转,这些函数的组合通常是不可交换的。 -图\?演示了一个在2维张量上的卷积运算(核没有翻转)的例子。 +\fig?演示了一个在2维张量上的卷积运算(没有对核进行翻转)的例子。 \begin{figure}[!htb] \ifOpenSource @@ -109,15 +112,18 @@ S(i, j) = (I*K)(i, j) = \sum_m \sum_n I(i+m, j+n) K(m, n). \else \centerline{\includegraphics{Chapter9/figures/conv_2d}} \fi -\caption{一个2维卷积的例子(核没有翻转)。我们限制只对核完全处在图像中的位置输出,在一些上下文中称为"有效"卷积。我们用画有箭头的盒子来说明输出张量的左上角元素是如何通过对输入张量相应的左上角区域使用核进行卷积得到的。} +\caption{一个2维卷积的例子(没有对核进行翻转)。 +我们限制只对核完全处在图像中的位置进行输出,在一些上下文中称为"有效"卷积。 +我们用画有箭头的盒子来说明输出张量的左上角元素是如何通过对输入张量相应的左上角区域应用核进行卷积得到的。} \end{figure} -离散卷积可以看作矩阵的乘法,然而,这个矩阵的一些元素被限制为必须和另一些元素相等。 -例如对于单变量的离散卷积,矩阵的每一行都必须和上一行移动一个元素后相等。 +离散卷积可以看作矩阵的乘法,然而,这个矩阵的一些元素被限制为必须和另外一些元素相等。 +例如对于单变量的离散卷积,矩阵每一行中的元素都与上一行对应位置平移一个单位的元素相同。 这种矩阵叫做Toeplitz矩阵。 -对于二维情况,卷积对应着一个双重块循环矩阵。 -除了这些元素相等的限制以外,卷积通常对应着一个非常稀疏的矩阵(几乎所有的元素都为零)。 -这是因为核通常要远小于输入的图像。任何一个使用矩阵乘法但是并不依赖矩阵结构的特殊性质的神经网络算法,都适用于卷积运算,并且不需要对神经网络做出大的修改。 +对于二维情况,卷积对应着一个双重分块循环矩阵。 + +除了这些元素相等的限制以外,卷积通常对应着一个非常稀疏的矩阵(一个几乎所有元素都为零的矩阵)。 +这是因为核的大小通常要远小于输入图像的大小。任何一个使用矩阵乘法但是并不依赖矩阵结构的特殊性质的神经网络算法,都适用于卷积运算,并且不需要对神经网络做出大的修改。 典型的卷积神经网络为了更有效地处理大规模输入,确实使用了一些专门化的技巧,但这些在理论分析方面并不是严格必要的。 @@ -130,20 +136,20 @@ S(i, j) = (I*K)(i, j) = \sum_m \sum_n I(i+m, j+n) K(m, n). 另外,卷积提供了一种处理大小可变的输入的方法。 我们下面依次介绍这些思想。 -传统的神经网络使用矩阵乘法来建立输入与输出的连接关系。 -其中,参数矩阵的每一个独立的参数都描述了每一个输入单元与每一个输出单元间的交互。 +传统的神经网络使用矩阵乘法来建立输入与输出的连接关系\footnote{译者注:这里可以粗略地理解为输入$\times$参数矩阵=输出。}。 +其中,参数矩阵中每一个单独的参数都描述了一个输入单元与一个输出单元间的交互。 这意味着每一个输出单元与每一个输入单元都产生交互。 -然而,卷积神经网络具有稀疏交互(也叫做稀疏连接或者稀疏权重)的特征。 -这通过使得核的规模远小于输入的规模来实现。 -举个例子,当进行图像处理时,输入的图像可能包含百万个像素点,但是我们可以通过只占用几十到上百个像素点的核来探测一些小的有意义的特征,例如图像的边缘。 +然而,卷积网络具有稀疏交互(也叫做稀疏连接或者稀疏权重)的特征。 +这是使核的大小远小于输入的大小来达到的。 +举个例子,当处理一张图像时,输入的图像可能包含成千上万个像素点,但是我们可以通过只占用几十到上百个像素点的核来检测一些小的有意义的特征,例如图像的边缘。 这意味着我们需要存储的参数更少,不仅减少了模型的存储需求,而且提高了它的统计效率。 这也意味着为了得到输出我们只需要更少的计算量。 这些效率上的提高往往是很显著的。 如果有$m$个输入和$n$个输出,那么矩阵乘法需要$m \times n$个参数并且相应算法的时间复杂度为$O(m\times n)$(对于每一个例子)。 如果我们限制每一个输出拥有的连接数为$k$,那么稀疏的连接方法只需要$k\times n$个参数以及$O(k\times n)$的运行时间。 -在很多应用方面,只需保持$k$的数量级远小于$m$,就能在机器学习的任务中取得好的表现。 -稀疏连接的图形化解释如图\?和图\?所示。 -在深度卷积网络中,处在深层的单元可能\emph{不直接}地与绝大部分输入连接,如图\?所示。 +在很多实际应用中,只需保持$k$比$m$小几个数量级,就能在机器学习的任务中取得好的表现。 +稀疏连接的图形化解释如\fig?和\fig?所示。 +在深度卷积网络中,处在网络深层的单元可能与绝大部分输入是\emph{间接}交互的,如\fig?所示。 这允许网络可以通过只描述稀疏交互的基石来高效地描述多个变量的复杂交互。 \begin{figure}[!htb] @@ -153,9 +159,13 @@ S(i, j) = (I*K)(i, j) = \sum_m \sum_n I(i+m, j+n) K(m, n). \centerline{\includegraphics{Chapter9/figures/area_of_effect}} \fi \captionsetup{singlelinecheck=off} -\caption[Caption for LOF]{稀疏连接,对每幅图从下往上看。我们强调了一个输入单元$x_3$以及在$\bm{s}$中受该单元影响的输出单元。\emph{(上)}当$\bm{s}$是由核宽度为3的卷积产生时,只有三个输出受到$\bm{x}$的影响\protect\footnotemark。\emph{(下)}当$\bm{s}$是由矩阵乘法产生时,连接不再是稀疏的,所以所有的输出都会受到$x_3$的影响。} +\caption[Caption for LOF]{稀疏连接,对每幅图从下往上看。 +我们强调了一个输入单元$x_3$以及在$\Vs$中受该单元影响的输出单元。 +\emph{(上)}当$\Vs$是由核宽度为3的卷积产生时,只有三个输出受到$\Vx$的影响\protect\footnotemark。 +\emph{(下)}当$\Vs$是由矩阵乘法产生时,连接不再是稀疏的,所以所有的输出都会受到$x_3$的影响。} \end{figure} \footnotetext{译者注:译者认为此处应当是$x_3$。} + \begin{figure}[!htb] \ifOpenSource @@ -164,8 +174,14 @@ S(i, j) = (I*K)(i, j) = \sum_m \sum_n I(i+m, j+n) K(m, n). \centerline{\includegraphics{Chapter9/figures/receptive_field}} \fi \captionsetup{singlelinecheck=off} -\caption[.]{稀疏连接,对每幅图从上往下看。我们强调了一个输出单元$s_3$以及$\bm{x}$中影响该单元的输入单元。这些单元被称为$s_3$的接受域。\emph{(上)}当$\bm{s}$是由核宽度为3的卷积产生时,只有三个输入影响$s_3$。\emph{(下)}当$\bm{s}$是由矩阵乘法产生时,连接不再是稀疏的,所以所有的输入都会影响$s_3$。} +\caption[Caption for LOF]{稀疏连接,对每幅图从上往下看。 +我们强调了一个输出单元$s_3$以及$\Vx$中影响该单元的输入单元。 +这些单元被称为$s_3$的接受域\protect\footnotemark。 +\emph{(上)}当$\Vs$是由核宽度为3的卷积产生时,只有三个输入影响$s_3$。 +\emph{(下)}当$\Vs$是由矩阵乘法产生时,连接不再是稀疏的,所以所有的输入都会影响$s_3$。} \end{figure} +\footnotetext{译者注:在生物中称之为"感受野"。} + \begin{figure}[!htb] \ifOpenSource @@ -173,20 +189,22 @@ S(i, j) = (I*K)(i, j) = \sum_m \sum_n I(i+m, j+n) K(m, n). \else \centerline{\includegraphics{Chapter9/figures/deep_receptive_field}} \fi -\caption{处于卷积网络更深的层中的单元,它们的接受域要比处在浅层的单元的接受域更大。如果网络还包含类似步幅卷积(图\?)或者池化(\?节)之类的结构特征,这种效应会加强。这意味着在卷积网络中即使是\emph{直接}连接都是很稀疏的,处在更深的层中的单元可以\emph{间接地}连接到全部或者大部分输入图像。} +\caption{处于卷积网络更深的层中的单元,它们的接受域要比处在浅层的单元的接受域更大。 +如果网络还包含类似步幅卷积(\fig?)或者池化(\sec?)之类的结构特征,这种效应会加强。 +这意味着在卷积网络中尽管\emph{直接}连接都是很稀疏的,但处在更深的层中的单元可以\emph{间接地}连接到全部或者大部分输入图像。} \end{figure} 参数共享是指在一个模型的多个函数中使用相同的参数。 -在传统的神经网络中,当计算一层的输出时,权值矩阵的每一个元素只使用一次,当它乘以输入的一个元素后就再也不会用到了。 -作为参数共享的同义词,我们可以说一个网络含有绑定的权值,因为用于一个输入的权值也会被绑定在其他的权值上。 -在卷积神经网络中,核的每一个元素都作用在输入的每一位置上(除了一些可能的边界像素,取决于对于边界的决策设计)。 +在传统的神经网络中,当计算一层的输出时,权重矩阵的每一个元素只使用一次,当它乘以输入的一个元素后就再也不会用到了。 +作为参数共享的同义词,我们可以说一个网络含有绑定的权重,因为用于一个输入的权重也会被绑定在其他的权重上。 +在卷积神经网络中,核的每一个元素都作用在输入的每一位置上(是否考虑边界像素取决于对边界决策的设计)。 卷积运算中的参数共享保证了我们只需要学习一个参数集合,而不是对于每一位置都需要学习一个单独的参数集合。 -这虽然没有改变前向传播的时间(仍然是$O(k\times n)$),但它显著地把模型的存储需求降低至$k$个参数,并且$k$通常是远小于$m$的数量级。 -因为$m$ 和$n$通常规模很接近,$k$在实际中相对于$m\times n$是很小的。 +这虽然没有改变前向传播的运行时间(仍然是$O(k\times n)$),但它显著地把模型的存储需求降低至$k$个参数,并且$k$通常要比$m$小很多个数量级。 +因为$m$ 和$n$通常有着大致相同的大小,$k$在实际中相对于$m\times n$是很小的。 因此,卷积在存储需求和统计效率方面极大地优于稠密矩阵的乘法运算。 -图\?演示了参数共享是如何实现的。 +\fig?演示了参数共享是如何实现的。 \begin{figure}[!htb] \ifOpenSource @@ -194,13 +212,18 @@ S(i, j) = (I*K)(i, j) = \sum_m \sum_n I(i+m, j+n) K(m, n). \else \centerline{\includegraphics{Chapter9/figures/parameter_sharing}} \fi -\caption{参数共享。黑色箭头表示在两个不同的模型中使用了特殊参数的连接。\emph{(上)}黑色箭头表示在卷积模型中3元素核的中间元素的使用。因为参数共享,这单个参数被用于所有的输入位置。\emph{(下)}这单个黑色箭头表示在全连接模型中权重矩阵的中间元素的使用。这个模型没有使用参数共享,所以参数只使用了一次。} +\caption{参数共享。 +黑色箭头表示在两个不同的模型中使用了特殊参数的连接。 +\emph{(上)}黑色箭头表示在卷积模型中对3元素核的中间元素的使用。 +因为参数共享,这个单独的参数被用于所有的输入位置。 +\emph{(下)}这个单独的黑色箭头表示在全连接模型中对权重矩阵的中间元素的使用。 +这个模型没有使用参数共享,所以参数只使用了一次。} \end{figure} -作为前两条原则的一个实际例子,图\?说明了稀疏连接和参数共享是如何显著地提高用于图像边缘检测的线性函数的效率的。 +作为前两条原则的一个实际例子,\fig?说明了稀疏连接和参数共享是如何显著提高线性函数在一张图像上进行边缘检测的效率的。 \begin{figure} \ifOpenSource @@ -211,7 +234,19 @@ S(i, j) = (I*K)(i, j) = \sum_m \sum_n I(i+m, j+n) K(m, n). \includegraphics[width=0.35\textwidth]{Chapter9/figures/edges.png}} \fi \captionsetup{singlelinecheck=off} -\caption{边缘检测的效率。右边的图像是通过获得原始图像中的每个像素并减去左边相邻像素的值而形成的。这给出了输入图像中所有垂直方向上的边缘的强度,这对目标检测是有用的操作。两个图像都是280像素的高度。输入图像宽320像素,而输出图像宽319像素。这个变换可以通过包含两个元素的卷积核来描述,并且需要$319\times 280\times 3 = 267,960$个浮点运算(每个输出像素需要两次乘法和一次加法)。为了用矩阵乘法描述相同的变换,需要$320\times 280\times 319\times 280$个或者说超过80亿个元素的矩阵,这使得卷积对于表示这种变换更有效40亿倍。直接运行矩阵乘法的算法将执行超过160亿个浮点运算,这使得卷积在计算上大约有60,000倍的效率。当然,矩阵的大多数元素将为零。如果我们只存储矩阵的非零元,则矩阵乘法和卷积都需要相同数量的浮点运算来计算。矩阵仍然需要包含$2\times 319\times 280=178,640$个元素。将小的局部区域上的相同线性变换应用到整个输入上,卷积是描述这种变换的极其有效的方法。照片来源:Paula Goodfellow。} +\caption{边缘检测的效率。 +右边的图像是通过先获得原始图像中的每个像素,然后减去左边相邻像素的值而形成的。 +这个操作给出了输入图像中所有垂直方向上的边缘的强度,对目标检测来说是有用的。 +两个图像的高度均为280个像素。 +输入图像的宽度为320个像素,而输出图像的宽度为319个像素。 +这个变换可以通过包含两个元素的卷积核来描述,使用卷积需要$319\times 280\times 3 = 267,960$次浮点运算(每个输出像素需要两次乘法和一次加法)。 +为了用矩阵乘法描述相同的变换,需要一个包含$320\times 280\times 319\times 280$个或者说超过80亿个元素的矩阵,这使得卷积对于表示这种变换更有效40亿倍。 +直接运行矩阵乘法的算法将执行超过160亿次浮点运算,这使得卷积在计算上大约有60,000倍的效率。 +当然,矩阵的大多数元素将为零。 +如果我们只存储矩阵的非零元,则矩阵乘法和卷积都需要相同数量的浮点运算来计算。 +矩阵仍然需要包含$2\times 319\times 280=178,640$个元素。 +将小的局部区域上的相同线性变换应用到整个输入上,卷积是描述这种变换的极其有效的方法。 +照片来源:Paula Goodfellow。} \end{figure} @@ -219,34 +254,34 @@ S(i, j) = (I*K)(i, j) = \sum_m \sum_n I(i+m, j+n) K(m, n). 如果一个函数满足输入改变,输出也以同样的方式改变这一性质,我们就说它是等变(equivariant)的。 特别地,如果函数$f(x)$与$g(x)$满足$f(g(x))= g(f(x))$,我们就说$f(x)$对于变换$g$具有等变性。 对于卷积来说,如果令$g$是输入的任意平移函数,那么卷积函数对于$g$具有等变性。 -举个例子,令$I$表示图像的明亮度函数(取值为整数),$g$表示图像函数的变换函数(把一个图像函数映射到另一个图像函数的函数)使得$I' = g(I)$,其中$I'(x,y) = I(x-1, y)$。 -这个函数把$I$中的每个像素向右移动一格。 +举个例子,令$I$表示图像在整数坐标上的亮度函数,$g$表示图像函数的变换函数(把一个图像函数映射到另一个图像函数的函数)使得$I' = g(I)$,其中图像函数$I'$满足$I'(x,y) = I(x-1, y)$。 +这个函数把$I$中的每个像素向右移动一个单位。 如果我们先对$I$进行这种变换然后进行卷积操作所得到的结果,与先对$I$进行卷积然后再对输出使用平移函数$g$得到的结果是一样的\footnote{译者注:原文将此处误写成了$I'$。} 。%译者注 -当处理时间序列数据时,卷积产生一条用来表明输入中出现不同特征的某种时间轴。 -如果我们把输入中的一个事件向后延时,在输出中也会有完全相同的表示,只是时间延时了。 -图像与之类似,卷积产生了一个2维映射来表明某种属性在输入的什么位置出现了。 +当处理时间序列数据时,这意味着通过卷积可以得到一个由输入中出现不同特征的时刻所组成的时间轴。 +如果我们把输入中的一个事件向后延时,在输出中仍然会有完全相同的表示,只是时间延后了。 +图像与之类似,卷积产生了一个2维映射来表明某些特征在输入中出现的位置。 如果我们移动输入中的对象,它的表示也会在输出中移动同样的量。 当处理多个输入位置时,一些作用在邻居像素的函数是很有用的。 -例如在处理图像时,在卷积神经网络的第一层进行图像的边缘检测是很有用的。 +例如在处理图像时,在卷积网络的第一层进行图像的边缘检测是很有用的。 相同的边缘或多或少地散落在图像的各处,所以应当对整个图像进行参数共享。 但在某些情况下,我们并不希望对整幅图进行参数共享。 -例如当我们在处理人脸图像(图像已经被剪裁成人脸在中心)时,我们可能会希望在不同的部位探测出不同的特征(处理人脸上部的网络需要去搜寻眉毛,处理人脸下部的网络就需要去搜寻下巴了)。 +例如,在处理已经通过剪裁而使其居中的人脸图像时,我们可能想要提取不同位置上的不同特征(处理人脸上部的部分网络需要去搜寻眉毛,处理人脸下部的部分网络就需要去搜寻下巴了)。 -卷积对其他的一些变换并不是天然等变的,例如对于图像尺度或者角度的变换,需要其他的一些机制来处理这些变换。 +卷积对其他的一些变换并不是天然等变的,例如对于图像的放缩或者旋转变换,需要其他的一些机制来处理这些变换。 -最后,一些不能被传统的由(固定大小的)矩阵乘法定义的神经网络处理的特殊数据,可能通过卷积神经网络来处理,我们将在\?节中进行讨论。 +最后,一些不能被传统的由(固定大小的)矩阵乘法定义的神经网络处理的特殊数据,可能通过卷积神经网络来处理,我们将在\sec?中进行讨论。 # 池化 -卷积神经网络的卷积层通常包含三级(如图\?所示)。 -在第一级中,卷积层并行地进行多个卷积运算来产生一组线性激活函数。 -在第二级中,非线性的激活函数如整流线性单元函数等作用在第一级中的每一个线性输出上。 +卷积网络中一个典型层包含三级(如\fig?所示)。 +在第一级中,这一层并行地计算多个卷积产生一组线性激活响应。 +在第二级中,每一个线性激活响应将会通过一个非线性的激活函数,例如整流线性激活函数。 这一级有时也被称为探测级。 -在第三级中,我们使用池化函数来更进一步地调整卷积层的输出。 +在第三级中,我们使用池化函数来进一步调整这一层的输出。 \begin{figure}[!htb] \ifOpenSource @@ -254,20 +289,26 @@ S(i, j) = (I*K)(i, j) = \sum_m \sum_n I(i+m, j+n) K(m, n). \else \centerline{\includegraphics{Chapter9/figures/conv_layer}} \fi -\caption{典型卷积神经网络层的组件。有两组常用的术语用于描述这些层。\emph{(左)}在这组术语中,卷积网络被视为少量相对复杂的层,每层具有许多"级"。在这组术语中,核张量与网络层之间存在一一对应关系。在本书中,我们通常使用这组术语。\emph{(右)}在这组术语中,卷积网络被视为更大数量的简单层;每一个处理步骤都被认为是一个独立的层。这意味着不是每个"层"都有参数。} +\caption{一个典型卷积神经网络层的组件。 +有两组常用的术语用于描述这些层。 +\emph{(左)}在这组术语中,卷积网络被视为少量相对复杂的层,每层具有许多"级"。 +在这组术语中,核张量与网络层之间存在一一对应关系。 +在本书中,我们通常使用这组术语。 +\emph{(右)}在这组术语中,卷积网络被视为更多数量的简单层;每一个处理步骤都被认为是一个独立的层。 +这意味着不是每一"层"都有参数。} \end{figure} 池化函数使用某一位置的相邻输出的总体统计特征来代替网络在该位置的输出。 例如,最大池化函数{cite?}给出相邻矩形区域内的最大值。 -其他常用的池化函数包括相邻矩形区域内的平均值、$L^2$范数以及依靠据中心像素距离的加权平均函数。 +其他常用的池化函数包括相邻矩形区域内的平均值、$L^2$范数以及基于据中心像素距离的加权平均函数。 -不管采用什么样的池化函数,当输入作出少量平移时,池化能帮助我们的表示近似不变。 -对于平移的不变性是说当我们把输入平移一微小的量,大多数通过池化函数的输出值并不会发生改变。 -图\?用了一个例子来说明这是如何实现的。 -\emph{局部平移不变性是一个很重要的性质,尤其是当我们关心某个特征是否出现而不关心它出现的具体位置时}。 -例如,当判定一张图像中是否包含人脸时,我们并不需要知道眼睛的具体像素位置,我们只需要知道有一只眼睛在脸的左边,有一只在右边就行了。 +不管采用什么样的池化函数,当输入作出少量平移时,池化能够帮助输入的表示近似不变。 +对于平移的不变性是指当我们对输入进行少量平移时,经过池化函数后的大多数输出并不会发生改变。 +\fig?用了一个例子来说明这是如何实现的。 +\emph{局部平移不变性是一个很有用的性质,尤其是当我们关心某个特征是否出现而不关心它出现的具体位置时}。 +例如,当判定一张图像中是否包含人脸时,我们并不需要知道眼睛的精确像素位置,我们只需要知道有一只眼睛在脸的左边,有一只在右边就行了。 但在一些其他领域,保存特征的具体位置却很重要。 例如当我们想要寻找一个由两条边相交而成的拐角时,我们就需要很好地保存边的位置来判定它们是否相交。 @@ -277,15 +318,20 @@ S(i, j) = (I*K)(i, j) = \sum_m \sum_n I(i+m, j+n) K(m, n). \else \centerline{\includegraphics{Chapter9/figures/max_pool_invariance}} \fi -\caption{最大池化引入不变性。\emph{(上)}卷积层中间输出的视图。下面一行显示非线性的输出。上面一行显示最大池化的输出,每个池的宽度为三个像素并且池化区域的步幅为一个像素。\emph{(下)}相同网络的视图,不过对输入右移了一个像素。下面一行的所有值都发生了改变,但上面一行只有一半的值发生了改变,这是因为最大池化单元只对周围的最大值比较敏感,而不是对精确的位置。} +\caption{最大池化引入了不变性。 +\emph{(上)}卷积层中间输出的视图。 +下面一行显示非线性的输出。 +上面一行显示最大池化的输出,每个池的宽度为三个像素并且池化区域的步幅为一个像素。 +\emph{(下)}相同网络的视图,不过对输入右移了一个像素。 +下面一行的所有值都发生了改变,但上面一行只有一半的值发生了改变,这是因为最大池化单元只对周围的最大值比较敏感,而不是对精确的位置。} \end{figure} -使用池化可以看作是增加了一个无限强的先验:卷积层学得的函数必须具有对少量平移的不变性。 +使用池化可以看作是增加了一个无限强的先验:这一层学得的函数必须具有对少量平移的不变性。 当这个假设成立时,池化可以极大地提高网络的统计效率。 -池化对于空间区域具有平移不变性,但当我们对于分离参数的卷积输出进行池化时,特征能够学得应该对于哪种变换具有不变性(如图\?所示)。 +对空间区域进行池化产生了平移不变性,但当我们对分离参数的卷积的输出进行池化时,特征能够学得应该对于哪种变换具有不变性(如\fig?所示)。 \begin{figure}[!htb] \ifOpenSource @@ -293,15 +339,24 @@ S(i, j) = (I*K)(i, j) = \sum_m \sum_n I(i+m, j+n) K(m, n). \else \centerline{\includegraphics{Chapter9/figures/learned_rotation}} \fi -\caption{学习不变性的示例。使用分离的参数学得多个特征,再使用池化单元进行池化,可以学得对输入的某些变换的不变性。这里我们展示了用三个学得的过滤器和一个最大池化单元可以学得对旋转变换的不变性。这三个过滤器都旨在检测手写的数字5。每个过滤器尝试匹配稍微不同方向的5。当输入中出现5时,相应的过滤器会匹配它并且在探测单元中引起大的激活。然后,无论哪个探测单元被激活,最大池化单元都具有大的激活。我们在这里展示网络如何处理两个不同的输入,导致两个不同的探测单元被激活。然而对池化单元的影响大致相同。这个原则在maxout网络{cite?}和其他卷积网络中使用。空间位置上的最大池化对于平移是天然不变的;这种多通道方法只在学习其他变换时是必要的。} +\caption{学习不变性的示例。 +使用分离的参数学得多个特征,再使用池化单元进行池化,可以学得对输入的某些变换的不变性。 +这里我们展示了用三个学得的过滤器和一个最大池化单元可以学得对旋转变换的不变性。 +这三个过滤器都旨在检测手写的数字5。 +每个过滤器尝试匹配稍微不同方向的5。 +当输入中出现5时,相应的过滤器会匹配它并且在探测单元中引起大的激活。 +然后,无论哪个探测单元被激活,最大池化单元都具有大的激活。 +我们在这里演示了网络如何处理两个不同的输入,这导致两个不同的探测单元被激活,然而对池化单元的影响大致相同。 +这个原则在\,maxout\,网络{cite?}和其他卷积网络中更有影响。 +空间位置上的最大池化对于平移是天然不变的;这种多通道方法只在学习其他变换时是必要的。} \end{figure} 因为池化综合了全部邻居的反馈,这使得池化单元少于探测单元成为可能,我们可以通过综合池化区域的$k$个像素的统计特征而不是单个像素来实现。 -图\?给出了一个例子。 +\fig?给出了一个例子。 这种方法提高了网络的计算效率,因为下一层少了约$k$ 倍的输入。 -当下一层的参数数目是其输入大小的函数时(例如当下一层是全连接的依赖矩阵乘法的网络层时),这种对于输入规模的减小也可以提高统计效率并且减少对于参数的存储需求。 +当下一层的参数数目是关于那一层输入大小的函数时(例如当下一层是全连接的基于矩阵乘法的网络层时),这种对于输入规模的减小也可以提高统计效率并且减少对于参数的存储需求。 \begin{figure}[!htb] \ifOpenSource @@ -309,7 +364,10 @@ S(i, j) = (I*K)(i, j) = \sum_m \sum_n I(i+m, j+n) K(m, n). \else \centerline{\includegraphics{Chapter9/figures/pool_downsample}} \fi -\caption{带有下采样的池化。这里我们使用最大池化,池的宽度为三并且池之间的步幅为二。这使得表示的大小减少了一半,减轻了下一层的计算和统计负担。注意到最右边的池化区域尺寸较小,但如果我们不想忽略一些探测单元的话就必须包含这个区域。} +\caption{带有降采样的池化。 +这里我们使用最大池化,池的宽度为三并且池之间的步幅为二。 +这使得表示的大小减少了一半,减轻了下一层的计算和统计负担。 +注意到最右边的池化区域尺寸较小,但如果我们不想忽略一些探测单元的话就必须包含这个区域。} \end{figure} @@ -319,16 +377,16 @@ S(i, j) = (I*K)(i, j) = \sum_m \sum_n I(i+m, j+n) K(m, n). 例如,最终的池化层可能会输出四组综合统计特征,每组对应着图像的一个象限,而与图像的大小无关。 一些理论工作对于在不同情况下应当使用哪种池化函数给出了一些指导{cite?}。 -动态地把特征池化在一起也是可行的,例如,通过针对特定属性的位置运行聚类算法{cite?}。 +将特征一起动态地池化也是可行的,例如,对于感兴趣特征的位置运行聚类算法{cite?}。 这种方法对于每幅图像产生一个不同的池化区域集合。 另一种方法是先\emph{学习}一个单独的池化结构,再应用到全部的图像中{cite?}。 池化可能会使得一些利用自顶向下信息的神经网络结构变得复杂,例如玻尔兹曼机和自编码器。 -这些问题将在第\?部分中当我们遇到这些类型的网络时进一步讨论。 -卷积玻尔兹曼机中的池化出现在\?节。 -一些可微网络中需要的在池化单元中进行的类逆运算将在\?节中讨论。 +这些问题将在\chap?中当我们遇到这些类型的网络时进一步讨论。 +卷积玻尔兹曼机中的池化出现在\sec?。 +一些可微网络中需要的在池化单元上进行的类逆运算将在\sec?中讨论。 -图\?给出了一些使用卷积和池化操作的用于分类的卷积神经网络的完整结构的例子。 +\fig?给出了一些使用卷积和池化操作的用于分类的完整卷积网络结构的例子。 \begin{figure}[!htb] \ifOpenSource @@ -336,29 +394,41 @@ S(i, j) = (I*K)(i, j) = \sum_m \sum_n I(i+m, j+n) K(m, n). \else \centerline{\includegraphics{Chapter9/figures/cnn_classifier}} \fi -\caption{卷积网络用于分类的架构示例。本图中使用的具体步幅和深度并不适合实际使用;它们被设计得非常浅以适合页面。实际的卷积网络也常常涉及大量的分支,不同于这里为简单起见所使用的链式结构。\emph{(左)}处理固定大小的图像的卷积网络。在卷积层和池化层几层交替之后,卷积特征映射的张量被重新整形以展平空间维度。网络的其余部分是一个普通的前馈网络分类器,如第\?章所述。\emph{(中)}处理大小可变的图像的卷积网络,但仍保持全连接的部分。该网络使用具有可变大小但是数量固定的池的池化操作,以便向网络的全连接部分提供576个单位的固定大小的向量。 \emph{(右)}没有任何全连接权重层的卷积网络。相反,最后的卷积层为每个类输出一个特征映射。该模型可能学习每个类在每个空间位置出现的可能性的映射。将特征映射进行平均得到的单个值,提供了顶部softmax分类器的变量。} +\caption{卷积网络用于分类的结构示例。 +本图中使用的具体步幅和深度并不建议实际使用;它们被设计得非常浅以适合页面。 +实际的卷积网络还常常涉及大量的分支,不同于这里为简单起见所使用的链式结构。 +\emph{(左)}处理固定大小的图像的卷积网络。 +在卷积层和池化层几层交替之后,卷积特征映射的张量被重新变形以展平空间维度。 +网络的其余部分是一个普通的前馈网络分类器,如\chap?所述。 +\emph{(中)}处理大小可变的图像的卷积网络,但仍保持全连接的部分。 +该网络使用具有可变大小但是数量固定的池的池化操作,以便向网络的全连接部分提供固定576个单位大小的向量。 +\emph{(右)}没有任何全连接权重层的卷积网络。 +相对的,最后的卷积层为每个类输出一个特征映射。 +该模型可能会用来学习每个类出现在每个空间位置的可能性的映射。 +将特征映射进行平均得到的单个值,提供了顶部softmax分类器的变量。} \end{figure} # 卷积与池化作为一种无限强的先验 -回忆一下\?节中先验概率分布的概念。 +回忆一下\sec?中先验概率分布的概念。 这是一个模型参数的概率分布,它刻画了在我们看到数据之前我们认为什么样的模型是合理的信念。 先验被认为是强或者弱取决于先验中概率密度的集中程度。 -弱先验具有较高的熵值,例如方差很大的高斯分布,这样的先验允许数据对于参数的改变具有或多或少的自由性。 -强先验具有较低的熵值,例如方差很小的高斯分布,这样的先验在决定参数最终取值时起着更加积极的作用。 +弱先验具有较高的熵值,例如方差很大的高斯分布。这样的先验允许数据对于参数的改变具有或多或少的自由性。 +强先验具有较低的熵值,例如方差很小的高斯分布。这样的先验在决定参数最终取值时起着更加积极的作用。 -一个无限强的先验对一些参数的概率置零并且要求禁止对这些参数赋值,无论数据对于这些参数的值给出了多大的支持。 +一个无限强的先验需要对一些参数的概率置零并且完全禁止对这些参数赋值,无论数据对于这些参数的值给出了多大的支持。 -我们可以把卷积神经网络想成和全连接网络类似,但对于这个全连接网络的权值有一个无限强的先验。 -这个无限强的先验是说一个隐藏单元的权值必须和它邻居的权值相等,但在空间中改变。 -这个先验也要求除了那些处在隐藏单元空间连续的小的接收域以内的权值外,其余的权值都为零。%这样翻译对吗?其实这里加个图更好 +我们可以把卷积网络类比成全连接网络,但对于这个全连接网络的权重有一个无限强的先验。 +这个无限强的先验是说一个隐藏单元的权重必须和它邻居的权重相同,但可以在空间上移动。 +这个先验也要求除了那些处在隐藏单元的小的空间连续的接受域内的权重以外,其余的权重都为零。 + 总之,我们可以把卷积的使用当作是对网络中一层的参数引入了一个无限强的先验概率分布。 -这个先验是说该层应该学得的函数只包含局部连接关系并且对平移具有等变性。 +这个先验说明了该层应该学得的函数只包含局部连接关系并且对平移具有等变性。 类似的,使用池化也是一个无限强的先验:每一个单元都具有对少量平移的不变性。 当然,把卷积神经网络当作一个具有无限强先验的全连接网络来实现会导致极大的计算浪费。 @@ -367,12 +437,12 @@ S(i, j) = (I*K)(i, j) = \sum_m \sum_n I(i+m, j+n) K(m, n). 其中一个关键的洞察是卷积和池化可能导致欠拟合。 与任何其他先验类似,卷积和池化只有当先验的假设合理且正确时才有用。 如果一项任务依赖于保存精确的空间信息,那么在所有的特征上使用池化将会增大训练误差。 -一些卷积神经网络{cite?}为了既获得具有较高不变性的特征又获得当平移不变性不合理时不会导致欠拟合的特征,被设计成在一些通道上使用池化而在另一些通道上不使用。 -当一项任务涉及到要对输入中相隔较远的信息进行合并时,那么卷积所需要的先验可能就不正确了。 +一些卷积网络结构~{cite?}为了既获得具有较高不变性的特征又获得当平移不变性不合理时不会导致欠拟合的特征,被设计成在一些通道上使用池化而在另一些通道上不使用。 +当一项任务涉及到要对输入中相隔较远的信息进行合并时,那么卷积所利用的先验可能就不正确了。 另一个关键洞察是当我们比较卷积模型的统计学习表现时,只能以基准中的其他卷积模型作为比较的对象。 其他不使用卷积的模型即使我们把图像中的所有像素点都置换后依然有可能进行学习。 -对于许多图像数据集,还有一些分别的基准,有些是针对那些具有置换不变性并且必须通过学习发现拓扑结构的模型,还有一些是针对设计者将空间关系的知识通过硬编码给了它们的模型。 +对于许多图像数据集,还有一些分别的基准,有些是针对那些具有置换不变性并且必须通过学习发现拓扑结构的模型,还有一些是针对模型设计者将空间关系的知识植入了它们的模型。 @@ -381,23 +451,23 @@ S(i, j) = (I*K)(i, j) = \sum_m \sum_n I(i+m, j+n) K(m, n). 当在神经网络的上下文中讨论卷积时,我们通常不是特指数学文献中使用的那种标准的离散卷积运算。 -实际应用中的函数略微有些不同。 +实际应用中的函数略有不同。 这里我们详细讨论一下这些差异,并且对神经网络中用到的函数的一些重要性质进行重点说明。 -首先,当我们提到神经网络中的卷积时,我们通常是指一次特定的运算,而这种运算包含了并行地使用多个卷积。 -这是因为带有单个核的卷积只能提取一种类型的特征,尽管它作用在多个空间位置上。 -我们通常希望神经网络的一层能够在多个位置提取多种类型的特征。 +首先,当我们提到神经网络中的卷积时,我们通常是指由多个并行卷积组成的运算。 +这是因为具有单个核的卷积只能提取一种类型的特征,尽管它作用在多个空间位置上。 +我们通常希望网络的每一层能够在多个位置提取多种类型的特征。 -另外,输入通常也不仅仅是实值的网格,而是由一系列向量值的观测数据构成的网格。 +另外,输入通常也不仅仅是实值的网格,而是由一系列观测数据的向量构成的网格。 例如,一幅彩色图像在每一个像素点都会有红绿蓝三种颜色的亮度。 -在多层的卷积神经网络中,第二层的输入是第一层的输出,通常在每个位置包含多个卷积的输出。 -当用于图像时,我们通常把卷积的输入输出都看作是3维的张量,其中一个索引用于标明不同的通道(例如红绿蓝),另外两个索引标明在每个通道上的空间坐标。 -软件实现通常使用批处理模式,所以它们会使用4维的张量,第四维索引用于标明批处理中不同的实例,但我们为简明起见这里忽略批处理索引。 +在多层的卷积网络中,第二层的输入是第一层的输出,通常在每个位置包含多个不同卷积的输出。 +当处理图像时,我们通常把卷积的输入输出都看作是3维的张量,其中一个索引用于标明不同的通道(例如红绿蓝),另外两个索引标明在每个通道上的空间坐标。 +软件实现通常使用批处理模式,所以实际上会使用4维的张量,第四维索引用于标明批处理中不同的实例,但我们为简明起见这里忽略批处理索引。 -因为卷积神经网络通常使用多通道的卷积,它们基于的线性运算并不保证一定是可交换的,即使使用了核翻转也是如此。 -这些多通道的运算只有当其中的每个运算的输出和输入具有相同的通道数时才是可交换的。 +因为卷积网络通常使用多通道的卷积,所以即使使用了核翻转, 也不一定保证网络的线性运算是可交换的。 +只有当其中的每个运算的输出和输入具有相同的通道数时,这些多通道的运算才是可交换的。。 -假定我们有一个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$得到的,那么 @@ -411,15 +481,15 @@ S(i, j) = (I*K)(i, j) = \sum_m \sum_n I(i+m, j+n) K(m, n). 我们有时会希望跳过核中的一些位置来降低计算的开销(相应的代价是提取特征没有先前那么好了)。 -我们可以把这一过程看作是对卷积函数输出的下采样(downsampling)。 -如果我们只想对输出的每个方向上的$s$个像素进行采样,那么我们可以定义一个下采样卷积函数$c$使得 +我们可以把这一过程看作是对全卷积函数输出的下采样(downsampling)。 +如果我们只想在输出的每个方向上每间隔$s$个像素进行采样,那么我们可以定义一个下采样卷积函数$c$使得 \begin{equation} \TEZ_{i,j,k} = c(\TSK, \TSV, s)_{i,j,k} = \sum_{l,m,n} [\TEV_{l,(j-1)\times s+m, (k-1)\times s +n,} \TEK_{i,l,m,n}]. \end{equation} 我们把$s$称为下采样卷积的步幅。 当然也可以对每个移动方向定义不同的步幅。 -图\?演示了一个实例。 +\fig?演示了一个实例。 \begin{figure}[!htb] \ifOpenSource @@ -427,14 +497,18 @@ S(i, j) = (I*K)(i, j) = \sum_m \sum_n I(i+m, j+n) K(m, n). \else \centerline{\includegraphics{Chapter9/figures/stride_conv}} \fi -\caption{带有步幅的卷积。在这个例子中,我们的步幅为二。\emph{(上)}在单个操作中实现的步幅为二的卷积。\emph{(下)}步幅大于一个像素的卷积在数学上等价于单位步幅的卷积随后下采样。显然,涉及下采样的两步法在计算上是浪费的,因为它计算了许多将被丢弃的值。} +\caption{带有步幅的卷积。 +在这个例子中,我们的步幅为二。 +\emph{(上)}\,在单个操作中实现的步幅为二的卷积。 +\emph{(下)}\,步幅大于一个像素的卷积在数学上等价于单位步幅的卷积随后降采样。 +显然,涉及降采样的两步法在计算上是浪费的,因为它计算了许多将被丢弃的值。} \end{figure} -在任何卷积神经网络的应用中都有一个重要性质,那就是能够隐含地对输入$\TSV$用零进行填充(pad)使得它加宽。 +在任何卷积网络的实现中都有一个重要性质,那就是能够隐含地对输入$\TSV$用零进行填充(pad)使得它加宽。 如果没有这个性质,表示的宽度在每一层就会缩减,缩减的幅度是比核少一个像素这么多。 对输入进行零填充允许我们对核的宽度和输出的大小进行独立的控制。 如果没有零填充,我们就被迫面临二选一的局面,要么选择网络空间宽度的快速缩减,要么选择一个小型的核——这两种情境都会极大得限制网络的表示能力。 -图\?给出了一个例子。 +\fig?给出了一个例子。 \begin{figure}[!htb] \ifOpenSource @@ -442,21 +516,29 @@ S(i, j) = (I*K)(i, j) = \sum_m \sum_n I(i+m, j+n) K(m, n). \else \centerline{\includegraphics{Chapter9/figures/zero_pad_shrink}} \fi -\caption{零填充对网络大小的影响。考虑一个卷积网络,每层有一个宽度为六的核。 在这个例子中,我们不使用任何池化,所以只有卷积操作本身缩小网络的大小。\emph{(上)}在这个卷积网络中,我们不使用任何隐含的零填充。这使得表示在每层缩小五个像素。从十六个像素的输入开始,我们只能有三个卷积层,并且最后一层不能移动核,所以可以说只有两层是真正的卷积层。可以通过使用较小的核来减缓收缩速率,但是较小的核表示能力不足,并且在这种结构中一些收缩是不可避免的。\emph{(下)}通过向每层添加五个隐含的零,我们防止了表示随深度收缩。这允许我们设计一个任意深的卷积网络。} +\caption{零填充对网络大小的影响。 +考虑一个卷积网络,每层有一个宽度为六的核。 +在这个例子中,我们不使用任何池化,所以只有卷积操作本身缩小网络的大小。 +\emph{(上)}在这个卷积网络中,我们不使用任何隐含的零填充。 +这使得表示在每层缩小五个像素。 +从十六个像素的输入开始,我们只能有三个卷积层,并且最后一层不能移动核,所以可以说只有两层是真正的卷积层。 +可以通过使用较小的核来减缓收缩速率,但是较小的核表示能力不足,并且在这种结构中一些收缩是不可避免的。 +\emph{(下)}通过向每层添加五个隐含的零,我们防止了表示随深度收缩。 +这允许我们设计一个任意深的卷积网络。} \end{figure} 有三种零填充设定的情况值得注意。 第一种是无论怎样都不使用零填充的极端情况,并且卷积核只允许访问那些图像中能够完全包含整个核的位置。 -在MATLAB中,这称为有效卷积。 +在MATLAB的术语中,这称为有效卷积。 在这种情况下,输出的所有像素都是输入中相同数量像素的函数,这使得输出像素的表示更加规范。 然而,输出的大小在每一层都会缩减。 如果输入的图像宽度是$m$,核的宽度是$k$,那么输出的宽度就会变成$m-k+1$。 如果卷积核非常大的话缩减率会非常显著。 因为缩减数大于0,这限制了网络中能够包含的卷积层的层数。 -当层数增加时,网络的空间维度最终会缩减到$1\times 1$,这种情况下另外的层就不可能进行有意义的卷积了。 +当层数增加时,网络的空间维度最终会缩减到$1\times 1$,这种情况下增加的层就不可能进行有意义的卷积了。 第二种特殊的情况是只进行足够的零填充来保持输出和输入具有相同的大小。 -在MATLAB中,这称为相同卷积。 -在这种情况下,网络能够包含任意多的卷积层,只要硬件可以支持,这是因为卷积运算并没有改变相关的结构。 +在MATLAB的术语中,这称为相同卷积。 +在这种情况下,只要硬件支持,网络就能包含任意多的卷积层,这是因为卷积运算不改变下一层的结构。。 然而,输入像素中靠近边界的部分相比于中间部分对于输出像素的影响更小。 这可能会导致边界像素存在一定程度的欠表示。 这使得第三种极端情况产生了,在MATLAB中称为全卷积。 @@ -469,14 +551,14 @@ S(i, j) = (I*K)(i, j) = \sum_m \sum_n I(i+m, j+n) K(m, n). -在一些情况下,我们并不一定真正想用卷积,而只是用一些局部连接的网络层{cite?}。 +在一些情况下,我们并不是真的想使用卷积,而是想用一些局部连接的网络层{cite?}。 在这种情况下,我们的多层感知机对应的邻接矩阵是相同的,但每一个连接都有它自己的权重,用一个6维的张量$\TSW$来表示。 $\TSW$的索引分别是:输出的通道$i$,输出的行$j$和列$k$,输入的通道$l$,输入的行偏置$m$和列偏置$n$。 局部连接层的线性部分可以表示为 \begin{equation} \TEZ_{i,j,k} = \sum_{l,m,n} [\TEV_{l, j+m-1, k+n-1} w_{i, j, k, l, m, n}]. %这里应该是$\TEW$? \end{equation} -这有时也被称为非共享卷积,因为它和带有一个小核的离散卷积运算很像,但并不横跨位置来共享参数。 +这有时也被称为非共享卷积,因为它和具有一个小核的离散卷积运算很像,但并不横跨位置来共享参数。 图\?比较了局部连接、卷积和全连接的区别。 \begin{figure}[!htb] @@ -485,17 +567,25 @@ $\TSW$的索引分别是:输出的通道$i$,输出的行$j$和列$k$,输 \else \centerline{\includegraphics{Chapter9/figures/local}} \fi -\caption{局部连接,卷积和全连接的比较。\emph{(上)}每一小片(接受域)有两个像素的局部连接层。每条边用唯一的字母标记,来显示每条边都有自身的权重参数。\emph{(中)}核宽度为两个像素的卷积层。该模型与局部连接层具有完全相同的连接。区别不在于哪些单元相互交互,而在于如何共享参数。局部连接层没有参数共享。卷积层在整个输入上重复使用相同的两个权重,正如用于标记每条边的字母重复出现所指示的那样。\emph{(下)}全连接层类似于局部连接层,它的每条边都有其自身的参数(在该图中用字母明确标记的话就太多了)。 然而,它不具有局部连接层的连接受限的特征。} +\caption{局部连接,卷积和全连接的比较。 +\emph{(上)}每一小片(接受域)有两个像素的局部连接层。 +每条边用唯一的字母标记,来显示每条边都有自身的权重参数。 +\emph{(中)}核宽度为两个像素的卷积层。 +该模型与局部连接层具有完全相同的连接。 +区别不在于哪些单元相互交互,而在于如何共享参数。 +局部连接层没有参数共享。 +正如用于标记每条边的字母重复出现所指示的,卷积层在整个输入上重复使用相同的两个权重。 +\emph{(下)}全连接层类似于局部连接层,它的每条边都有其自身的参数(在该图中用字母明确标记的话就太多了)。 然而,它不具有局部连接层的连接受限的特征。} \end{figure} -当我们知道每一个特征都是一小部分空间的函数而不是整个空间的特征时,局部连接层是很有用的。 -例如,如果我们想要辨别一张图片是否是人脸图像时,我们只需要去寻找嘴是否在图像的下部中央部分即可。 +当我们知道每一个特征都是一小块空间的函数并且相同的特征不会出现在所有的空间上时,局部连接层是很有用的。 +例如,如果我们想要辨别一张图片是否是人脸图像时,我们只需要去寻找嘴是否在图像下半部分即可。 使用那些连接被更进一步限制的卷积或者局部连接层也是有用的,例如,限制每一个输出的通道$i$仅仅是输入通道$l$的一部分的函数时。 实现这种情况的一种通用方法是使输出的前$m$个通道仅仅连接到输入的前$n$个通道,输出的接下来的$m$个通道仅仅连接到输入的接下来的$n$个通道,以此类推。 -图\?给出了一个例子。 +\fig?给出了一个例子。 对少量通道间的连接进行建模允许网络使用更少的参数,这降低了存储的消耗以及提高了统计效率,并且减少了前向和反向传播所需要的计算量。 这些目标的实现并没有减少隐藏单元的数目。 @@ -508,10 +598,10 @@ $\TSW$的索引分别是:输出的通道$i$,输出的行$j$和列$k$,输 \caption{卷积网络的前两个输出通道只和前两个输入通道相连,随后的两个输出通道只和随后的两个输入通道相连。} \end{figure} -拼贴卷积{cite?}对卷积层和局部连接层进行了折衷。%这里翻译成啥?瓷砖?平铺? +平铺卷积{cite?}对卷积层和局部连接层进行了折衷。 这里并不是对\emph{每一个}空间位置的权重集合进行学习,我们学习一组核使得当我们在空间移动时它们可以循环利用。 这意味着在近邻的位置上拥有不同的过滤器,就像局部连接层一样,但是对于这些参数的存储需求仅仅会增长常数倍,这个常数就是核的集合的大小,而不是整个输出的特征映射的大小。 -图\?对局部连接层、拼贴卷积和标准卷积进行了比较。 +\fig?对局部连接层、平铺卷积和标准卷积进行了比较。 \begin{figure}[!htb] \ifOpenSource @@ -520,59 +610,73 @@ $\TSW$的索引分别是:输出的通道$i$,输出的行$j$和列$k$,输 \centerline{\includegraphics{Chapter9/figures/tiled}} \fi \captionsetup{singlelinecheck=off} -\caption[.]{局部连接层、拼贴卷积和标准卷积的比较。当使用大小相同的核时,这三种方法的单元之间具有相同的连接。此图是对使用两个像素宽的核的说明。这三种方法之间的区别在于它们如何共享参数。\emph{(上)}局部连接层根本没有共享参数。我们对每个连接使用唯一的字母标记,来表明每个连接都有它自身的权重。\emph{(中)}拼贴卷积有$t$个不同的核。这里我们说明$t=2$的情况。其中一个核具有标记为"a"和"b"的边,而另一个具有标记为"c"和"d"的边。我们每次在输出中向右移动一个像素,移动后使用不同的核。这意味着,与局部连接层类似,输出中的相邻单元具有不同的参数。与局部连接层不同的是,在我们遍历所有可用的$t$个核之后,我们循环回到了第一个核。如果两个输出单元间隔$t$个步长的倍数,则它们共享参数。\emph{(下)}传统卷积等效于$t=1$的拼贴卷积。它只有一个核,并且被应用到各个地方,我们在图中表示为在各处使用具有标记为"a"和"b"的边的核。} +\caption[.]{局部连接层、平铺卷积和标准卷积的比较。 +当使用相同大小的核时,这三种方法在单元之间具有相同的连接。 +此图是对使用两个像素宽的核的说明。 +这三种方法之间的区别在于它们如何共享参数。 +\emph{(上)}局部连接层根本没有共享参数。 +我们对每个连接使用唯一的字母标记,来表明每个连接都有它自身的权重。 +\emph{(中)}平铺卷积有$t$个不同的核。 +这里我们说明$t=2$的情况。 +其中一个核具有标记为"a"和"b"的边,而另一个具有标记为"c"和"d"的边。 +每当我们在输出中右移一个像素后,我们使用一个不同的核。 +这意味着,与局部连接层类似,输出中的相邻单元具有不同的参数。 +与局部连接层不同的是,在我们遍历所有可用的$t$个核之后,我们循环回到了第一个核。 +如果两个输出单元间隔$t$个步长的倍数,则它们共享参数。 +\emph{(下)}传统卷积等效于$t=1$的平铺卷积。 +它只有一个核,并且被应用到各个地方,我们在图中表示为在各处使用具有标记为"a"和"b"的边的核。} \end{figure} -为了代数地定义拼贴卷积,令$\TSK$是一个6维的张量\footnote{译者注:原文将$\TSK$误写成了$k$。},其中的两维对应着输出映射中的不同位置。%译者注 -我们这里并不是使用分别的索引来表示输出映射中的每一个位置,输出的位置在每个方向上在$t$个不同的核的组成的集合中进行循环。 +为了用代数的方法定义平铺卷积,令$\TSK$是一个6维的张量\footnote{译者注:原文将$\TSK$误写成了$k$。},其中的两维对应着输出映射中的不同位置。 +$\TSK$在这里并没有对输出映射中的每一个位置使用单独的索引,输出的位置在每个方向上在$t$个不同的核组成的集合中进行循环。 如果$t$等于输出的宽度,这就是局部连接层了。 \begin{equation} \TEZ_{i, j, k} = \sum_{l, m, n} \TEV_{l, j+m-1, k+n-1} \TEK_{i, l, m, n, j\% t +1, k\% t+1}, \end{equation} -这里百分号是取模运算,其中$t\% t =0, (t+1)\% t = 1$等等。 -在每一维上使用不同的$t$可以很直观地对这个方程进行扩展。%这里需要重新理解一下 +这里百分号是取模运算,它的性质包括$t\% t =0, (t+1)\% t = 1$等等。 +在每一维上使用不同的$t$可以很容易对这个方程进行扩展。 -局部连接层与拼贴卷积层都和最大池化有一些有趣的关联:这些层的探测单元都是由不同的过滤器驱动的。 -如果这些过滤器能够学会探测相同隐含特征的不同变换形式,那么最大池化的单元对于学得的变换就具有不变性(如图\?所示)。 +局部连接层与平铺卷积层都和最大池化有一些有趣的关联:这些层的探测单元都是由不同的过滤器驱动的。 +如果这些过滤器能够学会探测相同隐含特征的不同变换形式,那么最大池化的单元对于学得的变换就具有不变性(如\fig?所示)。 卷积层对于平移具有内置的不变性。 -实现卷积神经网络时,采用除卷积以外的其他一些运算通常也是必须的。 +实现卷积网络时,通常也需要除卷积以外的其他运算。 为了实现学习,必须在给定输出的梯度时能够计算核的梯度。 在一些简单情况下,这种运算可以通过卷积来实现,但在很多我们感兴趣的情况下,包括步幅大于1的情况,并不具有这样的性质。 回忆一下卷积是一种线性运算,所以可以表示成矩阵乘法的形式(如果我们首先把输入张量变形为一个扁平的向量)。 -涉及到的矩阵是卷积核的函数。 -这个矩阵是稀疏的并且核的每个元素都复制给矩阵的很多个元素。 -这种观点能够帮助我们导出卷积神经网络需要的很多其他运算。 +其中包含的矩阵是关于卷积核的函数。 +这个矩阵是稀疏的并且核的每个元素都复制给矩阵的多个元素。 +这种观点能够帮助我们导出实现一个卷积网络所需的很多其他运算。 通过卷积定义的矩阵转置的乘法就是这样一种运算。 -这种运算用于通过卷积层反向传播误差的导数,所以它在训练多于一个隐藏层的卷积神经网络时是必要的。 +这种运算用于在卷积层反向传播误差的导数,所以它在训练多于一个隐藏层的卷积网络时是必要的。 如果我们想要从隐藏层单元重构可视化单元时,同样的运算也是需要的{cite?}。 重构可视化单元是本书第\?部分的模型广泛用到的一种运算,这些模型包括自编码器、RBM和稀疏编码等等。 构建这些模型的卷积化的版本都要用到转置化卷积。 -就像核梯度的运算,这种输入梯度运算在某些情况下可以用卷积来实现,但在一般情况下需要用到第三种运算来实现。%这里不是很懂 +类似核梯度运算,这种输入梯度运算在某些情况下可以用卷积来实现,但在一般情况下需要用到第三种运算来实现。%这里不是很懂 必须非常小心地来使这种转置运算和前向传播过程相协调。 -转置运算返回的输出的大小取决于三个方面:零填充的策略、前向传播运算的步幅和前向传播的输出映射的大小。 +转置运算返回的输出的大小取决于三个方面:零填充的策略、前向传播运算的步幅以及前向传播的输出映射的大小。 在一些情况下,不同大小的输入通过前向传播过程能够得到相同大小的输出映射,所以必须明确地告知转置运算原始输入的大小。 这三种运算——卷积、从输出到权重的反向传播和从输出到输入的反向传播——对于训练任意深度的前馈卷积网络,以及训练带有(基于卷积的转置的)重构函数的卷积网络,这三种运算都足以计算它们所需的所有梯度。 -对于完全一般的多维、多样例情况下的公式,完整的推导可以参见{Goodfellow-TR2010}。 +对于完全一般的多维、多样例情况下的公式,完整的推导可以参见~{Goodfellow-TR2010}。 为了直观说明这些公式是如何起作用的,我们这里给出一个二维单个样例的版本。 -假设我们想要训练这样一个卷积神经网络,它包含步幅为$s$的步幅卷积,该卷积的核为$\TSK$,作用于多通道的图像$\TSV$,表示为$c(\TSK, \TSV, s)$,就像公式\?中一样。 +假设我们想要训练这样一个卷积网络,它包含步幅为$s$的步幅卷积,该卷积的核为$\TSK$,作用于多通道的图像$\TSV$,定义为$c(\TSK, \TSV, s)$,就像公式\?中一样。 假设我们想要最小化某个损失函数$J(\TSV, \TSK)$。 在前向传播过程中,我们需要用$c$本身来输出$\TSZ$,然后$\TSZ$传递到网络的其余部分并且被用来计算损失函数$J$。 -在反向传播过程中,我们会收到一个张量$\TSG$表示为$\TEG_{i, j, k} = \frac{\partial}{\partial \TEZ_{i, j, k}} J(\TSV, \TSK)$。 +在反向传播过程中,我们会得到一个张量$\TSG$满足$\TEG_{i, j, k} = \frac{\partial}{\partial \TEZ_{i, j, k}} J(\TSV, \TSK)$。 为了训练网络,我们需要对核中的权重求导。 为了实现这个目的,我们可以使用一个函数 @@ -592,26 +696,26 @@ h(\TSK, \TSG, s)_{i, j, k} &=& \frac{\partial }{\partial \TEV_{i, j, k}} J(\TSV, \sum_q \TEK_{q,i,m,p} \TEG_{q, l, n}. \end{eqnarray} -第\?章描述的自编码器网络,是一些训练成把输入拷贝到输出的前馈网络。 -一个简单的例子是PCA算法,将输入$\bm{x}$拷贝到一个近似的重构值$\bm{r}$,通过函数$\bm{W}^\top \bm{Wx}$来实现。 -使用权重矩阵转置的乘法,就像PCA算法这种,在一般的自编码器中是很常见的。 +第\?章描述的自编码器网络,是一些被训练成把输入拷贝到输出的前馈网络。 +一个简单的例子是\,PCA\,算法,将输入$\Vx$拷贝到一个近似的重构值$\Vr$,通过函数${\MW}^\top \MW \Vx$来实现。 +使用权重矩阵转置的乘法,就像\,PCA\,算法这种,在一般的自编码器中是很常见的。 为了使这些模型卷积化,我们可以用函数$h$来实现卷积运算的转置。 -假定我们有和$\TSZ$相同格式的隐藏单元$\TSH$,并且我们定义一种重构运算 +假定我们有和$\TSZ$相同形式的隐藏单元$\TSH$,并且我们定义一种重构运算 \begin{equation} \TSR = h(\TSK, \TSH, s). \end{equation} -为了训练自编码器,我们会收到关于$\TSR$的梯度,表示为一个张量$\TSE$。 -为了训练解码器,我们需要获得对于$\TSK$的梯度,通过$g(\TSH, \TSE, s)$来得到。 -为了训练编码器,我们需要获得对于$\TSH$的梯度,通过$c(\TSK, \TSE, s)$来得到。 -也可能通过用$c$和$h$对$g$求微分得到,但这些运算对于任何标准神经网络上的反向传播算法来说都是不需要的。 +为了训练自编码器,我们会得到关于$\TSR$的梯度,表示为一个张量$\TSE$。 +为了训练解码器,我们需要获得对于$\TSK$的梯度,这通过$g(\TSH, \TSE, s)$来得到。 +为了训练编码器,我们需要获得对于$\TSH$的梯度,这通过$c(\TSK, \TSE, s)$来得到。 +通过用$c$和$h$对$g$求微分也是可行的,但这些运算对于任何标准神经网络上的反向传播算法来说都是不需要的。 一般来说,在卷积层从输入到输出的变换中我们不仅仅只用线性运算。 我们一般也会在进行非线性运算前,对每个输出加入一些偏置项。 这样就产生了如何在偏置项中共享参数的问题。 -对于局部连接层,很自然地对每个单元都给定它特有的偏置,对于拼贴卷积,也很自然地用与核一样的拼贴模式来共享参数。 +对于局部连接层,很自然地对每个单元都给定它特有的偏置,对于平铺卷积,也很自然地用与核一样的平铺模式来共享参数。 对于卷积层来说,通常的做法是在输出的每一个通道上都设置一个偏置,这个偏置在每个卷积映射的所有位置上共享。 然而,如果输入是已知的固定大小,也可以在输出映射的每个位置学习一个单独的偏置。 分离这些偏置可能会稍稍降低模型的统计效率,但同时也允许模型来校正图像中不同位置的统计差异。 @@ -626,7 +730,7 @@ h(\TSK, \TSG, s)_{i, j, k} &=& \frac{\partial }{\partial \TEV_{i, j, k}} J(\TSV, 例如,模型可以产生张量$\TSS$,其中$\TES_{i,j,k}$是网络的输入像素$(j, k)$属于类$i$的概率。 这允许模型标记图像中的每个像素,并绘制沿着单个对象轮廓的精确掩模。 -经常出现的一个问题是输出平面可能比输入平面要小,如图\?所示。 +经常出现的一个问题是输出平面可能比输入平面要小,如\fig?所示。 用于对图像中单个对象分类的常用结构中,网络空间维数的最大减少来源于使用大步幅的池化层。 为了产生与输入大小相似的输出映射,我们可以避免把池化放在一起{cite?}。 另一种策略是单纯地产生一张低分辨率的标签网格{cite?}。 @@ -634,8 +738,8 @@ h(\TSK, \TSG, s)_{i, j, k} &=& \frac{\partial }{\partial \TEV_{i, j, k}} J(\TSV, 对图像逐个像素标记的一种策略是先产生图像标签的原始猜测,然后使用相邻像素之间的交互来修正该原始猜测。 重复这个修正步骤数次对应于在每一步使用相同的卷积,该卷积在深层网络的最后几层之间共享权重{cite?}。 -这使得在层之间共享参数的连续的卷积层所执行的一系列运算,形成了一种特殊的循环神经网络{cite?}。 -图\?给出了这样一个循环卷积网络的结构。 +这使得在层之间共享参数的连续的卷积层所执行的一系列运算,形成了一种特殊的循环神经网络~{cite?}。 +\fig?给出了这样一个循环卷积网络的结构。 \begin{figure}[!htb] \ifOpenSource @@ -644,7 +748,17 @@ h(\TSK, \TSG, s)_{i, j, k} &=& \frac{\partial }{\partial \TEV_{i, j, k}} J(\TSV, \centerline{\includegraphics{Chapter9/figures/iterative}} \fi \captionsetup{singlelinecheck=off} -\caption[.]{用于像素标记的循环卷积网络的示例。输入是图像张量$\TSX$,它的轴对应图像的行、列和通道(红,绿,蓝)。目标是输出标签张量$\mathit{\hat{Y}}$,它遵循每个像素的标签的概率分布。该张量的轴对应图像的行、列和不同类别。并不是单次输出$\mathit{\hat{Y}}$,循环网络通过使用$\mathit{\hat{Y}}$的先前估计作为创建新估计的输入,来迭代地改善其估计。相同的参数用于每个更新的估计,并且估计可以如我们所愿地被改善任意多次。每一步使用的卷积核张量$\TSU$,是用来计算给定输入图像的隐藏表示的。核张量$\TSV$用于产生给定隐藏值时标签的估计。除了第一步之外,核$\TSW$都对$\mathit{\hat{Y}}$进行卷积来提供隐藏层的输入。在第一步中,此项由零代替。因为每一步使用相同的参数,所以这是一个循环网络的例子,如第\?章所述。} +\caption[.]{用于像素标记的循环卷积网络的示例。 +输入是图像张量$\TSX$,它的轴对应图像的行、列和通道(红,绿,蓝)。 +目标是输出标签张量$\hat{Y}$,它遵循每个像素的标签的概率分布。 +该张量的轴对应图像的行、列和不同类别。 +并不是单次输出$\hat{Y}$,循环网络通过使用$\hat{Y}$的先前估计作为创建新估计的输入,来迭代地改善其估计。 +每个更新的估计使用相同的参数,并且估计可以如我们所愿地被改善任意多次。 +每一步使用的卷积核张量$\TSU$,是用来计算给定输入图像的隐藏表示的。 +核张量$\TSV$用于产生给定隐藏值时标签的估计。 +除了第一步之外,核$\TSW$都对$\hat{Y}$进行卷积来提供隐藏层的输入。 +在第一步中,此项由零代替。 +因为每一步使用相同的参数,所以这是一个循环网络的例子,如\chap?所述。} \end{figure} @@ -659,7 +773,7 @@ h(\TSK, \TSG, s)_{i, j, k} &=& \frac{\partial }{\partial \TEV_{i, j, k}} J(\TSV, 卷积网络使用的数据通常包含多个通道,每个通道是时间上或空间中某一点的不同观测量。 -参见表\?来了解具有不同维数和通道数的数据类型的例子。 +参见表\,\?\,来了解具有不同维数和通道数的数据类型的例子。 \begin{table}[htbp!] @@ -680,45 +794,45 @@ h(\TSK, \TSG, s)_{i, j, k} &=& \frac{\partial }{\partial \TEV_{i, j, k}} J(\TSV, \end{table} -卷积网络用于视频的例子,可以参见{Chen-Ting-2010}。 +卷积网络用于视频的例子,可以参见~{Chen-Ting-2010}。 到目前为止,我们仅讨论了训练和测试数据中的每个样例都有相同的空间维度的情况。 -卷积网络的一个优点是它们还可以处理具有变化的空间尺度的输入。 +卷积网络的一个优点是它们还可以处理具有可变的空间尺度的输入。 这些类型的输入不能用传统的基于矩阵乘法的神经网络来表示。 -这提供了使用卷积网络的令人信服的理由,即使当计算成本和过拟合也不是主要问题时。 +这为卷积网络的使用提供了的令人信服的理由,即使当计算开销和过拟合都不是主要问题时\footnote{译者注:传统的基于矩阵乘法的神经网络会面对计算开销和过拟合的问题,即使当计算开销和过拟合都不是主要问题时,我们也有充分的理由来使用卷积网络而不是传统的神经网络,因为卷积网络可以处理可变大小的输入。}。 例如,考虑一组图像的集合,其中每个图像具有不同的高度和宽度。 目前还不清楚如何用固定大小的权重矩阵对这样的输入进行建模。 -卷积就可以很直观的应用;核依据输入的大小简单地被使用不同次,并且卷积运算的输出也相应地放缩。 -卷积可以被视为矩阵乘法;相同的卷积核为每种大小的输入引入了一个不同大小的双重块循环矩阵。 +卷积就可以很直接地应用;核依据输入的大小简单地被使用不同次,并且卷积运算的输出也相应地放缩。 +卷积可以被视为矩阵乘法;相同的卷积核为每种大小的输入引入了一个不同大小的双重分块循环矩阵。 有时,网络的输出允许和输入一样具有可变的大小,例如如果我们想要为输入的每个像素分配一个类标签。 在这种情况下,不需要进一步的设计工作。 在其他情况下,网络必须产生一些固定大小的输出,例如,如果我们想要为整个图像指定单个类标签。 在这种情况下,我们必须进行一些额外的设计步骤,例如插入一个池化层,池化区域的大小要与输入的大小成比例,以便保持固定数量的池化输出。 -这种策略的一些例子可以参见图\?。 +这种策略的一些例子可以参见\fig?。 -注意,使用卷积处理可变尺寸的输入仅对具有尺寸可变的输入才有意义,因为它们包含对相同种类的事物的不同量的观察——时间上不同长度的记录,空间上不同宽度的观察等。 -如果输入具有可变尺寸,卷积是没有意义的,因为它可以选择性地包括不同种类的观察。 -例如,如果我们正在处理大学申请,并且我们的特征包括成绩和标准化测试分数,但不是每个申请人都进行了标准化测试,则使用相同的权重来对成绩特征和测试分数特征进行卷积是没有意义的。 +注意,使用卷积处理可变尺寸的输入,仅对输入是因为包含对同种事物的不同量的观察(时间上不同长度的记录,空间上不同宽度的观察等)而导致的尺寸变化这种情况才有意义。 +如果输入是因为它可以选择性地包括不同种类的观察而具有可变尺寸,使用卷积是不合理的。 +例如,如果我们正在处理大学申请,并且我们的特征包括成绩等级和标准化测试分数,但不是每个申请人都进行了标准化测试,则使用相同的权重来对成绩特征和测试分数特征进行卷积是没有意义的。 # 高效的卷积算法 -现代卷积网络的应用通常涉及包含超过百万个单元的网络。 -强大的实现要利用并行计算资源,很关键的,如\?节中所描述。 +现代卷积网络的应用通常需要包含超过百万个单元的网络。 +利用并行计算资源的强大实现是很关键的,如\sec?中所描述。 然而,在很多情况下,也可以通过选择适当的卷积算法来加速卷积。 -卷积等效于使用Fourier变换将输入与核都转换到频域,执行两个信号的逐点相乘,并使用Fourier逆变换转换回时域。 -对于某些问题大小,这可能比离散型卷积的朴素实现更快。 +卷积等效于使用傅立叶变换将输入与核都转换到频域、执行两个信号的逐点相乘,再使用傅立叶逆变换转换回时域。 +对于某些问题的规模,这种算法可能比离散卷积的朴素实现更快。 -当一个$d$维的核可以表示成$d$个向量(每维一个向量)的外积时,该核称为可分离的。 +当一个$d$维的核可以表示成$d$个向量(每一维一个向量)的外积时,该核被称为可分离的。 当核可分离时,朴素的卷积是低效的。 它等价于组合$d$个一维卷积,每个卷积使用这些向量中的一个。 组合方法显著快于使用它们的外积来执行一个$d$维的卷积。 -并且核也需要更少的参数表示为向量。 +并且核也只要更少的参数来表示成向量。 如果核在每一维都是$w$个元素宽,那么朴素的多维卷积需要$O(w^d)$的运行时间和参数存储空间,而可分离卷积只需要$O(w\times d)$的运行时间和参数存储空间。 当然,并不是每个卷积都可以表示成这种形式。 @@ -731,51 +845,52 @@ h(\TSK, \TSG, s)_{i, j, k} &=& \frac{\partial }{\partial \TEV_{i, j, k}} J(\TSV, 通常,卷积网络训练中最昂贵的部分是学习特征。 输出层通常相对便宜,因为在通过若干层池化之后作为该层输入的特征的数量较少。 -当使用梯度下降执行有监督训练时,每个梯度步骤需要完整的运行前向传播和反向传播通过整个网络。 -减少卷积网络训练成本的一种方式是使用那些不是通过有监督方式训练的特征。 +当使用梯度下降执行监督训练时,每步梯度计算需要完整地运行整个网络的前向传播和反向传播。 +减少卷积网络训练成本的一种方式是使用那些不是由监督方式训练得到的特征。 -有三种基本策略不通过有监督训练而得到卷积核。 -其中一个是简单地随机初始化它们。 -另一个是手动设计它们,例如设置每个核在一个特定的方向或尺度来检测边缘。 +有三种基本策略可以不通过监督训练而得到卷积核。 +其中一种是简单地随机初始化它们。 +另一种是手动设计它们,例如设置每个核在一个特定的方向或尺度来检测边缘。 最后,可以使用无监督的标准来学习核。 例如,{Coates2011}将$k$均值聚类算法应用于小图像块,然后使用每个学得的中心作为卷积核。 第\?部分描述了更多的无监督学习方法。 -使用无监督标准学习特征,允许它们的确定与位于网络结构顶层的分类层相分离。 +使用无监督的标准来学习特征,使得它们能够与位于网络结构顶层的分类层相互独立地确定。 然后只需提取一次全部训练集的特征,构造用于最后一层的新训练集。 -假设最后一层类似逻辑回归或者SVM,那么学习最后一层通常是凸优化问题。 +假设最后一层类似逻辑回归或者\,SVM,那么学习最后一层通常是凸优化问题。 + -随机过滤器经常在卷积网络中表现得出乎意料得好{Jarrett-ICCV2009-small,Saxe-ICML2011,pinto2011scaling,cox2011beyond}。 -{Saxe-ICML2011}说明,由卷积和随后的池化组成的层,当赋予随机权值时,自然地变得具有频率选择和平移不变性。 +随机过滤器经常在卷积网络中表现得出乎意料得好~{Jarrett-ICCV2009-small,Saxe-ICML2011,pinto2011scaling,cox2011beyond}。 +{Saxe-ICML2011}~说明,由卷积和随后的池化组成的层,当赋予随机权重时,自然地变得具有频率选择性和平移不变性。 他们认为这提供了一种廉价的方法来选择卷积网络的结构:首先通过仅训练最后一层来评估几个卷积网络结构的性能,然后选择最好的结构并使用更昂贵的方法来训练整个网络。 -一个中间方法是学习特征,但是使用一些特殊的方法,这些方法不需要在每个梯度步骤中都进行完整的前向和反向传播。 -与多层感知机一样,我们使用贪心逐层式预训练,独立地训练第一层,然后从第一层提取所有特征一次,然后用那些特征隔离训练第二层,以此类推。 -第\?章描述了如何实现有监督的贪心逐层预训练,第\?部分将此扩展到了无监督的范畴。 +一个中间方法是学习特征,但是使用那种不需要在每个梯度计算步骤中都进行完整的前向和反向传播的方法。 +与多层感知机一样,我们使用贪心逐层预训练,单独训练第一层,然后一次性地从第一层提取所有特征,之后用那些特征单独训练第二层,以此类推。 +第\?章描述了如何实现监督的贪心逐层预训练,第\?部分将此扩展到了无监督的范畴。 卷积模型的贪心逐层预训练的经典模型是卷积深度信念网络{cite?}。 卷积网络为我们提供了相对于多层感知机更进一步采用预训练策略的机会。 -不是一次训练整个卷积层,我们可以训练一小块模型,就像{Coates2011}使用$k$均值做的那样。 +并非一次训练整个卷积层,我们可以训练一小块模型,就像~{Coates2011}使用$k$均值做的那样。 然后,我们可以用来自这个小块模型的参数来定义卷积层的核。 -这意味着使用无监督学习来训练卷积网络\textbf{并且在训练的过程中完全不使用卷积}是可能的。 -使用这种方法,我们可以训练非常大的模型,并且只在推理期间产生高计算成本{cite?}。 -这种方法从2007年到2013年流行,当时标记的数据集很小,并且计算能力更有限。 -如今,大多数卷积网络以纯粹有监督的方式训练,在每次训练迭代中使用通过整个网络的完整的前向和反向传播。 +这意味着使用无监督学习来训练卷积网络\emph{并且在训练的过程中完全不使用卷积}是可能的。 +使用这种方法,我们可以训练非常大的模型,并且只在推断期间产生高计算成本{cite?}。 +这种方法大约在2007到2013年间流行,当时标记的数据集很小,并且计算能力有限。 +如今,大多数卷积网络以纯粹监督的方式训练,在每次训练迭代中使用通过整个网络的完整的前向和反向传播。 与其他无监督预训练的方法一样,使用这种方法的一些好处仍然难以说清。 -无监督预训练可以提供一些相对于有监督训练的正则化,或者它可以简单地允许我们训练更大的结构,因为它的学习规则减少了计算成本。 +无监督预训练可以提供一些相对于监督训练的正则化,或者它可以简单地允许我们训练更大的结构,因为它的学习规则降低了计算成本。 -# 卷积神经网络的神经科学基础 +# 卷积网络的神经科学基础 -卷积网络也许是生物学启发人工智能的最为成功的故事。 -虽然卷积网络已经被许多其他领域指导,但是神经网络的一些关键设计原则来自神经科学。 +卷积网络也许是生物学启发人工智能的最为成功的案例。 +虽然卷积网络也经过许多其他领域的指导,但是神经网络的一些关键设计原则来自于神经科学。 卷积网络的历史始于神经科学实验,远早于相关计算模型的发展。 -神经生理学家David Hubel和Torsten Wiesel合作多年,为了确定关于哺乳动物视觉系统如何工作的许多最基本的事实{cite?}。 +为了确定关于哺乳动物视觉系统如何工作的许多最基本的事实,神经生理学家David Hubel和Torsten Wiesel合作多年{cite?}。 他们的成就最终获得了诺贝尔奖。 他们的发现对当代深度学习模型有最大影响的是基于记录猫的单个神经元的活动。 他们观察了猫的脑内神经元如何响应投影在猫前面屏幕上精确位置的图像。 @@ -784,7 +899,7 @@ h(\TSK, \TSG, s)_{i, j, k} &=& \frac{\partial }{\partial \TEV_{i, j, k}} J(\TSV, 他们的工作有助于表征大脑功能的许多方面,这些方面超出了本书的范围。 从深度学习的角度来看,我们可以专注于简化的,卡通形式的大脑功能视图。 -在这个简化的视图中,我们关注被称为V1的大脑的一部分,也称为主要视觉皮层。 +在这个简化的视图中,我们关注被称为V1的大脑的一部分,也称为初级视觉皮层。 V1是大脑对视觉输入开始执行显著高级处理的第一个区域。 在该卡通视图中,图像是由光到达眼睛并刺激视网膜(眼睛后部的光敏组织)形成的。 视网膜中的神经元对图像执行一些简单的预处理,但是基本不改变它被表示的方式。 @@ -795,13 +910,14 @@ V1是大脑对视觉输入开始执行显著高级处理的第一个区域。 卷积网络层被设计为描述V1的三个性质: \begin{enumerate} -+ V1布置在空间图中。 ++ V1可以进行空间映射。 + %这里翻译不好 它实际上具有二维结构来反映视网膜中的图像结构。 例如,到达视网膜下半部的光仅影响V1相应的一半。 卷积网络通过用二维映射定义特征的方式来描述该特性。 + V1包含许多简单细胞。 - 简单细胞的活动在某种程度上可以概括为在一个小的空间位置接受域内的图像的线性函数。 + 简单细胞的活动在某种程度上可以概括为在一个小的空间位置感受野内的图像的线性函数。 卷积网络的检测器单元被设计为模拟简单细胞的这些性质。 + V1还包括许多复杂细胞。 @@ -812,7 +928,7 @@ V1是大脑对视觉输入开始执行显著高级处理的第一个区域。 \end{enumerate} 虽然我们最了解V1,但是一般认为相同的基本原理也适用于视觉系统的其他区域。 -在我们视觉系统的卡通试图中,当我们逐渐深入大脑时,遵循池化的基本探测策略被反复执行。 +在我们视觉系统的草图视图中,当我们逐渐深入大脑时,遵循池化的基本探测策略被反复执行。 当我们穿过大脑的多个解剖层时,我们最终找到了响应一些特定概念的细胞,并且这些细胞对输入的很多种变换都具有不变性。 这些细胞被昵称为"祖母细胞"——这个想法是一个人可能有一个神经元,当看到他祖母的照片时该神经元被激活,无论祖母是出现在照片的左边或右边,无论照片是她的脸部的特写镜头还是她的全身照,也无论她处在光亮还是黑暗中,等等。 @@ -820,15 +936,15 @@ V1是大脑对视觉输入开始执行显著高级处理的第一个区域。 研究人员测试了单个神经元是否会响应名人的照片。 他们发现了后来被称为"Halle Berry神经元"的神经元:由Halle Berry的概念激活的单个神经元。 当一个人看到Halle Berry的照片,Halle Berry的图画,甚至包含单词"Halle Berry"的文本时,这个神经元会触发。 -当然,这与Halle Berry自己无关;其他神经元响应Bill Clinton,Jennifer Aniston等的出现。 +当然,这与Halle Berry本人无关;其他神经元会对Bill Clinton,Jennifer Aniston等的出现做出响应。 -这些内侧颞叶神经元比现代卷积网络更通用,它们在读取名称时不会自动推广到识别人或对象。 -与卷积网络的最后一层特征上最接近的类比是称为颞下皮质(IT)的脑区。 -当查看一个对象时,信息从视网膜经LGN流到V1,然后到V2,V4,然后是IT。 +这些内侧颞叶神经元比现代卷积网络更通用一些,这些网络在读取名称时不会自动联想到识别人或对象。 +与卷积网络的最后一层在特征上最接近的类比是称为颞下皮质(IT)的脑区。 +当查看一个对象时,信息从视网膜经LGN流到V1,然后到V2,V4,之后是IT。 这发生在瞥见对象的前100ms内。 -如果允许一个人继续观察对象更多的时间,那么信息将开始向后流动,因为大脑使用自上而下的反馈来更新较低级脑区中的激活。 +如果允许一个人继续观察对象更多的时间,那么信息将开始回流,因为大脑使用自上而下的反馈来更新较低级脑区中的激活。 然而,如果我们打断人的注视,并且只观察前100ms内的大多数前向激活导致的放电率,那么IT被证明与卷积网络非常相似。 卷积网络可以预测IT放电率,并且在执行对象识别任务时与人类(时间有限的情况)非常类似{cite?}。 @@ -838,12 +954,12 @@ V1是大脑对视觉输入开始执行显著高级处理的第一个区域。 简要列表如下: + 人眼大部分是非常低的分辨率,除了一个被称为中央凹的小块。 - 中央凹仅观察保持在手臂长度的拇指大小的区域。 + 中央凹仅观察在手臂长度距离内一块拇指大小的区域。 虽然我们觉得我们可以看到高分辨率的整个场景,但这是由我们的大脑的潜意识部分创建的错觉,因为它缝合了我们瞥见的若干个小区域。 大多数卷积网络实际上接收大的全分辨率的照片作为输入。 人类大脑控制几次眼动,称为扫视,以瞥见场景中最显眼的或任务相关的部分。 将类似的关注机制融入深度学习模型是一个活跃的研究方向。 - 在深度学习的背景下,关注机制对于自然语言处理是最成功的,参见\?节。 + 在深度学习的背景下,关注机制对于自然语言处理是最成功的,参见\sec?。 已经研发了几种具有视觉机制的视觉模型,但到目前为止还没有成为主导方法{cite?}。 + 人类视觉系统集成了许多其他感觉,例如听觉,以及像我们的心情和想法一样的因素。 @@ -872,9 +988,9 @@ V1是大脑对视觉输入开始执行显著高级处理的第一个区域。 {Lang+Hinton88}引入反向传播来训练时延神经网络。 使用当代术语来说,TDNNs 是用于时间序列的一维卷积网络。 用于这些模型的反向传播不受任何神经科学观察的启发,并且被一些人认为是生物不可信的。 -在基于使用反向传播训练的TDNNs成功之后,{LeCun89d}通过将相同的训练算法应用于应用于图像的2维卷积来发展现代卷积网络。 +在基于使用反向传播训练的TDNNs成功之后,{LeCun89d}通过将相同的训练算法应用于图像的2维卷积来发展现代卷积网络。 -到目前为止,我们已经描述了简单细胞对于某些特征是如何呈现粗略的线性和选择性,复杂细胞是如何更加的非线性,并且对于这些简单细胞特征的某些变换具有不变性,并且在选择性和不变性之间交替的层叠可以产生对非常特定现象的祖母细胞。 +到目前为止,我们已经描述了简单细胞对于某些特征是如何呈现粗略的线性和选择性,复杂细胞是如何更加的非线性,并且对于这些简单细胞特征的某些变换具有不变性,以及在选择性和不变性之间交替放置的层可以产生对非常特定现象的祖母细胞。 我们还没有精确描述这些单个细胞检测到了什么。 在深度非线性网络中,可能难以理解单个细胞的功能。 第一层中的简单细胞相对更容易分析,因为它们的响应由线性函数驱动。 @@ -919,7 +1035,16 @@ Gabor函数描述在图像中的2维点处的权重。我们可以认为图像 \includegraphics[width=0.3\textwidth]{Chapter9/figures/gabor_scale.png}} \fi \captionsetup{singlelinecheck=off} -\caption{具有各种参数设置的Gabor函数。白色表示大的正权重,黑色表示大的负权重,背景灰色对应于零权重。\emph{(左)}控制坐标系的参数具有不同值的Gabor函数,这些参数包括:$x_0$、$y_0$和$\gamma$。在该网格中的每个Gabor函数被赋予和它在网格中的位置成比例的$x_0$和$y_0$的值,并且$\tau$被选择为使得每个Gabor过滤器对从网格中心辐射出的方向非常敏感。对于其他两幅图,$x_0$、$y_0$和$\gamma$固定为零。\emph{(中)}具有不同Gaussian比例参数$\beta_x$和$\beta_y$的Gabor函数。当我们从左到右通过网格时,Gabor函数被安排为增加宽度(减少$\beta_x$),当我们从上到下通过网格时,Gabor函数被安排为增加高度(减少$\beta_y$)。对于其他两幅图,$\beta$值固定为图像宽度的1.5倍。\emph{(右)}具有不同的正弦参数$f$和$\phi$的Gabor函数。当我们从上到下移动时,$f$增加;当我们从左到右移动时,$\phi$增加。对于其他两幅图,$\phi$固定为0,$f$固定为图像宽度的5倍。} +\caption{具有各种参数设置的Gabor函数。 +白色表示大的正权重,黑色表示大的负权重,背景灰色对应于零权重。 +\emph{(左)}控制坐标系的参数具有不同值的Gabor函数,这些参数包括:$x_0$、$y_0$和$\gamma$。 +在该网格中的每个Gabor函数被赋予和它在网格中的位置成比例的$x_0$和$y_0$的值,并且$\tau$被选择为使得每个Gabor过滤器对从网格中心辐射出的方向非常敏感。 +对于其他两幅图,$x_0$、$y_0$和$\gamma$固定为零。 +\emph{(中)}具有不同高斯比例参数$\beta_x$和$\beta_y$的Gabor函数。 +当我们从左到右通过网格时,Gabor函数被设置为增加宽度(减少$\beta_x$);当我们从上到下通过网格时,Gabor函数被设置为为增加高度(减少$\beta_y$)。 +对于其他两幅图,$\beta$值固定为图像宽度的1.5倍。 +\emph{(右)}具有不同的正弦参数$f$和$\phi$的Gabor函数。 +当我们从上到下移动时,$f$增加;当我们从左到右移动时,$\phi$增加。对于其他两幅图,$\phi$固定为0,$f$固定为图像宽度的5倍。} \end{figure} 参数$x_0,y_0$和$\tau$定义坐标系。 @@ -929,9 +1054,9 @@ Gabor函数描述在图像中的2维点处的权重。我们可以认为图像 作为$x'$和$y'$的函数,函数$w$会响应当我们沿着$x'$移动时的亮度变化。 -它有两个重要的因子:一个是Gaussian函数,另一个是余弦函数。 +它有两个重要的因子:一个是高斯函数,另一个是余弦函数。 -Gaussian因子$ \alpha \exp(-\beta_x x'^2 - \beta_y y'^2)$可以被视为阈值项,用于保证简单细胞仅对接近$x'$和$y'$都为零点处的值响应,换句话说,接近细胞接受域的中心。 +高斯因子$ \alpha \exp(-\beta_x x'^2 - \beta_y y'^2)$可以被视为阈值项,用于保证简单细胞仅对接近$x'$和$y'$都为零点处的值响应,换句话说,接近细胞接受域的中心。 尺度因子$\alpha$调整简单细胞响应的总的量级,而$\beta_x$和$\beta_y$控制接受域消退的速度。 余弦因子$ \cos (fx' + \phi)$控制简单细胞如何响应延$x‘$轴的亮度改变。 @@ -946,14 +1071,14 @@ Gaussian因子$ \alpha \exp(-\beta_x x'^2 - \beta_y y'^2)$可以被视为阈值 复杂细胞的卡通视图是它计算包含两个简单细胞响应的2维向量的$L^2$范数:$c(I)=\sqrt{s_0(I)^2 + s_1(I)^2}$。 一个重要的特殊情况是当$s_1$和$s_0$具有除$\phi$ 以外都相同的参数,并且$\phi$被设置为使得$s_1$与$s_0$相位相差四分之一周期时。 -在这种情况下,$s_0$和$s_1$形成正交对。 -当Gaussian重新加权的图像$I(x,y)\exp(-\beta_x x'^2 -\beta_y y^2)$包含具有频率$f$、在方向$\tau$上、接近$(x_0, y_0)$的高振幅正弦波时,用先前方法定义的复杂细胞会响应,并且\textbf{不管该波的相位偏移}。 +在这种情况下,$s_0$和$s_1$形成象限对。 +当高斯重新加权的图像$I(x,y)\exp(-\beta_x x'^2 -\beta_y y^2)$包含具有频率$f$、在方向$\tau$上、接近$(x_0, y_0)$的高振幅正弦波时,用先前方法定义的复杂细胞会响应,并且\emph{不管该波的相位偏移}。 换句话说,复杂细胞对于图像在方向$\tau$上的微小变换或者翻转图像(用白色代替黑色,反之亦然)具有不变性。 神经科学和机器学习之间最显著的对应关系,是从视觉上比较机器学习模型学得的特征与使用V1得到的特征。 -{Olshausen+Field-1996}说明,一个简单的无监督学习算法,稀疏编码,学习的特征具有与简单细胞类似的接收域。 +{Olshausen+Field-1996}说明,一个简单的无监督学习算法,稀疏编码,学习的特征具有与简单细胞类似的接受域\footnote{译者注:这里原文是"receptive field",生物中称之为"感受野"}。 从那时起,我们发现,当应用于自然图像时,极其多样的统计学习算法学习类Gabor函数的特征。这包括大多数深度学习算法,它们在其第一层中学习这些特征。 -图\?给出了一些例子。 +\fig?给出了一些例子。 因为如此众多不同的学习算法学习边缘检测器,所以很难仅基于学习算法学得的特征,来断定哪一个特定的学习算法是"正确"的大脑模型(虽然,当应用于自然图像时,如果一个算法\emph{不能}学得某种检测器时,它能够作为一种否定标志)。 这些特征是自然图像的统计结构的重要部分,并且可以通过许多不同的统计建模方法来重新获得。 可以参考{cite?}来获得自然图像统计领域的综述。 @@ -966,14 +1091,14 @@ Gaussian因子$ \alpha \exp(-\beta_x x'^2 - \beta_y y'^2)$可以被视为阈值 \includegraphics[width=0.4\textwidth]{Chapter9/figures/maxout_kernels.png}} \includegraphics[width=0.4\textwidth]{Chapter9/figures/s3c_filters.png}} \fi -\caption{许多机器学习算法在应用于自然图像时,会学习那些用来检测边缘或边缘的特定颜色的特征。 -这些特征检测器使人联想到已知存在于初级视觉皮层中的Gabor函数。 +\caption{许多机器学习算法在应用于自然图像时,会学习那些用来检测边缘或边缘的特定颜色的特征。 +这些特征检测器使人联想到已知存在于初级视觉皮层中的~Gabor函数。 \emph{(左)}通过应用于小图像块的无监督学习算法(尖峰和平板稀疏编码)学得的权重。%这里不是很懂 -\emph{(右)}由完全监督的卷积maxout网络的第一层学得的卷积核。 相邻的过滤器对驱动相同的maxout单元。} +\emph{(右)}由完全监督的卷积~maxout~网络的第一层学得的卷积核。 相邻的过滤器对驱动相同的~maxout单元。} \end{figure} -# 卷积神经网络与深度学习的历史 +# 卷积网络与深度学习的历史 @@ -982,29 +1107,29 @@ Gaussian因子$ \alpha \exp(-\beta_x x'^2 - \beta_y y'^2)$可以被视为阈值 它们是将研究大脑获得的深刻理解成功用于机器学习应用的关键例子。 它们也是第一个表现良好的深度模型之一,远远早于任意深度模型被认为是可行的。 卷积网络也是第一个解决重要商业应用的神经网络,并且仍然是当今深度学习商业应用的前沿。 -例如,在20世纪90年代,AT\&T的神经网络研究小组开发了一个用于读取支票的卷积网络{cite?}。 -到90年代末,NEC部署的这个系统用于读取美国所有支票的10%以上。 +例如,在20世纪90年代,AT\&T的神经网络研究小组开发了一个用于读取支票的~卷积网络{cite?}。 +到90年代末,NEC部署的这个系统已经被用于读取美国10%以上的支票。 后来,微软部署了若干个基于卷积网络的OCR和手写识别系统{cite?}。 关于卷积网络的这种应用和更现代应用的更多细节,参见第\?章。 到2010年以前的更为深入的卷积网络历史可以参见{cite?}。 -卷积网络也被用来赢得许多比赛。 -当前对深度学习的商业兴趣的热度始于{Krizhevsky-2012-small}赢得了ImageNet对象识别挑战,但是卷积网络已经被用于赢得其他机器学习和计算机视觉竞赛了,这些比赛在几年前影响较小。 +卷积网络也被用作在许多比赛中的取胜手段。 +当前对深度学习的商业兴趣的热度始于{Krizhevsky-2012-small}赢得了ImageNet对象识别挑战,但是在那之前,卷积网络也已经被用于赢得前些年影响较小的其他机器学习和计算机视觉竞赛了。 -卷积网络是用反向传播训练的第一个有效的深度网络之一。 +卷积网络是第一批能使用反向传播有效训练的的深度网络之一。 现在仍不完全清楚为什么卷积网络在一般的反向传播网络被认为已经失败时反而成功了。 可能简单地归结为卷积网络比全连接网络计算效率更高,因此使用它们运行多个实验并调整它们的实现和超参数更容易。 更大的网络也似乎更容易训练。 利用现代硬件,大型全连接的网络对许多任务也执行得很合理,即使使用过去那些全连接网络被认为不能工作的很好的数据集和当时流行的激活函数时,现在也能执行得很好。 可能神经网络成功的主要阻碍是心理(实践者没有期望神经网络有效,所以他们没有认真努力地使用神经网络)。 无论如何,幸运的是卷积网络在几十年前就表现良好。 -在许多方面,它们为余下的深度学习传递火炬,并为一般的神经网络被接收铺平了道路。 +在许多方面,它们为余下的深度学习传递火炬,并为一般的神经网络被接受铺平了道路。 -卷积网络提供了一种方法来专业化神经网络,以处理具有清楚的网格结构拓扑的数据,以及将这样的模型放大到非常大的尺寸。 +卷积网络提供了一种方法来特化神经网络,使其能够处理具有清楚的网格结构拓扑的数据,以及将这样的模型放大到非常大的尺寸。 这种方法在二维图像拓扑上是最成功的。 -为了处理一维序列数据,我们接下来转向神经网络框架的另一种强大的专业化:循环神经网络。 +为了处理一维序列数据,我们接下来转向神经网络框架的另一种强大的特化:循环神经网络。 diff --git a/docs/_posts/2016-12-10-Chapter10_sequence_modeling_rnn.md b/docs/_posts/2016-12-10-Chapter10_sequence_modeling_rnn.md index 097da85..0e93715 100644 --- a/docs/_posts/2016-12-10-Chapter10_sequence_modeling_rnn.md +++ b/docs/_posts/2016-12-10-Chapter10_sequence_modeling_rnn.md @@ -3,7 +3,7 @@ title: 序列建模:循环和递归网络 layout: post share: false --- -循环神经网络或RNN{cite?}是一类用于处理序列数据的神经网络。 +循环神经网络或~RNN~{cite?}是一类用于处理序列数据的神经网络。 就像卷积网络是专门用于处理网格化数据$\TSX$(如一个图像)的神经网络,循环神经网络是专门用于处理序列$\Vx^{(1)}, \dots, \Vx^{(\tau)}$的神经网络。 正如卷积网络可以很容易地扩展到具有很大宽度和高度的图像,以及处理大小可变的图像,循环网络可以扩展到更长的序列(比不基于序列的特化网络长得多)。 大多数循环网络也能处理可变长度的序列。 @@ -30,12 +30,12 @@ share: false 输出的每一项对先前的输出应用相同的更新规则而产生。 这种循环方式导致参数通过很深的计算图共享。 -为简单起见,我们说的RNN是指在序列上的操作,并且该序列在时刻$t$(从1到$\tau$)包含向量$\Vx^{(t)}$。 -在实际情况中,循环网络通常在序列的minibatch上操作,并且minibatch的每项具有不同序列长度$\tau$。 -我们省略了minibatch索引来简化记号。 +为简单起见,我们说的~RNN~是指在序列上的操作,并且该序列在时刻$t$(从1到$\tau$)包含向量$\Vx^{(t)}$。 +在实际情况中,循环网络通常在序列的小批量上操作,并且小批量的每项具有不同序列长度$\tau$。 +我们省略了小批量索引来简化记号。 此外,时间步索引不必是字面上现实世界中流逝的时间。 有时,它仅表示序列中的位置。 -RNN也可以应用于跨越两个维度的空间数据(如图像)。 +RNN~也可以应用于跨越两个维度的空间数据(如图像)。 当应用于涉及时间的数据,并且将整个序列提供给网络之前就能观察到整个序列时,该网络可具有关于时间向后的连接。 @@ -44,7 +44,7 @@ RNN也可以应用于跨越两个维度的空间数据(如图像)。 这样的计算图允许我们定义循环神经网络。 然后,我们描述许多构建、训练和使用循环神经网络的不同方式。 -本章将简要介绍循环神经网络,为获取更多详细信息,我们建议读者参考{Graves-book2012}的著作。 +本章将简要介绍循环神经网络,为获取更多详细信息,我们建议读者参考~{Graves-book2012}的著作。 @@ -62,19 +62,19 @@ RNN也可以应用于跨越两个维度的空间数据(如图像)。 \end{align} 其中$ \Vs^{(t)}$称为系统的状态。 -$\Vs$在时刻$t$的定义需要参考时刻$t-1$时同样的定义,因此式\eq?是循环的。 +$\Vs$在时刻$t$的定义需要参考时刻$t-1$时同样的定义,因此\eqn?是循环的。 对有限时间步~$\tau$, $\tau-1$次应用这个定义可以展开这个图。 -例如$\tau = 3$,我们对式\eq?展开,可以得到: +例如$\tau = 3$,我们对\eqn?展开,可以得到: \begin{align} \Vs^{(3)} &= f(\Vs^{(2)}; \Vtheta) \\ & = f(f(\Vs^{(1)}; \Vtheta) ; \Vtheta). \end{align} 以这种方式重复应用定义,展开等式,就能得到不涉及循环的表达。 -现在可以使用传统的有向无环计算图呈现这样的表达。 +现在我们可以使用传统的有向无环计算图呈现这样的表达。 -式\eq?和式\eq?的展开计算图如\fig?所示。 +\eqn?和\eqn?的展开计算图如\fig?所示。 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} @@ -98,12 +98,12 @@ $\Vs$在时刻$t$的定义需要参考时刻$t-1$时同样的定义,因此式\ 循环神经网络可以通过许多不同的方式建立。 就像几乎所有函数都可以被认为是前馈网络,本质上任何涉及循环的函数都可以被认为是一个循环神经网络。 -很多循环神经网络使用式\eq?或类似的公式定义隐藏单元的值。 -为了表明状态是网络的隐藏单元,我们使用变量$\Vh$代表状态重写式\eq?: +很多循环神经网络使用\eqn?或类似的公式定义隐藏单元的值。 +为了表明状态是网络的隐藏单元,我们使用变量$\Vh$代表状态重写\eqn?: \begin{align} \Vh^{(t)} = f(\Vh^{(t-1)}, \Vx^{(t)} ; \Vtheta), \end{align} -如\fig?所示,典型RNN会增加额外的架构特性,如读取状态信息$\Vh$进行预测的输出层。 +如\fig?所示,典型~RNN~会增加额外的架构特性,如读取状态信息$\Vh$进行预测的输出层。 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} @@ -112,24 +112,24 @@ $\Vs$在时刻$t$的定义需要参考时刻$t-1$时同样的定义,因此式\ \fi \caption{没有输出的循环网络。 此循环网络只处理来自输入$\Vx$的信息,将其合并到经过时间向前传播的状态$\Vh$。 -(左)回路原理图。 黑色方块表示单个时间步的延迟。 -(右)同一网络被视为展开的计算图,其中每个节点现在与一个特定的时间实例相关联。 +\emph{(左)}回路原理图。 黑色方块表示单个时间步的延迟。 +\emph{(右)}同一网络被视为展开的计算图,其中每个节点现在与一个特定的时间实例相关联。 } \end{figure} 当训练循环网络根据过去预测未来时,网络通常要学会使用$\Vh^{(t)}$作为过去序列(直到$t$)与任务相关方面的有损摘要。 此摘要一般而言一定是有损的,因为其映射任意长度的序列$(\Vx^{(t)},\Vx^{(t-1)}, \Vx^{(t-2)},\dots,\Vx^{(2)}, \Vx^{(1)})$到一固定长度的向量$\Vh^{(t)}$。 根据不同的训练准则,摘要可能选择性地精确保留过去序列的某些方面。 -例如,如果在统计语言建模中使用的RNN,通常给定前一个词预测下一个词,可能没有必要存储时刻$t$前输入序列中的所有信息;而仅仅存储足够预测句子其余部分的信息。 +例如,如果在统计语言建模中使用的~RNN,通常给定前一个词预测下一个词,可能没有必要存储时刻$t$前输入序列中的所有信息;而仅仅存储足够预测句子其余部分的信息。 最苛刻的情况是我们要求$\Vh^{(t)}$足够丰富,并能大致恢复输入序列,如自编码器框架(\chap?)。 -式\eq?可以用两种不同的方式绘制。 +\eqn?可以用两种不同的方式绘制。 一种方法是为可能在模型的物理实现中存在的部分赋予一个节点,如生物神经网络。 在这个观点下,网络定义了实时操作的回路,如\fig?的左侧,其当前状态可以影响其未来的状态。 在本章中,我们使用回路图的黑色方块表明在时刻$t$的状态到时刻$t+1$的状态单个时刻延迟中的相互作用。 -另一个绘制RNN的方法是展开的计算图,其中每一个组件是由许多不同的变量表示,每个时间步一个变量,表示在该时间点组件的状态。 +另一个绘制~RNN~的方法是展开的计算图,其中每一个组件由许多不同的变量表示,每个时间步一个变量,表示在该时间点组件的状态。 每个时间步的每个变量绘制为计算图的一个独立节点,如\fig?的右侧。 我们所说的展开是将左图中的回路映射为右图中包含重复组件的计算图的操作。 目前,展开图的大小取决于序列长度。 @@ -145,7 +145,7 @@ $\Vs$在时刻$t$的定义需要参考时刻$t-1$时同样的定义,因此式\ + 无论序列的长度,学成的模型始终具有相同的输入大小,因为它指定的是从一种状态到另一种状态的转移, 而不是在可变长度的历史状态上操作。 + 我们可以在每个时间步使用相同参数的\emph{相同}转移函数$f$。 \end{enumerate} -这两个因素使得学习在所有时间步和所有序列长度上操作的单一模型$f$是可能的,而不需要在所有可能时间步学习独立的模型$g^{(t)}$。 +这两个因素使得学习在所有时间步和所有序列长度上操作单一的模型$f$是可能的,而不需要在所有可能时间步学习独立的模型$g^{(t)}$。 学习单一的共享模型允许泛化到没有见过的序列长度(没有出现在训练集中),并且估计模型所需的训练样本远远少于不带参数共享的模型。 @@ -171,8 +171,8 @@ $\Vs$在时刻$t$的定义需要参考时刻$t-1$时同样的定义,因此式\ 损失$L$内部计算$\hat{\Vy} = \text{softmax}(\Vo)$,并将其与目标$\Vy$比较。 RNN输入到隐藏的连接由权重矩阵$\MU$参数化,隐藏到隐藏的循环连接由权重矩阵$\MW$参数化以及隐藏到输出的连接由权重矩阵$\MV$参数化。 \eqn?定义了该模型中的前向传播。 -(左)使用循环连接绘制的RNN和它的损失。 -(右)同一网络被视为展开的计算图,其中每个节点现在与一个特定的时间实例相关联。 +\emph{(左)}使用循环连接绘制的~RNN~和它的损失。 +\emph{(右)}同一网络被视为展开的计算图,其中每个节点现在与一个特定的时间实例相关联。 } \end{figure} @@ -190,17 +190,17 @@ RNN输入到隐藏的连接由权重矩阵$\MU$参数化,隐藏到隐藏的循 \else \centerline{\includegraphics{Chapter10/figures/output_recurrence_rnn}} \fi -\caption{此类RNN的唯一循环是从输出到隐藏层的反馈连接。 +\caption{此类~RNN~的唯一循环是从输出到隐藏层的反馈连接。 在每个时间步~$t$,输入为$\Vx_t$,隐藏层激活为$\Vh^{(t)}$,输出为$\Vo^{(t)}$,目标为$\Vy^{(t)}$,损失为$L^{(t)}$。 -(左)回路原理图。 -(右)展开的计算图。 -这样的RNN没有\fig?表示的RNN那样强大(只能表示更小的函数集合)。 -\fig?中的RNN可以选择将其想要的关于过去的任何信息放入隐藏表示$\Vh$中并且将$\Vh$传播到未来。 -该图中的RNN被训练为将特定输出值放入$\Vo$中,并且$\Vo$是允许传播到未来的唯一信息。 +\emph{(左)}回路原理图。 +\emph{(右)}展开的计算图。 +这样的~RNN~没有\fig?表示的RNN那样强大(只能表示更小的函数集合)。 +\fig?中的~RNN~可以选择将其想要的关于过去的任何信息放入隐藏表示$\Vh$中并且将$\Vh$传播到未来。 +该图中的~RNN~被训练为将特定输出值放入$\Vo$中,并且$\Vo$是允许传播到未来的唯一信息。 此处没有从$\Vh$前向传播的直接连接。 之前的$\Vh$仅通过产生的预测间接地连接到当前。 $\Vo$通常缺乏过去的重要信息,除非它非常高维且内容丰富。 -这使得该图中的RNN不那么强大,但是它更容易训练,因为每个时间步可以与其他时间步分离训练,允许训练期间更多的并行化,如\sec?所述。 +这使得该图中的~RNN~不那么强大,但是它更容易训练,因为每个时间步可以与其他时间步分离训练,允许训练期间更多的并行化,如\sec?所述。 } \end{figure} @@ -216,24 +216,24 @@ $\Vo$通常缺乏过去的重要信息,除非它非常高维且内容丰富。 } \end{figure} -任何图灵可计算的函数都可以通过这样一个有限维的循环网络计算,在这个意义上\fig?和式\eq?的循环神经网络是万能的。 -RNN经过若干时间步后读取输出,这与由图灵机所用的时间步是渐近线性的,与输入长度也是渐近线性的{cite?}。 +任何图灵可计算的函数都可以通过这样一个有限维的循环网络计算,在这个意义上\fig?和\eqn?的循环神经网络是万能的。 +RNN~经过若干时间步后读取输出,这与由图灵机所用的时间步是渐近线性的,与输入长度也是渐近线性的{cite?}。 由图灵机计算的函数是离散的,所以这些结果都是函数的具体实现,而不是近似。 -RNN作为图灵机使用时,需要一个二进制序列作为输入,其输出必须离散化后提供二进制输出。 -利用单个有限大小的特定RNN计算在此设置下的所有函数是可能的({Siegelmann+Sontag-1995}用了886个单元)。 +RNN~作为图灵机使用时,需要一个二进制序列作为输入,其输出必须离散化以提供二进制输出。 +利用单个有限大小的特定~RNN~计算在此设置下的所有函数是可能的(~{Siegelmann+Sontag-1995}用了886个单元)。 图灵机的"输入"是要计算函数的详细说明(specification),所以模拟此图灵机的相同网络足以应付所有问题。 -用于证明的理论RNN可以通过激活和权重(由无限精度的有理数表示)来模拟无限堆栈。 +用于证明的理论~RNN~可以通过激活和权重(由无限精度的有理数表示)来模拟无限堆栈。 -现在我们研究\fig?中RNN的前向传播公式。 +现在我们研究\fig?中~RNN~的前向传播公式。 这个图没有指定隐藏单元的激活函数。 我们假设使用双曲正切激活函数。 此外,图中没有明确指定何种形式的输出和损失函数。 -我们假定输出是离散的,如用于预测词或字符的RNN。 +我们假定输出是离散的,如用于预测词或字符的~RNN。 表示离散变量的常规方式是把输出$\Vo$作为每个离散变量可能值的非标准化对数概率。 -然后,我们可以应用softmax函数后续处理后,获得标准化后概率的输出向量$\hat \Vy$。 -RNN从特定的初始状态$\Vh^{(0)}$开始前向传播。 +然后,我们可以应用~softmax函数~后续处理后,获得标准化后概率的输出向量$\hat \Vy$。 +RNN~从特定的初始状态$\Vh^{(0)}$开始前向传播。 从$t= 1$到$t = \tau$的每个时间步,我们应用以下更新方程: \begin{align} \Va^{(t)} &= \Vb + \MW \Vh^{(t-1)} + \MU \Vx^{(t)}, \\ @@ -261,7 +261,7 @@ RNN从特定的初始状态$\Vh^{(0)}$开始前向传播。 -## Teacher Forcing和输出循环网络 +## 导师驱动过程和输出循环网络 仅在一个时间步的输出和下一个时间步的隐藏单元间存在循环连接的网络(示于\fig?)确实没有那么强大(因为缺乏隐藏到隐藏的循环连接)。 例如,它不能模拟通用图灵机。 @@ -271,8 +271,8 @@ RNN从特定的初始状态$\Vh^{(0)}$开始前向传播。 因此训练可以并行化,即在各时刻$t$分别计算梯度。 因为训练集提供输出的理想值,所以没有必要先计算前一时刻的输出。 -由输出反馈到模型而产生循环连接的模型可用Teacher Forcing进行训练。 -Teacher Forcing是使用最大似然准则的过程,并且在时刻$t+1$接收真实值$y^{(t)}$作为输入(训练模型时)。 +由输出反馈到模型而产生循环连接的模型可用导师驱动过程进行训练。 +训练模型时,导师驱动过程不再使用最大似然准则,而在时刻$t+1$接收真实值$y^{(t)}$作为输入。 我们可以通过检查两个时间步的序列得知这一点。 条件最大似然准则是 \begin{align} @@ -291,24 +291,24 @@ Teacher Forcing是使用最大似然准则的过程,并且在时刻$t+1$接收 \else \centerline{\includegraphics{Chapter10/figures/teacher_forcing}} \fi -\caption{Teacher Forcing的示意图。 -Teacher Forcing是一种训练技术,适用于输出与下一时间步的隐藏状态存在连接的RNN。 -(左)训练时,我们将训练集中\emph{正确}的输出$\Vy^{(t)}$反馈到$\Vh^{(t+1)}$。 -(右)当模型部署后,真正的输出通常是未知的。 +\caption{导师驱动过程的示意图。 +导师驱动过程是一种训练技术,适用于输出与下一时间步的隐藏状态存在连接的~RNN。 +\emph{(左)}训练时,我们将训练集中\emph{正确}的输出$\Vy^{(t)}$反馈到$\Vh^{(t+1)}$。 +\emph{(右)}当模型部署后,真正的输出通常是未知的。 在这种情况下,我们用模型的输出$\Vo^{(t)}$近似正确的输出$\Vy^{(t)}$,并反馈回模型。 } \end{figure} -我们使用Teacher Forcing的最初动机是为了在缺乏隐藏到隐藏连接的模型中避免通过时间反向传播。 -只要模型一个时间步的输出与下一时间步计算的值存在连接,Teacher Forcing仍然可以应用到这些存在隐藏到隐藏连接的模型。 -然而,只要隐藏单元成为较早时间步的函数,BPTT算法是必要的。 -因此训练某些模型时要同时使用Teacher Forcing和BPTT。 +我们使用导师驱动过程的最初动机是为了在缺乏隐藏到隐藏连接的模型中避免通过时间反向传播。 +只要模型一个时间步的输出与下一时间步计算的值存在连接,导师驱动过程仍然可以应用到这些存在隐藏到隐藏连接的模型。 +然而,只要隐藏单元成为较早时间步的函数,BPTT~算法是必要的。 +因此训练某些模型时要同时使用导师驱动过程和~BPTT。 -如果之后网络在\textbf{开环}(open-loop)模式下使用,即网络输出(或输出分布的样本)反馈作为输入,那么Teacher Forcing的缺点就会出现。 +如果之后网络在\textbf{开环}(open-loop)模式下使用,即网络输出(或输出分布的样本)反馈作为输入,那么完全使用导师驱动过程进行训练的缺点就会出现。 在这种情况下,训练期间该网络看到的输入与测试时看到的会有很大的不同。 -减轻此问题的一种方法是同时使用Teacher Forcing和自由运行的输入进行训练,例如在展开循环的输出到输入路径上预测几个步骤的正确目标值。 +减轻此问题的一种方法是同时使用导师驱动过程和自由运行的输入进行训练,例如在展开循环的输出到输入路径上预测几个步骤的正确目标值。 通过这种方式,网络可以学会考虑在训练时没有接触到的输入条件(如自由运行模式下,自身生成自身),以及将状态映射回使网络几步之后生成正确输出的状态。 另外一种方式{cite?}是通过随意选择生成值或真实的数据值作为输入以减小训练时和测试时看到的输入之间的差别。 这种方法利用了课程学习策略,逐步使用更多生成值作为输入。 @@ -318,16 +318,16 @@ Teacher Forcing是一种训练技术,适用于输出与下一时间步的隐 计算循环神经网络的梯度是容易的。 我们可以简单地将\sec?中的推广反向传播算法应用于展开的计算图,而不需要特殊化的算法。 -由反向传播计算得到的梯度,并结合任何通用的基于梯度的技术就可以训练RNN。 +由反向传播计算得到的梯度,并结合任何通用的基于梯度的技术就可以训练~RNN。 -为了获得BPTT算法行为的一些直观理解,我们举例说明如何通过BPTT计算上述RNN公式(式\eq?和式\eq?)的梯度。 +为了获得~BPTT~算法行为的一些直观理解,我们举例说明如何通过~BPTT~计算上述RNN公式(\eqn?和\eqn?)的梯度。 计算图的节点包括参数$\MU,\MV,\MW, \Vb$和$\Vc$,以及以$t$为索引的节点序列$\Vx^{(t)}, \Vh^{(t)},\Vo^{(t)}$和$L^{(t)}$。 对于每一个节点$\TSN$,我们需要基于$\TSN$后面的节点的梯度,递归地计算梯度~$\nabla_{\TSN} L$。 我们从紧接着最终损失的节点开始递归: \begin{align} \frac{\partial L}{\partial L^{(t)}} = 1. \end{align} -在这个导数中,我们假设输出$\Vo^{(t)}$作为softmax函数的参数,我们可以从softmax函数可以获得关于输出概率的向量$\hat{\Vy}$。 +在这个导数中,我们假设输出$\Vo^{(t)}$作为~softmax函数~的参数,我们可以从~softmax函数可以获得关于输出概率的向量$\hat{\Vy}$。 我们也假设损失是迄今为止给定了输入后的真实目标$y^{(t)}$的负对数似然。 对于所有$i,t$,关于时间步~$t$输出的梯度~$\nabla_{\Vo^{(t)}} L$如下: \begin{align} @@ -354,7 +354,7 @@ Teacher Forcing是一种训练技术,适用于输出与下一时间步的隐 一旦获得了计算图内部节点的梯度,我们就可以得到关于参数节点的梯度。 -因为参数在许多时间步共享,必须在表示这些变量的微积分操作时谨慎对待。 +因为参数在许多时间步共享,我们必须在表示这些变量的微积分操作时谨慎对待。 我们希望实现的等式使用\sec?中的{\tt bprop}方法计算计算图中单一边对梯度的贡献。 然而微积分中的$\nabla_{\MW} f$算子,计算$\MW$对于$f$的贡献时将计算图中的\emph{所有}边都考虑进去了。 为了消除这种歧义,我们定义只在$t$时刻使用的虚拟变量$\MW^{(t)}$作为$\MW$的副本。 @@ -385,10 +385,10 @@ Teacher Forcing是一种训练技术,适用于输出与下一时间步的隐 目前为止,我们接触的循环网络例子中损失$L^{(t)}$是训练目标$\Vy^{(t)}$和输出$\Vo^{(t)}$之间的交叉熵。 与前馈网络类似,原则上循环网络几乎可以使用任何损失。 但必须根据任务来选择损失。 -如前馈网络,我们通常希望将RNN的输出解释为一个概率分布,并且我们通常使用与分布相关联的交叉熵来定义损失。 +如前馈网络,我们通常希望将~RNN~的输出解释为一个概率分布,并且我们通常使用与分布相关联的交叉熵来定义损失。 均方误差是与单位高斯分布的输出相关联的交叉熵损失,例如前馈网络中所使用的。 -当我们使用一个预测性对数似然的训练目标,如式\eq?,我们将RNN训练为能够根据之前的输入估计下一个序列元素$\Vy^{(t)}$的条件分布。 +当我们使用一个预测性对数似然的训练目标,如\eqn?,我们将~RNN~训练为能够根据之前的输入估计下一个序列元素$\Vy^{(t)}$的条件分布。 这可能意味着,我们最大化对数似然 \begin{align} \log p(\Vy^{(t)} \mid \Vx^{(1)},\dots, \Vx^{(t)}), @@ -410,15 +410,15 @@ Teacher Forcing是一种训练技术,适用于输出与下一时间步的隐 \caption{序列$y^{(1)},y^{(2)},\dots,y^{(t)},\dots$的全连接图模型。 给定先前的值,每个过去的观察值$y^{(i)}$可以影响一些$y^{(t)}$($t>i$)的条件分布。 当序列中每个元素的输入和参数的数目越来越多,根据此图直接参数化图模型(如\eqn?中)可能是非常低效的。 -RNN可以通过高效的参数化获得相同的全连接,如\fig?所示。 +RNN~可以通过高效的参数化获得相同的全连接,如\fig?所示。 } \end{figure} -举一个简单的例子,让我们考虑对标量随机变量序列$ \SetY = \{\RSy^{(1)},\dots,\RSy^{(\tau)}\}$建模的RNN,也没有额外的输入$\RSx$。 +举一个简单的例子,让我们考虑对标量随机变量序列$ \SetY = \{\RSy^{(1)},\dots,\RSy^{(\tau)}\}$建模的~RNN,也没有额外的输入$\RSx$。 在时间步~$t$的输入仅仅是时间步~$t-1$的输出。 -该RNN定义了关于$\RSy$变量的有向图模型。 +该~RNN~定义了关于$\RSy$变量的有向图模型。 我们使用链式法则(用于条件概率的\eqn?)参数化这些观察值的联合分布: \begin{align} P(\SetY) = P(\RVy^{(1)},\dots,\RVy^{(\tau)}) = \prod_{t=1}^{\tau}P(\RVy^{(t)} \mid \RVy^{(t-1)},\RVy^{(t-2)}, @@ -439,7 +439,7 @@ RNN可以通过高效的参数化获得相同的全连接,如\fig?所示。 \else \centerline{\includegraphics{Chapter10/figures/rnn_graphical_model_with_state}} \fi -\caption{在RNN图模型中引入状态变量,尽管它是输入的确定性函数,但它有助于我们根据\eqn?获得非常高效的参数化。 +\caption{在~RNN~图模型中引入状态变量,尽管它是输入的确定性函数,但它有助于我们根据\eqn?获得非常高效的参数化。 序列中的每个阶段(对于$\Vh^{(t)}$和$\Vy^{(t)}$)使用相同的结构(每个节点具有相同数量的输入),并且可以与其他阶段共享相同的参数。 } \end{figure} @@ -448,22 +448,22 @@ RNN可以通过高效的参数化获得相同的全连接,如\fig?所示。 许多图模型的目标是省略不存在强相互作用的边以实现统计和计算的效率。 例如,我们通常可以作Markov假设,即图模型应该只包含从$\{ \RSy^{(t-k)}, \dots, \RSy^{(t-1)}\}$到$\RSy^{(t)}$的边,而不是包含整个过去历史的边。 然而,在一些情况下,我们认为整个过去的输入会对序列的下一个元素有一定影响。 -当我们认为$\RSy^{(t)}$的分布可能取决于遥远过去(在某种程度)的$\RSy^{(i)}$的值,且无法通过$\RSy^{(t-1)}$捕获$\RSy^{(i)}$的影响时,RNN将会很有用。 +当我们认为$\RSy^{(t)}$的分布可能取决于遥远过去(在某种程度)的$\RSy^{(i)}$的值,且无法通过$\RSy^{(t-1)}$捕获$\RSy^{(i)}$的影响时,RNN~将会很有用。 -解释RNN作为图模型的一种方法是将RNN视为定义一个结构为完全图的图模型,且能够表示任何一对$\RSy$值之间的直接联系。 +解释~RNN~作为图模型的一种方法是将RNN视为定义一个结构为完全图的图模型,且能够表示任何一对$\RSy$值之间的直接联系。 \fig?是关于$\RSy$值且具有完全图结构的图模型。 -该RNN完全图的解释基于排除并忽略模型中的隐藏单元~$\Vh^{(t)}$。 +该~RNN~完全图的解释基于排除并忽略模型中的隐藏单元~$\Vh^{(t)}$。 -更有趣的是,将隐藏单元~$\Vh^{(t)}$视为随机变量,从而产生RNN的图模型结构\footnote{给定这些变量的父变量,其条件分布是确定性的。 +更有趣的是,将隐藏单元~$\Vh^{(t)}$视为随机变量,从而产生~RNN~的图模型结构\footnote{给定这些变量的父变量,其条件分布是确定性的。 尽管设计具有这样确定性的隐藏单元的图模型是很少见的,但这是完全合理的。}。 -在图模型中包括隐藏单元预示RNN能对观测的联合分布提供非常有效的参数化。 +在图模型中包括隐藏单元预示~RNN~能对观测的联合分布提供非常有效的参数化。 假设我们用表格表示法来表示离散值上任意的联合分布,即对每个值可能的赋值分配一个单独条目的数组,该条目表示发生该赋值的概率。 如果$y$可以取$k$个不同的值,表格表示法将有$\CalO(k^\tau)$个参数。 -对比RNN,由于参数共享,RNN的参数数目为$\CalO(1)$且是序列长度的函数。 % ?? -我们可以调节RNN的参数数量来控制模型容量,但不用被迫与序列长度成比例。 -式\eq?展示了所述RNN通过循环应用相同的函数$f$以及在每个时间步的相同参数$\Vtheta$,有效地参数化的变量之间的长期联系。 +对比~RNN,由于参数共享,RNN~的参数数目为$\CalO(1)$且是序列长度的函数。 % ?? +我们可以调节~RNN~的参数数量来控制模型容量,但不用被迫与序列长度成比例。 +\eqn?展示了所述~RNN~通过循环应用相同的函数$f$以及在每个时间步的相同参数$\Vtheta$,有效地参数化的变量之间的长期联系。 \fig?说明了这个图模型的解释。 在图模型中结合$\Vh^{(t)}$节点可以用作过去和未来之间的中间量,从而将它们解耦。 遥远过去的变量$y^{(i)}$可以通过其对$\Vh$的影响来影响变量$y^{(t)}$。 @@ -481,10 +481,10 @@ RNN可以通过高效的参数化获得相同的全连接,如\fig?所示。 原则上,可以使用$t$作为每个时间步的额外输入,并让学习器在发现任何时间依赖性的同时,在不同时间步之间尽可能多地共享。 相比在每个$t$使用不同的条件概率分布已经好很多了,但网络将必须在面对新$t$时进行推断。 -为了完整描述将RNN作为图模型的观点,我们必须描述如何从模型采样。 +为了完整描述将~RNN~作为图模型的观点,我们必须描述如何从模型采样。 我们需要执行的主要操作是简单地从每一时间步的条件分布采样。 然而,这会导致额外的复杂性。 -RNN必须有某种机制来确定序列的长度。 +RNN~必须有某种机制来确定序列的长度。 这可以通过多种方式实现。 在当输出是从词汇表获取的符号的情况下,我们可以添加一个对应于序列末端的特殊符号{cite?}。 @@ -493,17 +493,17 @@ RNN必须有某种机制来确定序列的长度。 -另一种选择是在模型中引入一个额外的Bernoulli输出,表示在每个时间步决定继续生成或停止生成。 -相比向词汇表增加一个额外符号,这种方法更普遍,因为它适用于任何RNN,而不仅仅是输出符号序列的RNN。 -例如,它可以应用于一个产生实数序列的RNN。 -新的输出单元通常使用sigmoid单元,并通过交叉熵训练。 -在这种方法中,sigmoid被训练为最大化正确预测的对数似然,即在每个时间步序列决定结束或继续。 +另一种选择是在模型中引入一个额外的~Bernoulli~输出,表示在每个时间步决定继续生成或停止生成。 +相比向词汇表增加一个额外符号,这种方法更普遍,因为它适用于任何~RNN,而不仅仅是输出符号序列的~RNN。 +例如,它可以应用于一个产生实数序列的~RNN。 +新的输出单元通常使用~sigmoid~单元,并通过交叉熵训练。 +在这种方法中,sigmoid~被训练为最大化正确预测的对数似然,即在每个时间步序列决定结束或继续。 确定序列长度$\tau$的另一种方法是将一个额外的输出添加到模型并预测整数$\tau$本身。 模型可以采出$\tau$的值,然后采$\tau$步有价值的数据。 这种方法需要在每个时间步的循环更新中增加一个额外输入,使得循环更新知道它是否是靠近所产生序列的末尾。 这种额外的输入可以是$\tau$的值,也可以是$\tau - t$即剩下时间步的数量。 -如果没有这个额外的输入,RNN可能会产生突然结束序列,如一个句子在最终完整前结束。 +如果没有这个额外的输入,RNN~可能会产生突然结束序列,如一个句子在最终完整前结束。 此方法基于分解 \begin{align} P(\Vx^{(1)},\dots, \Vx^{(\tau)}) = P(\tau) P(\Vx^{(1)},\dots,\Vx^{(\tau)} \mid \tau) . @@ -511,22 +511,22 @@ RNN必须有某种机制来确定序列的长度。 直接预测$\tau$的例子见{Goodfellow+et+al-ICLR2014a}。 -## 基于上下文的RNN序列建模 +## 基于上下文的~RNN~序列建模 上一节描述了没有输入$\Vx$时,关于随机变量序列$y^{(t)}$的RNN如何对应于有向图模型。 -当然,如式\eq?所示的RNN包含一个输入序列$\Vx^{(1)},\Vx^{(2)},\dots,\Vx^{(\tau)}$。 -一般情况下,RNN允许将图模型的观点扩展到不仅代表$y$变量的联合分布也能表示给定$\Vx$后$y$条件分布。 +当然,如\eqn?所示的RNN包含一个输入序列$\Vx^{(1)},\Vx^{(2)},\dots,\Vx^{(\tau)}$。 +一般情况下,RNN~允许将图模型的观点扩展到不仅代表$y$变量的联合分布也能表示给定$\Vx$后$y$条件分布。 如在\sec?的前馈网络情形中所讨论的,任何代表变量$P(\Vy;\Vtheta)$的模型都能被解释为代表条件分布$P(\Vy \mid \Vomega)$的模型,其中$\Vomega=\Vtheta$。 我们能像之前一样使用$P(\Vy \mid \Vomega)$代表分布$P(\Vy \mid \Vx)$来扩展这样的模型,但要令$\Vomega$是关于$\Vx$的函数。 -在RNN的情况,这可以通过不同的方式来实现。 +在~RNN~的情况,这可以通过不同的方式来实现。 此处,我们回顾最常见和最明显的选择。 -之前,我们已经讨论了将$t =1, \dots, \tau$的向量$\Vx^{(t)}$序列作为输入的RNN。 +之前,我们已经讨论了将$t =1, \dots, \tau$的向量$\Vx^{(t)}$序列作为输入的~RNN。 另一种选择是只使用单个向量$\Vx$作为输入。 -当$\Vx$是一个固定大小的向量时,我们可以简单地将其看作产生$\Vy$序列RNN的额外输入。 -将额外输入提供到RNN的一些常见方法是: +当$\Vx$是一个固定大小的向量时,我们可以简单地将其看作产生$\Vy$序列~RNN~的额外输入。 +将额外输入提供到~RNN~的一些常见方法是: \begin{enumerate} + 在每个时刻作为一个额外输入,或 + 作为初始状态$\Vh^{(0)}$,或 @@ -546,16 +546,16 @@ RNN必须有某种机制来确定序列的长度。 \else \centerline{\includegraphics{Chapter10/figures/conditional_rnn}} \fi -\caption{将固定长度的向量$\Vx$映射到序列$\MY$上分布的RNN。 -这类RNN适用于很多任务如图注,其中单个图像作为模型的输入,然后产生描述图像的词序列。 +\caption{将固定长度的向量$\Vx$映射到序列$\MY$上分布的~RNN。 +这类~RNN~适用于很多任务如图注,其中单个图像作为模型的输入,然后产生描述图像的词序列。 观察到的输出序列的每个元素$\Vy^{(t)}$同时用作输入(对于当前时间步)和训练期间的目标(对于前一时间步)。 } \end{figure} -RNN可以接收向量序列$\Vx^{(t)}$作为输入,而不是仅接收单个向量$\Vx$作为输入。 -式\eq?描述的RNN对应条件分布$P(\Vy^{(1)}, \dots, \Vy^{(\tau)} \mid \Vx^{(1)}, \dots, \Vx^{(\tau)})$,并在条件独立的假设下这个分布分解为 +RNN~可以接收向量序列$\Vx^{(t)}$作为输入,而不是仅接收单个向量$\Vx$作为输入。 +\eqn?描述的~RNN~对应条件分布$P(\Vy^{(1)}, \dots, \Vy^{(\tau)} \mid \Vx^{(1)}, \dots, \Vx^{(\tau)})$,并在条件独立的假设下这个分布分解为 \begin{align} \prod_t P(\Vy^{(t)} \mid \Vx^{(1)}, \dots, \Vx^{(t)}). \end{align} @@ -571,9 +571,9 @@ RNN可以接收向量序列$\Vx^{(t)}$作为输入,而不是仅接收单个向 \centerline{\includegraphics{Chapter10/figures/causal_rnn}} \fi \caption{将可变长度的$\Vx$值序列映射到相同长度的$\Vy$值序列上分布的条件循环神经网络。 -对比\fig?,此RNN包含从前一个输出到当前状态的连接。 +对比\fig?,此~RNN~包含从前一个输出到当前状态的连接。 这些连接允许此RNN对给定$\Vx$的序列后相同长度的$\Vy$序列上的任意分布建模。 -\fig?的RNN仅能表示在给定$\Vx$值的情况下,$\Vy$值彼此条件独立的分布。 +\fig?的~RNN~仅能表示在给定$\Vx$值的情况下,$\Vy$值彼此条件独立的分布。 } \end{figure} @@ -581,7 +581,7 @@ RNN可以接收向量序列$\Vx^{(t)}$作为输入,而不是仅接收单个向 -# 双向RNN +# 双向~RNN 目前为止我们考虑的所有循环神经网络有一个"因果"结构,意味着在时刻$t$的状态只能从过去的序列$\Vx^{(1)},\dots,\Vx^{(t-1)}$以及当前的输入$\Vx^{(t)}$捕获信息。 我们还讨论了某些在$\Vy$可用时,允许过去的$\Vy$值信息影响当前状态的模型。 @@ -590,12 +590,12 @@ RNN可以接收向量序列$\Vx^{(t)}$作为输入,而不是仅接收单个向 例如,在语音识别中,由于协同发音,当前声音作为音素的正确解释可能取决于未来几个音素,甚至潜在的可能取决于未来的几个词,因为词与附近的词之间的存在语义依赖:如果当前的词有两种声学上合理的解释,我们可能要在更远的未来(和过去)寻找信息区分它们。 这在手写识别和许多其他序列到序列学习的任务中也是如此,将会在下一节中描述。 -双向循环神经网络(或双向RNN)为满足这种需要而被发明{cite?}。 +双向循环神经网络(或双向~RNN)为满足这种需要而被发明{cite?}。 他们在需要双向信息的应用中非常成功{cite?},如手写识别{cite?},语音识别{cite?}以及生物信息学{cite?}。 -顾名思义,双向RNN结合时间上从序列起点开始移动的RNN和另一个时间上从序列末尾开始移动的RNN。 -\fig?展示了典型的双向RNN,其中$\Vh^{(t)}$代表通过时间向前移动的子RNN的状态,$\Vg^{(t)}$代表通过时间向后移动的子RNN的状态。 -这允许输出单元$\Vo^{(t)}$能够计算同时依赖于过去和未来且对时刻$t$的输入值最敏感的表示,而不必指定$t$周围固定大小的窗口(这是前馈网络、卷积网络或具有固定大小的先行缓存器的常规RNN所必须要做的)。 +顾名思义,双向~RNN~结合时间上从序列起点开始移动的~RNN~和另一个时间上从序列末尾开始移动的~RNN。 +\fig?展示了典型的双向~RNN,其中$\Vh^{(t)}$代表通过时间向前移动的子~RNN~的状态,$\Vg^{(t)}$代表通过时间向后移动的子~RNN~的状态。 +这允许输出单元$\Vo^{(t)}$能够计算同时依赖于过去和未来且对时刻$t$的输入值最敏感的表示,而不必指定$t$周围固定大小的窗口(这是前馈网络、卷积网络或具有固定大小的先行缓存器的常规~RNN~所必须要做的)。 @@ -611,10 +611,10 @@ RNN可以接收向量序列$\Vx^{(t)}$作为输入,而不是仅接收单个向 } \end{figure} -这个想法可以自然地扩展到2维输入,如图像,由\emph{四个}RNN组成,每一个沿着四个方向中的一个计算:上、下、左、右。 -如果RNN能够学习到承载长期信息,那在2维网格每个点$(i, j)$的输出$O_{i,j}$就能计算一个能捕捉到大多局部信息但仍依赖于长期输入的表示。 -相比卷积网络,应用于图像的RNN计算成本通常更高,但允许同一特征图的特征之间存在长期横向的相互作用{cite?}。 -实际上,对于这样的RNN,前向传播公式可以写成表示使用卷积的形式,计算自底向上到每一层的输入(在整合横向相互作用的特征图的循环传播之前)。 +这个想法可以自然地扩展到2维输入,如图像,由\emph{四个}~RNN~组成,每一个沿着四个方向中的一个计算:上、下、左、右。 +如果~RNN~能够学习到承载长期信息,那在2维网格每个点$(i, j)$的输出$O_{i,j}$就能计算一个能捕捉到大多局部信息但仍依赖于长期输入的表示。 +相比卷积网络,应用于图像的~RNN~计算成本通常更高,但允许同一特征图的特征之间存在长期横向的相互作用{cite?}。 +实际上,对于这样的~RNN,前向传播公式可以写成表示使用卷积的形式,计算自底向上到每一层的输入(在整合横向相互作用的特征图的循环传播之前)。 @@ -633,12 +633,12 @@ RNN可以接收向量序列$\Vx^{(t)}$作为输入,而不是仅接收单个向 用于映射可变长度序列到另一可变长度序列最简单的RNN架构最初由{cho-al-emnlp14}提出,之后不久由{Sutskever-et-al-NIPS2014}独立开发,并且第一个使用这种方法获得翻译的最好结果。 前一系统是对另一个机器翻译系统产生的建议进行评分,而后者使用独立的循环网络生成翻译。 这些作者分别将该架构称为编码-解码或序列到序列架构,如\fig?所示。 -这个想法非常简单:(1)编码器或\textbf{读取器}(reader)或\textbf{输入}(input)RNN处理输入序列。 +这个想法非常简单:(1)编码器或\,\textbf{读取器}\,(reader)或\,\textbf{输入}(input)~RNN~处理输入序列。 编码器输出上下文$C$(通常是最终隐藏状态的简单函数)。 -(2)解码器或\textbf{写入器}(writer)或\textbf{输出}(output)RNN则以固定长度的向量(如\fig?)为条件产生输出序列$\MY=(\Vy^{(1)}, \dots, \Vy^{(n_y)})$。 +(2)解码器或\,\textbf{写入器}(writer)或\,\textbf{输出}(output)~RNN~则以固定长度的向量(如\fig?)为条件产生输出序列$\MY=(\Vy^{(1)}, \dots, \Vy^{(n_y)})$。 这种架构对比本章前几节提出的架构的创新之处在于长度$n_x$和$n_y$可以彼此不同,而之前的架构约束$n_x = n_y = \tau$。 -在序列到序列的架构中,两个RNN共同训练以最大化$\log P( \Vy^{(1)}, \dots, \Vy^{(n_y)} \mid \Vx^{(1)},\dots,\Vx^{(n_x)} )$(关于训练集中所有$\Vx$和$\Vy$对的平均)。 -编码器RNN的最后一个状态$\Vh_{n_x}$通常被当作输入的表示$C$并作为解码器RNN的输入。 +在序列到序列的架构中,两个~RNN~共同训练以最大化$\log P( \Vy^{(1)}, \dots, \Vy^{(n_y)} \mid \Vx^{(1)},\dots,\Vx^{(n_x)} )$(关于训练集中所有$\Vx$和$\Vy$对的平均)。 +编码器~RNN~的最后一个状态$\Vh_{n_x}$通常被当作输入的表示$C$并作为解码器~RNN~的输入。 \begin{figure}[!htb] @@ -647,23 +647,23 @@ RNN可以接收向量序列$\Vx^{(t)}$作为输入,而不是仅接收单个向 \else \centerline{\includegraphics{Chapter10/figures/rnn_encdec}} \fi -\caption{在给定输入序列$(\RVx^{(1)},\RVx^{(2)},\dots,\RVx^{(n_x)})$的情况下学习生成输出序列$(\RVy^{(1)},\RVy^{(2)},\dots,\RVy^{(n_y)})$的编码器-解码器或序列到序列的RNN架构的示例。 -它由读取输入序列的编码器RNN以及生成输出序列(或计算给定输出序列的概率)的解码器RNN组成。 -编码器RNN的最终隐藏状态用于计算一般为固定大小的上下文变量$C$,$C$表示输入序列的语义概要并且作为解码器RNN的输入。 +\caption{在给定输入序列$(\RVx^{(1)},\RVx^{(2)},\dots,\RVx^{(n_x)})$的情况下学习生成输出序列$(\RVy^{(1)},\RVy^{(2)},\dots,\RVy^{(n_y)})$的编码器-解码器或序列到序列的~RNN~架构的示例。 +它由读取输入序列的编码器~RNN~以及生成输出序列(或计算给定输出序列的概率)的解码器~RNN~组成。 +编码器~RNN~的最终隐藏状态用于计算一般为固定大小的上下文变量$C$,$C$表示输入序列的语义概要并且作为解码器~RNN~的输入。 } \end{figure} -如果上下文$C$是一个向量,则编码器RNN只是在\sec?描述的向量到序列RNN。 -正如我们所见,向量到序列RNN至少有两种接受输入的方法。 -输入可以被提供为RNN的初始状态,或连接到每个时间步中的隐藏单元。 +如果上下文$C$是一个向量,则编码器~RNN~只是在\sec?描述的向量到序列~RNN。 +正如我们所见,向量到序列~RNN~至少有两种接受输入的方法。 +输入可以被提供为~RNN~的初始状态,或连接到每个时间步中的隐藏单元。 这两种方式也可以结合。 这里并不强制要求编码器与解码器的隐藏层具有相同的大小。 -此架构的一个明显不足是,编码器RNN输出的上下文$C$的维度太小而难以适当地概括一个长序列。 +此架构的一个明显不足是,编码器~RNN~输出的上下文$C$的维度太小而难以适当地概括一个长序列。 这种现象由{Bahdanau-et-al-ICLR2015-small}在机器翻译中观察到。 他们提出让$C$成为可变长度的序列,而不是一个固定大小的向量。 -此外,他们还引入了将序列$C$的元素和输出序列的元素相关联的注意机制。 +此外,他们还引入了将序列$C$的元素和输出序列的元素相关联的注意力机制。 读者可在\sec?了解更多细节。 @@ -671,28 +671,28 @@ RNN可以接收向量序列$\Vx^{(t)}$作为输入,而不是仅接收单个向 # 深度循环网络 -大多数RNN中的计算可以分解成三块参数及其相关的变换: +大多数~RNN~中的计算可以分解成三块参数及其相关的变换: \begin{enumerate} + 从输入到隐藏状态, + 从前一隐藏状态到下一隐藏状态,以及 + 从隐藏状态到输出。 \end{enumerate} -根据\fig?中的RNN架构,这三个块都与单个权重矩阵相关联。 +根据\fig?中的~RNN~架构,这三个块都与单个权重矩阵相关联。 换句话说,当网络被展开时,每个块对应一个浅的变换。 -能通过深度MLP内单个层来表示的变换称为浅变换。 +能通过深度~MLP~内单个层来表示的变换称为浅变换。 通常,这是由学成的仿射变换和一个固定非线性表示组成的变换。 在这些操作中引入深度会有利的吗? 实验证据{cite?}强烈暗示理应如此。 实验证据与我们需要足够的深度以执行所需映射的想法一致。 -读者可以参考{Schmidhuber96,ElHihi+Bengio-nips8}或{Jaeger2007}了解更早的关于深度RNN的研究。 +读者可以参考~{Schmidhuber96,ElHihi+Bengio-nips8}或~{Jaeger2007}了解更早的关于深度~RNN~的研究。 -{Graves-arxiv2013}第一个展示了将RNN的状态分为多层的显著好处,如\fig?(左)。 +{Graves-arxiv2013}第一个展示了将~RNN~的状态分为多层的显著好处,如\fig?~\emph{(左)}。 我们可以认为,在\fig?(a)所示层次结构中较低的层起到了将原始输入转化为对更高层的隐藏状态更合适表示的作用。 -{Pascanu-et-al-ICLR2014}更进一步提出在上述三个块中各使用一个单独的MLP(可能是深度的),如\fig?(b)所示。 +{Pascanu-et-al-ICLR2014}更进一步提出在上述三个块中各使用一个单独的~MLP(可能是深度的),如\fig?(b)所示。 考虑表示容量,我们建议在这三个步中都分配足够的容量,但增加深度可能会因为优化困难而损害学习效果。 在一般情况下,更容易优化较浅的架构,加入\fig?(b)的额外深度导致从时间步~$t$的变量到时间步~$t+1$的最短路径变得更长。 -例如,如果具有单个隐藏层的MLP被用于状态到状态的转换,那么与\fig?相比,我们就会加倍任何两个不同时间步变量之间最短路径的长度。 +例如,如果具有单个隐藏层的~MLP~被用于状态到状态的转换,那么与\fig?相比,我们就会加倍任何两个不同时间步变量之间最短路径的长度。 然而{Pascanu-et-al-ICLR2014}认为,在隐藏到隐藏的路径中引入跳跃连接可以缓和这个问题,如\fig?(c)所示。 @@ -705,7 +705,7 @@ RNN可以接收向量序列$\Vx^{(t)}$作为输入,而不是仅接收单个向 \fi \caption{循环神经网络可以通过许多方式变得更深{cite?}。 (a)隐藏循环状态可以被分解为具有层次的组。 -(b)可以向输入到隐藏,隐藏到隐藏以及隐藏到输出的部分引入更深的计算(如MLP)。 +(b)可以向输入到隐藏,隐藏到隐藏以及隐藏到输出的部分引入更深的计算(如~MLP)。 这可以延长链接不同时间步的最短路径。 (c)可以引入跳跃连接来缓解路径延长的效应。 } @@ -714,10 +714,10 @@ RNN可以接收向量序列$\Vx^{(t)}$作为输入,而不是仅接收单个向 # 递归神经网络 -递归神经网络\footnote{我们建议不要将"递归神经网络"缩写为"RNN",以免与"循环神经网络"混淆。}代表循环网络的另一个扩展,它被构造为深的树状结构而不是RNN的链状结构,因此是不同类型的计算图。 +递归神经网络\footnote{我们建议不要将"递归神经网络"缩写为"RNN",以免与"循环神经网络"混淆。}代表循环网络的另一个扩展,它被构造为深的树状结构而不是~RNN~的链状结构,因此是不同类型的计算图。 递归网络的典型计算图如\fig?所示。 -递归神经网络由{Pollack90}引入,而{tr-bottou-2011}描述了这类网络的潜在用途——学习推论。 -递归网络已成功地应用于输入是\emph{数据结构}的神经网络{cite?},如自然语言处理{cite?}和计算机视觉{cite?}。 +递归神经网络由~{Pollack90}引入,而~{tr-bottou-2011}描述了这类网络的潜在用途——学习推论。 +递归网络已成功地应用于输入是\emph{数据结构}的神经网络~{cite?},如自然语言处理{cite?}和计算机视觉{cite?}。 @@ -743,7 +743,7 @@ RNN可以接收向量序列$\Vx^{(t)}$作为输入,而不是仅接收单个向 \end{figure} 递归网络想法的变种存在很多。 -例如,{Frasconi97}和{Frasconi-1998}将数据与树结构相关联,并将输入和目标与树的单独节点相关联。 +例如,{Frasconi97}和~{Frasconi-1998}将数据与树结构相关联,并将输入和目标与树的单独节点相关联。 由每个节点执行的计算无须是传统的人工神经计算(所有输入的仿射变换后跟一个单调非线性)。 例如,{Socher-et-al-EMNLP2013}提出用张量运算和双线性形式,在这之前人们已经发现当概念是由连续向量(嵌入)表示时,这种方式有利于建模概念之间的联系{cite?}。 @@ -752,7 +752,7 @@ RNN可以接收向量序列$\Vx^{(t)}$作为输入,而不是仅接收单个向 学习循环网络长期依赖的数学挑战在\sec?中引入。 根本问题是,经过许多阶段传播后的梯度倾向于消失(大部分情况)或爆炸(很少,但对优化过程影响很大)。 -即使我们假设循环网络是参数稳定的(可存储记忆,且梯度不爆炸),但长期依赖的困难来自比短期相互作用指数小的权重(涉及许多Jacobian相乘)。 +即使我们假设循环网络是参数稳定的(可存储记忆,且梯度不爆炸),但长期依赖的困难来自比短期相互作用指数小的权重(涉及许多~Jacobian~相乘)。 许多资料提供了更深层次的讨论{cite?}。 在这一节中,我们会更详细地描述该问题。 其余几节介绍克服这个问题的方法。 @@ -807,20 +807,20 @@ $x$轴是100维空间中沿着随机方向的初始状态的坐标。 假设$w^{(t)}$的值是随机生成的,各自独立,且有$0$均值$v$方差。 乘积的方差就为$\CalO(v^n)$。 为了获得某些期望的方差$v^*$,我们可以选择单个方差为$v=\sqrt[n]{v^*}$权重。 -因此,非常深的前馈网络通过精心设计的比例可以避免梯度消失和爆炸问题,如{Sussillo14}所主张的。 +因此,非常深的前馈网络通过精心设计的比例可以避免梯度消失和爆炸问题,如~{Sussillo14}所主张的。 -RNN梯度消失和爆炸问题是由不同研究人员独立发现{cite?}。 +RNN~梯度消失和爆炸问题是由不同研究人员独立发现{cite?}。 有人可能会希望通过简单地停留在梯度不消失或爆炸的参数空间来避免这个问题。 -不幸的是,为了储存记忆并对小扰动具有鲁棒性,RNN必须进入参数空间中的梯度消失区域{cite?}。 +不幸的是,为了储存记忆并对小扰动具有鲁棒性,RNN~必须进入参数空间中的梯度消失区域{cite?}。 具体来说,每当模型能够表示长期依赖时,长期相互作用的梯度幅值就会变得指数小(相比短期相互作用的梯度幅值)。 这并不意味着这是不可能学习的,由于长期依赖关系的信号很容易被短期相关性产生的最小波动隐藏,因而学习长期依赖可能需要很长的时间。 -实践中,{Bengio1994ITNN}的实验表明,当我们增加了需要捕获的依赖关系的跨度,基于梯度的优化变得越来越困难,SGD在长度仅为10或20的序列上成功训练传统RNN的概率迅速变为0。 +实践中,{Bengio1994ITNN}的实验表明,当我们增加了需要捕获的依赖关系的跨度,基于梯度的优化变得越来越困难,SGD~在长度仅为10或20的序列上成功训练传统~RNN~的概率迅速变为0。 -将循环网络作为动力系统更深入探讨的资料见{Doya93,Bengio1994ITNN,Siegelmann+Sontag-1995}及 +将循环网络作为动力系统更深入探讨的资料见~{Doya93,Bengio1994ITNN,Siegelmann+Sontag-1995}及~ {Pascanu-et-al-ICML2013}的回顾。 -本章的其余部分将讨论目前已经提出的降低学习长期依赖(在某些情况下,允许一个RNN学习横跨数百步的依赖)难度的不同方法,但学习长期依赖的问题仍是深度学习中的一个主要挑战。 +本章的其余部分将讨论目前已经提出的降低学习长期依赖(在某些情况下,允许一个~RNN~学习横跨数百步的依赖)难度的不同方法,但学习长期依赖的问题仍是深度学习中的一个主要挑战。 @@ -828,9 +828,9 @@ RNN梯度消失和爆炸问题是由不同研究人员独立发现{cite?}。 从$\Vh^{(t-1)}$到$\Vh^{(t)}$的循环权重映射以及从$\Vx^{(t)}$到$\Vh^{(t)}$的输入权重映射是循环网络中最难学习的参数。 研究者{cite?}提出避免这种困难的方法是设定循环隐藏单元,使其能很好地捕捉过去输入历史,并且\emph{只学习输出权重}。 -回声状态网络或ESN{cite?},以及流体状态机{cite?}分别独立地提出了这种想法。 -后者是类似的,只不过它使用脉冲神经元(二值输出)而不是ESN中的连续隐藏单元。 -ESN和流体状态机都被称为储层计算{cite?},因为隐藏单元形成了可能捕获输入历史不同方面的临时特征池。 +回声状态网络或~ESN~{cite?},以及流体状态机{cite?}分别独立地提出了这种想法。 +后者是类似的,只不过它使用脉冲神经元(二值输出)而不是~ESN~中的连续隐藏单元。 +ESN~和流体状态机都被称为储层计算{cite?},因为隐藏单元形成了可能捕获输入历史不同方面的临时特征池。 @@ -841,11 +841,11 @@ ESN和流体状态机都被称为储层计算{cite?},因为隐藏单元形成 因此,重要的问题是:我们如何设置输入和循环权重才能让一组丰富的历史可以在循环神经网络的状态中表示? 储层计算研究给出的答案是将循环网络视为动态系统,并设定让动态系统接近稳定边缘的输入和循环权重。 -最初的想法是使状态到状态转换函数的Jacobian的特征值接近1。 -如\sec?解释,循环网络的一个重要特征就是Jacobian的特征值谱$\MJ^{(t)} = \frac{\partial s^{(t)}}{\partial s^{(t-1)}}$。 +最初的想法是使状态到状态转换函数的~Jacobian~矩阵的特征值接近1。 +如\sec?解释,循环网络的一个重要特征就是~Jacobian~矩阵的特征值谱$\MJ^{(t)} = \frac{\partial s^{(t)}}{\partial s^{(t-1)}}$。 特别重要的是$\MJ^{(t)}$的谱半径,定义为特征值的最大绝对值。 -为了解谱半径的影响,可以考虑反向传播中Jacobian矩阵$\MJ$不随$t$改变的简单情况。 +为了解谱半径的影响,可以考虑反向传播中~Jacobian~矩阵$\MJ$不随$t$改变的简单情况。 例如当网络是纯线性时,会发生这种情况。 假设$\MJ$特征值$\lambda$对应的特征向量为$\Vv$。 考虑当我们通过时间向后传播梯度向量时会发生什么。 @@ -854,7 +854,7 @@ ESN和流体状态机都被称为储层计算{cite?},因为隐藏单元形成 如果我们刚开始是$\Vg + \delta \Vv$,一步之后,我们会得到$\MJ(\Vg + \delta \Vv)$。 $n$步之后,我们将得到$\MJ^n(\Vg + \delta \Vv)$。 由此我们可以看出,由$\Vg$开始的反向传播和由$\Vg+\delta \Vv$开始的反向传播,$n$步之后偏离$\delta \MJ^n \Vv$。 -如果$\Vv$选择为$\MJ$特征值$\lambda$对应的一个单位特征向量,那么在每一步乘Jacobian只是简单地缩放。 +如果$\Vv$选择为$\MJ$特征值$\lambda$对应的一个单位特征向量,那么在每一步乘~Jacobian~矩阵只是简单地缩放。 反向传播的两次执行分离的距离为$\delta | \lambda |^n$。 当$\Vv$对应于最大特征值$|\lambda|$,初始扰动为$\delta$时这个扰动达到可能的最宽分离。 @@ -863,9 +863,9 @@ $n$步之后,我们将得到$\MJ^n(\Vg + \delta \Vv)$。 -当然,这个例子假定Jacobian在每个时间步是相同的,即对应于没有非线性循环网络。 +当然,这个例子假定~Jacobian~矩阵在每个时间步是相同的,即对应于没有非线性循环网络。 当非线性存在时,非线性的导数将在许多时间步后接近零,并有助于防止因过大的谱半径而导致的爆炸。 -事实上,关于回声状态网络的最近工作提倡使用远大于1的谱半径{cite?}。 +事实上,关于回声状态网络的最近工作提倡使用远大于1的谱半径~{cite?}。 我们已经说过多次,通过反复矩阵乘法的反向传播同样适用于没有非线性的正向传播的网络,其状态为$\Vh^{(t+1)} = \Vh^{(t)\top} \MW $。 @@ -873,13 +873,13 @@ $n$步之后,我们将得到$\MJ^n(\Vg + \delta \Vv)$。 当谱半径小于一,则从$\Vh^{(t)}$到$\Vh^{(t+1)}$的映射是收缩的,因此小变化在每个时间步后变得更小。 当我们使用有限精度(如32位整数)来存储状态向量时,必然会使得网络忘掉过去的信息。 -Jacobian矩阵告诉我们$\Vh^{(t)}$一个微小的变化如何向前一步传播,或等价的,$\Vh^{(t+1)}$的梯度如何向后一步传播。 -需要注意的是,$\MW$和$\MJ$都不需要是对称的(尽管它们是实方阵),因此它们可能有复的特征值和特征向量,其中虚数分量对应于潜在的振荡行为(如果迭代地应用同一Jacobian)。 +Jacobian~矩阵告诉我们$\Vh^{(t)}$一个微小的变化如何向前一步传播,或等价的,$\Vh^{(t+1)}$的梯度如何向后一步传播。 +需要注意的是,$\MW$和$\MJ$都不需要是对称的(尽管它们是实方阵),因此它们可能有复的特征值和特征向量,其中虚数分量对应于潜在的振荡行为(如果迭代地应用同一~Jacobian)。 即使$\Vh^{(t)}$或$\Vh^{(t)}$中有趣的小变化在反向传播中是实值的,它们仍可以用这样的复数基表示。 重要的是,当向量乘以矩阵时,这些复数基的系数幅值(复数的绝对值)会发生什么变化。 幅值大于1的特征值对应于放大(如果反复应用则指数增长)或收缩(如果反复应用则指数减小)。 -非线性映射情况时,Jacobian会在每一步任意变化。 +非线性映射情况时,Jacobian~会在每一步任意变化。 因此,动态量变得更加复杂。 然而,一个小的初始变化多步之后仍然会变成一个大的变化。 纯线性和非线性情况的一个不同之处在于使用压缩非线性(如$\tanh$)可以使循环动态量有界。 @@ -890,7 +890,7 @@ Jacobian矩阵告诉我们$\Vh^{(t)}$一个微小的变化如何向前一步传 回声状态网络的策略是简单地固定权重使其具有一定的谱半径如3,其中信息通过时间前向传播,但会由于饱和非线性单元(如$\tanh$)的稳定作用而不会爆炸。 -最近,已经有研究表明,用于设置ESN权重的技术可以用来\emph{初始化}完全可训练的循环网络的权重(通过时间反向传播来训练隐藏到隐藏的循环权重),帮助学习长期依赖{cite?}。 +最近,已经有研究表明,用于设置~ESN~权重的技术可以用来\emph{初始化}完全可训练的循环网络的权重(通过时间反向传播来训练隐藏到隐藏的循环权重),帮助学习长期依赖~{cite?}。 在这种设定下,结合\sec?中稀疏初始化的方案,设置$1.2$的初始谱半径表现不错。 @@ -930,18 +930,18 @@ $d$~时间步的跳跃连接可以确保单元总能被先前的$d$个时间步 使用权重接近1的线性自连接是确保该单元可以访问过去值的不同方式。 线性自连接通过调节实值$\alpha$更平滑灵活地调整这种效果,而不是调整整数值的跳跃长度。 -这个想法由{Mozer-nips92}和{ElHihi+Bengio-nips8}提出。 +这个想法由~{Mozer-nips92}和~{ElHihi+Bengio-nips8}提出。 在回声状态网络中,渗漏单元也被发现很有用{cite?}。 我们可以通过两种基本策略设置渗漏单元使用的时间常数。 一种策略是手动将其固定为常数,例如在初始化时从某些分布采样它们的值。 另一种策略是使时间常数成为自由变量,并学习出来。 -在不同时间尺度使用这样的渗漏单元似乎能帮助学习长期依赖{cite?}。 +在不同时间尺度使用这样的渗漏单元似乎能帮助学习长期依赖~{cite?}。 ## 删除连接 -处理长期依赖另一种方法是在多个时间尺度组织RNN状态的想法{cite?},信息在较慢的时间尺度上更容易长距离流动。 +处理长期依赖另一种方法是在多个时间尺度组织~RNN~状态的想法{cite?},信息在较慢的时间尺度上更容易长距离流动。 这个想法与之前讨论的时间维度上的跳跃连接不同,因为它涉及主动\emph{删除}长度为一的连接并用更长的连接替换它们。 以这种方式修改的单元被迫在长时间尺度上运作。 @@ -952,9 +952,9 @@ $d$~时间步的跳跃连接可以确保单元总能被先前的$d$个时间步 强制一组循环单元在不同时间尺度上运作有不同的方式。 一种选择是使循环单元变成渗漏单元,但不同的单元组关联不同的固定时间尺度。 -这由{Mozer-nips92}提出,并被成功应用于{Pascanu+al-ICML2013-small}。 +这由~{Mozer-nips92}提出,并被成功应用于~{Pascanu+al-ICML2013-small}。 另一种选择是使显式且离散的更新发生在不同的时间,不同的单元组有不同的频率。 -这是{ElHihi+Bengio-nips8}和{Koutnik-et-al-ICML2014}的方法。 +这是~{ElHihi+Bengio-nips8}和~{Koutnik-et-al-ICML2014}的方法。 它在一些基准数据集上表现不错。 @@ -963,15 +963,15 @@ $d$~时间步的跳跃连接可以确保单元总能被先前的$d$个时间步 本文撰写之时,实际应用中最有效的序列模型称为门控RNN。 包括基于长短期记忆和基于门控循环单元的网络。 -像渗漏单元一样,门控RNN想法也是基于生成通过时间的路径,其中导数既不消失也不发生爆炸。 +像渗漏单元一样,门控RNN~想法也是基于生成通过时间的路径,其中导数既不消失也不发生爆炸。 渗漏单元通过手动选择常量的连接权重或参数化的连接权重来达到这一目的。 -门控RNN将其推广为在每个时间步都可能改变的连接权重。 +门控RNN~将其推广为在每个时间步都可能改变的连接权重。 渗漏单元允许网络在较长持续时间内\emph{积累}信息(诸如用于特定特征或类的线索)。 然而,一旦该信息被使用,让神经网络\emph{遗忘}旧的状态可能是有用的。 例如,如果一个序列是由子序列组成,我们希望渗漏单元能在各子序列内积累线索,我们需要将状态设置为0以忘记旧状态的的机制。 我们希望神经网络学会决定何时清除状态,而不是手动决定。 -这就是门控RNN要做的事。 +这就是门控RNN~要做的事。 ## LSTM @@ -979,8 +979,8 @@ $d$~时间步的跳跃连接可以确保单元总能被先前的$d$个时间步 引入自循环的巧妙构思,以产生梯度长时间持续流动的路径是初始长短期记忆模型的核心贡献{cite?}。 其中一个关键扩展是使自循环的权重视上下文而定,而不是固定的{cite?}。 门控此自循环(由另一个隐藏单元控制)的权重,累积的时间尺度可以动态地改变。 -在这种情况下,即使是具有固定参数的LSTM,累积的时间尺度也可以因输入序列而改变,因为时间常数是模型本身的输出。 -LSTM已经在许多应用中取得重大成功,如无约束手写识别{cite?}、语音识别{cite?}、手写识别{cite?}、机器翻译{cite?}、为图像生成标题{cite?}和解析{cite?}。 +在这种情况下,即使是具有固定参数的~LSTM,累积的时间尺度也可以因输入序列而改变,因为时间常数是模型本身的输出。 +LSTM~已经在许多应用中取得重大成功,如无约束手写识别{cite?}、语音识别{cite?}、手写识别{cite?}、机器翻译{cite?}、为图像生成标题{cite?}和解析{cite?}。 @@ -990,7 +990,7 @@ LSTM已经在许多应用中取得重大成功,如无约束手写识别{cite?} \else \centerline{\includegraphics{Chapter10/figures/lstm}} \fi -\caption{LSTM循环网络"细胞"的框图。 +\caption{LSTM~循环网络"细胞"的框图。 细胞彼此循环连接,代替一般循环网络中普通的隐藏单元。 这里使用常规的人工神经元计算输入特征。 如果sigmoid输入门允许,它的值可以累加到状态。 @@ -1002,29 +1002,29 @@ LSTM已经在许多应用中取得重大成功,如无约束手写识别{cite?} } \end{figure} -LSTM块如\fig?所示。 +LSTM~块如\fig?所示。 在浅循环网络的架构下,相应的前向传播公式如下。 更深的架构也被成功应用{cite?}。 -LSTM循环网络除了外部的RNN循环外,还具有内部的"LSTM细胞"循环(自环),因此LSTM不是简单地向输入和循环单元的仿射变换之后施加一个逐元素的非线性。 +LSTM~循环网络除了外部的~RNN~循环外,还具有内部的"LSTM~细胞"循环(自环),因此~LSTM~不是简单地向输入和循环单元的仿射变换之后施加一个逐元素的非线性。 与普通的循环网络类似,每个单元有相同的输入和输出,但也有更多的参数和控制信息流动的门控单元系统。 最重要的组成部分是状态单元$s_i^{(t)}$,与前一节讨论的渗漏单元有类似的线性自环。 -然而,此处自环的权重(或相关联的时间常数)由遗忘门~$f_i^{(t)}$控制(时刻$t$和细胞$i$),由sigmoid单元将权重设置为0和1之间的值: +然而,此处自环的权重(或相关联的时间常数)由遗忘门~$f_i^{(t)}$控制(时刻$t$和细胞$i$),由~sigmoid~单元将权重设置为0和1之间的值: \begin{align} 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}$包含所有LSTM细胞的输出。 +其中$\Vx^{(t)}$是当前输入向量,$\Vh^{t}$是当前隐藏层向量,$\Vh^{t}$包含所有~LSTM~细胞的输出。 $\Vb^f, \MU^f, \MW^f$分别是偏置、输入权重和遗忘门的循环权重。 -因此LSTM细胞内部状态以如下方式更新,其中有一个条件的自环权重$f_i^{(t)}$: +因此~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$分别是LSTM细胞中的偏置、输入权重和遗忘门的循环权重。 +其中$\Vb, \MU, \MW$分别是~LSTM~细胞中的偏置、输入权重和遗忘门的循环权重。 \textbf{外部输入门}(external input gate)单元$g_i^{(t)}$以类似遗忘门(使用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). \end{align} -LSTM细胞的输出$h_i^{(t)}$也可以由\textbf{输出门}(output gate)~$q_i^{(t)}$关闭(使用sigmoid单元作为门控): +LSTM~细胞的输出$h_i^{(t)}$也可以由\textbf{输出门}(output gate)~$q_i^{(t)}$关闭(使用sigmoid单元作为门控): \begin{align} 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), @@ -1035,17 +1035,17 @@ LSTM细胞的输出$h_i^{(t)}$也可以由\textbf{输出门}(output gate)~$q_i^{ -LSTM网络比简单的循环架构更易于学习长期依赖,先是用于测试长期依赖学习能力的人工数据集{cite?},然后是在具有挑战性的序列处理任务上获得最先进的表现({cite?})。 -LSTM的变体和替代也已经被研究和使用,这将在下文进行讨论。 +LSTM~网络比简单的循环架构更易于学习长期依赖,先是用于测试长期依赖学习能力的人工数据集{cite?},然后是在具有挑战性的序列处理任务上获得最先进的表现{cite?}。 +LSTM~的变体和替代也已经被研究和使用,这将在下文进行讨论。 ## 其他门控RNN -LSTM架构中哪些部分是真正必须的? +LSTM~架构中哪些部分是真正必须的? 还可以设计哪些其他成功架构允许网络动态地控制时间尺度和不同单元的遗忘行为? -最近关于门控RNN的工作给出了这些问题的某些答案,其单元也被称为门控循环单元或GRU{cite?}。 -与LSTM的主要区别是,单个门控单元同时控制遗忘因子和更新状态单元的决定。 +最近关于门控RNN~的工作给出了这些问题的某些答案,其单元也被称为门控循环单元或~GRU~{cite?}。 +与~LSTM~的主要区别是,单个门控单元同时控制遗忘因子和更新状态单元的决定。 更新公式如下: \begin{align} h_i^{(t)} = u_i^{(t-1)} h_i^{(t-1)} + (1 - u_i^{(t-1)}) \sigma @@ -1061,7 +1061,7 @@ LSTM架构中哪些部分是真正必须的? r_i^{(t)} = \sigma \Big( b_i^r + \sum_j U_{i,j}^r x_j^{(t)} + \sum_j W_{i,j}^r h_j^{(t)} \Big). \end{align} 复位和更新门能独立地"忽略"状态向量的一部分。 -更新门像条件渗漏累积器一样可以线性门控任意维度,从而选择将它复制(在sigmoid的一个极端)或完全由新的"目标状态"值(朝向渗漏累积器的收敛方向)替换并完全忽略它(在另一个极端)。 +更新门像条件渗漏累积器一样可以线性门控任意维度,从而选择将它复制(在~sigmoid~的一个极端)或完全由新的"目标状态"值(朝向渗漏累积器的收敛方向)替换并完全忽略它(在另一个极端)。 复位门控制当前状态中哪些部分用于计算下一个目标状态,在过去状态和未来状态之间引入了附加的非线性效应。 @@ -1069,22 +1069,22 @@ LSTM架构中哪些部分是真正必须的? 围绕这一主题可以设计更多的变种。 例如复位门(或遗忘门)的输出可以在多个隐藏单元间共享。 或者,全局门的乘积(覆盖一整组的单元,例如整一层)和一个局部门(每单元)可用于结合全局控制和局部控制。 -然而,一些调查发现这些LSTM和GRU架构的变种,在广泛的任务中难以明显地同时击败这两个原始架构{cite?}。 -{Greff-et-al-arxiv2015}发现其中的关键因素是遗忘门,而{Jozefowicz-et-al-ICML2015}发现向LSTM遗忘门加入1的偏置(由{Gers-et-al-2000}提倡)能让LSTM变得与已探索的最佳变种一样健壮。 +然而,一些调查发现这些~LSTM~和GRU架构的变种,在广泛的任务中难以明显地同时击败这两个原始架构{cite?}。 +{Greff-et-al-arxiv2015}发现其中的关键因素是遗忘门,而~{Jozefowicz-et-al-ICML2015}发现向LSTM遗忘门加入1的偏置(由~{Gers-et-al-2000}提倡)能让~LSTM~变得与已探索的最佳变种一样健壮。 # 优化长期依赖 -我们已经在\sec?和\sec?中描述过在许多时间步上优化RNN时发生的梯度消失和爆炸的问题。 +我们已经在\sec?和\sec?中描述过在许多时间步上优化~RNN~时发生的梯度消失和爆炸的问题。 -由{Martens+Sutskever-ICML2011}提出了一个有趣的想法是,二阶导数可能在一阶导数消失的同时消失。 -二阶优化算法可以大致被理解为将一阶导数除以二阶导数(在更高维数,由梯度乘以Hessian的逆)。 +由~{Martens+Sutskever-ICML2011}提出了一个有趣的想法是,二阶导数可能在一阶导数消失的同时消失。 +二阶优化算法可以大致被理解为将一阶导数除以二阶导数(在更高维数,由梯度乘以~Hessian~的逆)。 如果二阶导数与一阶导数以类似的速率收缩,那么一阶和二阶导数的比率可保持相对恒定。 -不幸的是,二阶方法有许多缺点,包括高的计算成本、需要一个大的minibatch、并且倾向于被吸引到鞍点。 +不幸的是,二阶方法有许多缺点,包括高的计算成本、需要一个大的小批量、并且倾向于被吸引到鞍点。 {Martens+Sutskever-ICML2011}发现采用二阶方法的不错结果。 -之后,{sutskeverimportance}发现使用较简单的方法可以达到类似的结果,例如经过谨慎初始化的Nesterov动量法。 -更详细的内容参考{Sutskever-thesis2012}。 -应用于LSTM时,这两种方法在很大程度上会被单纯的SGD(甚至没有动量)取代。 +之后,{sutskeverimportance}发现使用较简单的方法可以达到类似的结果,例如经过谨慎初始化的~Nesterov~动量法。 +更详细的内容参考~{Sutskever-thesis2012}。 +应用于~LSTM~时,这两种方法在很大程度上会被单纯的~SGD(甚至没有动量)取代。 这是机器学习中一个延续的主题,设计一个易于优化模型通常比设计出更加强大的优化算法更容易。 @@ -1112,11 +1112,11 @@ LSTM架构中哪些部分是真正必须的? 梯度截断可以使梯度下降在极陡峭的悬崖附近更合理地执行。 这些陡峭的悬崖通常发生在循环网络中,位于循环网络近似线性的附近。 悬崖在时间步的数量上呈指数地陡峭,因为对于每个时间步,权重矩阵都自乘一次。 -(左)没有梯度截断的梯度下降越过这个小峡谷的底部,然后从悬崖面接收非常大的梯度。 +\emph{(左)}没有梯度截断的梯度下降越过这个小峡谷的底部,然后从悬崖面接收非常大的梯度。 大梯度灾难性地将参数推到图的轴外。 -(右)使用梯度截断的梯度下降对悬崖的反应更温和。 +\emph{(右)}使用梯度截断的梯度下降对悬崖的反应更温和。 当它上升到悬崖面时,步长受到限制,使得它不会被推出靠近解的陡峭区域。 -经{Pascanu+al-ICML2013-small}许可改编此图。 +经~{Pascanu+al-ICML2013-small}许可改编此图。 } \end{figure} @@ -1124,8 +1124,8 @@ LSTM架构中哪些部分是真正必须的? 一个简单的解决方案已被从业者使用多年:截断梯度。 此想法有不同实例{cite?}。 -一种选择是在参数更新之前,\emph{逐元素}地截断minibatch产生的参数梯度{cite?}。 -另一种是在参数更新之前\emph{截断梯度~$\Vg$的范数$\norm{ \Vg }$}{cite?}: +一种选择是在参数更新之前,\emph{逐元素}地截断小批量产生的参数梯度~{cite?}。 +另一种是在参数更新之前\emph{截断梯度~$\Vg$的范数$\norm{ \Vg }$}~{cite?}: \begin{align} \text{if}~ \norm{\Vg} &> v \\ \Vg &\gets \frac{\Vg v}{\norm{g}}, @@ -1136,12 +1136,12 @@ LSTM架构中哪些部分是真正必须的? 这种有界梯度能避免执行梯度爆炸时的有害一步。 事实上,当梯度大小高于阈值时,即使是采取简单的\emph{随机步骤}往往工作得几乎一样好。 如果爆炸非常严重,梯度数值上为{\tt Inf}或{\tt Nan}(无穷大或不是一个数字),则可以采取大小为$v$的随机一步,通常会离开数值不稳定的状态。 -截断每minibatch梯度范数不会改变单个minibatch的梯度方向。 -然而,许多minibatch使用范数截断梯度后的平均值不等同于截断真实梯度(使用所有的实例所形成的梯度)的范数。 -大导数范数的样本,和像这样的出现在同一minibatch的样本,其对最终方向的贡献将消失。 -不像传统minibatch梯度下降,其中真实梯度的方向是等于所有minibatch梯度的平均。 +截断每小批量梯度范数不会改变单个小批量的梯度方向。 +然而,许多小批量使用范数截断梯度后的平均值不等同于截断真实梯度(使用所有的实例所形成的梯度)的范数。 +大导数范数的样本,和像这样的出现在同一小批量的样本,其对最终方向的贡献将消失。 +不像传统小批量梯度下降,其中真实梯度的方向是等于所有小批量梯度的平均。 换句话说,传统的随机梯度下降使用梯度的无偏估计,而与使用范数截断的梯度下降引入了经验上是有用的启发式偏置。 -通过逐元素截断,更新的方向与真实梯度或minibatch的梯度不再对齐,但是它仍然是一个下降方向。 +通过逐元素截断,更新的方向与真实梯度或小批量的梯度不再对齐,但是它仍然是一个下降方向。 还有学者提出{cite?}(相对于隐藏单元)截断反向传播梯度,但没有公布与这些变种之间的比较; 我们推测,所有这些方法表现类似。 @@ -1151,7 +1151,7 @@ LSTM架构中哪些部分是真正必须的? 梯度截断有助于处理爆炸的梯度,但它无助于消失的梯度。 为了解决消失的梯度问题并更好地捕获长期依赖,我们讨论了如下想法:在展开循环架构的计算图中,沿着与弧度相关联的梯度乘积接近1的部分创建路径。 -在\sec?中已经讨论过,实现这一点的一种方法是使用LSTM以及其他自循环和门控机制。 +在\sec?中已经讨论过,实现这一点的一种方法是使用~LSTM~以及其他自循环和门控机制。 另一个想法是正则化或约束参数,以引导"信息流"。 特别是即使损失函数只对序列尾部的输出作惩罚,我们也希望梯度向量$\nabla_{\Vh^{(t)}} L$在反向传播时能维持其幅度。 形式上,我们要使 @@ -1169,12 +1169,12 @@ LSTM架构中哪些部分是真正必须的? \norm{ (\nabla_{\Vh^{(t)}} L) \frac{\partial \Vh^{(t)}}{\partial \Vh^{(t-1)}}}} {\norm{\nabla_{\Vh^{(t)}} L}} -1 \Bigg)^2. \end{align} -计算这一梯度的正则项可能会出现困难,但{Pascanu+al-ICML2013-small}提出可以将后向传播向量$\nabla_{\Vh^{(t)}} L$考虑为恒值作为近似(为了计算正则化的目的,没有必要通过它们向后传播)。 -使用该正则项的实验表明,如果与标准的启发式截断(处理梯度爆炸)相结合,该正则项可以显著地增加RNN可以学习的依赖跨度。 -梯度截断特别重要,因为它保持了爆炸梯度边缘的RNN动态。 +计算这一梯度的正则项可能会出现困难,但~{Pascanu+al-ICML2013-small}提出可以将后向传播向量$\nabla_{\Vh^{(t)}} L$考虑为恒值作为近似(为了计算正则化的目的,没有必要通过它们向后传播)。 +使用该正则项的实验表明,如果与标准的启发式截断(处理梯度爆炸)相结合,该正则项可以显著地增加~RNN~可以学习的依赖跨度。 +梯度截断特别重要,因为它保持了爆炸梯度边缘的~RNN~动态。 如果没有梯度截断,梯度爆炸将阻碍学习的成功。 -这种方法的一个主要弱点是,在处理数据冗余的任务时如语言模型,它并不像LSTM一样有效。 +这种方法的一个主要弱点是,在处理数据冗余的任务时如语言模型,它并不像~LSTM~一样有效。 @@ -1194,25 +1194,25 @@ LSTM架构中哪些部分是真正必须的? 神经网络处理序列信息的需要,改变了每个步骤向网络注入输入的方式,长期以来推理能力被认为是重要的,而不是对输入做出自动的、直观的反应{cite?} 。 -为了解决这一难题,{cite?}引入了记忆网络,其中包括一组可以通过寻址机制来访问的记忆单元。 +为了解决这一难题,{Weston2014}引入了记忆网络,其中包括一组可以通过寻址机制来访问的记忆单元。 记忆网络原本需要监督信号指示他们如何使用自己的记忆单元。 -{cite?}引入的神经网络图灵机,不需要明确的监督指示采取哪些行动而能学习从记忆单元读写任意内容,并通过使用基于内容的软注意机制(见{cite?}和\sec?),允许端到端的训练。 +{Graves-et-al-arxiv2014}引入的神经网络图灵机,不需要明确的监督指示采取哪些行动而能学习从记忆单元读写任意内容,并通过使用基于内容的软注意机制(见{Bahdanau-et-al-ICLR2015-small}和\sec?),允许端到端的训练。 这种软寻址机制已成为其他允许基于梯度优化的模拟算法机制的相关架构的标准{cite?}。 -每个记忆单元可以被认为是LSTM和GRU中记忆单元的扩展。 +每个记忆单元可以被认为是~LSTM~和GRU中记忆单元的扩展。 不同的是,网络输出一个内部状态来选择从哪个单元读取或写入,正如数字计算机读取或写入到特定地址的内存访问。 产生确切整数地址的函数很难优化。 -为了缓解这一问题,NTM实际同时从多个记忆单元写入或读取。 +为了缓解这一问题,NTM~实际同时从多个记忆单元写入或读取。 读取时,它们采取许多单元的加权平均值。 写入时,他们对多个单元修改不同的数值。 -用于这些操作的系数被选择为集中在一个小数目的单元,如通过softmax函数产生它们。 +用于这些操作的系数被选择为集中在一个小数目的单元,如通过~softmax~函数产生它们。 使用这些具有非零导数的权重允许函数控制访问存储器,从而能使用梯度下降法优化。 关于这些系数的梯度指示着其中每个参数是应该增加还是减少,但梯度通常只在接收大系数的存储器地址上变大。 -这些记忆单元通常扩充为包含向量,而不是由LSTM或GRU存储单元所存储的单个标量。 +这些记忆单元通常扩充为包含向量,而不是由~LSTM~或GRU存储单元所存储的单个标量。 增加记忆单元大小的原因有两个。 原因之一是,我们已经增加了访问记忆单元的成本。 我们为产生用于许多单元的系数付出计算成本,但我们预期这些系数聚集在周围小数目的单元。 @@ -1243,7 +1243,7 @@ LSTM架构中哪些部分是真正必须的? 外显记忆的方法在\fig?说明,其中我们可以看到与存储器耦接的"任务神经网络"。 虽然这一任务神经网络可以是前馈或循环的,但整个系统是一个循环网络。 任务网络可以选择读取或写入的特定内存地址。 -外显记忆似乎允许模型学习普通RNN或LSTM RNN不能学习的任务。 +外显记忆似乎允许模型学习普通~RNN~或~LSTM RNN~不能学习的任务。 这种优点的一个原因可能是因为信息和梯度可以在非常长的持续时间内传播(分别在时间上向前或向后)。 @@ -1252,8 +1252,8 @@ LSTM架构中哪些部分是真正必须的? 优化离散决策的模型需要专门的优化算法,这将在\sec?中描述。 目前为止,训练这些做离散决策的随机架构,仍比训练进行软判决的确定性算法更难。 -无论是软(允许反向传播)或随机硬性的,用于选择一个地址的机制与先前在机器翻译的背景下引入的注意机制形式相同{cite?},这在\sec?中也有讨论。 -甚至更早之前,注意机制的想法就被引入了神经网络,在手写生成的情况下{cite?},有一个被约束为通过序列只向前移动的注意机制。 +无论是软(允许反向传播)或随机硬性的,用于选择一个地址的机制与先前在机器翻译的背景下引入的注意力机制形式相同{cite?},这在\sec?中也有讨论。 +甚至更早之前,注意力机制的想法就被引入了神经网络,在手写生成的情况下{cite?},有一个被约束为通过序列只向前移动的注意力机制。 在机器翻译和记忆网络的情况下,每个步骤中关注的焦点可以移动到一个完全不同的地方(相比之前的步骤)。 循环神经网络提供了将深度学习扩展到序列数据的一种方法。 diff --git a/docs/_posts/2016-12-11-Chapter11_practical_methodology.md b/docs/_posts/2016-12-11-Chapter11_practical_methodology.md index 0944c9c..0433b59 100644 --- a/docs/_posts/2016-12-11-Chapter11_practical_methodology.md +++ b/docs/_posts/2016-12-11-Chapter11_practical_methodology.md @@ -13,7 +13,7 @@ share: false 这可能给人一种印象——成为机器学习专家的最重要因素是了解各种各样的机器学习技术,并熟悉各种不同的数学。 在实践中,正确使用一个普通算法通常比草率地使用一个不清楚的算法效果更好。 正确应用一个算法需要掌握一些相当简单的方法论。 -本章的许多建议都来自{ng-lecture-advice}。 +本章的许多建议都来自~{ng-lecture-advice}。 我们建议参考以下几个实践设计流程: @@ -33,7 +33,7 @@ share: false -我们将使用街景地址号码转录系统{cite?}作为一个运行示例。 +我们将使用街景地址号码转录系统~{cite?}作为一个运行示例。 该应用的目标是将建筑物添加到谷歌地图。 街景车拍摄建筑物,并记录与每张建筑照片相关的GPS坐标。 卷积网络识别每张照片上的地址号码,由谷歌地图数据库在正确的位置添加该地址。 @@ -107,7 +107,7 @@ share: false \begin{equation} F = \frac{2pr}{p+r}. \end{equation} -另一种方法是报告PR曲线下方的总面积。 +另一种方法是报告\,PR曲线下方的总面积。 @@ -157,22 +157,22 @@ share: false 首先,根据数据的结构选择一类合适的模型。 如果项目是以固定大小的向量作为输入的监督学习,那么可以使用全连接的前馈网络。 如果输入有已知的拓扑结构(例如,输入是图像),那么可以使用卷积网络。 -在这些情况下,刚开始可以使用某些分段线性单元(ReLU或者其扩展,如Leaky ReLU、PReLU和maxout)。 -如果输入或输出是一个序列,可以使用门控循环网络(LSTM或GRU)。 +在这些情况下,刚开始可以使用某些分段线性单元(ReLU\,或者其扩展,如\,Leaky ReLU、PReLU\,和\,maxout)。 +如果输入或输出是一个序列,可以使用门控循环网络(LSTM\,或\,GRU)。 -具有衰减学习率以及动量的SGD是优化算法一个合理的选择 +具有衰减学习率以及动量的\,SGD\,是优化算法一个合理的选择 (流行的衰减方法有,衰减到固定最低学习率的线性衰减、指数衰减,或每次发生验证错误停滞时将学习率降低$2-10$倍,这些衰减方法在不同问题上好坏不一)。 另一个非常合理的选择是Adam算法。 -批标准化对优化性能有着显著的影响,特别是对卷积网络和具有sigmoid非线性函数的网络而言。 +批标准化对优化性能有着显著的影响,特别是对卷积网络和具有~sigmoid~非线性函数的网络而言。 虽然在最初的基准中忽略批标准化是合理的,然而当优化似乎出现问题时,应该立刻使用批标准化。 除非训练集包含数千万以及更多的样本,否则项目应该在一开始就包含一些温和的正则化。 提前终止也被普遍采用。 -Dropout也是一个很容易实现,且兼容很多模型和训练算法的出色正则化项。 -批标准化有时也能降低泛化误差,此时可以省略Dropout步骤,因为用于标准化变量的统计量估计本身就存在噪扰。 %?? 还是有问题 +Dropout~也是一个很容易实现,且兼容很多模型和训练算法的出色正则化项。 +批标准化有时也能降低泛化误差,此时可以省略~Dropout~步骤,因为用于标准化变量的统计量估计本身就存在噪声。 %?? 还是有问题 @@ -208,7 +208,7 @@ Dropout也是一个很容易实现,且兼容很多模型和训练算法的出 反之,可以尝试增加更多的网络层或每层增加更多的隐藏单元,以增加模型的规模。 此外,也可以尝试调整学习率等超参数的措施来改进学习算法。 如果更大的模型和仔细调试的优化算法效果不佳,那么问题可能源自训练数据的\emph{质量}。 -数据可能含太多噪扰,或是可能不包含预测输出所需的正确输入。 +数据可能含太多噪声,或是可能不包含预测输出所需的正确输入。 这意味着我们需要重新开始,收集更干净的数据或是收集特征更丰富的数据集。 @@ -220,7 +220,7 @@ Dropout也是一个很容易实现,且兼容很多模型和训练算法的出 在拥有百万甚至上亿用户的大型网络公司,收集大型数据集是可行的,并且这样做的成本可能比其他方法要少很多,所以答案几乎总是收集更多的训练数据。 例如,收集大型标注数据集是解决对象识别问题的主要因素之一。 在其他情况下,如医疗应用,收集更多的数据可能代价很高或者不可行。 -一个可以替代的简单方法是降低模型大小或是改进正则化(调整超参数,如权重衰减系数,或是加入正则化策略,如Dropout)。 +一个可以替代的简单方法是降低模型大小或是改进正则化(调整超参数,如权重衰减系数,或是加入正则化策略,如\,Dropout)。 如果调整正则化超参数后,训练集性能和测试集性能之间的差距还是不可接受,那么收集更多的数据是可取的。 @@ -288,7 +288,7 @@ Dropout也是一个很容易实现,且兼容很多模型和训练算法的出 并非每个超参数都能对应着完整的U形曲线。 -很多超参数是离散的,如中间层单元数目或是maxout单元中线性元件的数目,这种情况只能沿曲线探索一些点。 +很多超参数是离散的,如中间层单元数目或是~maxout单元中线性元件的数目,这种情况只能沿曲线探索一些点。 有些超参数是二值的。 通常这些超参数用来指定是否使用学习算法中的一些可选部分,如预处理步骤减去均值并除以标准差来标准化输入特征。 这些超参数只能探索曲线上的两点。 @@ -337,8 +337,8 @@ Dropout也是一个很容易实现,且兼容很多模型和训练算法的出 寻找最佳的测试误差需要权衡这些数值。 当训练误差较小(因此容量较大),测试误差主要取决于训练误差和测试误差之间的差距时,通常神经网络效果最好。 此时目标是缩小这一差距,使训练误差的增长速率不快于差距减小的速率。 -要减少这个差距,我们可以改变正则化超参数,以减少有效的模型容量,如添加Dropout或权重衰减策略。 -通常,最佳性能来自正则化得很好的大规模模型,比如使用Dropout的神经网络。 +要减少这个差距,我们可以改变正则化超参数,以减少有效的模型容量,如添加~Dropout~或权重衰减策略。 +通常,最佳性能来自正则化得很好的大规模模型,比如使用~Dropout~的神经网络。 @@ -379,7 +379,7 @@ Dropout也是一个很容易实现,且兼容很多模型和训练算法的出 权重衰减系数 & 降低 & 降低权重衰减系数使得模型参数可以自由地变大。 & \\ \hline -Dropout比率 & 降低 & 较少地丢弃单元可以更多地让单元彼此"协力"来适应训练集。 +Dropout\,比率 & 降低 & 较少地丢弃单元可以更多地让单元彼此"协力"来适应训练集。 & \\ \end{tabular} \caption{各种超参数对模型容量的影响。} @@ -443,7 +443,7 @@ Dropout比率 & 降低 & 较少地丢弃单元可以更多地让单元彼此"协 这个图说明了通常只有一个超参数对结果有着重要的影响。 在这个例子中,只有水平轴上的超参数对结果有重要的作用。 网格搜索将大量的计算浪费在了指数量级的对结果无影响的超参数中,相比之下随机搜索几乎每次测试都测试了对结果有影响的每个超参数的独一无二的值。 -此图经{Bergstra+Bengio-LW2011}允许转载。} +此图经~{Bergstra+Bengio-LW2011}允许转载。} \end{figure} @@ -469,7 +469,7 @@ Dropout比率 & 降低 & 较少地丢弃单元可以更多地让单元彼此"协 ## 随机搜索 -幸运的是,有一个替代网格搜索的方法,并且编程简单,使用更方便,能更快地收敛到超参数的良好取值:随机搜索{cite?}。 +幸运的是,有一个替代网格搜索的方法,并且编程简单,使用更方便,能更快地收敛到超参数的良好取值:随机搜索~{cite?}。 @@ -515,7 +515,7 @@ Dropout比率 & 降低 & 较少地丢弃单元可以更多地让单元彼此"协 为了弥补梯度的缺失,我们可以对验证集误差建模,然后通过优化该模型来提出新的超参数猜想。 大部分基于模型的超参数搜索算法,都是使用贝叶斯回归模型来估计每个超参数的验证集误差期望和该期望的不确定性。 因此,优化涉及到探索(探索高度不确定的超参数,可能带来显著的效果提升,也可能效果很差)和使用(使用已经确信效果不错的超参数——通常是先前见过的非常熟悉的超参数)之间的权衡。 -关于超参数优化的最前沿方法还包括Spearmint{cite?},TPE{cite?}和SMAC{cite?}。 +关于超参数优化的最前沿方法还包括Spearmint~{cite?},TPE~{cite?}和SMAC~{cite?}。 @@ -579,7 +579,7 @@ Dropout比率 & 降低 & 较少地丢弃单元可以更多地让单元彼此"协 \emph{可视化最严重的错误}: 大多数模型能够输出运行任务时的某种置信度量。 -例如,基于softmax函数输出层的分类器给每个类分配一个概率。 +例如,基于\,softmax函数\,输出层的分类器给每个类分配一个概率。 因此,分配给最有可能的类的概率给出了模型在其分类决定上的置信估计值。 通常,相比于正确预测的概率最大似然训练会略有高估。 但是由于实际上模型的较小概率不太可能对应着正确的标签,因此它们在一定意义上还是有些用的。 @@ -629,7 +629,7 @@ Dropout比率 & 降低 & 较少地丢弃单元可以更多地让单元彼此"协 -通常,我们会测试向量值函数$g:\SetR^m \to \SetR^n$的梯度或Jacobian矩阵。 +通常,我们会测试向量值函数$g:\SetR^m \to \SetR^n$的梯度或\,Jacobian\,矩阵。 令人遗憾的是,有限差分只允许我们每次计算一个导数。 我们可以使用有限差分 $mn$次评估$g$的所有偏导数,也可以将该测试应用于一个新函数(在函数$g$的输入输出都加上随机投影)。%?? 后面这句好像不对? g的输入输出都使用随机投影的 例如,我们可以将导数实现的测试用于函数$f(x) = \Vu^T g(\Vv x)$,其中$\Vu$和$\Vv$是随机向量。%?? 这句也不对 @@ -650,7 +650,7 @@ Dropout比率 & 降低 & 较少地丢弃单元可以更多地让单元彼此"协 -\emph{监控激励函数值和梯度的直方图}: +\emph{监控激活函数值和梯度的直方图}: 可视化神经网络在大量训练迭代后(也许是一个轮)收集到的激活函数值和梯度的统计量往往是有用的。 隐藏单元的预激活值可以告诉我们该单元是否饱和,或者它们饱和的频率如何。 例如,对于整流器,它们多久关一次?是否有单元一直关闭? @@ -700,15 +700,15 @@ Dropout比率 & 降低 & 较少地丢弃单元可以更多地让单元彼此"协 对于视觉任务而言,基准系统是带有整流线性单元的卷积网络。 转录项目开始于一个这样的模型。 当时,使用卷积网络输出预测序列并不常见。 -开始时,我们使用一个尽可能简单的基准模型,该模型输出层的第一个实现包含$n$个不同的softmax单元来预测$n$个字符的序列。 -我们使用与训练分类任务相同的方式来训练这些softmax单元,独立地训练每个softmax单元。 +开始时,我们使用一个尽可能简单的基准模型,该模型输出层的第一个实现包含$n$个不同的~softmax单元来预测$n$个字符的序列。 +我们使用与训练分类任务相同的方式来训练这些~softmax单元,独立地训练每个~softmax单元。 我们建议反复细化这些基准,并测试每个变化是否都有改进。 街景转录系统的第一个变化受激励于覆盖指标的理论理解和数据结构。 具体地,当输出序列的概率低于某个值$t$即$p(\Vy\mid\Vx) < t$时,网络拒绝为输入$\Vx$分类。 -最初,$p(\Vy\mid\Vx)$的定义是临时的,简单地将所有softmax函数输出乘在一起。 +最初,$p(\Vy\mid\Vx)$的定义是临时的,简单地将所有~softmax函数输出乘在一起。 这促使我们发展能够真正计算出合理对数似然的特定输出层和代价函数。%?? 后来是否该去掉? 这种方法使得样本拒绝机制更有效。 diff --git a/docs/_posts/2016-12-12-Chapter12_applications.md b/docs/_posts/2016-12-12-Chapter12_applications.md index 6d17bb6..2df58e5 100644 --- a/docs/_posts/2016-12-12-Chapter12_applications.md +++ b/docs/_posts/2016-12-12-Chapter12_applications.md @@ -5,7 +5,7 @@ share: false --- 在本章中,我们将介绍如何使用深度学习来解决计算机视觉、语音识别、自然语言处理以及其他商业领域中的应用。 -首先我们将讨论在许多最重要的AI应用中所需的大规模神经网络的实现。 +首先我们将讨论在许多最重要的~AI~应用中所需的大规模神经网络的实现。 接着,我们将回顾深度学习已经成功应用的几个特定领域。 尽管深度学习的一个目标是设计能够处理各种任务的算法,然而截止目前深度学习的应用仍然需要一定程度的特化。 例如,计算机视觉中的任务对每一个样本都需要处理大量的输入特征(像素)。 @@ -34,7 +34,7 @@ share: false 传统的神经网络是用单台机器的CPU来训练的。 如今,这种做法通常被视为是不可取的。 -现在,我们通常使用GPU或者许多台机器的CPU连接在一起进行计算。 +现在,我们通常使用~GPU~或者许多台机器的CPU连接在一起进行计算。 在使用这种昂贵配置之前,为论证CPU无法承担神经网络所需的巨大计算量,研究者们付出了巨大的努力。 @@ -78,53 +78,53 @@ share: false 与上述的实时图形算法相比,神经网络算法所需要的性能特性是相同的。 神经网络算法通常涉及大量参数、激活值、梯度值的缓冲区,其中每个值在每一次训练迭代中都要被完全更新。 这些缓冲太大,会超出传统的桌面计算机的高速缓存(cache),所以内存带宽通常会成为主要瓶颈。 -相比CPU,GPU一个显著的优势是其极高的内存带宽。 -神经网络的训练算法通常并不涉及大量的分支运算与复杂的控制指令,所以更适合在GPU硬件上训练。 -由于神经网络能够被分为多个单独的"神经元",并且独立于同一层内其他神经元进行处理,所以神经网络可以从GPU的并行特性中受益匪浅。 +相比CPU,GPU~一个显著的优势是其极高的内存带宽。 +神经网络的训练算法通常并不涉及大量的分支运算与复杂的控制指令,所以更适合在~GPU~硬件上训练。 +由于神经网络能够被分为多个单独的"神经元",并且独立于同一层内其他神经元进行处理,所以神经网络可以从~GPU~的并行特性中受益匪浅。 -GPU硬件最初专为图形任务而设计。 -随着时间的推移,GPU也变得更灵活,允许定制的子程序处理转化顶点坐标或者计算像素颜色的任务。 -原则上,GPU不要求这些像素值实际基于渲染任务。 -只要将计算的输出值作为像素值写入缓冲区,GPU就可以用于科学计算。 +GPU~硬件最初专为图形任务而设计。 +随着时间的推移,GPU~也变得更灵活,允许定制的子程序处理转化顶点坐标或者计算像素颜色的任务。 +原则上,GPU~不要求这些像素值实际基于渲染任务。 +只要将计算的输出值作为像素值写入缓冲区,GPU~就可以用于科学计算。 {Steinkrau2005}在GPU上实现了一个两层全连接的神经网络,并获得了相对基于CPU的基准方法三倍的加速。 不久以后,{chellapilla:inria-00112631}也论证了相同的技术可以用来加速监督卷积网络的训练。 -在通用GPU发布以后,使用显卡训练神经网络的热度开始爆炸性地增长。 -这种通用GPU可以执行任意的代码,而并非仅仅渲染子程序。 +在通用GPU~发布以后,使用显卡训练神经网络的热度开始爆炸性地增长。 +这种通用GPU~可以执行任意的代码,而并非仅仅渲染子程序。 NVIDIA的CUDA编程语言使得我们可以用一种像C一样的语言实现任意代码。 -由于相对简便的编程模型,强大的并行能力以及巨大的内存带宽,通用GPU为我们提供了训练神经网络的理想平台。 +由于相对简便的编程模型,强大的并行能力以及巨大的内存带宽,通用GPU~为我们提供了训练神经网络的理想平台。 在它发布以后不久,这个平台就迅速被深度学习的研究者们所采纳~{cite?}。 -如何在通用GPU上写高效的代码依然是一个难题。 -在GPU上获得良好表现所需的技术与CPU上的技术非常不同。 +如何在通用GPU~上写高效的代码依然是一个难题。 +在~GPU~上获得良好表现所需的技术与CPU上的技术非常不同。 比如说,基于CPU的良好代码通常被设计为尽可能从高速缓存中读取更多的信息。 -然而在GPU中,大多数可写内存位置并不会被高速缓存,所以计算某个值两次往往会比计算一次然后从内存中读取更快。 -GPU代码是天生多线程的,不同线程之间必须仔细协调好。 +然而在~GPU~中,大多数可写内存位置并不会被高速缓存,所以计算某个值两次往往会比计算一次然后从内存中读取更快。 +GPU~代码是天生多线程的,不同线程之间必须仔细协调好。 例如,如果能够把数据级联起来,那么涉及内存的操作一般会更快。 -当几个线程同时需要读/写一个值的时候,像这样的级联会作为一次内存操作出现。 -不同的GPU可能采用不同的级联读/写数据的方式。 +当几个线程同时需要读/写一个值时,像这样的级联会作为一次内存操作出现。 +不同的~GPU~可能采用不同的级联读/写数据的方式。 通常来说,如果在$n$个线程中,线程$i$访问的是第$i+j$处的内存,其中$j$是$2$的某个幂的倍数,那么内存操作就易于级联。 -具体的设定在不同的GPU型号中有所区别。 -GPU另一个常见的设定是使一个组中的所有线程都同时执行同一指令。 -这意味着GPU难以执行分支操作。 +具体的设定在不同的~GPU~型号中有所区别。 +GPU~另一个常见的设定是使一个组中的所有线程都同时执行同一指令。 +这意味着~GPU~难以执行分支操作。 线程被分为一个个称作warp的小组。 -在一个warp中的每一个线程在每一个循环中执行同一指令,所以当同一个warp中的不同线程需要执行不同的指令时,需要使用串行而非并行的方式。 +在一个~warp~中的每一个线程在每一个循环中执行同一指令,所以当同一个~warp~中的不同线程需要执行不同的指令时,需要使用串行而非并行的方式。 -由于实现高效GPU代码的困难性,研究人员应该组织好他们的工作流程,避免对每一个新的模型或算法都编写新的GPU代码。 +由于实现高效~GPU~代码的困难性,研究人员应该组织好他们的工作流程,避免对每一个新的模型或算法都编写新的~GPU~代码。 通常来讲,人们会选择建立一个包含高效操作(如卷积和矩阵乘法)的软件库解决这个问题,然后再从库中调用所需要的操作确定模型。 例如,机器学习库Pylearn2 {cite?}将其所有的机器学习算法都通过调用Theano~{cite?}和cuda-convnet~{cite?} 所提供的高性能操作来指定。 这种分解方法还可以简化对多种硬件的支持。 -例如,同一个Theano程序可以在CPU或者GPU上运行,而不需要改变调用Theano的方式。 -其他库如Tensorflow{cite?}和Torch{cite?}也提供了类似的功能。 +例如,同一个Theano程序可以在CPU或者~GPU~上运行,而不需要改变调用Theano的方式。 +其他库如Tensorflow~{cite?}和Torch~{cite?}也提供了类似的功能。 @@ -146,7 +146,7 @@ GPU另一个常见的设定是使一个组中的所有线程都同时执行同 在训练过程中,数据并行某种程度上来说更加困难 -对于随机梯度下降的单步来说,我们可以增加minibatch的大小,但是从优化性能的角度来说,我们得到的回报通常并不会线性增长。 +对于随机梯度下降的单步来说,我们可以增加小批量的大小,但是从优化性能的角度来说,我们得到的回报通常并不会线性增长。 使用多个机器并行地计算多个梯度下降步骤是一个更好的选择。 不幸的是,梯度下降的标准定义完全是一个串行的过程: 第$t$步的梯度是第$t-1$步所得参数的函数。 @@ -184,7 +184,7 @@ GPU另一个常见的设定是使一个组中的所有线程都同时执行同 当原始模型的规模很大,且我们需要防止过拟合时,模型压缩就可以起到作用。 在许多情况下,拥有最小泛化误差的模型往往是多个独立训练而成的模型的集成。 评估所有$n$个集成成员的成本很高。 -有时候,当单个模型很大(例如,如果它使用Dropout正则化)时,其泛化能力也会很好。 +有时候,当单个模型很大(例如,如果它使用~Dropout~正则化)时,其泛化能力也会很好。 这些巨大的模型能够学习到某个函数$f(\Vx)$,但选用的参数数量超过了任务所需的参数数量。 @@ -231,7 +231,7 @@ GPU另一个常见的设定是使一个组中的所有线程都同时执行同 {Viola01}使用级联的增强决策树实现了适合在手持数字相机中使用的快速并且鲁棒的面部检测器。 本质上,它们的分类器使用滑动窗口方法来定位面部。 分类器会检查许多的窗口,如果这些窗口内不包含面部则被拒绝。 -级联的另一个版本使用早期模型来实现一种硬注意机制:级联的先遣成员定位对象,并且级联的后续成员在给定对象位置的情况下执行进一步处理。 +级联的另一个版本使用早期模型来实现一种硬注意力机制:级联的先遣成员定位对象,并且级联的后续成员在给定对象位置的情况下执行进一步处理。 例如,Google使用两步级联从街景视图图像中转换地址编号:首先使用一个机器学习模型查找地址编号,然后使用另一个机器学习模型将其转录{cite?}。 @@ -244,28 +244,28 @@ GPU另一个常见的设定是使一个组中的所有线程都同时执行同 类似的,我们可以使用称为选通器的神经网络来选择在给定当前输入的情况下将使用几个专家网络中的哪一个来计算输出。 这个想法的第一个版本被称为专家混合体{cite?},其中选通器为每个专家输出一个概率或权重(通过非线性的softmax函数获得),并且最终输出由各个专家输出的加权组合获得。 在这种情况下,使用选通器不会降低计算成本,但如果每个样本的选通器选择单个专家,我们就会获得一个特殊的硬专家混合体~{cite?},这可以加速推断和训练。 -当选通器决策的数量很小的时候,这个策略效果会很好,因为它不是组合的。 +当选通器决策的数量很小时,这个策略效果会很好,因为它不是组合的。 但是当我们想要选择不同的单元或参数子集时,不可能使用"软开关",因为它需要枚举(和计算输出)所有的选通器配置。 为了解决这个问题,许多工作探索了几种方法来训练组合的选通器。 -{bengio-arxiv13-condcomp}提出使用选通器概率梯度的若干估计器,而{Bacon-et-al-RLDM2015,BengioE-et-al-arXiv2015}使用强化学习技术(策略梯度)来学习一种条件的Dropout形式(作用于隐藏单元块),减少了实际的计算成本,而不会对近似的质量产生负面影响。 +{bengio-arxiv13-condcomp}提出使用选通器概率梯度的若干估计器,而~{Bacon-et-al-RLDM2015,BengioE-et-al-arXiv2015}使用强化学习技术(策略梯度)来学习一种条件的~Dropout~形式(作用于隐藏单元块),减少了实际的计算成本,而不会对近似的质量产生负面影响。 另一种动态结构是开关,其中隐藏单元可以根据具体情况从不同单元接收输入。 -这种动态路由方法可以理解为注意机制 {cite?}。 +这种动态路由方法可以理解为注意力机制 {cite?}。 目前为止,硬性开关的使用在大规模应用中还没有被证明是有效的。 较为先进的方法一般采用对许多可能的输入使用加权平均,因此不能完全得到动态结构所带来的计算益处。 -先进的注意机制将在\sec?中描述。 +先进的注意力机制将在\sec?中描述。 使用动态结构化系统的主要障碍是由于系统针对不同输入的不同代码分支导致的并行度降低。 -这意味着网络中只有很少的操作可以被描述为对样本minibatch的矩阵乘法或批量卷积。 +这意味着网络中只有很少的操作可以被描述为对样本小批量的矩阵乘法或批量卷积。 我们可以写更多的专用子程序,用不同的核对样本做卷积,或者通过不同的权重列来乘以设计矩阵的每一行。 不幸的是,这些专用的子程序难以高效地实现。 由于缺乏高速缓存的一致性,CPU实现会十分缓慢。 -此外,由于缺乏级联的内存操作以及warp成员使用不同分支时需要串行化操作,GPU的实现也会很慢。 +此外,由于缺乏级联的内存操作以及~warp~成员使用不同分支时需要串行化操作,GPU~的实现也会很慢。 在一些情况下,我们可以通过将样本分成组,并且都采用相同的分支并且同时处理这些样本组的方式来缓解这些问题。 在离线环境中,这是最小化处理固定量样本所需时间的一项可接受的策略。 然而在实时系统中,样本必须连续处理,对工作负载进行分区可能会导致负载均衡问题。 @@ -290,9 +290,9 @@ GPU另一个常见的设定是使一个组中的所有线程都同时执行同 -虽然CPU和GPU上的软件实现通常使用32或64位的精度来表示浮点数,但是长期以来使用较低的精度在更短的时间内完成推断也是可行的{cite?}。 -这已成为近年来更迫切的问题,因为深度学习在工业产品中越来越受欢迎,并且由于更快的硬件产生的巨大影响已经通过GPU的使用得到了证明。 -激励当前对深度网络专用硬件研究的另一个因素是单个CPU或GPU核心的进展速度已经减慢,并且最近计算速度的改进来自于核心的并行化(无论CPU还是GPU)。 +虽然CPU和~GPU~上的软件实现通常使用32或64位的精度来表示浮点数,但是长期以来使用较低的精度在更短的时间内完成推断也是可行的{cite?}。 +这已成为近年来更迫切的问题,因为深度学习在工业产品中越来越受欢迎,并且由于更快的硬件产生的巨大影响已经通过~GPU~的使用得到了证明。 +激励当前对深度网络专用硬件研究的另一个因素是单个CPU或~GPU~核心的进展速度已经减慢,并且最近计算速度的改进来自于核心的并行化(无论CPU还是~GPU)。 这与20世纪90年代的情况(上一个神经网络时代)的不同之处在于,神经网络的硬件实现(从开始到芯片可用可能需要两年)跟不上快速进展和价格低廉的通用CPU的脚步。 因此,在针对诸如手机等低功率设备开发新的硬件设计,并且想要用于深度学习的一般公众应用(例如,具有语音、计算机视觉或自然语言功能的设施)等时,研究专用硬件能够进一步推动其发展。 @@ -393,25 +393,25 @@ GPU另一个常见的设定是使一个组中的所有线程都同时执行同 从大图像中剪切感兴趣的对象所组成的数据集不可能包含任何强度几乎恒定的图像。 在这些情况下,通过设置$\lambda = 0$来忽略小分母问题是安全的,并且在非常罕见的情况下为了避免除以$0$,通过将$\epsilon$设置为一个非常小的值比如说$10^{-8}$。 -这也是{Goodfellow+al-arxiv-2013}在CIFAR-10数据集上所使用的方法。 +这也是~{Goodfellow+al-arxiv-2013}在CIFAR-10数据集上所使用的方法。 随机剪裁的小图像更可能具有几乎恒定的强度,使得激进的正则化更有用。 在处理从CIFAR-10数据中随机选择的小区域时,{Coates2011}使用$\epsilon = 0, \lambda = 10$。 -尺度参数$s$通常可以设置为$1$(如{Coates2011}所采用的),或选择使所有样本上每个像素的标准差接近$1$(如{Goodfellow+al-arxiv-2013}所采用的)。 +尺度参数$s$通常可以设置为$1$(如~{Coates2011}所采用的),或选择使所有样本上每个像素的标准差接近$1$(如{Goodfellow+al-arxiv-2013}所采用的)。 -公式~\eq?中的标准差仅仅是对图片$L^2$范数的重新缩放(假设图像的平均值已经被移除)。 -我们更偏向于根据标准差而不是$L^2$范数来定义GCN,因为标准差包括除以像素数量这一步,从而基于标准差的GCN能够使用与图像大小无关的固定的$s$。 +\eqn?中的标准差仅仅是对图片$L^2$范数的重新缩放(假设图像的平均值已经被移除)。 +我们更偏向于根据标准差而不是$L^2$范数来定义~GCN,因为标准差包括除以像素数量这一步,从而基于标准差的~GCN~能够使用与图像大小无关的固定的$s$。 然而,观察到$L^2$范数与标准差成比例,这符合我们的直觉。 -我们可以把GCN理解成到球壳的一种映射。 +我们可以把~GCN~理解成到球壳的一种映射。 \fig?对此有所说明。 这可能是一个有用的属性,因为神经网络往往更好地响应空间方向,而不是精确的位置。 响应相同方向上的多个距离需要具有共线权重向量但具有不同偏置的隐藏单元。 这样的情况对于学习算法来说可能是困难的。 此外,许多浅层的图模型把多个分离的模式表示在一条线上会出现问题。 -GCN采用一个样本一个方向\footnote{译者:所有样本相似的距离}而不是不同的方向和距离来避免这些问题。 +GCN~采用一个样本一个方向\footnote{译者:所有样本相似的距离}而不是不同的方向和距离来避免这些问题。 \begin{figure}[!htb] @@ -420,21 +420,21 @@ GCN采用一个样本一个方向\footnote{译者:所有样本相似的距离} \else \centerline{\includegraphics{Chapter12/figures/gcn_sphere_color}} \fi - \caption{GCN将样本投影到一个球上。 -(左)原始的输入数据可能拥有任意的范数。 -(中)$\lambda=0$时候的GCN可以完美地将所有的非零样本投影到球上。 + \caption{GCN~将样本投影到一个球上。 +\emph{(左)}原始的输入数据可能拥有任意的范数。 +\emph{(中)}$\lambda=0$时候的~GCN~可以完美地将所有的非零样本投影到球上。 这里我们令$s=1$,$\epsilon = 10^{-8}$。 -由于我们使用的GCN是基于归一化标准差而不是$L^2$范数,所得到的球并不是单位球。 -(右)$\lambda>0$的正则化GCN将样本投影到球上,但是并没有完全地丢弃其范数中变化。 +由于我们使用的~GCN~是基于归一化标准差而不是$L^2$范数,所得到的球并不是单位球。 +\emph{(右)}$\lambda>0$的正则化~GCN~将样本投影到球上,但是并没有完全地丢弃其范数中变化。 $s$和$\epsilon$的取值与之前一样。} \end{figure} -与直觉相反的是,存在被称为sphering的预处理操作,并且它不同于GCN。 -sphering并不会使数据位于球形壳上,而是将主成分重新缩放以具有相等方差,使得PCA使用的多变量正态分布具有球形等高线。 -sphering通常被称为白化。 +与直觉相反的是,存在被称为sphering的预处理操作,并且它不同于~GCN。 +sphering~并不会使数据位于球形壳上,而是将主成分重新缩放以具有相等方差,使得~PCA~使用的多变量正态分布具有球形等高线。 +sphering~通常被称为白化。 @@ -475,7 +475,7 @@ sphering通常被称为白化。 在彩色图像的情况下,一些策略单独处理不同的颜色通道,而其他策略组合来自不同通道的信息以使每个像素归一化{cite?}。 -局部对比度归一化通常可以通过使用可分离卷积(参见\sec?)来计算特征映射的局部平均值和局部标准差,然后在不同的特征映射上使用逐元素的减法和除法。 +局部对比度归一化通常可以通过使用可分离卷积(参考\sec?)来计算特征映射的局部平均值和局部标准差,然后在不同的特征映射上使用逐元素的减法和除法。 局部对比度归一化是可微分的操作,并且还可以作为一种非线性作用应用于网络隐藏层,以及应用于输入的预处理操作。 @@ -518,30 +518,30 @@ f^*_{\text{ASR}}(\MX) = \underset{\Vy}{\arg\max} P^*(\RVy \mid \RMX = \MX), 从20世纪80年代直到约2009-2012年,最先进的语音识别系统是隐马尔可夫模型和高斯混合模型的结合。 -GMM对声学特征和音素之间的关系建模{cite?},HMM对音素序列建模。 -GMM-HMM模型将语音信号视作由如下过程生成:首先,一个HMM生成了一个音素的序列以及离散的子音素状态(比如每一个音素的开始,中间,结尾),然后GMM把每一个离散的状态转化为一个简短的声音信号。 -尽管直到最近GMM-HMM一直在ASR中占据主导地位,语音识别仍然是神经网络所成功应用的第一个领域。 -从20世纪80年代末期到90年代初期,大量语音识别系统使用了神经网络{cite?}。 -当时,基于神经网络的ASR的表现和GMM-HMM系统的表现差不多。 +GMM~对声学特征和音素之间的关系建模{cite?},HMM~对音素序列建模。 +GMM-HMM~模型将语音信号视作由如下过程生成:首先,一个~HMM~生成了一个音素的序列以及离散的子音素状态(比如每一个音素的开始,中间,结尾),然后~GMM~把每一个离散的状态转化为一个简短的声音信号。 +尽管直到最近~GMM-HMM~一直在~ASR~中占据主导地位,语音识别仍然是神经网络所成功应用的第一个领域。 +从20世纪80年代末期到90年代初期,大量语音识别系统使用了神经网络~{cite?}。 +当时,基于神经网络的~ASR~的表现和~GMM-HMM~系统的表现差不多。 比如说,{Robinson+Fallside91}在TIMIT数据集{cite?}(有$39$个区分的音素% ?? error -)上达到了$26$\%的音素错误率,这个结果优于或者说是可以与基于HMM的结果相比。 +)上达到了$26$\%的音素错误率,这个结果优于或者说是可以与基于~HMM~的结果相比。 从那时起,TIMIT成为了音素识别的一个基准数据集,在语音识别中的作用就和MNIST在对象识别中的作用差不多。 -然而,由于语音识别软件系统中复杂的工程因素以及在基于GMM-HMM的系统中已经付出的巨大努力,工业界并没有迫切转向神经网络的需求。 -结果,直到21世纪00年代末期,学术界和工业界的研究者们更多的是用神经网络为GMM-HMM系统学习一些额外的特征。 +然而,由于语音识别软件系统中复杂的工程因素以及在基于~GMM-HMM~的系统中已经付出的巨大努力,工业界并没有迫切转向神经网络的需求。 +结果,直到21世纪00年代末期,学术界和工业界的研究者们更多的是用神经网络为~GMM-HMM~系统学习一些额外的特征。 -之后,随着\emph{更大更深}的模型以及更大的数据集的出现,通过使用神经网络代替GMM来实现将声学特征转化为音素(或者子音素状态)的过程可以大大地提高识别的精度。 +之后,随着\emph{更大更深}的模型以及更大的数据集的出现,通过使用神经网络代替~GMM~来实现将声学特征转化为音素(或者子音素状态)的过程可以大大地提高识别的精度。 从2009年开始,语音识别的研究者们将一种无监督学习的深度学习方法应用于语音识别。 这种深度学习方法基于训练一个被称作是受限玻尔兹曼机的无向概率模型,从而对输入数据建模。 受限玻尔兹曼机将会在第三部分中描述。 为了完成语音识别任务,无监督的预训练被用来构造一个深度前馈网络,这个神经网络每一层都是通过训练受限玻尔兹曼机来初始化的。 - 这些网络的输入是从一个固定规格的输入窗(以当前帧为中心)的谱声学表示抽取,预测了当前帧所对应的HMM状态的条件概率。 + 这些网络的输入是从一个固定规格的输入窗(以当前帧为中心)的谱声学表示抽取,预测了当前帧所对应的~HMM~状态的条件概率。 训练一个这样的神经网络能够可以显著提高在TIMIT数据集上的识别率~{cite?},并将音素级别的错误率从大约$26$\%降到了$20.7$\%。 关于这个模型成功原因的详细分析可以参考{mohamed2012understanding}。 对于基本的电话识别工作流程的一个扩展工作是添加说话人自适应相关特征{cite?}的方法,这可以进一步地降低错误率。 紧接着的工作则将结构从音素识别(TIMIT所主要关注的)转向了大规模词汇语音识别{cite?},这不仅包含了识别音素,还包括了识别大规模词汇的序列。 -语音识别上的深度网络从最初的使用受限玻尔兹曼机进行预训练发展到了使用诸如整流线性单元和Dropout这样的技术~{cite?}。 +语音识别上的深度网络从最初的使用受限玻尔兹曼机进行预训练发展到了使用诸如整流线性单元和~Dropout~这样的技术~{cite?}。 从那时开始,工业界的几个语音研究组开始寻求与学术圈的研究者之间的合作。 {Hinton-et-al-2012}描述了这些合作所带来的突破性进展,这些技术现在被广泛应用在产品中,比如移动手机端。 @@ -551,9 +551,9 @@ GMM-HMM模型将语音信号视作由如下过程生成:首先,一个HMM生 用语音识别中词错误率来衡量,在语音识别性能上的这些突破是史无前例的(大约$30$\%的提高)。 -在这之前的长达十年左右的时间内,尽管数据集的规模是随时间增长的(见{Deng+Yu-2014}的图2.4),但基于GMM-HMM的系统的传统技术已经停滞不前了。 +在这之前的长达十年左右的时间内,尽管数据集的规模是随时间增长的(见~{Deng+Yu-2014}的图2.4),但基于~GMM-HMM~的系统的传统技术已经停滞不前了。 这也导致了语音识别领域快速地转向深度学习的研究。 -在大约的两年时间内,工业界的大多数的语音识别产品都包含了深度神经网络,这种成功也激发了ASR领域对深度学习算法和结构的一波新的研究浪潮,并且影响至今。 +在大约的两年时间内,工业界的大多数的语音识别产品都包含了深度神经网络,这种成功也激发了~ASR领~域对深度学习算法和结构的一波新的研究浪潮,并且影响至今。 其中的一个创新点是卷积网络的应用~{cite?}。 @@ -561,11 +561,11 @@ GMM-HMM模型将语音信号视作由如下过程生成:首先,一个HMM生 这种新的二维的卷积模型并不是将输入的频谱当作一个长的向量,而是当成是一个图像,其中一个轴对应着时间,另一个轴对应的是谱分量的频率。 -完全抛弃HMM并转向研究端到端的深度学习语音识别系统是至今仍然活跃的另一个重要推动。 -这个领域第一个主要的突破是{Graves-et-al-ICASSP2013},其中训练了一个深度的长短期记忆循环神经网络(见\sec?),使用了帧-音素排列的MAP推断,就像{chapter-gradient-document-2001}以及CTC框架~{cite?}中一样。 +完全抛弃~HMM~并转向研究端到端的深度学习语音识别系统是至今仍然活跃的另一个重要推动。 +这个领域第一个主要的突破是~{Graves-et-al-ICASSP2013},其中训练了一个深度的长短期记忆循环神经网络(见\sec?),使用了帧-音素排列的~MAP~推断,就像~{chapter-gradient-document-2001}以及CTC框架~{cite?}中一样。 一个深度循环神经网络~{cite?}每个时间步的各层都有状态变量,两种展开图的方式导致两种不同深度:一种是普通的根据层的堆叠衡量的深度,另一种根据时间展开衡量的深度。 这个工作把TIMIT数据集上音素的错误率记录降到了的新低$17.7$\%。 -关于应用于其他领域的深度循环神经网络的变种可以参考{Pascanu-et-al-ICLR2014,Chung-et-al-NIPSDL2014-small}。 +关于应用于其他领域的深度循环神经网络的变种可以参考~{Pascanu-et-al-ICLR2014,Chung-et-al-NIPSDL2014-small}。 另一个端到端的深度学习语音识别方向的最新方法是让系统学习如何利用语音层级的信息"排列"声学层级的信息~{cite?}。 @@ -580,7 +580,7 @@ GMM-HMM模型将语音信号视作由如下过程生成:首先,一个HMM生 为了让简单的程序能够高效明确地解析,计算机程序通常读取和发出特殊化的语言。 而自然的语言通常是模糊的,并且可能不遵循形式的描述。 自然语言处理中的应用如机器翻译,学习者需要读取一种人类语言的句子,并用另一种人类语言发出等同的句子。 -许多NLP应用程序基于语言模型,语言模型定义了关于自然语言中的字、字符或字节序列的概率分布。 +许多~NLP~应用程序基于语言模型,语言模型定义了关于自然语言中的字、字符或字节序列的概率分布。 @@ -598,11 +598,11 @@ GMM-HMM模型将语音信号视作由如下过程生成:首先,一个HMM生 语言模型定义了自然语言中标记序列的概率分布。 根据模型的设计,标记可以是词、字符、甚至是字节。 标记总是离散的实体。 -最早成功的语言模型基于固定长度序列的标记模型,称为$n$-gram。 -一个$n$-gram是一个包含$n$个标记的序列。 +最早成功的语言模型基于固定长度序列的标记模型,称为~$n$-gram。 +一个~$n$-gram~是一个包含$n$个标记的序列。 -基于$n$-gram的模型定义一个条件概率——给定前$n-1$个标记后的第$n$个标记的条件概率。 +基于~$n$-gram~的模型定义一个条件概率——给定前$n-1$个标记后的第$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} ). @@ -610,15 +610,15 @@ P(x_1, \dots, x_\tau) = P(x_1, \dots, x_{n-1}) \prod_{t=n}^\tau P(x_t \mid x_{t- 这个分解可以由概率的链式法则证明。 初始序列 $P(x_1, \dots, x_{n-1})$的概率分布可以通过带有较小$n$值的不同模型建模。 -训练$n$-gram模型是简单的,因为最大似然估计可以通过简单地统计每个可能的$n$-gram在训练集中出现的次数来获得。 -几十年来,基于$n$-gram的模型都是统计语言模型的核心模块~{cite?}。 +训练~$n$-gram~模型是简单的,因为最大似然估计可以通过简单地统计每个可能的~$n$-gram~在训练集中出现的次数来获得。 +几十年来,基于~$n$-gram~的模型都是统计语言模型的核心模块~{cite?}。 对于小的$n$值,模型有特定的名称:$n=1$称为一元语法,$n=2$称为二元语法及$n=3$称为三元语法。 这些名称源于相应数字的拉丁前缀和希腊后缀"-gram",分别表示所写之物。 -通常我们同时训练$n$-gram模型和$n-1$ gram模型。 +通常我们同时训练~$n$-gram~模型和$n-1$ gram模型。 这使得下式可以简单地通过查找两个存储的概率来计算。 \begin{align} P(x_t \mid x_{t-n+1}, \dots, x_{t-1}) = \frac{P_n(x_{t-n+1}, \dots, x_t)} { P_{n-1}( x_{t-n+1}, \dots, x_{t-1}) } @@ -630,37 +630,37 @@ P(x_t \mid x_{t-n+1}, \dots, x_{t-1}) = \frac{P_n(x_{t-n+1}, \dots, x_t)} { P_{n 取而代之,在句子的开头我们必须使用词的边缘概率。 因此我们计算$P_3({\tt THE\ DOG\ RAN})$。 最后,可以使用条件分布$P({\tt AWAY} \mid {\tt DOG\ RAN})$(典型情况)来预测最后一个词。 -将这与式\eq?放在一起,我们得到: +将这与\eqn?放在一起,我们得到: \begin{align} P({\tt THE\ DOG\ RAN\ AWAY}) = P_3({\tt THE\ DOG\ RAN}) P_3({\tt DOG\ RAN\ AWAY}) / P_2({\tt DOG\ RAN}). \end{align} -$n$-gram模型最大似然的基本限制是,在许多情况下从训练集计数估计得到的$P_n$很可能为零(即使元组$(x_{t-n+1}, \dots, x_{t})$可能出现在测试集中)。 +$n$-gram~模型最大似然的基本限制是,在许多情况下从训练集计数估计得到的$P_n$很可能为零(即使元组$(x_{t-n+1}, \dots, x_{t})$可能出现在测试集中)。 这可能会导致两种不同的灾难性后果。 当$P_{n-1}$为零时,该比率是未定义的,因此模型甚至不能产生有意义的输出。 当$P_{n-1}$非零而$P_n$为零时,测试样本的对数似然为 $-\infty$。 -为避免这种灾难性的后果,大多数$n$-gram模型采用某种形式的平滑。 +为避免这种灾难性的后果,大多数~$n$-gram~模型采用某种形式的平滑。 平滑技术将概率质量从观察到的元组转移到类似的未观察到的元组。 -见{Chen+Goodman99}的综述和实验对比。 +见~{Chen+Goodman99}的综述和实验对比。 其中一种基本技术基于向所有可能的下一个符号值添加非零概率质量。 -这个方法可以被证明是,计数参数具有均匀或Dirichlet先验的贝叶斯推断。 -另一个非常流行的想法是包含高阶和低阶$n$-gram模型的混合模型,其中高阶模型提供更多的容量,而低阶模型尽可能地避免零计数。 -如果上下文$x_{t-n+k}, \ldots, x_{t-1}$的频率太小而不能使用高阶模型,\textbf{回退方法}(back-off methods)就查找低阶$n$-gram 。 +这个方法可以被证明是,计数参数具有均匀或~Dirichlet~先验的贝叶斯推断。 +另一个非常流行的想法是包含高阶和低阶~$n$-gram~模型的混合模型,其中高阶模型提供更多的容量,而低阶模型尽可能地避免零计数。 +如果上下文$x_{t-n+k}, \ldots, x_{t-1}$的频率太小而不能使用高阶模型,\textbf{回退方法}(back-off methods)就查找低阶~$n$-gram 。 更正式地说,它们通过上下文$x_{t-n+k}, \ldots, x_{t-1}$估计$x_t$上的分布,并增加$k$直到找到足够可靠的估计。 -经典的$n$-gram模型特别容易引起维数灾难。 -因为存在$|\SetV|^n$可能的$n$-gram,而且 $|\SetV|$ 通常很大。 -即使有大量训练数据和适当的$n$,大多数$n$-gram也不会出现在训练集中。 -经典$n$-gram模型的一种观点是执行最近邻查询。 +经典的~$n$-gram~模型特别容易引起维数灾难。 +因为存在$|\SetV|^n$可能的~$n$-gram,而且 $|\SetV|$ 通常很大。 +即使有大量训练数据和适当的$n$,大多数~$n$-gram~也不会出现在训练集中。 +经典~$n$-gram~模型的一种观点是执行最近邻查询。 换句话说,它可以被视为局部非参数预测器,类似于$k$-最近邻。 这些极端局部预测器面临的统计问题已经在\sec?中描述过。 语言模型的问题甚至比普通模型更严重,因为任何两个不同的词在one-hot向量空间中的距离彼此相同。 因此,难以大量利用来自任意"邻居"的信息 —— 只有重复相同上下文的训练样本对局部泛化有用。 为了克服这些问题,语言模型必须能够在一个词和其他语义相似的词之间共享知识。 -为了提高$n$-gram模型的统计效率,\textbf{基于类的语言模型}(class-based language model)~{cite?}引入词类别的概念,然后属于同一类别的词共享词之间的统计强度。 +为了提高~$n$-gram~模型的统计效率,\textbf{基于类的语言模型}(class-based language model)~{cite?}引入词类别的概念,然后属于同一类别的词共享词之间的统计强度。 这个想法使用了聚类算法,基于它们与其他词同时出现的频率,将该组词分成集群或类。 随后,模型可以在条件竖杠的右侧使用词类ID而不是单个词ID。 混合(或回退)词模型和类模型的复合模型也是可能的。 @@ -671,7 +671,7 @@ $n$-gram模型最大似然的基本限制是,在许多情况下从训练集计 神经语言模型是一类用来克服维数灾难的语言模型,它使用词的分布式表示对自然语言序列建模~{cite?}。 -不同于基于类的$n$-gram模型,神经语言模型在能够识别两个相似的词,并且不丧失将每个词编码为彼此不同的能力。 +不同于基于类的~$n$-gram~模型,神经语言模型在能够识别两个相似的词,并且不丧失将每个词编码为彼此不同的能力。 神经语言模型共享一个词(及其上下文)和其他类似词(和上下文之间)的统计强度。 模型为每个词学习的分布式表示,允许模型处理具有类似共同特征的词来实现这种共享。 例如,如果词{\tt dog}和词{\tt cat}映射到具有许多属性的表示,则包含词{\tt cat}的句子可以告知模型对包含词{\tt dog}的句子做出预测,反之亦然。 @@ -706,7 +706,7 @@ $n$-gram模型最大似然的基本限制是,在许多情况下从训练集计 其他领域的神经网络也可以定义嵌入。 例如,卷积网络的隐藏层提供"图像嵌入"。 -因为自然语言最初不在实值向量空间上,所以NLP从业者通常对嵌入的这个想法更感兴趣。 +因为自然语言最初不在实值向量空间上,所以~NLP~从业者通常对嵌入的这个想法更感兴趣。 隐藏层在表示数据的方式上提供了更质变的戏剧性变化。 @@ -721,16 +721,16 @@ $n$-gram模型最大似然的基本限制是,在许多情况下从训练集计 在许多自然语言应用中,我们通常希望我们的模型产生词(而不是字符)作为输出的基本单位。 对于大词汇表,由于词汇量很大,在词的选择上表示输出分布的计算成本可能非常高。 在许多应用中,$\SetV$包含数十万词。 -表示这种分布的朴素方法是应用一个仿射变换,将隐藏表示转换到输出空间,然后应用softmax函数。 +表示这种分布的朴素方法是应用一个仿射变换,将隐藏表示转换到输出空间,然后应用~softmax~函数。 假设我们的词汇表$\SetV$大小为$| \SetV |$。 因为其输出维数为$| \SetV |$,描述该仿射变换线性分量的权重矩阵非常大。 这造成了表示该矩阵的高存储成本,以及与之相乘的高计算成本。 -因为softmax要在所有$| \SetV |$输出之间归一化,所以在训练时以及测试时执行全矩阵乘法是必要的 ——我们不能仅计算与正确输出的权重向量的点积。 +因为~softmax~要在所有$| \SetV |$输出之间归一化,所以在训练时以及测试时执行全矩阵乘法是必要的 ——我们不能仅计算与正确输出的权重向量的点积。 因此,输出层的高计算成本在训练期间(计算似然性及其梯度)和测试期间(计算所有或所选词的概率)都有出现。 -对于专门的损失函数,可以有效地计算梯度 {cite?},但是应用于传统softmax输出层的标准交叉熵损失时会出现许多困难。 +对于专门的损失函数,可以有效地计算梯度 {cite?},但是应用于传统~softmax~输出层的标准交叉熵损失时会出现许多困难。 假设$\Vh$是用于预测输出概率$\hat \Vy$的顶部隐藏层。 -如果我们使用学到的权重$\MW$和学到的偏置 $\Vb$参数化从$\Vh$到$\hat \Vy$的变换,则仿射softmax输出层执行以下计算: +如果我们使用学到的权重$\MW$和学到的偏置 $\Vb$参数化从$\Vh$到$\hat \Vy$的变换,则仿射~softmax~输出层执行以下计算: \begin{align} a_i &= b_i + \sum_j W_{ij} h_j \;\;\; \forall i \in \{1,\ldots,|\SetV|\}, \\ \hat{y}_i &= \frac{e^{a_i}}{\sum_{i'=1}^{|\SetV|} e^{a_{i'}}}. @@ -741,17 +741,17 @@ $n$-gram模型最大似然的基本限制是,在许多情况下从训练集计 \subsubsection{使用短列表} -第一个神经语言模型{cite?}通过将词汇量限制为10,000或20,000来减轻大词汇表上softmax的高成本。 +第一个神经语言模型~{cite?}通过将词汇量限制为10,000或20,000来减轻大词汇表上~softmax~的高成本。 {Schwenk+Gauvain2002}和 {Schwenk-2007}在这种方法的基础上建立新的方式,将词汇表$\SetV$分为最常见词汇(由神经网络处理)的短列表~$\SetL$和较稀有词汇的尾列表$\SetT = \SetV \backslash \SetL$(由$n$-gram模型处理)。 为了组合这两个预测,神经网络还必须预测在上下文$C$之后出现的词位于尾列表的概率。 -我们可以添加额外的sigmoid输出单元估计 $P(i \in \SetT \mid C)$实现这个预测。 +我们可以添加额外的~sigmoid~输出单元估计 $P(i \in \SetT \mid C)$实现这个预测。 额外输出则可以用来估计$\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), \end{align} -其中$P(y=i\mid C, i \in \SetL)$由神经语言模型提供$P(y=i\mid C, i \in \SetT)$由$n$-gram模型提供。 -稍作修改,这种方法也可以在神经语言模型模型的softmax层中使用额外的输出值,而不是单独的sigmoid单元。 +其中$P(y=i\mid C, i \in \SetL)$由神经语言模型提供$P(y=i\mid C, i \in \SetT)$由~$n$-gram~模型提供。 +稍作修改,这种方法也可以在神经语言模型模型的~softmax~层中使用额外的输出值,而不是单独的~sigmoid~单元。 短列表方法的一个明显缺点是,神经语言模型的潜在泛化优势仅限于最常用的词,这大概是最没用的。 这个缺点引发了处理高维输出替代方法的探索,如下所述。 @@ -759,7 +759,7 @@ $n$-gram模型最大似然的基本限制是,在许多情况下从训练集计 \subsubsection{分层Softmax} 减少大词汇表$\SetV$上高维输出层计算负担的经典方法~{cite?}是分层地分解概率。 $|\SetV|$因子可以降低到$\log |\SetV|$一样低,而无需执行与$|\SetV|$成比例数量(并且也与隐藏单元数量$n_h$成比例)的计算。 -{BengioTR1215}和{Morin+Bengio-2005-small} 将这种因子分解方法引入神经语言模型中。 +{BengioTR1215}和~{Morin+Bengio-2005-small} 将这种因子分解方法引入神经语言模型中。 @@ -826,13 +826,13 @@ $|\SetV|$因子可以降低到$\log |\SetV|$一样低,而无需执行与$|\Set 对数似然的精确优化似乎难以解决,因为词层次的选择是离散的,不适于基于梯度的优化。 然而,我们可以使用离散优化来近似地最优化词类的分割。 -分层softmax的一个重要优点是,它在训练期间和测试期间(如果在测试时我们想计算特定词的概率)都带来了计算上的好处。 +分层~softmax~的一个重要优点是,它在训练期间和测试期间(如果在测试时我们想计算特定词的概率)都带来了计算上的好处。 -当然即使使用分层softmax,计算所有$|\SetV|$个词概率的成本仍是很高的。 +当然即使使用分层~softmax,计算所有$|\SetV|$个词概率的成本仍是很高的。 另一个重要的操作是在给定上下文中选择最可能的词。 不幸的是,树结构不能为这个问题提供高效精确的解决方案。 -缺点是在实践中,分层softmax倾向于更差的测试结果(相对基于采样的方法),我们将在下文描述。 +缺点是在实践中,分层~softmax~倾向于更差的测试结果(相对基于采样的方法),我们将在下文描述。 这可能是因为词类选择得不好。 \subsubsection{重要采样} @@ -840,14 +840,14 @@ $|\SetV|$因子可以降低到$\log |\SetV|$一样低,而无需执行与$|\Set 每个不正确的词在此模型下具有低概率。 枚举所有这些词的计算成本可能会很高。 相反,我们可以仅采样词的子集。 -使用式\eq?中引入的符号,梯度可以写成如下形式: +使用\eqn?中引入的符号,梯度可以写成如下形式: \begin{align} \frac{\partial \log P(y \mid C)}{\partial \theta} &= \frac{\partial \log {\rm softmax}_y(\Va)}{\partial \theta} \\ &= \frac{\partial}{\partial \theta} \log \frac{e^{a_y}}{\sum_i e^{a_i}} \\ &= \frac{\partial}{\partial \theta} (a_y - \log \sum_i e^{a_i}) \\ &= \frac{\partial a_y}{\partial \theta} - \sum_i P(y = i \mid C) \frac{\partial a_i}{\partial \theta}, \end{align} -其中$\Va$是presoftmax激活(或得分)向量,每个词对应一个元素。 +其中$\Va$是~presoftmax~激活(或得分)向量,每个词对应一个元素。 第一项是\textbf{正相}(positive phase)项,推动$a_y$向上;而第二项是\textbf{负相}(negative phase)项,对于所有$i$以权重$P(i \mid C)$推动$a_i$向下。 由于负相项是期望值,我们可以通过蒙特卡罗采样估计。 然而,这将需要从模型本身采样。 @@ -869,7 +869,7 @@ $|\SetV|$因子可以降低到$\log |\SetV|$一样低,而无需执行与$|\Set 从数据估计这种分布的参数是很容易。 在估计参数之后,也可以非常高效地从这样的分布采样。 -重要采样不仅可以加速具有较大softmax输出的模型。 +重要采样不仅可以加速具有较大~softmax~输出的模型。 更一般地,它可以加速具有大稀疏输出层的训练,其中输出是稀疏向量而不是$n$选$1$。 其中一个例子是词袋。 词袋具有稀疏向量$\Vv$,其中$v_i$表示词汇表中的词$i$存不存在文档中。 @@ -900,28 +900,28 @@ $|\SetV|$因子可以降低到$\log |\SetV|$一样低,而无需执行与$|\Set 这个准则的一个问题是它不提供估计的条件概率,条件概率在很多应用中是有用的,包括语音识别和文本生成(包括诸如翻译的条件文本生成任务)。 最近用于神经语言模型的训练目标是噪声对比估计,将在\sec?中介绍。 -这种方法已成功应用于神经语言模型{cite?}。 +这种方法已成功应用于神经语言模型~{cite?}。 ## 结合$n$-gram和神经语言模型 -$n$-gram模型相对神经网络的主要优点是$n$-gram模型具有更高的模型容量(通过存储非常多的元组的频率),并且处理样本只需非常少的计算量(通过查找只匹配当前上下文的几个元组)。 -如果我们使用哈希表或树来访问计数,那么用于$n$-gram的计算量几乎与容量无关。 +$n$-gram~模型相对神经网络的主要优点是~$n$-gram~模型具有更高的模型容量(通过存储非常多的元组的频率),并且处理样本只需非常少的计算量(通过查找只匹配当前上下文的几个元组)。 +如果我们使用哈希表或树来访问计数,那么用于~$n$-gram~的计算量几乎与容量无关。 相比之下,将神经网络的参数数目加倍通常也大致加倍计算时间。 当然,避免每次计算时使用所有参数的模型是一个例外。 嵌入层每次只索引单个嵌入,所以我们可以增加词汇量,而不会增加每个样本的计算时间。 一些其他模型,例如平铺卷积网络,可以在减少参数共享程度的同时添加参数以保持相同的计算量。然而,基于矩阵乘法的典型神经网络层需要与参数数量成比例的计算量。 -因此,增加容量的一种简单方法是将两种方法结合,由神经语言模型和$n$-gram语言模型组成集成~{cite?}。 +因此,增加容量的一种简单方法是将两种方法结合,由神经语言模型和~$n$-gram~语言模型组成集成~{cite?}。 对于任何集成,如果集成成员产生独立的错误,这种技术可以减少测试误差。 集成学习领域提供了许多方法来组合集成成员的预测,包括统一加权和在验证集上选择权重。 {Mikolov-Interspeech-2011} 扩展了集成,不是仅包括两个模型,而是包括大量模型。 我们也可以将神经网络与最大熵模型配对并联合训练{cite?}。 该方法可以被视为训练具有一组额外输入的神经网络,额外输入直接连接到输出并且不连接到模型的任何其他部分。 -额外输入是输入上下文中特定$n$-gram是否存在的指示器,因此这些变量是非常高维且非常稀疏的。 +额外输入是输入上下文中特定~$n$-gram~是否存在的指示器,因此这些变量是非常高维且非常稀疏的。 模型容量的增加是巨大的 (架构的新部分包含高达$| sV |^n$个参数 ),但是处理输入所需的额外计算量是很小的(因为额外输入非常稀疏)。 @@ -941,23 +941,23 @@ $n$-gram模型相对神经网络的主要优点是$n$-gram模型具有更高的 最早的机器翻译神经网络探索中已经纳入了编码器和解码器的想法(Allen 1987; Chrisman 1991; Forcada and Ñeco 1997),而翻译中神经网络的第一个大规模有竞争力的用途是通过神经语言模型升级翻译系统的语言模型~{cite?}。 -之前,大多数机器翻译系统在该组件使用$n$-gram模型。 -机器翻译中基于$n$-gram的模型不仅包括传统的回退$n$-gram模型,而且包括\textbf{最大熵语言模型}(maximum entropy language models),其中给定上下文中常见的词,affine-softmax层预测下一个词。 +之前,大多数机器翻译系统在该组件使用~$n$-gram~模型。 +机器翻译中基于~$n$-gram~的模型不仅包括传统的回退~$n$-gram~模型,而且包括\textbf{最大熵语言模型}(maximum entropy language models),其中给定上下文中常见的词,affine-softmax层预测下一个词。 传统语言模型仅仅报告自然语言句子的概率。 因为机器翻译涉及给定输入句子产生输出句子,所以将自然语言模型扩展为条件的是有意义的。 如\sec?所述可以直接地扩展一个模型,该模型定义某些变量的边缘分布,以便在给定上下文$C$($C$可以是单个变量或变量列表)的情况下定义该变量的条件分布。 -{Devlin-et-al-ACL2014}在一些统计机器翻译的基准中击败了最先进的技术,他给定源语言中的短语$\RSs_1, \RSs_2,\ldots, \RSs_k$后使用MLP对目标语言的短语$\RSt_1, \RSt_2,\ldots, \RSt_k$进行评分。 -这个MLP估计$P(\RSt_1, \RSt_2,\ldots, \RSt_k \mid \RSs_1, \RSs_2,\ldots, \RSs_k)$。 -这个MLP的估计替代了条件$n$-gram模型提供的估计。 +{Devlin-et-al-ACL2014}在一些统计机器翻译的基准中击败了最先进的技术,他给定源语言中的短语$\RSs_1, \RSs_2,\ldots, \RSs_k$后使用~MLP~对目标语言的短语$\RSt_1, \RSt_2,\ldots, \RSt_k$进行评分。 +这个~MLP~估计$P(\RSt_1, \RSt_2,\ldots, \RSt_k \mid \RSs_1, \RSs_2,\ldots, \RSs_k)$。 +这个~MLP~的估计替代了条件~$n$-gram~模型提供的估计。 -基于MLP方法的缺点是需要将序列预处理为固定长度。 +基于~MLP~方法的缺点是需要将序列预处理为固定长度。 为了使翻译更加灵活,我们希望模型允许可变的输入长度和输出长度。 -RNN具备这种能力。 -\sec?描述了给定某些输入后,关于序列条件分布RNN的几种构造方法,并且\sec?描述了当输入是序列时如何实现这种条件分布。 -在所有情况下,一个模型首先读取输入序列并产生概括输入序列的数据结构。我们称这个概括为"上下文"$C$。 +RNN~具备这种能力。 +\sec?描述了给定某些输入后,关于序列条件分布~RNN~的几种构造方法,并且\sec?描述了当输入是序列时如何实现这种条件分布。 +在所有情况下,一个模型首先读取输入序列并产生概括输入序列的数据结构。我们称这个概括为"上下文"~$C$。 上下文$C$可以是向量列表,或者向量或张量。 -读取输入以产生$C$的模型可以是RNN{cite?}或卷积网络{cite?}。 +读取输入以产生$C$的模型可以是~RNN~{cite?}或卷积网络~{cite?}。 另一个模型(通常是RNN),则读取上下文$C$并且生成目标语言的句子。 在\fig?中展示了这种用于机器翻译的编码器-解码器框架的总体思想。 @@ -978,18 +978,18 @@ RNN具备这种能力。 为生成以源句为条件的整句,模型必须具有表示整个源句的方式。 早期模型只能表示单个词或短语。 从表示学习的观点来看,具有相同含义的句子具有类似表示是有用的,无论它们是以源语言还是以目标语言书写。 -研究者首先使用卷积和RNN的组合探索该策略~{cite?}。 -后来的工作介绍了使用RNN对所提议的翻译进行打分{cite?}或生成翻译句子{cite?}。 +研究者首先使用卷积和~RNN~的组合探索该策略~{cite?}。 +后来的工作介绍了使用~RNN~对所提议的翻译进行打分{cite?}或生成翻译句子{cite?}。 {Jean-et-al-arxiv2014}将这些模型扩展到更大的词汇表。 -\subsubsection{使用注意机制并对齐数据片段} +\subsubsection{使用注意力机制并对齐数据片段} 使用固定大小的表示概括非常长的句子(例如60个词)的所有语义细节是非常困难的。 这需要使用足够大的RNN,并且用足够长时间训练得很好才能实现,如 {Cho-et-al-EMNLP2014}和{Sutskever-et-al-NIPS2014}所表明的。 然而,更高效的方法是先读取整个句子或段落(以获得正在表达的上下文和焦点),然后一次翻译一个词,每次聚焦于输入句子的不同部分来收集产生下一个输出词所需的语义细节。 这正是~{Bahdanau-et-al-ICLR2015-small}第一次引入的想法。 -\fig?中展示了注意机制,其中每个时间步关注输入序列的特定部分。 +\fig?中展示了注意力机制,其中每个时间步关注输入序列的特定部分。 \begin{figure}[htp] \ifOpenSource @@ -997,18 +997,18 @@ RNN具备这种能力。 \else \centerline{\includegraphics{Chapter12/figures/attention.pdf}} \fi -\caption{由{Bahdanau-et-al-ICLR2015-small}引入的现代注意机制,本质上是加权平均。 -注意机制对具有权重$\alpha^{(t)}$的特征向量$\Vh^{(t)}$进行加权平均形成上下文向量$\Vc$。 +\caption{由~{Bahdanau-et-al-ICLR2015-small}引入的现代注意力机制,本质上是加权平均。 +注意力机制对具有权重$\alpha^{(t)}$的特征向量$\Vh^{(t)}$进行加权平均形成上下文向量$\Vc$。 在一些应用中,特征向量$\Vh$是神经网络的隐藏单元,但它们也可以是模型的原始输入。 权重$\alpha^{(t)}$由模型本身产生。 它们通常是区间$[0,1]$中的值,并且旨在仅仅集中在单个$\Vh^{(t)}$周围,使得加权平均精确地读取接近一个特定时间步的特征向量。 权重$\alpha^{(t)}$通常由模型另一部分发出的相关性得分应用softmax函数后产生。 -注意机制在计算上需要比直接索引期望的$\Vh^{(t)}$付出更高的代价,但直接索引不能使用梯度下降训练。 -基于加权平均的注意机制是平滑、可微的近似,可以使用现有优化算法训练。 +注意力机制在计算上需要比直接索引期望的$\Vh^{(t)}$付出更高的代价,但直接索引不能使用梯度下降训练。 +基于加权平均的注意力机制是平滑、可微的近似,可以使用现有优化算法训练。 } \end{figure} -我们可以认为基于注意机制的系统有三个组件: +我们可以认为基于注意力机制的系统有三个组件: + 读取器\emph{读取}原始数据(例如源语句中的源词)并将其转换为分布式表示,其中一个特征向量与每个词的位置相关联。 + 存储器存储读取器输出的特征向量列表。这可以被理解为包含事实序列的\emph{存储器},而之后不必以相同的顺序从中检索,也不必访问全部。 @@ -1051,7 +1051,7 @@ RNN具备这种能力。 神经语言模型背后的思想已经扩展到多个自然语言处理应用,如解析{cite?}、词性标注、语义角色标注、分块等,有时使用共享词嵌入的单一多任务学习架构{cite?}。 -随着t-SNE降维算法的发展{cite?}以及Joseph Turian在2009年引入的专用于可视化词嵌入的应用,用于分析语言模型嵌入的二维可视化成为一种流行的工具。 +随着t-SNE~降维算法的发展{cite?}以及Joseph Turian在2009年引入的专用于可视化词嵌入的应用,用于分析语言模型嵌入的二维可视化成为一种流行的工具。 # 其他应用 @@ -1096,26 +1096,26 @@ RNN具备这种能力。 通常,人们希望最小化预测评级$\hat{R}_{u,i}$ 和实际评级$\hat{R}_{u,i}$ 之间的平方误差。 当用户嵌入和项目嵌入首次缩小到低维度(两个或三个)时,它们就可以方便地可视化,或者可以将用户或项目彼此进行比较(就像词嵌入)。 获得这些嵌入的一种方式是对实际目标(例如评级)的矩阵$\MR$进行奇异值分解。 -这对应于将$\MR = \MU \MD \MV'$(或归一化的变体)分解为两个因子的乘积,低秩矩阵 $\MA=\MU \MD$ and $\MB = \MV'$。 +这对应于将$\MR = \MU \MD \MV'$(或归一化的变体)分解为两个因子的乘积,低秩矩阵 $\MA=\MU \MD$ 和 $\MB = \MV'$。 SVD的一个问题是它以任意方式处理缺失条目,如同它们对应于目标值0。 相反,我们希望避免为缺失条目做出的预测付出任何代价。 幸运的是,观察到的评级的平方误差总和也可以使用基于梯度的优化最小化。 -SVD和式 \eq?中的双线性预测在Netflix奖竞赛中(目的是仅基于大量匿名用户的之前评级预测电影的评级)表现得非常好{cite?}。 +SVD~和\eqn?中的双线性预测在~Netflix~奖竞赛中(目的是仅基于大量匿名用户的之前评级预测电影的评级)表现得非常好{cite?}。 许多机器学习专家参加了2006年和2009年之间的这场比赛。 它提高了使用先进机器学习的推荐系统的研究水平,并改进了推荐系统。 -即使简单的双线性预测或SVD本身并没有赢得比赛,但它是大多数竞争对手提出的整体模型中一个组成部分,包括胜者{cite?}。 +即使简单的双线性预测或~SVD~本身并没有赢得比赛,但它是大多数竞争对手提出的整体模型中一个组成部分,包括胜者{cite?}。 -除了这些具有分布式表示的双线性模型之外,第一次用于协同过滤的神经网络之一是基于RBM的无向概率模型~{cite?}。 -RBM是Netflix比赛获胜方法的一个重要组成部分{cite?}。 +除了这些具有分布式表示的双线性模型之外,第一次用于协同过滤的神经网络之一是基于~RBM~的无向概率模型~{cite?}。 +RBM~是~Netflix~比赛获胜方法的一个重要组成部分{cite?}。 神经网络社群中也已经探索了对评级矩阵进行因子分解的更高级变体{cite?}。 然而,协同过滤系统有一个基本限制:当引入新项目或新用户时,缺乏评级历史意味着无法评估其与其他项目或用户的相似性,或者说无法评估新的用户和现有项目的联系。 这被称为冷启动推荐问题。 解决冷启动推荐问题的一般方式是引入单个用户和项目的额外信息。 例如,该额外信息可以是用户简要信息或每个项目的特征。 -使用这种信息的系统被称为\textbf{基于内容的推荐系统}(content-based recommender system)。 +使用这种信息的系统被称为\,\textbf{基于内容的推荐系统}(content-based recommender system)。 从丰富的用户特征或项目特征集到嵌入的映射可以通过深度学习架构学习{cite?}。 专用的深度学习架构,如卷积网络已经应用于从丰富内容中提取特征,如提取用于音乐推荐的音乐音轨{cite?}。 @@ -1135,8 +1135,8 @@ RBM是Netflix比赛获胜方法的一个重要组成部分{cite?}。 更糟糕的是,如果我们不够小心,即使收集越来越多的数据,我们得到的系统可能会继续选择错误的决定,因为正确的决定最初只有很低的概率:直到学习者选择正确的决定之前,该系统都无法学习正确的决定。 这类似于强化学习的情况,其中仅观察到所选动作的奖励。 一般来说,强化学习会涉及许多动作和许多奖励的序列。 -bandit 情景是强化学习的特殊情况,其中学习者仅采取单一动作并接收单个奖励。 -bandit 问题在学习者知道哪个奖励与哪个动作相关联的时更容易。 +bandit ~情景是强化学习的特殊情况,其中学习者仅采取单一动作并接收单个奖励。 +bandit ~问题在学习者知道哪个奖励与哪个动作相关联的时更容易。 在一般的强化学习场景中,高奖励或低奖励可能是由最近的动作或很久以前的动作引起的。 术语contextual bandit 指的是在一些输入变量可以通知决定的上下文中采取动作的情况。 例如,我们至少知道用户身份,并且我们要选择一个项目。 @@ -1193,7 +1193,7 @@ bandit 问题在学习者知道哪个奖励与哪个动作相关联的时更容 当然,彼此相关的实体不必是数字。 我们可以定义关系{\tt is\_a\_type\_of}包含如{\tt(狗,哺乳动物)}的元组。 -在AI的背景下,我们将关系看作句法上简单且高度结构化的语言。 +在~AI~的背景下,我们将关系看作句法上简单且高度结构化的语言。 关系起到动词的作用,而关系的两个参数发挥着主体和客体的作用。 这些句子是一个三元组标记的形式: \begin{align} @@ -1218,7 +1218,7 @@ bandit 问题在学习者知道哪个奖励与哪个动作相关联的时更容 这些数据库的共同结构是关系型数据库,它存储这种相同类型的信息,虽然没有格式化为三元标记的句子。 当数据库旨在将日常生活中常识或关于应用领域的专业知识传达给人工智能系统时,我们将这种数据库称为知识库。 知识库包括一般的像{\tt Freebase}、{\tt OpenCyc}、 {\tt WordNet}、 {\tt Wikibase}\footnote{分别可以在如下网址获取: \url{freebase.com}, \url{cyc.com/opencyc}, -\url{wordnet.princeton.edu}, \url{wikiba.se}}等等,和专业的知识库,如GeneOntology\footnote{\url{geneontology.org}}。 +\url{wordnet.princeton.edu}, \url{wikiba.se}}~等等,和专业的知识库,如GeneOntology\footnote{\url{geneontology.org}}。 实体和关系的表示可以将知识库中的每个三元组作为训练样本来学习,并且以最大化捕获它们的联合分布为训练目标{cite?}。 除了训练数据,我们还需定义训练的模型族。 @@ -1229,13 +1229,13 @@ bandit 问题在学习者知道哪个奖励与哪个动作相关联的时更容 事实上,建模语言和通过关系编码建模知识的联系非常接近,研究人员可以\emph{同时}使用知识库\emph{和}自然语言句子训练这样的实体表示{cite?},或组合来自多个关系型数据库的数据~{cite?}。 可能与这种模型相关联的特定参数化有许多种。 早期关于学习实体间关系的工作~{cite?}假定高度受限的参数形式("线性关系嵌入"),通常对关系使用与实体形式不同的表示。 -例如,{Paccanaro2000}和{bordes-aaai-2011} 用向量表示实体而矩阵表示关系,其思想是关系在实体上相当于运算符。 +例如,{Paccanaro2000}和~{bordes-aaai-2011} 用向量表示实体而矩阵表示关系,其思想是关系在实体上相当于运算符。 或者,关系可以被认为是任何其他实体{cite?},允许我们关于关系作声明,但是更灵活的是将它们结合在一起并建模联合分布的机制。 这种模型的实际短期应用是链接预测:预测知识图谱中缺失的弧。 这是基于旧事实推广新事实的一种形式。 目前存在的大多数知识库都是通过人力劳动构建的,这往往使知识库缺失许多并且可能是大多数真正的关系。 -请查看{Wang-et-al-AAAI2014}、{Lin-et-al-AAAI2015}和{Garcia-Duran-et-al-arxiv2015}中这样应用的例子。 +请查看~{Wang-et-al-AAAI2014}、{Lin-et-al-AAAI2015}和~{Garcia-Duran-et-al-arxiv2015}中这样应用的例子。 我们很难评估链接预测任务上模型的性能,因为我们的数据集只有正样本(已知是真实的事实)。 如果模型提出了不在数据集中的事实,我们不确定模型是犯了错误还是发现了一个新的以前未知的事实。 @@ -1250,7 +1250,7 @@ bandit 问题在学习者知道哪个奖励与哪个动作相关联的时更容 这仍然是一个困难的开放性问题,只能在受限的"玩具"环境下解决。 目前,记住和检索特定声明性事实的最佳方法是使用显式记忆机制,如\sec?所述。 记忆网络最开始是被用来解决一个玩具问答任务{cite?}。 -{Kumar-et-al-arxiv2015} 提出了一种扩展,使用GRU循环网络将输入读入存储器并且在给定存储器的内容后产生回答。 +{Kumar-et-al-arxiv2015} 提出了一种扩展,使用GRU~循环网络将输入读入存储器并且在给定存储器的内容后产生回答。 深度学习已经应用于其他许多应用(除了这里描述的应用以外),并且肯定会在此之后应用于更多的场景。 我们不可能全面描述与此主题相关的所有应用 。 diff --git a/docs/_posts/2016-12-13-Chapter13_linear_factor_models.md b/docs/_posts/2016-12-13-Chapter13_linear_factor_models.md index 9c0f3f9..da022d7 100644 --- a/docs/_posts/2016-12-13-Chapter13_linear_factor_models.md +++ b/docs/_posts/2016-12-13-Chapter13_linear_factor_models.md @@ -9,7 +9,7 @@ share: false 许多深度学习的研究前沿均涉及构建输入的概率模型$p_{\text{model}}(\Vx)$。 原则上说,给定任何其他变量的情况下,这样的模型可以使用概率推断来预测其环境中的任何变量。 -许多这样的模型还具有潜变量 $\Vh$,其中$p_{\text{model}}(\Vx) = \SetE_{\Vh} p_{\text{model}}(\Vx\mid\Vh)$。 +许多这样的模型还具有潜变量 $\Vh$,其中$p_{\text{model}}(\Vx) = \SetE_{\Vh}\, p_{\text{model}}(\Vx\mid\Vh)$。 这些潜变量提供了表示数据的另一种方式。 我们在深度前馈网络和循环网络中已经发现,基于潜变量的分布式表示继承了表示学习的所有优点。 @@ -52,7 +52,7 @@ share: false \centerline{\includegraphics{Chapter13/figures/linear_factors}} \fi \caption{描述线性因子模型族的有向图模型,其中我们假设观察到的数据向量$\Vx$是通过独立的潜在因子$\Vh$的线性组合再加上一定噪声获得的。 -不同的模型,比如概率PCA,因子分析或者是ICA,都是选择了不同形式的噪声以及先验$p(\Vh)$。} +不同的模型,比如概率PCA,因子分析或者是~ICA,都是选择了不同形式的噪声以及先验$p(\Vh)$。} \end{figure} @@ -83,7 +83,7 @@ share: false -为了将PCA引入到概率框架中,我们可以对因子分析模型作轻微修改,使条件方差$\sigma_i^2$等于同一个值。 +为了将~PCA~引入到概率框架中,我们可以对因子分析模型作轻微修改,使条件方差$\sigma_i^2$等于同一个值。 在这种情况下,$\Vx$的协方差简化为$\MW\MW^{\top}+\sigma^2\MI$,这里的$\sigma^2$是一个标量。 由此可以得到条件分布,如下: \begin{align} @@ -94,35 +94,35 @@ share: false \RVx = \MW\RVh + \Vb + \sigma\RVz, \end{align} 其中$\RVz \sim \CalN(\Vz;\mathbf{0},\MI)$是高斯噪声。 -之后{tipping99mixtures}提出了一种迭代的EM算法来估计参数$\MW$和$\sigma^2$。 +之后~{tipping99mixtures}提出了一种迭代的~EM~算法来估计参数$\MW$和$\sigma^2$。 这个概率PCA模型利用了这样一种观察现象:除了一些微小残余的重构误差(至多为$\sigma^2$),数据中的大多数变化可以由潜变量 $\Vh$描述。 -通过{tipping99mixtures}的研究我们可以发现,当$\sigma \xrightarrow{} 0$的时候,概率PCA退化为PCA。 -在这种情况下,给定$\Vx$情况下$\Vh$的条件期望等于将$\Vx - \Vb$投影到$\MW$的$d$列所生成的空间上,与PCA一样。 +通过{tipping99mixtures}的研究我们可以发现,当$\sigma \xrightarrow{} 0$时,概率PCA~退化为~PCA。 +在这种情况下,给定$\Vx$情况下$\Vh$的条件期望等于将$\Vx - \Vb$投影到$\MW$的$d$列所生成的空间上,与~PCA~一样。 -当$\sigma\xrightarrow{} 0$时, 概率PCA所定义的密度函数在$d$维的$\MW$的列生成空间周围非常尖锐。 +当$\sigma\xrightarrow{} 0$时, 概率PCA~所定义的密度函数在$d$维的$\MW$的列生成空间周围非常尖锐。 这导致模型会为没有在一个超平面附近聚集的数据分配非常低的概率。 -# 独立分量分析 +# 独立成分分析 -独立分量分析是最古老的表示学习算法之一~{cite?}。 +独立成分分析是最古老的表示学习算法之一~{cite?}。 它是一种建模线性因子的方法,旨在将观察到的信号分离成许多潜在信号,这些潜在信号通过缩放和叠加可以恢复成观察数据。 这些信号是完全独立的,而不是仅仅彼此不相关\footnote{\sec?讨论了不相关变量和独立变量之间的差异。}。 -许多不同的具体方法被称为ICA。 -与我们本书中描述的其他生成模型最相似的ICA变种~{cite?}训练了完全参数化的生成模型。 +许多不同的具体方法被称为~ICA。 +与我们本书中描述的其他生成模型最相似的~ICA~变种~{cite?}训练了完全参数化的生成模型。 潜在因子$\Vh$的先验$p(\Vh)$,必须由用户提前给出并固定。 接着模型确定性地生成$\Vx = \MW \Vh$。 我们可以通过非线性变化(使用\eqn?)来确定$p(\Vx)$。 @@ -134,52 +134,52 @@ share: false 这是一种常用的方法,它并不是用来捕捉高级别的抽象因果因子,而是恢复已经混合在一起的低级别信号。 在该设置中,每个训练样本对应一个时刻,每个$x_i$是一个传感器对混合信号的观察值,并且每个$h_i$是单个原始信号的一个估计。 例如,我们可能有$n$个人同时说话。 -如果我们在不同位置放置$n$个不同的麦克风,则ICA可以检测每个麦克风的音量变化,并且分离信号,使得每个$h_i$仅包含一个人清楚地说话。 +如果我们在不同位置放置$n$个不同的麦克风,则~ICA~可以检测每个麦克风的音量变化,并且分离信号,使得每个$h_i$仅包含一个人清楚地说话。 这通常用于脑电图的神经科学,这种技术可用于记录源自大脑的电信号。 放置在受试者头部上的许多电极传感器用于测量来自身体的多种电信号。 实验者通常仅对来自大脑的信号感兴趣,但是来自受试者心脏和眼睛的信号强到足以混淆在受试者头皮处的测量结果。 -信号到达电极,并且混合在一起,因此为了分离源于心脏与源于大脑的信号,并且将不同脑区域中的信号彼此分离,ICA是必要的。 +信号到达电极,并且混合在一起,因此为了分离源于心脏与源于大脑的信号,并且将不同脑区域中的信号彼此分离,ICA~是必要的。 -如前所述,ICA存在许多变种。 +如前所述,ICA~存在许多变种。 一些版本在$\Vx$的生成中添加一些噪声,而不是使用确定性的解码器。 大多数方法不使用最大似然准则,而是旨在使$\Vh = \MW^{-1}\Vx$的元素彼此独立。 许多准则能够达成这个目标。 -\eqn?需要用到$\MW$的行列式,这可能是昂贵且数值不稳定的操作。 -ICA的一些变种通过将$\MW$约束为正交来避免这个有问题的操作。 +\eqn?需要用到$\MW$的行列式,这可能是代价很高且数值不稳定的操作。 +ICA~的一些变种通过将$\MW$约束为正交来避免这个有问题的操作。 -ICA的所有变种均要求$p(\Vh)$是非高斯的。 +ICA~的所有变种均要求$p(\Vh)$是非高斯的。 这是因为如果$p(\Vh)$是具有高斯分量的独立先验,则$\MW$是不可识别的。 对于许多$\MW$值,我们可以在$p(\Vx)$上获得相同的分布。 -这与其他线性因子模型有很大的区别,例如概率PCA和因子分析通常要求$p(\Vh)$是高斯的,以便使模型上的许多操作具有闭式解。 +这与其他线性因子模型有很大的区别,例如概率PCA~和因子分析通常要求$p(\Vh)$是高斯的,以便使模型上的许多操作具有闭式解。 在用户明确指定分布的最大似然方法中,一个典型的选择是使用$p(h_i) = \frac{d}{dh_i}\sigma(h_i)$。 -这些非高斯分布的典型选择在$0$附近具有比高斯分布更高的峰值,因此我们也可以看到独立分量分析经常用于学习稀疏特征。 +这些非高斯分布的典型选择在$0$附近具有比高斯分布更高的峰值,因此我们也可以看到独立成分分析经常用于学习稀疏特征。 -按照我们对生成模型这个术语的定义,ICA的许多变种不是生成模型。 +按照我们对生成模型这个术语的定义,ICA~的许多变种不是生成模型。 在本书中,生成模型可以直接表示$p(\Vx)$,也可以认为是从$p(\Vx)$中抽取样本。 -ICA的许多变种仅知道如何在$\Vx$和$\Vh$之间变换,而没有任何表示$p(\Vh)$的方式,因此也无法在$p(\Vx)$上施加分布。 -例如,许多ICA变量旨在增加$\Vh = \MW^{-1}\Vx$的样本峰度,因为高峰度说明了$p(\Vh)$是非高斯的,但这是在没有显式表示$p(\Vh)$的情况下完成的。 -这就是为什么ICA多被用作分离信号的分析工具,而不是用于生成数据或估计其密度。 +ICA~的许多变种仅知道如何在$\Vx$和$\Vh$之间变换,而没有任何表示$p(\Vh)$的方式,因此也无法在$p(\Vx)$上施加分布。 +例如,许多~ICA~变量旨在增加$\Vh = \MW^{-1}\Vx$的样本峰度,因为高峰度说明了$p(\Vh)$是非高斯的,但这是在没有显式表示$p(\Vh)$的情况下完成的。 +这就是为什么~ICA~多被用作分离信号的分析工具,而不是用于生成数据或估计其密度。 -正如PCA可以推广到\chap?中描述的非线性自编码器,ICA也可以推广到非线性生成模型,其中我们使用非线性函数$f$来生成观测数据。 -关于非线性ICA最初的工作可以参考{hyvarinen1999nonlinear},它和集成学习的成功结合可以参见{roberts2001independent,lappalainen2000nonlinear}。 -ICA的另一个非线性扩展是非线性独立分量估计方法~{cite?},这个方法堆叠了一系列可逆变换(在编码器阶段),其特性是能高效地计算每个变换的Jacobian行列式。 -这使得我们能够精确地计算似然,并且像ICA一样,NICE尝试将数据变换到具有因子的边缘分布的空间。 -由于非线性编码器的使用\footnote{译者注:相比于ICA},这种方法更可能成功。 +正如~PCA~可以推广到\chap?中描述的非线性自编码器,ICA~也可以推广到非线性生成模型,其中我们使用非线性函数$f$来生成观测数据。 +关于非线性~ICA~最初的工作可以参考~{hyvarinen1999nonlinear},它和集成学习的成功结合可以参见~{roberts2001independent,lappalainen2000nonlinear}。 +ICA~的另一个非线性扩展是非线性独立成分估计方法~{cite?},这个方法堆叠了一系列可逆变换(在编码器阶段),其特性是能高效地计算每个变换的~Jacobian~行列式。 +这使得我们能够精确地计算似然,并且像~ICA~一样,NICE~尝试将数据变换到具有因子的边缘分布的空间。 +由于非线性编码器的使用\footnote{译者注:相比于~ICA},这种方法更可能成功。 因为编码器和一个能进行完美逆变换的解码器相关联,所以可以直接从模型生成样本(首先从$p(\Vh)$采样,然后使用解码器)。 -ICA的另一个推广是通过鼓励组内统计依赖关系、抑制组间依赖关系来学习特征组。 +ICA~的另一个推广是通过鼓励组内统计依赖关系、抑制组间依赖关系来学习特征组。 当相关单元的组被选为不重叠时,这被称为独立子空间分析。 我们还可以向每个隐藏单元分配空间坐标,并且空间上相邻的单元组形成一定程度的重叠。 这能够鼓励相邻的单元学习类似的特征。 @@ -198,7 +198,7 @@ ICA的另一个推广是通过鼓励组内统计依赖关系、抑制组间依 -慢特征分析的想法源于所谓的慢原则。 +慢特征分析的想法源于所谓的慢性原则。 其基本思想是,与场景中起描述作用的单个量度相比,场景的重要特性通常变化得非常缓慢。 例如,在计算机视觉中,单个像素值可以非常快速地改变。 如果斑马从左到右移动穿过图像并且它的条纹穿过对应的像素时,该像素将迅速从黑色变为白色,并再次恢复成黑色。 @@ -207,9 +207,9 @@ ICA的另一个推广是通过鼓励组内统计依赖关系、抑制组间依 -慢原则早于慢特征分析,并已被应用于各种模型~{cite?}。 -一般来说,我们可以将慢原则应用于可以使用梯度下降训练的任何可微分模型。 -为了引入慢原则,我们可以向代价函数添加以下项 +慢性原则早于慢特征分析,并已被应用于各种模型~{cite?}。 +一般来说,我们可以将慢性原则应用于可以使用梯度下降训练的任何可微分模型。 +为了引入慢性原则,我们可以向代价函数添加以下项 \begin{align} \lambda \sum_t L(f(\Vx^{(t+1)}),f(\Vx^{(t)})), \end{align} @@ -218,14 +218,14 @@ $L$的一个常见选择是均方误差。 -慢特征分析是慢原则中一个特别高效的应用。 +慢特征分析是慢性原则中一个特别高效的应用。 由于它被应用于线性特征提取器,并且可以通过闭式解训练,所以它是高效的。 -像ICA的一些变种一样,SFA本身并不是生成模型,只是在输入空间和特征空间之间定义了一个线性映射,但是没有定义特征空间的先验,因此没有在输入空间上施加分布$p(\Vx)$。 +像~ICA~的一些变种一样,SFA~本身并不是生成模型,只是在输入空间和特征空间之间定义了一个线性映射,但是没有定义特征空间的先验,因此没有在输入空间上施加分布$p(\Vx)$。 -SFA算法~{cite?}先将$f(\Vx;\theta)$定义为线性变换,然后求解如下优化问题 +SFA~算法~{cite?}先将$f(\Vx;\theta)$定义为线性变换,然后求解如下优化问题 \begin{align} \min_{\Vtheta} \SetE_t (f(\Vx^{(t+1)})_i - f(\Vx^{(t)})_i )^2 \end{align} @@ -241,7 +241,7 @@ SFA算法~{cite?}先将$f(\Vx;\theta)$定义为线性变换,然后求解如下 否则我们可以向所有特征值添加一个常数, 并获得具有相等慢度目标值的不同解。 特征具有单位方差的约束对于防止所有特征趋近于$0$的病态解是必要的。 -与PCA类似,SFA特征是有序的,其中学习第一特征是最慢的。 +与~PCA~类似,SFA~特征是有序的,其中学习第一特征是最慢的。 要学习多个特征,我们还必须添加约束 \begin{align} \forall i -在运行SFA之前,SFA通常通过对$\Vx$使用非线性的基扩充来学习非线性特征。 +在运行~SFA~之前,SFA~通常通过对$\Vx$使用非线性的基扩充来学习非线性特征。 例如,通常用$\Vx$的二次基扩充来代替原来的$\Vx$,得到一个包含所有$x_ix_j$的向量。 -由此,我们可以通过反复地学习一个线性SFA特征提取器,对其输出应用非线性基扩展,然后在该扩展之上学习另一个线性SFA特征提取器的方式来组合线性SFA模块从而学习深度非线性慢特征提取器。 +由此,我们可以通过反复地学习一个线性~SFA~特征提取器,对其输出应用非线性基扩展,然后在该扩展之上学习另一个线性~SFA~特征提取器的方式来组合线性~SFA~模块从而学习深度非线性慢特征提取器。 -当在自然场景视频的小块空间部分上训练时,使用二次基扩展的SFA所学习到的特征与V1皮层中那些复杂细胞的特征有许多共同特性~{cite?}。 -当在计算机渲染的3D环境内随机运动的视频上训练时,深度SFA模型能够学习的特征与大鼠脑中用于导航的神经元学到的特征有许多共同特性~{cite?}。 -因此从生物学角度上来说SFA是一个合理的有依据的模型。 +当在自然场景视频的小块空间部分上训练时,使用二次基扩展的~SFA~所学习到的特征与V1皮层中那些复杂细胞的特征有许多共同特性~{cite?}。 +当在计算机渲染的3D环境内随机运动的视频上训练时,深度~SFA~模型能够学习的特征与大鼠脑中用于导航的神经元学到的特征有许多共同特性~{cite?}。 +因此从生物学角度上来说~SFA~是一个合理的有依据的模型。 -SFA的一个主要优点是,即使在深度非线性条件下,它依然能够在理论上预测SFA能够学习哪些特征。 +SFA~的一个主要优点是,即使在深度非线性条件下,它依然能够在理论上预测~SFA~能够学习哪些特征。 为了做出这样的理论预测,必须知道关于配置空间的环境动力(例如,在3D渲染环境中随机运动的例子中,理论分析是从相机位置、速度的概率分布中入手的)。 已知潜在因子如何改变的情况下,我们能够通过理论分析解出表达这些因子的最佳函数。 -在实践中,基于模拟数据的实验上,使用深度SFA似乎能够恢复理论预测的函数。 +在实践中,基于模拟数据的实验上,使用深度~SFA~似乎能够恢复理论预测的函数。 相比之下,在其他学习算法中,代价函数高度依赖于特定像素值,使得难以确定模型将学习到什么特征。 -深度SFA也已经被用于学习用在对象识别和姿态估计的特征~{cite?}。 -到目前为止,慢原则尚未成为任何最先进应用的基础。 +深度~SFA~也已经被用于学习用在对象识别和姿态估计的特征~{cite?}。 +到目前为止,慢性原则尚未成为任何最先进应用的基础。 究竟是什么因素限制了其性能仍有待研究。 我们推测,或许慢度先验太过强势,并且,最好添加这样一个先验使得当前时间步到下一个时间步的预测更加容易,而不是加一个先验使得特征近似为一个常数。 对象的位置是一个有用的特征,无论对象的速度是高还是低。 -但慢原则鼓励模型忽略具有高速度的对象的位置。 +但慢性原则鼓励模型忽略具有高速度的对象的位置。 @@ -322,7 +322,7 @@ p(h_i)\propto \frac{1}{(1+\frac{h_i^2}{\nu})^{\frac{\nu+1}{2}}}. 稍后在\sec?中,这种方法将被进一步证明为是解决最大似然问题的一种通用的近似方法。 -对于诸如PCA的模型,我们已经看到使用了预测$\Vh$的参数化的编码器函数,并且该函数仅包括乘以权重矩阵。 +对于诸如~PCA~的模型,我们已经看到使用了预测$\Vh$的参数化的编码器函数,并且该函数仅包括乘以权重矩阵。 稀疏编码中的编码器不是参数化的编码器。 相反,编码器是一个优化算法,在这个优化问题中,我们寻找单个最可能的编码值: \begin{align} @@ -366,7 +366,7 @@ p(h_i)\propto \frac{1}{(1+\frac{h_i^2}{\nu})^{\frac{\nu+1}{2}}}. 对于稀疏编码模型的绝大多数形式,推断问题是凸的,优化过程总能找到最优编码(除非出现退化的情况,例如重复的权重向量)。 显然,稀疏和重构成本仍然可以在不熟悉的点上升,但这归因于解码器权重中的泛化误差,而不是编码器中的泛化误差。 当稀疏编码用作分类器的特征提取器,而不是使用参数化的函数来预测编码值时,基于优化的稀疏编码模型的编码过程中较小的泛化误差可以得到更好的泛化能力。 -{Coates2011b}证明了在对象识别任务中稀疏编码特征比基于参数化的编码器(线性-sigmoid自编码器)的特征拥有更好的泛化能力。 +{Coates2011b}证明了在对象识别任务中稀疏编码特征比基于参数化的编码器(线性-sigmoid~自编码器)的特征拥有更好的泛化能力。 受他们的工作启发,{Goodfeli-et-al-TPAMI-Deep-PrePrint-2013-small}表明一种稀疏编码的变体在标签极少(每类20个或更少标签)的情况中比相同情况下的其他特征提取器拥有更好的泛化能力。 @@ -374,7 +374,7 @@ p(h_i)\propto \frac{1}{(1+\frac{h_i^2}{\nu})^{\frac{\nu+1}{2}}}. 非参数编码器的主要缺点是在给定$\Vx$的情况下需要大量的时间来计算$\Vh$,因为非参数方法需要运行迭代算法。 在\chap?中讲到的参数化自编码器方法仅使用固定数量的层,通常只有一层。 -另一个缺点是它不直接通过非参数编码器进行反向传播,这使得我们很难采用先使用无监督方式预训练稀疏编码模型然后使用监督方式对其进行微调的方法。 +另一个缺点是它不直接通过非参数编码器进行反向传播,这使得我们很难采用先使用无监督方式预训练稀疏编码模型然后使用监督方式对其进行精调的方法。 允许近似导数的稀疏编码模型的修改版本确实存在但未被广泛使用~{cite?}。 @@ -390,14 +390,14 @@ p(h_i)\propto \frac{1}{(1+\frac{h_i^2}{\nu})^{\frac{\nu+1}{2}}}. \centerline{\includegraphics[width=\figwidth]{Chapter13/figures/s3c_samples}} \fi \caption{尖峰和平板稀疏编码模型上在MNIST数据集训练的样例和权重。 -(左)这个模型中的样本和训练样本相差很大。 +\emph{(左)}这个模型中的样本和训练样本相差很大。 第一眼看来,我们可能认为模型拟合得很差。 -(右)这个模型的权重向量已经学习到了如何表示笔迹,有时候还能写完整的数字。 +\emph{(右)}这个模型的权重向量已经学习到了如何表示笔迹,有时候还能写完整的数字。 因此这个模型也学习到了有用的特征。 问题在于特征的因子先验会导致特征子集合随机的组合。 一些这样的子集能够合成可识别的MNIST集上的数字。 这也促进了拥有更强大潜在编码分布的生成模型的发展。 -此图经{Goodfeli-et-al-TPAMI-Deep-PrePrint-2013-small}允许转载。} +此图经~{Goodfeli-et-al-TPAMI-Deep-PrePrint-2013-small}允许转载。} \end{figure} @@ -410,11 +410,11 @@ p(h_i)\propto \frac{1}{(1+\frac{h_i^2}{\nu})^{\frac{\nu+1}{2}}}. -线性因子模型,包括PCA和因子分析,可以理解为学习一个流形~{cite?}。 -我们可以将概率PCA定义为高概率的薄饼状区域,即一个高斯分布,沿着某些轴非常窄,就像薄饼沿着其垂直轴非常平坦,但沿着其他轴是细长的,正如薄饼在其水平轴方向是很宽的一样。 +线性因子模型,包括~PCA~和因子分析,可以理解为学习一个流形~{cite?}。 +我们可以将概率PCA~定义为高概率的薄饼状区域,即一个高斯分布,沿着某些轴非常窄,就像薄饼沿着其垂直轴非常平坦,但沿着其他轴是细长的,正如薄饼在其水平轴方向是很宽的一样。 \fig?解释了这种现象。 -PCA可以理解为将该薄饼与更高维空间中的线性流形对准。 -这种解释不仅适用于传统PCA,而且适用于学习矩阵$\MW$和$\MV$的任何线性自编码器,其目的是使重构的$\Vx$尽可能接近于原始的$\Vx$。 +PCA~可以理解为将该薄饼与更高维空间中的线性流形对准。 +这种解释不仅适用于传统~PCA,而且适用于学习矩阵$\MW$和$\MV$的任何线性自编码器,其目的是使重构的$\Vx$尽可能接近于原始的$\Vx$。 \begin{figure}[!htb] @@ -450,7 +450,7 @@ PCA可以理解为将该薄饼与更高维空间中的线性流形对准。 \MC = \SetE[(\Vx - {\Vmu})(\Vx - {\Vmu})^{\top}] \end{align} 的主特征向量所生成的子空间相同。 -在PCA中,$\MW$的列是按照对应特征值(其全部是实数和非负数)幅度大小排序所对应的特征向量。 +在~PCA~中,$\MW$的列是按照对应特征值(其全部是实数和非负数)幅度大小排序所对应的特征向量。 我们还可以发现$\MC$的特征值$\lambda_i$对应了$\Vx$在特征向量$\Vv^{(i)}$方向上的方差。 diff --git a/docs/_posts/2016-12-14-Chapter14_autoencoders.md b/docs/_posts/2016-12-14-Chapter14_autoencoders.md index d3dbb2b..30d2b9d 100644 --- a/docs/_posts/2016-12-14-Chapter14_autoencoders.md +++ b/docs/_posts/2016-12-14-Chapter14_autoencoders.md @@ -19,7 +19,7 @@ share: false 数十年间,自编码器的想法一直是神经网络历史景象的一部分~{cite?}。 传统自编码器被用于降维或特征学习。 近年来,自编码器与潜变量模型理论的联系将自编码器带到了生成式建模的前沿,我们将在\chap?揭示更多细节。 -自编码器可以被看作是前馈网络的一个特例,并且可以使用完全相同的技术进行训练,通常使用minibatch梯度下降法(其中梯度基于反向传播计算)。 +自编码器可以被看作是前馈网络的一个特例,并且可以使用完全相同的技术进行训练,通常使用小批量梯度下降法(其中梯度基于反向传播计算)。 不同于一般的前馈网络,自编码器也可以使用再循环训练{cite?},这种学习算法基于比较原始输入的激活和重构输入的激活。 相比反向传播算法,再循环算法更具生物学意义,但很少用于机器学习应用。 @@ -58,7 +58,7 @@ share: false 这种情况下,自编码器在训练来执行复制任务的同时学到了训练数据的主元子空间。 -因此拥有非线性编码器函数$f$和非线性解码器函数$g$的自编码器能够学习出更强大的PCA非线性推广。 +因此,拥有非线性编码器函数$f$和非线性解码器函数$g$的自编码器能够学习出更强大的PCA非线性推广。 不幸的是,如果编码器和解码器被赋予过大的容量,自编码器会执行复制任务而捕捉不到任何有关数据分布的有用信息。 从理论上说,我们可以设想这样一个自编码器,它只有一维编码,但它具有一个非常强大的非线性编码器,能够将每个训练数据$\Vx^{(i)}$表示为编码 $~i$。 而解码器可以学习将这些整数索引映射回特定训练样本的值。 @@ -226,7 +226,7 @@ p_{\text{model}}(h_i) = \frac{\lambda}{2} e^{-\lambda | h_i |}, 此外,编码器和解码器各自都是一个前馈网络,因此这两个部分也能各自从深度结构中获得好处。 -通用近似定理, %万能逼近定理保证至少有一层隐藏层且隐藏单元足够多的前馈神经网络能以任意精度近似任意函数(在很大范围里),这是非平凡深度(至少有一层隐藏层)的一个主要优点。 +万能近似定理, %万能逼近定理保证至少有一层隐藏层且隐藏单元足够多的前馈神经网络能以任意精度近似任意函数(在很大范围里),这是非平凡深度(至少有一层隐藏层)的一个主要优点。 这意味着具有单隐藏层的自编码器在数据域内能表示任意近似数据的恒等函数。 但是,从输入到编码的映射是浅层的。 这意味这我们不能任意添加约束,比如约束编码稀疏。 @@ -309,7 +309,7 @@ DAE的训练过程如\fig?中所示。 + 将$(\Vx, \tilde \Vx)$作为训练样本来估计自编码器的重构分布 $p_{\text{reconstruct}} (\Vx \mid \tilde \Vx) = p_{\text{decoder}}(\Vx \mid\Vh)$,其中$\Vh$是编码器 $f(\tilde \Vx)$的输出,$p_{\text{decoder}}$根据解码函数$g(\Vh)$定义。 \end{enumerate} -通常我们可以简单地对负对数似然$-\log p_{\text{decoder}} (\Vx \mid \Vh)$进行基于梯度法(如minibatch梯度下降)的近似最小化。 +通常我们可以简单地对负对数似然$-\log p_{\text{decoder}} (\Vx \mid \Vh)$进行基于梯度法(如小批量梯度下降)的近似最小化。 只要编码器是确定性的,去噪自编码器就是一个前馈网络,并且可以使用与其他前馈网络完全相同的方式进行训练。 \begin{figure}[!htb] diff --git a/docs/_posts/2016-12-16-Chapter16_structured_probabilistic_modelling.md b/docs/_posts/2016-12-16-Chapter16_structured_probabilistic_modelling.md index 46a1233..0964b85 100644 --- a/docs/_posts/2016-12-16-Chapter16_structured_probabilistic_modelling.md +++ b/docs/_posts/2016-12-16-Chapter16_structured_probabilistic_modelling.md @@ -603,7 +603,7 @@ $E(\RVx)$被称作是能量函数。 \fi \caption{\emph{(a)}随机变量$\RSa$和随机变量$\RSb$之间穿过$\RSs$的路径是活跃的,因为$\RSs$是观察不到的。 这意味着$\RSa$,$\RSb$之间不是分离的。 -\em[h{(b)}图中$\RSs$用阴影填充,表示它是可观察的。 +\emph{(b)}图中$\RSs$用阴影填充,表示它是可观察的。 因为$\RSa$和$\RSb$之间的唯一路径通过$\RSs$,并且这条路径是不活跃的, 我们可以得出结论,在给定$\RSs$的条件下$\RSa$和$\RSb$是分离的。} \end{figure} @@ -681,14 +681,14 @@ $E(\RVx)$被称作是能量函数。 然而,如果$\RSs$不被观测到,那么$\RSa$和$\RSb$是依赖的,即路径是活跃的。 \emph{(c)}变量$\RSa$和$\RSb$都是$\RSs$的父节点。 这称为V-结构或者碰撞情况。 -根据explaining away作用,V-结构导致$\RSa$和$\RSb$是相关的。 +根据相消解释作用,V-结构导致$\RSa$和$\RSb$是相关的。 在这种情况下,当$\RSs$被观测到时路径是活跃的。 举个例子,假设$\RSs$是一个表示你的同事不在工作的变量。 变量$\RSa$表示她生病了,而变量$\RSb$表示她在休假。 如果你观察到了她不在工作,你可以假设她很有可能是生病了或者是在度假,但是这两件事同时发生是不太可能的。 如果你发现她在休假,那么这个事实足够\emph{解释}她的缺席了。 你可以推断她很可能没有生病。 -\emph{(d)}即使$\RSs$的任意后代都被观察到,explaining away作用也会起作用。 +\emph{(d)}即使$\RSs$的任意后代都被观察到,相消解释作用也会起作用。 举个例子,假设$\RSc$是一个表示你是否收到你同事的报告的一个变量。 如果你注意到你还没有收到这个报告,这会增加你估计的她今天不在工作的概率,这反过来又会增加她今天生病或者度假的概率。 阻塞V-结构中路径的唯一方法就是共享子节点的后代一个都观察不到。} @@ -893,7 +893,7 @@ $E(\RVx)$被称作是能量函数。 这个因子图有一个包含三个变量的因子。 \emph{(右)}对应这个无向模型的另一种有效的因子图。 这个因子图包含了三个因子,每个因子只对应两个变量。 -这个因子图上进行的表示、推断和学习相比于中图描述的因子图都要渐进性地廉价,即使它们表示的是同一个无向模型。} +即使它们表示的是同一个无向模型,这个因子图上进行的表示、推断和学习相比于中图描述的因子图都要渐近地廉价。} \end{figure} diff --git a/docs/_posts/2016-12-17-Chapter17_monte_carlo_methods.md b/docs/_posts/2016-12-17-Chapter17_monte_carlo_methods.md index ea6d0ec..ca029ec 100644 --- a/docs/_posts/2016-12-17-Chapter17_monte_carlo_methods.md +++ b/docs/_posts/2016-12-17-Chapter17_monte_carlo_methods.md @@ -5,15 +5,15 @@ share: false --- -随机算法可以粗略的分为两类:Las Vegas算法和蒙特卡罗算法。 -Las Vegas算法通常精确地返回一个正确答案 (或者发布一个失败报告)。 -这类方法通常需要占用随机量的计算资源(通常指的是内存和运行时间)。 -与此相对的,蒙特卡罗方法返回一个伴随着随机量错误的答案。 -花费更多的计算资源(通常包括内存和运行时间)可以减少这种随机量的错误。 +随机算法可以粗略地分为两类:Las Vegas\,算法和蒙特卡罗算法。 +Las Vegas\,算法总是精确地返回一个正确答案 (或者返回算法失败了)。 +这类方法通常需要占用随机量的计算资源(一般指内存或运行时间)。 +与此相对的,蒙特卡罗方法返回的答案具有随机大小的错误。 +花费更多的计算资源(通常包括内存和运行时间)可以减少这种错误。 在任意固定的计算资源下, 蒙特卡罗算法可以得到一个近似解。 对于机器学习中的许多问题来说,我们很难得到精确的答案。 -这类问题很难用精确的确定性的算法如Las Vegas算法解决。% 和 -> 如 +这类问题很难用精确的确定性算法如\,Las Vegas\,算法解决。 取而代之的是确定性的近似算法或蒙特卡罗近似方法。 这两种方法在机器学习中都非常普遍。 本章主要关注蒙特卡罗方法。 @@ -23,17 +23,17 @@ Las Vegas算法通常精确地返回一个正确答案 (或者发布一个失 # 采样和蒙特卡罗方法 -机器学习中的许多重要工具是基于从某种分布中采样以及用这些样本对目标量做一个蒙特卡罗估计。 +机器学习中的许多重要工具都基于从某种分布中采样以及用这些样本对目标量做一个蒙特卡罗估计。 ## 为什么需要采样? -我们希望从某个分布中采样存在许多理由。 -当我们需要以较小的代价近似许多项的和或某个积分时采样是一种很灵活的选择。 -有时候,我们使用它加速一些很费时却易于处理的和的估计,就像我们使用minibatch对整个训练代价进行子采样一样。 -在其他情况下,我们需要近似一个难以处理的和或积分,例如估计一个无向模型中配分函数对数的梯度时。 -在许多其他情况下,抽样实际上是我们的目标,就像我们想训练一个可以从训练分布采样的模型。 +有许多原因使我们希望从某个分布中采样。 +当我们需要以较小的代价近似许多项的和或某个积分时,采样是一种很灵活的选择。 +有时候,我们使用它加速一些很费时却易于处理的求和估计,就像我们使用小批量对整个训练代价进行子采样一样。 +在其他情况下,我们需要近似一个难以处理的求和或积分,例如估计一个无向模型中配分函数对数的梯度时。 +在许多其他情况下,抽样实际上是我们的目标,例如我们想训练一个可以从训练分布采样的模型。 @@ -53,11 +53,11 @@ s = \int p(\Vx)f(\Vx)d\Vx = E_p[f(\RVx)] 为我们所需要估计的和或者积分,写成期望的形式,$p$是一个关于随机变量$\RVx$的概率分布(求和时)或者概率密度函数(求积分时)。 -我们可以通过从$p$中采集$n$个样本$\Vx^{(1)},\ldots,\Vx^{(n)}$来近似$s$并得到一个经验平均值 +我们可以通过从$p$中抽取$n$个样本$\Vx^{(1)},\ldots,\Vx^{(n)}$来近似$s$并得到一个经验平均值 \begin{align} \hat{s}_n = \frac{1}{n}\sum_{i=1}^{n}f(\Vx^{(i)}). \end{align} -这种近似可以被证明拥有如下几个性质。 +下面几个性质表明了这种近似的合理性。 首先很容易观察到$\hat{s}$这个估计是无偏的,由于 \begin{align} \SetE[\hat{s}_n] = \frac{1}{n}\sum_{i=1}^{n}\SetE[f(\Vx^{(i)})] = \frac{1}{n}\sum_{i=1}^{n}s = s. @@ -67,24 +67,24 @@ s = \int p(\Vx)f(\Vx)d\Vx = E_p[f(\RVx)] \begin{align} \lim_{n\xrightarrow{}\infty} \hat{s}_n = s, \end{align} -只需要满足各个单项的方差,即$\text{Var}[f(\Vx^{(i)})]$有界。 +只需要满足各个单项的方差$\text{Var}[f(\Vx^{(i)})]$有界。 详细地说,我们考虑当$n$增大时$\hat{s}_n$的方差。 只要满足$\text{Var}[f(\RVx^{(i)})]<\infty$,方差$\text{Var}[\hat{s}_n]$就会减小并收敛到$0$: \begin{align} \text{Var}[\hat{s}_n] & = \frac{1}{n^2}\sum_{i=1}^{n}\text{Var}[f(\RVx)]\\ & = \frac{\text{Var}[f(\RVx)]}{n}. \end{align} -这个简单有用的结果启迪我们如何估计蒙特卡罗均值中的不确定性或者等价地说是蒙特卡罗估计的期望误差。 -我们计算了$f(\Vx^{(i)})$的经验均值和方差\footnote{计算无偏估计的方差时,更倾向于用计算偏差平方和除以$n-1$而非$n$。}, +这个简单有用的结果启迪我们如何估计蒙特卡罗均值中的不确定性,或者等价地说是蒙特卡罗估计的期望误差。 +我们计算了$f(\Vx^{(i)})$的经验均值和方差\footnote{通常我们会倾向于计算方差的无偏估计,它由偏差的平方和除以$n-1$而非$n$得到。}, 然后将估计的方差除以样本数$n$来得到$\text{Var}[\hat{s}_n]$的估计。 中心极限定理告诉我们$\hat{s}_n$的分布收敛到以$s$为均值以$\frac{\text{Var}[f(\RVx)]}{n}$为方差的正态分布。 -这使得我们可以利用正态分布的累积密度函数来估计$\hat{s}_n$的置信区间。 +这使得我们可以利用正态分布的累积函数来估计$\hat{s}_n$的置信区间。 以上的所有结论都依赖于我们可以从基准分布$p(\RVx)$中轻易地采样,但是这个假设并不是一直成立的。 -当我们无法从$p$中采样时,一个备选方案是用重要采样,在\sec?会讲到。 -一种更加通用的方式是使用一个趋近于目标分布估计的序列。 +当我们无法从$p$中采样时,一个备选方案是用\sec?讲到的重要采样。 +一种更加通用的方式是构建一个收敛到目标分布的估计序列。 这就是马尔可夫链蒙特卡罗方法(见\sec?)。 @@ -92,20 +92,20 @@ s = \int p(\Vx)f(\Vx)d\Vx = E_p[f(\RVx)] # 重要采样 -如方程~\eq?所示,在蒙特卡罗方法中,对积分(或者和)分解,即确定积分中哪一部分作为概率分布$p(\Vx)$以及哪一部分作为被积的函数$f(\Vx)$(我们感兴趣的是估计$f(\Vx)$在概率分布$p(\Vx)$下的期望)是很关键的一步。 -$p(\Vx)f(\Vx)$存在不唯一的分解因为它通常可以被写成 +如方程~\eq?所示,在蒙特卡罗方法中,对积分(或者和)分解,确定积分中哪一部分作为概率分布$p(\Vx)$以及哪一部分作为被积的函数$f(\Vx)$(我们感兴趣的是估计$f(\Vx)$在概率分布$p(\Vx)$下的期望)是很关键的一步。 +$p(\Vx)f(\Vx)$不存在唯一的分解,因为它总是可以被写成 \begin{align} p(\Vx)f(\Vx) = q(\Vx) \frac{p(\Vx)f(\Vx)}{q(\Vx)}, \end{align} 在这里,我们从$q$分布中采样,然后估计$\frac{pf}{q}$在此分布下的均值。 -许多情况中,给定$p$和$f$的情况下我们希望计算某个期望,这个问题既然是求期望,那么很自然地$p$和$f$是一种分解选择。 -然而,从衡量一定采样数所达到精度的角度说,原始定义的问题通常不是最优的选择。 -幸运的是,最优的选择$q^*$通常可以简单推出。 -这种最优的采样函数$q^*$对应的是所谓的最优重要采样。 +许多情况中,我们希望在给定$p$和$f$的情况下计算某个期望,这个问题既然是求期望,那么很自然地$p$和$f$是一种分解选择。 +然而,如果考虑达到某给定精度所需要的样本数量,这个问题最初的分解选择不是最优的选择。 +幸运的是,最优的选择$q^*$可以被简单地推导出来。 +这种最优的采样函数$q^*$对应所谓的最优重要采样。 -从\eqn?所示的关系中可以发现,任意蒙特卡罗估计 +从\eqn?所示的关系中可以发现,任意蒙特卡罗估计 \begin{align} \hat{s}_p = \frac{1}{n}\sum_{i=1,\Vx^{(i)}\sim p}^{n}f(\Vx^{(i)}) \end{align} @@ -113,11 +113,11 @@ p(\Vx)f(\Vx) = q(\Vx) \frac{p(\Vx)f(\Vx)}{q(\Vx)}, \begin{align} \hat{s}_q = \frac{1}{n}\sum_{i=1,\Vx^{(i)}\sim q}^{n}\frac{p(\Vx^{(i)})f(\Vx^{(i)})}{q(\Vx^{(i)})}. \end{align} -我们可以容易地发现估计值的期望与$q$分布无关: +我们可以容易地发现估计的期望与$q$分布无关: \begin{align} -\SetE_q [\hat{s}_q] = \SetE_p [\hat{s}_p] = s. +\SetE_q [\hat{s}_q] = \SetE_p [\hat{s}_p] = s. \end{align} -然而,重要采样的方差却对不同$q$的选取非常敏感。 +然而,重要采样的方差可能对$q$的选择非常敏感。 这个方差可以表示为 \begin{align} \Var [\hat{s}_q] = \Var \left[\frac{p(\RVx)f(\RVx)}{q(\RVx)}\right]/n. @@ -128,50 +128,49 @@ q^*(\Vx) = \frac{p(\Vx)\vert f(\Vx)\vert}{Z}, \end{align} 在这里$Z$表示归一化常数,选择适当的$Z$使得$q^*(\Vx)$之和或者积分为$1$。 -一个好的重要采样分布会把更多的权重放在被积函数较大的地方。 -事实上,当$f(\Vx)$的正负符号不变时,$\Var[\hat{s}_{q^*}]=0$, 这意味着当使用最优的$q$分布时,\emph{只需要采一个样本就足够了}。 -当然,这仅仅是因为计算$q^*$的时候已经解决了所有的问题。 -所以这种只需要采一个样本的方法往往是实践中无法实现的。 +一个更好的重要采样分布会把更多的权重放在被积函数较大的地方。 +事实上,当$f(\Vx)$的正负符号不变时,$\Var[\hat{s}_{q^*}]=0$, 这意味着当使用最优的$q$分布时,\emph{只需要一个样本就足够了}。 +当然,这仅仅是因为计算$q^*$时已经解决了原问题。 +所以在实践中这种只需要采样一个样本的方法往往是无法实现的。 对于重要采样来说任意$q$分布都是可行的(从得到一个期望上正确的值的角度来说),$q^*$指的是最优的$q$分布(从得到最小方差的角度上考虑)。 -从$q^*$中采样往往是不可行的,但是其他仍然能降低方差的$q$的选择还是可行的。 +从$q^*$中采样往往是不可行的,但是其他仍然能降低方差的$q$的选择还是可行的。 - 另一种方法是采用有偏重要采样,这种方法有一个优势,即不需要归一化的$p$或$q$分布。 -在处理离散变量的时候,有偏重要采样估计可以表示为 +在处理离散变量时,有偏重要采样估计可以表示为 \begin{align} \hat{s}_{\text{BIS}} & = \frac{\sum_{i=1}^{n} \frac{p(\Vx^{(i)})}{q(\Vx^{(i)})} f(\Vx^{(i)})}{\sum_{i=1}^{n}\frac{p(\Vx^{(i)})}{q(\Vx^{(i)})}} \\ & = \frac{\sum_{i=1}^{n} \frac{p(\Vx^{(i)})}{\tilde{q}(\Vx^{(i)})} f(\Vx^{(i)})}{\sum_{i=1}^{n}\frac{p(\Vx^{(i)})}{\tilde{q}(\Vx^{(i)})}} \\ & = \frac{\sum_{i=1}^{n} \frac{\tilde{p}(\Vx^{(i)})}{\tilde{q}(\Vx^{(i)})} f(\Vx^{(i)})}{\sum_{i=1}^{n}\frac{\tilde{p}(\Vx^{(i)})}{\tilde{q}(\Vx^{(i)})}}, \end{align} -其中$\tilde{p}$和$\tilde{q}$分别是分布${p}$和${q}$的未经归一化的形式,$\Vx^{(i)}$是从分布${q}$中采集的样本。 -这种估计是有偏的因为$\SetE[\hat{s}_{\text{BIS}}]\neq s$,除非当$n$渐进性地趋近于$\infty$时,方程~\eq?的分母会收敛到$1$。 -所以这种估计也被叫做渐进性无偏的。 +其中$\tilde{p}$和$\tilde{q}$分别是分布${p}$和${q}$的未经归一化的形式,$\Vx^{(i)}$是从分布${q}$中抽取的样本。 +这种估计是有偏的,因为$\SetE[\hat{s}_{\text{BIS}}]\neq s$,只有当$n \to \infty$且方程~\eqn?的分母收敛到$1$时,等式才渐近地成立。 +所以这一估计也被称为渐近无偏的。 -尽管一个好的$q$分布的选择可以显著地提高蒙特卡罗估计的效率,反之一个糟糕的$q$分布选择则会使效率更糟糕。 -我们回过头来看看方程~\eq?会发现,如果存在一个$q$使得$\frac{p(\Vx)f(\Vx)}{q(\Vx)}$很大,那么这个估计的方差也会很大。 +一个好的$q$分布的选择可以显著地提高蒙特卡罗估计的效率,而一个糟糕的$q$分布选择则会使效率更糟糕。 +我们回过头来看看方程~\eqn?会发现,如果存在一个$q$使得$\frac{p(\Vx)f(\Vx)}{q(\Vx)}$很大,那么这个估计的方差也会很大。 当$q(\Vx)$很小,而$f(\Vx)$和$p(\Vx)$都较大并且无法抵消$q$时,这种情况会非常明显。 $q$分布经常会取一些简单常用的分布使得我们能够从$q$分布中容易地采样。 -当$\Vx$是高维数据的时候,$q$分布的简单性使得它很难于$p$或者$p\vert f\vert$相匹配。 -当$q(\Vx^{(i)})\gg p(\Vx^{(i)}) \vert f(\Vx^{(i)})\vert $的时候,重要采样采到了很多无用的样本(权值之和很小或趋于零)。 -另一方面,当$q(\Vx^{(i)})\ll p(\Vx^{(i)}) \vert f(\Vx^{(i)})\vert $的时候, 样本会很少被采到,其对应的权值却会非常大。 -正因为后一个事件是很少发生的,这些样本很难被采到,通常使得对$s$的估计出现了典型的估计不足,很难被整体的估计过量抵消。 -这样的不均匀情况在高维数据屡见不鲜,因为在高维度分布中联合分布的动态域通常非常大。 +当$\Vx$是高维数据时,$q$分布的简单性使得它很难与$p$或者$p\vert f\vert$相匹配。 +当$q(\Vx^{(i)})\gg p(\Vx^{(i)}) \vert f(\Vx^{(i)})\vert $时,重要采样采到了很多无用的样本(很小的数或零相加)。 +另一种相对少见的情况是$q(\Vx^{(i)})\ll p(\Vx^{(i)}) \vert f(\Vx^{(i)})\vert $,相应的比值会非常大。 +正因为后一个事件是很少发生的,这种样本很难被采到,通常使得对$s$的估计出现了典型的欠估计,很难被整体的过估计抵消。 +这样的不均匀情况在高维数据屡见不鲜,因为在高维度分布中联合分布的动态域可能非常大。 尽管存在上述的风险,但是重要采样及其变种在机器学习的应用中仍然扮演着重要的角色,包括深度学习算法。 -比方说,重要采样被应用于加速训练具有大规模词汇的神经网络语言模型的过程中(见\sec?)或者其他有着大量输出结点的神经网络中。 -此外,还可以看到重要采样应用于估计配分函数(一个概率分布的归一化常数)的过程中(详见\sec?)以及在深度有向图模型比如变分自编码器中估计似然函数的对数(详见\sec?)。 -采用随机梯度下降训练模型参数的时候重要采样可以用来改进对代价函数梯度的估计,尤其是针对于分类器模型的训练中一小部分错误分类样本产生的代价函数。 -在这种情况下更加频繁地采集这些困难的样本可以降低梯度估计的方差{cite?}。 +例如,重要采样被应用于加速训练具有大规模词表的神经网络语言模型的过程中(见\sec?)或者其他有着大量输出结点的神经网络中。 +此外,还可以看到重要采样应用于估计配分函数(一个概率分布的归一化常数),详见\sec?,以及在深度有向图模型比如变分自编码器中估计对数似然(详见\sec?)。 +采用随机梯度下降训练模型参数时重要采样可以用来改进对代价函数梯度的估计,尤其是分类器这样的模型,其中代价函数的大部分代价来自于少量错误分类的样本。 +在这种情况下,更加频繁地抽取这些困难的样本可以减小梯度估计的方差~{cite?}。 @@ -179,54 +178,55 @@ $q$分布经常会取一些简单常用的分布使得我们能够从$q$分布 # 马尔可夫链蒙特卡罗方法 -在许多实例中,我们希望采用蒙特卡罗方法,然而往往又不存在一种直接从目标分布$p_{\text{model}}(\RVx)$中精确采样或者一个好的(方差较小的)重要采样分布$q(\Vx)$。 -在深度学习中,分布$p_{\text{model}}(\RVx)$往往表达成一个无向模型。 -在这种情况下,为了从分布$p_{\text{model}}(\RVx)$中近似采样,我们引入了一种叫做马尔可夫链的数学工具。 -利用马尔可夫链来进行蒙特卡罗估计的这一类算法被称为马尔可夫链蒙特卡罗算法。 -马尔可夫链蒙特卡罗算法在机器学习中的应用在{koller-book2009}中花了大量篇幅描述。 -MCMC算法最标准,最一般的要求是只适用模型分布处处不为$0$的情况。 -因此,最方便的目标分布的表达是从基于能量的模型即$p(\Vx)\propto \exp(-E(\Vx))$中采样,见\sec?。 -在EBM中每一个状态所对应的概率都不为零。 -事实上MCMC方法可以被广泛地应用在了许多包含概率为$0$的状态的概率分布中。 +在许多实例中,我们希望采用蒙特卡罗方法,然而往往又不存在一种简单的方法可以直接从目标分布$p_{\text{model}}(\RVx)$中精确采样或者一个好的(方差较小的)重要采样分布$q(\Vx)$。 +在深度学习中,当分布$p_{\text{model}}(\RVx)$表示成无向模型时,这种情况往往会发生。 +在这种情况下,为了从分布$p_{\text{model}}(\RVx)$中近似采样,我们引入了一种称为马尔可夫链的数学工具。 +利用马尔可夫链来进行蒙特卡罗估计的这一类算法被称为马尔可夫链蒙特卡罗方法。 +{koller-book2009}花了大量篇幅来描述马尔可夫链蒙特卡罗算法在机器学习中的应用。 +MCMC技术最标准、最一般的的理论保证只适用于那些各状态概率均不为零的模型。 +因此,这些技术最方便的使用方法是用于从基于能量的模型即$p(\Vx)\propto \exp(-E(\Vx))$中采样,见\sec?。 +在EBM的公式表述中,每一个状态所对应的概率都不为零。 +事实上,MCMC方法可以被广泛地应用在包含$0$概率状态的许多概率分布中。 然而,在这种情况下,关于MCMC方法性能的理论保证只能依据具体不同类型的分布具体分析证明。 -在深度学习中,应用于所有基于能量的模型的通用理论保证是很常见的。 +在深度学习中,我们通常依赖于那些一般的理论保证,其在所有基于能量的模型都能自然成立。 + -为了解释从基于能量的模型中采样的困难性,我们考虑一个包含两个变量的EBM的例子,记作$p(\RSa,\RSb)$。 -为了采$\RSa$,我们必须先从$p(\RSa\mid \RSb)$中采样,为了采$\RSb$,我们又必须从$p(\RSb\mid \RSa)$中采样。 -这似乎成了难以解释的先有鸡还是先有蛋的问题。 +为了解释从基于能量的模型中采样困难的原因,我们考虑一个包含两个变量的EBM的例子,记$p(\RSa,\RSb)$为其分布。 +为了采$\RSa$,我们必须先从$p(\RSa\mid \RSb)$中采样;为了采$\RSb$,我们又必须从$p(\RSb\mid \RSa)$中采样。 +这似乎成了棘手的先有鸡还是先有蛋的问题。 有向模型避免了这一问题因为它的图是有向无环的。 -为了完成原始采样,我们根据拓扑顺序采样每一个变量,给定每个变量的所有父结点的条件下,这个变量是确定能够被采样的(详见\sec?)。 -原始采样定义了一种高效的,单路径的方法来采集一个样本。 +为了完成原始采样,在给定每个变量的所有父结点的条件下,我们根据拓扑顺序采样每一个变量,这个变量是确定能够被采样的(详见\sec?)。 +原始采样定义了一种高效的、单遍的方法来抽取一个样本。 -在一个EBM中,我们通过使用马尔可夫链来采样,从而避免了先有鸡还是先有蛋的问题。 -马尔可夫链的核心思想是以一个任意状态的点$\Vx$作为起始点。 -随着时间的推移,我们随机地反复地更新状态$\Vx$。 -最终$\Vx$成为了一个从$p(\Vx)$中抽出的(非常接近)比较公正的样本。 +在EBM中,我们通过使用马尔可夫链来采样,从而避免了先有鸡还是先有蛋的问题。 +马尔可夫链的核心思想是从某个可取任意值的状态$\Vx$出发。 +随着时间的推移,我们随机地反复更新状态$\Vx$。 +最终$\Vx$成为了一个从$p(\Vx)$中抽出的(非常接近)比较一般的样本。 %?? 建议 比较公正 换成 标准 在正式的定义中,马尔可夫链由一个随机状态$x$和一个转移分布$T(\Vx'\mid \Vx)$定义而成,$T(\Vx'\mid \Vx)$是一个概率分布,说明了给定状态$\Vx$的情况下随机地转移到$\Vx'$的概率。 -运行一个马尔可夫链意味着根据转移分布$T(\Vx'\mid \Vx)$反复地用状态$\Vx'$来更新状态$\Vx$。 - +运行一个马尔可夫链意味着根据转移分布$T(\RVx' \mid \Vx)$采出的值$\Vx'$来更新状态$\Vx$。 + -为了给出MCMC方法为何有效的一些理论解释,重定义这个问题是很有用的。 +为了给出MCMC方法为何有效的一些理论解释,重参数化这个问题是很有用的。 首先我们关注一些简单的情况,其中随机变量$\RVx$有可数个状态。 -我们将这种状态记作正整数$x$。 +我们将这种状态简单地记作正整数$x$。 不同的整数$x$的大小对应着原始问题中$\Vx$的不同状态。 - + -接下来我们考虑如果并行地运行无穷多个马尔可夫链会发生什么。 -不同马尔可夫链的所有状态都会被某一个分布$q^{(t)}(x)$采到,在这里$t$表示消耗的时间数。 -开始时,对每个马尔可夫链,我们采用一个分布$q^{{0}}$来任意地初始化$x$。 -之后,$q^{(t)}$与所有之前跑过的马尔可夫链有关。 -我们的目标就是$q^{(t)}(x)$收敛到$p(x)$。 - +接下来我们考虑如果并行地运行无穷多个马尔可夫链的情况。 +不同马尔可夫链的所有状态都采样自某一个分布$q^{(t)}(x)$,在这里$t$表示消耗的时间数。 +开始时,对每个马尔可夫链,我们采用一个分布$q^{{0}}$来任意地初始化$x$。 +之后,$q^{(t)}$与所有之前运行的马尔可夫链有关。 +我们的目标是$q^{(t)}(x)$收敛到$p(x)$。 + -因为我们已经用正整数$x$重定义了这个问题,我们可以用一个向量$\Vv$来描述这个概率分布$q$,并且满足 +因为我们已经用正整数$x$重参数化了这个问题,我们可以用一个向量$\Vv$来描述这个概率分布$q$, \begin{align} q(\RSx = i) = v_i. \end{align} @@ -241,89 +241,88 @@ q^{(t+1)}(x') = \sum_{x} q^{(t)}(x) T(x'\mid x). -根据状态为整数的设定,我们可以将转移算子$T$表示成一个矩阵$\MA$。 +根据状态为整数的参数化设定,我们可以将转移算子$T$表示成一个矩阵$\MA$。 矩阵$\MA$的定义如下: \begin{align} \MA_{i,j} = T(\RVx' = i\mid \RVx = j). \end{align} -使用这一定义,我们可以重新写成\eqn?。 -与之前使用$q$和$T$来理解单个状态的更新相对的是,我们现在可以使用$\Vv$和$\MA$来描述当我们更新时(并行运行的)不同个马尔可夫链上整个分布是如何变化的: +使用这一定义,我们可以改写\eqn?。 +不同于之前使用$q$和$T$来理解单个状态的更新,我们现在可以使用$\Vv$和$\MA$来描述当我们更新时(并行运行的)不同马尔可夫链上整个分布是如何变化的: \begin{align} \Vv^{(t)} = \MA \Vv^{(t-1)}. \end{align} -重复地使用马尔可夫链来更新就相当于重复地乘上矩阵$\MA$。 -换一句话说,我们可以认为这一过程就是关于$\MA$的指数变化: +重复地使用马尔可夫链更新相当于重复地与矩阵$\MA$相乘。 +换言之,我们可以认为这一过程就是关于$\MA$的幂乘: \begin{align} \Vv^{(t)} = \MA^{t} \Vv^{(0)}. \end{align} -矩阵$\MA$有一种特殊的结构,因为它的每一列都代表了一个概率分布。 -这样的矩阵被称作是随机矩阵。 -对于任意状态$x$到任意其他状态$x'$存在一个$t$使得转移概率不为$0$,那么Perron-Frobenius定理~{cite?}可以保证这个矩阵的最大特征值是实数且大小为$1$。 -我们可以看到所有的特征值随着时间呈现指数变化: +矩阵$\MA$有一种特殊的结构,因为它的每一列都代表一个概率分布。 +这样的矩阵被称为随机矩阵。 +如果对于任意状态$x$到任意其他状态$x'$存在一个$t$使得转移概率不为$0$,那么Perron-Frobenius定理~{cite?}可以保证这个矩阵的最大特征值是实数且大小为$1$。 +我们可以看到所有的特征值随着时间呈现指数变化: \begin{align} \Vv^{(t)} = (\MV \text{diag}(\Vlambda)\MV^{-1})^{t} \Vv^{(0)} = \MV \text{diag}(\Vlambda)^t \MV^{-1} \Vv^{(0)}. \end{align} - -这个过程导致了所有的不等于$1$的特征值都衰减到$0$。 -在一些额外的较为宽松的假设下,我们可以保证矩阵$\MA$只有一个特征值为$1$。 -所以这个过程收敛到平稳分布,有时也叫做平衡分布。 -收敛时,我们得到 +这个过程导致了所有不等于$1$的特征值都衰减到$0$。 +在一些额外的较为宽松的假设下,我们可以保证矩阵$\MA$只有一个对应特征值为$1$的特征向量。 +所以这个过程收敛到平稳分布,有时也被称为均衡分布。 +收敛时,我们得到 \begin{align} \Vv ' = \MA \Vv = \Vv, \end{align} 这个条件也适用于收敛之后的每一步。 这就是特征向量方程。 -作为收敛的静止点,$\Vv$一定是特征值为$1$所对应的特征向量。 -这个条件保证收敛到了平稳分布以后,之后的采样过程不会改变不同马尔可夫链的状态分布(尽管转移算子自然而然地会改变每个单独的状态)。 +作为收敛的稳定点,$\Vv$一定是特征值为$1$所对应的特征向量。 +这个条件保证收敛到了平稳分布以后,再重复转移采样过程不会改变所有不同马尔可夫链上状态的\emph{分布}(尽管转移算子自然而然地会改变每个单独的状态)。 -如果我们正确地选择了转移算子$T$,那么最终的平稳分布 $q$将会等于我们所希望采样的分布$p$。 -我们会简要地介绍如何选择$T$,详见\sec?。 + +如果我们正确地选择了转移算子$T$,那么最终的平稳分布$q$将会等于我们所希望采样的分布$p$。 +我们会将\sec?介绍如何选择$T$。 -可数状态马尔可夫链的大多数性质可以被推广到连续状态的马尔可夫链中。 -在这种情况下,一些研究者把这种马尔可夫链叫做哈里斯链,但是这两种情况我们都用马尔可夫链来表示。 -通常情况下,在一些宽松的条件下,一个带有转移算子$T$的马尔可夫链都会收敛到一个固定点,这个固定点可以写成如下形式: +可数状态马尔可夫链的大多数性质可以被推广到连续状态的马尔可夫链中。 +在这种情况下,一些研究者把这种马尔可夫链称为哈里斯链,但是我们将这两种情况都称为马尔可夫链。 +通常在一些宽松的条件下,一个带有转移算子$T$的马尔可夫链都会收敛到一个不动点,这个不动点可以写成如下形式: \begin{align} q' (\RVx') = \SetE_{\RVx\sim q}T(\RVx'\mid \RVx), \end{align} -这个方程的离散版本就是方程~\eq?。 -当$\RVx$离散时,这个期望对应着求和,而当$\RVx$连续时,这个期望对应的是积分。 +这个方程的离散版本就相当于重新改写方程~\eqn?。 +当$\RVx$是离散值时,这个期望对应着求和,而当$\RVx$是连续值时,这个期望对应的是积分。 - -无论状态是连续还是离散,所有的马尔可夫链方法都包括了重复,随机地更新直到最终所有的状态开始从平衡分布中采样。 -运行马尔可夫链直到它达到平衡分布的过程通常被叫做马尔可夫链的预烧过程。 -在马尔可夫链达到平衡分布之后,我们可以从平衡分布中采集一个无限多数量的样本序列。 -这些样本服从同一分布,但是两个连续的样本之间存在强烈的相关性。 -所以一个有限的序列无法完全表达平衡分布。 -一种解决这个问题的方法是每隔$n$个样本返回一个样本,从而使得我们对于平衡分布的统计量的估计不会被MCMC方法的样本之间的相关性所干扰。 -所以马尔可夫链在计算上是非常昂贵的,主要源于达到平衡分布前需要预烧的时间以及在达到平衡分布之后从一个样本转移到另一个完全无关的样本所需要的时间。 -如果我们想要得到完全独立的样本,那么我们需要同时并行的运行多个马尔可夫链。 -这种方法使用了额外的并行计算来消除潜在因素的干扰。 +无论状态是连续的还是离散的,所有的马尔可夫链方法都包括了重复、随机地更新直到最后状态开始从均衡分布中采样。 +运行马尔可夫链直到它达到均衡分布的过程通常被称为马尔可夫链的磨合过程。 +在马尔可夫链达到均衡分布之后,我们可以从均衡分布中抽取一个无限多数量的样本序列。 +这些样本服从同一分布,但是两个连续的样本之间会高度相关。 +所以一个有限的序列无法完全表达均衡分布。 +一种解决这个问题的方法是每隔$n$个样本返回一个样本,从而使得我们对于均衡分布的统计量的估计不会被\,MCMC\,方法的样本之间的相关性所干扰。 +所以马尔可夫链的计算代价很高,主要源于达到均衡分布前需要磨合的时间以及在达到均衡分布之后从一个样本转移到另一个足够无关的样本所需要的时间。 +如果我们想要得到完全独立的样本,那么我们可以同时并行地运行多个马尔可夫链。 +这种方法使用了额外的并行计算来减少时延。 使用一条马尔可夫链来生成所有样本的策略和(使用多条马尔可夫链)每条马尔可夫链只产生一个样本的策略是两种极端。 -深度学习的研究者们通常选取的马尔可夫链的数目和minibatch中的样本数相近,然后从这些固定的马尔可夫链集合中采集所需要的样本。 +深度学习的从业者们通常选取的马尔可夫链的数目和小批量中的样本数相近,然后从这些固定的马尔可夫链集合中抽取所需要的样本。 马尔可夫链的数目通常选为$100$。 -另一个难点是我们无法预先知道马尔可夫链需要运行多少步才能到达平衡分布。 +另一个难点是我们无法预先知道马尔可夫链需要运行多少步才能到达均衡分布。 这段时间通常被称为混合时间。 检测一个马尔可夫链是否达到平衡是很困难的。 我们并没有足够完善的理论来解决这个问题。 理论只能保证马尔可夫链会最终收敛,但是无法保证其他。 -如果我们从矩阵$\MA$作用在概率向量$\Vv$上的角度来分析马尔可夫链,那么我们可以发现当$\MA^t$除了单个$1$以外的特征值都趋于$0$时,马尔可夫链混合成功(收敛到了平衡分布)。 +如果我们从矩阵$\MA$作用在概率向量$\Vv$上的角度来分析马尔可夫链,那么我们可以发现当$\MA^t$除了单个$1$以外的特征值都趋于$0$时,马尔可夫链混合成功(收敛到了均衡分布)。 这也意味着矩阵$\MA$的第二大特征值决定了马尔可夫链的混合时间。 -然而,在实践中,我们通常不能将马尔可夫链表示成为矩阵的形式。 -我们的概率模型所能够达到的状态是变量数的指数级别,所以表达$\Vv$、$\MA$或者$\MA$的特征值是不现实的。 -由于这些阻碍,我们通常无法知道马尔可夫链是否已经混合成功。 -作为替代,我们只能运行一定量时间马尔可夫链直到我们粗略估计这段时间是足够的,然后使用启发式的方法来决定马尔可夫链是否混合成功。 -这些启发性的算法包括了手动检查样本或者衡量连续样本之间的相关性。 +然而,在实践中,我们通常不能真的将马尔可夫链表示成矩阵的形式。 +我们的概率模型所能够达到的状态是变量数的指数级别,所以表达$\Vv$,$\MA$或者$\MA$的特征值是不现实的。 +由于以上在内的诸多阻碍,我们通常无法知道马尔可夫链是否已经混合成功。 +作为替代,我们只能运行一定量时间马尔可夫链直到我们粗略估计这段时间是足够的,然后使用启发式的方法来判断马尔可夫链是否混合成功。 +这些启发性的算法包括了手动检查样本或者衡量前后样本之间的相关性。 @@ -332,13 +331,13 @@ q' (\RVx') = \SetE_{\RVx\sim q}T(\RVx'\mid \RVx), # Gibbs采样 -截至目前我们已经了解了如何通过反复地更新$\Vx \xleftarrow{} \Vx'\sim T(\Vx'\mid\Vx)$从一个分布$q(\Vx)$中采样。 -然而我们还没有提到过如何确定一个有效的$q(\Vx)$分布。 -本书中描述了两种基本的方法。 +目前为止我们已经了解了如何通过反复更新$\Vx \xleftarrow{} \Vx'\sim T(\Vx'\mid\Vx)$从一个分布$q(\Vx)$中采样。 +然而我们还没有介绍过如何确定$q(\Vx)$是否是一个有效的分布。 +本书中将会描述两种基本的方法。 第一种方法是从已经学习到的分布$p_{\text{model}}$中推导出$T$,下文描述了如何从基于能量的模型中采样。 第二种方法是直接用参数描述$T$,然后学习这些参数,其平稳分布隐式地定义了我们所感兴趣的模型$p_{\text{model}}$。 -我们将在\sec?和\sec?中讨论第二种方法的例子。 - +我们将在\sec?和\sec?中讨论第二种方法的例子。 + 在深度学习中,我们通常使用马尔可夫链从定义为基于能量的模型的分布$p_{\text{model}}(\Vx)$中采样。 @@ -348,18 +347,18 @@ q' (\RVx') = \SetE_{\RVx\sim q}T(\RVx'\mid \RVx), Gibbs采样是一种概念简单而又有效的方法。 -它构造一个从$p_{\text{model}}(\Vx)$中采样的马尔可夫链,其中在基于能量的模型中从$T(\RVx'\mid \RVx)$采样是通过选择一个变量$\RSx_i$,然后从$p_{\text{model}}$中该点关于在无向图$\CalG$(定义了基于能量的模型结构)中邻接点的条件分布中抽样。 -给定他们所有的邻居结点只要一些变量是条件独立的,那么这些变量可以被同时采样。 -正如在\sec?中看到的RBM的例子一样,RBM所有的隐藏单元可以被同时采样,因为在给定可见单元的条件下他们相互条件独立。 -同样的,所有的可见单元也可以被同时采样因为在给定隐藏单元的情况下他们相互条件独立。 -像这样的同时更新许多变量的Gibbs采样通常被叫做块吉布斯采样。 - - -设计从$p_{\text{model}}$中采样的马尔可夫链还存在另外的备选方法。 -比如说,Metropolis-Hastings算法在其他情景下被广泛使用。 -在深度学习的无向模型中,除了Gibbs采样很少使用其他的方法。 +它构造一个从$p_{\text{model}}(\Vx)$中采样的马尔可夫链,其中在基于能量的模型中从$T(\RVx'\mid \RVx)$采样是通过选择一个变量$\RSx_i$,然后从$p_{\text{model}}$中该点关于在无向图$\CalG$(定义了基于能量的模型结构)中邻接点的条件分布中采样。 +只要一些变量在给定相邻变量时是条件独立的,那么这些变量就可以被同时采样。 +正如在\sec?中看到的RBM示例一样,RBM中所有的隐藏单元可以被同时采样,因为在给定所有可见单元的条件下它们相互条件独立。 +同样地,所有的可见单元也可以被同时采样,因为在给定所有隐藏单元的情况下它们相互条件独立。 +以这种方式同时更新许多变量的\,Gibbs采样通常被称为块吉布斯采样。 + + +设计从$p_{\text{model}}$中采样的马尔可夫链还存在其他备选方法。 +比如说,Metropolis-Hastings算法在其他领域中广泛使用。 +不过在深度学习的无向模型中,我们主要使用\,Gibbs采样,很少使用其他方法。 改进采样技巧也是一个潜在的研究热点。 - + @@ -367,25 +366,26 @@ Gibbs采样是一种概念简单而又有效的方法。 -使用MCMC方法的主要难点在于他们经常混合得很糟糕。 -理想情况下,从设计好的马尔可夫链中采出的连续样本之间是完全独立的,而且在$\Vx$空间中,马尔可夫链以正比于不同区域对应概率的概率访问这些区域。 -然而,MCMC方法采出的样本可能会具有很强的相关性,尤其是在高维的情况下。 +使用\,MCMC\,方法的主要难点在于马尔可夫链的混合通常不理想。 +在理想情况下,从设计好的马尔可夫链中采出的连续样本之间是完全独立的,而且在$\Vx$空间中,马尔可夫链会按概率大小访问许多不同区域。 + +然而,\,MCMC\,方法采出的样本可能会具有很强的相关性,尤其是在高维的情况下。 我们把这种现象称为慢混合甚至混合失败。 -具有缓慢混合的MCMC方法可以被视为对能量函数无意地执行类似于带噪声的梯度下降的操作,或者说等价于相对于链的状态(随机变量被采样)依据概率进行等效的噪声爬坡。 +具有缓慢混合的\,MCMC\,方法可以被视为对能量函数无意地执行类似于带噪声的梯度下降的操作,或者说等价于相对于链的状态(被采样的随机变量)依据概率进行噪声爬坡。 (在马尔可夫链的状态空间中)从$\Vx^{(t-1)}$到$\Vx^{(t)}$该链倾向于选取很小的步长,其中能量$E(\Vx^{(t)})$通常低于或者近似等于能量$E(\Vx^{(t-1)})$, 倾向于向较低能量的区域移动。 -当从可能性较小的状态(比来自$p(\Vx)$的典型样本拥有更高的能量)开始时,链趋向于逐渐减少状态的能量,并且仅仅偶尔移动到另一个峰值。 -一旦该链已经找到低能量的区域(例如,如果变量是图像中的像素,则低能量的区域可以是同一对象所对应图像的一个相连的流形),我们称之为峰值,链将倾向于围绕着这个峰值游走(以某一种形式的随机游走)。 +当从可能性较小的状态(比来自$p(\Vx)$的典型样本拥有更高的能量)开始时,链趋向于逐渐减少状态的能量,并且仅仅偶尔移动到另一个峰值。 +一旦该链已经找到低能量的区域(例如,如果变量是图像中的像素,则低能量的区域可以是同一对象所对应图像的一个连通的流形),我们称之为峰值,链将倾向于围绕着这个峰值游走(按某一种形式随机游走)。 它时不时会走出该峰值,但是结果通常会返回该峰值或者(如果找到一条离开的路线)移向另一个峰值。 问题是对于很多有趣的分布来说成功的离开路线很少,所以马尔可夫链将在一个峰值附近抽取远超过需求的样本。 -当考虑到Gibbs采样算法(见\sec?)时,这种现象格外明显。 +当我们考虑Gibbs采样算法(见\sec?)时,这种现象格外明显。 在这种情况下,我们考虑在一定步数内从一个峰值移动到一个临近峰值的概率。 决定这个概率的是两个峰值之间的"能量障碍"的形状。 -隔着一个巨大"能量障碍" (低概率的区域)的两个峰值之间的转移概率是(随着能量障碍的高度)指数下降的,如在\fig?中展示的一样。 -当目标分布有很多峰值并且以很高的概率被低概率区域所分割,尤其当Gibbs采样的每一步都只是更新变量的一小部分而这一小部分变量又严重依赖其他的变量时,这会导致严重的问题。 +隔着一个巨大"能量障碍" (低概率的区域)的两个峰值之间的转移概率是(随着能量障碍的高度)指数下降的,如\fig?所示。 +当目标分布有多个高概率峰值并且被低概率区域所分割,尤其当\,Gibbs采样的每一步都只是更新变量的一小部分而这一小部分变量又严重依赖其他的变量时,就会产生问题。 @@ -396,41 +396,43 @@ Gibbs采样是一种概念简单而又有效的方法。 \else \centerline{\includegraphics{Chapter17/figures/good_bad_really_bad_mixing_color}} \fi -\caption{对于三种分布使用Gibbs采样所产生的路径,所有的分布马尔可夫链初始值都设为峰值。 -(左)一个带有两个独立变量的多维正态分布。 +\caption{对于三种分布使用\,Gibbs采样所产生的路径,所有的分布马尔可夫链初始值都设为峰值。 +\emph{(左)}一个带有两个独立变量的多维正态分布。 由于变量之间是相互独立的,Gibbs采样混合得很好。 -(中)变量之间存在高度相关性的一个多维正态分布。 +\emph{(中)}变量之间存在高度相关性的一个多维正态分布。 变量之间的相关性使得马尔可夫链很难混合。 因为每一个变量的更新需要相对其他变量求条件分布,相关性减慢了马尔可夫链远离初始点的速度。 -(右)峰值之间间距很大且不在轴上对齐的混合高斯分布。 +\emph{(右)}\,峰值之间间距很大且不在轴上对齐的混合高斯分布。 Gibbs采样混合得很慢,因为每次更新仅仅一个变量很难跨越不同的峰值。} \end{figure} -举一个简单的例子,考虑两个变量$\RSa$, $\RSb$的基于能量的模型,这两个变量都是二元的,取值$+1$或者$-1$。 -如果对某个较大的正数$w$, $E(\RSa,\RSb) = - w \RSa \RSb$,那么这个模型传达了一个强烈的信息,$\RSa$和$\RSb$有相同的符号。 -当$\RSa=1$时用Gibbs采样更新$\RSb$。 +举一个简单的例子,考虑两个变量$\RSa$,$\RSb$的基于能量的模型,这两个变量都是二值的,取值$+1$或者$-1$。 %?? +如果对某个较大的正数$w$,$E(\RSa,\RSb) = - w \RSa \RSb$,那么这个模型传达了一个强烈的信息,$\RSa$和$\RSb$有相同的符号。 +当$\RSa=1$时用\,Gibbs采样更新$\RSb$。 给定$\RSb$时的条件分布满足$p(\RSb=1\mid \RSa=1) = \sigma(w)$。 -如果$w$的值很大,sigmoid函数趋近于饱和,那么$b$取到$1$的概率趋近于$1$。 -相同的道理,如果$\RSa=-1$,那么$\RSb$取到$-1$的概率也趋于$1$。 +如果$w$的值很大,sigmoid函数趋近于饱和,那么$b$也取到$1$的概率趋近于$1$。 +同理,如果$\RSa=-1$,那么$\RSb$取到$-1$的概率也趋于$1$。 根据模型$p_{\text{model}}(\RSa,\RSb)$,两个变量取一样的符号的概率几乎相等。 根据$p_{\text{model}}(\RSa\mid \RSb)$,两个变量应该有相同的符号。 -这也意味着Gibbs采样很难会改变这些变量的符号。 +这也意味着\,Gibbs采样很难会改变这些变量的符号。 -在实际问题中,这种挑战更加地艰巨因为在实际问题中我们不能仅仅关注在两个峰值之间的转移而是需要关注在多个峰值之间地转移。 -如果由于峰值之间混合困难导致几个这样的转移是很艰难的,那么得到一些可靠的覆盖大部分峰值的样本集合的代价是很昂贵的,同时马尔可夫链收敛到它的平稳分布的过程也会非常缓慢。 +在更实际的问题中,这种挑战更加艰巨因为在实际问题中我们不能仅仅关注在两个峰值之间的转移,更要关注在多个峰值之间的转移。 +如果由于峰值之间混合困难,而导致某几个这样的转移难以完成,那么得到一些可靠的覆盖大部分峰值的样本集合的计算代价是很高的,同时马尔可夫链收敛到它的平稳分布的过程也会非常缓慢。 -通过寻找一些高度依赖变量的组以及分块同时更新块(组)中的变量,这个问题有时候可以被解决的。 -然而不幸的是,当依赖关系很复杂的时候,从这些组中采样的过程从计算角度上说是难以处理的。 +通过寻找一些高度依赖变量的组以及分块同时更新块(组)中的变量,这个问题有时候是可以被解决的。 +然而不幸的是,当依赖关系很复杂时,从这些组中采样的过程从计算角度上说是难以处理的。 归根结底,马尔可夫链最初就是被提出来解决这个问题,即从大量变量中采样的问题。 -含有潜变量的模型中定义了一个联合分布$p_{\text{model}}(\Vx,\Vh)$,我们经常通过交替地从$p_{\text{model}}(\Vx\mid \Vh)$和$p_{\text{model}}(\Vh\mid \Vx)$中采样来达到抽$\Vx$的目的。 + + +在定义了一个联合分布$p_{\text{model}}(\Vx,\Vh)$的潜变量模型中,我们经常通过交替地从$p_{\text{model}}(\Vx\mid \Vh)$和$p_{\text{model}}(\Vh\mid \Vx)$中采样来达到抽$\Vx$的目的。 从快速混合的角度上说,我们更希望$p_{\text{model}}(\Vh\mid \Vx)$有很大的熵。 -然而,从学习一个$\Vh$的有用表示的角度上考虑,我们还是希望$\Vh$能够包含$\Vx$的足够信息从而能够较完整地重构它,这意味$\Vh$和$\Vx$有着非常高的互信息。 +然而,从学习一个$\Vh$的有用表示的角度上考虑,我们还是希望$\Vh$能够包含$\Vx$的足够信息从而能够较完整地重构它,这意味$\Vh$和$\Vx$要有非常高的互信息。 这两个目标是相互矛盾的。 我们经常学习到能够将$\Vx$精确地编码为$\Vh$的生成模型,但是无法很好混合。 这种情况在玻尔兹曼机中经常出现,一个玻尔兹曼机学到的分布越尖锐,该分布的马尔可夫链采样越难混合得好。 @@ -451,19 +453,19 @@ Gibbs采样混合得很慢,因为每次更新仅仅一个变量很难跨越不 \fi \caption{深度概率模型中一个混合缓慢问题的例证。 每张图都是按照从左到右从上到下的顺序的。 -(左)Gibbs采样从MNIST数据集训练成的深度玻尔兹曼机中采出的连续样本。 +\emph{(左)}\,Gibbs采样从MNIST数据集训练成的深度玻尔兹曼机中采出的连续样本。 这些连续的样本之间非常相似。 -由于Gibbs采样作用于一个深度图模型,相似度更多地是基于语义而非原始视觉特征。 +由于\,Gibbs采样作用于一个深度图模型,相似度更多地是基于语义而非原始视觉特征。 但是对于吉布斯链来说从分布的一个峰值转移到另一个仍然是很困难的,比如说改变数字。 -(右)从生成式对抗网络中抽出的连续原始样本。 +\emph{(右)}从生成式对抗网络中抽出的连续原始样本。 因为原始采样生成的样本之间互相独立,所以不存在混合问题。 -{译者注:原书此处左右搞反了。}} %?? +{译者注:原书此处左右搞反了。}} \end{figure} -当感兴趣的分布对于每个类具有单独的流形结构时,所有这些问题可以使MCMC方法不那么有用:分布集中在许多峰值周围,并且这些模式由大量高能量区域分割。 +当感兴趣的分布对于每个类具有单独的流形结构时,所有这些问题都使\,MCMC\,方法变得不那么有用:分布集中在许多峰值周围,并且这些峰值由大量高能量区域分割。 我们在许多分类问题中遇到的是这种类型的分布,由于峰值之间混合缓慢,它将使得MCMC方法非常缓慢地收敛。 @@ -474,10 +476,10 @@ Gibbs采样混合得很慢,因为每次更新仅仅一个变量很难跨越不 -当一个分布有一些陡峭的峰并且被低概率区域包围时,很难在分布的不同峰值之间混合。 -一些加速混合的方法是基于构造一个不同的概率分布,这个概率分布的峰值没有那么高,峰值周围的低谷也没有那么低。 +当一个分布有一些陡峭的峰并且被低概率区域包围时,很难在分布的不同峰值之间混合。 %?? 峰值 +一些加速混合的方法是基于构造一个概率分布替代目标分布,这个概率分布的峰值没有那么高,峰值周围的低谷也没有那么低。 基于能量的模型为这个想法提供一种简单的做法。 -截止目前,我们已经描述了一个基于能量的模型的概率分布的定义: +目前为止,我们一直将基于能量的模型描述为定义一个概率分布: \begin{align} p(\Vx) \propto \exp(-E(\Vx)). \end{align} @@ -485,57 +487,44 @@ p(\Vx) \propto \exp(-E(\Vx)). \begin{align} p_{\beta}(\Vx) \propto \exp(-\beta E(\Vx)). \end{align} -$\beta$参数可以被理解为温度的倒数,在统计物理中反映了基于能量的模型的本质。 +$\beta$参数可以被理解为温度的倒数,反映了基于能量的模型的统计物理学起源。 当温度趋近于0时,$\beta$趋近于无穷大,此时的基于能量的模型是确定性的。 当温度趋近于无穷大时,$\beta$趋近于零,基于能量的模型(对离散的$\Vx$)成了均匀分布。 通常情况下,在$\beta = 1$时训练一个模型。 -然而,我们利用了其他温度,尤其是$\beta < 1$的情况。 +但我们也可以利用其他温度,尤其是$\beta < 1$的情况。 回火作为一种通用的策略,它通过从$\beta<1$模型中采样来实现在$p_1$的不同峰值之间快速混合。 -基于回火转移~{cite?}的马尔可夫链初始从高温度的分布中采样使其在不同峰值之间混合,然后从单位温度的分布中重新开始。 -这些技巧被应用在一些模型比如RBM中~{cite?}。 +基于回火转移~{cite?}的马尔可夫链临时从高温度的分布中采样使其在不同峰值之间混合,然后继续从单位温度的分布中采样。 +这些技巧被应用在一些模型比如\,RBM中~{cite?}。 另一种方法是利用并行回火~{cite?}。 其中马尔可夫链并行地模拟许多不同温度的不同状态。 最高温度的状态混合较慢,相比之下最低温度的状态,即温度为$1$时,采出了精确的样本。 转移算子包括了两个温度之间的随机跳转,所以一个高温度状态分布槽中的样本有足够大的概率跳转到低温度分布的槽中。 -这个方法也被应用到了RBM中~{cite?}。 +这个方法也被应用到了\,RBM中~{cite?}。 尽管回火这种方法前景可期,现今它仍然无法让我们在采样复杂的基于能量的模型中更进一步。 -一个可能的原因是在临界温度时温度转移算子必须设置的非常慢(因为温度需要逐渐下降)来确保回火的有效性。 +一个可能的原因是在临界温度时温度转移算子必须设置得非常慢(因为温度需要逐渐下降)来确保回火的有效性。 - ## 深度也许会有助于混合 -当我们从潜变量模型$p(\Vh,\Vx)$中采样的时候,我们可以发现如果$p(\Vh\mid \Vx)$将$\Vx$编码得非常好,那么从$p(\Vx \mid \Vh)$中采样的时候,并不会太大地改变$\Vx$,那么混合结果会很糟糕。 -解决这个问题的一种方法是使得$\Vh$成为一种将$\Vx$编码为$\Vh$的深度表达,从而使得马尔可夫链在$\Vh$空间中更容易混合。 - 在许多表示学习算法诸如自编码器和RBM中,$\Vh$的边缘分布相比于关于$\Vx$的原始数据分布,通常表现为更加均匀、更趋近于单峰值。 -值得指出的是,这些方法往往利用所有可用的表达空间并尽量减小重构误差。 +当我们从潜变量模型$p(\Vh,\Vx)$中采样时,我们可以发现如果$p(\Vh\mid \Vx)$将$\Vx$编码得非常好,那么从$p(\Vx \mid \Vh)$中采样时,并不会太大地改变$\Vx$,那么混合结果会很糟糕。 +解决这个问题的一种方法是使得$\Vh$成为一种将$\Vx$编码为$\Vh$的深度表示,从而使得马尔可夫链在$\Vh$空间中更容易混合。 +在许多表示学习算法如自编码器和\,RBM中,$\Vh$的边缘分布相比于$\Vx$上的原始数据分布,通常表现为更加均匀、更趋近于单峰值。 +或许可以说,这是因为利用了所有可用的表示空间并尽量减小重构误差。 因为当训练集上的不同样本之间在$\Vh$空间能够被非常容易地区分时,我们也会很容易地最小化重构误差。 -{Bengio-et-al-ICML2013-small}观察到这样的现象,堆叠越深的正则化自编码器或者RBM,顶端$\Vh$空间的边缘分布越趋向于均匀和发散,而且不同峰值(比如说实验中的类别)所对应区域之间的间距也会越模糊。 -在高层次的空间训练RBM使得Gibbs采样混合得更快。 +{Bengio-et-al-ICML2013-small}观察到这样的现象,堆叠越深的正则化自编码器或者\,RBM,顶端$\Vh$空间的边缘分布越趋向于均匀和发散,而且不同峰值(比如说实验中的类别)所对应区域之间的间距也会越小。 +在高层空间中训练\,RBM会使得\,Gibbs采样在峰值间混合得更快。 然而,如何利用这种观察到的现象来辅助训练深度生成模型或者从中采样仍然有待探索。 -尽管存在混合的难点,蒙特卡罗技巧仍然是一个有用的也是最好的可用工具。 -事实上,在遇到难以处理的无向模型中的配分函数时,蒙特卡罗方法仍然是最基础的工具,这将在下一章详细阐述。 +尽管存在混合的难点,蒙特卡罗技术仍然是一个有用的工具,通常也是最好的可用工具。 +事实上,在遇到难以处理的无向模型中的配分函数时,蒙特卡罗方法仍然是最主要的工具,这将在下一章详细阐述。 - - - - - - - - - - - - diff --git a/docs/_posts/2016-12-18-Chapter18_confronting_the_partition_function.md b/docs/_posts/2016-12-18-Chapter18_confronting_the_partition_function.md index 3461fc5..6483bfd 100644 --- a/docs/_posts/2016-12-18-Chapter18_confronting_the_partition_function.md +++ b/docs/_posts/2016-12-18-Chapter18_confronting_the_partition_function.md @@ -24,7 +24,7 @@ share: false 正如我们将在\chap?看到的,有些深度学习模型被设计成具有一个易于处理的归一化常数,或被设计成能够在不涉及计算$p(\RVx)$的情况下使用。 然而,其他一些模型会直接面对难以计算的配分函数的挑战。 -在本章中,我们会介绍用于训练和评估具有难以计算配分函数的模型的技术。 +在本章中,我们会介绍用于训练和评估那些具有难以处理的配分函数的模型的技术。 @@ -83,12 +83,12 @@ RBM\,的隐藏单元在给定可见单元的情况下彼此条件独立,是一 上述推导对离散的$\Vx$进行求和,对连续的$\Vx$进行积分也可以得到类似结果。 -在连续版本的推导中,使用在积分符号內取微分的莱布尼兹法则可以得到等式 +在连续版本的推导中,使用在积分符号内取微分的莱布尼兹法则可以得到等式 \begin{equation} \nabla_{\Vtheta} \int \tilde{p} (\RVx) d \Vx = \int \nabla_{\Vtheta} \tilde{p} (\RVx) d \Vx. \end{equation} -该等式只适用于$\tilde{p}$和$\nabla_{\Vtheta} \tilde{p} (\RVx)$上的一些特定正则条件。 +该等式只适用于$\tilde{p}$和$\nabla_{\Vtheta} \tilde{p} (\RVx)$上的一些特定规范条件。 在测度论术语中,这些条件是: (1)对每一个$\Vtheta$而言,未归一化分布$\tilde{p}$必须是$\Vx$的勒贝格可积函数。 (2)对于所有的$\Vtheta$和几乎所有$\Vx$,梯度$\nabla_{\Vtheta} \tilde{p}(\RVx)$必须存在。 @@ -96,7 +96,7 @@ RBM\,的隐藏单元在给定可见单元的情况下彼此条件独立,是一 幸运的是,大多数感兴趣的机器学习模型都具有这些性质。 -这个等式 +等式 \begin{equation} \nabla_{\Vtheta} \log Z = \SetE_{\RVx \sim p(\RVx)} \nabla_{\Vtheta} \log \tilde{p}(\RVx) \end{equation} @@ -120,7 +120,8 @@ RBM\,的隐藏单元在给定可见单元的情况下彼此条件独立,是一 当使用随机梯度下降进行学习时,这意味着马尔可夫链必须在每次梯度步骤中磨合。 这种方法引导下的训练过程如\alg?所示。 内循环中磨合马尔可夫链的计算代价过高,导致这个过程在实际中是不可行的, -不过该过程启发了其他计算代价较低的近似算法。 +但是这个过程是其他更加实际的近似算法的基础。 + \begin{algorithm}[ht] @@ -144,11 +145,11 @@ RBM\,的隐藏单元在给定可见单元的情况下彼此条件独立,是一 \end{algorithm} -我们可以将\,MCMC\,方法视为在两种力之间平衡最大似然,一种力拉高数据出现时的模型分布,一种拉低模型采样出现时的模型分布。 +我们可以将最大化似然的\,MCMC\,方法视为在两种力之间平衡,一种力拉高数据出现时的模型分布,一种拉低模型采样出现时的模型分布。%?? 从而最大化似然 还是 将最大似然提前? \fig?展示了这个过程。 这两种力分别对应最大化$\log \tilde{p}$和最小化$\log Z$。 -对于负相会有一些近似。 -这些近似都可以理解为使负相更容易计算,但是也可能将其推向错误的位置。 +对于负相会有一些近似方法。 +这些近似都可以被理解为使负相更容易计算,但是也可能将其推向错误的位置。%?? push down 翻成 拉低/压低 ?推向 不对吧? push 翻成 推 可以啊 \begin{figure}[!htb] \ifOpenSource @@ -164,17 +165,17 @@ RBM\,的隐藏单元在给定可见单元的情况下彼此条件独立,是一 此时,不再有任何的梯度(期望上说),训练也必须停止。} \end{figure} - -因为负相涉及到从模型分布中采样,所以我们可以认为它在找模型信任度很高的点。 + +因为负相涉及到从模型分布中抽样,所以我们可以认为它在找模型信任度很高的点。 因为负相减少了这些点的概率,它们一般被认为代表了模型不正确的信念。 在文献中,它们经常被称为"幻觉"或"幻想粒子"。 -事实上,负相已经被作为人类和其他动物做梦的一种可能解释{cite?}。 +事实上,负相已经被作为人类和其他动物做梦的一种可能解释~{cite?}。 这个想法是说,大脑维持着世界的概率模型,并且在醒着经历真实事件时会遵循$\log \tilde{p}$的梯度,在睡觉时会遵循$\log \tilde{p}$的负梯度最小化$\log Z$,其经历的样本采样自当前的模型。 这个视角解释了具有正相和负相的大多数算法,但是它还没有被神经科学实验证明是正确的。 在机器学习模型中,通常有必要同时使用正相和负相,而不是按不同时间阶段分为清醒和REM睡眠时期。 正如我们将在\sec?中看到的,一些其他机器学习算法出于其他原因从模型分布中采样,这些算法也能提供睡觉做梦的解释。 - + 这样理解学习正相和负相的作用之后,我们设计了一个比\alg?计算代价更低的替代算法。 简单的\,MCMC\,算法的计算成本主要来自每一步的随机初始化磨合马尔可夫链。 @@ -203,22 +204,22 @@ RBM\,的隐藏单元在给定可见单元的情况下彼此条件独立,是一 \end{algorithmic} \end{algorithm} - -\textbf{对比散度}(CD,或者是具有$k$个Gibbs步骤的CD-$k$)算法在每个步骤中初始化马尔可夫链为采样自数据分布中的样本{cite?},如\alg?所示。 + +\textbf{对比散度}(CD,或者是具有$k$个Gibbs步骤的CD-$k$)算法在每个步骤中初始化马尔可夫链为采样自数据分布中的样本~{cite?},如\alg?所示。 从数据分布中获取样本是计算代价最小的,因为它们已经在数据集中了。 初始时,数据分布并不接近模型分布,因此负相不是非常准确。 幸运的是,正相仍然可以准确地增加数据的模型概率。 进行正相阶段一段时间之后,模型分布会更接近于数据分布,并且负相开始变得准确。 + - -当然,CD\,仍然是负相的一个近似。 +当然,CD\,仍然是真实负相的一个近似。 CD\,未能定性地实现真实负相的主要原因是,它不能抑制远离真实训练样本的高概率区域。 这些区域在模型上具有高概率,但是在数据生成区域上具有低概率,被称为虚假模态。 \fig?解释了这种现象发生的原因。 -基本上,除非$k$非常大,否则远离数据分布的模型分布中的模态不会被在训练数据中初始化的马尔可夫链访问到。 +基本上,除非$k$非常大,模型分布中远离数据分布的峰值不会被使用训练数据初始化的马尔可夫链访问到。 + - \begin{figure}[!htb] \ifOpenSource @@ -240,25 +241,25 @@ CD\,未能定性地实现真实负相的主要原因是,它不能抑制远离 \end{figure} -{Perpinan+Hinton-2005-small}实验上证明\,CD\,估计偏向于RBM和完全可见的玻尔兹曼机,因为它会收敛到与最大似然估计不同的点。 +{Perpinan+Hinton-2005-small}实验上证明\,CD\,估计偏向于RBM和完全可见的\,玻尔兹曼机\,,因为它会收敛到与最大似然估计不同的点。 他们认为,由于偏差较小,CD\,可以作为一种计算代价低的方式来初始化模型,之后可以通过计算代价高的\,MCMC\,方法进行精调。 {Bengio+Delalleau-2009}表明,CD\,可以被理解为去掉了正确\,MCMC\,梯度更新中的最小项,这解释了偏差的由来。 -在训练诸如\,RBM\,的浅层网络时\,CD\,估计是很有用的。 +在训练诸如\,RBM\,的浅层网络时\,CD\,是很有用的。 反过来,这些可以堆叠起来初始化更深的模型,如\,DBN\,或\,DBM。 但是\,CD\,并不直接有助于训练更深的模型。 -这是因为在给定可见单元样本的情况下,很难采样隐藏单元。 +这是因为在给定可见单元样本的情况下,很难获得隐藏单元的样本。 由于隐藏单元不包括在数据中,所以使用训练点初始化无法解决这个问题。 即使我们使用数据初始化可见单元,我们仍然需要磨合在给定这些可见单元的隐藏单元条件分布上采样的马尔可夫链。 - + -CD\,算法可以被理解为惩罚具有快速改变来自数据的输入的马尔可夫链的模型。 -这意味着使用\,CD\,训练有点类似于训练自编码器。 +CD\,算法可以被理解为惩罚某类模型,这类模型的马尔可夫链会快速改变来自数据的输入。 %?? 这句话总是读不通 +这意味着使用\,CD\,训练从某种程度上说类似于训练自编码器。 即使\,CD\,估计比一些其他训练方法具有更大偏差,但是它有助于预训练之后会堆叠起来的浅层模型。 这是因为堆栈中最早的模型会受激励复制更多的信息到其潜变量,使其可用于随后的模型。 -这应该更多地被认为是\,CD\,训练中经常可利用的副产品,而不是原本的设计优势。 +这应该更多地被认为是\,CD\,训练中经常可利用的副产品,而不是主要的设计优势。 {sutskever2010convergence-small}表明,CD\,的更新方向不是任何函数的梯度。 @@ -266,21 +267,21 @@ CD\,算法可以被理解为惩罚具有快速改变来自数据的输入的马 另一个解决\,CD\,中许多问题的不同策略是,在每个梯度步骤中初始化马尔可夫链为先前梯度步骤的状态值。 -这个方法首先被应用数学和统计学社群发现,命名为\textbf{随机最大似然}(SML){cite?},后来又在深度学习社区中以名称\textbf{持续性对比散度}(PCD,或者每个更新中具有$k$个Gibbs步骤的\,PCD-k)独立地被重新发现{cite?}。 -具体请看\alg?。 +这个方法首先被应用数学和统计学社群发现,命名为\textbf{随机最大似然}(SML){cite?},后来又在深度学习社群中以名称\textbf{持续性对比散度}(PCD,或者每个更新中具有$k$个Gibbs步骤的\,PCD-k)独立地被重新发现~{cite?}。 +具体可以参考\alg?。 这种方法的基本思想是,只要随机梯度算法得到的步长很小,那么前一步骤的模型将类似于当前步骤的模型。 -因此,来自先前模型分布的样本将非常接近于来自当前模型分布的样本,因此用这些样本初始化的马尔可夫链将不需要花费很多时间来完成混合。 +因此,来自先前模型分布的样本将非常接近来自当前模型分布的客观样本,用这些样本初始化的马尔可夫链将不需要花费很多时间来完成混合。 -因为每个马尔可夫链在整个学习过程中不断更新,而不是在每个梯度步骤中重新开始,马尔可夫链可以自由探索很远,以找到模型的所有模态。 +因为每个马尔可夫链在整个学习过程中不断更新,而不是在每个梯度步骤中重新开始,马尔可夫链可以自由探索很远,以找到模型的所有峰值。 因此,SML\,比\,CD\,更不容易形成具有虚假模态的模型。 此外,因为可以存储所有采样变量的状态,无论是可见的还是潜在的,SML\,为隐藏单元和可见单元都提供了初始值。 CD\,只能为可见单元提供初始化,因此深度模型需要进行磨合步骤。 -SML\,能够有效地训练深度模型。 +SML\,能够高效地训练深度模型。 {Marlin10Inductive-small}将\,SML\,与本章中提出的许多其他标准方法进行比较。 他们发现,SML\,在\,RBM\,上得到了最佳的测试集对数似然,并且如果\,RBM\,的隐藏单元被用作\,SVM\,分类器的特征,那么\,SML\,会得到最好的分类精度。 + - \begin{algorithm}[ht] \caption{随机最大似然/持续性对比散度算法,使用梯度上升作为优化过程。} \begin{algorithmic} @@ -302,15 +303,16 @@ SML\,能够有效地训练深度模型。 \end{algorithmic} \end{algorithm} - + 在$k$太小或$\epsilon$太大时,随机梯度算法移动模型的速率比马尔可夫链在迭代步中混合更快,此时\,SML\,容易变得不准确。 -不幸的是,这些值的容许范围与问题有很大关联。 +不幸的是,这些值的容许范围高度依赖于具体问题。 现在还没有方法能够正式地测试马尔可夫链是否能够在迭代步骤之间成功混合。 -主观地,如果学习速率对于Gibbs步骤数目而言太大的话,那么 +主观地,如果对于Gibbs步骤数目而言学习率太大的话,那么 梯度步骤中负相采样的方差会比不同马尔可夫链中负相采样的方差更大。 -例如,一个MNIST模型在一个步骤中只采样得到了$7$,然后学习过程将会极大降低$7$出现的概率,在下一个步骤中,模型可能会只采样得到$9$。 - +例如,一个MNIST模型在一个步骤中只采样得到了$7$。 +然后学习过程将会极大降低$7$对应的峰值,在下一个步骤中,模型可能会只采样得到$9$。 + 从使用\,SML\,训练的模型中评估采样必须非常小心。 在模型训练完之后,有必要从一个随机起点初始化的新马尔可夫链抽取样本。 用于训练的连续负相链中的样本受到了模型最近几个版本的影响,会使模型看起来具有比其实际更大的容量。 @@ -326,8 +328,8 @@ CD\,方差低的原因是,其在正相和负相中使用了相同的训练点 所有基于\,MCMC\,从模型中抽取样本的方法在原则上几乎可以与\,MCMC\,的任何变体一起使用。 -这意味着诸如\,SML\,这样的技术可以使用\chap?中描述的任何增强\,MCMC\,的技术(例如并行回火)来加以改进{cite?}。 - +这意味着诸如\,SML\,这样的技术可以使用\chap?中描述的任何增强\,MCMC\,的技术(例如并行回火)来加以改进~{cite?}。 + 一种在学习期间加速混合的方法是,不改变蒙特卡罗采样技术,而是改变模型的参数化和代价函数。 快速持续性对比散度,或者\,FPCD~{cite?}使用如下表达式去替换传统模型的参数$\Vtheta$ @@ -336,17 +338,17 @@ CD\,方差低的原因是,其在正相和负相中使用了相同的训练点 \Vtheta = \Vtheta^{\text{(slow)}} + \Vtheta^{\text{(fast)}}. \end{equation} 现在的参数是以前的两倍多,逐位相加定义原始模型的参数。 -快速参数用更大的学习速率来训练,从而使其快速响应学习的负相,并使马尔可夫链探索新的区域。 +快速参数用更大的学习率来训练,从而使其快速响应学习的负相,并促使马尔可夫链探索新的区域。 这能够使马尔可夫链快速混合,尽管这种效应只会发生在学习期间快速权重可以自由改变的时候。 -通常,在短时间地将快速权重设为大值并保持足够长时间,使马尔可夫链改变模式之后,我们会对快速权重使用显著的权重衰减,促使它们收敛到小值。 +通常,在短时间地将快速权重设为大值并保持足够长时间,使马尔可夫链改变峰值之后,我们会对快速权重使用显著的权重衰减,促使它们收敛到较小的值。 本节介绍的基于\,MCMC\,的方法的一个关键优点是它们提供了$\log Z$梯度的估计,因此我们可以从本质上将问题分解为$\log \tilde{p}$和$\log Z$两块。 然后我们可以使用任何其他的方法来处理$\log \tilde{p}(\RVx)$,只需将我们的负相梯度加到其他方法的梯度中。 -特别地,这意味着正相可以使用在$\tilde{p}$上仅有下限的方法。 +特别地,这意味着正相可以使用那些仅提供$\tilde{p}$下限的方法。 然而,本章介绍处理$\log Z$的大多数其他方法都和基于边界的正相方法是不兼容的。 - + # 伪似然 @@ -372,13 +374,13 @@ CD\,方差低的原因是,其在正相和负相中使用了相同的训练点 不幸的是,为了计算对数似然,我们需要边缘化很多变量。 如果总共有$n$个变量,那么我们必须边缘化$n-1$个变量。 -根据概率的链式法则, +根据概率的链式法则,我们有 \begin{equation} \log p(\RVx) = \log p(x_1) + \log p(x_2 \mid x_1) + \dots + \log p(x_n \mid \RVx_{1:n−1}). \end{equation} 在这种情况下,我们已经使$\RVa$尽可能小,但是$\RVc$可以大到$\RVx_{2:n}$。 如果我们简单地将$\RVc$移到$\RVb$中以减少计算代价,那么会发生什么呢? -这便产生了伪似然{cite?}目标函数,给定所有其他特征$\Vx_{-i}$,预测特征$x_i$的值: +这便产生了伪似然~{cite?}目标函数,给定所有其他特征$\Vx_{-i}$,预测特征$x_i$的值: \begin{equation} \sum_{i=1}^n \log p(x_i \mid \Vx_{-i}). \end{equation} @@ -388,14 +390,14 @@ CD\,方差低的原因是,其在正相和负相中使用了相同的训练点 -这看起来似乎是一个没有道理的策略,但可以证明最大化伪似然的估计是渐近一致的{cite?}。 -当然,在数据集不接近大采样极限的情况下,伪似然可能表现出与最大似然估计不同的结果。 +这看起来似乎是一个没有道理的策略,但可以证明最大化伪似然的估计是渐近一致的~{cite?}。 +当然,在数据集不趋近于大采样极限的情况下,伪似然可能表现出与最大似然估计不同的结果。 + - -可以用广义伪似然估计以计算复杂度的增加换取最大似然偏离的下降{cite?}。 +可以用广义伪似然估计以计算复杂度的增加换取其相对于最大似然表现的偏离的下降~{cite?}。 广义伪似然估计使用$m$个不同的集合$\SetS^{(i)}$,$i=1, \dots, m$作为变量的指标出现在条件棒的左侧。 在$m = 1$和$\SetS^{(1)}= 1, \dots, n$的极端情况下广义伪似然估计会变为对数似然。 -在$m = n$和$\SetS^{(i)} = \{i\}$的极端情况下,广义伪似然会变为伪随机。 +在$m = n$和$\SetS^{(i)} = \{i\}$的极端情况下,广义伪似然会变为伪似然。%?? recover the pseudolikeli 广义伪似然估计目标函数如下所示 \begin{equation} \sum_{i=1}^m \log p(\RVx_{\SetS^{(i)}} \mid \RVx_{- \SetS^{(i)} }). @@ -407,46 +409,46 @@ CD\,方差低的原因是,其在正相和负相中使用了相同的训练点 对于在训练期间只需要使用条件分布的任务而言,它的效果比最大似然更好,例如填充少量的缺失值。 如果数据具有规则结构,使得$\SetS$索引集可以被设计为表现最重要的相关性质,同时略去相关性可忽略的变量,那么广义伪似然策略将会非常有效。 例如,在自然图像中,空间中相隔很远的像素也具有弱相关性,因此广义伪似然可以应用于每个$\SetS$集是小的局部空间窗口的情况。 - + 伪似然估计的一个弱点是它不能与仅在$\tilde{p}(\RVx)$上提供下界的其他近似一起使用,例如\chap?中介绍的变分推断。这是因为$\tilde{p}$出现在了分母中。 -分母的下界仅提供了整个表达式的上界,然而我们并不关心最大化上界。 -这使得难以将伪似然方法应用于诸如深度玻尔兹曼机的深度模型,因为变分方法是近似边缘化互相作用的多层隐藏变量的主要方法之一。 -尽管如此,伪似然仍然可以用在深度学习中,它可以用于单层模型,或使用不基于下限的近似推断方法的深度模型。 +分母的下界仅提供了整个表达式的上界,然而最大化上界没有什么意义。 +这使得我们难以将伪似然方法应用于诸如深度玻尔兹曼机的深度模型,因为变分方法是近似边缘化互相作用的多层隐藏变量的主要方法之一。 +尽管如此,伪似然仍然可以用在深度学习中,它可以用于单层模型,或使用不基于下限的近似推断方法的深度模型中。 - + 伪似然比\,SML\,在每个梯度步骤中的计算代价要大得多,这是由于其对所有条件进行显式计算。 -但是,如果每个样本只计算一个随机选择的条件,那么广义伪似然和类似标准仍然可以很好地运行,从而使计算代价降低到和\,SML\,差不多的程度{cite?}。 +但是,如果每个样本只计算一个随机选择的条件,那么广义伪似然和类似标准仍然可以很好地运行,从而使计算代价降低到和\,SML\,差不多的程度~{cite?}。 虽然伪似然估计没有显式地最小化$\log Z$,但是我们仍然认为它具有类似负相的效果。 每个条件分布的分母会使得学习算法降低所有仅具有一个变量不同于训练样本的状态的概率。 -了解伪似然的渐近效率理论分析,请参看~{Marlin11-small}。 - +了解伪似然渐近效率的理论分析,可以参考~{Marlin11-small}。 + # 得分匹配和比率匹配 得分匹配~{cite?}提供了另一种训练模型而不需要估计$Z$或其导数的一致性方法。 对数密度关于参数的导数$\nabla_{\Vx} \log p(\Vx)$,被称为其得分,\emph{得分匹配}这个名称正是来自这样的术语。 得分匹配采用的策略是,最小化模型对数密度和数据对数密度关于输入的导数之间的平方差期望: -\begin{equation} - L(\Vx, \Vtheta) = \frac{1}{2} \norm{ \nabla_{\Vx} \log p_{\text{model}}(\Vx; \Vtheta) - \nabla_{\Vx} \log p_{\text{data}} (\Vx) }_2^2, -\end{equation} -\begin{equation} - J(\Vtheta) = \frac{1}{2} \SetE_{p_{\text{data}}(\Vx)} L(\Vx, \Vtheta), -\end{equation} -\begin{equation} - \Vtheta^* = \min_{\Vtheta} J(\Vtheta) . -\end{equation} +\begin{align} + L(\Vx, \Vtheta) & = \frac{1}{2} \norm{ \nabla_{\Vx} \log p_{\text{model}}(\Vx; \Vtheta) - \nabla_{\Vx} \log p_{\text{data}} (\Vx) }_2^2, \\ + + + J(\Vtheta) & = \frac{1}{2} \SetE_{p_{\text{data}}(\Vx)} L(\Vx, \Vtheta), \\ + + + \Vtheta^* & = \min_{\Vtheta} J(\Vtheta) . \\ +\end{align} 该目标函数避免了微分配分函数 $Z$带来的难题,因为$Z$不是$x$的函数,所以$\nabla_{\RVx} Z = 0$。 最初,得分匹配似乎有一个新的困难:计算数据分布的得分需要知道生成训练数据的真实分布$p_{\text{data}}$。 -幸运的是,最小化$L(\Vx, \Vtheta)$的期望等效于最小化下式的期望 +幸运的是,最小化$L(\Vx, \Vtheta)$的期望等价于最小化下式的期望 \begin{equation} \tilde{L} (\Vx, \Vtheta) = \sum_{j=1}^n \left( \frac{\partial^2}{ \partial x_j^2 } \log p_{\text{model}} (\Vx; \Vtheta) + \frac{1}{2} \left( \frac{\partial}{ \partial x_j } @@ -456,29 +458,29 @@ CD\,方差低的原因是,其在正相和负相中使用了相同的训练点 \end{equation} 其中$n$是$\Vx$的维度。 - + 因为得分匹配需要关于$\RVx$的导数,所以它不适用于具有离散数据的模型,但是模型中的潜变量可以是离散的。 类似于伪似然,得分匹配只有在我们能够直接估计$\log \tilde{p}(\RVx)$及其导数的时候才有效。 -它不兼容与对$\log \tilde{p}(\RVx)$仅提供下界的方法,因为得分匹配需要$\log \tilde{p}(\RVx)$的导数和二阶导数,而下限不能传达关于导数的任何信息。 +它与对$\log \tilde{p}(\RVx)$仅提供下界的方法不兼容,因为得分匹配需要$\log \tilde{p}(\RVx)$的导数和二阶导数,而下限不能传达关于导数的任何信息。 这意味着得分匹配不能应用于隐藏单元之间具有复杂相互作用的模型估计,例如稀疏编码模型或深度玻尔兹曼机。 虽然得分匹配可以用于预训练较大模型的第一个隐藏层,但是它没有被用于预训练较大模型的较深层网络。 这可能是因为这些模型的隐藏层通常包含一些离散变量。 -虽然得分匹配没有明确显示具有负相信息,但是它可以被视为使用特定类型马尔可夫链的对比散度的变种{cite?}。 -在这种情况下,马尔可夫链并没有采用\,Gibbs采样,而是采用一种由梯度引导的局部更新的不同方法。 +虽然得分匹配没有明确显示具有负相信息,但是它可以被视为使用特定类型马尔可夫链的对比散度的变种~{cite?}。 +在这种情况下,马尔可夫链并没有采用\,Gibbs采样,而是采用一种由梯度引导局部更新的不同方法。 当局部更新的大小接近于零时,得分匹配等价于具有这种马尔可夫链的对比散度。 - + {Lyu09}将得分匹配推广到离散的情况(但是推导有误,后由~{Marlin10Inductive-small}修正)。 {Marlin10Inductive-small}发现,\textbf{广义得分匹配}(\textbf{generalized score matching}, GSM)在许多样本观测概率为$0$的高维离散空间中不起作用。 -一种更成功地将得分匹配的基本想法扩展到离散数据的方法是比率匹配{cite?}。 -比率匹配特别适用于二元数据。 +一种更成功地将得分匹配的基本想法扩展到离散数据的方法是比率匹配~{cite?}。 +比率匹配特别适用于二值数据。 比率匹配最小化以下目标函数在样本上的均值: \begin{equation} L^{(\text{RM})} (\Vx, \Vtheta) = \sum_{j=1}^n \left( @@ -488,26 +490,26 @@ CD\,方差低的原因是,其在正相和负相中使用了相同的训练点 其中$f(\Vx, j)$返回$j$处位值取反的$\RVx$。 比率匹配使用了与伪似然估计相同的策略来绕开配分函数:配分函数会在两个概率的比率中抵消掉。 {Marlin10Inductive-small}发现, -训练模型给测试集图像去噪时,比率匹配的效果要优于\,SML,伪似然和\,GSM。 +训练模型给测试集图像去噪时,比率匹配的效果要优于\,SML、伪似然和\,GSM。 - + -类似于伪似然估计,比率匹配对每个数据点需要$n$个$\tilde{p}$的估计,因此每次更新的计算代价大约比\,SML的计算代价高出$n$倍。 +类似于伪似然估计,比率匹配对每个数据点都需要$n$个$\tilde{p}$的估计,因此每次更新的计算代价大约比\,SML的计算代价高出$n$倍。 -与伪似然估计一样,我们可以认为比率匹配减小了,所有只有一个变量不同于训练样本的状态的概率。 -由于比率匹配特别适用于二元数据,这意味着在与数据的汉明距离为$1$内的所有状态上,比率匹配都是有效的。 +与伪似然估计一样,我们可以认为比率匹配减小了所有只有一个变量不同于训练样本的状态的概率。 +由于比率匹配特别适用于二值数据,这意味着在与数据的汉明距离为$1$内的所有状态上,比率匹配都是有效的。 -比率匹配还可以作为处理高维稀疏数据(例如单词计数向量)的基础。 -这类稀疏数据对基于\,MCMC\,的方法提出了挑战,因为数据以密集格式表示是非常消耗计算资源的,而只有在模型学会表示数据分布的稀疏性之后,MCMC\,采样才会产生稀疏值。 +比率匹配还可以作为处理高维稀疏数据(例如词计数向量)的基础。 +这类稀疏数据对基于\,MCMC\,的方法提出了挑战,因为以密集格式表示数据是非常消耗计算资源的,而只有在模型学会表示数据分布的稀疏性之后,MCMC\,采样才会产生稀疏值。 {Dauphin+Bengio-NIPS2013}设计了比率匹配的无偏随机近似来解决这个问题。 该近似只估计随机选择的目标子集,不需要模型生成完整的样本。 -了解比率匹配的渐近效率理论分析,请参看~{Marlin11-small}。 - +了解比率匹配渐近效率的理论分析,可以参考~{Marlin11-small}。 + # 去噪得分匹配 @@ -546,7 +548,7 @@ SML\,和\,CD\,只估计对数配分函数的梯度,而不是估计配分函数 \end{equation} 其中$c$是$-\log Z(\Vtheta)$的近似。 不仅仅估计$\Vtheta$,噪声对比估计过程将$c$视为另一参数,使用相同的算法同时估计$\Vtheta$和$c$。 -因此,所得到的$\log p_{\text{model}}(\RVx)$可能不完全对应有效的概率分布,但随着$c$估计的改进,它将变得越来越接近有效值\footnote{NCE也适用于具有易于处理的,不需要引入额外参数$c$的配分函数的问题。它已经是最令人感兴趣的,估计具有复杂配分函数模型的方法}。 +因此,所得到的$\log p_{\text{model}}(\RVx)$可能并不完全对应有效的概率分布,但随着$c$估计的改进,它将变得越来越接近有效值\footnote{NCE也适用于具有易于处理的,不需要引入额外参数$c$的配分函数的问题。它已经是最令人感兴趣的,估计具有复杂配分函数模型的方法}。 这种方法不可能使用最大似然作为估计的标准。 @@ -557,9 +559,9 @@ NCE将估计$p(\RVx)$的无监督学习问题转化为学习一个概率二元 该监督学习问题中的最大似然估计定义了原始问题的渐近一致估计。 -具体来说,我们引入第二个分布,噪声分布 $p_{\text{noise}}(\RVx)$。 -噪声分布应该易于估计和从中取样。 -我们现在可以构造一个联合$\RVx$和新二元变量$y$的模型。 +具体地说,我们引入第二个分布,噪声分布 $p_{\text{noise}}(\RVx)$。 +噪声分布应该易于估计和从中采样。 +我们现在可以构造一个联合$\RVx$和新二值变量$y$的模型。 在新的联合模型中,我们指定 \begin{equation} p_{\text{joint}} (y = 1) = \frac{1}{2}, @@ -577,7 +579,7 @@ NCE将估计$p(\RVx)$的无监督学习问题转化为学习一个概率二元 我们可以在训练数据上构造一个类似的联合模型。 在这种情况下,开关变量决定是从\textbf{数据}还是从噪声分布中抽取$\RVx$。 -形式地,$p_{\text{train}}(y = 1) = \frac{1}{2}$,$p_{\text{train}}( \RVx \mid y = 1) = p_{\text{data}}( \RVx)$,和 +正式地,$p_{\text{train}}(y = 1) = \frac{1}{2}$,$p_{\text{train}}( \RVx \mid y = 1) = p_{\text{data}}( \RVx)$,和 $p_{\text{train}}(\RVx \mid y = 0) = p_{\text{noise}}(\RVx)$。 @@ -607,47 +609,47 @@ $p_{\text{train}}(\RVx \mid y = 0) = p_{\text{noise}}(\RVx)$。 因此,只要$\log \tilde{p}_{\text{model}}$易于反向传播, -并且如上所述,$p_{\text{noise}}$应易于估计(以便评估$p_{\text{joint}}$)和抽样(以生成训练数据),那么\,NCE\,就易于使用。 +并且如上所述,$p_{\text{noise}}$应易于估计(以便评估$p_{\text{joint}}$)和采样(以生成训练数据),那么\,NCE\,就易于使用。 -NCE\,能够非常成功地应用于随机变量较少的问题,但即使随机变量很多时,它也很有效。 -例如,它已经成功地应用于给定单词上下文建模单词的条件分布{cite?}。 +NCE\,能够非常成功地应用于随机变量较少的问题,但即使随机变量有很多可以取的值时,它也很有效。 +例如,它已经成功地应用于给定单词上下文建模单词的条件分布~{cite?}。 虽然单词可以采样自一个很大的词汇表,但是只能采样一个单词。 当\,NCE\,应用于具有许多随机变量的问题时,其效率会变得较低。 当逻辑回归分类器发现某个变量的取值不大可能时,它会拒绝这个噪声样本。 -这意味着在$p_{\text{model}}$学习了基本的边缘统计之后,学习速率会大大减慢。 +这意味着在$p_{\text{model}}$学习了基本的边缘统计之后,学习进程会大大减慢。 想象一个使用非结构化高斯噪声作为$p_{\text{noise}}$来学习面部图像的模型。 -如果$p_{\text{model}}$学会了眼睛,就算没有学习任何其他面部特征,如嘴, 它也会拒绝几乎所有的非结构化噪声样本。 - +如果$p_{\text{model}}$学会了眼睛,就算没有学习任何其他面部特征,比如嘴, 它也会拒绝几乎所有的非结构化噪声样本。 + -噪声分布$p_{\text{noise}}$必须是易于估计和采样的约束可能是过度的限制。 +噪声分布$p_{\text{noise}}$必须是易于估计和采样的约束可能是过于严格的限制。 当$p_{\text{noise}}$比较简单时,大多数采样可能与数据有着明显不同,而不会迫使$p_{\text{model}}$进行显著改进。 -类似于得分匹配和伪似然,如果$p$只有下界,那么\,NCE\,不会有效。 -这样的下界能够用于构建$p_{\text{joint}}( y = 1 \mid \RVx)$的下界,但是它只能用于构建$p_{\text{joint}}(y = 0 \mid \RVx)$(出现在一般的\,NCE\,对象中)的上界。 +类似于得分匹配和伪似然,如果$\tilde{p}$只有下界,那么\,NCE\,不会有效。 +这样的下界能够用于构建$p_{\text{joint}}( y = 1 \mid \RVx)$的下界,但是它只能用于构建$p_{\text{joint}}(y = 0 \mid \RVx)$(出现在一半的\,NCE\,对象中)的上界。 同样地,$p_{\text{noise}}$的下界也没有用,因为它只提供了$p_{\text{joint}}( y = 1 \mid \RVx)$的上界。 -当在每个梯度步骤之前,模型分布被复制来定义新的噪声分布时,NCE\,定义了一个被称为自对比估计的过程,其梯度期望等价于最大似然的梯度期望{cite?}。 -特殊情况的\,NCE(噪声采样由模型生成)表明最大似然可以被解释为使模型不断学习以将现实与自身发展的信念区分的过程,而噪声对比估计通过让模型区分现实和固定的基准(噪声模型),降低了计算成本。 +当在每个梯度步骤之前,模型分布被复制来定义新的噪声分布时,NCE\,定义了一个被称为自对比估计的过程,其梯度期望等价于最大似然的梯度期望~{cite?}。 +特殊情况的\,NCE(噪声采样由模型生成)表明最大似然可以被解释为使模型不断学习以将现实与自身发展的信念区分的过程,而噪声对比估计通过让模型区分现实和固定的基准(噪声模型),我们降低了计算成本。%?? 以 是不是多余的? -在训练样本和生成样本(使用模型能量函数定义分类器)之间进行分类以得到模型的梯度的方法,已经在更早的时候以各种形式提出来{cite?}。 +在训练样本和生成样本(使用模型能量函数定义分类器)之间进行分类以得到模型的梯度的方法,已经在更早的时候以各种形式提出来~{cite?}。 噪声对比估计是基于良好生成模型应该能够区分数据和噪声的想法。 -一个密切相关的想法是,良好的生成模型能够生成分类器没法将其与数据区分的采样。 +一个密切相关的想法是,良好的生成模型能够生成分类器无法将其与数据区分的样本。 这个想法诞生了生成式对抗网络(\sec?)。 # 估计配分函数 -尽管本章中的大部分内容都在避免计算与无向图模型相关的难以计算配分函数 $Z(\Vtheta)$,但在本节中我们将会讨论几种直接估计配分函数的方法。 +尽管本章中的大部分内容都在避免计算与无向图模型相关的难以计算的配分函数 $Z(\Vtheta)$,但在本节中我们将会讨论几种直接估计配分函数的方法。 @@ -662,8 +664,8 @@ NCE\,能够非常成功地应用于随机变量较少的问题,但即使随机 \begin{equation} \sum_i \log p_A (\RSx^{(i)}; \Vtheta_A) - \sum_i \log p_B(\RSx^{(i)}; \Vtheta_B) > 0, \end{equation} -那么我们说$\CalM_A$是一个比$\CalM_B$更好的模型(或者,至少可以说,它在测试集上是一个更好的模型),这是指它有一个更大的测试对数似然。 -然而,测试这个条件是否成立需要知道配分函数。 +那么我们说$\CalM_A$是一个比$\CalM_B$更好的模型(或者,至少可以说,它在测试集上是一个更好的模型),这是指它有一个更好的测试对数似然。 +不幸的是,测试这个条件是否成立需要知道配分函数。 \eqn?看起来需要估计模型分配给每个点的对数概率,因而需要估计配分函数。 我们可以通过将\eqn?重新转化为另一种形式来简化情况,在该形式中我们只需要知道两个模型的配分函数的\textbf{比率}: \begin{equation} @@ -704,11 +706,9 @@ NCE\,能够非常成功地应用于随机变量较少的问题,但即使随机 然后该值可以直接比较\eqn?中的两个模型。 -如果分布$p_0$接近$p_1$,那么\eqn?能够高效地估计配分函数~{cite?}。 -不幸的是,大多数时候$p_1$都很复杂(通常是多峰的),并且定义在高维空间中。 +如果分布$p_0$接近$p_1$,那么\eqn?能够有效地估计配分函数~{cite?}。 +不幸的是,大多数时候$p_1$都很复杂(通常是多峰值的),并且定义在高维空间中。 很难找到一个易求解的$p_0$,既能易于评估,又能充分接近$p_1$以保持高质量的近似。 - - 如果$p_0$和$p_1$不接近,那么$p_0$的大多数采样将在$p_1$中具有较低的概率,从而在\eqn?的求和中产生(相对的)可忽略的贡献。 @@ -722,15 +722,15 @@ NCE\,能够非常成功地应用于随机变量较少的问题,但即使随机 -有两个解决高维空间复杂分布上估计配分函数的方法: +我们现在关注两个解决高维空间复杂分布上估计配分函数的方法: 退火重要采样和桥式采样。 -两者都始于上面介绍的简单的重要采样方法,并且都试图通过引入\emph{桥接}$p_0$和$p_1$之间\emph{差距}的中间分布,来解决$p_0$远离$p_1$的问题。 +两者都始于上面介绍的简单重要采样方法,并且都试图通过引入\emph{缩小}$p_0$和$p_1$之间\emph{差距}的中间分布,来解决$p_0$远离$p_1$的问题。 ## 退火重要采样 -在$D_{KL}(p_0 \| p_1)$很大的情况下(即,$p_0$和$p_1$之间几乎没有重叠),一种称为\textbf{退火重要采样}(\textbf{annealed importance sampling},AIS)的方法试图通过引入中间分布来桥接差距{cite?}。 +在$D_{KL}(p_0 \| p_1)$很大的情况下(即$p_0$和$p_1$之间几乎没有重叠),一种称为\textbf{退火重要采样}(\textbf{annealed importance sampling},AIS)的方法试图通过引入中间分布来缩小这种差距~{cite?}。 考虑分布序列$p_{\eta_0},\dots,p_{\eta_n}$,其中$0=\eta_0 < \eta_1 < \dots < \eta_{n-1} < \eta_n = 1$,分布序列中的第一个和最后一个分别是$p_0$和$p_1$。 @@ -837,7 +837,7 @@ NCE\,能够非常成功地应用于随机变量较少的问题,但即使随机 退火重要采样首先由~{Jarzynski1997}发现,然后由~{Neal-2001}再次独立发现。 目前它是估计无向概率模型的配分函数的最常用方法。 -其原因可能与一篇有影响力的论文{cite?}有关,该论文并没有讨论该方法相对于其他方法的优点,而是介绍了将其应用于估计受限玻尔兹曼机和深度信念网络的配分函数。 +其原因可能与一篇有影响力的论文~{cite?}有关,该论文并没有讨论该方法相对于其他方法的优点,而是介绍了将其应用于估计受限玻尔兹曼机和深度信念网络的配分函数。 关于\,AIS\,估计性质(例如,方差和效率)的讨论,请参看~{Neal-2001}。 @@ -860,7 +860,7 @@ NCE\,能够非常成功地应用于随机变量较少的问题,但即使随机 可以表明,最优的桥式采样是$p_*^{(opt)} (\RVx) \propto \frac{ \tilde{p}_0(\Vx) \tilde{p}_1(\Vx) }{ r\tilde{p}_0(\Vx) + \tilde{p}_1(\Vx) }$,其中$r = Z_1 / Z_0$。 这似乎是一个不可行的解决方案,因为它似乎需要我们估计数值$Z_1 / Z_0$。 -然而,可以从粗糙的$r$开始估计,然后使用得到的桥式采样逐步迭代以改进估计{cite?}。 +然而,可以从粗糙的$r$开始估计,然后使用得到的桥式采样逐步迭代以改进估计~{cite?}。 也就是说,我们会迭代地重新估计比率,并使用每次迭代更新$r$的值。 diff --git a/docs/_posts/2016-12-19-Chapter19_approximate_inference.md b/docs/_posts/2016-12-19-Chapter19_approximate_inference.md index 3bbc9cc..57668ef 100644 --- a/docs/_posts/2016-12-19-Chapter19_approximate_inference.md +++ b/docs/_posts/2016-12-19-Chapter19_approximate_inference.md @@ -27,7 +27,7 @@ share: false 在深度学习中难以处理的推断问题通常源于结构化图模型中潜变量之间的相互作用。 可以参考\fig?的几个例子。 -这些相互作用可能是无向模型的直接相互作用,也可能是有向模型中同一个可见变量的共同祖先之间的"相消解释"作用。 %?? explaining away 翻译成 相消解释 你斟酌下 +这些相互作用可能是无向模型的直接相互作用,也可能是有向模型中同一个可见变量的共同祖先之间的"相消解释"作用。 @@ -772,7 +772,7 @@ $\SetE_{\RSh_2\sim q(\RSh\mid\Vv)}[h_2]$和$\SetE_{\RSh_2\sim q(\RSh\mid\Vv)}[h_ 从这里,我们可以发现$\tilde{q}$的泛函形式满足高斯分布。 因此,我们可以得到$q(\Vh\mid\Vv) = \CalN(\Vh;\Vmu,\Vbeta^{-1})$,其中$\Vmu$和对角的$\Vbeta$是变分参数,我们可以使用任何方法来优化它。 -有必要再强调一下,我们并没有假设$q$是一个高斯分布,这个高斯的形式是使用变分法来最大化关于$\CalL$的分布$q$\footnote{此处似乎有笔误。}推导出的。 %?? 什么笔误啊。。。 +有必要再强调一下,我们并没有假设$q$是一个高斯分布,这个高斯的形式是使用变分法来最大化关于$\CalL$的分布$q$\footnote{此处似乎有笔误。}推导出的。 %?? 什么笔误啊。。。 最大化L关于q 还是 最大化q关于L 在不同的模型上应用相同的方法可能会得到不同泛函形式的分布$q$。