5、PReLU函数
对应的论文链接:https://arxiv.org/abs/1502.01852v1
5.1 公式
PReLU函数的公式:
f
(
x
)
=
{
x
,
x
>
=
0
α
x
,
x
<
0
(
α
是可训练参数
)
f(x) = \begin{cases} x&,x>=0 \\ \alpha x&,x<0 (\alpha 是可训练参数) \end{cases}
f(x)={xαx,x>=0,x<0(α是可训练参数)
PReLU函数的导函数:
f
′
(
x
)
=
{
1
,
x
>
=
0
α
,
x
<
0
(
α
是可训练参数
)
f'(x) = \begin{cases} 1&,x>=0 \\ \alpha &,x<0 (\alpha 是可训练参数) \end{cases}
f′(x)={1α,x>=0,x<0(α是可训练参数)
5.2 优点与不足
PReLU函数(ReLU的改进):
1、在负值域,PReLU的斜率较小,这也可以避免Dead ReLU问题。与ELU相比,PReLU在负值域是线性运算。尽管斜率很小,但不会趋于0。
2、公式与Leaky ReLu相似,但并不完全一样。𝛼可以是常数,或自适应调整的参数。也就是说,如果让a自适应,那么PReLu会在反向传播时更新参数a。
3、参数α通常为0到1之间的数字,并且通常相对较小。
(1)如果𝛼 = 0,则f(x)变为ReLU。
(2)如果𝛼 > 0,则f(x)变为leaky ReLU。
(3)如果𝛼是可学习的参数,则f(x)变为PReLU。
5.3 torch.rpelu
在 PyTorch 中,torch.rrelu 函数用于实现随机泄露修正线性单元(Randomized Leaky ReLU)激活函数。RReLU 是 Leaky ReLU 的一个变体,其中负输入值的斜率是在训练过程中随机采样的,并在每次前向传播时保持固定。这种随机性有助于模型的正则化,因为它在每次迭代时都会稍微改变激活函数的形状。
torch.rrelu 的基本使用如下:
import torch
# 创建一个张量
x = torch.tensor([-5.0, -3.0, 0.0, 2.0, 5.0])
# 应用 RReLU 函数
# 下面的例子中,我们假设负斜率的均值是 0.01,标准差是 0.02
y = torch.rrelu(x, lower=0.01, upper=0.02)
print(y)
在上面的例子中,lower 和 upper 参数定义了负斜率随机采样的范围。lower 是斜率的最小值,而 upper 是斜率的最大值。每次前向传播时,负斜率会在这个范围内随机选择一个值,并保持不变,直到下一次前向传播。