神经网络是由大量相互连接的神经元组成的复杂网络,这些神经元是网络的基本构建单元。神经元本身结构简单,但当它们相互连接时,便能形成强大的计算工具。这类似于蜜蜂和蜂巢的关系,单个蜜蜂无法产生大量蜂蜜,但众多蜜蜂共同努力,便能产出丰富的蜂蜜。
让回顾一下神经元的结构。神经元具有模拟生物神经元突触的连接,这些连接是每个神经元的输入,并且是带权重的,意味着某些连接比其他连接更重要。简而言之,神经元是一种输入收集器。此外,它们还有一个输出,当满足特定条件时会被激活。通常,来自带权重连接的输入会被汇总,这一过程由所谓的加权和函数完成。然后,这个值会被传递给激活函数,计算输出的值。
现在,想更深入地探讨人工神经元的一个方面,那就是激活函数本身,以及目前存在的主要激活函数。为什么?因为激活函数是这个领域中非常重要的因素。通过使用正确的函数,神经网络能够仅使用少量节点就能计算非平凡问题。让深入了解一下。
如前所述,这个函数将定义人工神经元的输出值,即神经元是否被“激活”。从生物学角度来说,这个函数可以被建模为当前从突触传入信号产生的总输入的预期发射率。除此之外,这个函数将定义神经网络有多“聪明”,以及训练它有多困难。由于这些网络是受生物启发的,第一个使用的激活函数是步进函数,也被称为感知器。
这个激活函数有着有趣的历史。这个算法最早在1957年被用于定制的计算机Mark 1感知器中,并用于图像识别。它被认为是人工智能领域的未来。即使是算法的作者Frank Rosenblatt也说感知器是“海军期望能够行走、说话、看、写、自复制并意识到其存在的电子计算机的胚胎”。尽管在开始时看起来很有希望,但后来证明感知器无法识别许多类别的模式。这导致了神经网络领域的停滞。
本质上,感知器是一个步进函数,将其实值向量输入映射到单个二进制输出值。因此,如果输入的总和达到某个阈值,神经元的输出值将是1,否则将是0。非常简单直接,特别是在网络的最后一层中非常有用。
这个函数比简单的步进函数更平滑,更符合生物学原理。考虑一个神经元被“激活”,意味着它开始通过突触向另一个神经元发送神经递质。这将随着时间的推移逐渐发生,并且需要一些时间来传递所有神经递质。当然,这是对这种情况的非常简化的描述。Sigmoid函数如下所示:
f(x) = 1 / (1 + e^(-x))
使用这个函数时,使用以下公式计算神经元的输出值:
output = 1 / (1 + e^(-weighted_input))
其中x是神经元的网络输入。基本上,加权输入乘以一个斜率参数。这个函数在线性回归中被大量使用——这是统计学和机器学习中最著名的算法之一。这个函数也大量用于神经网络的输出层,特别是用于概率计算。
这个函数与Sigmoid函数类似。这个函数的输出值可以从-1变化到1,与Sigmoid函数覆盖0到1的值不同。尽管这在神经元中并不常见,生物学上,这个函数在训练神经网络时给出了更好的结果。有时,神经网络在训练过程中会“卡住”,当使用Sigmoid函数时,意味着当提供强烈负输入时,这些网络的输出非常接近零。这反过来又搞乱了学习过程,这将在下一篇文章中更详细地介绍。尽管如此,这是双曲正切函数的样子:
output = tanh(x)
其中x是神经元的网络输入。它用于与Sigmoid函数相同的目的,但在有负输入的网络中。有趣的是,即使它没有强烈的生物学解释,这个函数在某些情况下也能给出更好的结果。
Rectifier函数可能是神经网络界最受欢迎的激活函数。它被广泛用于解决各种问题,这是有充分理由的。这个函数是迄今为止描述的所有函数中最符合生物学原理的,并且在训练神经网络时是最高效的函数。它看起来像这样:
output = max(0, x)