深度学习——激活函数

激活函数(重新使用Matlab画了函数图像)

1.介绍

激活函数(Activation Function)层又称非线性映射(Non-Linearity Mapping)层,作用是增加整个网络的非线性(即表达能力或抽象能力)。深度学习之所以拥有强大的表示能力 ,关键就在于激活函数的非线性

然而物极必反。由于 非线性设计 所带来的一系列 副作用(如 期望均值不为0、死区),迫使炼丹师们设计出种类繁多的激活函数来 约束 非线性 的 合理范围

由于激活函数接在BN之后,所以激活函数的输入被限制在了 ( − 1 , − 1 ) (-1,-1) (1,1)之间。因此,即使是ReLu这种简易的激活函数,也能很好地发挥作用

2.函数类型

Sigmoid类
1.Sigmoid

Sigmoid函数,即著名的 Logistic 函数。被用作神经网络的阈值函数,将变量映射到 ( 0 , 1 ) (0,1) (0,1)之间
S ( x ) = 1 1 + e − x S(x)=\frac{1}{1+e^{-x}} S(x)=1+ex1
Sigmoid

缺点:

(1)输出值落在 ( 0 , 1 ) (0,1) (0,1)之间,期望均值为 0.5 ,不符合均值为 0 的理想状态(2)受现有的梯度下降算法所限(严重依赖逐层的梯度计算值),Sigmoid函数对落入 ( − ∞ , − 5 ) ⋃ ( 5 , ∞ ) (-\infty,-5)\bigcup(5,\infty) (,5)(5,)的输入值,梯度计算为 0,发生梯度弥散,因此该函数存在一正一负两块“死区”

2.HardSigmoid

对HardSigmoid和Sigmoid的比较表明,HardSigmoid无论是以特定的硬件形式实现还是以软件形式实现都具有较小的计算代价,并且作者强调了它在基于DL的二进制分类任务中显示出的一些有前途的结果。
H S ( x ) = m a x ( 0 , m i n ( 1 , x + 1 2 ) ) HS(x)=max(0,min(1,\frac{x+1}{2})) HS(x)=max(0,min(1,2x+1))
HardSigmoid

Tanh(x)类
1.tanh(x)

tanh是双曲函数中的一种,又名双曲正切
t a n h ( x ) = 2 S ( 2 x ) − 1 = e x − e − x e x + e − x tanh(x)=2S(2x)-1=\frac{e^x-e^{-x}}{e^x+e^{-x}} tanh(x)=2S(2x)1=ex+exexex
Tanh

改进:

将期望均值平移到了0这一理想状态

缺点:

本质上依然是Sigmoid函数,依然无法回避一左一右两块 “死区”(此时“死区”甚至还扩张了区间范围)

2.HardTanh

HardTanh函数,是深度学习应用中使用的Tanh激活函数的另一个变体。HardTanh代表了Tanh的一个更便宜、计算效率更高的版本。Hardtanh函数已经成功地应用于自然语言处理中,作者报告说,它在速度和准确率上都有所提高。
HT(x)
HardTanh

ReLu类
1.ReLU

ReLu函数,Rectified Linear Unit,又称 修正线性单元
R e L u ( x ) = m a x ( 0 , x ) ReLu(x)=max(0,x) ReLu(x)=max(0,x)
ReLU
ReLu设计已成为了深度网络的标配,当下深度网络的结构和relu相关的两大标配:He初始化(对ReLu网络有利)和Conv->BN->ReLu(默认采用relu)

改进:

彻底消灭了正半轴上的死区;计算超简单;正是因为Alex Net中提出了ReLu,在当时很好地缓解了梯度弥散,使得网络深度的天花板第一次被打破;该设计有助于使模型参数稀疏。

缺点

期望均值跑得离0更远了;负半轴上的死区直接蚕食到了 0点

2.ReLu6

由于Relu函数的正半轴不施加任何非线性约束,因此当输入为正大数时,易引起正半轴上的梯度爆炸。因此,Relu6 应运而生
R e L u 6 ( x ) = m i n ( m a x ( 0 , x ) , 6 ) ReLu6(x)=min(max(0,x),6) ReLu6(x)=min(max(0,x),6)
ReLU6

改进:

对正半轴 施加了 非线性约束;计算超简单

缺点:

期望均值依然不为 0 ;正半轴上的“死区”死灰复燃,从ReLu的 ( − ∞ , 0 ) (-\infty,0) (,0)蚕食至 ReLu6的 ( − ∞ , 0 ) ⋃ ( 6 , ∞ ) (-\infty,0)\bigcup(6,\infty) (,0)(6,),但是15年BN出来之后,输入被归一化到了 ( − 1 , 1 ) (-1,1) (1,1)之间。因此,ReLu6的设计就显得没有必要了

3.Leaky ReLu

对ReLu函数新增一超参数 a a a,以解决负半轴的“死区”问题
LReLU(x)
其中,超参数常 a a a被设定为0.01或0.001数量级的较小正数
LReLU

改进:

把 负半轴上的“死区”也端了,从此再无“死区”

缺点:

期望均值依然不为0;合适的 λ \lambda λ值较难设定且较为敏感,导致在实际使用中性能不稳定

4.参数化ReLu

将Leaky ReLu函数中的超参数 a a a设置为和模型一起被训练到的变量,以解决 a a a值较难设定的问题

改进:

更大自由度

缺点:

更大的过拟合风险;较为麻烦

随机化ReLu

将 Leaky ReLu函数中的超参数 a a a随机设置

5.ELU

ELU函数,Exponential Linear Unit,又称指数化线性单元 ,于2016年提出
E L U ( x ) = { x , x ≥ 0 a ( e x − 1 ) , x < 0 ELU(x)=\left\{ \begin{aligned} x,& &x\ge0\\ a(e^x-1),& &x<0 \\ \end{aligned} \right. ELU(x)={x,a(ex1),x0x<0
ELU
其中,超参数 a a a常备设定为1

改进:

完美解决了“死区”问题

缺点:

期望均值依然不为0;计算较为复杂

### 不同激活函数深度学习中的优缺点 #### Sigmoid 激活函数 Sigmoid 函数是一个经典的激活函数,其输出范围为 (0, 1),能够将任意实数值映射到这个区间内。然而,它存在梯度消失的问题,在反向传播过程中可能导致训练困难。 - **优点**: 输出值被压缩至固定范围内,适合用于概率预测场景下的二分类问题[^1]。 - **缺点**: 当输入较大或较小时,导数接近于零,容易引发梯度消失现象;计算指数运算较为耗时[^2]。 #### Tanh 激活函数 Tanh 是另一个常用的激活函数,可以看作是 Sigmoid 的变体,输出范围为 (-1, 1)。相比 Sigmoid,它的均值更接近于零,有助于中心化数据分布。 - **优点**: 能够更好地处理负值输入,并且通常收敛速度比 Sigmoid 更快[^3]。 - **缺点**: 同样面临梯度消失问题,尤其是在极端输入条件下表现不佳。 #### ReLU (Rectified Linear Unit) 激活函数 ReLU 定义简单直观:f(x) = max(0, x)。它是目前许多神经网络架构中最受欢迎的选择之一。 - **优点**: 计算效率高,因为只需判断输入是否大于零即可完成前向传播;有效缓解了梯度消失问题,促进了深层网络的学习能力。 - **缺点**: 对于小于零的部分会完全抑制信号传递,可能造成部分神经元“死亡”,即永远不再响应任何输入。 #### Leaky ReLU 激活函数 为了克服标准 ReLU 存在的死区问题,提出了改进版本——Leaky ReLU。该方法允许少量负斜率通过,即使当输入为负时也有微弱反应。 - **优点**: 避免了传统 ReLU 中可能出现的大规模神经元失活情况,保留了一定程度上的非线性特性。 - **缺点**: 参数调整敏感性强,如果设置不当可能会引入额外噪声或者影响最终性能。 #### ReLU6 激活函数 这是专门为移动设备优化设计的一种特殊形式的ReLU ,主要用于轻量级模型如MobileNet系列中 。ReLU6 将最大输出限定为6而不是无限大。 - **优点**: 特别适用于资源受限环境下的高效实现,同时保持良好的表达力。 - **缺点**: 可能限制某些特定应用场景下潜在的表现上限,特别是在需要非常宽泛动态范围表示的任务里。 ```python import numpy as np def sigmoid(x): return 1 / (1 + np.exp(-x)) def tanh(x): return np.tanh(x) def relu(x): return np.maximum(0, x) def leaky_relu(x, alpha=0.01): return np.where(x >= 0, x, alpha * x) def relu6(x): return np.minimum(np.maximum(0, x), 6) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值