1、介绍
PReLU(Parametric Rectified Linear Unit)激活函数是ReLU(Rectified Linear Unit)激活函数的一种改进。它是由 He et al. 在 2015 年提出的,旨在解决ReLU激活函数的一些局限性。
# 定义 PReLU 激活函数
prelu_activation = torch.nn.PReLU(num_parameters=1, init=0.25, device=None, dtype=None)
-
num_parameters
:可学习参数的数量。默认值为 1。对于每个输入通道,都会有一个可学习的参数。 -
init
:可学习参数的初始值。默认值为 0.25。这个参数用于初始化可学习的alpha
参数。 -
device
:指定在哪个设备上创建参数。默认为None
,表示使用当前设备。 -
dtype
:指定参数的数据类型。默认为None
,表示使用默认的数据类型。
2、公式
其中, 是输入值, 是一个可学习的参数,通常是一个小于1的常数。
这个参数使得PReLU能够在输入值为负数时调整其输出,而不是像传统的ReLU那样直接输出0。 当 时,PReLU的行为与标准的ReLU相同,即直接输出输入值。但当 时,PReLU输出的是 。这种设计使得PReLU在处理负输入时比标准的ReLU更加灵活和有效。
3、图像
4、特点
-
改进梯度消失问题:PReLU通过为负输入值提供一个非零斜率(由参数 控制),有助于缓解ReLU在负输入部分的梯度消失问题。
-
参数化:参数 是可学习的,这使得网络可以自适应地调整激活函数的形状,提高了模型的灵活性。当网络需要对激活函数的行为进行自适应调整时,PReLU是一个不错的选择。
-
计算资源允许:虽然PReLU增加了一些计算负担(因为 需要学习),但当计算资源充足时,这通常是可以接受的。
对比 PReLU 和 LeakyReLU
PReLU(Parametric Rectified Linear Unit)激活函数和 Leaky ReLU 激活函数之间的主要区别在于参数化的方式和灵活性。
PReLU 数学表达式:
Leaky ReLU 数学表达式:
从数学表达式上可以看到,这两个激活函数计算方式非常相近,唯一不同的就是 PReLU 负输入部分的斜率(即 )是可学习的参数,而 Leaky ReLU 负输入部分的斜率(即 )是初始设定好的固定参数。
-
参数化:
- PReLU: 在PReLU中,负输入部分的斜率(即 )是可学习的参数。这意味着在训练过程中, 的值是根据数据自动调整的,从而允许网络根据训练数据自适应地调整其激活函数的形状。
- Leaky ReLU: 在Leaky ReLU中,负输入部分的斜率也是非零的,但它是固定的,通常是一个非常小的常数(如0.01)。这意味着激活函数的形状在整个训练过程中保持不变。
-
灵活性和适应性:
- 由于PReLU的 是可学习的,它在理论上能提供更高的灵活性,使得激活函数可以更好地适应特定的数据集和任务。
- Leaky ReLU由于其简单性,在实现上更直接,但它缺乏PReLU所提供的自适应性。
-
在实践中的应用:
- PReLU通常在深层网络中更受欢迎,尤其是在任务对模型的灵活性有较高要求的场合,例如大规模的图像或语音识别任务。
- Leaky ReLU由于其简单性,适用于需要快速实现和较少调参的场景。
总结来说,PReLU通过引入可学习的参数为激活函数提供了更大的灵活性,而Leaky ReLU则提供了一个简单但效果稳定的非零斜率选项,用于处理ReLU激活函数在负输入部分的梯度消失问题。选择哪一个主要取决于特定任务的需求和计算资源的可用性。
对比ReLU和其他变体
PReLU是ReLU的多个变体之一。其他常见的变体包括:
- ReLU:最简单的形式,输出是输入的正部分。
- Leaky ReLU:固定一个小的非零斜率(例如0.01)用于负输入部分,与PReLU类似,但斜率不是可学习的。
- ELU(Exponential Linear Unit):为负输入提供一个指数曲线,以平滑地逼近负无穷。
更多深度学习内容请翻阅本人主页,下列是快速链接:
【激活函数】深度学习中你必须了解的几种激活函数 Sigmoid、Tanh、ReLU、LeakyReLU 和 ELU 激活函数(2024最新整理)-CSDN博客