6.1 单元
神经网络的基本构件是单个计算单元(computational unit)。单元接收一组实数,进行某种计算,并产生输出。
神经单元的核心是对输入求加权和,并额外加入一个偏置项(bias term)。给定输入 ,单元具有相应权重 和偏置 ,加权和 为:
用向量记号表示更方便。令 为权重向量, 为标量偏置, 为输入向量,并用点积取代求和:
式 6.2 中的 只是一个实数。神经单元并不直接把输入的线性函数 作为输出,而是对 应用非线性函数 。函数输出称为单元的激活值(activation value)。这里只建模一个单元,所以该节点的激活值也就是网络最终输出,通常记为 :
后面将讨论三种常见非线性函数:sigmoid、tanh 和修正线性单元(rectified linear unit, ReLU)。为便于教学,先使用第 4 章见过的 sigmoid:
sigmoid(图 6.1)把输出映射到 ,可将异常值压向 0 或 1;它还可微分,这对第 6.6 节的学习非常有用。

图 6.1 sigmoid 函数把实数映射到 。它在 0 附近近似线性,但会将异常值压向 0 或 1。
将式 6.2 代入式 6.3,得到神经单元的输出:

图 6.2 基本神经单元。它接收三个输入 (以及偏置 ,图中将其表示为固定为 +1 的输入所对应的权重),产生输出 。中间变量 是求和结果, 是 sigmoid 输出。在这个单单元网络中 ;对更深网络, 表示整个网络的最终输出, 则表示单个节点的激活值。
举例说明。假设单元的权重向量和偏置为:
输入向量为:
则输出为:
实践中,sigmoid 不常用作隐藏层激活函数。一个非常相似但几乎总是更好的函数是图 6.3a 的 tanh 函数,其范围为 −1 到 +1:
最简单、也可能最常用的激活函数是图 6.3b 的 ReLU。 为正时输出等于 ,否则为 0:
这些激活函数性质不同,适用于不同语言应用或网络架构。tanh 平滑可微,并能将异常值向均值压缩;ReLU 接近线性,因而具有另一些优点。sigmoid 或 tanh 在 很大时会饱和(saturated),即 极接近 1、导数极接近 0。零导数会妨碍学习:第 6.6 节将看到,网络训练通过向后传播误差信号,将各层梯度(偏导数)相乘;近零梯度会使误差信号越来越小,最终小到无法训练,这称为梯度消失问题(vanishing gradient problem)。ReLU 没有这个问题,因为 为较大正值时,其导数为 1 而非接近 0。

(a)

(b)
图 6.3 tanh 和 ReLU 激活函数。