LeakyReLU 和 PReLU 有什么区别?

数据挖掘 神经网络
2021-09-30 20:13:39

我认为 PReLU 和 Leaky ReLU 都是

f(x)=max(x,αx) with α(0,1)

然而,Keras 在docs中具有这两种功能。

泄漏的 ReLU

LeakyReLU 的来源

return K.relu(inputs, alpha=self.alpha)

因此(见relu 代码

f1(x)=max(0,x)αmax(0,x)

前路

PReLU 的来源

def call(self, inputs, mask=None):
    pos = K.relu(inputs)
    if K.backend() == 'theano':
        neg = (K.pattern_broadcast(self.alpha, self.param_broadcast) *
               (inputs - K.abs(inputs)) * 0.5)
    else:
        neg = -self.alpha * K.relu(-inputs)
    return pos + neg

因此

f2(x)=max(0,x)αmax(0,x)

问题

我是不是搞错了什么?不是f1f2相当于f(假设α(0,1)?)

2个回答

直接来自维基百科

在此处输入图像描述

  • 当单元不活动时, Leaky ReLU允许一个小的非零梯度。

  • 参数 ReLU通过将泄漏系数转化为与其他神经网络参数一起学习的参数,进一步推进了这一想法。

很老的问题;但我会添加更多细节,以防其他人在这里结束。

PReLU 背后的动机是克服 ReLU(垂死的 ReLU 问题)和 LeakyReLU(负输入值的不一致预测)的缺点。因此,PReLU 背后的论文的作者认为,为什么不让x<0(在 LeakyReLU 中)的 ax得到学习!

这里有一个问题:如果所有通道共享相同的 a,则称为通道共享 PReLU。但如果每个通道都学习自己的a,则称为 channel-wise PReLU。

那么,如果 ReLU 或 LeakyReLU 更适合该问题呢?这取决于模型学习:

  1. 如果 a is/are learning as 0 --> PReLU 变为 ReLu
  2. 如果 a 被学习为小数 --> PReLU 变为 LeakyReLU