菜单

读书笔记:neuralnetworksanddeeplearning chapter3(1)读书笔记:neuralnetworksanddeeplearning chapter3(1)

2018年9月19日 - 中甲报道

(本文是冲
neuralnetworksanddeeplearning
这仍开之老三章Improving the way neural networks
learn整治而变成的读书笔记,根据个人口味做了除去)

(本文是根据
neuralnetworksanddeeplearning
这仍开的老三节Improving the way neural networks
learn整治而成为的读书笔记,根据个人口味做了剔除)

直达一致段中,我们知晓了神经网络中最好紧要之算法:后朝着传来算法(BP)。它使神经网络的训成为可能,是其余高级算法的根基。今天,我们而累学外方式,这些主意教网络的训练结果又好。

齐同一节中,我们知道了神经网络中极度重点的算法:后朝传来算法(BP)。它让神经网络的训练成为可能,是其他高级算法的根基。今天,我们如果继续求学其他办法,这些主意让网络的教练结果还好。

这些方式包括:

这些方法包括:

接力熵函数(cross-entropy)

实质上在备受,我们都见面有这般的涉:当遇错误的时节,往往是咱学到物太多之早晚,而若我们对自己之荒唐模糊不干净,进步反而会变换缓慢。

平等地,我们盼望神经网络能够打左被重复快地修。那其实情况是怎样的啊?来拘禁一个简短的例证。

图片 1

夫例子仅仅包含一个神经元,并且只是发一个输入。我们见面训练是神经元,使得:当输入为
1 时,输出为 0。我们将权重和错分别初始化为 0.6 和 0.9。当输入为 1
时,网络出口为 0.82 (\(\frac{1}{1+e^{-1.5}}
\approx
0.82\))。我们下平方差函数来训练网络,并以学习率设为 0.15。

斯网络其实已落后成一个线性回归模型。下面用一个动画片来演示网络的训过程:

图片 2

从中我们得以视,神经元快速地读书参数,最终输出 0.09 (已经特别接近 0
了)。现在,我们以参数与错初始化为 2.0,网络的初始输出为 0.98
(跟咱们怀念如果的结果偏离大远),学习率依然为
0.15。看看就同样次等网络会怎么样学习:

图片 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 函数的内容,如下图:

图片 4

从今函数图像我们得以发现,当函数值类于 1 或 0 时,函数导数趋于
0,从而导致 (55) 和 (56) 两个相的价值趋于
0。这吗是干什么神经元一开始的上学速率会那么慢,而中等有些学习进度会骤提升。

接力熵函数(cross-entropy)

实质上在蒙,我们都见面起这般的涉:当遇错误的时节,往往是咱学到物太多之早晚,而要我们对自己之荒唐模糊不干净,进步反而会更换缓慢。

如出一辙地,我们期望神经网络能够打左中更快地学习。那其实情形是怎么的也?来拘禁一个简易的事例。

图片 5

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

本条网络其实已经落后成一个线性回归模型。下面用一个动画片来演示网络的训过程:

图片 6

从中我们可看出,神经元快速地念参数,最终输出 0.09 (已经十分相近 0
了)。现在,我们用参数与错误初始化为 2.0,网络的开输出为 0.98
(跟咱们纪念要之结果偏离大远),学习率依然为
0.15。看看就同一浅网络会什么学习:

图片 7

虽说学习率和上次同样,但网络同样开始学习之进度可分外缓慢,在极端初步之 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 函数的情,如下图:

图片 8

打函数图像我们好窥见,当函数值类受 1 或 0 时,函数导数趋于
0,从而致使 (55) 和 (56) 两单姿态的价值趋于
0。这为是为何神经元一开始之就学速率会那么慢,而中等有些学习进度会骤提升。

引入交叉熵代价函数

若解决学习进度回落的题目,我们得打区区个偏导数上面做文章。要么换一个代价函数,要么更换
\(\sigma\)
函数。这里,我们下第一种做法,将代价函数更换为交叉熵函数(cross-entropy)。

先是用一个事例来介绍陆续熵函数。

如若我们发出如下神经元:

图片 9

虽然陆续熵函数被定义也(这里要 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 的例证:

图片 10

足见到网络的训进度近乎完美。

下一场是权重和谬误初始值均为 2.0 的事例:

图片 11

立同样潮,正如我们愿意之那么,神经元学习得不行抢。

立刻片不善尝试中,采用的学习率是
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\)
函数。这里,我们下第一种做法,将代价函数更换为交叉熵函数(cross-entropy)。

先是用一个事例来介绍陆续熵函数。

如我们发如下神经元:

图片 12

虽然陆续熵函数被定义也(这里而 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 的例证:

图片 13

足见见网络的训进度近乎完美。

然后是权重和不是初始值均为 2.0 的例证:

图片 14

当时无异不好,正如我们愿意的那么,神经元学习得好快。

即时简单次等试被,采用的学习率是
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} \]
至今,我们已出了接力熵函数的花样。

自啦,交叉熵真正的起源是信息论,更具体的介绍过了仍课程的框框,所以即便不再深入了。

接力熵到底是呀,它是怎么来的?

立无异于节吃,我们怀念知道,第一个吃螃蟹的口是怎么想到交叉熵函数的。

如我们发现了读速率下降的源在 \(\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
函数后,所有神经元的输出会呈现出概率分布的体裁。

图片 15

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

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

Softmax

面前同省被,我们根本介绍了接力熵如何解决训练进度下跌的题目,这是于代价函数的角度思考问题。其实,我们还有其它一样栽艺术,那就是是更换
\(\sigma()\)
函数。这里要简明介绍一个初的 \(\sigma()\) :Softmax。

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

图片 16

当增大其中一个神经元输出时,其他神经元的输出值会转换多少,而且更换多少的总额相当前者多的值。反之亦然。这是因具有神经元的输出值总和始终为
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
无疑会重好。

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地图