激活函数大总结

以下是神经网络中常见的激活函数及其优缺点、改进方法以及示例代码,并将其按照适用场景分类:

1. Sigmoid 激活函数
Sigmoid 激活函数的公式为
在这里插入图片描述
输出值在 0 到 1 之间。

优点:

可以将输出值映射到概率分布,常用于二元分类问题。
缺点:

容易发生梯度消失现象,造成深层网络难以训练。
输出值不是以0为中心的,这会影响优化过程的收敛速度。
改进:

Tanh 函数:Tanh 函数是 Sigmoid 函数的变种,输出值在 -1 到 1 之间,相对于 Sigmoid 更容易进行标准化处理。
Hard Sigmoid 函数:Hard Sigmoid 函数是 Sigmoid 函数的一种简单近似,可以降低计算复杂度,提高运算速度。
示例代码:

python
import numpy as np

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

适用场合:二元分类问题

2. ReLU 激活函数
ReLU(Rectified Linear Unit)激活函数的公式为
f(x)=max(0,x),只保留正数部分,负数部分置为 0。
优点:
计算速度快,易于实现。
可以缓解梯度消失问题,提高深层网络的训练速度和准确率。
缺点:
只有正数部分有导数,负数部分导数为 0,可能造成神经元死亡(永远不会被激活)。
容易出现“神经元坍塌”现象,即某些神经元输出恒为 0。
改进:
Leaky ReLU 函数:Leaky ReLU 函数在负数部分引入一个小的斜率,避免了神经元彻底“死亡”的情况。
PReLU 函数:PReLU 函数是对 Leaky ReLU 的进一步改进,采用可学习参数,适应不同的数据集。
示例代码:

python
import numpy as np

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

适用场合:多分类和回归问题

3. Tanh 激活函数

Tanh(双曲正切)激活函数的公式为
在这里插入图片描述
输出值在 -1 到 1 之间。
优点:
比 Sigmoid 函数更具有非线性特性。
输出值在 -1 到 1之间,更容易进行数据标准化。
缺点:
受到梯度消失问题的影响。
改进:
STReLU 函数:STReLU 函数是对 Tanh 函数的改进版本,采用可学习参数,适应不同的数据集。
ISRLU 函数:ISRLU 函数引入了一个参数,可以适当调整斜率和截距,取得更好的效果。
示例代码:

python
import numpy as np

def tanh(x):
    return np.tanh(x)

适用场合:分类和回归问题
4. Softmax 激活函数
Softmax 激活函数的公式为 $y_i = \frac{e{x_i}}{\sum_{j=1}ne^{x_j}}
Softmax 激活函数将多个输入值转换为概率分布,常用于多分类问题。
优点:
可以将多个输入值映射到一个概率输出。
对于多元分类问题效果良好。
缺点:
受到过拟合的影响较大,在训练数据不充足时容易出现过拟合现象。
改进:
Sparsemax 函数:Sparsemax 函数是对 Softmax 函数的改进版本,可以产生更稀疏的输出。
Gumbel-Softmax 函数:Gumbel-Softmax 函数是对 Softmax 函数的改进版本,加入了噪声,可以降低模型对训练数据的敏感度。
示例代码:

python
import numpy as np
def softmax(x):
    exp_x = np.exp(x - np.max(x, axis=-1)[:, np.newaxis])
    return exp_x / np.sum(exp_x, axis=-1, keepdims=True)

适用场合:多元分类问题
5. Swish 激活函数
Swish 激活函数的公式为

其中 σ 指 Sigmoid 函数,β 是可学习参数。
优点:
比 ReLU 函数更具有非线性特性。
在一些数据集上能够取得更好的分类效果。
缺点:
计算复杂度较高。
改进:
Mish 函数:Mish 函数是对 Swish 函数的改进版本,可以进一步提高分类效果和收敛速度。
示例代码:

python
import numpy as np

def swish(x, beta=1.0):
return x * sigmoid(beta * x)

def mish(x):
return x * np.tanh(softplus(x))


适用场合:
分类和回归问题,特别是在超参数调整时表现良好。

6. ELU 激活函数
ELU(Exponential Linear Unit)激活函数的公式为
在这里插入图片描述

,其中 α 是可学习参数。
优点:
比 ReLU 函数更具有非线性特性。
对于负数部分使用指数函数,可以避免神经元死亡问题。
缺点:
计算复杂度较高。
改进:
SELU 函数:SELU 函数是对 ELU 函数的改进版本,并且具有自归一化特性,适用于深层网络。
示例代码:

python
import numpy as np

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

def selu(x, alpha=1.67326, scale=1.0507):
    scale_alpha = scale * alpha
    return scale_alpha * np.where(x > 0, x, np.exp(x) - 1)

适用场合:
分类和回归问题,特别是在深层网络中表现良好。

7. Softplus 激活函数
Softplus 激活函数的公式为
在这里插入图片描述
,输出值是正数。
优点:
具有一定的非线性特性。
对于负数部分使用指数函数,可以避免神经元死亡问题。
缺点:
梯度值不稳定,可能会出现梯度消失或爆炸的问题。
改进:
Swish 函数:Swish 函数是对 Softplus 函数的改进版本,可以加强非线性特性,并且具有一定的正则化效果。
示例代码:

python
import numpy as np

def softplus(x):
    return np.log(1 + np.exp(x))

def swish(x, beta=1.0):
    return x * sigmoid(beta * x)

适用场合:
分类和回归问题。

  1. Hard Swish 激活函数
    Hard Swish 激活函数是对 Swish 函数的改进版本,公式为
    在这里插入图片描述
    优点:
    计算速度快,易于实现。
    可以缓解梯度消失问题,并具有一定的正则化能力。
    缺点:
    对于大于等于 3 的输入值,输出值始终为常量,可能会影响模型表现。
    改进:
    Mish-hard 函数:Mish-hard 函数是对 Hard Swish 函数的改进版本,引入了可学习参数,可以适应不同的数据集。
    示例代码:
python
import numpy as np

def hard_swish(x):
    return x * np.minimum(np.maximum(x + 3, 0), 6) / 6

def mish_hard(x, beta=1.0, gamma=1.0):
    return x * np.tanh(softplus(beta * x)) * hard_sigmoid(gamma * x)

适用场合:
分类和回归问题。

分类:

一.非线性激活函数
这是神经网络中最常见的类型。非线性激活函数能够使模型输出更加复杂的函数关系,增加模型的表达能力。常用的非线性激活函数有sigmoid、tanh、ReLU等。

二.线性激活函数
线性激活函数不具备非线性特性,只是简单地将输入信号乘以一个权重系数,并加上一个偏置项。因此,使用线性激活函数的模型只能够表示线性函数,对于实际问题并不适用。

三.Softmax激活函数
Softmax激活函数通常用于多分类问题中,它能够将模型的输出转换为一个概率分布,方便进行分类。具体来说,Softmax激活函数会将模型的输出值归一化到[0,1]之间,并且所有输出的和必须等于1。

四.恒等映射激活函数
恒等映射激活函数将输入信号直接输出,不做任何变换。这种激活函数通常用于回归问题中,因为在回归问题中需要输出连续的实数值,而不是离散的类别标签。

总的来说,选择适合的激活函数需要根据具体问题进行权衡,不同的激活函数可能对模型的性能和训练效率产生不同的影响。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值