(本文是基于
neuralnetworksanddeeplearning
这仍开的老三回Improving the way neural networks
learn整而改为的读书笔记,根据个人口味做了去)

上一致章中,我们掌握了神经网络中最为紧要之算法:后为传来算法(BP)。它使神经网络的教练成为可能,是任何高级算法的根底。今天,我们若连续上学其他措施,这些方法让网络的训练结果再好。

这些措施包括:

  • 还好之代价函数:交叉熵(cross-entropy)函数
  • 季种标准方法:L1L2dropout暨数据集的人工增广
  • 平种植更好之初始化权值的法门
  • 相同名目繁多选 hyper-parameters 的迪策略
  • 旁组成部分多少技巧

穿插熵函数(cross-entropy)

实在生活中,我们都见面发出这么的阅历:当遇错误的时段,往往是咱学到物最多之当儿,而如果我们对友好之荒谬模糊不到头,进步反而会转换缓慢。

一致地,我们盼望神经网络能够打错误受再度快地修。那其实情况是如何的吧?来拘禁一个略的例证。

以此事例只是含有一个神经元,并且独自出一个输入。我们见面训练之神经元,使得:当输入为
1 时,输出为 0。我们拿权重和偏差分别初始化为 0.6 和 0.9。当输入为 1
时,网络出口为 0.82 (\(\frac{1}{1+e^{-1.5}}
\approx
0.82\))。我们采取平方差函数来训练网络,并拿学习率设为 0.15。

以此网络其实已落伍成一个线性回归模型。下面用一个卡通来演示网络的训练过程:

从中我们得观看,神经元快速地学习参数,最终输出 0.09 (已经杀相近 0
了)。现在,我们用参数和偏差初始化为 2.0,网络的开输出为 0.98
(跟咱们怀念如果之结果偏离大远),学习率依然为
0.15。看看这同不行网络会怎么样学习:

则学习率和上次同样,但网络同样开始读书之速度也生缓慢,在极其开头的 150
不好学习里,参数与不是几乎无改动,之后,学习进度突然增长,神经元的出口快速下跌到类似
0.0。这无异碰杀让人别,因为当神经元的出口严重错误时,学习之速度反而不是老快。

脚我们要了解问题发的来。神经元于教练之时,学习进度除了给学习率影响他,还于偏导数
\(\partial C/ \partial w\) 和 \(\partial C / \partial b\)
影响。所以,学习进度好缓慢,也便是偏导数的价太小。根据
\[ C=\frac{(y-a)^2}{2} \tag{54}
\]
(其中,\(a=\sigma(z)\),\(z=wx+b\)),我们得以求出(下面两个相中,已经用
x 和 y 的价替换为 1 和 0):
\[ \frac{\partial C}{\partial w} =
(a-y)\sigma'(z)x=a\sigma'(z) \tag{55} \]

\[ \frac{\partial C}{\partial b} =
(a-y)\sigma'(z)=a\sigma'(z) \tag{56} \]

一经想深入理解这简单独姿态,我们得回顾一下 sigmoid 函数的情节,如下图:

自打函数图像我们得以发现,当函数值类受 1 或 0 时,函数导数趋于
0,从而导致 (55) 和 (56) 两个姿态的价值趋于
0。这也是怎神经元一开始之习速率会那么慢,而中有学习进度会蓦然提升。

引入交叉熵代价函数

一旦化解上学进度降的题材,我们用由少个偏导数上面做文章。要么换一个代价函数,要么更换
\(\sigma\)
函数。这里,我们运用第一栽做法,将代价函数更换也交叉熵函数(cross-entropy)。

率先用一个例证来介绍陆续熵函数。

苟我们有如下神经元:

尽管陆续熵函数被定义为(这里而 y 是独票房价值值,在 0~1 里,这样才能够和 a
相搭):
\[ C=-\frac{1}{n}\sum_x{[y \ln a +
(1-y) \ln (1-a)]} \tag{57} \]
当,直觉上看不生是函数能化解上速率下降的题材,甚至看不发这可以变成一个代价函数。

咱俩事先说明为何这个函数可以当作代价函数。首先,这个函数是非负的,即
\(C>0\)(注意 \(a\) 的价值当 0~1
里边)。其次,当神经元实际出口及咱们想只要的结果接近时,交叉熵函数值会趋近
0。因此,交叉熵满足代价函数的中坚规则。

此外,交叉熵解决了上速率下降之题目。我们拿 \(a=\sigma(z)\) 代入 (57)
式,并动用链式法则可以取(这里的 \(w_j\) 应该特指最后一交汇的参数,即 \(w_j^L\)):
\[ \begin{eqnarray} \frac{\partial
C}{\partial w_j} & = & -\frac{1}{n} \sum_x \left( \frac{y
}{\sigma(z)} -\frac{(1-y)}{1-\sigma(z)} \right) \frac{\partial
\sigma}{\partial w_j} \tag{58}\\ & = & -\frac{1}{n} \sum_x
\left( \frac{y}{\sigma(z)} -\frac{(1-y)}{1-\sigma(z)}
\right)\sigma'(z) x_j. \tag{59}\end{eqnarray} \]
化简上式并以 \(\sigma(z)=\frac{1}{1+e^{-z}}\)
代入后得到:
\[ \frac{\partial C}{\partial
w_j}=\frac{1}{n}\sum_x {x_j(\sigma(z)-y)} \tag{61} \]
这表达式正是我们纪念要的!它表明,学习速率由 \(\sigma(z)-y\)
控制,也就是说,当误差越怪时,学习速率越快。而且免了 \(\sigma'()\) 导致的学习速率下降之题目。

看似地,我们得算出:
\[ \frac{\partial C}{\partial
b}=\frac{1}{n}\sum_x{(\sigma(z)-y)} \tag{62} \]
今昔,我们以陆续熵应用至事先的例证中,看看神经元的教练有啊变动。

率先是权重和偏差的初始值为 0.6 和 0.9 的事例:

得视网的训进度近乎完美。

下一场是权重和不是初始值均为 2.0 的例子:

立刻无异糟,正如我们希望的那么,神经元学习得十分快。

眼看半涂鸦实验被,采用的学习率是
0.005。事实上,对于不同的代价函数,学习率要作出相应的调动。

方对交叉熵函数的座谈还不过对一个神经元,其实大容易用她延伸到差不多重叠神经元的网布局。假设
\(y=y_1, y_2, \dots\)
是怀念只要的网出口,而 \(a_1^L, a_2^L,
\dots\) 是网的实在出口,则 cross-entropy 函数可以定义也:
\[ C=-\frac{1}{n}\sum_x \sum_y {[y_j
\ln a_j^L + (1-y_j) \ln(1-a_j^L)]} \tag{63} \]
吓了,介绍了这样多,那我们啊时用平方差函数,什么时用交叉熵呢?作者为起底意是,交叉熵几乎总是还好的精选,而因呢与上文提到的如出一辙,平方差函数容易当始发的时候遇到训练速率较迟缓的题材,而交叉熵则没有这种困扰。当然,这个题目应运而生的前提是平方差函数中因故了
sigmoid 函数。

陆续熵到底是呀,它是怎来之?

立即同样节吃,我们怀念明白,第一只吃螃蟹的人是怎想到交叉熵函数的。

苟我们发现了习速率下降的根源在 \(\sigma'(z)\)
函数,我们设怎么化解之问题也?当然,方法有许多,这里我们考虑这么的思绪:是否会招来一个初的代价函数,将
\(\sigma'(z)\)
这个桩消掉?假如我们盼望最后的偏导数满足下面的样式:
\[ \frac{\partial C}{\partial w_j}=x_j
(a-y) \tag{71} \]

\[ \frac{\partial C}{\partial b}=(a-y)
\tag{72} \]

当即有限个偏导数能如神经网络在误差越老时,训练进度越来越快。

忆 BP 的季个公式,可以落:
\[ \frac{\partial C}{\partial
b}=\frac{\partial C}{\partial a}\sigma'(z) \tag{73} \]
这里的 \(\sigma()\) 函数2018正版葡京赌侠诗采用的是
sigmoid,所以 \(\sigma'(z)=\sigma(z)(1-\sigma(z))=a(1-a)\),将之姿势代入
(73) ,得到:
\[ \frac{\partial C}{\partial
b}=\frac{\partial C}{\partial a}a(1-a) \]
同咱们最终的目标 (72) 式比较,需要满足:
\[ \frac{\partial C}{\partial
a}=\frac{a-y}{1(1-a)} \tag{75} \]
本着 (75) 进行积分后,便拿走:
\[ C=-\frac{1}{n}\sum_x{[y\ln
a+(1-y)\ln(1-a)]}+constant \tag{77} \]
迄今为止,我们都推出了接力熵函数的形式。

本来啦,交叉熵真正的发源是信息论,更具象的介绍过了以学科的层面,所以便不再深入了。

Softmax

眼前无异节被,我们要介绍了接力熵如何缓解训练进度回落的题目,这是自从代价函数的角度思考问题。其实,我们还有其余一样种方式,那就是是更换
\(\sigma()\)
函数。这里而简明介绍一个新的 \(\sigma()\) :Softmax。

Softmax 的成效与 sigmoid 类似,只不过前者的函数形式是这样的:
\[
a_j^L=\frac{e^{z_j^L}}{\sum_k{e^{z_k^L}}} \tag{78} \]
⚠️分母是享有出口神经元的总数。这表示,经过 Softmax
函数后,所有神经元的输出会呈现出概率分布的体制。

当增大其中一个神经元输出时,其他神经元的输出值会转换多少,而且更换多少的总和相当前者多的价。反之亦然。这是以具有神经元的输出值总和始终为
1。

此外,Softmax 的出口镇为正在。

Softmax 解决上速率下降之题材

当即无异于坏,我们定义一个 log-likelihood 代价函数,通过其来了解 Softmax
如何解决 learning slowdown 的问题。

log-likelihood 的函数形式也:
\[ C \equiv -\ln a_y^L \tag{80}
\]
事先解释一下 \(a_y^L\),比方说,在
MNIST 数据集中,我们只要判断一致摆设图片属于 10
类中之哇一样近似,那么,输出结果应当是一个 10 维的朝向量 \(a^L\),而实际结果则是数字 \(y\),比如 7。那么,\(a_y^L\) 则表示 \(a_7^L\)
这个桩对应的票房价值值有多高。如果概率值(靠近
1)越强,证明猜测结果更是对,那么 \(C\) 的价值就更小,反的进一步充分。

产生了代价函数后,我们照例要出偏导数:
\[ \frac{\partial C}{\partial
b_j^L}=a_j^L-y_j \tag{81} \]

\[ \frac{\partial C}{\partial
w_{jk}^L}=a_k^{L-1}(a_j^L-y_j) \tag{82} \]

这边不存类似 sigmoid 导数那样使上速率下降之气象。

(写及此地的下,我恍然发出一个困惑:不管是此处的
Softmax,还是的接力熵,我们都只是针对最后一重合的导数和错求了偏导,但前面面层的偏导数却无计算,怎么能够得前面层的偏导就无会见遇到
\(\sigma'()\) 趋于 0
的题材吗?要理解,根据 BP 算法的公式,误差有这么的传递公式:\(\delta^l\)=\(((W^{l+1})^T \delta^{l+1}) \odot
\sigma'(z^l)\),注意,这里依旧会产出 \(\sigma'()\),而前面层的权重和谬误的偏导数又是根据此误差计算的,这样的话,前面层的上速率下降的问题未还是没有解决吧?这个问题先行小放正,看看之后作者有没出解答。)

写了如此多,我们又如咨询一个好像的题材:什么时用 sigmoid 和
cross-entropy,什么时用 softmax 和
log-likelihood。事实上,大部分情况下就片只选项都能拉动不错的结果,当然,如果想只要出口结果呈现概率分布的话语,Softmax
无疑会重新好。

参考

  • Improving the way neural networks
    learn

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图