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/22 19:47]
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 134: 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 173: 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 191: 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 202: 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 aunque es un poco más lenta es mejor. Es muy similar a Swish Se usa cuando ReLU pero aunque es un poco más lenta es mejor. Es muy similar a Swish
 +
 +$$
 +mish(x)=x \cdot tanh(softplus(x))
 +$$
  
 {{ :clase:iabd:pia:1eval:funciones_activacion_mish.png?direct |}} {{ :clase:iabd:pia:1eval:funciones_activacion_mish.png?direct |}}
Línea 216: Línea 268:
 {{ :clase:iabd:pia:1eval:funciones_activacion_swish_vs_mish.png?direct |}} {{ :clase:iabd:pia:1eval:funciones_activacion_swish_vs_mish.png?direct |}}
  
-  * [[https://www.tensorflow.org/addons/api_docs/python/tfa/activations/mish|tfa.activations.mish(x)]]+  * 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) y ejecutaremos lo siguiente:+===== 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.
  
-<sxh bash> +En la siguiente gráfica se puede ver el tiempo de entrenamiento de una red neuronal con 14 capas y 1521 neuronas usando cada una de las funciones de activación.
-poetry init +
-poetry add libclang = "<12.0.0" numpy pandas matplotlib seaborn scikit-learn tensorflow tabulate PyMySQL SQLAlchemy ipympl keras-tuner tensorflow-addons +
-poetry install +
-</sxh>+
  
-Para ejecutar el código hay 2 formas:+{{:clase:iabd:pia:1eval:tiempos_red_neuronal.csv.scatter.png?direct|}}
  
-  * Desde la línea de comandos: +{{:clase:iabd:pia:1eval:tiempos_red_neuronal.csv.regresion.png?direct|}}
-<sxh python> +
-poetry run python my_script.py +
-</sxh>+
  
-  * Desde VS Code seleccionar en los entornos de ejecución la carpeta ''.venv'' del propio proyecto: 
-{{ :clase:iabd:pia:1eval:vs-code-poetry.png?direct |}} 
  
-  * Si queremos usar el entorno de poetry pero no está en nuestra carpeta se puede indicar a VS Code cual es el ejecutable de python que debe usar siempre para ello hay que crear en la carpeta de nuestro proyecto el fichero ''./.vscode/settings.json'' 
  
-<sxh base> 
-{ 
-    "python.pythonPath": "/home/logongas/python_default_env/.venv/bin/python" 
-} 
-</sxh> 
  
  
  
clase/iabd/pia/1eval/tema06-apendices.1642877264.txt.gz · Última modificación: 2022/01/22 19:47 por admin