神经网络及深度学习-Sigmoid 神经元函数介绍(5)

时间:2024-04-10 21:44:05

学习算法听起来很棒。但是,我们如何为神经网络设计这样的算法呢?假设我们有一个感知器网络,我们想用它来学习解决一些问题。例如,对网络的输入可能是来自扫描的手写数字图像的原始像素数据。我们希望网络学习权值和权重,以便网络输出对数字进行正确地分类。为了了解学习是如何工作的,假设我们对网络中的一些权重(或偏置)做了一个小小的改变。我们所希望的是,权重的微小变化只会引起网络输出的相应变化。稍后我们将看到,这个属性将使学习成为可能。从原理上讲,下面是我们想要的(显然,这个网络太简单了,无法进行手写识别!):

神经网络及深度学习-Sigmoid 神经元函数介绍(5)

如果某一权重(或偏置)的微小变化只会导致输出的微小变化是真的,那么我们可以利用这一事实来修改权重和偏差,以使我们的网络以我们想要的方式表现得更好。例如,假设网络错误地将图像分类为“8”,而应该是“9”。我们可以找出如何在权重和偏置上做一些小的改变,这样网络就更接近于将图像分类为“9”。然后我们重复这个,一遍又一遍地改变权重和偏置,以产生越来越好的输出。整个网络将会慢慢学习。

问题是,这并不是当我们的网络包含感知器时所发生的事情。事实上,网络中任何单个感知器的权重或偏置的微小变化有时都会导致感知器的输出完全翻转,例如从0到1。这种翻转可能会导致网络其他部分的行为以某种非常复杂的方式发生完全改变。因此,虽然你的“9”现在可能是正确的分类,网络上的所有其他图像的行为可能以难以控制的方式完全发生改变。这使得很难看到如何逐步修改权重和偏置,以使网络输出接近所需的行为。也许有一些聪明的方法来解决这个问题。但是现在还不清楚我们如何才能使得一个感知器网络学习。

我们可以通过引入一种叫做Sigmoid神经元的新型人工神经元来克服这个问题。Sigmoid神经元与感知机神经元相似,但经过**形式的修改,使其权重和偏置的微小变化只引起其输出的微小变化。这是一个至关重要的事实,它将使Sigmoid神经元可以通过学习来改变输出。

让我来描述一下Sigmoid神经元。我们将用与描绘感知器相同的方式描绘Sigmoid神经元。
就像感知机函数一样,sigmoid神经元也是拥有多个输入,如但是原来感知机函数仅仅是输入0或者是1,sigmoid的输入可以使0或1之间的任意值。 因此,0.638可以是一个sigmoid函数的有效输入。就像感知机一样,sigmoid感知机对于每个输入都拥有权重,,和一个总体的偏置b。而且它的输出不单单是0或者1。**函数中为sigmoid的函数,可以被定义为如下所示。

(3)σ(z)11+ez.

把输入值w1,w2, ,权重和偏置都代入到sigmoid函数,可以得到sigmoid神经元表达式如下。
(4)11+exp(jwjxjb).

乍一看,sigmoid神经元与感知机有十分大的区别。如果你不熟悉它的话,会觉得有点难以理解并且望而生畏。事实上,感知机神经元与sigmoid神经元有许多的相似之处,sigmoid的代数形式更多是一个细节,并不是一个真正阻碍你理解的障碍。
为了理解感知机模型与Sigmoid模型十分相似,我们将举个例子进行理解。假设zwx+b是一个很大的正数,因此ez0并且σ(z)1。换句话说,当z=wx+b为非常大的正数为,sigmoid神经元的输出接近于1,就像感知机神经元一样。另一方面我们假设z=wx+b为负数,他的行为与感知机神经元类似。只有wx+b位于中间值是,他的输出值与感知机模型差距较大。
σ的代数式是什么呢?我们应该如何理解他?实际上,σ的具体形式不重要,真正有关系的是这个函数曲线是形状。下图为对应形状。

神经网络及深度学习-Sigmoid 神经元函数介绍(5)

这个图像就像是阶跃函数的平滑版。
神经网络及深度学习-Sigmoid 神经元函数介绍(5)

σ如果是一个阶跃函数,sigmoid神经元就会变成一个感知神经元,输出是1还是0根据wx+b是否正还是负。sigmoid感知器就像一个平滑版的感知机。实际上σ函数的平滑性是十分关键的。这个函数意味着Δwj权重以及Δb偏置的小的改变导致神经元输出微小的改变。实际上,计算之后告诉我们,Δoutput输出的改变量接近于:
(5)ΔoutputjoutputwjΔwj+outputbΔb,

这就是说权重该变量与偏导的乘积的和加上偏置改变量与偏导的和。不要对偏导的存在感到担心,虽然上面的公式看起来非常复杂,其实所有的偏导数都是非常简单的东西。Δoutput对于ΔwjΔb是一个线性函数.这种线性使得很容易选择在权重和偏置的小变化,以实现任何想要的小变化的输出。因此,虽然sigmoid和感知器有很多相同的定性行为,但它们使我们更容易弄清楚改变权重和偏置会如何改变输出。
如果我们在意的是σ的形状,而不是它的确切形式,那我们为什么要使用如公式3的特殊形式呢?实际上,迟些该书将输出函数f(wx+b)偶尔使用别的**函数。使用别的**函数导致最重要的改变是使得类似于第五个等式的偏导数产生改变。将会证明使用类似σ将会使得代数式更为简单,由于指数差分会拥有特别特殊的性质。无论什么情况下,σ在神经网络中是十分常用的。
我们将如何解释sigmoid函数的输出呢?很明显,感知机函数与sigmoid神经元最重要的区别是sigmoid函数的输出不仅仅是0和1了。他可以输出在0和1之间的实数,例如0.173和0.689之类的。这十分有用,例如,但有时也会让人讨厌。假设我们希望网络的输出指示“输入图像是9”或“输入图像不是9”。显然,如果输出是0或1,就像在感知器中一样,这将是最容易做到的。但在实践中,我们可以建立一个处理这一问题的惯例,例如,决定将任何至少为0.5的输出解释为表示“9”,将任何小于0.5的输出解释为表示“不是9”。当我们使用这样的约定时,我总是明确地声明,所以它不应该引起任何混淆。