[原文地址:http://neuralnetworksanddeeplearning.com/chap1.html#sigmoid_neurons]
Sigmoid neurons
学习算法听上去是极好的。但是,我们如何才能用神经网络设计出算法呢?假设我们有一个感知机网络,用来学习来解决一些问题。比如,这网络的输入可能是从扫描手写数字的图像得到的原始像素数据。我们希望网络学习到的权重和偏差可以正确识别数字。为了研究学习是如何工作的,我们假设对一些权重或偏差进行稍微改动,我们所希望的是,这个小的变化,只会对输出造成小的影响。正如我们将看到的,这个属性将使学习成为可能。示意图,这是我们想要的(显然这网络太简单做手写识别!):
如果一个小的权重(偏差)变化导致只有一个小的输出变化是真的,那么我们可以利用这一事实去修改权重和偏差去使得我们网络得到我们想要的结果。举个例子,假设网络错误的将“9”误认为是“8”的时候,我们可以计算出一个小的改变(权重、偏差)以将“9”正确识别。并且重复它,这样输出就会越来越好。网络即可被训练好。
问题是,包含有感知机的网络并不是这样工作的。事实上,权重(偏差)参数小的变化将会导致输出结果完全翻转。这一翻转可能接下来会导致其他网络的行为也发生完全的改变。因此,虽然“9”被正确分类了,但是其它图形的行为就很难控制了。这样如何修改权重(偏差)参数使得网络越来越近变得很困难。也许有一些聪明的方式来解决这个问题。但这不是显而易见的我们如何可以得到一个网络感知机学习。
我们可以通过引入一种新的类型的人工神经元,称为sigmoid神经元。sigmoid神经元类似于感知机,但是参数的小幅度改变不会引起输出变化很大。这是个很重要的事实,这将允许一个sigmoid神经元网络学习。
Ok,现在让我们来描述sigmoid神经元,我们将向描述感知机一样的来描述sigmoid神经元:
就像感知机一样,sigmoid神经元有输入
x1,x2,...
,但是取值不仅仅是0和1。也可以是0~1之间的实数,比如,0.638……可以作为sigmoid神经元的一个输入。也很感知机一样,sigmoid神经元也具有权重输入,
w1,w2,...
,和总体偏差
b
。但是输出不仅仅是0或者1。替代的是,
要更明确地说,一个sigmoid神经元的输出输入
x1,x2,...,
权重
w1,w2,...,
并且偏差
b
是
乍一看,sigmoid神经元感知器很不同。如果你不熟悉它,sigmoid神经元的代数形式将会是不透明的也是令人生畏的。事实上,感知机和Sigmoid神经元有许多相似之处,Sigmoid神经元的代数形式具有更多的技术细节。
为了理解和感知机模型类似的模型,假设
z≡w⋅x+b
是大整数,那么
e−z≈0
,且
σ(z)≈1
。换句话说,当
z≡w⋅x+b
很大而且为正时,sigmoid神经元的输出为接近1。从另外一面假设,当
e−z→∞
,且
σ(z)≈0
,所以当
z=w⋅x+b
,因此当
z=w⋅x+b
是非常小的负数,Sigmoid神经元的行为很接近于感知机。因此,仅仅当
z=w⋅x+b
是适度大小才能够偏离感知机模型。
那么关于
σ
这个代数形式呢?我们该如何理解呢?事实上,
σ
的精确形式并不重要,真正重要的是在绘制时的功能的形状。这里的形状:
这个形状是一个平滑的阶跃函数:
事实上,如果
σ
是阶跃函数,那么sigmoid神经元将是感知机模型,因为输出是1或0取决于
w⋅x+b
是正还是负。正如上面已经暗示的,通过使用实际的σ函数得到,感知器平滑。事实上,它是σ的光滑函数至关重要的事实,而不是它的具体形式。
σ
意味着,
Δwj
和
Δb
小的变化,只会造成
Δoutput
小的变化。事实上,微积分告诉我们
Δoutput
近似为:
Δoutput≈∑j∂output∂wjΔwj+∂output∂bΔb
(5)
不要惊慌,如果你不习惯偏导数!虽然上面的表情看起来很复杂,所有的偏导数,它实际上是说一些很简单的,这是非常好的消息:
Δoutput
和变化量
Δwj
和
Δb
是线性相关的。线性使得它容易选择小的权重和偏差的变化,以实现任何所需的小变化的输出。所以当sigmoid神经元有相同的行为感知机,他们更加容易计算出如何改变权重或偏差用来改变输出。
如果
σ
真正重要的是形状,而不是它的具体形式,那么为什么要在方程(3)中使用
σ
的具体形式。事实上,在本书的后面,我们将偶尔考虑的神经元的输出是
f(w⋅x+b)
对于一些其他的激活函数
f(⋅)
。当我们使用不同的激活函数时,主要的是,在方程(5)变化中的偏导数的特殊值。原来,当我们计算这些偏导数后,使用
σ
将简化代数,因为指数有可爱的性质区分。在任何情况下,
σ
是常用的神经网络工作,并且这也是本书用的最多的激活函数。
我们应该如何解释igmoid神经元的输出呢?显然,感知机和sigmoid神经元最大的不同在于sigmoid的输出不仅仅是0和1。它可以是任何的0-1之间的实数输出,比如0.173…和0.689…任何合法的值。这可能是有用的。比如,如果我们需要用一个输出值来表示图形出入到一个神经网络的像素的平均强度。但有时这可能是一个麻烦,假设我们希望从网络的输出,以表示“输入图像是一个9”或“输入图像是不是一个9”。很显然,如果输出是0或1,就很容易做,因为在一个感知机上。但在实践中,我们可以建立一个协议,以处理这一点,例如,通过决定解释任何输出至少0.5,表示一个“9”,和任何输出不到0.5,表示“不是一个9”。我会一直明确的状态时,我们用这样的惯例,所以不会造成任何混乱。
练习题
Sigmoid神经元模拟感知机 第一题
假设我们在一个网络的感知机把所有的权值和阀值,并乘他们的正的常数,C > 0。试证明网络的行为并没有改变。
Sigmoid神经元模拟感知机 第二题
假设我们有相同的设置作为最后的问题–网络感知机。假设对感知机网络的整体输入被选择。我们将不需要实际的输入值,我们只需要输入的固定。假如在任何特定的感知机,权重和偏差,
w⋅x+b≠0
。现在更换所有的感知器网络Sigmoid神经元,乘以权值、阈值的一个正的常数C > 0。试证明,在极限的C→∞的前提下,这个网络Sigmoid神经元的行为是完全相同的感知器网络。这怎么能失败时,W⋅x + b = 0对一的感知?(这题感觉翻译不太对,看到后面的时候回头看看该问题,下面给出该问题的原文)