Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
d2l-zh
提交
c8b72e5b
D
d2l-zh
项目概览
OpenDocCN
/
d2l-zh
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
d2l-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
c8b72e5b
编写于
4月 02, 2018
作者:
A
Aston Zhang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
till mini-batch sgd
上级
70ff9114
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
33 addition
and
23 deletion
+33
-23
chapter_optimization/gd-sgd-scratch.md
chapter_optimization/gd-sgd-scratch.md
+31
-21
chapter_optimization/optimization-intro.md
chapter_optimization/optimization-intro.md
+2
-2
未找到文件。
chapter_optimization/gd-sgd-scratch.md
浏览文件 @
c8b72e5b
...
...
@@ -30,7 +30,7 @@ $$x \leftarrow x - \eta f'(x)$$
## 学习率
上述梯度下降算法中的$
\e
ta$
(取正数)叫做学习率。这是一个超参数,需要人工设定
。
上述梯度下降算法中的$
\e
ta$
叫做学习率。这是一个超参数,需要人工设定。学习率$
\e
ta$要取正数
。
需要注意的是,学习率过大可能会造成自变量$x$越过(overshoot)目标函数$f(x)$的最优解,甚至发散。见图7.2(右)。
...
...
@@ -41,27 +41,27 @@ $$x \leftarrow x - \eta f'(x)$$
现在我们考虑一个更广义的情况:目标函数的输入为向量,输出为标量。
假设目标函数$f:
\m
athbb{R}^d
\r
ightarrow
\m
athbb{R}$的输入是一个
多维向量$
\m
athbf{x} = [x_1, x_2,
\l
dots, x_d]^
\t
op$。目标函数$f(
\m
athbf{x})$有关$
\m
athbf{x}$的梯度是一个由
偏导数组成的向量:
假设目标函数$f:
\m
athbb{R}^d
\r
ightarrow
\m
athbb{R}$的输入是一个
$d$维向量$
\m
athbf{x} = [x_1, x_2,
\l
dots, x_d]^
\t
op$。目标函数$f(
\m
athbf{x})$有关$
\m
athbf{x}$的梯度是一个由$d$个
偏导数组成的向量:
$$
\n
abla_
\m
athbf{x} f(
\m
athbf{x}) =
\b
igg[
\f
rac{
\p
artial f(
\m
athbf{x})}{
\p
artial x_1},
\f
rac{
\p
artial f(
\m
athbf{x})}{
\p
artial x_2},
\l
dots,
\f
rac{
\p
artial f(
\m
athbf{x})}{
\p
artial x_d}
\b
igg]^
\t
op.$$
为表示简洁,我们
有时
用$
\n
abla f(
\m
athbf{x})$代替$
\n
abla_
\m
athbf{x} f(
\m
athbf{x})$。梯度中每个偏导数元素$
\p
artial f(
\m
athbf{x})/
\p
artial x_i$代表着$f$在$
\m
athbf{x}$有关输入$x_i$的变化率。为了测量$f$沿着单位向量$
\m
athbf{u}$方向上的变化率,在多元微积分中,我们定义$f$在$
\m
athbf{x}$上沿着$
\m
athbf{u}$方向的方向导数为
为表示简洁,我们用$
\n
abla f(
\m
athbf{x})$代替$
\n
abla_
\m
athbf{x} f(
\m
athbf{x})$。梯度中每个偏导数元素$
\p
artial f(
\m
athbf{x})/
\p
artial x_i$代表着$f$在$
\m
athbf{x}$有关输入$x_i$的变化率。为了测量$f$沿着单位向量$
\m
athbf{u}$方向上的变化率,在多元微积分中,我们定义$f$在$
\m
athbf{x}$上沿着$
\m
athbf{u}$方向的方向导数为
$$D_
\m
athbf{u} f(
\m
athbf{x}) =
\l
im_{h
\r
ightarrow 0}
\f
rac{f(
\m
athbf{x} + h
\m
athbf{u}) - f(
\m
athbf{x})}{h}$$
$$D_
\m
athbf{u} f(
\m
athbf{x}) =
\l
im_{h
\r
ightarrow 0}
\f
rac{f(
\m
athbf{x} + h
\m
athbf{u}) - f(
\m
athbf{x})}{h}
.
$$
由链式法则
,该方向导数可以改写为
依据方向导数性质 [1,14.6节定理三]
,该方向导数可以改写为
$$D_
\m
athbf{u} f(
\m
athbf{x}) =
\n
abla f(
\m
athbf{x})
\c
dot
\m
athbf{u}$$
$$D_
\m
athbf{u} f(
\m
athbf{x}) =
\n
abla f(
\m
athbf{x})
\c
dot
\m
athbf{u}
.
$$
方向导数$D_
\m
athbf{u} f(
\m
athbf{x})$给出了$f$在$
\m
athbf{x}$上沿着所有可能方向的变化率。为了最小化$f$,我们希望找到$f$能被降低最快的方向。因此,我们可以通过$
\m
athbf{u}$来最小化方向导数$D_
\m
athbf{u} f(
\m
athbf{x})$。
方向导数$D_
\m
athbf{u} f(
\m
athbf{x})$给出了$f$在$
\m
athbf{x}$上沿着所有可能方向的变化率。为了最小化$f$,我们希望找到$f$能被降低最快的方向。因此,我们可以通过
单位向量
$
\m
athbf{u}$来最小化方向导数$D_
\m
athbf{u} f(
\m
athbf{x})$。
由于$D_
\m
athbf{u} f(
\m
athbf{x}) =
\|\n
abla f(
\m
athbf{x})
\|
\c
dot
\|\m
athbf{u}
\|
\c
dot
\t
ext{cos} (
\t
heta) =
\|\n
abla f(
\m
athbf{x})
\|
\c
dot
\t
ext{cos} (
\t
heta)$,
其中$
\t
heta$为
$
\n
abla f(
\m
athbf{x})$和$
\m
athbf{u}$之间的夹角,当$
\t
heta =
\p
i$,$
\t
ext{cos}(
\t
heta)$取得最小值-1。因此,当$
\m
athbf{u}$在梯度方向$
\n
abla f(
\m
athbf{x})$的相反方向时,方向导数$D_
\m
athbf{u} f(
\m
athbf{x})$被最小化。所以,我们可能通过下面的
**梯度下降算法**
来不断降低目标函数$f$的值:
其中$
\t
heta$为
梯度$
\n
abla f(
\m
athbf{x})$和单位向量$
\m
athbf{u}$之间的夹角,当$
\t
heta =
\p
i$,$
\t
ext{cos}(
\t
heta)$取得最小值-1。因此,当$
\m
athbf{u}$在梯度方向$
\n
abla f(
\m
athbf{x})$的相反方向时,方向导数$D_
\m
athbf{u} f(
\m
athbf{x})$被最小化。所以,我们可能通过下面的梯度下降算法
来不断降低目标函数$f$的值:
$$
\m
athbf{x} :=
\m
athbf{x} -
\e
ta
\n
abla f(
\m
athbf{x})$$
$$
\m
athbf{x} :=
\m
athbf{x} -
\e
ta
\n
abla f(
\m
athbf{x})
.
$$
相同地,其中$
\e
ta$(取正数)称作学习率
或步长
。
相同地,其中$
\e
ta$(取正数)称作学习率。
## 随机梯度下降
...
...
@@ -69,30 +69,35 @@ $$\mathbf{x} := \mathbf{x} - \eta \nabla f(\mathbf{x})$$
$$f(
\m
athbf{x}) =
\f
rac{1}{n}
\s
um_{i = 1}^n f_i(
\m
athbf{x}),$$
其中$f_i(
\m
athbf{x})$是有关索引为$i$的训练数据
点的损失函数。需要强调的是,梯度下降每次迭代的计算开销随着$n$线性增长。因此,当$n$很大时,每次迭代的计算开销很高。
其中$f_i(
\m
athbf{x})$是有关索引为$i$的训练数据
样本的损失函数,$n$是训练数据样本数。由于
这时我们需要
**随机梯度下降**
算法。在每次迭代时,该算法随机均匀采样$i$并计算$
\n
abla f_i(
\m
athbf{x})$。事实上,随机梯度$
\n
abla f_i(
\m
athbf{x})$是对梯度$
\n
abla f(
\m
athbf{x})$的无偏估计:
$$
\n
abla f(
\m
athbf{x}) =
\f
rac{1}{n}
\s
um_{i = 1}^n
\n
abla f_i(
\m
athbf{x}),$$
$$
\m
athbb{E}_i
\n
abla f_i(
\m
athbf{x}) =
\f
rac{1}{n}
\s
um_{i = 1}^n
\n
abla f_i(
\m
athbf{x}) =
\n
abla f(
\m
athbf{x})$$
梯度下降每次迭代的计算开销随着$n$线性增长。因此,当训练数据样本数很大时,梯度下降每次迭代的计算开销很高。这时我们可以使用随机梯度下降。给定学习率$
\e
ta$(取正数),在每次迭代时,随机梯度下降算法随机均匀采样$i$并计算$
\n
abla f_i(
\m
athbf{x})$来迭代$
\m
athbf{x}$:
$$
\m
athbf{x} :=
\m
athbf{x} -
\e
ta
\n
abla f_i(
\m
athbf{x}).$$
## 小批量随机梯度下降
事实上,随机梯度$
\n
abla f_i(
\m
athbf{x})$是对梯度$
\n
abla f(
\m
athbf{x})$的无偏估计:
$$
\m
athbb{E}_i
\n
abla f_i(
\m
athbf{x}) =
\f
rac{1}{n}
\s
um_{i = 1}^n
\n
abla f_i(
\m
athbf{x}) =
\n
abla f(
\m
athbf{x}).$$
## 小批量随机梯度下降
广义上,每
次迭代可以随机均匀采样一个由训练数据点索引所组成的小批量
$
\m
athcal{B}$。类似地,我们可以使用
广义上,每
一次迭代可以随机均匀采样一个由训练数据样本索引所组成的小批量(mini-batch)
$
\m
athcal{B}$。类似地,我们可以使用
$$
\n
abla f_
\m
athcal{B}(
\m
athbf{x}) =
\f
rac{1}{|
\m
athcal{B}|}
\s
um_{i
\i
n
\m
athcal{B}}
\n
abla f_i(
\m
athbf{x})$$
来
更新
$
\m
athbf{x}$:
来
迭代
$
\m
athbf{x}$:
$$
\m
athbf{x} :=
\m
athbf{x} -
\e
ta
\n
abla f_
\m
athcal{B}(
\m
athbf{x})
,
$$
$$
\m
athbf{x} :=
\m
athbf{x} -
\e
ta
\n
abla f_
\m
athcal{B}(
\m
athbf{x})
.
$$
其中$|
\m
athcal{B}|$代表批量中索引数量,$
\e
ta$(取正数)称作学习率或步长
。同样,小批量随机梯度$
\n
abla f_
\m
athcal{B}(
\m
athbf{x})$也是对梯度$
\n
abla f(
\m
athbf{x})$的无偏估计:
在上式中,$|
\m
athcal{B}|$代表样本批量大小,$
\e
ta$(取正数)称作学习率
。同样,小批量随机梯度$
\n
abla f_
\m
athcal{B}(
\m
athbf{x})$也是对梯度$
\n
abla f(
\m
athbf{x})$的无偏估计:
$$
\m
athbb{E}_
\m
athcal{B}
\n
abla f_
\m
athcal{B}(
\m
athbf{x}) =
\n
abla f(
\m
athbf{x}).$$
这个算法叫做
**小批量随机梯度下降**
。该算法每次迭代的计算开销为$
\m
athcal{O}(|
\m
athcal{B}|)$。因此,当批量较小时,每次迭代的计算开销也较小。
这个算法叫做小批量随机梯度下降。该算法每次迭代的计算开销为$
\m
athcal{O}(|
\m
athcal{B}|)$。当批量大小为1时,该算法即随机梯度下降;当批量大小等于训练数据样本数,该算法即梯度下降。和学习率一样,批量大小也是一个超参数。当批量较小时,虽然每次迭代的计算开销较小,但计算机并行处理批量中各个样本的能力往往只得到较少利用。因此,当训练数据集的样本较少时,我们可以使用梯度下降;当样本较多时,我们可以使用小批量梯度下降并依据计算资源选择合适的批量大小。
## 算法实现和实验
...
...
@@ -229,7 +234,7 @@ optimize(batch_size=10, lr=5, num_epochs=3, log_interval=10)
optimize(batch_size=10, lr=0.002, num_epochs=3, log_interval=10)
```
##
结论
##
小结
*
当训练数据较大,梯度下降每次迭代计算开销较大,因而(小批量)随机梯度下降更受青睐。
*
学习率过大过小都有问题。合适的学习率要靠实验来调。
...
...
@@ -241,4 +246,9 @@ optimize(batch_size=10, lr=0.002, num_epochs=3, log_interval=10)
*
梯度下降和随机梯度下降虽然看上去有效,但可能会有哪些问题?
## 参考文献
[1] J. Stewart. Calculus: Early Transcendentals (7th Edition). Brooks Cole. 2010.
**吐槽和讨论欢迎点**
[
这里
](
https://discuss.gluon.ai/t/topic/1877
)
chapter_optimization/optimization-intro.md
浏览文件 @
c8b72e5b
...
...
@@ -73,7 +73,7 @@ plt.show()
刚刚我们提到,梯度接近或变成零可能是由于当前解在局部最优解附近所造成的。事实上,另一种可能性是当前解在鞍点(saddle point)附近。举个例子,给定函数
$$f(x) = x^3$$
$$f(x) = x^3
,
$$
我们可以找出该函数的鞍点位置。
...
...
@@ -91,7 +91,7 @@ plt.show()
再举个定义在二维空间的函数的例子,例如
$$f(x, y) = x^2 - y^2$$
$$f(x, y) = x^2 - y^2
.
$$
我们可以找出该函数的鞍点位置。也许读者已经发现了,该函数看起来像一个马鞍,而鞍点恰好是马鞍上可坐区域的中心。
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录