2.3.2 激活函数
截至目前,你已经看到了两种不同的激活函数:阶跃函数和sigmoid。但是,根据任务的不同,多多少少还有其他函数可以使用。
激活函数通常用于引入非线性。没有它,我们将只能通过另一个线性函数得到输入的一个线性组合。
现在,我们将详细介绍一些激活函数及其在Keras中的代码。
1.sigmoid
正如你看到的那样,sigmoid函数是逻辑函数的一个具体实例,它为我们提供了类似于阶跃函数的功能,因此对于二元分类(指示结果的可能性)很有用。该函数是可微的,因此可以对每个点进行梯度下降。它也是单调的,这意味着它总是递增或递减,但其导数不会变化。因此,它将有一个最小值。它迫使所有输出值都在0~1之间。即使值非常高,也只会无限趋向于1,而非常低的值趋向于0。这造成的一个问题是,这些点处的导数约为0。因此,梯度下降过程将找不到非常高或非常低的值的局部最小值,如图2-10所示。
图 2-10
(1)softmax
softmax函数是sigmoid函数的一个泛化形式。sigmoid函数为我们提供二元分类输出的概率,而softmax允许我们将未归一化的向量转换为概率分布。这意味着softmax将输出一个向量,该向量的总和为l,其所有值都将处于0~1之间。
(2)tanh
正如我们之前所说,就逻辑sigmoid而言,高值或低值输入的结果将非常接近于零,可能导致神经网络遇到困难。这将意味着梯度下降将不会更新权重,也不能训练模型。
双曲正切或tanh函数是sigmoid的替代形式,且仍具有S型函数的形状。不同之处在于它将输出一个介于-1~1之间的值。因此,tanh函数会将强负输入映射为负输出(见图2-11)。此外,只有零值输入会被映射为接近零的输出。这些属性会使网络在训练过程中没那么容易遇到困难。
2.ReLU
ReLU是最常用的激活函数之一。当输入大于0时,它的行为类似于线性函数。反之,它将始终等于0。这是电气工程中的半波整流的模拟f(x)=max(0,x):
图2-11 双曲正切函数
图2-12 ReLU函数
此函数的范围为从0到无穷大,但问题是负值结果会为0,因此其导数将始终为常数。这对于反向传播而言显然是个问题,但是在实际情况下,它没有任何影响。
ReLU有一些变体。最常见的一种是Leaky ReLU,它的目的是在函数不起作用时允许正的小梯度。其公式如下:
这里,a通常为0.01,如图2-13所示。
图2-13 Leaky ReLU函数