19 de abril de 2020

Propagación en una red neuronal

Hola,
tras la reciente entrada sobre las capas de una red neuronal podemos ya aprender cómo se propaga la computación en la red, lo que la literatura se conoce como forward propagation. Para ello nada mejor que ver la red con salida binaria de la entrada anterior, con las neuronas numeradas:
Figura 7.2 de Krohn J (2019) Deep Learning Illustrated
Supongamos que las neuronas de input toman los siguientes valores reales, por ejemplo medidas físicas en un experimento:



Recordemos ahora que las neuronas de las capas ocultas son de tipo ReLU, que tienen la siguiente función de activación (alfa):



Ahora detallaré cómo calculamos las activaciones capa a capa, y por tanto, cómo se propaga la información en la red.

Empezaré por la neurona a1. Supongamos que sus dos pesos toman valores reales de -0.5 y 1.5 y su umbral de activación es 0.9:
z1 = -0.5 x 4.0 + 1.5 x 3.0 - 0.9  = -2 + 4.5 -  0.9 = 1.6
alfa1 = max(1.6 , 0) = 1.6

Sustituyendo los pesos y umbrales correspondientes, que son los valores que se optimizan en el periodo de entranamiento, podemos calcular de la misma manera la activación de a2 y a3. Así tendríamos ya la primera capa oculta completa y podríamos pasar a la siguiente, formada por las neuronas a4 y a5.

Finalmente llegamos a la neurona de output, que en la entrada anterior quedamos era de tipo sigmoidea. Ésta recibe las activaciones 2.5 y 2.0, con pesos respectivos de 1.0 y 0.5 y un umbral 5.5.

z(output) = 1.0 x 2.5 + 0.5 x 2.0 - 5.5 = -2.0

Ahora usaremos la función sigmoidea para calcular el estado (activación) de la neurona output:


En el contexto de un clasificador binario, para reconocer por ejemplo objetos de una cierta clase, la salida se interpreta como que la probabilidad de que la instancia (4.0, 3.0) sea de esa clase es 0.1192

Hasta pronto,
Bruno

Siguiente entrada: Entrenamiento de una red neuronal

18 de abril de 2020

Capas de una red neuronal

Hola,
ésta es la tercera entrada sobre redes neuronales profundas, donde hablaré de cómo se contruye una red por capas, o layers en inglés. La siguiente figura muestra una red con un total de 4 capas.
 
Figura 7.1 de Krohn J (2019) Deep Learning Illustrated
La capa 1 es la capa de input o entrada. En este ejemplo tiene solamente 2 neuronas, X1 y X2. Esta  capa debe adaptarse a la dimensionalidad y el tipo de los datos que vayamos a utilizar como entrada de la red. En el ejemplo la capa de entrada sería adecuada para datos con dos dimensiones. La capa de input es especial porque no tiene una función de activación, simplemente recibe los datos y los pasa a la siguiente capa.

La capa 2 es la primera capa oculta y recibe la salida de la primera capa. En este ejemplo es una capa densa o completamente conectada, dado que sus tres neuronas (a1, a2 y a3) reciben la salida de todas las neuronas de entrada. Puedes mirar aquí un ejemplo de red no densa. Las capas ocultas normalmente son de neuronas ReLU.

La capa 3 es la segunda capa oculta del ejemplo y de nuevo es una capa densa, en este caso con dos neuronas solamente.

La capa 4 es la capa de salida o output y emite la respuesta final de la red para un determinado input. En este ejemplo solamente hay una neurona de salida, que es lo adecuado para un clasificador binario, donde solo hay dos estados posibles. Para este caso usaríamos una neurona sigmoidea.

Si vuelves a la figura verás que hay una flecha horizontal de izquierda a derecha que simboliza el flujo de información a través de las capas. En las redes neuronales este flujo va de input a output y en la terminología en inglés se llama forward propagation.

Algunos problemas implican clasificar los datos o instancias en más de dos clases. Para ellos usaríamos una capa de salida con varias neuronas de tipo softmax,  como las 3 neuronas de salida de la siguiente figura. La capa softmax primero computa la activación de las 3 neuronas de salida y después aplica la función softmax para calcular cuál de los 3 estados o clases representa mejor una instancia, tal como se explica en https://github.com/the-deep-learners/deep-learning-illustrated/blob/master/notebooks/softmax_demo.ipynb :

Figura 7.4 de Krohn J (2019) Deep Learning Illustrated

Finalmente, hay redes neuronales que no clasifican las instancias en categorías discretas. En cambio, producen valores reales a partir del input. Este tipo de redes se llaman redes neuronales de regresión, y las veremos en otras entrada.

Hasta la siguiente,
Bruno

Siguiente entrada: Propagación en una red neuronal



17 de abril de 2020

sobre el origen sospechoso de SARS-CoV-2

Buenas,
interrumpiendo la serie de entradas sobre redes neuronales no he podido resistirme a pegar aquí esta historia, en inglés, sobre el origen del virus SARS-CoV-2, o nCOV2019 en este artículo: http://virological.org/t/tackling-rumors-of-a-suspicious-origin-of-ncov2019/384

El tema es oportuno para este blog, porque la principal figura es un alineamiento pareado al estilo de BLASTN donde se observan hasta 19 mutaciones, todas en las terceras posiciones de sus codones:





En el artículo original usan datos de gripe para datar esta serie de mutaciones, y les salen 1950 años,

hasta pronto,
Bruno

14 de abril de 2020

Tipos de neuronas en redes profundas

Hola,
en esta segunda entrada sobre redes profundas hablaré sobre las neuronas.

En este contexto, una neurona es una función de activación que recibe información (input) de otras neuronas y emite una salida que significa si se activa o no.

El primer modelo de neurona es el perceptrón de Frank Rosenblatt, que agrega sus entradas por medio de una suma ponderada y se activa si el total supera un cierto umbral. El siguiente ejemplo muestra un perceptrón con tres entradas binarias con pesos 3, 2 y 6 y umbral de activación 4:

Figura 6.5 de Krohn J (2019) Deep Learning Illustrated
Esta función de activación z podemos expresarla así, siendo b = -umbral (usando https://www.codecogs.com/latex/eqneditor.php):



Si la representamos gráficamente veremos que la activación de 0 a 1 es abrupta y por tanto parece el margen para cambiar los valores de los pesos (w) es muy pequeño:

Figura 6.8 de Krohn J (2019) Deep Learning Illustrated
Por esta razón se utilizan otros tipos de neuronas donde la función de activación es gradual.

La activación sigmoidea es:


donde



Esta activación tiene como ventajas que pequeños cambios en los parámetros w y b producen cambios graduales de z :
Figura 6.9 de Krohn J (2019) Deep Learning Illustrated
Valores extremos producen valores de z de 0 o de 1, como puedes comprobar en el siguiente cuaderno: https://github.com/the-deep-learners/deep-learning-illustrated/blob/master/notebooks/sigmoid_function.ipynb

Otra función de activación frecuente es la tangente hiperbólica (tanh), que produce valores de activación entre 1 y -1 y centrados en el 0, y se expresar así:



Finalmente tenemos la neurona ReLU, que representa el mejor compromiso entre tiempo de entrenamiento y capacidad de aprendizaje:




Figura 6.11 de Krohn J (2019) Deep Learning Illustrated

La elección del tipo de neurona es importante porque determina la capacidad de aprender de la red. En este contexto aprender equivale a determinar los pesos (w) y los umbrales (b) para obtener un  output esperado.

Hasta pronto,
Bruno

Siguiente entrada: Capas de una red neuronal

13 de abril de 2020

Redes neuronales profundas

Hola, escribo esto durante la cuarentena del COVID-19, el lunes que muchos trabajadores vuelven al trabajo en España entre dudas por la seguridad pero acuciados por la economía.

En esta entrada y posiblemente otras posteriores me gustaría visitar el aprendizaje automático por medio de redes neuronales profundas, aquellas que tienen al menos 3 capas ocultas.

Es un tema apasionante y que ha evolucionado sin pausa en los últimos 20 años. Sin embargo, aunque diseñar y entrenar redes es complejo, están de moda y no es difícil leer por ahí que de la mano del aprendizaje profundo (Deep Learning, DL) podremos resolver cualquier problema que nos propongamos. Yo no soy experto, pero llevo leyendo sobre redes neuronales desde que escuché hablar de ellas a mi profesor de la Complutense Rafael Lahoz Beltrá y más tarde en la asignatura de aprendizaje automático de la UNED. Además, he podido verlas en acción por sus aplicaciones en bioinformática estructural.

Utilizaré figuras y contenidos que he ido leyendo estos días en el libro Deep Learning Illustrated (2019), cuyo autor principal es John Krohn:
cover.jpeg
https://www.deeplearningillustrated.com

En este libro la ilustradora Aglaé Bassens pone cara a los protagonistas de la historia, como este Santiago Ramón y Cajal y sus dibujos de neuronas en cortes de tejidos:
https://www.deeplearningillustrated.com
En realidad las redes neuronales son estructuras de datos hechas a semejanza de las observaciones de Cajal y otros neurocientíficos que estudiaron cómo las neuronas se tocan entre sí y reciben información de múltiples axones. Aunque no sepamos bien cómo la corteza cerebral procesa la información, su organización en capas de neuronas ha servido de base a la creación de redes neuronales artificiales.

La red neuronal que más he utilizado en mi trabajo como biólogo computacional es PSIPRED, que sirve para la predicción de estructura secundaria de proteínas a partir de información evolutiva:

Tomada de Jones DT (1999) J.Mol.Biol., 292(2):195-202

Cómo se ve en la figura, PSIPRED está compuesta por dos redes consecutivas, cada una con 3 capas, la de input, la oculta y la de output. De acuerdo con la definición de Krohn, ninguna de estas redes sería profunda, pues no cumplen el requisito de tener al menos 3 capas ocultas. Éste es el principal desarrollo desde 1999, ahora las redes son mas profundas y eso ha permitido en muchos casos tratar relaciones no lineales y abstractas:

Arquitectura de una red neuronal profunda, figura 4.2 de Krohn J (2019) Deep Learning Illustrated
El próximo día más, cuidáos,
Bruno

Siguiente entrada: Tipos de neuronas en redes profundas