Torna al catalogo
Season 22 15 Episodi 58 min 2026

Mastering DeepChem

v2.8 — Edizione 2026. Una guida completa a DeepChem, un framework per democratizzare il deep learning nelle scienze. Copre tutto, dalla gestione dei dati e MoleculeNet ai graph featurizers, modelli ML specializzati, molecular docking e reinforcement learning (v2.8 - 2026).

Calcolo Scientifico Deep Learning per la Scienza Cheminformatica
Mastering DeepChem
In Riproduzione
Click play to start
0:00
0:00
1
Il Progetto DeepChem
Un'introduzione al progetto DeepChem e alla sua missione di democratizzare il deep learning per la scienza. Scopriremo come si è evoluto dalle applicazioni chimiche a una suite più ampia di strumenti per il machine learning scientifico.
3m 39s
2
Gestire i Dataset Scientifici
Esploriamo l'astrazione Dataset di DeepChem per la gestione di dati scientifici su larga scala. Scoprite le differenze fondamentali tra NumpyDataset e DiskDataset per la gestione della memoria out-of-core.
3m 34s
3
I Benchmark di MoleculeNet
Scoprite MoleculeNet, la principale suite di benchmark curata all'interno di DeepChem. Discuteremo di come la standardizzazione di dataset come Tox21 e QM9 acceleri la chimica computazionale.
4m 11s
4
Feature Engineering per le Molecole
Scoprite come DeepChem traduce le strutture chimiche in numeri leggibili dalle macchine utilizzando i Featurizers. Esploriamo il metodo CircularFingerprint per mappare le stringhe SMILES in bit vectors.
4m 00s
5
Graph Convolution Featurizers
Andiamo oltre i semplici bit vectors ed esploriamo come DeepChem rappresenta le molecole come grafi matematici. Tratteremo ConvMolFeaturizer e MolGraphConvFeaturizer.
3m 57s
6
Splitting Scientificamente Consapevole
Scoprite perché i classici random splits falliscono sui dataset scientifici. Esploriamo RandomStratifiedSplitter e come validare correttamente i modelli su dati multi-task fortemente sbilanciati.
4m 09s
7
Domare i Dati con i Transformers
Scoprite come normalizzare distribuzioni scientifiche irregolari utilizzando i Transformers di DeepChem. Discuteremo di NormalizationTransformer e MinMaxTransformer per un addestramento stabile.
3m 53s
8
L'API Model e i Wrapper per Scikit-Learn
Esplorate l'interfaccia unificata Model di DeepChem e come wrappare gli algoritmi tradizionali usando SklearnModel. Scoprite perché a volte la soluzione migliore non è una rete neurale profonda.
3m 15s
9
Modelli Specializzati per Grafi Molecolari
Immergetevi nelle architetture di deep learning create appositamente per la chimica. Tratteremo le Graph Convolutional Networks (GCNModel) e le Message Passing Neural Networks (MPNNModel).
3m 54s
10
Valutare i Modelli Scientifici
Scoprite perché l'accuratezza standard fallisce nel ML scientifico. Esploriamo la classe Metric di DeepChem, il Matthews Correlation Coefficient e come valutare modelli multi-task sbilanciati.
3m 50s
11
Hyperparameter Tuning Intelligente
Andate oltre la grid search a forza bruta. Scoprite come utilizzare GaussianProcessHyperparamOpt in DeepChem per navigare in modo intelligente in spazi di iperparametri complessi.
3m 50s
12
Metalearning per Regimi a Pochi Dati
Esplorate il Model-Agnostic Meta-Learning (MAML) in DeepChem. Scoprite come addestrare modelli in grado di adattarsi rapidamente a nuovi e costosi esperimenti scientifici con pochissimi dati.
4m 08s
13
Scoperta delle Binding Pocket
Comprendete la geometria delle interazioni proteina-ligando. Esploriamo il ConvexHullPocketFinder di DeepChem per localizzare algoritmicamente le cavità di legame sulle strutture proteiche 3D.
3m 51s
14
Generazione di Pose con Vina e Gnina
Fate il passo successivo nel molecular docking calcolando le pose di legame. Scoprite come VinaPoseGenerator e GninaPoseGenerator valutano le geometrie spaziali per prevedere le interazioni.
4m 26s
15
Reinforcement Learning nella Scienza
Scoprite come il reinforcement learning può progettare autonomamente le molecole. Tratteremo le astrazioni Environment e Policy di DeepChem insieme all'algoritmo Advantage Actor-Critic (A2C).
4m 08s

Episodi

1

Il Progetto DeepChem

3m 39s

Un'introduzione al progetto DeepChem e alla sua missione di democratizzare il deep learning per la scienza. Scopriremo come si è evoluto dalle applicazioni chimiche a una suite più ampia di strumenti per il machine learning scientifico.

Download
Ciao, sono Alex di DEV STORIES DOT EU. Mastering DeepChem, episodio 1 di 15. Vuoi applicare il machine learning a un problema scientifico, quindi usi i tool standard, ma questi tool standard trattano molecole e proteine come data array piatti, ignorando completamente la fisica sottostante. Il tool che colma questa lacuna è il progetto DeepChem. Spesso si pensa che DeepChem sia un tensor engine standalone, qualcosa che usi al posto di PyTorch, TensorFlow o JAX. Questo è sbagliato. DeepChem è un toolset domain-specific costruito direttamente sopra questi framework generici. Agisce come un traduttore. Si occupa della complessa ingegneria necessaria per trasformare dati fisici disordinati in un formato che una neural network standard può elaborare. Il progetto esiste per democratizzare il deep learning per la scienza. Quando è iniziato, il focus era strettamente sulla chimica. L'obiettivo iniziale era rendere accessibile la drug discovery, dando ai ricercatori i tool per prevedere le proprietà chimiche senza aver bisogno di un enorme laboratorio proprietario. Ma man mano che il settore cresceva, lo ha fatto anche il framework. Oggi, DeepChem si è silenziosamente evoluto in un hub centrale per quasi ogni applicazione scientifica di deep learning. Per capirne la portata, considera la differenza nei domini che gestisce. Lunedì, potresti usare DeepChem per prevedere la solubilità acquosa di una nuova molecola drug-like. Questo richiede un modello che comprenda i legami molecolari e gli stati quantistici. Giovedì, potresti usare lo stesso framework per analizzare un'immagine al microscopio per contare le singole cellule. Questi sono problemi fisici profondamente diversi. DeepChem astrae il boilerplate sottostante per entrambi, fornendo tool specializzati per il machine learning molecolare, la bioinformatica e persino la scienza dei materiali. Ecco il punto chiave. La parte più difficile del machine learning scientifico è la data representation. Un modello di deep learning standard non ha alcun concetto di struttura atomica o di sequenze biologiche. DeepChem risolve questo problema fornendo dei featurizer altamente ottimizzati. Un featurizer prende un oggetto scientifico grezzo, come un composto chimico scritto in notazione testuale standard, e lo traduce matematicamente in un grafo o in un vettore. Dopo la featurization, le informazioni finiscono in oggetti dataset specializzati di DeepChem. Questi oggetti sono progettati per gestire in modo efficiente grandi collezioni di dati scientifici su disco. Questo previene i crash di memoria quando elabori milioni di composti complessi. DeepChem affronta anche il modo in cui i modelli scientifici vengono valutati. Nel machine learning standard, in genere fai uno split casuale dei tuoi dati di training e di testing. Ma in chimica, il random splitting fa sì che i modelli memorizzino i dati di training anziché imparare la fisica reale. Per risolvere questo problema, DeepChem fornisce degli splitter specializzati. Ad esempio, uno scaffold splitter separa le molecole in base alla loro struttura bidimensionale di base. Questo assicura che i tuoi dati di testing rappresentino famiglie chimiche completamente nuove, costringendo il modello a dimostrare che generalizza effettivamente su composti mai visti. Una volta che i tuoi dati sono preparati e splittati, DeepChem fornisce un'intera suite di modelli pre-built su misura per questi dataset. Passi i tuoi oggetti scientifici al featurizer, DeepChem li converte, gestisce gli split, li passa al layer sottostante di PyTorch o TensorFlow, e restituisce in output una prediction. Il vero potere di DeepChem è che codifica la domain knowledge direttamente nella tua data pipeline, permettendoti di concentrarti puramente sulla scoperta scientifica anziché sul plumbing strutturale del machine learning. Se vuoi aiutare a mandare avanti lo show, puoi cercare DevStoriesEU su Patreon. Questo è tutto per questo episodio. Grazie per l'ascolto, e continua a sviluppare!
2

Gestire i Dataset Scientifici

3m 34s

Esploriamo l'astrazione Dataset di DeepChem per la gestione di dati scientifici su larga scala. Scoprite le differenze fondamentali tra NumpyDataset e DiskDataset per la gestione della memoria out-of-core.

Download
Ciao, sono Alex di DEV STORIES DOT EU. Mastering DeepChem, episodio 2 di 15. Il più grande bottleneck nel machine learning scientifico non è quasi mai l'architettura del modello. È cercare di caricare file enormi senza mandare in crash la tua RAM. Gestire i Dataset scientifici è il modo in cui superi questo limite di memoria. Quando passi a DeepChem, l'istinto comune è quello di caricare tutto in un DataFrame Pandas. I DataFrame sono ottimi per i dati tabellari bidimensionali. Ma il machine learning scientifico richiede spesso array multidimensionali, task di predizione multipli e simultanei, e l'importanza del sample per ogni task. DeepChem usa la sua astrazione Dataset perché lega nativamente le feature, le label multi-task e i sample weight in un formato rigoroso che i modelli possono processare in modo efficiente. Ogni oggetto Dataset in DeepChem garantisce la presenza di quattro array paralleli. Primo, hai X, che contiene le tue feature numeriche. Secondo, hai y, che contiene le tue label o i target che stai cercando di predire. Terzo, hai w, l'array dei weight. Ed è qui che la cosa si fa interessante. I dataset scientifici sono spesso sparsi. Potresti avere dati sperimentali che dimostrano che una molecola è efficace contro un target, ma nessun dato sulla sua tossicità per il fegato. Invece di scartare completamente la molecola o inventare una label fittizia, imposti il weight per il task mancante a zero. Il modello impara dai dati che hai e ignora i gap. Infine, hai l'array ids, che memorizza un identificatore univoco per ogni sample, come una stringa SMILES chimica. Avere un formato standardizzato è utile, ma la vera potenza dell'astrazione Dataset è come gestisce la memoria di sistema. DeepChem offre due modi principali per salvare questi quattro array. Se il tuo dataset è abbastanza piccolo da stare nella memoria di sistema, usi un NumpyDataset. Sotto il cofano, questo tiene semplicemente degli array NumPy standard in RAM. Offre un accesso estremamente veloce ed è ideale per fare prototyping o per lavorare con collezioni più piccole di molecole. Il limite del NumpyDataset diventa ovvio quando hai a che fare con dati scientifici del mondo reale. Supponi di lavorare con un dataset da 100 gigabyte di strutture cristalline tridimensionali dense. Tentare di caricarlo in array in-memory standard manderà istantaneamente in crash una macchina tipica. Per risolvere questo problema, DeepChem fornisce il DiskDataset. Un DiskDataset fa esattamente quello che suggerisce il nome. Salva gli array X, y, w e ids su file multipli più piccoli, o shard, direttamente sul tuo hard drive. Tu specifichi una data directory, e DeepChem gestisce lo storage. Quando addestri un modello, il DiskDataset carica in RAM solo il batch di dati corrente. Una volta che il modello processa quel batch, la memoria viene liberata per il successivo. La transizione tra questi due formati è completamente trasparente per il resto del tuo codice. Puoi scrivere un training loop, testarlo in locale usando un piccolo NumpyDataset, e poi fare il deploy di quello stesso identico codice su un cluster che punta a un enorme DiskDataset. Il modello chiede semplicemente al dataset il batch successivo, e il dataset gestisce se quel batch arriva dalla RAM o viene letto in streaming dal disco. Progettare le tue data pipeline attorno a questo streaming out-of-core fin dal primo giorno garantisce che la tua infrastruttura sopravviverà al salto da poche migliaia di record sperimentali a milioni di strutture generate. Grazie per l'ascolto, happy coding a tutti!
3

I Benchmark di MoleculeNet

4m 11s

Scoprite MoleculeNet, la principale suite di benchmark curata all'interno di DeepChem. Discuteremo di come la standardizzazione di dataset come Tox21 e QM9 acceleri la chimica computazionale.

Download
Ciao, sono Alex di DEV STORIES DOT EU. Mastering DeepChem, episodio 3 di 15. Leggi un paper che afferma che una nuova graph neural network raggiunge risultati state-of-the-art sulle proprietà chimiche. Ma se guardi attentamente, scopri che hanno utilizzato un data split custom, un dataset proprietario e una metrica oscura, rendendo la loro affermazione matematicamente priva di significato. Il confronto standardizzato è l'unico modo in cui avviene il progresso scientifico e, nella chimica computazionale, questo standard è la benchmark suite MoleculeNet. Un errore comune è pensare che MoleculeNet sia solo un repository statico. Non è una cartella scaricabile di file CSV su un server che devi parsare e pulire da solo. È una suite di dataset curata e profondamente integrata, incorporata direttamente in DeepChem tramite il modulo dc dot molnet. Funziona come l'ImageNet del machine learning molecolare. Fornisce un set condiviso di task, split standardizzati e baseline valutate in diversi domini. La suite categorizza i suoi dati in aree scientifiche specifiche per testare diverse capacità di modellazione. Hai dataset di meccanica quantistica, come QM9, che contiene proprietà geometriche ed energetiche per piccole molecole. Hai dataset di chimica fisica per prevedere la solubilità o l'energia libera di idratazione. E hai dataset di biofisica e fisiologia, inclusi benchmark di tossicità come Tox21, che misura come migliaia di sostanze chimiche ambientali interagiscono con specifici pathway biologici. Vediamo uno scenario pratico. Hai appena progettato un nuovo modello di previsione della tossicità e devi dimostrare matematicamente che supera le baseline precedenti. Non devi cercare i dati grezzi di Tox21, gestire i valori mancanti o scrivere un parser custom. Invece, chiami la funzione load tox 21 dal modulo dc dot molnet. È qui che la cosa si fa interessante. Quando invochi una funzione load in MoleculeNet, non restituisce semplicemente testo grezzo. Elabora i dati dinamicamente utilizzando un featurizer che specifichi negli argomenti, come circular fingerprint o strutture a grafo. La funzione in genere restituisce una tuple contenente tre elementi principali. Primo, ti fornisce una lista dei nomi dei task. Per Tox21, si tratta dei dodici target biologici specifici che stai cercando di prevedere. Secondo, restituisce il dataset stesso, già perfettamente partizionato in subset di training, validation e test. Terzo, fornisce i transformer utilizzati per normalizzare o scalare i dati durante la fase di caricamento. Prendi quel training set di Tox21 pre-splittato, lo passi al tuo nuovo modello e poi valuti le previsioni rispetto al test set. Poiché tutti gli altri ricercatori utilizzano esattamente questa stessa API e pipeline di featurization, il tuo punteggio receiver operating characteristic finale può essere confrontato direttamente e in modo equo con le baseline pubblicate. MoleculeNet standardizza anche il modo in cui valuti la generalizzazione attraverso le strategie di split. L'API supporta diversi modi per dividere i tuoi dati. Anche se puoi usare un random split di base, la chimica spesso richiede uno scaffold split. Uno scaffold split separa le molecole in base alle loro strutture bidimensionali di base. Questo forza il test set a contenere framework molecolari che il modello non ha mai visto durante il training. Testa se il tuo modello ha effettivamente imparato le regole chimiche sottostanti, anziché limitarsi a memorizzare piccole variazioni. Di default, le funzioni load applicano il metodo di split che ha più senso dal punto di vista scientifico per quello specifico dataset. La parte più difficile del machine learning applicato non è scrivere l'architettura del modello, è dimostrare che il modello generalizza effettivamente su dati mai visti senza data leakage. MoleculeNet ti offre il playground rigoroso e standardizzato necessario per rendere valide queste dimostrazioni. Questo è tutto per questo episodio. Grazie per l'ascolto e continua a sviluppare!
4

Feature Engineering per le Molecole

4m 00s

Scoprite come DeepChem traduce le strutture chimiche in numeri leggibili dalle macchine utilizzando i Featurizers. Esploriamo il metodo CircularFingerprint per mappare le stringhe SMILES in bit vectors.

Download
Ciao, sono Alex di DEV STORIES DOT EU. Mastering DeepChem, episodio 4 di 15. Una rete neurale non può digerire una struttura chimica disegnata su una lavagna. Anche se scrivi quella struttura come una string di testo, gli algoritmi di machine learning standard non riescono comunque a leggerla. Hanno bisogno che i dati siano pre-masticati in array numerici. Il ponte tra una rappresentazione chimica e un modello matematico è la Feature Engineering per le molecole. In chemoinformatica, spesso rappresentiamo le molecole come string SMILES. Sono sequenze di caratteri che definiscono atomi e legami. Un anello di carbonio diventa uno specifico pattern di testo. Ma se provi a passare una string grezza a una Random Forest o a una Support Vector Machine, fallirà. Un modello matematico richiede un vettore numerico a lunghezza fissa come input. Trasformare quel testo chimico in un array di numeri è ciò che chiamiamo featurization. DeepChem gestisce questo passaggio con un set dedicato di classi chiamate featurizer. Prima di vedere come DeepChem fa questo, c'è un malinteso comune da chiarire. Quando senti parlare di generare una rappresentazione vettoriale del testo, pensi subito ai learned embedding, come quelli usati nei moderni language model. I chemical fingerprint non sono learned embedding. Non ci sono pesi da aggiornare e non ci sono reti neurali coinvolte nella creazione della feature stessa. Un fingerprint è un algoritmo di hashing deterministico. Se elabori l'esatta stessa molecola su due macchine diverse, otterrai l'esatto stesso array di uno e zeri. Il featurizer più comune che userai per i modelli di baseline in DeepChem è il Circular Fingerprint. Questo implementa un metodo noto come Extended Connectivity Fingerprints. Ecco come funziona la logica. L'algoritmo analizza ogni atomo pesante nella tua molecola. Da ciascun atomo, si irradia verso l'esterno in cerchio, analizzando gli atomi e i legami vicini fino a un raggio specifico. Puoi controllare questo raggio, ma guardare a due legami di distanza è la pratica standard. Cattura questi frammenti strutturali locali, li passa attraverso una funzione di hash e li mappa a un indice specifico in un array a lunghezza fissa. Il risultato è un bit vector. Un uno a un indice specifico significa che una particolare sottostruttura chimica è presente. Uno zero significa che è assente. Immagina di avere una lista di string SMILES che rappresentano centinaia di piccole molecole simili a farmaci. Vuoi addestrare un modello Random Forest per prevedere la loro tossicità. Per prima cosa, inizializzi la classe CircularFingerprint in DeepChem. La configuri per avere un output di dimensione 1024. Questa è la parte che conta. Ogni singola molecola, indipendentemente dal fatto che abbia dieci o cinquanta atomi, verrà convertita in un array di esattamente 1024 bit. Poi passi la tua lista di string SMILES al metodo featurize di questa classe. L'algoritmo elabora ogni string in modo indipendente e restituisce una matrice bidimensionale. Le righe rappresentano le tue molecole e le 1024 colonne rappresentano la presenza o l'assenza di specifiche sottostrutture. Poiché l'output è una semplice matrice numerica standard, non sei più vincolato a strumenti specifici per la chimica. Puoi passare direttamente questa matrice alle librerie standard di machine learning. Poiché i fingerprint si basano su hash deterministici a lunghezza fissa anziché su semantiche apprese, possono verificarsi delle collisioni, il che significa che due diversi frammenti strutturali complessi potrebbero occasionalmente mappare sullo stesso identico bit. Nonostante ciò, rimangono la baseline più veloce e affidabile per trasformare la chimica astratta in matematica concreta. Questo è tutto per questo episodio. Grazie per l'ascolto, e continua a costruire!
5

Graph Convolution Featurizers

3m 57s

Andiamo oltre i semplici bit vectors ed esploriamo come DeepChem rappresenta le molecole come grafi matematici. Tratteremo ConvMolFeaturizer e MolGraphConvFeaturizer.

Download
Ciao, sono Alex di DEV STORIES DOT EU. Mastering DeepChem, episodio 5 di 15. Se rappresenti un composto chimico come una semplice string di caratteri, perdi completamente la topologia fisica che determina come interagisce con il mondo. Le molecole non sono frasi lineari, sono strutture interconnesse. Per preservare questa realtà strutturale nei tuoi dataset, hai bisogno dei Graph Convolution Featurizer. Quando senti la parola convoluzione, potresti immaginare un image model che fa scorrere un filtro su una griglia quadrata e fissa di pixel. Devi abbandonare questo modello mentale. Gli atomi non si trovano su griglie uniformi. Un atomo di carbonio potrebbe connettersi a quattro vicini, mentre uno di ossigeno a due, e uno di idrogeno a uno solo. Le graph operations gestiscono questa connettività arbitraria e irregolare, e i graph featurizer fanno da ponte per tradurre i dati chimici grezzi in un formato che queste operazioni possono consumare. DeepChem offre due tool principali per farlo. Il primo è il ConvMolFeaturizer. Questa funzione analizza una molecola e genera un feature vector iniziale per ogni singolo atomo. Calcola proprietà come il tipo di elemento, il numero totale di atomi pesanti connessi, la valenza, la carica formale, la carica parziale e l'ibridazione orbitale. Raggruppa queste feature a livello atomico in un oggetto specifico chiamato ConvMol. Questo formato è stato progettato per dare in pasto i dati direttamente alle graph convolution network native di DeepChem. Il secondo tool è il MolGraphConvFeaturizer. Questo è l'approccio più moderno ed è estremamente versatile perché restituisce in output un oggetto GraphData standard. Questo lo rende la scelta ideale se stai passando dati a framework generici come PyTorch Geometric o DGL. Vediamo come il MolGraphConvFeaturizer gestisce un semplice anello benzenico. Il benzene è formato da sei atomi di carbonio disposti in un esagono continuo. Il featurizer elabora questa struttura suddividendola in node ed edge. Per prima cosa, crea i node. Per ciascuno dei sei atomi di carbonio, calcola un array numerico di proprietà atomiche, registrando lo stato di ibridazione e la carica parziale di quello specifico atomo. Questi sei array individuali vengono impilati insieme per formare la node feature matrix. Successivamente, mappa gli edge, che corrispondono ai legami chimici. Costruisce un edge index, che è semplicemente una lista di coppie di coordinate che identificano esattamente quale atomo è connesso a quale. Genera anche le edge feature. Per ogni legame in quell'edge index, il featurizer registra i dati strutturali. Controlla se il legame è singolo, doppio, triplo o aromatico. Dato che stiamo guardando il benzene, il featurizer codifica esplicitamente la natura aromatica di questi legami, insieme al fatto che il legame sia coniugato o faccia parte di un sistema ad anello. Infine, impacchetta la node feature matrix, l'edge index e le edge feature in un singolo oggetto GraphData. Ora hai un grafo matematico che conserva sia le caratteristiche atomiche che le esatte connessioni topologiche della molecola originale, bypassando completamente i limiti delle rappresentazioni flat vector. Ecco il punto chiave. La qualità di una graph neural network è interamente limitata dalla ricchezza strutturale della data structure che le dai in pasto. Utilizzando correttamente un graph featurizer, ti assicuri che il tuo modello impari effettivamente la chimica sottostante, invece di tentare di memorizzare un riassunto unidimensionale. Grazie per aver passato qualche minuto con me. Alla prossima, stammi bene.
6

Splitting Scientificamente Consapevole

4m 09s

Scoprite perché i classici random splits falliscono sui dataset scientifici. Esploriamo RandomStratifiedSplitter e come validare correttamente i modelli su dati multi-task fortemente sbilanciati.

Download
Ciao, sono Alex di DEV STORIES DOT EU. Mastering DeepChem, episodio 6 di 15. Crei un modello su un nuovo dataset chimico, esegui la validation e ottieni un'accuratezza del novantanove percento. Fai il deploy, e fallisce immediatamente nel mondo reale. Le tue metriche di validation ti hanno mentito con assoluta sicurezza a causa di come hai diviso i dati. Oggi parliamo di Scientifically Aware Splitting, e in particolare confronteremo il Random Splitter di default con il Random Stratified Splitter. Potresti pensare che fare lo split dei dati in DeepChem sia esattamente come usare una semplice funzione di train-test split di una libreria di machine learning generica come Scikit-Learn. Questo è un errore comune. Gli splitter generici funzionano bene per array semplici e single-label. Gli splitter di DeepChem sono progettati per gestire nativamente ambienti multi-task complessi, label booleane sparse e le specifiche strutture dati che DeepChem utilizza per memorizzare le molecole. Iniziamo con l'approccio di default: il Random Splitter. Questo strumento si comporta esattamente come suggerisce il nome. Prende il tuo dataset caricato e assegna i composti chimici ai set di training, validation e test in modo uniformemente casuale. Se lavori con un dataset perfettamente bilanciato, in cui i tuoi composti attivi e inattivi sono presenti in egual misura, questo random shuffling funziona bene. Ma i dati scientifici non sono praticamente mai bilanciati. Considera un dataset sulla tossicità come Tox21. Nel mondo reale, la stragrande maggioranza dei composti chimici che testi è sicura, e i composti tossici sono relativamente rari. Supponi che solo l'uno percento dei composti nel tuo dataset sia classificato come tossico. Questo è un grave class imbalance. Se passi questo dataset attraverso un Random Splitter standard, la pura probabilità statistica dice che il tuo validation o test set potrebbe finire con zero esempi tossici. Se il tuo test set è composto interamente da composti sicuri, un modello che si limita a indovinare "sicuro" per ogni singolo input otterrà un punteggio del cento percento. Finirai con un punteggio matematicamente perfetto per un modello completamente inutile. È qui che il Random Stratified Splitter diventa indispensabile. Invece di buttare ciecamente i composti in dei bucket, la stratificazione forza lo split a rispettare la distribuzione effettiva delle tue label. Il Random Stratified Splitter analizza le proprietà del tuo dataset prima di dividere qualsiasi cosa. Se i tuoi dati complessivi contengono esattamente l'uno percento di composti tossici e il novantanove percento di composti sicuri, lo splitter garantisce che il tuo training set abbia un rapporto di uno a novantanove, il tuo validation set abbia un rapporto di uno a novantanove, e il tuo test set mantenga esattamente la stessa proporzione. Ecco il punto chiave. I dataset di DeepChem solitamente implicano il multi-task learning. Questo significa che un singolo composto chimico non viene valutato solo per una proprietà, ma spesso per decine di diversi test biologici contemporaneamente. Le label in questi task sono molto sparse. Potresti avere solo una manciata di hit positivi per uno specifico test di tossicità su diecimila righe di dati. Il Random Stratified Splitter naviga questa matrice multidimensionale. Garantisce che quei rarissimi hit positivi siano distribuiti equamente tra i tuoi split. Ogni sottoinsieme dei tuoi dati riceve una porzione rappresentativa dei composti attivi, impedendo a qualsiasi singolo task di perdere la sua minority class durante lo split. Senza questo meccanismo, la valutazione del tuo modello si basa interamente sulla fortuna. Per dataset scientifici multi-task fortemente sbilanciati, la stratificazione non è un'ottimizzazione opzionale. È un requisito fondamentale per dimostrare che il tuo modello ha effettivamente imparato la chimica sottostante, invece di sfruttare semplicemente un blind spot statistico. Grazie per aver passato qualche minuto con me. Alla prossima, stammi bene.
7

Domare i Dati con i Transformers

3m 53s

Scoprite come normalizzare distribuzioni scientifiche irregolari utilizzando i Transformers di DeepChem. Discuteremo di NormalizationTransformer e MinMaxTransformer per un addestramento stabile.

Download
Ciao, sono Alex di DEV STORIES DOT EU. Mastering DeepChem, episodio 7 di 15. I dati scientifici reali sono selvaggi, sbilanciati e distribuiti su range numerici enormi. Se dai in pasto questi valori sperimentali grezzi direttamente a una neural network, stai praticamente pregando di avere gradienti non convergenti durante la backpropagation. Per risolvere questo problema, devi domare le tue distribuzioni prima che tocchino il tuo model, ed è qui che entrano in gioco i Transformer di DeepChem. Quando senti la parola transformer nel machine learning moderno, la tua mente salta probabilmente agli attention mechanism, ai large language model o a BERT. Dimentica tutto questo per questo episodio. Nell'ecosistema di DeepChem, un Transformer è semplicemente una utility di data preprocessing. Non è un layer di una neural network. È un oggetto che prende un dataset e ne modifica le feature, le label o i weight per adattarli ai rigidi vincoli matematici degli algoritmi di machine learning. Prendi uno scenario in cui stai predicendo la solubilità molecolare sperimentale. I tuoi training data grezzi potrebbero contenere valori target che vanno da minuscoli numeri negativi a decine di migliaia. I weight delle neural network generalmente si inizializzano come numeri molto piccoli. Se le tue input feature o le tue target label contengono un valore di quarantamila, il calcolo della loss risultante genera un gradiente enorme. I weight della rete oscilleranno selvaggiamente durante l'update step, non riuscendo a convergere su una soluzione. Devi scalare i dati. Un modo per gestire la cosa è il MinMax Transformer. Questa utility scansiona il tuo intero dataset, individua i valori minimi e massimi assoluti per le tue feature o label specificate, e schiaccia l'intera distribuzione in un range rigoroso da zero a uno. Il valore più basso diventa zero, il più alto diventa uno, e tutto il resto cade proporzionalmente nel mezzo. Inizializzi il transformer passandogli il tuo target dataset in modo che possa calcolare questi limiti. Poi, chiami il suo metodo transform, che restituisce in output un nuovo dataset con i numeri appena scalati. Ora i gradienti rimangono stabili. Schiacciare i dati tra zero e uno non è sempre l'ideale, in particolare se il tuo dataset contiene outlier enormi. Un outlier estremo costringerà il resto dei tuoi data point normali a comprimersi in una minuscola e indistinguibile porzione di quel range da zero a uno. Per questo, usi il Normalization Transformer. Invece di imporre limiti rigidi, sposta la tua intera distribuzione in modo che la media si trovi esattamente a zero, e scala la dispersione in modo che la deviazione standard sia uno. Questo centra i tuoi dati perfettamente, allineandoli con lo sweet spot operativo della maggior parte delle activation function delle neural network. Ecco il punto chiave. Scalare le input feature è una strada a senso unico, ma trasformare le tue label crea un problema secondario. Se il tuo model si addestra su target di solubilità normalizzati, anche le sue predizioni finali saranno normalizzate. Un valore predetto di zero virgola quattro è matematicamente corretto, ma praticamente inutile per un chimico che si aspetta una misurazione nel mondo reale. DeepChem risolve questo problema mantenendo lo stato delle metriche di scaling all'interno dell'oggetto transformer. Una volta che il tuo model genera una predizione normalizzata, passi quell'output al metodo untransform dello stesso identico transformer. Inverte l'aritmetica, mappando la predizione scalata direttamente alla sua unità scientifica originale. Normalizzare i tuoi dati non è uno step di ottimizzazione opzionale nel deep learning, è un requisito strutturale per la stabilità del training. Grazie per l'ascolto, happy coding a tutti!
8

L'API Model e i Wrapper per Scikit-Learn

3m 15s

Esplorate l'interfaccia unificata Model di DeepChem e come wrappare gli algoritmi tradizionali usando SklearnModel. Scoprite perché a volte la soluzione migliore non è una rete neurale profonda.

Download
Ciao, sono Alex di DEV STORIES DOT EU. Mastering DeepChem, episodio 8 di 15. A volte la soluzione migliore a un problema scientifico non è una rete neurale enorme che richiede una settimana di training. Spesso, un robusto random forest è tutto ciò che ti serve. Ma passare da un algoritmo tradizionale a una complessa pipeline di deep learning di solito significa riscrivere tutto il tuo codice di data handling. Questo episodio copre la Model API e i wrapper di Scikit-Learn, che risolvono esattamente questo problema. DeepChem usa una classe base unificata chiamata semplicemente Model. Questa classe standardizza il modo in cui fai il training e valuti gli algoritmi in tutta la libreria. La logica di base si affida a due metodi principali. Usi fit per fare il training dell'algoritmo, e usi predict per generare output su nuovi dati. La caratteristica distintiva di questa interfaccia è che questi metodi si aspettano oggetti Dataset di DeepChem come input. Non passi array o dataframe grezzi direttamente al modello. Il Dataset fa da contenitore standard per le tue feature, label e pesi, e la Model API sa esattamente come leggerlo. Potresti pensare che una libreria specializzata come DeepChem scriva le proprie implementazioni custom per gli algoritmi di machine learning di base. Non lo fa. DeepChem non reinventa Scikit-Learn. Invece, fornisce un adapter chiamato SklearnModel. Questo wrapper prende qualsiasi estimator standard di Scikit-Learn e gli dà l'interfaccia Model di DeepChem. Prendi uno scenario in cui vuoi prevedere le proprietà fisiche di un nuovo materiale. Per prima cosa, importi un random forest regressor standard direttamente da Scikit-Learn e lo inizializzi. Poi, passi questo regressor standard nel wrapper SklearnModel di DeepChem. Ora hai un oggetto compatibile con DeepChem. Per farne il training, chiami fit sul modello wrappato, passandogli il tuo Dataset di DeepChem. Dietro le quinte, il wrapper estrae automaticamente le feature matrix, i target e i sample weight dal Dataset, e li passa all'algoritmo Scikit-Learn sottostante. Quando è il momento di fare i test, chiami predict su un nuovo Dataset, e il wrapper formatta di nuovo l'output in un array standard. Ecco il punto chiave. Dato che il wrapper SklearnModel espone esattamente gli stessi metodi fit e predict di una deep neural network creata nativamente in DeepChem, puoi scambiare l'algoritmo sottostante senza toccare la tua data pipeline. Puoi stabilire rapidamente una baseline con un modello di machine learning tradizionale, e poi passare senza problemi a una rete neurale complessa semplicemente cambiando la singola riga di codice che inizializza il modello. Il data loading, il training loop e gli step di valutazione rimangono identici. Il concetto fondamentale è che la Model API disaccoppia la tua data ingestion dalla scelta dell'algoritmo, lasciandoti libero di testare diversi approcci matematici senza dover riscrivere continuamente il glue code. Se trovi utili questi episodi e vuoi supportare lo show, puoi cercare DevStoriesEU su Patreon. Per questo episodio è tutto. Alla prossima!
9

Modelli Specializzati per Grafi Molecolari

3m 54s

Immergetevi nelle architetture di deep learning create appositamente per la chimica. Tratteremo le Graph Convolutional Networks (GCNModel) e le Message Passing Neural Networks (MPNNModel).

Download
Ciao, sono Alex di DEV STORIES DOT EU. Mastering DeepChem, episodio 9 di 15. Non puoi semplicemente dare in pasto una molecola a una neural network standard progettata per le immagini. Le molecole non sono griglie rigide di pixel; sono reti complesse di atomi con dimensioni e connessioni variabili. Se le forzi in una griglia standard, distruggi la chimica strutturale che le rende uniche. Per risolvere questo problema, usiamo degli Specialized Molecular Graph Models. Questi modelli sono progettati specificamente per fare l'ingest nativamente dei featurized graph generati nei tuoi step di preprocessing precedenti. A volte chi ascolta li confonde con le tradizionali Convolutional Neural Network. Una CNN standard fa scorrere un filtro di dimensioni fisse su una griglia bidimensionale. Ma una molecola non ha un angolo in alto a sinistra o una risoluzione fissa. Invece, i graph model specializzati operano dinamicamente sui legami chimici come edge e sugli atomi come node. Non gli importa delle coordinate della griglia. Si basano interamente sulla connettività. DeepChem fornisce alcune architetture specifiche per questo. La prima è il GCNModel, che sta per Graph Convolutional Network. Pensa a una GCN come a un modo per raccogliere i neighborhood atomici locali. Per ogni atomo nella tua molecola featurized, la GCN guarda i suoi neighbor immediati. Prende le feature di quegli atomi neighbor, come il loro tipo di elemento o lo stato di ibridazione, e fa un pooling per aggiornare le feature dell'atomo originale. Ripete questo processo per alcuni layer. Alla fine, ogni atomo ha una rappresentazione matematica che include il contesto del suo ambiente chimico circostante. Il modello poi aggrega tutte queste rappresentazioni degli atomi in un singolo vettore matematico per fare la prediction di una proprietà chimica generale, come la tossicità o la solubilità. Questo copre le GCN, che si concentrano principalmente sull'aggregazione dei dati dei node. Ma che dire dei legami stessi? Un doppio legame si comporta in modo molto diverso da un legame singolo, e a volte hai bisogno che la network pesi molto questa differenza. È qui che entra in gioco l'MPNNModel, o Message Passing Neural Network. Le Message Passing Neural Network non si limitano a guardare una molecola. Simulano matematicamente come l'informazione fluisce tra i neighbor atomici. Diciamo che stai facendo il training di un MPNNModel per predire le proprietà quantomeccaniche di una molecola. Per farlo in modo accurato, la natura esatta dei legami conta tantissimo. In una MPNN, sia gli atomi che i legami contengono dati espliciti sulle feature. Durante lo step di training, il modello esegue una fase di message passing. Ogni atomo genera un messaggio basato sul suo stato attuale e lo invia ai suoi neighbor lungo i legami di connessione. Cosa fondamentale, il legame stesso modifica quel messaggio. Un messaggio che viaggia su un legame aromatico rigido verrà calcolato in modo diverso da uno che viaggia su un legame singolo flessibile. Quando un atomo riceve messaggi da tutti i suoi neighbor, usa una piccola neural network interna per aggiornare il proprio stato. In sostanza, calcola di essere un atomo di carbonio attualmente influenzato da un atomo di ossigeno su un doppio legame e da un atomo di idrogeno su un legame singolo. Questo processo itera diverse volte. L'informazione si propaga verso l'esterno, step by step, attraverso l'intera network di legami. Dopo un numero prestabilito di step, il modello raccoglie gli stati finali di tutti gli atomi per fare la sua prediction. Dato che l'MPNN rispetta nativamente la vera struttura chimica, eccelle nel predire comportamenti quantistici complessi che i modelli più semplici si perdono. Ecco l'insight chiave. Non hai bisogno di inventare modi per mappare le molecole in array piatti. Usando i modelli GCN e MPNN, preservi l'esatta topologia atomica dei tuoi dati, permettendo alla network di imparare direttamente dalla chimica stessa. Questo è tutto per questo episodio. Grazie per aver ascoltato, e continua a sviluppare!
10

Valutare i Modelli Scientifici

3m 50s

Scoprite perché l'accuratezza standard fallisce nel ML scientifico. Esploriamo la classe Metric di DeepChem, il Matthews Correlation Coefficient e come valutare modelli multi-task sbilanciati.

Download
Ciao, sono Alex di DEV STORIES DOT EU. Mastering DeepChem, episodio 10 di 15. Se stai facendo screening di molecole per un nuovo farmaco, forse solo una su diecimila funziona davvero. Un modello che si limita a prevedere che ogni molecola sia inutile raggiungerà un tasso di accuracy del 99,99%, senza scoprire assolutamente nulla. Ecco perché l'accuracy di base è spesso un pessimo indicatore per la scoperta scientifica, ed è esattamente per questo che dobbiamo parlare della valutazione dei modelli scientifici. Nelle scienze, i dataset sono quasi sempre fortemente sbilanciati. Considera di creare un classifier per prevedere l'inibizione dell'HIV. La stragrande maggioranza dei composti chimici testati non inibisce il virus. I farmaci candidati attivi sono estremamente rari. Se utilizzi l'accuracy standard per valutare il tuo modello, i risultati ti inganneranno. Il modello impara semplicemente a indovinare la majority class, ottenendo punteggi molto alti pur non riuscendo a trovare un singolo farmaco efficace. Per risolvere questo problema, hai bisogno di metriche che mettano in luce questo comportamento. La prima è il recall score. Il recall misura quanti dei composti effettivamente attivi il tuo modello ha identificato correttamente. Penalizza severamente i modelli che si perdono le vere scoperte. Tuttavia, il recall da solo non fornisce un quadro completo. Un modello naive potrebbe semplicemente ipotizzare che ogni singolo composto sia attivo, ottenendo un recall score perfetto ma generando migliaia di falsi positivi. È qui che il coefficiente di correlazione di Matthews, o MCC, diventa essenziale. L'MCC è una misura bilanciata che valuta tutte e quattro le categorie dei tuoi risultati. Considera simultaneamente i veri positivi, i veri negativi, i falsi positivi e i falsi negativi. Produce un punteggio compreso tra -1 e +1. Un punteggio di +1 indica una prediction perfetta, zero significa che il modello non è migliore del random guessing e -1 indica una totale discordanza. L'MCC genera un punteggio elevato solo se il modello prevede con precisione sia i composti attivi rari che quelli inattivi comuni. Penalizza brutalmente un modello che sceglie la strada più facile, indovinando la majority class. Potresti chiederti perché non puoi semplicemente importare queste esatte funzioni metriche direttamente da scikit-learn. Scikit-learn offre implementazioni perfettamente valide sia per il recall che per l'MCC. Il problema si riduce alla data shape. I modelli DeepChem eseguono spesso il multi-task learning, prevedendo contemporaneamente decine di diverse proprietà chimiche. Le funzioni standard di scikit-learn si aspettano dei semplici flat array. Se gli passi gli output complessi e multidimensionali di DeepChem, andranno in crash o calcoleranno il punteggio in modo errato. DeepChem risolve questa incompatibilità con la sua classe Metric. Questa classe funge da wrapper per le normali scoring function matematiche. Quando istanzi una Metric di DeepChem, le passi la raw scoring function che vuoi usare, come la funzione MCC di scikit-learn. Il wrapper Metric di DeepChem si occupa del resto. Gestisce il batching dei tuoi dati e allinea le true label con le prediction del tuo modello sull'intero dataset. Ecco il punto chiave. La classe Metric si basa fortemente su un meccanismo interno chiamato normalize prediction shape. Analizza i tuoi dati per determinare se il tuo modello sta producendo in output un single task, multiple task o vettori di probabilità one-hot encoded. Successivamente, fa il reshape di questi output multidimensionali raw negli esatti flat array richiesti dalle funzioni matematiche sottostanti. Non devi scrivere loop manuali per fare slice e unpack dei tuoi array multi-task prima di farne lo scoring. Il wrapper gestisce automaticamente la complessità strutturale, in modo che la matematica funzioni esattamente come previsto. Quando valuti un modello scientifico su un dataset sbilanciato, il tuo compito principale è dimostrare che il modello non stia barando sulla baseline, quindi scegli una metrica che costringa il modello a imparare davvero la chimica rara. Grazie per aver passato qualche minuto con me. Alla prossima, stammi bene.
11

Hyperparameter Tuning Intelligente

3m 50s

Andate oltre la grid search a forza bruta. Scoprite come utilizzare GaussianProcessHyperparamOpt in DeepChem per navigare in modo intelligente in spazi di iperparametri complessi.

Download
Ciao, sono Alex di DEV STORIES DOT EU. Mastering DeepChem, episodio 11 di 15. Testare in modo esaustivo ogni possibile combinazione di learning rate, layer size e penalty per un heavy model potrebbe richiedere settimane o addirittura mesi. Ma cosa succederebbe se il tuo codice potesse indovinare in modo intelligente dove si trova la migliore configurazione del modello dopo solo pochi trial? Oggi esamineremo l'hyperparameter tuning intelligente in DeepChem. Prima di analizzare i metodi di ricerca, chiariamo un equivoco comune. DeepChem fornisce una classe base chiamata HyperparamOpt. Questo non è il tuo vero e proprio training loop del modello. È un optimization loop esterno. Devi fornire una funzione chiamata model builder. Questa funzione sa come costruire il tuo modello specifico dato un set di parametri. La classe HyperparamOpt fa da wrapper a questo builder, fornendogli diversi set di parametri, facendo il training del modello risultante su un dataset, valutandolo con una metrica specifica e restituendo la configurazione migliore. Il modo più semplice per esplorare questo parameter space è utilizzare GridHyperparamOpt. Gli passi elenchi discreti di valori. Ad esempio, tre learning rate, quattro diversi numeri di estimator e due tipi di penalty. La grid search adotta l'approccio brute-force. Valuta ogni singola combinazione una per una. Se hai un modello piccolo e un parameter space ridotto, la grid search va bene. Ma non appena aggiungi più parametri, ti scontri con un'esplosione combinatoria. Se la tua grid di parametri crea mille combinazioni e ognuna richiede un'ora di training, la grid search non è più praticabile. È qui che entra in gioco GaussianProcessHyperparamOpt. Invece di una grid brute-force, esegue una ricerca probabilistica utilizzando una libreria di backend chiamata pyGPGO. Definisci range continui o scelte categoriche per i tuoi parametri, anziché elenchi fissi. Il Gaussian Process tratta la valutazione del modello come una funzione black-box. Il suo obiettivo è trovare la metrica di performance massima con il minor numero possibile di valutazioni. Ecco l'intuizione chiave. Il Gaussian Process impara man mano che procede. Quando testa una specifica combinazione di learning rate e penalty, analizza l'evaluation score risultante. Successivamente, crea una mappa matematica del parameter space, prevedendo dove i punteggi potrebbero essere più alti e dove le sue previsioni sono più incerte. Per il suo trial successivo, non si limita a scegliere l'elemento seguente in un elenco. Calcola un'acquisition function per decidere l'ipotesi successiva più intelligente. Bilancia l'esplorazione di zone sconosciute del tuo parameter space con lo sfruttamento delle aree che hanno già prodotto buoni score. Quindi, in uno scenario di tuning di un heavy model, passi il tuo model builder a GaussianProcessHyperparamOpt. Definisci un search space che detta i limiti superiore e inferiore per il learning rate e il numero di estimator. Indichi all'optimizer di eseguire venti trial. Invece di procedere alla cieca attraverso mille combinazioni, l'algoritmo esplora lo spazio, si accorge che certi learning rate offrono prestazioni scadenti, evita completamente quel territorio e si concentra sulla zona ottimale. Risparmi un'enorme quantità di tempo di calcolo. L'aspetto più importante da ricordare qui è di adattare la tua strategia di ricerca al tuo budget computazionale. Usa la grid search quando hai una manciata di valori discreti e tempi di training rapidi, ma quando il training è costoso e il parameter space è vasto, affidati a un Gaussian Process per individuare attivamente il modello migliore. Vorrei prendermi un momento per ringraziarti per averci ascoltato: ci aiuta tantissimo. Buona giornata!
12

Metalearning per Regimi a Pochi Dati

4m 08s

Esplorate il Model-Agnostic Meta-Learning (MAML) in DeepChem. Scoprite come addestrare modelli in grado di adattarsi rapidamente a nuovi e costosi esperimenti scientifici con pochissimi dati.

Download
Ciao, sono Alex di DEV STORIES DOT EU. Mastering DeepChem, episodio 12 di 15. Quando un singolo esperimento biologico costa diecimila dollari, non puoi raccogliere big data. Magari ottieni solo cinque data points per un test completamente nuovo. Il deep learning standard andrebbe immediatamente in overfitting e fallirebbe completamente in questo caso. Quello di cui hai bisogno è un algoritmo progettato specificamente per estrarre il segnale praticamente dal nulla. Questo ci porta al metalearning per i regimi low-data. DeepChem gestisce questo aspetto tramite una classe chiamata MAML, che sta per Model-Agnostic Meta-Learning. In molti ambiti scientifici, in particolare nella drug discovery o nella scienza dei materiali, semplicemente non hai il volume di dati necessario per le reti neurali tradizionali. Sei costretto a operare in un regime low-data, dove il few-shot learning è l'unico approccio praticabile. Molti ingegneri daranno per scontato che il transfer learning standard sia la soluzione. Non lo è. Il transfer learning addestra un modello su un dataset enorme, sperando che le feature statiche apprese forniscano un buon warm-start per un dataset più piccolo. MAML non si limita a fare il warm-start dei pesi. Ottimizza matematicamente la traiettoria del gradiente del modello. Non impara solo dai dati; impara ad adattarsi in modo efficiente a nuovi dati. Come ci riesce? MAML utilizza un loop di ottimizzazione annidato su una distribuzione di task. Durante il training, non passi all'algoritmo un singolo stream continuo di dati. Gli passi dei batch di task distinti. Per ogni task nel batch, l'algoritmo prende una piccolissima quantità di dati. Calcola i gradienti e calcola quali sarebbero i nuovi pesi del modello dopo uno o due step di training standard. Ecco l'intuizione chiave. L'algoritmo non applica ancora in modo permanente quei pesi aggiornati. Invece, prende quei pesi ipotetici e li testa su un secondo set di dati separato, proveniente da quello stesso identico task. Calcola la loss su questo validation set. Poi, calcola il gradiente di quella validation loss rispetto ai pesi iniziali originali, e aggiorna quei pesi originali. La matematica forza il modello a trovare un punto di inizializzazione in cui fare solo pochi step di gradiente produce un calo drastico dell'errore per qualsiasi nuovo task estratto da quel dominio. Applichiamolo a uno scenario concreto. Supponi di avere dati storici provenienti da decine di vecchi test biologici. Vuoi prevedere i risultati di un test nuovissimo e molto costoso, per il quale puoi permetterti di raccogliere solo cinque data points effettivi. In DeepChem, istanzi l'oggetto MAML e gli passi un modello di base. Questo modello di base è chiamato learner. Poi addestri l'algoritmo MAML campionando piccoli task dai tuoi test storici. L'algoritmo si esercita costantemente ad adattarsi. Prende cinque data points dal test A, si aggiorna, verifica il suo errore di previsione su altri dati del test A, e fa la backpropagation del risultato sui pesi iniziali globali. Poi ripete questa identica simulazione per il test B, il test C, e così via. Col tempo, il modello converge su un set ottimale di parametri iniziali per l'intera famiglia di test. Quando il tuo nuovo e costoso test finalmente arriva, prendi quei parametri iniziali ed esegui un passaggio di fine-tuning standard usando i tuoi cinque piccoli data points. Dato che l'ottimizzazione MAML ha allineato la traiettoria del gradiente specificamente per un adattamento rapido, il modello si configura quasi istantaneamente. Ottieni previsioni estremamente accurate per un problema nuovo usando un dataset microscopico. MAML sposta l'obiettivo fondamentale del pre-training dal minimizzare l'errore di previsione sui vecchi dati al massimizzare l'adattabilità sui nuovi dati. Questo è tutto per questo episodio. Grazie per l'ascolto, e continua a costruire!
13

Scoperta delle Binding Pocket

3m 51s

Comprendete la geometria delle interazioni proteina-ligando. Esploriamo il ConvexHullPocketFinder di DeepChem per localizzare algoritmicamente le cavità di legame sulle strutture proteiche 3D.

Download
Ciao, sono Alex di DEV STORIES DOT EU. Mastering DeepChem, episodio 13 di 15. Hai appena mappato la struttura 3D di una proteina virale, ma trovare dove un farmaco terapeutico può effettivamente agganciarsi è come cercare di posizionare un singolo pezzo di un puzzle da diecimila pezzi che fluttua in tre dimensioni. Non puoi semplicemente lanciare una piccola molecola contro una proteina enorme e sperare che si attacchi. Devi prima mappare i solchi strutturali, ed è esattamente a questo che serve la Binding Pocket Discovery. Prima di proseguire, chiariamo un malinteso comune. La pocket discovery non posiziona un farmaco all'interno di una proteina. Esplora solo lo spazio vuoto per trovare potenziali siti di legame. Generare la posizione effettiva della molecola all'interno di quel sito è chiamato pose generation. Questo è uno step completamente separato. Oggi ci interessa solo trovare i parcheggi vuoti. In DeepChem, questo workflow inizia con la base class Binding Pocket Finder. Si tratta di un template astratto. Il suo compito è quello di fornire un'interfaccia standard, prendendo in input una macromolecola 3D e restituendo in output una lista di potenziali pocket. Utilizzando una base class, DeepChem garantisce che, sia che tu usi un algoritmo integrato o che ne scriva uno tuo, la pipeline rimanga coerente. Ma il vero lavoro pesante è svolto da implementazioni specifiche, la più comune delle quali è il Convex Hull Pocket Finder. Il Convex Hull Pocket Finder analizza algoritmicamente la geometria tridimensionale della tua proteina virale. Immagina di avvolgere strettamente l'intera macromolecola con della pellicola trasparente. La pellicola si tende dritta sopra gli spazi vuoti, le fessure e le crepe sulla superficie. Quel confine esterno è il convex hull matematico. Gli spazi vuoti intrappolati tra quel confine esterno piatto e la vera e propria superficie atomica irregolare della proteina sono le tue potenziali binding pocket. Questi sono i solchi vulnerabili in cui un nuovo farmaco potrebbe ancorarsi con successo. Per identificare sistematicamente questi spazi, l'algoritmo divide il volume attorno alla proteina in una fitta griglia tridimensionale. Scansiona questa griglia e identifica i voxel, ovvero minuscole scatole 3D. Cerca i voxel che si trovano all'interno del convex hull ma non contengono atomi della proteina. Misura anche la distanza da queste scatole vuote all'atomo della proteina più vicino. Se una scatola è troppo esposta alla superficie, viene ignorata. Se è sepolta troppo in profondità all'interno del nucleo della proteina, viene anch'essa ignorata. L'algoritmo clusterizza le scatole valide rimanenti per formare le forme continue delle cavità superficiali. Una volta mappata una cavità, il finder genera una bounding box attorno ad essa. Ecco il punto chiave. L'algoritmo non taglia questa bounding box in modo che corrisponda perfettamente alle dimensioni esatte del buco. Aggiunge un livello calcolato di padding attorno ai bordi. Questo margine extra è fondamentale perché le molecole in biologia sono dinamiche. Quando, più avanti nella tua pipeline, passerai queste coordinate della pocket a un algoritmo di docking, quel padding fornirà lo spazio di manovra necessario. Offre allo step successivo abbastanza spazio circostante per calcolare come il farmaco potrebbe torcersi, ruotare o spostarsi mentre si assesta nel solco. Passi la tua proteina virale al Convex Hull Pocket Finder, e lui ti restituisce un array pulito di bounding box con padding. Ora sai esattamente dove si trovano le vulnerabilità strutturali e puoi concentrare le tue risorse computazionali esclusivamente su quelle coordinate specifiche. Se vuoi aiutare a far continuare questi episodi, puoi supportare lo show cercando DevStoriesEU su Patreon. Il padding garantisce che le tue simulazioni di docking a valle non falliscano semplicemente perché hanno sbattuto contro un muro matematico artificiale. Questo è tutto per questo episodio. Grazie per l'ascolto e continua a costruire!
14

Generazione di Pose con Vina e Gnina

4m 26s

Fate il passo successivo nel molecular docking calcolando le pose di legame. Scoprite come VinaPoseGenerator e GninaPoseGenerator valutano le geometrie spaziali per prevedere le interazioni.

Download
Ciao, sono Alex di DEV STORIES DOT EU. Mastering DeepChem, episodio 14 di 15. Hai una proteina target e una potenziale molecola farmacologica, ma sapere che potrebbero interagire è inutile se non sai esattamente come si incastrano fisicamente. Non dobbiamo più indovinare le forme alla cieca. Possiamo sfruttare le Convolutional Neural Network pre-addestrate per prevedere la fisica effettiva delle binding pose. Questa è la Pose Generation con Vina e Gnina. Innanzitutto, chiariamo un equivoco comune. Gli ascoltatori spesso confondono il docking con la Molecular Dynamics. La Molecular Dynamics è una simulazione basata sul tempo che mostra come le molecole si torcono, si ripiegano e vibrano nell'arco di microsecondi. La Pose Generation, o docking, non fa questo. Calcola un'istantanea statica. Calcola la geometria di riposo ottimale di un ligando all'interno di una protein pocket e gli assegna uno score energetico stazionario basato su quella singola posizione. In DeepChem, il lavoro computazionale più pesante per questo processo avviene all'interno della classe PoseGenerator. Il suo compito specifico è calcolare molteplici configurazioni tridimensionali del tuo ligando, chiamate pose, all'interno di una bounding box ristretta sulla proteina. Poi classifica queste pose. L'implementazione standard per questo è il VinaPoseGenerator. Questo fa da wrapper all'engine AutoDock Vina, che si basa su una scoring function empirica. Calcola uno score classico di binding energy valutando le interazioni fisiche come i legami a idrogeno, i contatti idrofobici e la repulsione sterica. Vina testa una configurazione geometrica, calcola la penalità o il reward energetico, regola leggermente gli atomi e riprova. Esplora questo enorme spazio geometrico e restituisce una lista di pose classificate in base alla loro binding energy più bassa. Le formule della fisica classica sono incredibilmente veloci, ma a volte non riescono a valutare correttamente le complesse interazioni molecolari. È qui che entra in gioco il GninaPoseGenerator. GNINA è un upgrade basato sul deep learning. Prende il framework Vina sottostante e valuta le configurazioni utilizzando una Convolutional Neural Network pre-addestrata. Prendi uno scenario in cui stai valutando un nuovo potenziale farmaco antitumorale. Il pose generator calcola 10 diverse configurazioni geometriche di questo farmaco all'interno di una binding pocket target. Invece di limitarsi a sommare i termini della fisica classica, GNINA passa le strutture atomiche tridimensionali di queste 10 pose attraverso la sua neural network. GNINA classifica queste 10 pose utilizzando tre metriche distinte. Primo, calcola ancora il tradizionale score empirico di Vina come baseline. Secondo, restituisce in output un CNN pose score. Questa è una probabilità tra zero e uno che indica quanto la pose generata corrisponda a una struttura di alta qualità, provata sperimentalmente. Terzo, calcola un CNN affinity score, che predice l'effettiva forza di binding. Il CNN pose score è l'aggiunta cruciale qui. Agisce come un filtro avanzato, impedendo al sistema di dare un ranking elevato a una pose che sembra matematicamente stabile per le equazioni classiche, ma che in natura è fisicamente irrealistica. Implementare tutto questo richiede solo pochi passaggi. Inizializzi il GninaPoseGenerator. Chiami il suo metodo generate, passando il file della struttura della proteina, il file della struttura del ligando e le dimensioni delle coordinate che definiscono la bounding box della pocket. Limitare la ricerca a un box specifico impedisce al sistema di sprecare cicli di calcolo nello spazio vuoto. Il metodo poi restituisce le tue pose classificate, insieme ai CNN score, permettendoti di estrarre il miglior candidato fisico. Ecco il punto chiave. GNINA raggiunge questa elevata precisione trattando lo spazio fisico 3D della protein pocket come un'immagine strutturata. Divide le coordinate atomiche in una griglia tridimensionale. La Convolutional Neural Network poi scansiona questa griglia volumetrica alla ricerca di pattern spaziali e chimici, esattamente come una rete standard di image-recognition cerca bordi e texture in una fotografia. Questo è tutto per questo episodio. Grazie per l'ascolto, e continua a sviluppare!
15

Reinforcement Learning nella Scienza

4m 08s

Scoprite come il reinforcement learning può progettare autonomamente le molecole. Tratteremo le astrazioni Environment e Policy di DeepChem insieme all'algoritmo Advantage Actor-Critic (A2C).

Download
Ciao, sono Alex di DEV STORIES DOT EU. Mastering DeepChem, episodio 15 di 15. Vuoi progettare una molecola altamente stabile, ma non hai a disposizione un enorme dataset di esempi perfetti per addestrare un modello. Hai solo un set di regole fisiche. Quando ti mancano dati statici, non puoi usare il supervised learning standard. Hai invece bisogno di un'IA che impari per tentativi, errori e feedback. Questo ci porta al Reinforcement Learning nella scienza. Se hai familiarità con il machine learning tradizionale, potresti confonderlo con il supervised training. Sono fondamentalmente diversi. Il supervised learning richiede un dataset statico esplicito ed etichettato. Il Reinforcement Learning si basa su reward interattivi continui generati da un environment. Il modello prova una mossa, l'environment risponde con uno score e il modello adatta la sua strategia. In DeepChem, la base di questa interazione è la classe Environment. Pensa all'Environment come al tuo simulatore scientifico ad alta fedeltà. Definisce le regole fisiche dell'universo in cui opera la tua IA. Traccia lo stato attuale del tuo sistema, definisce le azioni matematiche che il tuo modello può eseguire ed espone una step function. Quando il tuo modello esegue un'azione, la passa a quella step function. L'Environment calcola la fisica e restituisce tre elementi: il nuovo stato, un reward numerico basato sulla qualità dello stato risultante e un boolean flag che indica se il task è terminato. Se stai già lavorando con tool standard esterni alla chimica, DeepChem fornisce la classe GymEnvironment. Questa classe fa semplicemente da wrapper per gli environment di simulazione standard di OpenAI Gym, così si integrano direttamente nei tuoi workflow di DeepChem. Il componente che interagisce effettivamente con questo Environment si chiama Policy. La Policy è l'astrazione che rappresenta il cervello del tuo agent. Prende lo stato attuale dall'Environment e lo mappa a un'azione specifica, oppure restituisce un set di probabilità per diverse azioni possibili. Per addestrare una Policy in modo efficiente, DeepChem implementa algoritmi come Advantage Actor-Critic, solitamente chiamato A2C. Ecco il punto chiave. A2C divide il processo di apprendimento in due reti neurali separate che girano in parallelo: l'Actor e il Critic. L'Actor guarda lo stato e decide quale azione intraprendere per portare avanti il task. Il Critic osserva il risultato e stima il valore complessivo di trovarsi in quel nuovo stato. La parola advantage si riferisce alla differenza tra il reward effettivamente ricevuto dall'Environment e il reward previsto dal Critic. Se l'azione ha portato a un reward maggiore di quello previsto dal Critic, l'advantage è positivo e la rete dell'Actor viene aggiornata per intraprendere quell'azione più spesso in futuro. Considera uno scenario concreto in cui vuoi costruire autonomamente nuove molecole. Il tuo Environment è un motore chimico programmato per calcolare la stabilità molecolare. Parti da un anello chimico di base. L'Actor valuta questo stato iniziale e decide di attaccare un atomo di carbonio. L'Environment elabora questo step, simula la nuova struttura chimica, rileva un calo di stabilità e restituisce un reward negativo. Il Critic osserva questo risultato, aggiorna la sua aspettativa di base e segnala all'Actor che è stata una mossa pessima. Nell'iterazione successiva, l'Actor prova invece ad attaccare un atomo di ossigeno. L'Environment simula la modifica, calcola una maggiore stabilità, restituisce un reward positivo e il Critic rinforza quella scelta. Passo dopo passo, l'algoritmo A2C naviga nel simulatore chimico, costruendo una molecola complessa e altamente stabile in modo completamente autonomo, senza mai fare riferimento a un dataset statico di molecole buone. Gli agent di Reinforcement Learning possono interrogare i simulatori milioni di volte, scoprendo soluzioni che l'intuizione umana potrebbe ignorare completamente. Questo episodio ci porta alla fine del nostro deep dive su DeepChem. Se vuoi spingere questi tool oltre, esplora la documentazione ufficiale e prova a costruire i tuoi environment hands-on. Puoi anche visitare devstories dot eu per suggerire argomenti per le serie future. Questo è tutto per questo episodio. Grazie per l'ascolto, e continua a costruire!