¿Cuál es la diferencia entre LeakyReLU y PReLU?

42

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

Keras, sin embargo, tiene ambas funciones en los documentos .

Fuga ReLU

Fuente de LeakyReLU :

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

Por lo tanto (ver código )

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

PReLU

Fuente de 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

Por lo tanto,

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

Pregunta

¿Me equivoqué? ¿No son y equivalentes a (suponiendo ?)f1f2fα(0,1)

Martin Thoma
fuente

Respuestas:

50

Directamente de wikipedia :

ingrese la descripción de la imagen aquí

  • Las ReLU con fugas permiten un pequeño gradiente distinto de cero cuando la unidad no está activa.

  • Las ReLU paramétricas llevan esta idea más allá al convertir el coeficiente de fuga en un parámetro que se aprende junto con los otros parámetros de la red neuronal.

Thomas W
fuente
3
Ah, gracias, siempre olvido que las ReLU con fugas tienen como hiperparámetro y las ReLU paramétricas tienen como parámetro. αα
Martin Thoma
1
Para lo de Google: está bien . (Por cierto, para mí esta pregunta es el tercer resultado ahora para "Leaky ReLU vs PReLU")
Martin Thoma
3
@MartinThoma cierto! ¡Sin ofender en absoluto por eso! La forma en que encontré la respuesta fue bastante estúpida también; No sabía cuál era la 'P' en PReLU, así que lo descubrí y luego traté de averiguar qué era PReLU simplemente escribiendo 'ParaLetric ReLU', que me llevó a la página de Wikipedia. Aprendí algo hoy por tu pregunta;)
Thomas W
1
Agradable. Así es como debería ser :-) En este caso, mi pequeña descripción general de la función de activación también podría ser interesante para usted. El artículo está (parcialmente) en alemán, pero supongo que por esa parte no debería importar
Martin Thoma el