深度学习日常学习记录——激活函数
前言
真实世界中的万物是由复杂数学公式来表征的,由光学、电学、物理学、化学、生物学等众多学科组成。深度神经网络层之间为线性连接,增加网络的广度和深度都无法增加网络非线性计算能力。因此,为了让神经网络更好的理解世界,需要设计激活函数来拟合复杂公式
一、激活函数的作用?
- 非线性表达
- 防止梯度消失
- 加速模型收敛
二、激活函数分类
| 序号 | 激活函数 | 公式 | 优点 | 缺点 |
|---|---|---|---|---|
| 1 | sigmoid函数 | σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1+e^{-x}} σ(x)=1+e−x1 | 梯度消失,产生饱和神经元;非零中心,收敛缓慢、无法体现个体神经元收敛 | |
| 2 | tanh函数 | t a n h ( x ) = e x − e − x e x + e − x tanh(x)=\frac{e^{x} - e^{-x}}{e^{x}+e^{-x}} tanh(x)=ex+e−xex−e−x | 以零为中心,加速收敛 | 梯度消失,产生饱和神经元 |
| 3 | RELU函数 | f ( x ) = { x if x > 0 0 if x ≤ 0 f(x)=\begin{cases} x & \text{if} x >0 \\ 0 & \text{if} x \leq 0 \end{cases} f(x)={x0ifx>0ifx≤0 | 计算高效,缓解梯度消失 | dead神经元,不以零为中心,给后一层神经元产生偏移 |
| 4 | Leaky RELU函数 | f ( x ) = { x if x > 0 γ x if x ≤ 0 f(x)=\begin{cases} x & \text{if} x > 0 \\ \gamma x & \text{if} x \leq 0 \end{cases} f(x)={xγxifx>0ifx≤0 | 缓解dead 神经元问题 | |
| 5 | ELU函数 | f ( x ) = { x if x > 0 α ( e x − 1 ) if x ≤ 0 f(x)=\begin{cases} x & \text{if} x > 0 \\ \alpha (e^{x} - 1 ) & \text{if} x \leq 0 \end{cases} f(x)={xα(ex−1)ifx>0ifx≤0 | 没有dead 神经元问题,正负平均,以零为中心,有饱和域 | 计算量大 |
| 6 | SeLU函数 | f ( x ) = γ { x if x > 0 α ( e x − 1 ) if x ≤ 0 f(x)= \gamma \begin{cases} x & \text{if} x > 0 \\ \alpha (e^{x} - 1 ) & \text{if} x \leq 0 \end{cases} f(x)=γ{xα(ex−1)ifx>0ifx≤0 | 放大input的变化 | |
| 7 | Swish函数 | σ ( x ) = x × s i g m o i d ( β x ) \sigma(x)=x \times sigmoid(\beta x) σ(x)=x×sigmoid(βx) | 自门控激活函数 | |
| 8 | Maxout函数 | 三维求取最大输出 | ||
| 9 | Softplus函数 |
三、激活函数使用
| 激活函数 | LaTeX 公式 | PyTorch 调用方式 | 特性说明 |
|---|---|---|---|
| Sigmoid | σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+e−x1 | nn.Sigmoid() | 输出范围 (0,1),适合概率输出 |
| Tanh | tanh ( x ) = e x − e − x e x + e − x \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} tanh(x)=ex+e−xex−e−x | nn.Tanh() | 输出范围 (-1,1),零中心化 |
| ReLU | ReLU ( x ) = max ( 0 , x ) \text{ReLU}(x) = \max(0, x) ReLU(x)=max(0,x) | nn.ReLU() | 简单高效,但负区梯度为 0 |
| LeakyReLU | LeakyReLU ( x ) = { x x ≥ 0 α x x < 0 \text{LeakyReLU}(x) = \begin{cases} x & x \geq 0 \\ \alpha x & x < 0 \end{cases} LeakyReLU(x)={xαxx≥0x<0 | nn.LeakyReLU(alpha=0.01) | 缓解神经元死亡,需调参 alpha |
| ELU | ELU ( x ) = { x x ≥ 0 α ( e x − 1 ) x < 0 \text{ELU}(x) = \begin{cases} x & x \geq 0 \\ \alpha (e^x - 1) & x < 0 \end{cases} ELU(x)={xα(ex−1)x≥0x<0 | nn.ELU(alpha=1.0) | 平滑负区,缓解梯度消失 |
| SELU |
SELU
(
x
)
=
λ
{
x
x
≥
0
α
(
e
x
−
1
)
x
<
0
\text{SELU}(x) = \lambda \begin{cases} x & x \geq 0 \\ \alpha (e^x - 1) & x < 0 \end{cases}
SELU(x)=λ{xα(ex−1)x≥0x<0 ( λ ≈ 1.0507 \lambda \approx 1.0507 λ≈1.0507, α ≈ 1.6733 \alpha \approx 1.6733 α≈1.6733) | nn.SELU() | 自归一化网络专用,需特定初始化 |
| Swish | Swish ( x ) = x ⋅ σ ( β x ) \text{Swish}(x) = x \cdot \sigma(\beta x) Swish(x)=x⋅σ(βx) | 手动实现:x * torch.sigmoid(beta * x) | 平滑非单调,实验表现优 |
| Maxout | Maxout ( x ) = max i ∈ [ 1 , k ] ( w i T x + b i ) \text{Maxout}(x) = \max_{i \in [1,k]}(w_i^T x + b_i) Maxout(x)=i∈[1,k]max(wiTx+bi) | 自定义实现(无内置) | 拟合能力强,但参数量大 |
| Softplus | Softplus ( x ) = 1 β log ( 1 + e β x ) \text{Softplus}(x) = \frac{1}{\beta} \log(1 + e^{\beta x}) Softplus(x)=β1log(1+eβx) | nn.Softplus(beta=1) | 平滑 ReLU,处处可导 |
2465

被折叠的 条评论
为什么被折叠?



