Se hizo una pregunta similar en CV: Lista completa de funciones de activación en redes neuronales con pros / contras .
Copio a continuación una de las respuestas:
Una de esas listas, aunque no muy exhaustiva:
http://cs231n.github.io/neural-networks-1/
Funciones de activación comúnmente utilizadas
Cada función de activación (o no linealidad ) toma un solo número y realiza una determinada operación matemática fija en él. Hay varias funciones de activación que puede encontrar en la práctica:
Izquierda: la no linealidad sigmoidea aplasta los números reales para que oscilen entre [0,1]. Derecha: la no linealidad tanh aplasta los números reales para que oscilen entre [-1,1].
Sigmoideo. La no linealidad sigmoidea tiene la forma matemática σ( x ) = 1 / ( 1 + e- x)y se muestra en la imagen de arriba a la izquierda. Como se aludió en la sección anterior, toma un número de valor real y lo "aplasta" en un rango entre 0 y 1. En particular, los números negativos grandes se convierten en 0 y los números positivos grandes se convierten en 1. La función sigmoide ha sido utilizada históricamente dado que tiene una buena interpretación como la velocidad de disparo de una neurona: desde no disparar en absoluto (0) hasta disparar completamente saturado a una frecuencia máxima supuesta (1). En la práctica, la no linealidad sigmoidea ha caído recientemente en desgracia y rara vez se usa. Tiene dos inconvenientes principales:
- Los sigmoides saturan y matan los gradientes . Una propiedad muy indeseable de la neurona sigmoidea es que cuando la activación de la neurona se satura en la cola de 0 o 1, el gradiente en estas regiones es casi cero. Recuerde que durante la propagación hacia atrás, este gradiente (local) se multiplicará por el gradiente de la salida de esta puerta para todo el objetivo. Por lo tanto, si el gradiente local es muy pequeño, efectivamente "matará" el gradiente y casi ninguna señal fluirá a través de la neurona a sus pesos y recursivamente a sus datos. Además, se debe tener especial cuidado al inicializar los pesos de las neuronas sigmoides para evitar la saturación. Por ejemplo, si los pesos iniciales son demasiado grandes, la mayoría de las neuronas se saturarán y la red apenas aprenderá.
- x > 0F= wTx + bwF) Esto podría introducir dinámicas de zigzag no deseadas en las actualizaciones de gradiente para los pesos. Sin embargo, tenga en cuenta que una vez que estos gradientes se suman en un lote de datos, la actualización final de los pesos puede tener signos variables, lo que mitiga este problema. Por lo tanto, esto es un inconveniente, pero tiene consecuencias menos graves en comparación con el problema de activación saturado anterior.
Tanh La no linealidad de tanh se muestra en la imagen de arriba a la derecha. Aplasta un número de valor real al rango [-1, 1]. Al igual que la neurona sigmoidea, sus activaciones se saturan, pero a diferencia de la neurona sigmoidea, su salida está centrada en cero. Por lo tanto, en la práctica, la no linealidad de tanh siempre se prefiere a la no linealidad sigmoidea. También tenga en cuenta que la neurona tanh es simplemente una neurona sigmoidea escalada, en particular lo siguiente:tanh( x ) = 2 σ( 2 x ) - 1
Izquierda: función de activación de la Unidad lineal rectificada (ReLU), que es cero cuando x <0 y luego lineal con pendiente 1 cuando x> 0. Derecha: Un gráfico de Krizhevsky et al. (pdf) documento que indica la mejora 6x en la convergencia con la unidad ReLU en comparación con la unidad tanh.
ReLU. La unidad lineal rectificada se ha vuelto muy popular en los últimos años. Calcula la función . En otras palabras, la activación se limita simplemente a cero (ver imagen de arriba a la izquierda). Existen varios pros y contras para usar las ReLU:F( x ) = max ( 0 , x )
- (+) Se descubrió que acelera en gran medida (por ejemplo, un factor de 6 en Krizhevsky et al. ) La convergencia del descenso del gradiente estocástico en comparación con las funciones sigmoideas / tanh. Se argumenta que esto se debe a su forma lineal, no saturante.
- (+) En comparación con las neuronas tanh / sigmoideas que implican operaciones costosas (exponenciales, etc.), la ReLU se puede implementar simplemente con un umbral de una matriz de activaciones en cero.
- (-) Desafortunadamente, las unidades ReLU pueden ser frágiles durante el entrenamiento y pueden "morir". Por ejemplo, un gran gradiente que fluye a través de una neurona ReLU podría hacer que los pesos se actualicen de tal manera que la neurona nunca se active en ningún punto de datos nuevamente. Si esto sucede, entonces el gradiente que fluye a través de la unidad será siempre cero desde ese punto en adelante. Es decir, las unidades ReLU pueden morir irreversiblemente durante el entrenamiento, ya que pueden ser eliminadas del múltiple de datos. Por ejemplo, puede encontrar que hasta el 40% de su red puede estar "muerta" (es decir, neuronas que nunca se activan en todo el conjunto de datos de entrenamiento) si la tasa de aprendizaje se establece demasiado alta. Con un ajuste adecuado de la tasa de aprendizaje, este problema es menos frecuente.
F( x ) = 1 ( x < 0 ) ( α x ) + 1 ( x > = 0 ) ( x )αEs una pequeña constante. Algunas personas informan éxito con esta forma de función de activación, pero los resultados no siempre son consistentes. La pendiente en la región negativa también se puede convertir en un parámetro de cada neurona, como se ve en las neuronas PReLU, introducidas en Delving Deep into Rectifiers , por Kaiming He et al., 2015. Sin embargo, la consistencia del beneficio entre las tareas es actualmente poco claro.
F( wTx + b )max ( wT1x + b1, wT2x + b2)w1, b1= 0
Esto concluye nuestra discusión sobre los tipos más comunes de neuronas y sus funciones de activación. Como último comentario, es muy raro mezclar y combinar diferentes tipos de neuronas en la misma red, a pesar de que no hay un problema fundamental al hacerlo.
TLDR : " ¿Qué tipo de neurona debo usar? " Utilice la no linealidad ReLU, tenga cuidado con sus tasas de aprendizaje y posiblemente controle la fracción de unidades "muertas" en una red. Si esto le preocupa, pruebe Leaky ReLU o Maxout. Nunca use sigmoide. Intente tanh, pero espere que funcione peor que ReLU / Maxout.
Licencia:
la licencia MIT (MIT)
Copyright (c) 2015 Andrej Karpathy
Por la presente, se otorga permiso, de forma gratuita, a cualquier persona que obtenga una copia de este software y los archivos de documentación asociados (el "Software"), para operar en el Software sin restricciones, incluidos, entre otros, los derechos de uso, copia, modificación, fusión , publicar, distribuir, sublicenciar y / o vender copias del Software, y permitir que las personas a quienes se les proporcione el Software lo hagan, sujeto a las siguientes condiciones:
El aviso de copyright anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software.
EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO PERO SIN LIMITARSE A LAS GARANTÍAS DE COMERCIABILIDAD, APTITUD PARA UN PROPÓSITO Y NO INFRACCIÓN PARTICULARES. EN NINGÚN CASO, LOS AUTORES O LOS TITULARES DE LOS DERECHOS DE AUTOR SERÁN RESPONSABLES DE NINGÚN RECLAMO, DAÑOS U OTRA RESPONSABILIDAD, YA SEA EN ACCIÓN DE CONTRATO, TORT O DE OTRA MANERA, DERIVADA DE, FUERA DE, O EN RELACIÓN CON EL SOFTWARE O EL USO O OTRO TRATO EN EL SOFTWARE.*