DNN常见激活函数与其求导公式及来源

本文详细介绍了多种常见的激活函数,包括Sigmoid、tanh、ReLU及其变种Leaky ReLU、ELU,还有Maxout等。每种函数的特点、数学表达式及导数都被清晰地阐述,并探讨了它们在神经网络中的应用优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Sigmoid 函数

f1(x)=11+ex
   f1(x) 的导函数为:
ddxf1(x)=f1(x)(1f1(x))

tanh函数

sinh(x)=exex2

cosh(x)=ex+ex2

tanh(x)=sinh(x)cosh(x)=exexex+ex

  通过上下同乘 ex 可得 f2(x)=tanh(x)=2f1(2x)1 【转化为Sigmoid函数的形式】
  因此,tanh的导函数为:
ddxf2(x)=2f1(2x)2(1f1(2x))=1f22(x)

  函数模型如下:

tanh函数

  相关论文:(该论文证明了tanh激活函数比Sigmoid好,因为Sigmoid的平均值不为0)
  Eigenvalues of covariance matrices: Application to neural-network learning.

ReLu 函数

f3(x)=max(0,x)

  即当x>0时,函数表现为 y=x;当 x<0 时,函数表现为 y=0
  表现为分段函数的形式:
f3(x)={x,0,x>0x0

  则 ReLu函数的导函数为:
ddxf3(x)={1,0,x>0x0

提出背景:
  2001年,神经科学家Dayan、Abott从生物学角度,模拟出了脑神经元接受信号更精确的激活模型,模型如下:

这里写图片描述

  这个模型对比Sigmoid系(Sigmoid和tanh)主要变化有三点:①单侧抑制相对宽阔的兴奋边界稀疏激活性(重点,可以看到红框里前端状态完全没有激活)

  该函数模型和Softplus函数一起被整理后,由论文发表。模型如下:

这里写图片描述

  相关论文为:
   Deep Sparse Rectifier Neural Networks

Leaky ReLu 函数

f4(x)={x,αx,x>0x0

其中,α是一个接近0的常数

  则 Leaky ReLu函数的导函数为:
ddxf4(x)={1,α,x>0x0

  函数模型如下:
Leaky ReLu 函数

  提出论文:
   Rectifier nonlinearities improve neural network acoustic models

ELU 函数

f5(x)={x,α(ex1),x>0x0

  则 ELU函数的导函数为:
ddxf5(x)={1,αex,x>0x0={1,f5(x)+α,x>0x0

  ELU函数模型如下:

ELU函数模型

  该函数模型有如下特性:
  右侧线性部分使得ELU能够缓解梯度消失,而左侧软饱能够让ELU对输入变化或噪声更鲁棒。ELU的输出均值接近于零,所以收敛速度更快。

  提出论文:
  Fast and Accurate Deep Network Learning by Exponential Linear Units (ELUs)

**Maxout函数**

f5(x)=max((wi)Tx+bi)

  该函数有如下特性:
  maxout的拟合能力是非常强的,它可以拟合任意的的凸函数(当然包括ReLu和 Leaky ReLu)。最直观的解释就是任意的凸函数都可以由分段线性函数以任意精度拟合。
  Maxout能够缓解梯度消失,同时又规避了ReLU神经元死亡的缺点,但增加了参数和计算量。

  提出论文:
  Maxout Networks

### 深度神经网络中的激活函数类型及用途 #### 阶跃函数 阶跃函数是一种非常基础的非线性函数,但在实际应用中并不常用。其主要原因是它不具有连续性和可微分性,在梯度下降优化过程中会产生不可导的问题[^4]。 #### Sigmoid 函数 Sigmoid 是一种经典的激活函数,形式为 \( f(x) = \frac{1}{1 + e^{-x}} \),能够将输入映射到 (0, 1) 范围内。然而,由于其在极端值区域的梯度接近于零,容易引发梯度消失问题,尤其是在深层网络中表现不佳。尽管如此,Sigmoid 在某些特定场景下仍然有用,比如二分类问题中的输出层[^1]。 ```python import numpy as np def sigmoid(x): return 1 / (1 + np.exp(-x)) ``` #### Tanh 函数 Tanh(双曲正切)是另一个常用的激活函数,定义为 \( f(x) = \tanh(x) = \frac{e^{x} - e^{-x}}{e^{x} + e^{-x}} \)。它的取值范围为 (-1, 1),相较于 Sigmoid 更加对称,这有助于加速收敛速度。不过,同样面临梯度消失的风险。 ```python def tanh(x): return np.tanh(x) ``` #### ReLU 函数 ReLU(Rectified Linear Unit),即修正线性单元,表达式为 \( f(x) = \max(0, x) \)。相比传统的 Sigmoid 和 Tanh,ReLU 不仅计算效率高,而且能有效缓解梯度消失现象,成为当前最流行的激活函数之一。但它也存在一些缺点,例如可能导致部分神经元死亡(Dead Neuron Problem)。对于大多数深度学习任务而言,ReLU 已经成为了默认选择。 ```python def relu(x): return np.maximum(0, x) ``` #### Leaky ReLU 及变体 Leaky ReLU 改进了标准 ReLU 中存在的死区问题,通过允许负数侧有很小斜率 α 来解决这个问题,通常写成 \( f(x) = \begin{cases} x &\text{if } x >= 0 \\ \alpha * x &\text{otherwise}\end{cases} \)[^4]。这种设计使得即使当输入小于零时也能保留一定量的信息传递下去,从而减少因完全抑制而导致的功能丧失风险。 ```python def leaky_relu(x, alpha=0.01): return np.where(x >= 0, x, alpha * x) ``` #### Swish 函数 Swish 是由 Google Brain 提出的一种新型激活函数公式为 \( f(x) = x \cdot \sigma(\beta x) \),其中 σ 表示 Sigmoid 函数,β 则是一个超参数用于控制曲线形状。研究表明,在许多情况下用 Swish 替代传统 ReLUs 后可以获得更好的泛化能力,并且具备平滑性质和非单调特征进一步增强了模型的表现力[^2]。 ```python def swish(x, beta=1.0): return x * sigmoid(beta * x) ``` --- ### 总结 不同类型的激活函数适用于不同的应用场景: - **Sigmoid**: 主要应用于逻辑回归或者需要概率解释的任务; - **Tanh**: 当希望数据分布更加集中或对称时选用; - **ReLU/Leaky ReLU**: 大多数现代架构首选项,尤其适合大规模训练集下的高效求解过程; - **Swish**: 新兴趋势显示其可能带来更优的结果特别是在复杂结构上尝试使用。 每种激活函数都有各自的优势与局限之处,合理选取取决于具体业务需求和技术实现细节考量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值