Funciones de activacion

Avatar de Usuario
Dalamar
Site Admin
Mensajes: 8709
Registrado: 09 May 2012 01:38

Funciones de activacion

Mensajepor Dalamar » 04 Abr 2017 16:44

Vamos a hablar de funciones de activacion en Deep Learning, las funciones que permiten que cada neurona pase o no pase (o pase parcialmente) el valor que le llega desde su entrada, es importante entenderlas ya que para realizar backpropagation que habitualmente es Gradient Descent necesitamos calcular su derivada.

Cada tipo de funcion de activacion tiene su proposito, unas son mas utiles en capas intermedias, otras en las capas finales otras para resultados binarios, otras para producir el resultado final, en redes recurrentes usamos otras...

Hay que tener en cuenta que cuando tenemos muchas capas los resultados se van multiplicando unos con otros, por lo que si tenemosuna funcion de activacion que siempre da un valor menor que uno como sigmoide o tangencial, podremos encontrarnos con el problema de "Vanishing Gradients", dedicaremos otro hilo a ello.

Por lo que es muy importante entenderlas bien, y despues entender las funciones para el calculo de nuestro error, pero para eso dedicare otro hilo:

ReLU

Una de las grandes ventajas de ReLU es que es muy sencilla de calcular, por lo cual es muy rapida, utilizando Dropout para la regularizacion obtenemos un sistema razonablemente robusto si no tenemos muchas capas en la red, en caso de tener muchas capas tendremos que pensar en sus variantes especialmente en SELU.

Dying Relu problem: Relu neurons can sometimes be pushed into states in which they become inactive for essentially all inputs. In this state, no gradients flow backward through the neuron, and so the neuron becomes stuck in a perpetually inactive state and "dies." In some cases, large numbers of neurons in a network can become stuck in dead states, effectively decreasing the model capacity. This problem typically arises when the learning rate is set too high.


Logictic sigmoid

La salida de la funcion sigmoide es de entre 0 y 1, lo cual se puede interpretar como una probabilidad.

Esta funcion pierde el gradiente rapidamente por lo que no es adecuada para redes con muchas capas ocultas (Deep networks), pero esto se puede subsanar usando batch-normalization (normalizacion a nivel de capa no solo de entrada - Ver: https://www.tensorflow.org/api_docs/python/tf/layers/batch_normalization).

(1 / (1 + e^-x))

Imagen

Hyperbolic Tangent: Tanh

La salida de la funcion TanH es de entre 1 y -1.

TanH tiende a converger rapido durante backpropagation si los pesos se han inicializado con valores pequeños y homogeneamente distrobuidos alrededor de 0.

Si usamos la funcion sigmoide con el mismo tipo de inicializacion veremos que los resultados tienden a estar en la mitad inferior del rango de activacion.

(1 - e^2x) / (1 + e^2x))

Imagen

Softmax

Softmax nos permite tener una capa de salida con diferentes probabilidades en cada nodo que en total sumen 1 o lo que es lo mismo 100%, por ejemplo, la imagen es un perro o un gato? Nos puede dar 10% y 90% como salidas para perro y para gato, para numeros tendriamos 10 salidas con una probabilidad para cada una, si tenemos un seis que se parece a un cero podriamos tener probabilidades muy bajas para todos los numeros excepto para cero y seis que tendriamos probabilidades cercanas o ligeramente superiores al 50%.

Imagen

Notas:

There are plenty more activation functions available and different researchers keep on looking for new ones (e.g. Exponential Linear Units (ELUs), Gaussian Error Linear Units (GELUs), ...) with different/better properties


Regression: linear (because values are unbounded)

Classification: softmax (simple sigmoid works too but softmax works better)

Use simple sigmoid only if your output admits multiple "true" answers, for instance, a network that checks for the presence of various objects in an image. In other words, the output is not a probability distribution (does not need to sum to 1).

Sigmoid and tanh should not be used as activation function for the hidden layer. This is because of the vanishing gradient problem, i.e., if your input is on a higher side (where sigmoid goes flat) then the gradient will be near zero. This will cause very slow or no learning during backpropagation as weights will be updated with really small values.

Detailed explanation here: http://cs231n.github.io/neural-networks-1/#actfun

The best function for hidden layers is thus ReLu.
Adjuntos
tanh.png
tanh.png (6.96 KiB) Visto 62 veces
ArtificialNeuronModel.png
activation_derivatives.png
ReLU.jpg
latex_tanh.png
latex_tanh.png (3.79 KiB) Visto 64 veces
Saturation.png
CompareSigTan.jpg
CompareSigTan2.gif
LogicticSignoid.gif
LogicticSignoid.gif (4.84 KiB) Visto 64 veces
differential_calculus_0018.gif
differential_calculus_0018.gif (5.43 KiB) Visto 64 veces
SoftMax.JPG
¿Te ha gustado este hilo? Compartelo en las redes sociales para que se sume mas gente a la conversacion!

Avatar de Usuario
Dalamar
Site Admin
Mensajes: 8709
Registrado: 09 May 2012 01:38

Re: Funciones de activacion

Mensajepor Dalamar » 08 Jun 2017 08:31

ReLU

ReLU (Rectified Linear Unit), es todo o nada, pasas el gradiente o no lo pasas.

Imagen

1. Leaky ReLU

Leaky ReLUs allow a small, non-zero gradient when the unit is not active


Con leaky ReLU pasas todo el gradiente o el 1% del gradiente.

Leaky ReLUs are one attempt to fix the “dying ReLU” problem. Instead of the function being zero when x < 0, a leaky ReLU will instead have a small negative slope (of 0.01, or so). ... Some people report success with this form of activation function, but the results are not always consistent.


2. Parametric ReLU

Parametric ReLUs take this idea further by making the coefficient of leakage into a parameter that is learned along with the other neural network parameters


Con Parametric ReLU pasas todo el gradiente o el una parte del gradiente que es variable y aprendida.

Ver: http://gforge.se/2015/06/benchmarking-relu-and-prelu/

Imagen

3. SReLU

4. ELU (Exponential Linear Unit) (Ver: https://arxiv.org/pdf/1511.07289.pdf)

Imagen

5. SELU (Scaled Exponential Linear Unit) (Ver: https://arxiv.org/pdf/1706.02515.pdf)

Selu permite escalar FNNs, es un avance importante que combinado con Alpha Dropouts permite construir redes con muchas mas profundidad.

SELU es ELU multiplicado por lambda.

Imagen

Código: Seleccionar todo

def selu(x):
    alpha = 1.6732632423543772848170429916717
    scale = 1.0507009873554804934193349852946
    return scale*np.where(x>=0.0, x, alpha*np.exp(x)-alpha)


https://www.reddit.com/r/MachineLearnin ... h=0912afa3

Implementacion en Tensorflow https://github.com/shaohua0116/Activation-Visualization-Histogram
Adjuntos
deep-learning-RELU.jpg
VariacionesRELU.png
VariacionesRELU.png (8.6 KiB) Visto 62 veces
SELU.png
SELU.png (10.61 KiB) Visto 62 veces
LeakyParametric.png
¿Te ha gustado este hilo? Compartelo en las redes sociales para que se sume mas gente a la conversacion!


Volver a “Inteligencia Artificial”

cron

Ingresar