读书笔记:neuralnetworksanddeeplearning chapter3(1)

引入交叉熵代价函数

要消除学习进度下降的难点,大家必要从七个偏导数上边做小说。要么换三个代价函数,要么更换
\(\sigma\)
函数。那里,我们利用第1种做法,将代价函数更换为交叉熵函数(cross-entropy)。

先是用二个例证来介绍陆续熵函数。

万一大家有如下神经元:

图片 1

则陆续熵函数被定义为(那里假定 y 是个票房价值值,在 0~1 之内,那样才能跟 a
相搭):
\[ C=-\frac{1}{n}\sum_x{[y \ln a +
(1-y) \ln (1-a)]} \tag{57} \]
自然,直觉上看不出那些函数能缓解上学速率下跌的题目,甚至看不出这足以改为1个代价函数。

笔者们先表明为什么那些函数可以看作代价函数。首先,那一个函数是非负的,即
\(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

可以见见互联网的教练进程近乎完美。

接下来是权重和错误起头值均为 2.0 的事例:

图片 3

那五回,正如大家盼望的这样,神经元学习得可怜快。

这五次试验中,拔取的学习率是
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 函数。

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 导数那样使学习速率降低的图景。

(写到那里的时候,作者忽然发生2个迷惑:不管是此处的
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
无疑会更好。

参考

那几个方法包罗:

上一章中,大家领会了神经互连网中最重视的算法:后向传播算法(BP)。它使得神经网络的教练成为大概,是其他高级算法的根基。前几天,大家要继承深造其他格局,那几个主意使得网络的教练结果更好。

交叉熵到底是什么样,它是怎么来的?

这一节中,我们想精晓,第三个吃螃蟹的人是怎么想到交叉熵函数的。

只要大家发现了上学速率降低的发源在于 \(\sigma'(z)\)
函数,大家要什么样缓解这几个题材吧?当然,方法有好多,那里大家考虑这么的笔触:是或不是能找2个新的代价函数,将
\(\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} \]
迄今,大家早就推出了接力熵函数的花样。

本来啦,交叉熵真正的来自是音讯论,更有血有肉的介绍超出了本课程的层面,所以就不再长远了。

(本文是基于
neuralnetworksanddeeplearning
那本书的第壹章Improving the way neural networks
learn
重整而成的读书笔记,根据个人口味做了删减)

  • 更好的代价函数:交叉熵(cross-entropy)函数
  • 种种标准方法:L1L2dropout以及数据集的人为增广
  • 一种更好的开首化权值的情势
  • 一连串选拔 hyper-parameters 的启迪策略
  • 其余部分小技巧

穿插熵函数(cross-entropy)

实则生活中,大家都会有这么的经历:当遭逢错误的时候,往往是大家学到东西最多的时候,而只要我们对协调的错误模糊不清,进步反而会变慢。

一致地,大家期望神经互联网可以从错误中更快地学习。那实在情状是怎么的吗?来看壹个简短的例证。

图片 4

其一例子只含有一个神经元,并且唯有八个输入。大家会锻炼那个神经元,使得:当输入为
1 时,输出为 0。大家将权重和偏差分别开头化为 0.6 和 0.9。当输入为 1
时,网络出口为 0.82 (\(\frac{1}{1+e^{-1.5}}
\approx
0.82\))。大家采纳平方差函数来练习互连网,并将学习率设为 0.15。

本条互联网其实早就落后成一个线性回归模型。上面用1个卡通来演示网络的教练进度:

图片 5

从中我们可以见见,神经元火速地读书参数,最后输出 0.09 (已经很相近 0
了)。未来,我们将参数和不是初步化为 2.0,网络的起先输出为 0.98
(跟我们想要的结果偏离甚远),学习率照旧为
0.15。看看那三回互连网会怎么学习:

图片 6

尽管如此学习率和上次一律,但网络一初步读书的速度却很慢,在最初叶的 147次学习里,参数和谬误大概一贯不改变,之后,学习进程突然增高,神经元的出口疾速降到接近
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 函数的故事情节,如下图:

图片 7

从函数图像大家可以发现,当函数值接近于 1 或 0 时,函数导数趋于
0,从而造成 (55) 和 (56) 多个姿态的值趋于
0。那也是为啥神经元一发轫的学习速率会那么慢,而当中有些学习进度会突然提高。

Softmax

前一节中,大家第贰介绍了接力熵如何消除练习进程下滑的标题,那是从代价函数的角度思考难点。其实,大家还有另一种办法,那就是更换
\(\sigma()\)
函数。那里要不难介绍三个新的 \(\sigma()\) :Softmax。

Softmax 的效应和 sigmoid 类似,只可是前者的函数方式是这么的:
\[
a_j^L=\frac{e^{z_j^L}}{\sum_k{e^{z_k^L}}} \tag{78} \]
⚠️分母是拥有出口神经元的总和。这代表,经过 Softmax
函数后,全数神经元的输出会显示出可能率分布的样式。

图片 8

当增大其中1个神经元输出时,其他神经元的输出值会变小,而且变小的总额至极前者扩展的值。反之亦然。那是因为兼具神经元的输出值总和始终为
1。

其它,Softmax 的出口始终为正在。