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

10 de marzo de 2020

Introducción a la ciencia de datos

Hola,
en plena vorágine del coronavirus toca hablar del libro Introduction to Data Science, al que podéis acceder en https://rafalab.github.io/dsbook



El libro lo escriben Rafael Irizarry y más de 20 colaboradores. Rafa fue uno de los fundadores de Bioconductor, por lo que no debería sorprender que su lenguaje preferido para manipular y analizar datos sea R.

El libro se organiza en estas secciones:

El libro se puede descargar en formato PDF o comprar en papel, pero lo más interesante es que todo el texto y el código fuente está disponible en formato R markdown en https://github.com/rafalab/dsbook . De esta manera es posible reproducir todos los análisis del libro dentro de Rstudio.

Rafa está ahora tratando de traducir al español. Puedes ayudar con los términos que se puedan traducir contribuyendo al documento  https://github.com/rafalab/dslibro/blob/master/como-se-dice.md

Termino diciendo que podéis estar al tanto de actualizaciones en la cuenta de twitter https://twitter.com/rafalab

Hasta pronto,
Bruno

24 de febrero de 2020

Pon tu conocimiento de plantas al servicio de UniProt

Hola,
esta mañana escuché a Michele Magrane explicar cómo funciona el proceso de curación de literatura en UniProt, la colección de proteínas más importante del mundo, que desarrollan entre el EBI, PIR y SIB. Por si no lo sabéis, la curación es el proceso por el que personas expertas extraen información y evidencias experimentales de artículos para agregarla de manera trazable a secuencias de proteínas.

Tras explicarnos que el núcleo (SwissProt) apenas pasa del medio millón de secuencias y que la parte automatizada se acerca a los 180 millones, nos dijo que creen que el proceso de curación es escalable, como describen en este artículo, dado que solamente un porcentaje muy pequeño de los artículos que se publican (3%) les sirven para anotar sus proteínas.

En cuanto a los plantas, mencionó que fundamentalmente curan artículos de Arabidopsis thaliana y Oryza sativa, por este orden. 

Felizmente es posible sugerir artículos para proteínas de UniProt, y de esa manera contribuir a su anotación y curación por expertos. Para ello solamente necesitas un identificador ORCID y un artículo publicado que hayas leído y que contribuya a describir la proteína en cuestión. En la figura verás el enlace "Add a publication" arriba a la derecha:

https://www.uniprot.org/uniprot/Q5Y386/protvista

Manos a la obra,
Bruno

6 de febrero de 2020

Valida con Travis tu código en un repositorio GitHub

Hola,
tras escuchar un par de charlas en la London Perl Conference 2019 (vídeos aquí) tenía pendiente agregar una validación por integración continua a uno de nuestros repositorios en GitHub. Opté por Travis, aunque otra buena opción si empiezas de cero es https://about.gitlab.com 
https://travis-ci.org



Para qué sirve esto? Pues para no romper nada en bases de código que ya tienen un cierto tamaño cuando haces cambios a lo largo del tiempo. En mi caso, el repositorio https://github.com/eead-csic-compbio/get_homologues tiene más de 20K líneas de código y acumula actualizaciones (commits) desde noviembre de 2016. Al vincular este repositorio a Travis (https://travis-ci.com/eead-csic-compbio/get_homologues) cada vez que hago un nuevo commit/push se lanza una máquina virtual que hace una batería de tests y me informa si va todo bien o si algo se ha roto.

Es sencillo, debes seguir estos pasos:

  1. Vincular tu repositorio GitHub en https://travis-ci.com con el mismo usuario que usas en GitHub.
  2. Agrega al repositorio un fichero .travis.yml con instrucciones para que Travis sepa como instalar correctamente el código del repositorio y sus dependencias. Puedes comprobar mi ejemplo .travis.yml , adecuado para un proyecto en Perl. Verás que las dependencias de Perl están en el fichero cpanfile. Hay documentación para otrs lenguajes, por ejemplo python .
  3. En tu repositorio preparar una batería de tests o pruebas para comprobar que todo funciona cómo esperas. Por defecto Travis hace $ make test, por tanto lo más fácil es crear un fichero Makefile con un objetivo test incluído. Ejemplo: Makefile
  4.  En el fichero markdwon README.md de tu repositorio puedes agregar la siguiente línea, adaptada a tu proyecto, para tener el certificado actualizado de que el repositorio pasa los tests en su estado actual:
    [![Build Status](https://travis-ci.com/eead-csic-compbio/get_homologues.svg?branch=master)](https://travis-ci.com/eead-csic-compbio/get_homologues)
Hasta pronto, Bruno

5 de febrero de 2020

Recursos y presentaciones del NCBI en PAG2020

Hola,
para empezar el año la gente genómica a menudo se cita en una de las conferencias más importantes del año, PAG . Allí se juntan los consorcios que producen los genomas último modelo de animales y plantas, las empresas que fabrican los instrumentos y reactivos, y los grupos que desarrollan los algoritmos y herramientas que lo sostienen todo, como el EBI o el NCBI.

Precisamente de éstos últimos hablo hoy, para compartir con vosotros los recursos y presentaciones que este año hicieron en PAG, entre los que destacaría:
https://github.com/NCBI-Hackathons/TheHumanPangenome

Que aproveche y hasta pronto,
Bruno