Apprendimento profondo con le proteine

'Apprendimento profondo delle proteine'

Ho in mente due tipi di pubblico mentre scrivo questo. Uno è rappresentato dai biologi che stanno cercando di avvicinarsi all’apprendimento automatico, l’altro è rappresentato dagli esperti di apprendimento automatico che stanno cercando di avvicinarsi alla biologia. Se non sei familiare né con la biologia né con l’apprendimento automatico, sei comunque il benvenuto, ma potresti trovare alcune parti un po’ confuse! E se sei già familiare con entrambi, probabilmente non hai bisogno affatto di questo post: puoi passare direttamente ai nostri notebook di esempio per vedere questi modelli in azione:

  • Accordatura fine dei modelli di linguaggio delle proteine (PyTorch, TensorFlow)
  • Piegatura delle proteine con ESMFold (solo PyTorch per ora a causa delle dipendenze di openfold)

Introduzione per i biologi: che cos’è un modello di linguaggio?

I modelli utilizzati per gestire le proteine sono fortemente ispirati ai grandi modelli di linguaggio come BERT e GPT. Quindi, per capire come funzionano questi modelli, torniamo indietro nel tempo al 2016 circa, prima che esistessero. Donald Trump non è ancora stato eletto, la Brexit non è ancora accaduta e il Deep Learning (DL) è la nuova tecnica all’avanguardia che stabilisce nuovi record ogni giorno. La chiave del successo del DL è che utilizza reti neurali artificiali per apprendere modelli complessi nei dati. Il DL ha però un problema critico: ha bisogno di molte dati per funzionare bene e su molti compiti questi dati non sono disponibili.

Immaginiamo che tu voglia addestrare un modello di DL per prendere una frase in inglese come input e decidere se è grammaticalmente corretta o meno. Quindi assembli i tuoi dati di addestramento e assomigliano a qualcosa del genere:

In teoria, questo compito era completamente possibile all’epoca: se alimentavi dati di addestramento come questi in un modello di DL, poteva imparare a prevedere se nuove frasi erano grammaticalmente corrette o meno. In pratica, però, non funzionava così bene, perché nel 2016 la maggior parte delle persone inizializzava casualmente un nuovo modello per ogni compito che volevano addestrare. Questo significava che i modelli dovevano imparare tutto ciò che dovevano sapere solo dagli esempi nei dati di addestramento!

Per capire quanto sia difficile, fai finta di essere un modello di apprendimento automatico e ti sto dando dei dati di addestramento per un compito che voglio che impari. Eccoli:

Ho scelto una lingua qui che spero tu non abbia mai visto prima, quindi immagino che tu non ti senta molto sicuro di aver imparato questo compito. Forse dopo centinaia o migliaia di esempi potresti iniziare a notare alcune parole o pattern ricorrenti negli input e potresti essere in grado di fare supposizioni migliori rispetto a un caso casuale, ma anche in quel caso una nuova parola o una formulazione insolita sicuramente sarebbe in grado di confonderti e farti indovinare in modo errato. Non a caso, i modelli di DL si comportavano più o meno allo stesso modo in quel periodo!

Ora prova lo stesso compito, ma in inglese:

Ora è facile: il compito consiste semplicemente nel prevedere se una recensione di un film è positiva (1) o negativa (0). Con solo due esempi positivi e due esempi negativi, probabilmente potresti fare questo compito con una precisione vicina al 100%, perché hai già una vasta conoscenza preesistente del vocabolario e della grammatica inglese, oltre al contesto culturale che riguarda i film e l’espressione emotiva. Senza quella conoscenza, le cose sono più simili al primo compito: dovresti leggere un numero enorme di esempi prima di iniziare a individuare anche pattern superficiali negli input e anche se ti prendessi il tempo di studiare centinaia di migliaia di esempi, le tue supposizioni sarebbero comunque molto meno precise rispetto a quelle fatte dopo solo quattro esempi nel compito in lingua inglese.

La svolta critica: l’apprendimento trasferibile

Nell’apprendimento automatico, chiamiamo questo concetto di trasferire conoscenze precedenti a un nuovo compito “apprendimento trasferibile”. Fare funzionare questo tipo di apprendimento trasferibile per il DL era un obiettivo importante per il campo intorno al 2016. Cose come i vettori di parole pre-addestrati (che sono molto interessanti, ma al di fuori dello scopo di questo post nel blog!) esistevano già nel 2016 e consentivano il trasferimento di alcune conoscenze a nuovi modelli, ma questo trasferimento di conoscenze era ancora relativamente superficiale e i modelli avevano comunque bisogno di grandi quantità di dati di addestramento per funzionare bene.

Questa situazione è continuata fino al 2018, quando sono stati pubblicati due importanti articoli, introducendo i modelli ULMFiT e successivamente BERT. Questi sono stati i primi articoli che hanno reso l’apprendimento trasferibile nel linguaggio naturale molto efficace e BERT in particolare ha segnato l’inizio dell’era dei grandi modelli di linguaggio pre-addestrati. Il trucco, condiviso da entrambi gli articoli, è che hanno sfruttato la struttura interna delle reti neurali artificiali nel deep learning: hanno addestrato una rete neurale per molto tempo su un compito di testo in cui i dati di addestramento erano molto abbondanti e poi hanno semplicemente copiato l’intera rete neurale su un nuovo compito, modificando solo i pochi neuroni che corrispondevano all’output della rete.

Questa figura dal paper ULMFiT mostra i notevoli miglioramenti delle prestazioni ottenuti utilizzando il transfer learning rispetto all’addestramento di un modello da zero su tre compiti separati. In molti casi, l’utilizzo del transfer learning porta a prestazioni equivalenti a quelle ottenute con più di 100 volte i dati di addestramento. E non dimenticare che questo è stato pubblicato nel 2018 – i moderni modelli linguistici di grandi dimensioni possono fare ancora meglio!

Il motivo per cui questa tecnica funziona è che nel processo di risoluzione di un compito non banale, le reti neurali imparano molta struttura dei dati di input: le reti visive, date le immagini iniziali, imparano a identificare linee, curve e bordi; le reti di testo, date le parole iniziali, imparano i dettagli della struttura grammaticale. Queste informazioni, però, non sono specifiche del compito: la chiave del successo del transfer learning è che molto di ciò che è necessario sapere per risolvere un compito non è specifico di quel compito! Per classificare le recensioni di film non è necessario sapere molto sulle recensioni di film, ma è necessaria una vasta conoscenza dell’inglese e del contesto culturale. Scegliendo un compito in cui i dati di addestramento sono abbondanti, possiamo far imparare a una rete neurale quel tipo di “conoscenza di dominio” e poi applicarla successivamente a nuovi compiti di nostro interesse, dove potrebbe essere molto più difficile ottenere dati di addestramento.

A questo punto, spero che tu abbia capito cosa sia il transfer learning e che un grande modello linguistico sia solo una grande rete neurale addestrata su molto testo, il che lo rende un candidato ideale per il trasferimento a nuovi compiti. Vedremo come queste stesse tecniche possano essere applicate alle proteine di seguito, ma prima devo scrivere una introduzione per l’altra metà del mio pubblico. Se hai già familiarità, puoi tranquillamente saltare questa prossima parte!

Introduzione per le persone che lavorano nel machine learning: Ma che cosa è una proteina?

Per condensare una laurea in una sola frase: le proteine fanno molte cose. Alcune proteine sono enzimi – agiscono come catalizzatori per le reazioni chimiche. Quando il tuo corpo converte i nutrienti in energia, ogni passaggio dal cibo al movimento muscolare è catalizzato da un enzima. Altre proteine sono strutturali – conferiscono stabilità e forma, ad esempio nei tessuti connettivi. Se hai mai visto una pubblicità di cosmetici, probabilmente hai sentito parole come collagene, elastina e cheratina – queste sono proteine che formano gran parte della struttura della nostra pelle e dei nostri capelli.

Altre proteine sono essenziali per la salute e la malattia – tutti ricordano probabilmente le interminabili notizie sulla proteina spike del virus COVID-19. La proteina spike del COVID si lega a una proteina chiamata ACE2 che si trova sulla superficie delle cellule umane, consentendo al virus di entrare nella cellula e consegnare il suo carico di RNA virale. Poiché questa interazione era così critica per l’infezione, la modellazione di queste proteine e delle loro interazioni è stata un’enorme priorità durante la pandemia.

Le proteine sono composte da più amminoacidi. Gli amminoacidi sono molecole relativamente semplici che condividono tutte lo stesso scheletro molecolare, e la chimica di questo scheletro consente agli amminoacidi di unirsi insieme, in modo che le singole molecole possano diventare una lunga catena. La cosa fondamentale da capire qui è che ci sono solo pochi amminoacidi diversi – 20 standard, più forse un paio di rari e strani a seconda dell’organismo specifico in questione. Quello che dà origine all’enorme diversità delle proteine è che questi amminoacidi possono essere combinati in qualsiasi ordine, e la catena proteica risultante può avere forme e funzioni molto diverse, poiché diverse parti della catena si attaccano e si piegano l’una sull’altra. Pensate al testo come analogia: l’inglese ha solo 26 lettere, eppure pensate a tutti i diversi tipi di cose che potete scrivere con le combinazioni di quelle 26 lettere!

In effetti, poiché ci sono così pochi amminoacidi, i biologi possono assegnare a ciascuno di essi una lettera unica dell’alfabeto. Questo significa che è possibile scrivere una proteina come una semplice stringa di testo! Ad esempio, supponiamo che una proteina abbia gli amminoacidi metionina, alanina e istidina in una catena. Le lettere corrispondenti per quegli amminoacidi sono semplicemente M, A e H, quindi potremmo scrivere quella catena come “MAH”. Tuttavia, la maggior parte delle proteine contiene centinaia o addirittura migliaia di amminoacidi anziché solo tre!

Questa figura mostra due rappresentazioni di una proteina. Tutti gli amminoacidi contengono una sequenza carbonio-carbonio-nitrogeno. Quando gli amminoacidi vengono fusi in una proteina, questo motivo ripetuto si estende per tutta la sua lunghezza, dove viene chiamato “scheletro” della proteina. Gli amminoacidi, tuttavia, differiscono nella “catena laterale”, che è il nome dato agli atomi attaccati a questo scheletro C-C-N. La figura inferiore utilizza catene laterali generiche etichettate come R1, R2 e R3, che potrebbero rappresentare qualsiasi amminoacido. Nella figura superiore, l’amminoacido centrale ha una catena laterale CH3 – questo lo identifica come l’amminoacido alanina, che è rappresentato dalla lettera A. (Fonte dell’immagine)

Anche se possiamo scriverli come stringhe di testo, le proteine non sono effettivamente un “linguaggio”, almeno non un tipo di linguaggio che Noam Chomsky riconoscerebbe. Tuttavia, hanno alcune caratteristiche simili a un linguaggio che le rendono un dominio molto simile al testo dal punto di vista del machine learning: le proteine sono lunghe stringhe in un alfabeto fisso e piccolo, e sebbene in teoria sia possibile qualsiasi stringa, in pratica solo un piccolissimo sottoinsieme di stringhe ha un “senso”. Il testo casuale è spazzatura, e le proteine casuali sono solo una massa amorfa.

Inoltre, si perde informazione se si considerano solo parti di una proteina in isolamento, allo stesso modo in cui si perde informazione se si legge solo una singola frase estratta da un testo più ampio. Una regione di una proteina può assumere la sua forma naturale solo in presenza di altre parti della proteina che stabilizzano e correggono quella forma! Ciò significa che le interazioni a lungo raggio, del tipo che sono ben catturate dall’autoattenzione globale, sono molto importanti per modellare correttamente le proteine.

A questo punto, sperabilmente hai un’idea vaga di cosa sia una proteina e perché i biologi se ne interessano così tanto – nonostante il loro piccolo “alfabeto” di amminoacidi, hanno una vasta diversità di struttura e funzione, e essere in grado di capire e prevedere quelle strutture e funzioni solo guardando la “stringa” grezza degli amminoacidi sarebbe uno strumento di ricerca estremamente prezioso.

Unendo il tutto: Machine learning con le proteine

Ora abbiamo visto come funziona il trasferimento di apprendimento con i modelli linguistici e abbiamo visto cosa sono le proteine. E una volta acquisito questo background, il passo successivo non è troppo difficile – possiamo usare le stesse idee di trasferimento di apprendimento sulle proteine! Invece di pre-addestrare un modello su un compito che coinvolge il testo in inglese, lo addestriamo su un compito in cui gli input sono proteine, ma in cui è disponibile molti dati di addestramento. Una volta fatto ciò, il nostro modello avrà probabilmente imparato molto sulla struttura delle proteine, allo stesso modo in cui i modelli linguistici imparano molto sulla struttura del linguaggio. Ciò rende i modelli di proteine pre-addestrati un candidato ideale per il trasferimento su qualsiasi altro compito basato sulle proteine!

Quali tipi di compiti di machine learning preoccupano i biologi per l’addestramento di modelli di proteine? Il compito di modellazione proteica più famoso è la piegatura delle proteine. Il compito qui è, dato la catena di amminoacidi come “MLKNV…”, prevedere la forma finale in cui la proteina si piegherà. Questo è un compito di enorme importanza, perché prevedere con precisione la forma e la struttura di una proteina fornisce molte informazioni su cosa fa la proteina e come lo fa.

Le persone hanno studiato questo problema molto prima dell’avvento del machine learning moderno: alcuni dei primi progetti di calcolo distribuito su larga scala come Folding@Home utilizzavano simulazioni atomiche a incredibile risoluzione spaziale e temporale per modellare la piegatura delle proteine, e c’è un intero campo di cristallografia delle proteine che utilizza la diffrazione dei raggi X per osservare la struttura delle proteine isolate dalle cellule viventi.

Come molte altre discipline, però, l’arrivo del deep learning ha cambiato tutto. AlphaFold e soprattutto AlphaFold2 hanno utilizzato modelli di deep learning con transformer e alcune aggiunte specifiche per le proteine per ottenere risultati eccezionali nella previsione della struttura di proteine nuove solo dalla sequenza grezza degli amminoacidi. Se la piegatura delle proteine è ciò che ti interessa, ti consigliamo vivamente di dare un’occhiata al nostro notebook ESMFold: ESMFold è un nuovo modello simile ad AlphaFold2, ma è più un modello di deep learning “puro” che non richiede alcun database esterno o passaggi di ricerca per essere eseguito. Di conseguenza, il processo di configurazione è molto meno doloroso e il modello funziona molto più rapidamente, pur mantenendo un’accuratezza eccezionale.

La struttura prevista per la proteina omodimerica P. multocida Glucosamina-6-fosfato deaminasi. Questa struttura e visualizzazione sono state generate in pochi secondi utilizzando il notebook ESMFold collegato sopra. I colori blu più scuri indicano le regioni di maggiore confidenza nella struttura.

La piegatura delle proteine non è l’unico compito di interesse! Ci sono una vasta gamma di compiti di classificazione che i biologi potrebbero voler svolgere con le proteine – forse vogliono prevedere in quale parte della cellula quella proteina opererà, o quali amminoacidi nella proteina riceveranno determinate modifiche dopo la creazione della proteina. Nel linguaggio del machine learning, compiti come questi vengono chiamati classificazione di sequenza quando si vuole classificare l’intera proteina (ad esempio, prevedere la sua localizzazione subcellulare), o classificazione di token quando si vuole classificare ogni amminoacido (ad esempio, prevedere quali amminoacidi individuali riceveranno modifiche post-traduzionali).

L’aspetto chiave, però, è che anche se le proteine sono molto diverse dal linguaggio, possono essere gestite quasi esattamente con lo stesso approccio di machine learning – pre-addestramento su un grande database di sequenze proteiche, seguito da trasferimento di apprendimento su una vasta gamma di compiti di interesse in cui i dati di addestramento potrebbero essere molto più limitati. Infatti, sotto alcuni aspetti è persino più semplice di un grande modello di linguaggio come BERT, perché non è necessario uno spezzettamento e parsing complesso delle parole – le proteine non hanno divisioni di “parole”, quindi l’approccio più semplice è convertire semplicemente ogni amminoacido in un singolo token di input.

Sembra interessante, ma non so da dove cominciare!

Se sei già familiare con il deep learning, allora troverai che il codice per il fine-tuning dei modelli proteici assomiglia molto al codice per il fine-tuning dei modelli di linguaggio. Abbiamo dei notebook di esempio sia per PyTorch che per TensorFlow, se sei curioso, e puoi ottenere grandi quantità di dati annotati dai database proteici ad accesso aperto come UniProt, che ha anche una REST API e un’interfaccia web piacevole. La tua principale difficoltà sarà trovare direzioni di ricerca interessanti da esplorare, che vanno un po’ oltre lo scopo di questo documento, ma sono sicuro che ci sono molti biologi là fuori che sarebbero felici di collaborare con te!

Se sei un biologo, d’altra parte, probabilmente hai diverse idee su cosa vorresti provare, ma potresti essere un po’ intimidito nel tuffarti nel codice di machine learning. Non panico! Abbiamo progettato i notebook di esempio (PyTorch, TensorFlow) in modo che la sezione di caricamento dei dati sia abbastanza indipendente dal resto. Ciò significa che se hai in mente un compito di classificazione delle sequenze o di classificazione dei token, tutto quello che devi fare è costruire una lista di sequenze proteiche e una lista di etichette corrispondenti, e poi sostituire il nostro codice di caricamento dei dati con qualsiasi codice che carichi o generi quelle liste.

Anche se gli esempi specifici collegati utilizzano ESM-2 come modello pre-addestrato di base, in quanto è lo stato dell’arte attuale, le persone del settore sono anche probabilmente familiari con il laboratorio Rost, i cui modelli come ProtBERT (link al paper) sono stati alcuni dei primi modelli del loro genere e hanno suscitato un interesse fenomenale da parte della comunità della bioinformatica. Gran parte del codice negli esempi collegati può essere sostituito utilizzando una base come ProtBERT semplicemente cambiando il percorso del checkpoint da facebook/esm2... a qualcosa come Rostlab/prot_bert.

Conclusione

L’intersezione tra deep learning e biologia sarà un campo incredibilmente attivo e fruttuoso nei prossimi anni. Una delle cose che rende il deep learning un campo così dinamico, però, è la velocità con cui le persone possono riprodurre i risultati e adattare nuovi modelli per il proprio uso. In questo spirito, se addestri un modello che pensi potrebbe essere utile alla comunità, per favore condividilo! I notebook collegati sopra contengono il codice per caricare i modelli nell’Hub, dove possono essere liberamente accessibili e sviluppati da altri ricercatori – oltre ai benefici per il campo, questo è anche un ottimo modo per ottenere visibilità e citazioni per i tuoi articoli correlati. Puoi persino creare una demo web live con Spaces in modo che altri ricercatori possano inserire sequenze proteiche e ottenere risultati gratuitamente senza dover scrivere una sola riga di codice. Buona fortuna, e che il Revisore 2 sia gentile con te!