[神经网络这次真的搞懂了!] (2) 使用神经网络识别手写数字 - sigmoid

英文原文:http://neuralnetworksanddeeplearning.com/
对原文的表达有部分改动

Sigmoid 神经元

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


如果权重(或偏差)的微小变化确实只会导致输出的微小变化,那么我们可以使用这一事实来修改权重和偏差,以使我们的网络以我们想要的方式表现得更好。例如,假设网络错误地将应该是“9”的图像归类为“8”。我们可以通过对权重和偏差进行小的更改,以便网络更接近于将图像分类为“9”。然后我们会重复这个,一遍又一遍地改变权重和偏差,以产生越来越好的输出。

问题在于,当我们的网络包含感知器时,这不会发生。事实上,网络中任何单个感知器的权重或偏差的微小变化有时都会导致该感知器的输出完全翻转,比如从 0 到 1。这种翻转可能会导致网络其余部分的行为以某种非常复杂的方式彻底改变。因此,虽然您的“9”现在可能被正确分类,但网络在所有其他图像上的行为可能已经以某种难以控制的方式完全改变。这使得很难看到如何逐渐修改权重和偏差,才能使网络更接近所需的行为。也许有一些巧妙的方法可以解决这个问题。但我们如何让感知器网络进行学习如今仍并不是很明显。

我们可以通过引入一种称为 sigmoid 神经元的新型人工神经元来克服这个问题。 Sigmoid 神经元类似于感知器,但经过修改后,它们的权重和偏差的微小变化只会导致其输出的微小变化。这是允许 sigmoid 神经元网络能够学习的关键事实。

好的,让我来描述 sigmoid 神经元。我们将以与描绘感知器相同的方式描绘 sigmoid 神经元:


就像感知器一样,sigmoid 神经元有输入,。但是,这些输入不仅是 0 或 1,还可以采用 0 和 1 之间的任何值。因此,例如,0.638…是 sigmoid 神经元的有效输入。同样就像感知器一样,sigmoid 神经元对每个输入都有权重 ,以及一个整体偏差 b。但输出不是 0 或 1。相反,它是 , 即为 sigmoid 函数,其被定义为

更明确地说,具有输入 ,权重 和 偏差 b 的 sigmoid 神经元的输出是:

乍一看,sigmoid 神经元与感知器非常不同。如果您还不熟悉 sigmoid 函数的代数形式,它可能看起来不透明且令人生畏。事实上,感知器和 sigmoid 神经元之间有很多相似之处,而且 sigmoid 函数的代数形式更多是技术细节,而不是真正的理解上的障碍。

为了理解与感知器模型的相似性,假设 是一个很大的正数。那么 ,所以 。换句话说,当 很大且为正时,sigmoid 神经元的输出大约为 1,就像感知器一样。另一方面,假设 是很大且为负时。然后,并且。因此,当 是很大且为负时,sigmoid 神经元的行为也非常接近感知器。只有当 的大小适中时,才会与感知器模型有很大的偏差。

σ 的代数形式呢?我们怎么能理解呢?事实上,σ 的确切形式并不是那么重要:真正重要的是绘制时函数的形状:


它是阶跃函数的平滑版本:


如果 σ 实际上是一个阶跃函数,那么 sigmoid 神经元将是一个感知器,因为输出将是 1 或 0,这取决于 是正还是负。 通过使用实际的 σ 函数,我们得到一个平滑的感知器。 事实上,重要的是 σ 函数的平滑度,而不是它的详细代数形式。 σ 的平滑性意味着权重的微小变化 和偏差的 会在神经元的输出中产生微小的变化 。 事实上,微积分告诉我们 很好地近似为:

和 和 分别表示 output 相对于 和 b 的偏导数。虽然上面的表达式看起来很复杂,但包含所有偏导数,它实际上是在说一些非常简单的事情(这是个好消息): 是权重和偏差中 和 变化的线性函数。这种线性使得选择权重和偏差的微小变化变得容易,以实现输出的任何期望的微小变化。因此,虽然 sigmoid 神经元与感知器具有许多相同的定性行为,但它们更容易弄清楚改变权重和偏差将如何改变输出。

如果真正重要的是 σ 的形状,而不是它的确切形式,那么为什么要使用 σ 的特定形式?事实上,在本系列的后面,我们偶尔会考虑一些其他激活函数。当我们使用不同的激活函数时,主要的变化是上述方程中偏导数的值发生了变化。事实证明,当我们稍后计算这些偏导数时,使用 σ 将简化代数,因为指数在微分时具有可爱的特性。无论如何,σ 常用于神经网络的工作,并且是我们在本系列中最常使用的激活函数。

我们应该如何解释 sigmoid 神经元的输出?显然,感知器和 sigmoid 神经元之间的一大区别是 sigmoid 神经元不只是输出 0 或 1。它们可以输出 0 到 1 之间的任何实数,因此诸如 0.173 和 0.689 之类的值都是合法的输出。例如,假设我们希望网络的输出表明“输入图像是 9”或“输入图像不是 9”。显然,如果输出是 0 或 1,则最容易做到这一点,就像在感知器中一样。但在实践中,我们可以建立一个约定来处理这个问题,例如,决定将大于 0.5 的输出解释为表示“9”,将小于 0.5 的输出解释为“不是 9”。

你可能感兴趣的:([神经网络这次真的搞懂了!] (2) 使用神经网络识别手写数字 - sigmoid)