diff --git a/chapter_optimization/gd-sgd-scratch.md b/chapter_optimization/gd-sgd-scratch.md index db812b37426d768a6c19b274d6e4b4e8b1db37aa..d36082d7b75a51e2e90d23e6eb9191ba78e8f0f8 100644 --- a/chapter_optimization/gd-sgd-scratch.md +++ b/chapter_optimization/gd-sgd-scratch.md @@ -1,6 +1,7 @@ # 梯度下降和随机梯度下降——从零开始 -本节中,我们将介绍梯度下降(gradient descent)和随机梯度下降(stochastic gradient descent)算法。由于梯度下降是优化算法的核心部分,理解梯度的涵义十分重要。为了帮助大家深刻理解梯度,我们将从数学角度阐释梯度下降的意义。 +本节中,我们将介绍梯度下降(gradient descent)和随机梯度下降(stochastic gradient descent)算法。由于梯度下降是优化算法的核心部分,理解梯度的涵义十分重要。为了帮助大家深刻理解梯度,我们将从数学角度阐释梯度下降的意义。在这个章节中,我们假设目标函数是连续可导。 + ## 一维梯度下降 @@ -9,11 +10,11 @@ 假设函数$f: \mathbb{R} \rightarrow \mathbb{R}$的输入和输出都是标量。给定足够小的数$\epsilon$,根据泰勒展开公式(参见[“数学基础”](../chapter_appendix/math.md)一节),我们得到以下的近似 -$$f(x + \epsilon) \approx f(x) + f'(x) \epsilon.$$ +$$f(x + \epsilon) \approx f(x) + f'(x) \epsilon + o(\epsilon^2).$$ 假设$\eta$是一个常数,将$\epsilon$替换为$-\eta f'(x)$后,我们有 -$$f(x - \eta f'(x)) \approx f(x) - \eta f'(x)^2.$$ +$$f(x - \eta f'(x)) \approx f(x) - \eta f'(x)^2 + o(\ets^2).$$ 如果$\eta$是一个很小的正数,那么 @@ -34,7 +35,7 @@ $$x \leftarrow x - \eta f'(x).$$ 需要注意的是,学习率过大可能会造成自变量$x$越过(overshoot)目标函数$f(x)$的最优解,甚至发散。见图7.2(右)。 -然而,如果学习率过小,目标函数中自变量的迭代速度会过慢。实际中,一个合适的学习率通常是需要通过多次实验找到的。 +然而,如果学习率过小,目标函数中自变量的收敛速度会过慢。实际中,一个合适的学习率通常是需要通过多次实验找到的。 ## 多维梯度下降 @@ -85,7 +86,7 @@ $$\mathbb{E}_i \nabla f_i(\boldsymbol{x}) = \frac{1}{n} \sum_{i = 1}^n \nabla f_ ## 小批量随机梯度下降 -广义上,每一次迭代可以随机均匀采样一个由训练数据样本索引所组成的小批量(mini-batch)$\mathcal{B}$。类似地,我们可以使用 +广义上,每一次迭代可以随机均匀采样一个由训练数据样本索引所组成的小批量(mini-batch)$\mathcal{B}$。一般来说我们可以采用可重复采样(sampling with replacement)或者不可重复采样(sampling without replacement)。可重复采样意味着随机抓取的小批量数据中可以出现重复的样本,而不可重复采样相反不允许出现重复的样本。基于小批量的样本,我们可以使用 $$\nabla f_\mathcal{B}(\boldsymbol{x}) = \frac{1}{|\mathcal{B}|} \sum_{i \in \mathcal{B}}\nabla f_i(\boldsymbol{x})$$ @@ -99,6 +100,7 @@ $$\mathbb{E}_\mathcal{B} \nabla f_\mathcal{B}(\boldsymbol{x}) = \nabla f(\boldsy 这个算法叫做小批量随机梯度下降。该算法每次迭代的计算开销为$\mathcal{O}(|\mathcal{B}|)$。当批量大小为1时,该算法即随机梯度下降;当批量大小等于训练数据样本数,该算法即梯度下降。和学习率一样,批量大小也是一个超参数。当批量较小时,虽然每次迭代的计算开销较小,但计算机并行处理批量中各个样本的能力往往只得到较少利用。因此,当训练数据集的样本较少时,我们可以使用梯度下降;当样本较多时,我们可以使用小批量梯度下降并依据计算资源选择合适的批量大小。 +在实际的训练中,我们还可以把数据集随机分成多份,每份的大小是$\mathcal{B}$。接着我们就可以按顺序用小批量数据来进行梯度下降。由于算法的收敛往往需要几遍数据集迭代以及随机性可以增加算法的收敛的速度,我们可以在每次数据迭代前对数据集进行随机打乱(shuffle)。但在这样的情况下,小批量随机梯度不再是梯度$\nabla f(\boldsymbol{x})$的无偏估计。 ## 小批量随机梯度下降的实现 diff --git a/chapter_optimization/optimization-intro.md b/chapter_optimization/optimization-intro.md index dabc95db9759de38ab3876e604818cb1664a9f39..8e77b3bf55bcecefdad313f48cc0cff3a2cde5ef 100644 --- a/chapter_optimization/optimization-intro.md +++ b/chapter_optimization/optimization-intro.md @@ -104,7 +104,7 @@ gb.plt.ylabel('y') gb.plt.show() ``` -在上图的鞍点位置,目标函数在$x$轴上是局部最小值,而在$y$轴上是局部最大值。假设目标函数在一个维度为$k$的点上可能是局部最小值、局部最大值或者是鞍点(梯度为零)。想象一下,如果目标函数在该点任意维度上是局部最小值或者局部最大值的概率分别是0.5,该点为目标函数局部最小值的概率为$0.5^k$。事实上,由于深度学习模型参数通常都是高维的,目标函数的鞍点通常比局部最小值更常见。 +在上图的鞍点位置,目标函数在$x$轴上是局部最小值,而在$y$轴上是局部最大值。在一个维度为$k$的空间中,临界点(梯度为零)是局部最小值、局部最大值或者是鞍点是由黑塞矩阵(Hessian matrix)的$k$个特征值决定。当特征值都为正时,临界点是局部极小值,相反如果特征值都为负时,临界点是局部极大值。当$k$个特征值有正有负时,临界点是鞍点。随机矩阵理论告诉我们对于一个大的高斯随机矩阵来说,任一特征值是正或者是负的概率都是0.5,那么临界点为目标函数局部最小值的概率为$0.5^k$。由于深度学习模型参数通常都是高维的,目标函数的鞍点通常比局部最小值更常见。 ## 小结