Herramientas de usuario

Herramientas del sitio


clase:iabd:pia:1eval:tema06-apendices

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
clase:iabd:pia:1eval:tema06-apendices [2022/01/15 16:08]
admin [Tipos de funciones de activación en capas ocultas]
clase:iabd:pia:1eval:tema06-apendices [2024/01/06 11:58] (actual)
admin [Tipos de funciones de activación en capas ocultas]
Línea 41: Línea 41:
 {{ :clase:iabd:pia:1eval:inicializadores.png?direct |}} {{ :clase:iabd:pia:1eval:inicializadores.png?direct |}}
  
 +
 +Ahora vamos a ver como se comportan 4 redes distintas según el número de capas, el inicializador y la función de activación usada
 +
 +{{ :clase:iabd:pia:1eval:inicializadores_de_pesos-resumen.png?direct&600 |}}
  
 Mas información: Mas información:
Línea 130: Línea 134:
  
 ===== Tipos de funciones de activación en capas ocultas ===== ===== Tipos de funciones de activación en capas ocultas =====
 +
 +==== sigmoid ====
 +La fórmula de la sigmoide se obtiene a partir de la función $logit$ o $log odds$.
 +
 +$$odds(p) = \frac{p}{1-p} $$
 +$$logit(p) = log(odds(p))=log(\frac{p}{1-p}) $$
 +
 +Ahora:
 +
 +$$logit(p) = ax+b $$
 +$$log(\frac{p}{1-p}) = ax+b $$
 +
 +Si despejamos $p$ de la anterior fórmula:
 +
 +$$
 +log(\frac{p}{1-p}) = ax+b \\
 +e^{log(\frac{p}{1-p})} = e^{ax+b} \\
 +\frac{p}{1-p}=e^{ax+b} \\
 +p=e^{ax+b} \cdot (1-p) \\
 +p=e^{ax+b}-pe^{ax+b} \\
 +p+pe^{ax+b}=e^{ax+b} \\
 +p(1+e^{ax+b})=e^{ax+b} \\
 +p=\frac{e^{ax+b}}{1+e^{ax+b}} \\
 +
 +
 +p=\frac{  \frac{e^{ax+b}}{e^{ax+b}}   }{ \frac{1+e^{ax+b}}{e^{ax+b}}   } \\
 +
 +
 +p=\frac{  1   }{ 1+\frac{1}{e^{ax+b}}   } \\
 +p=\frac{  1   }{ 1+e^{-(ax+b)}   } \\
 +$$
 +
 +Que es exactamente la función sigmoide
 +
 +  * Más información
 +    * [[https://en.wikipedia.org/wiki/Odds|Odds (Wikipedia)]]
 +    * [[https://towardsdatascience.com/https-towardsdatascience-com-what-and-why-of-log-odds-64ba988bf704|WHAT and WHY of Log Odds]]
 +    * [[https://medium.com/nerd-for-tech/understanding-logistic-regression-782baa868a54|Understanding Logistic Regression]]
 +    * [[https://stats.stackexchange.com/questions/162988/why-sigmoid-function-instead-of-anything-else|Why sigmoid function instead of anything else?]]
 +    * [[https://towardsdatascience.com/why-sigmoid-a-probabilistic-perspective-42751d82686|Why Sigmoid: A Probabilistic Perspective]] 
  
 ==== ReLU y Leaky ReLU ==== ==== ReLU y Leaky ReLU ====
Línea 169: Línea 213:
 ==== GELU ==== ==== GELU ====
 GELU es de la últimas funciones de activación "famosas" que han aparecido. GELU: Se usa con Transformers. La usa Google con [[https://paperswithcode.com/method/bert|BERT]] y OpenAI en GPT-2  y GPT-3.((https://mlfromscratch.com/activation-functions-explained/#gelu)) GELU es de la últimas funciones de activación "famosas" que han aparecido. GELU: Se usa con Transformers. La usa Google con [[https://paperswithcode.com/method/bert|BERT]] y OpenAI en GPT-2  y GPT-3.((https://mlfromscratch.com/activation-functions-explained/#gelu))
 +
 +$$
 +GELU(x)=0.5x(1+ \frac {2}{ \sqrt {\pi} } \int_{0}^{ \frac {x}{ \sqrt {2}}} e ^ {-t^{2}}dt)
 +$$
  
 {{ :clase:iabd:pia:1eval:funciones_activacion_tipo_gelu.png?direct |}} {{ :clase:iabd:pia:1eval:funciones_activacion_tipo_gelu.png?direct |}}
Línea 187: Línea 235:
   *    * 
 ==== Swish ==== ==== Swish ====
-Se usa cuando ReLU pero es un poco más lenta pero es mejor+Se usa cuando ReLU pero es un poco más lenta pero es mejor
 + 
 +$$swish(x)=x \cdot sigmoid(x)=x \cdot \frac{1}{1+e^{-x}}=\frac{x}{1+e^{-x}}$$
  
 {{ :clase:iabd:pia:1eval:funciones_activacion_tipo_swish.png?direct |}} {{ :clase:iabd:pia:1eval:funciones_activacion_tipo_swish.png?direct |}}
Línea 198: Línea 248:
  
 <sxh python> <sxh python>
-model.add(Dense(3, input_dim=1,activation=tf.keras.activations.swish)) +model.add(Dense(3, activation=tf.keras.activations.swish)) 
-model.add(Dense(3, input_dim=1,activation="swish"))+model.add(Dense(3, activation="swish"))
 </sxh> </sxh>
  
 +  * [[https://www.tensorflow.org/api_docs/python/tf/keras/activations/swish|tf.keras.activations.swish(x)]]
   * [[https://towardsdatascience.com/activation-functions-you-might-have-missed-79d72fc080a5|Activation functions you might have missed]]   * [[https://towardsdatascience.com/activation-functions-you-might-have-missed-79d72fc080a5|Activation functions you might have missed]]
   * [[https://arxiv.org/pdf/1710.05941v1.pdf|Swish: A Self-Gated Activation Function]]: Paper original de Swish   * [[https://arxiv.org/pdf/1710.05941v1.pdf|Swish: A Self-Gated Activation Function]]: Paper original de Swish
 +
  
 ==== Mish ==== ==== Mish ====
-Se usa cuando ReLU pero es un poco más lenta pero es mejor. Es similar a Swish+Se usa cuando ReLU pero aunque es un poco más lenta es mejor. Es muy similar a Swish
  
-  [[https://www.tensorflow.org/addons/api_docs/python/tfa/activations/mish|tfa.activations.mish(x)]]+$$ 
 +mish(x)=x \cdot tanh(softplus(x)) 
 +$$ 
 + 
 +{{ :clase:iabd:pia:1eval:funciones_activacion_mish.png?direct |}} 
 + 
 +{{ :clase:iabd:pia:1eval:funciones_activacion_swish_vs_mish.png?direct |}} 
 + 
 +  * Uso en Keras 
 + 
 +<sxh python> 
 +model.add(Dense(3, activation=tf.keras.activations.swish)) 
 +model.add(Dense(3, activation="mish")) 
 +</sxh> 
 + 
 +  * [https://www.tensorflow.org/api_docs/python/tf/keras/activations/mish|tf.keras.activations.mish(x)]]
   * [[https://towardsdatascience.com/activation-functions-you-might-have-missed-79d72fc080a5|Activation functions you might have missed]]   * [[https://towardsdatascience.com/activation-functions-you-might-have-missed-79d72fc080a5|Activation functions you might have missed]]
   * [[https://arxiv.org/pdf/1908.08681.pdf|Mish: A Self Regularized Non-Monotonic Activation Function]]: Paper original de Mish   * [[https://arxiv.org/pdf/1908.08681.pdf|Mish: A Self Regularized Non-Monotonic Activation Function]]: Paper original de Mish
  
-=== Poetry === 
-Para usar Mish deberemos instalar [[https://www.tensorflow.org/addons/overview|TensorFlow Addons]].  
-Desde conda a veces falla la instalación así que lo recomendable es usar [[https://python-poetry.org/|Poetry]] 
  
-Para usar poetry debemos primero instalarlo en el sistema operativo mediante los comandos: 
-<sxh bash> 
-pip install --user poetry 
-poetry config virtualenvs.in-project true  
-</sxh> 
  
-Una vez instalado (se puede comprobar con ''poetry --version'') iremos a la carpeta donde tenemos nuestro programa en Python (o donde lo vamos tener) ejecutar:+===== Tiempo de cálculo  ===== 
 +Para cada problema puede que una función sea mejor que otra, es decir que cosiga entrenar en un menor número de épocas. Aun así veces no puede preocupar el tiempo de CPU/GPU que usa cada función de activación. 
 + 
 +En la siguiente gráfica se puede ver el tiempo de entrenamiento de una red neuronal con 14 capas 1521 neuronas usando cada una de las funciones de activación. 
 + 
 +{{:clase:iabd:pia:1eval:tiempos_red_neuronal.csv.scatter.png?direct|}} 
 + 
 +{{:clase:iabd:pia:1eval:tiempos_red_neuronal.csv.regresion.png?direct|}} 
  
-<sxh bash> 
-pip install --user poetry 
-poetry config virtualenvs.in-project true  
-</sxh> 
  
  
  
  
clase/iabd/pia/1eval/tema06-apendices.1642259334.txt.gz · Última modificación: 2022/01/15 16:08 por admin