(本文是基于
neuralnetworksanddeeplearning
这本书的第三章Improving the way neural networks
learn
重整而成的读书笔记,遵照个人口味做了除去)

上一章中,我们精晓了神经网络中最重点的算法:后向传来算法(BP)。它使得神经网络的操练成为可能,是其他高档算法的基本功。先天,大家要连续读书其他措施,这个格局使得网络的磨炼结果更好。

这个点子包括:

  • 更好的代价函数:交叉熵(cross-entropy)函数
  • 四种标准方法:L1L2dropout以及数据集的人造增广
  • 一种更好的初叶化权值的章程
  • 一多样采取 hyper-parameters 的启迪策略
  • 其他部分小技巧

陆续熵函数(cross-entropy)

实际生活中,大家都会有这么的阅历:当遇到错误的时候,往往是我们学到东西最多的时候,而一旦我们对自己的错误模糊不清,提升反而会变慢。

相同地,我们期待神经网络可以从错误中更快地读书。这实在情况是什么样的呢?来看一个概括的事例。

2018正版葡京赌侠诗 1

以此事例只包含一个神经元,并且唯有一个输入。我们会磨炼这个神经元,使得:当输入为
1 时,输出为 0。我们将权重和不是分别先河化为 0.6 和 0.9。当输入为 1
时,网络出口为 0.82 (\(\frac{1}{1+e^{-1.5}}
\approx
0.82\))。我们使用平方差函数来磨练网络,并将学习率设为 0.15。

本条网络其实早就落伍成一个线性回归模型。下边用一个动画片来演示网络的教练过程:

2018正版葡京赌侠诗 2

从中大家可以看到,神经元快捷地读书参数,最后输出 0.09 (已经很类似 0
了)。现在,大家将参数和偏差初阶化为 2.0,网络的起来输出为 0.98
(跟大家想要的结果偏离甚远),学习率依旧为
0.15。看看这一次网络会怎么学习:

2018正版葡京赌侠诗 3

虽然如此学习率和上次一律,但网络一起始读书的速度却很慢,在最先导的 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 函数的情节,如下图:

2018正版葡京赌侠诗 4

从函数图像大家可以窥见,当函数值接近于 1 或 0 时,函数导数趋于
0,从而致使 (55) 和 (56) 两个姿态的值趋于
0。这也是为啥神经元一起头的求学速率会那么慢,而中级部分学习进度会忽然提高。

引入交叉熵代价函数

要化解上学进度下落的问题,我们需要从六个偏导数下边做作品。要么换一个代价函数,要么更换
\(\sigma\)
函数。那里,我们使用第一种做法,将代价函数更换为交叉熵函数(cross-entropy)。

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

比方我们有如下神经元:

2018正版葡京赌侠诗 5

则陆续熵函数被定义为(那里假定 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 的例证:

2018正版葡京赌侠诗 6

可以看出网络的训练进度近乎完美。

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

2018正版葡京赌侠诗 7

这两回,正如我们期待的那样,神经元学习得不行快。

这几遍实验中,接纳的学习率是
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()\) 函数选取的是
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
函数后,所有神经元的输出会显示出概率分布的体制。

2018正版葡京赌侠诗 8

当增大其中一个神经元输出时,其他神经元的输出值会变小,而且变小的总数十分前者扩大的值。反之亦然。这是因为兼具神经元的输出值总和始终为
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
无疑会更好。

参考

发表评论

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

网站地图xml地图