Mostrando entradas con la etiqueta aprendizaje automático. Mostrar todas las entradas
Mostrando entradas con la etiqueta aprendizaje automático. Mostrar todas las entradas

30 de noviembre de 2020

AlphaFold resuelve el plegamiento de proteínas (en CASP14)

Hola, 

estos días está transcurriendo CASP14, la edición 14 del certámen de predicción  de estructura de proteínas. La última vez que hablamos de CASP en este blog fue en esta entrada del año pasado. Por recordar un poco, en CASP participan grupos de investigación de todo el mundo que tratan de modelar un conjunto de secuencias de proteínas cuyas estructuras se han resuelto experimentalmente, pero que solamente se publican despúes de la temporada de predicción. Por tanto, los grupos y su algoritmos trabajan relativamente a ciegas en esas predicciones.

Digo relativamente porque en realidad se apoyan en la creciente colección de estructuras conocidas del PDB, del orden 10E5,  y en las millones de secuencias de proteínas conocidas (del orden 10E8). Por esa razón unas secuencias son más fáciles, porque se parecen a otras conocidas, y otras más difíciles, porque no se parecen demasiado a nada conocido.

En la edición CASP14 había un total de 92 secuencias de aminoácidos, cada una correspondiente a un dominio. La siguiente figura, obtenida de https://predictioncenter.org/casp14/zscores_final.cgi resume los resultados,  mostrando que los dos mejores grupos de la última década (Baker y Zhang) han sido ampliamente superados por AlphaFold2 (columna de la izquierda, del que ya habíamos hablado aquí):

 


En definitiva, la combinación de estrategias de aprendizaje automático de AlphaFold2, descritas en https://deepmind.com/blog/article/alphafold-a-solution-to-a-50-year-old-grand-challenge-in-biology, han superado con mucho a todos los expertos que más saben de este problema tan difícil. 

Qué opinan los expertos? Aquí tenéis por ejemplo a Torsten Schwede , Mohammed AlQuraishi o a Alfonso Valencia

Supongo que no estará de más esperar a CASP15 para comprobar que este progreso se mantiene en el tiempo, pero por ahora parece que lo han resuelto. Solamente nos queda exigir a DeepMind, la matriz de AlphaFold2, que libere su predictor para fines académicos y de esa manera devuelvan a la comunidad lo que de ella han extraído en estos últimos años.

Un saludo,

Bruno

PD Nota importante: como recuerda Alfonso Valencia en https://twitter.com/Alfons_Valencia/status/1333682759366303745, no es lo mismo predecir la estructura que la reacción de plegamiento


30 de mayo de 2020

Sobreentrenamiento de una red neuronal

Hola,
en la última entrada repasé como aprende una red neuronal y cómo se calcula el coste en un conjunto de entrenamiento. Hoy me detengo en el problema del sobreentrenamiento (overfitting en la literatura), para lo cual necesitamos un conjunto de datos independiente, que llamamos conjunto de validación.

Primero definiré el sobreentrenamiento con las palabras de J Krohn: "es la situación en la que el coste de entrenamiento desciende a la vez que aumenta en el conjunto de validación". El objetivo del entrenamiento debe ser obtener un modelo general, y el sobreentrenamiento es por tanto un obstáculo, porque al sobreentrenar lo que ocurre es que el modelo se particulariza para tu conjunto de entrenamiento.

Figura 9.5 de Krohn J (2019) Deep Learning Illustrated

En la figura se ilustran 4 modelos ajustados a los mismos datos. Arriba a la izquierda un modelo como un solo parámetro, con un ajuste muy pobre. A su derecha un modelo parabólico con con dos parámetros se ajusta bastante bien. Abajo se muestran un modelo multiparamétrico que sobreajustan los datos y que no generaliza bien cuando se agregan nuevos datos (abajo derecho). El sobreentrenamiento es un problema de sobreajuste.

En su libro, J Krohn presenta ideas para limitar el sobreentrenamiento. En primer lugar, habla del número de épocas que debemos entrenar una red:
  • Si el coste de entrenamiento en un conjunto de datos de validación alcanza el mínimo en la última época es buena idea agregar más épocas al entrenamiento.
  • Si el coste empieza a aumentar a partir de una época de entrenamiento, es normalmente un indicio de sobreentrenamiento
En segundo lugar, describe la técnica de eliminación neuronas (dropout) al azar en capas ocultas durante el proceso de entrenamiento:

Figura 9.6 de Krohn J (2019) Deep Learning Illustrated

El próximo día programaremos las primeras redes,
Bruno

3 de mayo de 2020

Entrenamiento de una red neuronal

Hola,
hoy voy a hablar sobre el entrenamiento de una red neuronal, que es el proceso por el que  presentamos a la red un conjunto de ejemplos de los que sabemos cuál debería ser la respuesta de la red. El ejemplo de la figura es una imagen de 28x28 píxeles en escala de grises que representa el número 3 y pertenece al conjunto MNIST de números manuscritos.
Figura 5.2 de Krohn J (2019) Deep Learning Illustrated

El proceso de entrenamiento consiste en presentar a la red el conjunto de entrenamiento varias veces seguidas (épocas en la jerga) con el fin de que vaya aprendiendo. Al final de cada época podemos calcular el error que comete la red al clasificar las instancias presentadas, que se calcula comparando las salidas obtenidas con las esperadas . El objetivo del entrenamiento es minimizar el error. Por tanto, deberemos definir una función de coste con el objeto de optimizarla frente a un conjunto de entrenamiento lo más grande y realista posible.

La función coste (loss function en la literatura) se calculaba inicialmente como el coste cuadrático promedio. El valor obtenido es siempre positivo y penaliza más las grandes diferencias que las pequeñas. Es el RMSD que se emplea por ejemplo para comparar estructuras de proteínas similares. Sin embargo, tiene el inconveniente de ser poco sensible a cambios en los pesos de las neuronas cerca de sus valores extremos, y por tanto, ralentiza el aprendizaje. Por esa razón se sustituye habitualmente por una función basada en logaritmos de coste entrópico, tomada de la teoría de información:



El último paso de una época de aprendizaje es la retro-propagación, es decir, la optimización de los pesos y umbrales de activación de las neuronas para minimizar el error. Para ello se emplea el algoritmo clásico del gradiente descendiente capa a capa, en sentido contrario a la propagación, empezando por la capa inmediatamente anterior a la capa de salida. El proceso completo se resume en el siguiente diagrama de flujo, donde se observa que los datos de entrenamiento se reparten en lotes (batches):

Figura 8.6 de Krohn J (2019) Deep Learning Illustrated
Dos de los parámetros más importantes durante el aprendizaje son:

1) la tasa de aprendizaje , que es la pendiente que aplica el algoritmo del gradiente descendiente para descender por el gradiente de coste. J Krohn recomienda valores de 0.01 u 0.001 para empezar.

2) El tamaño de los lotes, que nos permitirá entrenar con conjuntos de datos más grandes que la RAM de nuestro sistema de cálculo.

Al comparar los costes entre épocas es posible calcular la velocidad de aprendizaje. La siguiente figura muestra que la velocidad de aprendizaje es diferente para las diferentes capas de una red profunda. En concreto, las capas aprenden más lentamente cuánto más lejos de la capa de salida:

Figura 8.8 de Krohn J (2019) Deep Learning Illustrated

Esta es la razón más importante para restringir el número de capas ocultas de una red profunda. Hasta la próxima,
Bruno

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