Skip to content

Commit

Permalink
update md
Browse files Browse the repository at this point in the history
  • Loading branch information
SwordYork committed Mar 14, 2017
1 parent 76086d7 commit db7517e
Show file tree
Hide file tree
Showing 16 changed files with 1,426 additions and 1,312 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 | 完成合并 |
Expand Down
20 changes: 10 additions & 10 deletions docs/_posts/2016-12-02-Chapter2_linear_algebra.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ share: false

如果你已经很熟悉线性代数,那么你可以轻松地跳过本章。
如果你已经了解这些概念,但是需要一份索引表来回顾一些重要公式,那么我们推荐\emph{The Matrix Cookbook} {cite?}。
如果你没有接触过线性代数,那么本章将告诉你本书所需的线性代数知识,不过我们仍然非常建议你参考其他专注于讲解线性代数的文献,例如{shilov1977linear}。
如果你没有接触过线性代数,那么本章将告诉你本书所需的线性代数知识,不过我们仍然非常建议你参考其他专注于讲解线性代数的文献,例如~{shilov1977linear}。
最后,本章跳过了很多重要但是对于理解深度学习非必需的线性代数知识。


Expand Down Expand Up @@ -417,7 +417,7 @@ $L^1$范数可以简化如下:
<!-- % -- 37 -- -->


另外一个经常在机器学习中出现的范数是$L^\infty$范数,也被称为~max 范数
另外一个经常在机器学习中出现的范数是$L^\infty$范数,也被称为\,最大范数
这个范数表示向量中具有最大幅值的元素的绝对值:
\begin{equation}
\norm{\Vx}_\infty = \max_i |x_i|.
Expand Down Expand Up @@ -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}

Expand Down Expand Up @@ -648,7 +648,7 @@ $\MA$的右奇异向量是$\MA^\top\MA$的特征向量。
$\MA$的非零奇异值是$\MA^\top\MA$特征值的平方根,同时也是$\MA\MA^\top$特征值的平方根。


SVD最有用的一个性质可能是拓展矩阵求逆到非方矩阵上。我们将在下一节中探讨。
SVD\,最有用的一个性质可能是拓展矩阵求逆到非方矩阵上。我们将在下一节中探讨。



Expand Down Expand Up @@ -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}
Expand Down Expand Up @@ -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}
Expand All @@ -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}
Expand Down Expand Up @@ -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}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)$,来控制分布的精度(或方差的倒数):
Expand Down Expand Up @@ -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}
Expand Down Expand Up @@ -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 |.
Expand Down
42 changes: 21 additions & 21 deletions docs/_posts/2016-12-04-Chapter4_numerical_computation.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ share: false

另一个极具破坏力的数值错误形式是上溢。
当大量级的数被近似为$\infty$或$-\infty$时发生上溢。
进一步的运算通常导致这些无限值变为非数字
进一步的运算通常会导致这些无限值变为非数字

必须对上溢和下溢进行数值稳定的一个例子是softmax函数。
softmax函数经常用于预测与Multinoulli分布相关联的概率,定义为
Expand All @@ -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?}就是这样软件包的一个例子,它能自动检测并稳定深度学习中许多常见的数值不稳定的表达式。

<!-- % -- 78 -- -->
Expand Down Expand Up @@ -83,7 +83,7 @@ Theano~{cite?}就是这样软件包的一个例子,它能自动检测并稳定
# 基于梯度的优化方法


大多数深度学习算法涉及某种形式的优化
大多数深度学习算法都涉及某种形式的优化
优化指的是改变$\Vx$以最小化或最大化某个函数$f(\Vx)$的任务。
我们通常以最小化$f(\Vx)$指代大多数最优化问题。
最大化可经由最小化算法最小化$-f(\Vx)$来实现。
Expand Down Expand Up @@ -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]
Expand All @@ -144,9 +144,9 @@ $ f^\prime(\Sx)=0 $的点称为临界点或驻点。
使$f(x)$取得绝对的最小值(相对所有其他值)的点是全局最小点。
函数可能只有一个全局最小点或存在多个全局最小点,
还可能存在不是全局最优的局部极小点。
在深度学习的背景下,我们优化的函数可能含有许多不是最优的局部极小点,或者还有很多处于非常平坦的区域内的鞍点。
在深度学习的背景下,我们要优化的函数可能含有许多不是最优的局部极小点,或者还有很多处于非常平坦的区域内的鞍点。
尤其是当输入是多维的时候,所有这些都将使优化变得困难。
因此,我们通常寻找$f$非常小的值,但在任何形式意义下并不一定是最小
因此,我们通常寻找使$f$非常小的点,但这在任何形式意义下并不一定是最小
见\fig?的例子。
\begin{figure}[!htb]
\ifOpenSource
Expand All @@ -156,7 +156,7 @@ $ f^\prime(\Sx)=0 $的点称为临界点或驻点。
\fi
\caption{近似最小化。
当存在多个局部极小点或平坦区域时,优化算法可能无法找到全局最小点。
在深度学习的背景下,即使找到的解不是真正最小的,但只要它们对应于代价函数的显著低的值,我们通常就能接受这样的解。
在深度学习的背景下,即使找到的解不是真正最小的,但只要它们对应于代价函数显著低的值,我们通常就能接受这样的解。
}
\end{figure}

Expand Down Expand Up @@ -220,7 +220,7 @@ $ f^\prime(\Sx)=0 $的点称为临界点或驻点。
二阶导数告诉我们,一阶导数将如何随着输入的变化而改变。
它表示只基于梯度信息的梯度下降步骤是否会产生如我们预期的那样大的改善,因此它是重要的。
我们可以认为,二阶导数是对曲率的衡量。
假设我们有一个二次函数(虽然很多实践中的函数都不是二次,但至少在局部可以很好地用二次近似)。
假设我们有一个二次函数(虽然很多实践中的函数都不是二次的,但至少在局部可以很好地用二次近似)。
如果这样的函数具有零二阶导数,那就没有曲率。
也就是一条完全平坦的线,仅用梯度就可以预测它的值。
我们使用沿负梯度方向大小为$\epsilon$的下降步,当该梯度是$1$时,代价函数将下降$\epsilon$。
Expand All @@ -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).
Expand All @@ -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$夹角越小的特征向量的权重越大
最大特征值确定最大二阶导数,最小特征值确定最小二阶导数。

<!-- % -- 84 -- -->
Expand All @@ -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}
Expand Down Expand Up @@ -328,7 +328,7 @@ $x_1$轴是Hessian的一个特征向量,并且具有正特征值。
名称"鞍点"源自该处函数的鞍状形状。
这是具有鞍点函数的典型示例。
维度多于一个时,鞍点不一定要具有0特征值:仅需要同时具有正特征值和负特征值。
我们可以想象这样一个鞍点(具有正负特征值)在一个横截面内是局部极大点,另一个横截面内是局部极小点
我们可以想象这样一个鞍点(具有正负特征值)在一个横截面内是局部极大点,而在另一个横截面内是局部极小点
}
\end{figure}

Expand All @@ -338,7 +338,7 @@ Hessian的条件数衡量这些二阶导数的变化范围。
这是因为一个方向上的导数增加得很快,而在另一个方向上增加得很慢。
梯度下降不知道导数的这种变化,所以它不知道应该优先探索导数长期为负的方向。
病态条件也导致很难选择合适的步长。
步长必须足够小,以免冲过最小而向具有较强的正曲率方向上升
步长必须足够小,以免冲过最小而向具有较强正曲率的方向上升
这通常意味着步长太小,以致于在其他较小曲率的方向上进展不明显。
见\fig?的例子。
\begin{figure}[!htb]
Expand All @@ -361,7 +361,7 @@ Hessian的条件数衡量这些二阶导数的变化范围。

<!-- % -- 86 -- -->

使用Hessian矩阵的信息指导搜索可以解决这个问题
我们可以使用Hessian矩阵的信息来指导搜索,以解决这个问题
其中最简单的方法是牛顿法。
牛顿法基于一个二阶泰勒展开来近似$\Vx^{(0)}$附近的$f(\Vx)$:
\begin{align}
Expand Down Expand Up @@ -491,7 +491,7 @@ $中的$\alpha_i = 0$。
换句话说,对于所有的$i$, $\alpha_i \geq 0$或$ h^{(j)}(\Vx) \leq 0$在收敛时必有一个是活跃的。
为了获得关于这个想法的一些直观解释,我们可以说这个解是由不等式强加的边界,我们必须通过对应的KKT乘子影响$\Vx$的解,或者不等式对解没有影响,我们则归零KKT乘子。

可以使用一组简单性质描述约束优化问题的最优点
我们可以使用一组简单的性质来描述约束优化问题的最优点
这些性质称为Karush–Kuhn–Tucker条件{cite?}。
这些是确定一个点是最优点的必要条件,但不一定是充分条件。
这些条件是:
Expand All @@ -511,7 +511,7 @@ $中的$\alpha_i = 0$。
\begin{align}
f(\Vx) = \frac{1}{2}\| \MA \Vx - \Vb \|_2^2 .
\end{align}
有专门的线性代数算法能够高效地解决这个问题;但是,我们也可以探索如何使用基于梯度的优化来解决这个问题,这可以作为这些技术是如何工作的一个简单例子。
存在专门的线性代数算法能够高效地解决这个问题;但是,我们也可以探索如何使用基于梯度的优化来解决这个问题,这可以作为这些技术是如何工作的一个简单例子。

首先,我们计算梯度:
\begin{align}
Expand All @@ -534,7 +534,7 @@ $ f(\Vx) = \frac{1}{2} || \MA \Vx - \Vb ||_2^2$的算法。


我们也可以使用牛顿法解决这个问题。
因为在这个情况下真实的函数是二次的,牛顿法所用的二次近似是精确的,该算法会在一步后收敛到全局最小点。
因为在这个情况下,真实函数是二次的,牛顿法所用的二次近似是精确的,该算法会在一步后收敛到全局最小点。

现在假设我们希望最小化同样的函数,但受 $\Vx^\Tsp \Vx \leq 1$ 的约束。
要做到这一点,我们引入Lagrangian
Expand Down
Loading

0 comments on commit db7517e

Please sign in to comment.