激活函数大汇总(二十一)(BReLU附代码和详细公式)
更多激活函数见激活函数大汇总列表
一、引言
欢迎来到我们深入探索神经网络核心组成部分——激活函数的系列博客。在人工智能的世界里,激活函数扮演着不可或缺的角色,它们决定着神经元的输出,并且影响着网络的学习能力与表现力。鉴于激活函数的重要性和多样性,我们将通过几篇文章的形式,本篇详细介绍两种激活函数,旨在帮助读者深入了解各种激活函数的特点、应用场景及其对模型性能的影响。
在接下来的文章中,我们将逐一探讨各种激活函数,从经典到最新的研究成果。
限于笔者水平,对于本博客存在的纰漏和错误,欢迎大家留言指正,我将不断更新。(今天好累…难)
二、BReLU
BReLU(Bipolar Rectified Linear Unit) 激活函数具有以下特性:
1. 数学定义
BReLU定义为:
f
(
x
i
)
=
{
ReLU
(
x
i
)
if
i
m
o
d
2
=
0
−
ReLU
(
−
x
i
)
if
i
m
o
d
2
≠
0
f\left(x_i\right)= \begin{cases}\operatorname{ReLU}\left(x_i\right) & \text { if } i \bmod 2=0 \\ -\operatorname{ReLU}\left(-x_i\right) & \text { if } i \bmod 2 \neq 0\end{cases}
f(xi)={ReLU(xi)−ReLU(−xi) if imod2=0 if imod2=0
其中,
x
i
x_i
xi是输入向量中的第
i
i
i个元素,
ReLU
(
x
)
=
max
(
0
,
x
)
\operatorname{ReLU}(x)=\max (0, x)
ReLU(x)=max(0,x)是标准的线性整流函数。这个定义意味着对于输入向量的偶数索引元素,BReLU表现为标准的ReLU,而对于奇数索引的元素,BReLU将输入先取负,应用ReLU后再取负。
2. 函数特性
- 双极性:BReLU的输出可以为正或负,这与传统的ReLU(只输出非负值)形成对比。
- 索引依赖性:BReLU的行为取决于输入元素的索引(奇数或偶数),这是其他激活函数不具备的特性。
- 平均激活值向零偏移:通过对一半的输入元素应用取反操作,BReLU有助于将网络激活的平均值向零偏移,这可能有助于改善梯度流和网络训练。
3. 导数
BReLU的导数为:
f ′ ( x i ) = { 1 if i m o d 2 = 0 and x i > 0 − 1 if i m o d 2 ≠ 0 and x i < 0 0 otherwise f^{\prime}\left(x_i\right)= \begin{cases}1 & \text { if } i \bmod 2=0 \text { and } x_i>0 \\ -1 & \text { if } i \bmod 2 \neq 0 \text { and } x_i<0 \\ 0 & \text { otherwise }\end{cases} f′(xi)=⎩ ⎨ ⎧1−10 if imod2=0 and xi>0 if imod2=0 and xi<0 otherwise
4. 使用场景与局限性
使用场景:
- 非线性变换:对于偶数索引的输入,Bipolar ReLU表现出线性变换的性质,有助于网络学习和适应性特征提取,增强模型对复杂数据结构的理解能力。
- 有效的特征抑制:对于奇数索引的输入,Bipolar ReLU能将输出置为零,这为网络提供了一种机制,以有效抑制不希望强调的特征或模式,可能在处理特定任务时特别有用。
- 激活多样性:Bipolar ReLU通过在不同输入索引上应用不同的处理方式,引入了激活模式的多样性,增加了网络的表达能力,这在某些情况下可能为模型带来性能上的优势。
局限性:
- 梯度不连续性:由于在奇数索引的输入下输出为零,Bipolar ReLU可能引起激活函数在这些点处的不连续性,这有可能对梯度计算和反向传播过程的稳定性和效率造成负面影响。
- 潜在的信息损失:在奇数索引的输入被完全抑制时,Bipolar ReLU可能导致一部分重要信息的丢失,进而影响模型的整体表现和泛化能力。
- 参数调整挑战:Bipolar ReLU的性能可能受到其参数配置的显著影响。找到最适合特定任务和数据集的参数设置可能需要进行大量的实验和调整,增加了模型训练的复杂度。
5.代码实现
import numpy as np
def brelu(x):
"""
实现Bipolar Rectified Linear Unit (BReLU) 激活函数。
根据元素的索引,应用不同的ReLU变换:
- 偶数索引的元素使用标准的ReLU。
- 奇数索引的元素使用反向的ReLU,然后取负。
参数:
x -- 输入的数值或NumPy数组。
返回:
经过BReLU激活的输出。
"""
# 分别处理偶数和奇数索引的元素
output = np.array([np.maximum(0, x[i]) if i % 2 == 0 else -np.maximum(0, -x[i]) for i in range(len(x))])
return output
# 示例输入
x = np.array([1, -2, 3, -4, 5, -6, 7, -8])
# 应用BReLU激活函数
output = brelu(x)
print("BReLU Output:", output)
详细解读
Bipolar Rectified Linear Unit (BReLU) 激活函数是一种创新的激活函数,它根据输入元素的索引位置来决定使用标准ReLU还是其变体。具体地说:
-
对偶数索引的元素,BReLU直接应用标准的ReLU函数。这意味着如果输入值是正数,则保留该值;如果是负数,则将其置为0。这部分处理与常规的ReLU激活函数一致。
-
对奇数索引的元素,BReLU首先对输入值取反,然后应用ReLU函数,最后再将结果取反。这实质上意味着如果输入值是负数,则保留该负数值;如果是正数,则将其置为0。这种处理方式相当于在奇数索引上应用了一个“反向”的ReLU变体。
使用场景和潜在优势
BReLU通过在偶数和奇数索引上应用不同的处理,为深度学习模型提供了一种新的激活机制。这种机制可能特别适用于需要处理不对称数据或在模型中寻求更复杂非线性关系的应用场景。此外,BReLU的这种特性可能对于增强模型在特定任务中的泛化能力和学习复杂数据表示具有潜在优势。然而,BReLU的实用性和效果可能高度依赖于具体任务和数据集的特点,因此在广泛采用之前需要进一步的实验和验证。
三、参考文献
- Lars Eidnes, Arild Nøkland. Shifting Mean Activation Towards Zero with Bipolar Activation Functions. arXiv:1709.04054, 2018.