激活函数
激活函数
sigmoid
Sigmoid函数: Sigmoid函数将输入值映射到0和1之间,具有平滑的S形曲线。其数学表达式为 [
\sigma(x) = \frac{1}{1 + e^{-x}}
]
,适合用于二分类问题输出概率值
特点:它能够把输入的连续实值变换为0和1之间的输出,特别的,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1.
由于所有隐藏层的输入输出都为0—1之间,这个值所对应的sigmoid导数值为0.2到0.25,着意味着每反向传播一层,就会缩小4到5倍。从而导致梯度消失的问题
缺点:
- 容易造成梯度消失和梯度爆炸
- 耗时(数学表达式含有幂运算)
Tanh(双曲正切)
Tanh函数: Tanh函数是双曲正切函数,将输入值映射到-1和1之间。其数学表达式为 $f(x) = (exp(x) - exp(-x)) / (exp(x) + exp(-x))$ ,比Sigmoid函数范围更广,常用于隐藏层的非线性变换
优点:解决了Sigmoid函数的不是zero-centered输出问题
ReLU
ReLU函数其实就是一个取最大值函数
ReLU(Rectified Linear Unit)函数: ReLU函数将所有负的输入值设为0,而正的输入值保持不变。其数学表达式为 $f(x) = max(0, x)$ ,简单且易于计算,被广泛应用于深度学习网络中
优点:
1) 解决了gradient vanishing问题 (在正区间)
2)计算速度非常快,只需要判断输入是否大于0
3)收敛速度远快于sigmoid和tanh
ReLU也有几个需要特别注意的问题:
1)ReLU的输出不是zero-centered
2)Dead ReLU Problem,指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。
有两个主要原因可能导致这种情况产生: (1) 非常不幸的参数初始化,这种情况比较少见 (2) learning rate太高导致在训练过程中参数更新太大,而接近于 0(这时在下一样本的计算中该神经元的值就会趋于为 0,随着而来的是权重的梯度为 0,权重无法更新,导致该神经元的值恒为 0),那么这个神经元将永远处于死亡状态。
解决方法是可以采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。
Leaky ReLU函数: Leaky ReLU函数在ReLU的基础上稍作修改,当输入值为负时不再直接变为0,而是乘以一个小的斜率值。其数学表达式为 $f(x) = max(0.01x, x)$ ,有助于解决ReLU函数在负值区域的死亡神经元问题
奥卡姆剃刀
神经网络方面,「奥卡姆剃刀」原则可以概括为「如无必要,勿增实体」,即在保证性能的情况下,训练使得模型的有效参数尽量少
ex. 理论上来讲,Leaky ReLU有ReLU的所有优点,外加不会有Dead ReLU问题
但是在实际操作当中,并没有完全证明Leaky ReLU总是好于ReLU
softmax函数
Softmax激活函数是一种在机器学习和深度学习中常用的函数,特别是在处理多分类问题时。它将一个向量或一组实数转换成概率分布,使得每个元素的值都在0到1之间,并且所有元素的和为1。这使得Softmax成为分类问题中输出层的理想激活函数。
Softmax函数的定义:
Softmax激活函数在处理多分类问题时。它将一个向量或一组实数转换成概率分布,使得每个元素的值都在0到1之间,并且所有元素的和为1。这使得Softmax成为分类问题中输出层的理想激活函数。
给定一个向量 ( z ),其中 ( z_i ) 是向量中的第 ( i ) 个元素,Softmax函数 ( \sigma(z) ) 定义为:
[
\sigma(z_i) = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}}
]
其中,( K ) 是类别的总数。
Softmax函数与正常的max函数不同:max函数仅输出最大值,但Softmax函数确保较小的值具有较小的概率,并且不会直接丢弃。我们可以认为它是arg max \argmaxargmax函数的概率版本或“soft”版本。Softmax函数的分母结合了原始输出值的所有因子,这意味着Softmax函数获得的各种概率彼此相关。
Softmax激活函数的特点:
在零点不可微。
负输入的梯度为零,这意味着对于该区域的激活,权重不会在反向传播期间更新,因此会产生永不激活的死亡神经元。
特点:
归一化输出:Softmax函数的输出是一个概率分布,每个类别都有一个概率值,这些值的总和为1。
多分类适用性:Softmax函数适用于多分类问题,可以为每个类别输出一个概率,使得模型可以区分多个类别。
数值稳定性:在计算过程中,由于指数函数 ( e^{z_i} ) 可能非常大,直接计算可能导致数值溢出。为了提高数值稳定性,通常会从 ( z ) 中减去 ( \max(z) )。
梯度下降:在训练过程中,Softmax函数与交叉熵损失函数结合使用,可以方便地通过反向传播算法计算梯度。
应用场景:
- 多分类问题:在需要模型输出多个类别概率的场景中,如图像分类、文本分类等。
- 神经网络的输出层:在构建深度学习模型时,通常在输出层使用Softmax激活函数,以便模型能够输出每个类别的概率。
例子:
假设有一个简单的分类问题,有三个类别,模型的输出层有三个神经元,对应的 ( z ) 值分别为 ( z_1 = 2 ),( z_2 = 1 ),和 ( z_3 = 0 )。使用Softmax函数,我们可以计算出每个类别的概率:
[
\sigma(z_1) = \frac{e^2}{e^2 + e^1 + e^0} \approx 0.7310586
]
[
\sigma(z_2) = \frac{e^1}{e^2 + e^1 + e^0} \approx 0.24472847
]
[
\sigma(z_3) = \frac{e^0}{e^2 + e^1 + e^0} \approx 0.02421296
]
这样,模型就可以为每个类别输出一个概率值,这些值可以用于最终的决策过程。