Skip to content

Commit

Permalink
update chap 13
Browse files Browse the repository at this point in the history
  • Loading branch information
HuangQinJian committed Nov 3, 2018
1 parent b18a5f5 commit c10d158
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 15 deletions.
4 changes: 4 additions & 0 deletions ch13_优化算法/modify_log.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ readme.md---->章节维护贡献者信息
modify_log---->用来记录修改日志
第 * 章_xxx.md---->对应章节markdown文件
第 * 章_xxx.pdf---->对应章节生成pdf文件,便于阅读

<----qjhuang-2018-11-3---->
1. 修改图片路径

其他---->待增加
2. 修改readme内容
3. 修改modify内容
Expand Down
30 changes: 15 additions & 15 deletions ch13_优化算法/第十三章_优化算法.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ CPU 除了负责浮点整形运算外,还有很多其他的指令集的负载

&emsp;&emsp;
没有免费的午餐定理:
<center><img src="../img/ch13/figure_13_4_1.png" alt="没有免费的午餐定理"></center>
<center><img src="./img/ch13/figure_13_4_1.png" alt="没有免费的午餐定理"></center>
<center>图 13.4 没有免费的午餐(黑点:训练样本;白点:测试样本)</center>

&emsp;&emsp;
Expand Down Expand Up @@ -103,7 +103,7 @@ CPU 除了负责浮点整形运算外,还有很多其他的指令集的负载
神经网络的训练中,通过改变神经元的权重,使网络的输出值尽可能逼近标签以降低误差 值,训练普遍使用 BP 算法,核心思想是,计算出输出与标签间的损失函数值,然后计算其相 对于每个神经元的梯度,进行权值的迭代。
&emsp;&emsp;
梯度消失会造成权值更新缓慢,模型训练难度增加。造成梯度消失的一个原因是,许多激 活函数将输出值挤压在很小的区间内,在激活函数两端较大范围的定义域内梯度为 $0$。造成学 习停止。
<center><img src="../img/ch13/figure_13_7_1.png" alt="sigmoid 函数与其导数"></center>
<center><img src="./img/ch13/figure_13_7_1.png" alt="sigmoid 函数与其导数"></center>
<center>图 13.7 sigmoid 函数的梯度消失</center>

## 13.8 权值初始化方法有哪些?
Expand Down Expand Up @@ -348,7 +348,7 @@ $$

&emsp;&emsp;
假设损失函数的数据空间是下图这样的,我们最优的权值就是为了寻找下图中的最小值点, 对于这种数学寻找最小值问题,采用梯度下降的方法再适合不过了。
<center><img src="../img/ch13/figure_13_15_1.png"></center>
<center><img src="./img/ch13/figure_13_15_1.png"></center>
<center>图 13.15.1 </center>

### 13.15.2 梯度消失、爆炸原因?
Expand All @@ -367,7 +367,7 @@ $$
(2)激活函数角度
&emsp;&emsp;
计算权值更新信息的时候需要计算前层偏导信息,因此如果激活函数选择不合适,比如使用 sigmoid,梯度消失就会很明显了,原因看下图,左图是sigmoid的损失函数图,右边是其倒数的图像,如果使用 sigmoid 作为损失函数,其梯度是不可能超过 $0.25$ 的,这样经过链式求导之后,很容易发生梯度消失。
<center><img src="../img/ch13/figure_13_15_2.png"></center>
<center><img src="./img/ch13/figure_13_15_2.png"></center>
<center>图 13.15.2 sigmod函数与其导数</center>

### 13.15.3 梯度消失、爆炸的解决方案
Expand Down Expand Up @@ -454,14 +454,14 @@ LSTM全称是长短期记忆网络(long-short term memory networks),是不

&emsp;&emsp;
我发现很多机器学习团队就是这样,有一个定义明确的开发集用来测量查准率和查全率,再加上这样一个单一数值评估指标,有时我叫单实数评估指标,能让你快速判断分类器或者分类器更好。所以有这样一个开发集,加上单实数评估指标,你的迭代速度肯定会很快,它可以加速改进您的机器学习算法的迭代过程。
<center><img src="../img/ch13/figure_13_18_1.png"></center>
<center><img src="./img/ch13/figure_13_18_1.png"></center>
<center>图 13.8.1 </center>

## 13.19 满足和优化指标(Satisficing and optimizing metrics)

&emsp;&emsp;
要把你顾及到的所有事情组合成单实数评估指标有时并不容易,在那些情况里,我发现有时候设立满足和优化指标是很重要的,让我告诉你是什么意思吧。
<center><img src="../img/ch13/figure_13_19_1.png"></center>
<center><img src="./img/ch13/figure_13_19_1.png"></center>
<center>图 13.9.1 </center>

&emsp;&emsp;
Expand Down Expand Up @@ -668,7 +668,7 @@ ILSRVRC(ImageNet 图像分类大赛) 比赛设置如下:$1000$类图像分

&emsp;&emsp;
深度学习算法对训练数据的胃口很大,当你收集到足够多带标签的数据构成训练集时,算法效果最好,这导致很多团队用尽一切办法收集数据,然后把它们堆到训练集里,让训练的数据量更大,即使有些数据,甚至是大部分数据都来自和开发集、测试集不同的分布。在深度学习时代,越来越多的团队都用来自和开发集、测试集分布不同的数据来训练,这里有一些微妙的地方,一些最佳做法来处理训练集和测试集存在差异的情况,我们来看看。
<center><img src="../img/ch13/figure_13_36_1.png" ></center>
<center><img src="./img/ch13/figure_13_36_1.png" ></center>
<center>图 13.36 Cat app example</center>

&emsp;&emsp;
Expand Down Expand Up @@ -822,7 +822,7 @@ batch size和学习率几乎不受其他超参数的影响,因此可以放到

&emsp;&emsp;
在深度学习研究早期,人们总是担心优化算法会困在极差的局部最优,不过随着深度学习理论不断发展,我们对局部最优的理解也发生了改变。我向你展示一下现在我们怎么看待局部最优以及深度学习中的优化问题。
<center><img src="../img/ch13/figure_13_43_1.png"></center>
<center><img src="./img/ch13/figure_13_43_1.png"></center>
<center>图 13.43.1 </center>

&emsp;&emsp;
Expand All @@ -831,40 +831,40 @@ batch size和学习率几乎不受其他超参数的影响,因此可以放到
全局最优。如果你要作图计算一个数字,比如说这两个维度,就容易出现有多个不同局部最优的图,而这些低维的图
曾经影响了我们的理解,但是这些理解并不正确。事实上,如果你要创建一个神经网络,通常梯度为零的点并不是这
个图中的局部最优点,实际上成本函数的零梯度点,通常是鞍点。
<center><img src="../img/ch13/figure_13_43_2.png"></center>
<center><img src="./img/ch13/figure_13_43_2.png"></center>
<center>图 13.43.2 </center>

&emsp;&emsp;
也就是在这个点,这里是和,高度即成本函数的值。
<center><img src="../img/ch13/figure_13_43_3.png"></center>
<center><img src="./img/ch13/figure_13_43_3.png"></center>
<center>图 13.43.3 </center>

&emsp;&emsp;
但是一个具有高维度空间的函数,如果梯度为$0$,那么在每个方向,它可能是凸函数,也可能是凹函数。如果你在$2$万维空间中,那么想要得到局部最优,所有的$2$万个方向都需要是这样,但发生的机率也许很小,也许是,你更有可能遇到有些方向的曲线会这样向上弯曲,另一些方向曲线向下弯,而不是所有的都向上弯曲,因此在高维度空间,你更可能碰到鞍点。
<center><img src="../img/ch13/figure_13_43_4.png"></center>
<center><img src="./img/ch13/figure_13_43_4.png"></center>
<center>图 13.43.4 </center>

&emsp;&emsp;
就像下面的这种:
<center><img src="../img/ch13/figure_13_43_5.png"></center>
<center><img src="./img/ch13/figure_13_43_5.png"></center>
<center>图 13.43.5 </center>

&emsp;&emsp;
而不会碰到局部最优。至于为什么会把一个曲面叫做鞍点,你想象一下,就像是放在马背上的马鞍一样,如果这是马,这是马的头,这就是马的眼睛,画得不好请多包涵,然后你就是骑马的人,要坐在马鞍上,因此这里的这个点,导数为$0$的点,这个点叫做鞍点。我想那确实是你坐在马鞍上的那个点,而这里导数为$0$。
<center><img src="../img/ch13/figure_13_43_6.png"></center>
<center><img src="./img/ch13/figure_13_43_6.png"></center>
<center>图 13.43.6 </center>

&emsp;&emsp;
所以我们从深度学习历史中学到的一课就是,我们对低维度空间的大部分直觉,比如你可以画出上面的图,并不能应用到高维度空间中。适用于其它算法,因为如果你有$2$万个参数,那么函数有$2$万个维度向量,你更可能遇到鞍点,而不是局部最优点。

&emsp;&emsp;
如果局部最优不是问题,那么问题是什么?结果是平稳段会减缓学习,平稳段是一块区域,其中导数长时间接近于$0$,如果你在此处,梯度会从曲面从从上向下下降,因为梯度等于或接近$0$,曲面很平坦,你得花上很长时间慢慢抵达平稳段的这个点,因为左边或右边的随机扰动,我换个笔墨颜色,大家看得清楚一些,然后你的算法能够走出平稳段(红色笔)。
<center><img src="../img/ch13/figure_13_43_7.png"></center>
<center><img src="./img/ch13/figure_13_43_7.png"></center>
<center>图 13.43.7 </center>

&emsp;&emsp;
我们可以沿着这段长坡走,直到这里,然后走出平稳段。
<center><img src="../img/ch13/figure_13_43_8.png"></center>
<center><img src="./img/ch13/figure_13_43_8.png"></center>
<center>图 13.43.8 </center>

&emsp;&emsp;
Expand Down

0 comments on commit c10d158

Please sign in to comment.