Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa Próxima revisión Ambos lados, revisión siguiente | ||
clase:iabd:pia:1eval:tema06-apendices [2021/12/26 20:56] admin [Tipos de funciones de activación en capas ocultas] |
clase:iabd:pia:1eval:tema06-apendices [2023/01/29 17:57] admin |
||
---|---|---|---|
Línea 41: | Línea 41: | ||
{{ : | {{ : | ||
+ | |||
+ | 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 | ||
+ | |||
+ | {{ : | ||
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{ | ||
+ | |||
+ | |||
+ | p=\frac{ | ||
+ | p=\frac{ | ||
+ | $$ | ||
+ | |||
+ | Que es exactamente la función sigmoide | ||
+ | |||
+ | * Más información | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
==== 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 " | GELU es de la últimas funciones de activación " | ||
+ | |||
+ | $$ | ||
+ | GELU(x)=0.5x(1+ \frac {2}{ \sqrt {\pi} } \int_{0}^{ \frac {x}{ \sqrt {2}}} e ^ {-t^{2}}dt) | ||
+ | $$ | ||
{{ : | {{ : | ||
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}}$$ | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | * Uso en Keras | ||
+ | |||
+ | <sxh python> | ||
+ | model.add(Dense(3, | ||
+ | model.add(Dense(3, | ||
+ | </ | ||
+ | |||
+ | * [[https:// | ||
* [[https:// | * [[https:// | ||
* [[https:// | * [[https:// | ||
+ | |||
==== 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 |
+ | $$ | ||
+ | mish(x)=x \cdot tanh(softplus(x)) | ||
+ | $$ | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | * [[https:// | ||
* [[https:// | * [[https:// | ||
* [[https:// | * [[https:// | ||
+ | |||
+ | === Poetry === | ||
+ | Para usar Mish deberemos instalar [[https:// | ||
+ | Desde conda a veces falla la instalación así que lo recomendable es usar [[https:// | ||
+ | |||
+ | 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 | ||
+ | </ | ||
+ | |||
+ | Una vez instalado (se puede comprobar con '' | ||
+ | |||
+ | <sxh bash> | ||
+ | poetry init | ||
+ | poetry add libclang = "< | ||
+ | poetry install | ||
+ | </ | ||
+ | |||
+ | <note important> | ||
+ | Si al hacer el '' | ||
+ | </ | ||
+ | |||
+ | Para ejecutar el código hay 2 formas: | ||
+ | |||
+ | * Desde la línea de comandos: | ||
+ | <sxh python> | ||
+ | poetry run python my_script.py | ||
+ | </ | ||
+ | |||
+ | * Desde VS Code seleccionar en los entornos de ejecución la carpeta '' | ||
+ | {{ : | ||
+ | |||
+ | * 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 '' | ||
+ | |||
+ | <sxh base> | ||
+ | { | ||
+ | " | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ===== 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í a 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 y 1521 neuronas usando cada una de las funciones de activación. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ |