神经网络

激活函数(activation function)

/ ak-tih-VAY-shun FUNK-shun /

激活函数,是神经元在把结果传出去之前,对自己的总和施加的那一小步「决断」。神经元把加权输入和偏置加起来后,得到一个单独的数字——但一个生的数字并不太有表现力。激活函数会给它重新塑形:也许把它压进 0 和 1 之间,也许把所有负的部分砍掉。想象一个反应不均匀的调光开关——起初很暗,然后忽然变亮。那种不均匀的反应,正是关键所在。

其中的道理微妙却至关重要。加和缩放数字——这正是权重和偏置做的事——永远只能产生直线式的关系。哪怕你叠上一百层这样的运算,得到的仍是一条直线,并不比单独一层好。激活函数把那条直线掰弯了。通过在层与层之间插入一段曲线,它让网络得以搭建出弯弯曲曲、复杂的形状——也就是真实数据真正具有的那种形状。这种掰弯叫做非线性,它是让深层网络比单纯算术更强大的那个唯一关键成分。

这类函数有一整个家族,每一个都是一条不同的曲线:平滑的 S 形的 sigmoid 和 tanh、简单的折线 ReLU 及其「漏」的表亲,还有把分数变成概率的 softmax。在它们之间如何取舍,会影响网络学起来是难是易。多年来 sigmoid 和 tanh 一直占主导;如今隐藏层的默认选择是 ReLU,很大程度上是因为它训练得更快,又绕开了一个深层堆叠里学习信号会逐渐消退的麻烦。

试着只用加权和去学习 XOR 模式(当两个输入中恰好一个为开时,输出 1)——你做不到;没有任何一条直线能把这些情形分开。加上一个带非线性激活的隐藏层,网络就轻松解出了。这个曾在 1960 年代难住早期研究者的小例子,是说明激活为何不可省略的最干净的演示。

没有非线性激活,层层叠加毫无所得——它们会塌缩成一层。

如果每个激活都是线性的,那么无论你加多少层,深层网络在数学上都与单独一层完全等价。是非线性,而非单凭深度,才解锁了表达能力。

又称
nonlinearitytransfer function激活函数激活函數非线性函数