#+TITLE: Machine Learning para corrección de errores en datos de secuenciación de ADN
#+AUTHOR: Amin Kasrou Aouam
#+DATE: Julio de 2021
#+PANDOC_OPTIONS: template:assets/babathesis.latex
#+PANDOC_OPTIONS: toc:t
#+PANDOC_OPTIONS: bibliography:assets/bibliography.bib
#+PANDOC_OPTIONS: citeproc:t
#+PANDOC_OPTIONS: csl:assets/ieee.csl
#+PANDOC_OPTIONS: pdf-engine:xelatex
#+PANDOC_OPTIONS: top-level-division:chapter
#+PANDOC_OPTIONS: mathjax:t
#+PANDOC_OPTIONS: metadata-file:assets/abstract.yaml
#+PANDOC_METADATA: link-citations:t
* Introducción

El ácido desoxirribonucleico (ADN) y el ácido ribonucleico (ARN) son los repositorios moleculares de la información genética.  La estructura de cada proteína, y en última instancia de cada biomolécula y componente celular, es producto de la información programada en la secuencia de nucleótidos de una célula. La capacidad de almacenar y transmitir la información genética de una generación a otra es una condición fundamental para la vida. Un segmento de una molécula de ADN que contiene la información necesaria para la síntesis de un producto biológico funcional, ya sea una proteína o un ARN, se denomina gen.  El almacenamiento y la transmisión de información biológica son las únicas funciones conocidas del ADN cite:book:lehninger.

#+CAPTION: Dogma central de la biología molecular
#+ATTR_HTML: :height 25% :width 80%
#+NAME: fig:central-dogma
[[./assets/figures/central-dogma.png]]

Tanto el ADN como el ARN son ácidos nucleicos compuestos por unidades monoméricas llamadas nucleótidos, que a su vez contienen una base nitrogenada. El ADN está compuesto por las bases adenina (A), guanina (G) citosina (C) y timina (T), mientras que el ARN contiene uracilo (U) en lugar de timina (T) cite:book:211898.

Hay muy pocos principios firmes en biología. A menudo se dice, de una forma u otra, que la única regla real es que no hay reglas, es decir, que se pueden encontrar excepciones a cada principio fundamental si se busca lo suficiente. El principio conocido como el "Dogma Central de la Biología Molecular" parece ser una excepción a esta regla de excepción ubicua cite:CRICK1970. El Dogma Central establece que, una vez que la información ha pasado a proteína, no puede volver a salir; \ie la transferencia de información de ácido nucleico a ácido nucleico, o de ácido nucleico a proteína puede ser posible, pero la transferencia de proteína a proteína, o de proteína a ácido nucleico es imposible cite:crick1958protein.

Las proteínas se producen mediante el proceso de traducción, que tiene lugar en los ribosomas y está dirigido por el ARN mensajero (ARNm). El mensaje genético codificado en el ADN se transcribe primero en ARNm, y la secuencia de nucleótidos del ARNm se traduce en la secuencia de aminoácidos de la proteína. El ARNm que especifica la secuencia de aminoácidos de la proteína se lee en codones, que son conjuntos de tres nucleótidos que especifican aminoácidos individuales cite:book:211898. El código genético se muestra a continuación: 

#+CAPTION: El código genético
#+NAME: fig:genetic-code
[[./assets/figures/genetic-code.png]]

Por lo tanto, si elucidamos la información contenida en el ADN, obtenemos información sobre las biomoléculas que realizan las diferentes tareas fisiológicas y metabólicas (e.g. ARN, proteínas).

** Secuenciación de ADN

La secuenciación de ADN es el proceso mediante el cual se determina el orden de los nucleótidos en una secuencia de ADN. En los años 70, Sanger \etal desarrollaron métodos para secuenciar el ADN mediante técnicas de terminación de cadena cite:Sanger5463. Este avance revolucionó la biología, proporcionando las herramientas necesarias para descifrar genes, y posteriormente, genomas completos. La demanda creciente de un mayor rendimiento llevó a la automatización y paralelización de las tareas de secuenciación. Gracias a estos avances, la técnica de Sanger permitió determinar la primera secuencia del genoma humano en 2004 (Proyecto Genoma Humano). Cabe destacar que se estima que la secuencia final cubría aproximadamente el 92% del genoma debido a las limitaciones de la propia técnica de secuenciación y ensamblado cite:InternationalHumanGenomeSequencingConsortium2004.

Sin embargo, el Proyecto Genoma Humano requerió una gran cantidad de tiempo y recursos, y era evidente que se necesitaban tecnologías más rápidas, de mayor rendimiento y más baratas. Por esta razón, en el mismo año (2004) el /National Human Genome Research Institute/ (NHGRI) puso en marcha un programa de financiación con el objetivo de reducir el coste de la secuenciación del genoma humano a 1000 dólares en diez años cite:Schloss2008.  Esto estimuló el desarrollo y la comercialización de las tecnologías de secuenciación de alto rendimiento o /Next-Generation Sequencing/ (NGS), en contraposición con el método automatizado de Sanger, que se considera una tecnología de primera generación.

** Técnicas de secuenciación de alto rendimiento

Estos nuevos métodos de secuenciación proporcionan tres mejoras importantes: en primer lugar, no requieren la clonación bacteriana de los fragmentos de ADN, sino que se basan en la preparación de bibliotecas de moléculas en un sistema sin células. En segundo lugar, en lugar de cientos, se producen en paralelo de miles a muchos millones de reacciones de secuenciación. Finalmente, estos resultados de secuenciación se detectan directamente sin necesidad de una técnina experimental adicional llamada electroforesis cite:vanDijk2014.

Actualmente, se encuentran en desarrollo las tecnologías de tercera generación de secuenciación (/Third-Generation Sequencing/). Existe un debate considerable sobre la diferencia entre la segunda y tercera generación de secuenciación; la secuenciación en tiempo real y la divergencia simple con respecto a las tecnologías anteriores deberían ser las características definitorias de la tercera generación. En este trabajo se considera que las tecnologías de tercera generación son aquellas capaces de secuenciar moléculas individuales, negando el requisito de amplificación del ADN que comparten todas las tecnologías anteriores cite:HEATHER20161.

Estas nuevas técnicas han demostrado su valor con avances que han permitido secuenciar el genoma humano completo, incluyendo las secuencias repetitivas (de telómero a telómero) que no pudieron dilucidarse en el Proyecto Genoma Humano. Combinando los aspectos complementarios de las tecnologías Oxford Nanopore y PacBio HiFi, 2111 nuevos genes, de los cuales 140 son codificantes, fueron descubiertos en el genoma humano en el año 2021 cite:Nurk2021.05.26.445798.

** Limitaciones de los métodos paralelos

Aunque las tecnologías de secuenciación paralelas (NGS) han revolucionado el estudio de la variedad genómica entre especies y organismos individuales, la mayoría tiene una capacidad limitada para detectar mutaciones con baja frecuencia. Este tipo de análisis es esencial para detectar mutaciones en oncogenes (genes responsables de la transformación de una célula normal a maligna), pero se ve restringido por una tasa de errores de secuenciación no despreciables, tal y como ilustra la siguiente tabla:

#+CAPTION: Longitudes de lectura y tasas de error de secuenciación aproximados de diferentes tecnologías de secuenciación de alto rendimiento a mediados de 2014 cite:doi:10.1146/annurev-genom-090413-025358
#+NAME: tab:NGS-error-rates
| Tecnología  | Longitud de lectura (bp) | Tasa de error (%) |
|-------------+--------------------------+-------------------|
| Sanger      | ∼1,000                   |             0.1–1 |
| Illumina    | 2×125                    |              ≥0.1 |
| SOLiD       | 35-50                    |             >0.06 |
| 454         | 400                      |                 1 |
| SMRT        | ~10,000                  |                16 |
| Ion Torrent | 400                      |                 1 |

Para contrarrestar este obstáculo, varias técnicas mitigatorias se han puesto en marcha. Una de las más populares es el uso de una secuencia de consenso, que es un perfil estadístico a partir de un alineamiento múltiple de secuencias. Es una forma básica de descubrimiento de patrones, en la que un alineamiento múltiple de secuencias más amplio se resume en las características que se conservan. Este tipo de análisis permite determinar la probabilidad de cada base en cada posición de una secuencia cite:10.1093/bioinformatics/btg109.

#+CAPTION: Alineamiento múltiple de secuencias. La secuencia de consenso aparece en la parte inferior y está formada por los nucleótidos con más ocurrencias en cada posición cite:Nagar2013
#+NAME: fig:consensus-sequence
[[./assets/figures/consensus-sequence.png]]

Todas las técnicas de consenso monocatenarias reducen los errores en dos o tres órdenes de magnitud, lo que es mucho mayor que cualquier enfoque computacional o bioquímico anterior, y permiten identificar con precisión variantes raras por debajo del 0.1% de abundancia. Sin embargo, persisten algunos errores. Los errores que se producen durante la primera ronda de amplificación pueden propagarse a todas las demás copias escapando la corrección cite:Salk2018.

Este problema se agrava en el análisis de repertorios inmunológicos, debido a nuestra limitada capacidad para distinguir entre la verdadera diversidad de los receptores de los linfocitos T (TCR) e inmunoglobulinas (IG) de los errores de PCR y secuenciación que son inherentes al análisis del repertorio. Las variantes resultantes de estos procesos biológicos pueden tener concentraciones drásticamente diferentes, lo que hace que aquellas con menor frecuencia sean indistinguibles de errores de secuenciación cite:Shugay2014.

** Variedad genética en el sistema inmunitario

La capacidad del sistema inmunitario adaptativo para responder a cualquiera de los numerosos antígenos extraños potenciales a los que puede estar expuesta una persona depende de los receptores altamente polimórficos expresados por las células B (inmunoglobulinas o anticuerpos) y las células T (receptores de células T [TCR]). La especificidad de las células T viene determinada principalmente por la secuencia de aminoácidos codificada en los bucles de la tercera región determinante de la complementariedad (CDR3) cite:pmid19706884.

En el timo, durante el desarrollo de los linfocitos T, se selecciona al azar un segmento génico de cada familia (V, D y J) mediante un proceso conocido como recombinación somática o recombinación V(D)J, de modo que se eliminan del genoma del linfocito los no seleccionados y los segmentos V(D)J escogidos quedan contiguos, determinando la secuencia de las subunidades del TCR y, por tanto, la especificidad de antígeno de la célula T. La selección aleatoria de segmentos junto con la introducción o pérdida de nucleótidos en sus uniones son los responsables directos de la variabilidad de TCR, cuya estimación es del orden de $10^{15}$ posibles especies distintas o clonotipos cite:BenítezCantos-Master.

#+CAPTION: Generación de diversidad en el TCR \alpha \beta. Durante el desarrollo de los linfocitos T se reordenan los segmentos génicos V (rosa), D (naranja) y J (verde) a través del proceso de recombinación V(D)J. Durante este proceso se pueden añadir o eliminar nucleótidos en la unión de los segmentos (rojo), contribuyendo a la diversidad de la secuencia. Se señalan las 3 regiones CDR, estando CDR3 localizada en la unión V(D)J cite:BenítezCantos-Master
#+ATTR_HTML: :height 30% :width 90%
#+LABEL: fig:vdj-recombination
[[./assets/figures/VDJ.png]]

Debido a la diversidad generada en esta recombinación aleatoria, las moléculas de anticuerpos y TCR muestran una enorme variabilidad de secuencias CDR3. De hecho, el número de secuencias de aminoácidos que están presentes en las regiones CDR3 de las moléculas de anticuerpos y TCR es mucho mayor que las que pueden ser codificadas por segmentos de genes de la línea germinal cite:abbas_lichtman_pillai_2017.

Frente a la evidencia recaudada, diversos métodos computacionales basados en la inteligencia artificial se han desarrollado para aliviar estos impedimentos e intentar discernir la verdadera variabilidad de secuencia de los errores de secuenciación inherentes a las tecnologías actuales.

** Inteligencia artificial

La inteligencia artificial (IA) es uno de los campos más nuevos de la ciencia y la ingeniería. La investigación empezó después de la Segunda Guerra Mundial, y el término se acuñó en 1956, en la conferencia de Dartmouth College. La definición de inteligencia artificial sigue generando debate a día de hoy. Por ende acotaremos la definición de inteligencia artificial al estudio de los agentes inteligentes cite:book:771224.

Un agente es cualquier elemento capaz de percibir su entorno mediante sensores y actuar en consecuencia en ese entorno mediante actuadores. Un agente inteligente es aquel que actúa para conseguir el mejor resultado o, cuando hay incertidumbre, el mejor resultado esperado. En términos matemáticos, formulamos que el comportamiento de un agente se describe por la función de agente que asigna a cualquier entrada una acción cite:book:771224.

*** Historia inicial de la inteligencia artificial

Los comienzos de la inteligencia artificial (1956-1969) se caracterizan por un entusiasmo y optimismo generalizado. Los rápidos avances en /hardware/, junto con el desarrollo de sistemas que redefinían las posibilidades de los ordenadores excedían las expectativas de los especialistas cite:book:771224. La atmósfera frenética, durante este periodo, se puede recapitular a partir de de la propuesta de la conferencia de Dartmouth:

#+BEGIN_QUOTE
El estudio se basa en la conjetura de que cada aspecto del aprendizaje o cualquier otro rasgo de la inteligencia puede ser, en principio, precisamente descifrado. Se intentará encontrar un método para hacer que las máquinas utilicen el lenguaje, formen abstracciones y conceptos, resuelvan problemas que ahora están reservados a los humanos, y que se mejoren a sí mismas cite:McCarthy_Minsky_Rochester_Shannon_2006.

#+END_QUOTE

A finales de los años 1960, los investigadores se toparon con numerosos obstáculos al tratar de usar sus sistemas para resolver problemas más complejos. Debido a una carencia de resultados decisivos, la financiación en este ámbito académico fue cancelada cite:book:771224.

Los sistemas de conocimiento (década de 1970) aprovecharon conocimiento específico de una rama para escalar los sistemas inteligentes, intercambiando sistemas generales con bajo rendimiento por sistemas específicos al problema con mejor rendimiento. Estos sistemas novedosos se empezaron a comercializar en los años 80, creando la industria de la IA cite:book:771224.
** Redes neuronales artificiales

Una red neuronal artificial es un modelo de computación bioinspirado, formado por capas de neuronas artificiales. Comenzaremos definiendo el concepto de neurona artificial, con el fin de introducir la noción de red neuronal artificial de forma clara y concisa.

Una neurona artificial es un modelo de una neurona biológica, donde cada neurona recibe un conjunto de señales y, al dispararse, transmite una señal a las neuronas interconectadas. Las entradas (/inputs/) se inhiben o amplifican mediante unos pesos numéricos asociados a cada conexión. El disparo, \ie activación, se controla a través de la función de activación. La neurona recoge todas las señales entrantes y calcula una señal de entrada neta en función de los pesos respectivos. La señal de entrada neta sirve de entrada a la función de activación que calcula la señal de salida cite:book:80129.

#+CAPTION: Diagrama de una neurona artificial cite:book:80129
#+NAME: fig:artificial-neuron
[[./assets/figures/artificial-neuron.png]]

El proceso de activación se puede expresar como un modelo matemático:

\begin{equation}
y= f \left(\sum\limits_{i=0}^{n} w_{i}x_{i} - T \right)
\end{equation}

donde $y$ es la salida del nodo, $f$ es la función de activación, $w_i$ es el peso de la entrada $x_{i}$ , y $T$ es el valor del umbral cite:Zou2009.

Una red neuronal artificial (ANN, por sus siglas en inglés) es una red de capas de neuronas artificiales. Una ANN está formada por una capa de entrada, capas ocultas y una capa de salida. Las neuronas de una capa están conectadas, total o parcialmente, a las neuronas de la capa siguiente. También son posibles las conexiones de retroalimentación con las capas anteriores cite:book:80129. La estructura típica de una ANN es la siguiente:

#+CAPTION: Estructura de una red neuronal artificial cite:book:80129
#+ATTR_HTML: :height 30% :width 50%
#+NAME: fig:neural-network
[[./assets/figures/neural-network.png]]

Los principios básicos de las redes neuronales artificiales fueron formulados por primera vez en 1943, y el perceptrón, que históricamente es posiblemente la primera neurona artificial, se propuso en 1958 cite:book:2610592. Sin embargo, estos modelos no fueron populares hasta mediados de la década de 1980, cuando se reinventó el algoritmo de /back-propagation/ cite:book:771224.

*** Back propagation

El algoritmo de /back propagation/ permite establecer los pesos y, por tanto, entrenar los perceptrones multicapa. Esto abrió el camino para el uso de las redes neuronales multicapa. La disponibilidad de un método riguroso para fijar los pesos intermedios, \ie para entrenar las capas ocultas, impulsó el desarrollo de las ANN, superando las deficiencias de la capa única propuesta por Minsky cite:book:2610592. Los autores de la publicación original que describió este algoritmo sintetizan su funcionamiento a alto nivel:

#+BEGIN_QUOTE
Este algoritmo ajusta iterativamente los pesos de cada conexión, con el objetivo de minimizar la función de pérdida (\ie obtener la menor diferencia entre la salida de la ANN y el valor esperado). Como resultado de ello, las capas ocultas llegan a representar características importantes del dominio del problema, y las regularidades de la tarea son captadas por las interacciones de estas unidades. La capacidad de crear nuevas características útiles distingue a la retropropagación de otros métodos anteriores más sencillos, como el procedimiento de convergencia del perceptrón cite:Rumelhart1986.
#+END_QUOTE

Asimismo el algoritmo de /back propagation/ es un enfoque para calcular los gradientes de forma algorítmica, que es especialmente eficaz para los modelos que emplean redes neuronales multicapa cite:book:2530718. Procedemos a la exposición del algoritmo de optimización más usado con la /back propagation/, el /gradient descent/.

*** Gradient descent

El /gradient descent/ es una forma de minimizar una función objetivo parametrizada por las variables de un modelo (e.g. pesos de una neurona artificial) mediante la actualización de los éstas en la dirección opuesta al gradiente de la función objetivo con respecto a los parámetros, \ie  siguiendo la dirección de la pendiente de la superficie creada por la función objetivo hacia abajo hasta llegar a un mínimo local o global cite:ruder2016overview.

#+CAPTION: Diagrama del algoritmo de /gradient descent/. Comenzando en el punto inicial $w^0$ hacemos nuestra primera aproximación a $g(w)$ en el punto $(w^0,g(w^0))$ en la función (mostrada como un punto negro hueco) con la aproximación en serie de Taylor de primer orden dibujada en rojo. Moviéndonos en la dirección de descenso del gradiente negativo proporcionada por esta aproximación llegamos a un punto $w^1=w^0-\alpha\frac{d}{dw}g(w^0)$. A continuación, repetimos este proceso en $w^1$, moviéndonos en la dirección del gradiente negativo allí, y así sucesivamente. cite:book:2530718
#+ATTR_HTML: :height 25% :width 70%
#+NAME: fig:gradient-descent
[[./assets/figures/gradient-descent.png]]

Esta secuencia de pasos se puede formular, de forma matemática:

\begin{equation}
w^{k} = w^{k-1} - \alpha\nabla g(w^{k-1})
\end{equation}

donde $-\nabla g(w)$ es el gradiente negativo de una función $g(w)$ en un punto cite:book:2530718.

Este proceso, junto con sus variantes, es el algoritmo de optimización local más utilizado en /machine learning/ actualmente. Esto se debe en gran medida al hecho de que la dirección de descenso proporcionada a través del gradiente es más fácil de computar (particularmente cuando la dimensión del /input/ aumenta) cite:book:2530718.

** Hacia el Deep Learning

El /Deep Learning/ es un subconjunto del /machine learning/, en el cual se utiliza como modelo de computación las redes neuronales artificiales (ANN) con múltiples capas ocultas. Este enfoque trata de resolver el problema de una buena capacidad expresiva de las redes neuronales, sin el aumento exponencial del número de neuronas cite:DBLP:journals/corr/WangRX17.

#+CAPTION: Diferencia entre inteligencia artificial, /machine learning/ y /deep learning/
#+ATTR_HTML: :height 25% :width 80%
#+NAME: fig:ai-ml-dl
[[./assets/figures/ai-ml-dl.png]]

La cuestión sobre cómo mantener esta capacidad expresiva de la red y al mismo tiempo reducir el número de unidades de cálculo se ha planteado durante años.  Intuitivamente, se sugirió que es natural buscar redes más profundas porque 1) el sistema neuronal humano es una arquitectura profunda y 2) los humanos tienden a representar conceptos en un nivel de abstracción como la composición de conceptos en niveles inferiores. Actualmente, la solución es construir arquitecturas más profundas, \ie redes neuronales con más capas ocultas cite:DBLP:journals/corr/WangRX17.

En la actualidad, los avances tanto en potencia de cálculo del /hardware/, especialmente en las tarjetas gráficas (GPU) cite:Cireşan2010, junto con la disponibilidad de grandes /datasets/ cite:book:771224 han permitido que el aprendizaje profundo prospere y mejore drásticamente el estado del arte en muchas tareas de inteligencia artificial, como la detección de objetos, el reconocimiento del habla o la traducción automática. Su naturaleza de arquitectura profunda otorga a esta disciplina la posibilidad de resolver muchas tareas de IA más complicadas cite:DBLP:journals/corr/WangRX17. Como resultado, los investigadores están extendiendo el aprendizaje profundo a una variedad de diferentes dominios y tareas modernas:

- Eliminación del ruido en las señales de voz
- Descubrimiento de patrones de agrupación de expresiones genéticas
- Generación de imágenes con distintos estilos
- Análisis de sentimientos de diferentes fuentes simultáneas
** Bioinformática

La bioinformática es un campo interdisciplinar en el que intervienen principalmente las áreas de biología molecular, genética, informática, matemáticas y estadística. Esta disciplina permite que los estudios biológicos a gran escala y con gran cantidad de datos se aborden desde un punto de vista informático. Los problemas más comunes son el modelado de procesos biológicos a nivel molecular y la realización de inferencias a partir de los datos recogidos, cite:Can2014 en particular:

#+CAPTION: Problemas clásicos de la bioinformática
#+NAME: tab:bioinformatics-problems
| Problema                             | Fuente de datos  |
|--------------------------------------+------------------|
| Alineamiento de secuencias múltiples | ADN              |
| Búsqueda de patrones de secuencias   | ADN              |
| Análisis evolutivos                  | ADN              |
| Análisis de la función               | Proteínas        |
| Predicción de las estructuras        | Proteínas        |
| Estudio de las vías metabólicas      | Redes biológicas |

Es tentador atribuir los orígenes de la bioinformática a la reciente convergencia de la secuenciación del ADN, los proyectos genómicos a gran escala, Internet y los superordenadores. Sin embargo, algunos científicos que afirman que la bioinformática se encuentra en su infancia reconocen que los ordenadores eran herramientas importantes en la biología molecular una década antes de que la secuenciación del ADN se convirtiera en algo factible (década de los 1960) cite:Hagen2000.

En los ámbitos de la investigación biológica y médica, la labor del análisis computacional ha aumentado de forma espectacular. La primera ola de esta disciplina se centró en el análisis de secuencias, en la cual aún quedan muchos problemas importantes sin resolver, las necesidades actuales y futuras se centran en la integración sofisticada de conjuntos de datos extremadamente diversos.  Estos nuevos tipos de datos proceden de una variedad de técnicas experimentales, muchas de las cuales son capaces de producir datos a nivel de células enteras, órganos, organismos o incluso poblaciones. La principal fuerza impulsora de estos cambios ha sido la llegada de nuevas y eficientes técnicas experimentales, principalmente la secuenciación del ADN, que han conducido a un crecimiento exponencial de las descripciones de las moléculas de proteínas, ADN y ARN cite:book:930.

* Estado del arte

Procedemos a realizar un estudio de las metodologías actuales en los ámbitos, introducidos previamente, del /Deep Learning/ y de la bioinformática, con el objetivo de identificar las técnicas que se utilizan a nivel académico y en la industria.

** Deep Learning

El gran potencial de las ANN es la alta velocidad de procesamiento que ofrecen en una implementación paralela masiva, lo que ha aumentado la necesidad de investigar en este ámbito. Hoy en día, las ANN se utilizan sobre todo para la aproximación de funciones universales en paradigmas numéricos debido a sus excelentes propiedades de autoaprendizaje, adaptabilidad, tolerancia a los fallos, no linealidad y avance en el mapeo de la entrada a la salida. Las ANN son capaces de resolver aquellos problemas que no pueden resolverse con la capacidad de cómputo de los procedimientos tradicionales y las matemáticas convencionales cite:ABIODUN2018e00938.

Los métodos de /Deep Learning/ han resultado ser adecuados para el estudio de big data con un éxito notable en su aplicación al reconocimiento del habla, /computer vision/, el reconocimiento de patrones, los sistemas de recomendación y el procesamiento del lenguaje natural (NLP) cite:LIU201711. En la actualidad, la innovación del /Deep Learning/ en la identificación de imágenes, la detección de objetos, la clasificación de imágenes y las tareas de identificación de rostros tienen un gran éxito cite:ABIODUN2018e00938.

En nuestro estudio, evaluaremos 3 arquitecturas de /Deep Learning/: /autoencoder/, CNN y /Deep Feedforward Networks/. Estableceremos una comparación entre estas diferentes estructuras de ANN, además de mencionar avances recientes en estos algoritmos.

*** Autoencoder

Un /autoencoder/ (AE) es un tipo de ANN. Se trata de un algoritmo de aprendizaje no supervisado que se utiliza para codificar eficazmente un conjunto de datos con el fin de reducir la dimensionalidad. Durante las últimas décadas, los AE han estado a la vanguardia en el ámbito del /Deep Learning/. Los datos de entrada se convierten primero en una representación abstracta que, a continuación, la función codificadora vuelve a convertir en el formato original. En concreto, se entrena para codificar la entrada en alguna representación, de modo que la entrada pueda reconstruirse a partir de la misma cite:LIU201711

#+CAPTION: Diagrama de un /autoencoder/. Internamente presenta una capa ($z$) que describe un código para representar el input cite:chervinskii_2015
#+ATTR_HTML: :height 25% :width 80%
#+NAME: fig:autoencoder
[[./assets/figures/autoencoder.png]]

Un autoencoder se compone de 2 elementos:

#+CAPTION: Elementos de un /autoencoder/
#+NAME: tab:autoencoder
| Elemento | Función    |
|----------+------------|
| Encoder  | $h = f(x)$ |
| Decoder  | $r = g(h)$ |

El proceso de aprendizaje se describe como una optimización de una función de pérdida:

\begin{equation}
L(x, g(f(x)))
\end{equation}

Donde $L$ es la función de pérdida que penaliza $g(f(x))$ por ser distinto de $x$ cite:Goodfellow-et-al-2016.

Tradicionalmente, los /autoencoders/ se utilizaban para reducir la dimensionalidad o /feature learning/. Recientemente, ciertas teorías que conectan los AE y los modelos de variables latentes han llevado a los autocodificadores a la vanguardia del modelado generativo cite:Goodfellow-et-al-2016.

En la actualidad, los /autoencoders/ se utilizan para la reducción de ruido tanto en texto cite:Lewis_2020 como en imágenes cite:bigdeli17_image_restor_using_autoen_prior, /clustering/ no supervisado cite:makhzani15_adver_autoen, generación de imágenes sintéticas cite:Yoo_2020, reducción de dimensionalidad cite:makhzani15_adver_autoen y predicción de secuencia a secuencia para la traducción automática cite:kaiser18_discr_autoen_sequen_model.

*** Redes neuronales convolucionales

Una red neuronal convolucional (CNN, por sus siglas en inglés) es un tipo de red neuronal especializada en el procesamiento de datos que tienen una topología en forma de cuadrícula (/grid/). El nombre de "red neuronal convolucional" indica que la red emplea una operación matemática denominada convolución. Las redes convolucionales han tenido un enorme éxito en las aplicaciones prácticas cite:Goodfellow-et-al-2016.

#+CAPTION: Diagrama de una CNN. Una CNN es una red neuronal multicapa, compuesta por dos tipos diferentes de capas, a saber, las capas de convolución (capas C) y las capas de submuestreo (capas S) cite:LIU201711
#+ATTR_HTML: :height 20% :width 70%
#+NAME: fig:CNN
[[./assets/figures/CNN.png]]

En el contexto de una CNN, una convolución es una operación lineal que implica la multiplicación de un conjunto de pesos con la entrada, al igual que sucede en una red neuronal tradicional. La multiplicación se realiza entre una matriz de datos de entrada y una matriz bidimensional de pesos, llamada filtro o núcleo (/kernel/). El filtro es más pequeño que los datos de entrada, dado que permite que el mismo filtro (conjunto de pesos) se multiplique por la matriz de entrada varias veces en diferentes puntos de la entrada cite:brownlee_2020. La operación queda representada de forma gráfica en la siguiente figura:

\clearpage

#+CAPTION: Representación de una convolución bidimensional. Restringimos la salida a sólo las posiciones en las que el núcleo se encuentra completamente dentro de la imagen. Los recuadros con flechas indican cómo se forma el tensor de salida, aplicando el núcleo a la correspondiente región superior izquierda del tensor de entrada cite:Goodfellow-et-al-2016
#+ATTR_HTML: :height 30% :width 70%
#+NAME: fig:convolution
[[./assets/figures/convolution.png]]

Las capas de convolución (capas C) se utilizan para extraer características y las capas de submuestreo (capas S) son esencialmente capas de mapeo de características (/feature mapping/). Sin embargo, cuando la dimensionalidad de las entradas es igual a la de la salida del filtro, debido a la alta dimensionalidad, la aplicación de un clasificador puede provocar un /overfitting/ o sobreajuste. Para resolver este problema, se introduce un proceso de /pooling/, \ie submuestreo o /down-sampling/, para reducir el tamaño total de la señal cite:LIU201711.

En la actualidad, las CNN se utilizan para /computer vision/, tanto para la clasificación de imágenes cite:howard17_mobil como para la segmentación cite:ronneberger15_u_net, sistemas de recomendación cite:yuan18_simpl_convol_gener_networ_next_item_recom y análisis de sentimientos cite:sadr21_novel_deep_learn_method_textual_sentim_analy.

*** /Deep feedforward networks/

Las /deep feedforward networks/, \ie /deep multilayer perceptrons/, son los modelos de /Deep Learning/ por excelencia. El objetivo de una red /feedforward/ es aproximar una función $f$, definiendo un mapeo:

\begin{equation}
y = f(x;\theta)
\end{equation}

donde $y$ es la categoría que deseamos como salida y $\theta$ es el valor de los parámetros que resultan en la mejor aproximación de la función. Estos modelos se denominan /feedforward/ porque la información fluye a través de la función que se evalúa desde $x$, a través de los cálculos intermedios utilizados para definir $f$ y, finalmente, a la salida $y$. No hay conexiones de retroalimentación (/feedback/) en las que las salidas del modelo se retroalimenten a sí mismas cite:Goodfellow-et-al-2016.

#+CAPTION: Diagrama de una /feedforward network/ que contiene dos unidades, con una única capa oculta cite:Goodfellow-et-al-2016
#+ATTR_HTML: :height 20% :width 70%
#+NAME: fig:feedforward
[[./assets/figures/feedforward.png]]

Las /deep feedforward networks/ se pueden aplicar a una miríada de problemas, dado que se puede considerar la arquitectura de ANN más general. En la actualidad, las /deep feedforward networks/ se pueden utilizar para la identificación automática del idioma cite:Lopez_Moreno_2016, para la modelización de la propagación de enfermedades infecciosas cite:Chakraborty_2020 y para la predicción de la demanda de energía eléctrica cite:Mansoor_2021.

** Bioinformática

El estudio de las ómicas en biología molecular se beneficia de una serie de nuevas tecnologías que pueden ayudar a explicar vías, redes y procesos celulares, tanto normales como anormales, mediante el seguimiento simultáneo de miles de componentes moleculares. Las ómicas abarcan un conjunto cada vez más amplio de ramas, desde la *genómica* (el estudio cuantitativo de los genes codificantes de proteínas, los elementos reguladores y las secuencias no codificantes), la *transcriptómica* (ARN y expresión de genes), la *proteómica* (por ejemplo, centrada en la abundancia de proteínas) y la *metabolómica* (metabolitos y redes metabólicas) hasta los avances en la era de la biología y la medicina postgenómica: farmacogenómica (estudio cuantitativo de cómo la genética afecta a la respuesta del huésped a los fármacos) y fisiómica (dinámica y funciones fisiológicas de organismos enteros) cite:Schneider_2011.

Los métodos de la bioinformática han demostrado ser eficaces para resolver los diversos problemas de las ómicas, concretamente para la obtención del estado transcriptómico de una célula (RNA-seq) cite:Peri_2020, reconstrucción de las secuencias de ADN cite:Zerbino_2008, anotación de genomas cite:Spudich_2007 y predicción de la estructura tridimensional de las proteínas cite:Liu_2018. Sin embargo, el problema de las tasas de error no negligibles en las tecnologías de secuenciación de ADN de segunda y tercera generación ha impulsado el desarrollo de múltiples técnicas bioinformáticas para paliar este contratiempo.

La corrección de errores con respecto a una posición genómica específica puede lograrse disponiendo todas las lecturas de forma horizontal, una tras otra, y examinando la base en cada posición específica de todas estas lecturas. Como los errores son infrecuentes y aleatorios, las lecturas que contienen un error en una posición específica pueden corregirse seleccionando la base más probable inferida a partir de las demás lecturas cite:Yang_2012. Entre estos métodos, destacamos /Coral/ cite:Salmela_2011, /Quake/ cite:Kelley_2010 y /MEC/ cite:Zhao_2017.

El uso de /Deep Learning/ para la corrección de errores de secuenciación es un área de investigación novedosa, en la cual cabe mencionar /NanoReviser/, un algoritmo recientemente publicado que emplea CNN y /Long Short-Term Memory network/ (LSTM) para intentar corregir el patrón de error característico de la tecnología de tercera generación /Oxford Nanopore/ cite:10.3389/fgene.2020.00900.

* Objetivos

1. Introducción al dominio de un problema de biología molecular: secuenciación de ADN y análisis de receptores de linfocitos T (TCR)
2. Introducción al análisis bioinformático de secuencias de ADN: preprocesamiento de lecturas, alineamiento y otros análisis bioinformáticos asociados
3. Revisión de la bibliografía científica reciente perteneciente al dominio del problema
4. Creación de un repositorio software para la generación /in silico/ de secuencias de TCR y la simulación de la secuenciación de las mismas
5. Introducción al uso de Tensorflow y Keras para /Deep Learning/
6. Estudio de aplicación de Tensorflow/Keras a la corrección de errores de secuenciación en base a los datos sintetizados previamente

* Planificación del proyecto

El presente proyecto pertenece al ámbito de la bioinformática, lo cual implica que es un trabajo interdisciplinar. Por lo tanto, se requiere una formación previa en áreas del conocimiento muy diversas. En particular, fue necesario un estudio de las bases bioquímicas, las /NGS/, la recombinación VDJ de los linfocitos T, el lenguaje de programación R, el /Deep Learning/ y el funcionamiento de Tensorflow y Keras.

El proyecto se divide en 2 partes:

- locigenesis: Generación y secuenciación /in silico/ de CDR3
- locimend: Corrección de los errores de secuenciación del ADN

La razón de esta segmentación se expone en la sección siguiente.

#+CAPTION: Cronograma del proyecto
#+ATTR_HTML: :height 30% :width 90%
#+NAME: fig:gantt
[[./assets/figures/gantt.png]]

La estimación temporal inicial del proyecto no se vio representada por la implementación real del mismo. Tanto la extracción de secuencias CDR3 mediante alineamiento múltiple, como el preprocesamiento de las secuencias para el uso de Tensorflow ocuparon la mayor parte del desarrollo del sistema.

Estas observaciones no son sorprendentes; en la práctica se ha comprobado que el preprocesamiento de los datos supone aproximadamente el 80% del esfuerzo total de los proyectos de /machine learning/ cite:Zhang_2003. Incorporamos esta información a nuestro bagaje académico, como una forma de /feedback/ positivo para mejorar la estimación temporal de los futuros proyectos relacionados con técnicas de aprendizaje automático.

* Diseño y descripción del sistema

La finalidad de este proyecto es el desarrollo de un /pipeline/, con el objetivo de crear un algoritmo de /Deep Learning/ capaz de corregir errores de secuenciación en secuencias de ADN, en particular, en la región CDR3 del TCR. Por ende, el trabajo consiste en el desarrollo /end-to-end/ de un sistema de /machine learning/.

El sistema se compone de 2 partes, dado que el algoritmo de /Deep Learning/ es generalizable y se podría proceder al entrenamiento de éste con otro conjunto de datos.

#+CAPTION: Descripción del proyecto
#+NAME: tab:pipeline
| Elemento    | Finalidad                              | Lenguaje de programación |
|-------------+----------------------------------------+--------------------------|
| [[https://git.coolneng.duckdns.org/coolneng/locigenesis][locigenesis]] | Generación y secuenciación de CDR3     | R                        |
| [[https://git.coolneng.duckdns.org/coolneng/locimend][locimend]]    | Corrección de errores de secuenciación | Python                   |

El diseño del sistema queda plasmado a continuación:

#+CAPTION: Diseño del sistema. (*A*) Entrenamiento del algoritmo de /Deep Learning/. Como /input/ proporcionamos el número de secuencias, junto con el número de lecturas que deseamos que se simulen. Locigenesis generará 2 archivos en formato FASTQ, que contienen CDR3 con y sin errores de secuenciación, que son el /input/ de locimend, cuya salida es el conjunto de métricas del algoritmo. (*B*) Inferencia del modelo de /Deep Learning/ previamente entrenado y desplegado. Se provee como entrada una secuencia de ADN con errores de secuenciación, el algoritmo procesa ésta y devuelve una secuencia de ADN sin errores
#+ATTR_HTML: :height 80% :width 70%
#+NAME: fig:pipeline
[[./assets/figures/pipeline.png]]

Procedemos a la exposición de cada parte del /pipeline/, por separado, resaltando las tecnologías usadas y las funcionalidades.

** locigenesis

locigenesis es una herramienta que genera un receptor de células T (TCR) humano, lo pasa por una herramienta de simulación de lectura de secuencias y extrae las regiones CDR3.

El objetivo de este proyecto es generar tanto secuencias de CDR3 con y sin errores de secuenciación, con el fin de crear /datasets/ para entrenar un algoritmo de /Deep Learning/.

*** Tecnologías

- immuneSIM: generación /in silico/ de repertorios de BCR y TCR, humanos y de ratón cite:Weber_2020
- CuReSim: simulador de secuenciación que emula la tecnología /Ion Torrent/ cite:Caboche_2014
- Biostrings: manipulación de secuencias biológicas cite:Biostrings

*** Funcionamiento

El programa realiza, parametrizado por 2 parámetros de entrada (número de secuencias diferentes y número de lecturas por el simulador de secuenciación), los siguientes pasos:

1. Generación de diversas secuencias de la cadena \beta del TCR
2. Exportación de las secuencias a un archivo en formato FASTQ (tanto CDR3 como la secuencia VDJ completa)
3. Simulación de una secuenciación mediante CuReSim, y almacenamiento de las secuencias con errores
4. Alineamiento de las secuencias completas con errores, y extracción de CDR3 a partir de una heurística
5. Exportación de las secuencias de CDR3 con errores y sin errores en archivos con formato FASTQ

** locimend

locimend es un algoritmo de /Deep Learning/ que corrige errores de secuenciación de secuencias de ADN.

El objetivo de este proyecto es crear un modelo que pueda inferir la secuencia correcta de ADN, a partir de una secuencia de ADN con errores. Se trata de una reducción de ruido aplicada a un problema de genómica.

La arquitectura del modelo es una /deep feedforward network/, formada por:

- Capa de entrada
- Capa de /masking/: ignora ciertos valores que se añaden a cada tensor para homogenizar el tamaño del /input/
- 3 capas densas, seguidas de una capa de /dropout/: el /dropout/ es un mecanismo que disminuye el /overfitting/ o sobreajuste
- Capa densa

#+CAPTION: Arquitectura de la red neuronal
#+ATTR_HTML: :height 45% :width 70%
#+NAME: fig:locimend
[[./assets/figures/locimend.png]]

La interacción con el modelo se puede realizar mediante:

- Interfaz por línea de comandos (CLI)
- API REST

*** Tecnologías

- Tensorflow: creación y ejecución de algoritmos de /machine learning/ cite:tensorflow2015-whitepaper
- Biopython: manipulación de secuencias biológicas cite:Cock_2009
- FastAPI: /framework/ web para la creación de APIs

*** Entrenamiento

El entrenamiento del modelo se realiza, a partir de 2 archivos FASTQ, en diferentes pasos:

1. Lectura de dos archivos FASTQ (secuencia de CDR3 correcta y secuencia de CDR3 con errores) simultáneamente para obtener las /features/ y el /label/
2. Alineamiento de la secuencia correcta y de la secuencia con errores, para obtener entradas de la misma longitud
3. Codificación basada en el índice de las secuencias de ADN, para obtener secuencias numéricas
4. Conversión de las secuencias numéricas al formato binario TFRecord (basado en /Protocol Buffers/)
5. Separación y almacenamiento del /dataset/ en conjunto de entrenamiento, validación y test
6. Lectura paralela de los conjuntos del /dataset/
7. /One-hot encoding/ de las secuencias numéricas, las cuales representan las secuencias de ADN
8. Entrenamiento del algoritmo de /Deep Learning/, con los datos preprocesados
9. Obtención de las métricas que miden el rendimiento del modelo

*** Inferencia

La inferencia consiste en la predicción de nuevos resultados a partir de un modelo pre-entrenado. Se llevan a cabo los siguientes pasos:

1. Carga del modelo pre-entrenado
2. Lectura de la secuencia de ADN con errores
3. Codificación basada en el índice de la secuencia de ADN, para obtener une secuencia numérica
4. /One-hot encoding/ de las secuencia numérica, la cual representa la secuencia de ADN
5. Predicción de la secuencia correcta de ADN
6. Descodificación de la secuencia numérica hasta obtener una secuencia de ADN
7. Presentación de la secuencia de ADN correcta inferida por el modelo

** Reproducibilidad

La reproducibilidad de los experimentos en la ciencia es un elemento esencial en el método científico, el cual asegura que una técnica novedosa ofrece resultados verídicos. Actualmente, nos encontramos en una etapa de crisis de reproducibilidad, donde el 70% de los investigadores han fallado al tratar de replicar el estudio de otro científico cite:Baker_2016.

Asimismo, en el ámbito de la informática pocos experimentos computacionales son documentados de forma precisa. Por lo general, no existe un registro del flujo de trabajo, la configuración del /hardware/ y el /software/ del equipo, la configuración de los parámetros o las secuencias de invocación de funciones. El código fuente a menudo se revisa sin dejar constancia de ello. Además de dificultar la reproducibilidad de los resultados, estas prácticas acaban impidiendo la productividad de los propios investigadores cite:Stodden13publishingstandards.

Recientemente han surgido nuevos enfoques para lidiar con este problema desde el punto de vista de la resolución de dependencias de un proyecto /software/. En el presente trabajo, usamos el gestor de paquetes Nix cite:inproceedings, para garantizar que los resultados que obtenemos son reproducibles en cualquier máquina.

* Resultados

El algoritmo de /Deep Learning/ fue entrenado con un /dataset/ sintético de las secuencias de la región CDR3 del TCR. En concreto, se generó un dataset de 20,000 secuencias, procedentes de una simulación de secuenciación (reproducida durante 100 iteraciones), de 200 secuencias únicas. Este /dataset/ se proporciona en el repositorio de locimend.

Dado que los conjuntos de datos de entrenamiento estaban completamente anotados (\ie aprendizaje supervisado), el problema se formuló como una tarea de clasificación binaria supervisada de predicción de una base dada como error/no error, y el rendimiento se midió en unos /datasets/ de validación y de test.

El entrenamiento del modelo de /Deep Learning/ se efectuó en un PC con un procesador Ryzen 5 2600X (6 núcleos, 12 hebras) y 16 GB de RAM. El tiempo de ejecución fue de 23 minutos.

Presentamos las métricas obtenidas al finalizar el entrenamiento de locimend:

#+CAPTION: Rendimiento de locimend con cada /dataset/
#+NAME: tab:results
| Dataset    | Accuracy |  AUC |
|------------+----------+------|
| Validación |     0.89 | 0.98 |
| Test       |     0.89 | 0.98 |

En definitiva, locimend adquirió una gran capacidad para discernir entre nucleótidos erróneos y correctos, en ambos /datasets/, con una precisión de 0,89 y un área bajo la curva (AUC) de 0,98.

* Conclusiones

El presente estudio plantea el desarrollo de un sistema bioinformático (denominado locimend) de corrección de errores de secuenciación del ADN, basado en /Deep Learning/, y aplicado a secuencias de la región CDR3 del TCR. Locimend fue entrenado con datos generados /in silico/ (en este mismo proyecto) y demuestra un alto rendimiento de predicción y corrección de errores de secuenciación, comparado con las técnicas utilizadas en el estado del arte. El algoritmo opera sobre secuencias de ADN, lo cual permite una fácil integración en el flujo de trabajo de un sistema bioinformático.

* Futuras mejoras

Los resultados del algoritmo de /Deep Learning/ son satisfactorios aunque presenta ciertas limitaciones.

En primer lugar, el modelo dado que la red neuronal se entrenó exclusivamente con datos que emulan una secuenciación de Ion Torrent, es probable que las características que contribuyen a las posiciones erróneas sean específicas al proceso de secuenciación de Ion Torrent. Por lo tanto, la inferencia a partir de datos de secuenciación procedentes de otras tecnologías podría ser menos eficaz. Un entrenamiento con varios /dataset/ provenientes de diferentes tecnologías aumentaría la capacidad de generalización del modelo.

Asimismo, el entrenamiento del modelo se realizó con un conjunto de datos de 20,000 secuencias, un tamaño bastante limitado para una tarea de aprendizaje automático. La generación de /datasets/ de mayor tamaño no era viable debido a limitaciones en las capacidades de cómputo de los recursos disponibles. Por ende, la elaboración de un /dataset/ de mayor envergadura es una tarea pendiente.

Uno de los factores que más afecta el rendimiento de una red neuronal es el valor de los hiperparámetros. Los hiperparámetros son variables inherentes al modelo, como el optimizador usado, la distribución de los valores iniciales en los pesos del modelo, la tasa de aprendizaje o el /batch size/. Todos estos parámetros son interdependientes cite:book:2164083, por lo que es importante optimizarlos de forma combinatoria. Una optimización más a fondo de los hiperparámetros podría incrementar la eficiencia del modelo.

Finalmente, el desarrollo y despliegue de un /frontend/ web para la API REST permitiría mejorar la accesibilidad del modelo para los investigadores que deseen usar este modelo.

* Bibliografía
