序号 | 激活函数 | 表达式 | 优点 | 缺点 | Keras | tf2 |
---|---|---|---|---|---|---|
1 | sigmoid | y = 1 1 + e − x = tanh ( x / 2 ) + 1 2 y=\frac{1}{1+e^{-x}}=\frac{\text{tanh}(x/2)+1}{2} y=1+e−x1=2tanh(x/2)+1 | 属于 ( 0 , 1 ) (0, 1) (0,1),即指定区间,又属于累计概率范围 | 指数计算成本不低;梯度弥散&爆炸 | keras.activations.sigmoid | tf.nn.sigmoid |
2 | elu(指数线性单元) | y = x i f x > 0 e l s e α × ( e x − 1 ) y=x \quad if \quad x \gt 0 \quad else \quad \alpha \times (e^x - 1) y=xifx>0elseα×(ex−1) | 避免梯度弥散;能得到负值输出 | 计算成本高;无法避免梯度爆炸;分段函数且线性(导数常值) | keras.activations.elu | tf.nn.elu |
3 | selu(扩展型指数线性单元) | y = λ × x i f x > 0 e l s e λ × α × ( e x − 1 ) y=\lambda \times x \quad if \quad x \gt 0 \quad else \quad \lambda \times \alpha \times (e^x - 1) y=λ×xifx>0elseλ×α×(ex−1) | 避免梯度弥散和爆炸 | 新激活函数 | keras.activations.selu | tf.nn.selu |
4 | softplus | y = log ( e x + 1 ) y=\text{log}(e^x + 1) y=log(ex+1) | 避免梯度弥散 | 计算成本高;不能避免梯度爆炸 | keras.activations.softplus | tf.nn.softplus |
5 | softsign | y = x ∣ x ∣ + 1 y=\frac{x}{\mid x \mid + 1} y=∣x∣+1x | 计算成本低 | 梯度弥散 | keras.activations.softsign | tf.nn.softsign |
6 | ReLU(修正线性单元) | y = maximum ( x , 0 ) y=\text{maximum}(x, 0) y=maximum(x,0) | 计算成本低 | 存在梯度为0的情况; 不能避免梯度爆炸 | keras.activations.relu | tf.nn.relu |
7 | tanh | y = tanh ( x ) y=\text{tanh}(x) y=tanh(x) | 输出值y以0为中心 | 梯度弥散&爆炸 | keras.activations.tanh | tf.nn.tanh |
8 | softmax | sigmoid的多分类形式 | keras.activations.softmax | tf.nn.softmax | ||
9 | hard_sigmoid | y = clip ( x + 1 2 , 0 , 1 ) = maximum ( 0 , min ( 1 , x + 1 2 ) ) y=\text{clip}(\frac{x+1}{2}, 0, 1) = \text{maximum}(0, \text{min}(1, \frac{x+1}{2})) y=clip(2x+1,0,1)=maximum(0,min(1,2x+1)) | 速度比 sigmoid 激活函数更快 | keras.activations.hard_sigmoid | ||
10 | exponential | y = e x y=e^x y=ex | 计算成本高 | keras.activations.exponential | ||
11 | linear | y = x y=x y=x | 输出等于输入 | 计算成本低 | keras.activations.linear | |
12 | Leaky ReLU(渗漏型修正线性单元) | y = maximum ( α × x , x ) y=\text{maximum}(\alpha \times x, x) y=maximum(α×x,x) | 避免梯度弥散;速度快(计算成本低) | 分段函数且线性(导数常值);梯度爆炸 | keras.layers.advanced_activations.LeakyReLU() | tf.nn.leaky_relu |
13 | GELU | y = 0.5 × x × ( 1 + tanh ( 2 / π × ( x + 0.044715 × x 3 ) ) ) y=0.5 \times x \times (1 + \text{tanh}(\sqrt{2 / \pi} \times(x + 0.044715 \times x^3))) y=0.5×x×(1+tanh(2/π×(x+0.044715×x3))) | 似乎是 NLP 领域的当前最佳;尤其在 Transformer 模型中表现最好;避免梯度消失 | 新激活函数 | ||
14 | Swish | y = x 1 + e − x y=\frac{x}{1 + e^{-x}} y=1+e−xx | 输出可能下降,即使在输入值增大的情况下 | 新函数 |