“hidden act“:“gelu“在bert中作用
在 BERT 中,"hidden_act": "gelu"
表示隐藏层(如前馈网络中的激活函数)使用的是 GELU(Gaussian Error Linear Unit) 激活函数。
一、GELU 激活函数是什么?
GELU(Gaussian Error Linear Unit)是一个非线性激活函数,它的数学定义如下:
其中 Φ(x)\Phi(x)Φ(x) 是标准正态分布的累积分布函数(CDF):
BERT 实际中使用的是一个近似形式:
二、GELU 的作用与优势
GELU 主要用于 Transformer 中的 前馈网络层(Feedforward Layer),具体在 BERT 的实现里,它出现在以下位置:
# 假设这是 transformer 的一层
x = Linear1(hidden_states)
x = GELU(x)
x = Linear2(x)
相较于 ReLU 的优势:
激活函数 | 是否平滑 | 是否零点处连续 | 对负数的处理方式 |
---|---|---|---|
ReLU | 否 | 不连续 | 直接置 0 |
GELU | 是 | 连续 | 以概率方式缩放 |
GELU 的“以概率方式决定激活强度”的方式,能够保留部分负值信息,使得信息流更平滑,更利于深层网络的训练。
三、在 BERT 中使用 GELU 的原因
提升模型表现:GELU 提供更细腻的非线性表达能力,实验表明 BERT 使用 GELU 比 ReLU 效果更好。
连续性和平滑性:避免 ReLU 的硬剪断问题,有助于梯度稳定传播。
更自然的概率解释:它模拟了“保留输入的概率是基于其大小”的机制,这在自然语言建模任务中非常有用。
四、总结
"hidden_act": "gelu"
是 BERT 中用于前馈子层的激活函数设置。GELU 是一种比 ReLU 更平滑的激活函数,能更好地捕捉输入的非线性关系。
BERT 使用 GELU 是为了提高训练稳定性和模型效果,是其架构中一个关键的小改进点。