您的位置:

常见激活函数详解

一、Sigmoid函数

Sigmoid函数是最经典的激活函数之一,具有将实数映射到(0, 1)的特性,其公式如下:

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

其中,np.exp()表示$e^x$函数。

Sigmoid函数的优点是其能够将输出映射成概率形式,因此在分类问题中得到了广泛的应用。但是其存在梯度问题,容易出现梯度消失或梯度爆炸的情况,同时输出不是以零为中心的,对后续网络的学习带来一定的困难。

二、ReLU函数

ReLU(Rectified Linear Unit)函数是近些年来最流行的激活函数,具有非线性特性,其公式如下:

def relu(x):
    return np.maximum(0, x)

其中,np.maximum()函数表示取x与0的最大值。

ReLU函数相比于Sigmoid函数,具有计算速度快的优点,同时梯度计算也比较简单。但是当输入为负数时,其梯度为0,导致神经元失活,这也是ReLU函数的不足之处。

三、LeakyReLU函数

LeakyReLU函数是对ReLU函数的改进,其公式如下:

def leaky_relu(x, alpha=0.01):
    return np.where(x > 0, x, alpha*x)

其中,np.where()表示当x>0时,输出x;当x<=0时,输出alpha*x。

LeakyReLU函数在输入为负数时,梯度不为0,避免了神经元失活问题,并且可以克服ReLU函数在参数更新时的死亡Relu问题。但是需要小心设置alpha值,其值过大或过小都会导致梯度问题。

四、ELU函数

ELU(Exponential Linear Unit)是一种带负数饱和度的非线性函数,其公式如下:

def elu(x, alpha=1.0):
    return np.where(x > 0, x, alpha*(np.exp(x)-1))

由公式可知,当x>0时,输出x;当x<=0时,输出$alpha*(e^x-1)$,其与ReLU相比,具有输出以零为中心的优点。同时,ELU函数能够避免ReLU函数在输入为负时产生的梯度问题,且梯度不会饱和。

五、Softmax函数

Softmax函数是一种将多个输出变量映射为概率分布的函数,其公式如下:

def softmax(x):
    exp_x = np.exp(x)
    return exp_x / np.sum(exp_x, axis=1, keepdims=True)

其中,np.sum()函数表示将exp_x矩阵的每个元素相加,axis=1表示对每行进行相加,keepdims=True表示保留行维度。

Softmax函数适用于多分类问题,将输出映射为概率分布形式,方便后续的训练和预测。但是其存在梯度消失和梯度爆炸问题,需要小心设置学习率。

总结

常见的激活函数有Sigmoid函数、ReLU函数、LeakyReLU函数、ELU函数和Softmax函数,每种激活函数都有其特点和不足,需要根据具体情况选择合适的函数。