一、PReLU的定义和背景
PReLU是一种激活函数,相比于ReLU,它对输入的负值的响应做了调整,将响应值从0变成了一个 learnable 的负数值。PReLU的参数基于训练数据进行更新。
ReLU激活函数在深度学习中大获成功,将前向传播过程中的非线性层转化为简单的阈值函数。ReLU本身非常简单,易于计算,几乎不会降低模型的拟合能力,但训练时有时可能会出现“神经元死亡”的问题。具体地,如果输入小于零,整个神经元死亡(输出恒为0),从而导致相应的权重和偏置量一直没有被更新。同时,ReLU的矩阵积累应该是离均差的,因此其在限制网络分布方面欠缺一些性质。
PReLU由何凯明在2015年提出。与ReLU不同,PReLU将负轴(negative axis)上不满足线性关系的部分进行函数转换。
二、PReLU的表达式
设 $x$ 是一个scalar,$y$ 是一个scalar。令 $w$ 是一个可学习的参数,$w \leq 0$。那么 PReLU 的表达式定义为:
$$ y=\begin{cases} x &\text{if } x>0 \\ wx &\text{if } x\leq 0 \end{cases} $$
在机器学习中,不是w
本身,而是它在训练集上的值被学习并保留的参数对 $w$ 进行优化。如果 $w = 0$,则退化为ReLU激活函数。
三、PReLU的特点和优点
1. 适用性广泛:PReLU广泛用于图像分类和目标检测领域;经过实验发现,PReLU不仅在图像识别网络中表现良好,而且在人脸识别和自然语言处理中也非常成功。
2. 防止ReLU神经元死亡的问题:PReLU通过调整负数输入的值,解决了ReLU中存在的神经元死亡问题。这样,神经元不再是"dead"状态,从而使神经网络具有更强的鲁棒性。
3. 可学习的参数:$w$ 和其他模型参数一起被优化,因此可以将具体的情况融入到模型设计之中。
四、PReLU的应用
应用PReLU在LeNet-5、AlexNet、VGGNet、GoogLeNet和残差网络(ResNet)等多个深度学习网络中都具有很好的效果表现,例如,ResNet-34网络在图像分类领域中的优势就是把PReLU与残差结构相结合。
五、PReLU的代码实现
import tensorflow as tf class PReLU(tf.keras.layers.Layer): def __init__(self): super(PReLU, self).__init__() self.alpha = tf.Variable(0.01, dtype=tf.float32) def call(self, x): alpha = tf.keras.backend.maximum(0.01, self.alpha) return tf.keras.activations.relu(x) - alpha * tf.keras.activations.relu(-x)
六、总结
本文详细介绍了一个适用于深度神经网络的PReLU,对PReLU 的定义和背景,表达式,特点和优点,应用和代码实现均有阐述。