ReLU
Relu(Rectified Linear Unit)——修正线性单元函数
数学公式:
ReLU作为激活函数的特点:
- 相比Sigmoid和Tanh,ReLU摒弃了复杂的计算,提高了运算速度。
- 解决了梯度消失问题,收敛速度快于Sigmoid和tanh函数,但要防范ReLU的梯度爆炸。
ReLU 强制将x<0部分的输出置为0,可能会导致模型无法学习到有效特征,所以如果学习率设置的太大,就可能会导致网络的大部分神经元处于死亡状态,所以使用ReLU的网络,学习率不能设置太大。
Leaky ReLU中的公式为常数,一般设置 0.01。这个函数通常比 Relu 激活函数效果要好,但是效果不是很稳定,所以在实际中 Leaky ReLu 使用的并不多。
PRelu(参数化修正线性单元)是Leaky ReLU的一个变体,公式中参数a_i作为一个可学习的参数,会在训练的过程中更新。
RReLU(随机纠正线性单元)也是Leaky ReLU的一个变体。在RReLU中,负值的斜率a_{ji}在训练中是随机的,在测试时会固定下来。RReLU的亮点在于,在训练环节中,a_{ji}是从一个均匀分布U(I,u)中随机抽取的数值。
GeLU
GeLU(Gaussian Error Linear Units)即高斯误差线性单元,它是一种高性能的神经网络激活函数,因为GeLU的非线性变化是一种符合预期的随机正则变换方式,公式如下:
其中Φ(x)指的是x高斯分布的累积分布,完整形式如下:
计算结果如下:
或者可以表示为:
由此可知,概率P ( X ≤ x ) 即X的高斯正态分布ϕ(X)的累积分布Φ(x)是随着x的变化而变化的,当x增大,Φ(x)增大,当x减小,Φ(x)减小,即当x越小,在当前激活函数激活的情况下,越有可能激活结果为0,即此时神经元被dropout,而当x越大越有可能被保留。
代码实现(bert):
def gelu(x): |
- GELU可以看作是ReLU的平滑近似,它不再是硬性地在0点截断,而是根据输入数值在高斯分布中的分位来决定输出的缩放比例,输入越小(负得越多),就越趋近于输出0,输入越大,就越趋近于输出x。
- GeLU相比ReLU增加非线性因子和数据统计特性。
参考文章:https://cloud.tencent.com/developer/article/1876554
GLU/SwiGLU
GLU(Gated Linear Unit)即门控线性单元,门控机制的核心思想是让网络自己学习去控制信息的流动。它不再是一个简单的、由输入值本身决定的开关,而是引入一个独立的“门控”分支,来动态决定哪些信息可以通过,以及通过多少。
其中:
- x 是输入。
- W,V,b,c 是可学习的权重和偏置。
- (xW+b) 是内容分支,负责正常的线性变换。
- σ(xV+c) 是门控分支,σ是Sigmoid函数,其输出在 (0, 1) 之间。
- ⊗ 代表逐元素相乘。
SwiGLU是GLU的一个变体,它将门控分支的激活函数从Sigmoid换成了Swish函数。
Swish函数:
其中σ是Sigmoid函数
SwiGLU:
总结对比:
| 特性 | ReLU | GELU | SwiGLU |
|---|---|---|---|
| 机制 | 静态阈值开关 | 平滑的静态开关 | 动态、数据驱动的门控 |
| 数学形式 | max(0, x) | x * Φ(x) | Swish(xW) ⊗ (xV) |
| 平滑性 | 在0点不平滑 | 平滑 | 平滑 |
| 表达能力 | 较弱 | 中等 | 非常强 |
| 核心思想 | 简单、非线性 | ReLU的平滑近似 | 学习如何控制信息流 |
| 代表模型 | 早期CNNs, RNNs | BERT, GPT-2/3 | LLaMA, PaLM, Mixtral, GPT-4 |