GELU
GELU(Gaussian Error Linear Unit,高斯误差线性单元)是一种在深度学习中广泛应用的激活函数。GELU 通过高斯误差函数(即标准正态分布的累积分布函数)对输入进行平滑处理,从而提高模型的性能。GELU 在许多任务中表现出色,特别是在自然语言处理(NLP)和计算机视觉任务中
数学定义
GELU 函数的数学表达式为:
其中:
- 是输入
- 是标准正态分布的累积分布函数
- 定义为:
- 其中, 是误差函数
近似表达式
为了简化计算,GELU 函数通常采用以下近似表达式:
这种近似计算在实际应用中非常常见,因为它计算效率更高
关键性质
- 平滑性:GELU 函数是连续且平滑的,这有助于提高模型的稳定性和收敛速度
- 非线性:GELU 结合了线性和非线性变换,使得模型能够学习复杂的模式
- 概率解释:GELU 通过高斯误差函数对输入进行平滑处理,从而具有概率解释,即输入值越大,通过的概率越高
提出时间
GELU 激活函数是在 2016 年由 Dan Hendrycks 和 Kevin Gimpel 在论文《Gaussian Error Linear Units (GELUs)》中提出的。
解决的问题
- 平滑激活:GELU 通过引入高斯误差函数,使得激活函数在输入的正负区间内都具有平滑性,从而提高模型的稳定性
- 非线性增强:GELU 结合了线性变换和非线性激活,从而增强了模型的非线性特性
- 概率解释:GELU 具有概率解释,使得输入值越大,通过的概率越高,从而更好地模拟神经元的激活过程
示例
以下是一个简单的 Python 示例,展示如何计算 GELU 函数:
from scipy.special import erf
# 定义 GELU 函数
def gelu(x):
return 0.5 * x * (1 + erf(x / np.sqrt(2)))
Mish
Mish 激活函数是一种在深度学习中使用的非线性激活函数,由 Diganta Misra 在 2019 年提出。Mish 激活函数通过平滑的非线性变换来增强模型的性能,并且在许多任务中表现出色,包括计算机视觉和自然语言处理
数学定义
Mish 激活函数的数学表达式为:
其中:
- 是 Softplus 函数
- 是双曲正切函数
关键性质
- 平滑性:Mish 函数是连续且平滑的,这有助于提高模型的稳定性和收敛速度
- 非单调性:Mish 函数是非单调的,这意味着它在某些区间内是递增的,而在其他区间内是递减的。这种特性使得 Mish 能够捕捉到更复杂的模式
- 无界性:与 ReLU 不同,Mish 函数在负值区域是无界的,这有助于梯度流动,避免梯度消失问题
- 近似 ReLU:当输入值较大时,Mish 函数近似于 ReLU 函数
提出时间
Mish 激活函数是在 2019 年由 Diganta Misra 在论文《Mish: A Self Regularized Non-Monotonic Neural Activation Function》中提出的
解决的问题
- 平滑激活:Mish 通过引入 Softplus 和双曲正切函数,使得激活函数在输入的正负区间内都具有平滑性,从而提高模型的稳定性
- 非单调性:Mish 的非单调性使得它能够捕捉到更复杂的模式,比 ReLU 等单调激活函数更具表现力
- 梯度流动:Mish 在负值区域是无界的,这有助于梯度流动,避免梯度消失问题
示例
以下是一个简单的 Python 示例,展示如何计算 Mish 函数:
import numpy as np
import matplotlib.pyplot as plt
# 定义 Softplus 函数
def softplus(x):
return np.log1p(np.exp(x))
# 定义 Mish 函数
def mish(x):
return x * np.tanh(softplus(x))