Înapoi la catalog
Season 22 15 Episoade 1h 1m 2026

Mastering DeepChem

Ediția v2.8 — 2026. Un ghid cuprinzător pentru DeepChem, un framework pentru democratizarea deep learning în științe. Acoperă totul, de la manipularea datelor și MoleculeNet, până la graph featurizers, modele ML specializate, molecular docking și reinforcement learning (v2.8 - 2026).

Calcul științific Deep Learning pentru știință Chimioinformatică
Mastering DeepChem
Se redă acum
Click play to start
0:00
0:00
1
Proiectul DeepChem
O introducere în proiectul DeepChem și misiunea sa de a democratiza deep learning pentru știință. Discutăm despre modul în care a evoluat de la aplicații chimice la o suită mai largă de instrumente de machine learning științific.
3m 58s
2
Gestionarea seturilor de date științifice
Explorează abstracția Dataset din DeepChem pentru gestionarea datelor științifice la scară largă. Află diferențele critice dintre NumpyDataset și DiskDataset pentru gestionarea memoriei out-of-core.
3m 53s
3
Benchmark-uri MoleculeNet
Descoperă MoleculeNet, principala suită de benchmark-uri curatoriată în cadrul DeepChem. Discutăm despre modul în care standardizarea seturilor de date precum Tox21 și QM9 accelerează chimia computațională.
4m 26s
4
Feature Engineering pentru molecule
Află cum DeepChem traduce structurile chimice în numere ce pot fi citite de mașină folosind Featurizers. Explorăm metoda CircularFingerprint pentru maparea șirurilor SMILES în vectori de biți.
4m 28s
5
Graph Convolution Featurizers
Treci dincolo de vectorii de biți plați și explorează modul în care DeepChem reprezintă moleculele ca grafuri matematice. Acoperim ConvMolFeaturizer și MolGraphConvFeaturizer.
3m 53s
6
Splitting adaptat științific
Descoperă de ce metodele standard de random split eșuează pe seturile de date științifice. Explorăm RandomStratifiedSplitter și modul corect de a valida modelele pe date multi-task puternic dezechilibrate.
4m 16s
7
Îmblânzirea datelor cu Transformers
Află cum să normalizezi distribuțiile științifice brute folosind Transformers din DeepChem. Discutăm despre NormalizationTransformer și MinMaxTransformer pentru o antrenare stabilă.
2m 25s
8
API-ul Model și Wrappers Scikit-Learn
Explorează interfața unificată Model din DeepChem și cum să integrezi algoritmi tradiționali folosind SklearnModel. Află de ce uneori cea mai bună soluție nu este o rețea neuronală profundă.
3m 18s
9
Modele specializate de grafuri moleculare
Aprofundează arhitecturile de deep learning construite special pentru chimie. Acoperim Graph Convolutional Networks (GCNModel) și Message Passing Neural Networks (MPNNModel).
4m 51s
10
Evaluarea modelelor științifice
Află de ce acuratețea standard eșuează în ML științific. Explorăm clasa Metric din DeepChem, Matthews Correlation Coefficient și modul de evaluare a modelelor multi-task dezechilibrate.
4m 44s
11
Tuning inteligent al hiperparametrilor
Treci dincolo de grid search prin forță brută. Descoperă cum să folosești GaussianProcessHyperparamOpt în DeepChem pentru a naviga inteligent prin spații complexe de hiperparametri.
3m 57s
12
Metalearning pentru regimuri cu date puține
Explorează Model-Agnostic Meta-Learning (MAML) în DeepChem. Află cum să antrenezi modele care se pot adapta rapid la experimente științifice noi și costisitoare, cu foarte puține date.
3m 51s
13
Descoperirea buzunarelor de legare
Înțelege geometria interacțiunilor proteină-ligand. Explorăm ConvexHullPocketFinder din DeepChem pentru localizarea algoritmică a canelurilor de legare pe structurile proteice 3D.
4m 00s
14
Generarea de poze cu Vina și Gnina
Fă următorul pas în molecular docking calculând pozele de legare. Află cum VinaPoseGenerator și GninaPoseGenerator evaluează geometriile spațiale pentru a prezice interacțiunile.
4m 43s
15
Reinforcement Learning în știință
Descoperă cum reinforcement learning poate proiecta autonom molecule. Acoperim abstracțiile Environment și Policy din DeepChem, alături de algoritmul Advantage Actor-Critic (A2C).
4m 54s

Episoade

1

Proiectul DeepChem

3m 58s

O introducere în proiectul DeepChem și misiunea sa de a democratiza deep learning pentru știință. Discutăm despre modul în care a evoluat de la aplicații chimice la o suită mai largă de instrumente de machine learning științific.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. Mastering DeepChem, episodul 1 din 15. Vrei să aplici machine learning la o problemă științifică, așa că apelezi la tool-uri standard, dar aceste tool-uri standard tratează moleculele și proteinele ca pe niște array-uri de date plate, ignorând complet fizica din spate. Tool-ul care acoperă acest gol este proiectul DeepChem. Lumea presupune adesea că DeepChem este un tensor engine standalone, ceva ce folosești în loc de PyTorch, TensorFlow sau JAX. Asta este incorect. DeepChem este un toolset specific domeniului, construit direct peste aceste framework-uri generice. Acționează ca un traducător. Se ocupă de ingineria complexă necesară pentru a transforma datele fizice haotice într-un format pe care un neural network standard îl poate procesa. Proiectul există pentru a democratiza deep learning-ul în știință. Când a început, focusul a fost strict pe chimie. Scopul inițial a fost să facă descoperirea de medicamente accesibilă, oferind cercetătorilor tool-urile necesare pentru a prezice proprietățile chimice fără a avea nevoie de un laborator proprietar masiv. Dar pe măsură ce domeniul a crescut, la fel a făcut-o și framework-ul. Astăzi, DeepChem a evoluat discret într-un hub central pentru aproape orice aplicație științifică de deep learning. Pentru a înțelege anvergura, ia în considerare diferența dintre domeniile pe care le gestionează. Luni, ai putea folosi DeepChem pentru a prezice solubilitatea în apă a unei noi molecule asemănătoare unui medicament. Asta necesită un model care să înțeleagă legăturile moleculare și stările cuantice. Până joi, ai putea folosi același framework pentru a analiza o imagine de microscopie ca să numeri celule individuale. Astea sunt probleme fizice extrem de diferite. DeepChem abstractizează boilerplate-ul din spate pentru ambele, oferind tool-uri specializate pentru machine learning molecular, bioinformatică și chiar știința materialelor. Iată ideea cheie. Cea mai grea parte a machine learning-ului științific este reprezentarea datelor. Un model standard de deep learning nu are noțiunea de structură atomică sau secvențe biologice. DeepChem rezolvă asta oferind featurizers foarte bine ajustate. Un featurizer ia un obiect științific brut, cum ar fi un compus chimic scris în notație text standard, și îl traduce matematic într-un graf sau un vector. După featurization, informațiile intră în obiecte dataset specializate din DeepChem. Aceste obiecte sunt concepute pentru a gestiona eficient colecții mari de date științifice pe disk. Asta previne memory crashes atunci când procesezi milioane de compuși complecși. DeepChem abordează, de asemenea, modul în care sunt evaluate modelele științifice. În machine learning-ul standard, de obicei îți împarți datele de training și testing în mod aleatoriu. Dar în chimie, un random split face ca modelele să memoreze datele de training în loc să învețe fizica propriu-zisă. Pentru a repara asta, DeepChem oferă splitters specializate. De exemplu, un scaffold splitter separă moleculele pe baza structurii lor bidimensionale de bază. Asta asigură că datele tale de testing reprezintă familii chimice complet noi, forțând modelul să demonstreze că generalizează cu adevărat pe compuși nevăzuți. Odată ce datele tale sunt pregătite și împărțite, DeepChem oferă o suită completă de modele pre-built, adaptate pentru aceste dataset-uri. Pasezi obiectele științifice către featurizer, DeepChem le convertește, gestionează split-urile, le trimite în layer-ul PyTorch sau TensorFlow din spate și generează o predicție. Adevărata putere a DeepChem este că encodează cunoștințele din domeniu direct în data pipeline-ul tău, permițându-ți să te concentrezi exclusiv pe descoperirea științifică, în loc de partea de plumbing structural din machine learning. Dacă vrei să ajuți la continuarea emisiunii, poți căuta DevStoriesEU pe Patreon. Asta e tot pentru acest episod. Mersi că ai ascultat și continuă să construiești!
2

Gestionarea seturilor de date științifice

3m 53s

Explorează abstracția Dataset din DeepChem pentru gestionarea datelor științifice la scară largă. Află diferențele critice dintre NumpyDataset și DiskDataset pentru gestionarea memoriei out-of-core.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. Mastering DeepChem, episodul 2 din 15. Cel mai mare bottleneck în scientific machine learning nu este aproape niciodată arhitectura modelului. Este încercarea de a încărca fișiere masive fără să-ți crape memoria RAM. Gestionarea de datasets științifice este modul prin care treci de acel memory wall. Când treci la DeepChem, un instinct comun este să încarci totul într-un Pandas DataFrame. DataFrame-urile sunt excelente pentru date tabelare bidimensionale. Dar în scientific machine learning ai frecvent nevoie de arrays multidimensionale, de task-uri de predicție simultane și de importanța fiecărui sample per task. DeepChem folosește propria abstractizare de Dataset, deoarece leagă nativ features, labels multi-task și sample weights împreună, într-un format strict pe care modelele îl pot consuma eficient. Fiecare obiect Dataset din DeepChem garantează prezența a patru arrays paralele. În primul rând, ai X, care conține acele features numerice. În al doilea rând, ai y, care conține acele labels sau targets pe care încerci să le prezici. În al treilea rând, ai w, acel array de weights. Aici devine interesant. Aceste datasets științifice sunt adesea sparse. S-ar putea să ai date experimentale care arată că o moleculă este eficientă împotriva unui target, dar să nu ai date despre toxicitatea ei pentru ficat. În loc să renunți complet la moleculă sau să inventezi un label fals, setezi acel weight pentru task-ul lipsă la zero. Modelul învață din datele pe care le ai și ignoră golurile. În cele din urmă, ai acel array ids, care stochează un identificator unic pentru fiecare sample, cum ar fi un string chimic SMILES. Să ai un format standardizat este util, dar adevărata putere a abstractizării de Dataset constă în modul în care gestionează memoria sistemului. DeepChem oferă două modalități principale de a stoca aceste patru arrays. Dacă dataset-ul tău este suficient de mic pentru a încăpea în memoria sistemului, folosești un NumpyDataset. În spate, acesta ține pur și simplu arrays NumPy standard în RAM. Oferă acces extrem de rapid și este ideal pentru prototyping sau pentru lucrul cu colecții mai mici de molecule. Limitarea NumpyDataset devine evidentă atunci când lucrezi cu date științifice din lumea reală. Să presupunem că lucrezi cu un dataset de 100 de gigabytes de structuri cristaline tridimensionale dense. Dacă încerci să încarci asta în arrays standard in-memory, va crăpa instantaneu o mașină obișnuită. Pentru a rezolva această problemă, DeepChem oferă DiskDataset. Un DiskDataset face exact ceea ce sugerează și numele. Stochează acele arrays X, y, w și id în mai multe fișiere mici, sau shards, direct pe hard drive-ul tău. Tu specifici un director de date, iar DeepChem gestionează stocarea. Când antrenezi un model, DiskDataset trage doar batch-ul curent de date în RAM. Odată ce modelul procesează acel batch, memoria este eliberată pentru următorul. Tranziția dintre aceste două formate este complet transparentă pentru restul codului tău. Poți scrie un training loop, îl poți testa local folosind un NumpyDataset mic, și apoi poți da deploy la exact același cod pe un cluster care pointează către un DiskDataset masiv. Modelul pur și simplu cere dataset-ului următorul batch, iar dataset-ul gestionează dacă acel batch vine din RAM sau vine prin streaming de pe disk. Proiectarea de data pipelines în jurul acestui out-of-core streaming încă din prima zi garantează că infrastructura ta va supraviețui saltului de la câteva mii de înregistrări experimentale la milioane de structuri generate. Mulțumesc pentru audiție, happy coding tuturor!
3

Benchmark-uri MoleculeNet

4m 26s

Descoperă MoleculeNet, principala suită de benchmark-uri curatoriată în cadrul DeepChem. Discutăm despre modul în care standardizarea seturilor de date precum Tox21 și QM9 accelerează chimia computațională.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. Mastering DeepChem, episodul 3 din 15. Citești un paper care susține că un nou graph neural network obține rezultate state-of-the-art pe proprietăți chimice. Dar când te uiți cu atenție, au folosit un data split custom, un dataset proprietar și o metrică obscură, ceea ce face ca afirmația lor să fie matematic lipsită de sens. Comparația standardizată este singurul mod prin care se face progres științific, iar în chimia computațională, acest standard este suita MoleculeNet Benchmark. O greșeală comună este să crezi că MoleculeNet e doar un repository static. Nu este un folder descărcabil de fișiere CSV care stă pe un server și pe care trebuie să le parsezi și să le cureți tu singur. Este o suită de dataset-uri curatoriate, profund integrate direct în DeepChem prin modulul dc dot molnet. Servește drept ImageNet-ul pentru machine learning molecular. Oferă un set comun de task-uri, split-uri standardizate și baseline-uri evaluate pe diferite domenii. Suita își categorizează datele în arii științifice specifice pentru a testa diferite capacități de modelare. Ai dataset-uri de mecanică cuantică, precum QM9, care conține proprietăți geometrice și energetice pentru molecule mici. Ai dataset-uri de chimie fizică pentru predicția solubilității sau a energiei libere de hidratare. Și ai dataset-uri de biofizică și fiziologie, inclusiv benchmark-uri de toxicitate precum Tox21, care măsoară cum mii de substanțe chimice din mediu interacționează cu anumite căi biologice. Hai să ne uităm la un scenariu practic. Tocmai ai proiectat un nou model de predicție a toxicității și trebuie să demonstrezi matematic că depășește baseline-urile anterioare. Nu trebuie să vânezi datele raw Tox21, să gestionezi valorile lipsă sau să scrii un parser custom. În schimb, apelezi funcția load tox 21 din modulul dc dot molnet. Aici devine interesant. Când invoci o funcție de load în MoleculeNet, nu returnează doar text raw. Procesează datele dinamic folosind un featurizer pe care îl specifici în argumente, cum ar fi circular fingerprints sau structuri de graf. Funcția returnează de obicei un tuple care conține trei elemente de bază. În primul rând, îți dă o listă cu numele task-urilor. Pentru Tox21, acestea sunt cele douăsprezece ținte biologice specifice pe care încerci să le prezici. În al doilea rând, returnează dataset-ul în sine, care este deja partiționat frumos în subseturi de training, validation și test. În al treilea rând, îți oferă transformerii folosiți pentru a normaliza sau scala datele în timpul fazei de load. Iei acel training set Tox21 pre-split, îl dai noului tău model, și apoi evaluezi predicțiile pe test set. Pentru că toți ceilalți cercetători folosesc exact același API și pipeline de featurization, scorul tău final receiver operating characteristic poate fi comparat direct și corect cu baseline-urile publicate. MoleculeNet standardizează, de asemenea, modul în care evaluezi generalizarea prin strategii de split. API-ul suportă mai multe moduri de a-ți împărți datele. Deși poți folosi un random split de bază, chimia necesită adesea un scaffold split. Un scaffold split separă moleculele pe baza structurilor lor bidimensionale de bază. Asta forțează test set-ul să conțină framework-uri moleculare pe care modelul nu le-a văzut niciodată în timpul procesului de training. Testează dacă modelul tău a învățat într-adevăr regulile chimice de bază, în loc să memoreze doar mici variații. By default, funcțiile de load aplică metoda de split care are cel mai mult sens științific pentru acel dataset specific. Cea mai grea parte din machine learning aplicat nu este scrierea arhitecturii modelului, ci demonstrarea faptului că modelul chiar generalizează pe date nevăzute, fără data leakage. MoleculeNet îți oferă acel playground strict și standardizat, necesar pentru ca aceste demonstrații să fie valide. Asta e tot pentru acest episod. Îți mulțumesc pentru audiție și continuă să construiești!
4

Feature Engineering pentru molecule

4m 28s

Află cum DeepChem traduce structurile chimice în numere ce pot fi citite de mașină folosind Featurizers. Explorăm metoda CircularFingerprint pentru maparea șirurilor SMILES în vectori de biți.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. Mastering DeepChem, episodul 4 din 15. O rețea neuronală nu poate digera o structură chimică desenată pe o tablă albă. Chiar dacă scrii acea structură ca un string de text, algoritmii standard de machine learning tot nu o pot citi. Au nevoie ca datele să fie pre-mestecate în array-uri numerice. Puntea dintre o reprezentare chimică și un model matematic este Feature Engineering pentru molecule. În cheminformatică, reprezentăm adesea moleculele ca string-uri SMILES. Acestea sunt secvențe de caractere care definesc atomii și legăturile. Un inel de carbon devine un pattern de text specific. Dar dacă încerci să dai un string brut unui Random Forest sau unui Support Vector Machine, va eșua. Un model matematic necesită un vector numeric de lungime fixă ca input. Transformarea acelui text chimic într-un array de numere este ceea ce numim featurization. DeepChem gestionează acest pas cu un set dedicat de clase numite featurizers. Înainte de a analiza cum face DeepChem acest lucru, există o confuzie frecventă care trebuie clarificată. Când oamenii aud despre generarea unei reprezentări vectoriale a textului, se gândesc imediat la embeddings învățate, precum cele utilizate în language models moderne. Amprentele chimice nu sunt embeddings învățate. Nu există weights care să fie actualizate și nicio rețea neuronală nu este implicată în crearea feature-ului în sine. O amprentă este un algoritm de hashing determinist. Dacă procesezi exact aceeași moleculă pe două mașini diferite, vei obține exact același array de unu și zero. Cel mai comun featurizer pe care îl vei folosi pentru baseline models în DeepChem este Circular Fingerprint. Acesta implementează o metodă cunoscută sub numele de Extended Connectivity Fingerprints. Iată cum funcționează logica. Algoritmul analizează fiecare atom greu din molecula ta. Din fiecare atom, radiază spre exterior într-un cerc, analizând atomii vecini și legăturile până la o anumită rază. Poți controla această rază, dar a analiza până la două legături distanță este o practică standard. Capturează aceste fragmente structurale locale, le trece printr-o funcție de hash și le mapează la un index specific într-un array cu lungime fixă. Rezultatul este un vector de biți. Un unu la un index specific înseamnă că este prezentă o anumită substructură chimică. Un zero înseamnă că este absentă. Imaginează-ți că ai o listă de string-uri SMILES reprezentând sute de molecule mici, asemănătoare medicamentelor. Vrei să antrenezi un model Random Forest pentru a prezice toxicitatea lor. Mai întâi, inițializezi clasa CircularFingerprint din DeepChem. O configurezi să aibă un output cu o dimensiune de 1024. Aceasta este partea care contează. Fiecare moleculă, indiferent dacă are zece atomi sau cincizeci, va fi convertită într-un array de exact 1024 de biți. Apoi pasezi lista ta de string-uri SMILES metodei featurize a acestei clase. Algoritmul procesează fiecare string independent și returnează o matrice bidimensională. Rândurile reprezintă moleculele tale, iar cele 1024 de coloane reprezintă prezența sau absența unor substructuri specifice. Deoarece output-ul este doar o matrice numerică standard, nu mai ești constrâns la instrumente specifice chimiei. Poți da acea matrice direct bibliotecilor standard de machine learning. Deoarece amprentele se bazează pe hash-uri deterministe cu lungime fixă, mai degrabă decât pe semantică învățată, pot apărea coliziuni, ceea ce înseamnă că două fragmente structurale complexe diferite se pot mapa ocazional la același bit. În ciuda acestui fapt, ele rămân cel mai rapid și mai fiabil baseline pentru transformarea chimiei abstracte în matematică concretă. Asta e tot pentru acest episod. Mulțumesc pentru atenție și continuă să construiești!
5

Graph Convolution Featurizers

3m 53s

Treci dincolo de vectorii de biți plați și explorează modul în care DeepChem reprezintă moleculele ca grafuri matematice. Acoperim ConvMolFeaturizer și MolGraphConvFeaturizer.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. Mastering DeepChem, episodul 5 din 15. Dacă reprezinți un compus chimic ca un string plat de caractere, elimini complet topologia fizică ce dictează modul în care acesta interacționează cu lumea. Moleculele nu sunt propoziții liniare, ci sunt structuri interconectate. Pentru a păstra această realitate structurală în dataset-urile tale, ai nevoie de Graph Convolution Featurizers. Când auzi cuvântul convoluție, îți poți imagina un model de imagine care glisează un filtru peste un grid pătrat și fix de pixeli. Trebuie să renunți la acel model mental. Atomii nu stau în grid-uri uniforme. Un atom de carbon se poate conecta la patru vecini, în timp ce un atom de oxigen se conectează la doi, iar un atom de hidrogen doar la unul. Operațiile pe grafuri gestionează această conectivitate arbitrară și neregulată, iar graph featurizers acționează ca o punte pentru a traduce datele chimice brute într-un format pe care aceste operații îl pot consuma. DeepChem oferă două instrumente principale pentru a face acest lucru. Primul este ConvMolFeaturizer. Această funcție analizează o moleculă și generează un feature vector inițial pentru fiecare atom în parte. Calculează proprietăți precum tipul elementului, numărul total de atomi grei conectați, valența, sarcina formală, sarcina parțială și hibridizarea orbitală. Grupează aceste features la nivel de atom într-un obiect specific numit ConvMol. Acest format a fost conceput pentru a alimenta direct rețelele native de graph convolution ale DeepChem. Al doilea instrument este MolGraphConvFeaturizer. Aceasta este abordarea mai modernă și este foarte versatilă, deoarece generează un obiect GraphData standard. Asta îl face alegerea ideală dacă pasezi date către framework-uri generice precum PyTorch Geometric sau DGL. Să vedem cum gestionează MolGraphConvFeaturizer un inel benzenic simplu. Benzenul este format din șase atomi de carbon aranjați într-un hexagon continuu. Featurizer-ul procesează această structură împărțind-o în nodes și edges. Mai întâi, creează acele nodes. Pentru fiecare dintre cei șase atomi de carbon, calculează un array numeric de proprietăți atomice, înregistrând starea de hibridizare și sarcina parțială a atomului respectiv. Aceste șase array-uri individuale sunt stivuite împreună pentru a forma acel node feature matrix. Apoi, mapează acele edges, care corespund legăturilor chimice. Construiește un edge index, care este pur și simplu o listă de perechi de coordonate ce identifică exact care atom este conectat la care. De asemenea, generează edge features. Pentru fiecare legătură din acel edge index, featurizer-ul înregistrează date structurale. Verifică dacă legătura este simplă, dublă, triplă sau aromatică. Deoarece ne uităm la benzen, featurizer-ul codifică explicit natura aromatică a acestor legături, precum și dacă legătura este conjugată sau face parte dintr-un sistem inelar. În cele din urmă, împachetează acel node feature matrix, acel edge index și acele edge features într-un singur obiect GraphData. Acum ai un graf matematic care păstrează atât caracteristicile atomice, cât și conexiunile topologice exacte ale moleculei originale, ocolind complet limitările reprezentărilor vectoriale plate. Iată ideea cheie. Calitatea unui graph neural network este în întregime limitată de bogăția structurală a structurii de date cu care îl hrănești. Prin utilizarea corectă a unui graph featurizer, te asiguri că modelul tău învață de fapt chimia de bază, în loc să încerce să memoreze un rezumat unidimensional. Mulțumesc că ai petrecut câteva minute cu mine. Până data viitoare, numai bine.
6

Splitting adaptat științific

4m 16s

Descoperă de ce metodele standard de random split eșuează pe seturile de date științifice. Explorăm RandomStratifiedSplitter și modul corect de a valida modelele pe date multi-task puternic dezechilibrate.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. Mastering DeepChem, episodul 6 din 15. Construiești un model pe un dataset chimic nou, rulezi validarea și obții o acuratețe de nouăzeci și nouă la sută. Îi faci deploy și eșuează imediat în lumea reală. Metricile tale de validare te-au mințit cu atâta convingere din cauza modului în care ți-ai împărțit datele. Astăzi, ne uităm la Scientifically Aware Splitting, mai exact comparând Random Splitter-ul implicit cu Random Stratified Splitter. Ai putea presupune că împărțirea datelor în DeepChem este exact la fel ca utilizarea unei funcții de bază train-test split dintr-o librărie generală de machine learning, cum ar fi Scikit-Learn. Asta e o concepție greșită des întâlnită. Splitterele de uz general funcționează bine pentru array-uri simple, single-label. Splitterele DeepChem sunt proiectate să gestioneze nativ medii complexe multi-task, label-uri boolean sparse și structurile de date specifice pe care DeepChem le folosește pentru a stoca molecule. Să începem cu abordarea implicită: Random Splitter. Acest tool se comportă exact așa cum sugerează și numele. Preia dataset-ul încărcat și distribuie compușii chimici în seturile de training, validation și testing, uniform și aleator. Dacă lucrezi cu un dataset perfect echilibrat, în care compușii activi și inactivi apar în măsură egală, acest random shuffling funcționează bine. Dar datele științifice nu sunt practic niciodată echilibrate. Ia în considerare un dataset de toxicitate precum Tox21. În lumea reală, marea majoritate a compușilor chimici pe care îi testezi sunt siguri, iar compușii toxici sunt relativ rari. Să presupunem că doar unu la sută dintre compușii din dataset-ul tău sunt marcați ca toxici. Acesta este un class imbalance sever. Dacă treci acest dataset printr-un Random Splitter standard, purul hazard statistic dictează că setul tău de validation sau test ar putea ajunge cu zero exemple toxice. Dacă setul tău de test este format în întregime din compuși siguri, un model care pur și simplu ghicește „sigur” pentru fiecare input va obține un scor de sută la sută. Ajungi cu un scor matematic perfect pentru un model complet inutil. Aici devine obligatoriu Random Stratified Splitter. În loc să arunce orbește compușii în bucket-uri, stratificarea forțează split-ul să respecte distribuția reală a label-urilor tale. Random Stratified Splitter scanează proprietățile dataset-ului tău înainte de a împărți ceva. Dacă datele tale per total conțin exact unu la sută compuși toxici și nouăzeci și nouă la sută compuși siguri, splitter-ul garantează că setul tău de training are un raport de unu la nouăzeci și nouă, setul de validation are un raport de unu la nouăzeci și nouă, iar setul de test menține exact aceeași proporție. Iată ideea cheie. Dataset-urile DeepChem implică de obicei multi-task learning. Asta înseamnă că un singur compus chimic nu este evaluat doar pentru o singură proprietate, ci adesea pentru zeci de teste biologice diferite simultan. Label-urile pentru aceste task-uri sunt foarte sparse. E posibil să ai doar o mână de rezultate pozitive pentru un anumit test de toxicitate pe zece mii de rânduri de date. Random Stratified Splitter navighează prin această matrice multidimensională. Se asigură că acele rezultate pozitive extrem de rare sunt distribuite echitabil în split-urile tale. Fiecare subset al datelor tale primește o felie reprezentativă a compușilor activi, împiedicând orice task să-și piardă clasa minoritară în timpul split-ului. Fără acest mecanism, evaluarea modelului tău se bazează complet pe noroc. Pentru dataset-uri științifice multi-task extrem de dezechilibrate, stratificarea nu este o optimizare opțională. Este o cerință fundamentală pentru a demonstra că modelul tău a învățat de fapt chimia din spate, în loc să exploateze doar un unghi mort statistic. Îți mulțumesc că ai petrecut câteva minute cu mine. Până data viitoare, numai bine.
7

Îmblânzirea datelor cu Transformers

2m 25s

Află cum să normalizezi distribuțiile științifice brute folosind Transformers din DeepChem. Discutăm despre NormalizationTransformer și MinMaxTransformer pentru o antrenare stabilă.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. Mastering DeepChem, episodul 7 din 15. Datele științifice reale sunt haotice, dezechilibrate și împrăștiate pe intervale numerice masive. Dacă introduci acele valori experimentale brute direct într-o rețea neuronală, practic te rogi să ai gradienți neconvergenți în timpul procesului de backpropagation. Pentru a remedia asta, trebuie să-ți îmblânzești distribuțiile înainte ca acestea să ajungă în modelul tău, și aici intervin DeepChem Transformers. Când auzi cuvântul transformer în machine learning-ul modern, probabil mintea îți zboară la attention mechanisms, large language models sau BERT. Uită de toate astea în acest episod. În ecosistemul DeepChem, un Transformer este pur și simplu un utilitar de preprocesare a datelor. Nu este un layer de rețea neuronală. Este un obiect care ia un dataset și îi modifică features, labels sau weights pentru a se încadra în constrângerile matematice stricte ale algoritmilor de machine learning. Ia un scenariu în care faci predicții pentru solubilitatea moleculară experimentală. Datele tale brute de training ar putea conține target values care variază de la numere negative minuscule la zeci de mii. Weights-urile rețelei neuronale se inițializează, în general, cu numere foarte mici. Dacă input features sau target labels conțin o valoare de patruzeci de mii, calculul de loss rezultat generează un gradient masiv. Weights-urile rețelei vor oscila haotic în timpul pasului de update, nereușind să conveargă spre o soluție. Trebuie să scalezi datele. O modalitate de a gestiona asta este MinMax Transformer. Acest utilitar scanează întregul dataset, localizează valorile minime și maxime absolute pentru features sau labels specificate și comprimă întreaga distribuție într-un interval strict de la zero la unu. Cea mai mică valoare devine zero, cea mai mare devine unu, iar restul se încadrează proporțional între ele. Inițializezi transformer-ul pasându-i dataset-ul tău target, astfel încât să poată calcula acele limite. Apoi, apelezi metoda sa transform, care scoate un dataset nou cu numerele proaspăt scalate. Acum gradienții rămân stabili. Comprimarea datelor între zero și unu nu este mereu ideală, mai ales dacă dataset-ul tău conține outliers masivi. Un outlier extrem va forța restul de data points normale să se comprime într-o fâșie minusculă, imposibil de distins, din acel interval de la zero la unu. Pentru asta, folosești Normalization Transformer. În loc să impună limite stricte, acesta îți deplasează întreaga distribuție astfel încât media să fie exact la zero și scalează dispersia astfel încât deviația standard să fie unu. Asta îți centrează perfect datele, aliniindu-le cu acel sweet spot operațional al majorității funcțiilor de activare din rețelele neuronale. Iată ideea cheie. Scalarea de input features este o stradă cu sens unic, dar transformarea de labels creează o problemă secundară. Dacă modelul tău face training pe targets de solubilitate normalizate, predicțiile sale finale vor fi, de asemenea, normalizate. O valoare prezisă de zero virgulă patru este corectă din punct de vedere matematic, dar practic inutilă pentru un chimist care se așteaptă la o măsurătoare din lumea reală. DeepChem rezolvă asta prin menținerea stării metricilor de scalare în interiorul obiectului transformer. Odată ce modelul tău generează o predicție normalizată, pasezi acel output în metoda untransform a exact aceluiași transformer. Acesta inversează aritmetica, mapând predicția scalată direct înapoi la unitatea sa științifică originală. Normalizarea datelor nu este un pas opțional de optimizare în deep learning, ci este o cerință structurală pentru stabilitatea procesului de training. Mulțumesc pentru audiție, happy coding tuturor!
8

API-ul Model și Wrappers Scikit-Learn

3m 18s

Explorează interfața unificată Model din DeepChem și cum să integrezi algoritmi tradiționali folosind SklearnModel. Află de ce uneori cea mai bună soluție nu este o rețea neuronală profundă.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. Mastering DeepChem, episodul 8 din 15. Uneori, cea mai bună soluție la o problemă științifică nu este o rețea neuronală masivă care necesită o săptămână de antrenament. Adesea, un random forest robust este tot ce ai nevoie. Dar trecerea de la un algoritm tradițional la un pipeline complex de deep learning înseamnă, de obicei, rescrierea întregului cod de data handling. Acest episod acoperă Model API și Scikit-Learn Wrappers, care rezolvă exact această problemă. DeepChem folosește o clasă de bază unificată numită pur și simplu Model. Această clasă standardizează modul în care antrenezi și evaluezi algoritmii în întreaga librărie. Logica de bază se bazează pe două metode principale. Folosești fit pentru a antrena algoritmul și folosești predict pentru a genera output-uri pe date noi. Caracteristica definitorie a acestei interfețe este că aceste metode așteaptă obiecte DeepChem Dataset ca input. Nu pasezi array-uri sau dataframe-uri brute direct modelului. Dataset-ul acționează ca un container standard pentru features, labels și weights, iar Model API știe exact cum să îl citească. Ai putea presupune că o librărie specializată precum DeepChem și-ar scrie propriile implementări custom pentru algoritmii de bază de machine learning. Nu o face. DeepChem nu reinventează Scikit-Learn. În schimb, oferă un adaptor numit SklearnModel. Acest wrapper preia orice estimator standard din Scikit-Learn și îi oferă interfața DeepChem Model. Să luăm un scenariu în care vrei să prezici proprietățile fizice ale unui material nou. Mai întâi, imporți un random forest regressor standard direct din Scikit-Learn și îl inițializezi. Apoi, pasezi acel regressor standard în wrapper-ul SklearnModel din DeepChem. Acum ai un obiect compatibil cu DeepChem. Pentru a-l antrena, apelezi fit pe modelul wrapped, pasând Dataset-ul tău DeepChem. În culise, wrapper-ul extrage automat matricile de features, targets și sample weights din Dataset, și le pasează algoritmului Scikit-Learn din spate. Când este momentul să testezi, apelezi predict pe un nou Dataset, iar wrapper-ul formatează output-ul înapoi într-un array standard. Iată ideea principală. Deoarece wrapper-ul SklearnModel expune exact aceleași metode fit și predict ca o rețea neuronală deep construită nativ în DeepChem, poți schimba algoritmul din spate fără să te atingi de data pipeline. Poți stabili un baseline rapid cu un model tradițional de machine learning, iar apoi poți face swap fără probleme cu o rețea neuronală complexă mai târziu, doar schimbând singura linie de cod care inițializează modelul. Partea de data loading, training loop-ul și pașii de evaluare rămân identici. Concluzia principală este că Model API decuplează data ingestion de alegerea algoritmului, oferindu-ți libertatea de a testa diferite abordări matematice fără a rescrie constant glue code-ul. Dacă găsești aceste episoade utile și vrei să susții emisiunea, poți căuta DevStoriesEU pe Patreon. Asta e tot pentru acest episod. Ne auzim data viitoare!
9

Modele specializate de grafuri moleculare

4m 51s

Aprofundează arhitecturile de deep learning construite special pentru chimie. Acoperim Graph Convolutional Networks (GCNModel) și Message Passing Neural Networks (MPNNModel).

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. Mastering DeepChem, episodul 9 din 15. Nu poți pur și simplu să introduci o moleculă într-o rețea neuronală standard concepută pentru imagini. Moleculele nu sunt grid-uri rigide de pixeli; sunt rețele complexe de atomi de diferite dimensiuni și conexiuni. Dacă le forțezi să intre într-un grid standard, distrugi chimia structurală care le face unice. Pentru a rezolva acest lucru, folosim modele specializate de tip Molecular Graph. Aceste modele sunt concepute special pentru a prelua nativ grafurile featurized generate în pașii tăi anteriori de preprocessing. Ascultătorii le confundă uneori cu tradiționalele Convolutional Neural Networks. Un CNN standard glisează un filtru de dimensiune fixă peste un grid bidimensional. Dar o moleculă nu are un colț stânga-sus sau o rezoluție fixă. În schimb, modelele specializate de grafuri operează dinamic pe legăturile chimice ca edges și pe atomi ca nodes. Nu le pasă de coordonatele de grid. Le pasă în întregime de conectivitate. DeepChem oferă câteva arhitecturi specifice pentru acest lucru. Prima este GCNModel, care vine de la Graph Convolutional Network. Gândește-te la un GCN ca la o modalitate de a aduna vecinătățile atomice locale. Pentru fiecare atom din molecula ta featurized, GCN-ul se uită la vecinii săi imediați. Ia acele features ale atomilor vecini, cum ar fi tipul elementului sau starea de hibridizare, și le face pooling pentru a actualiza acele features ale atomului original. Repetă acest proces pe parcursul a câteva layere. Până la final, fiecare atom are o reprezentare matematică ce include context din mediul chimic înconjurător. Modelul agregă apoi toate aceste reprezentări ale atomilor într-un singur vector matematic pentru a prezice o proprietate chimică generală, cum ar fi toxicitatea sau solubilitatea. Asta acoperă GCN-urile, care se concentrează în principal pe agregarea datelor de tip node. Dar ce se întâmplă cu legăturile în sine? O legătură dublă se comportă foarte diferit față de o legătură simplă, și uneori ai nevoie ca rețeaua să dea o pondere mare acestei diferențe. Aici intervine MPNNModel, sau Message Passing Neural Network. Rețelele de tip Message Passing Neural Network nu se uită doar la o moleculă. Ele simulează matematic modul în care informațiile circulă între vecinii atomici. Să zicem că antrenezi un MPNNModel pentru a prezice proprietățile mecanic-cuantice ale unei molecule. Pentru a face acest lucru cu precizie, natura exactă a legăturilor contează enorm. Într-un MPNN, atât atomii, cât și legăturile dețin date explicite de tip feature. În timpul acelui training step, modelul execută o fază de message passing. Fiecare atom generează un mesaj bazat pe starea sa actuală și îl trimite vecinilor săi de-a lungul legăturilor de conectare. Un aspect crucial este că legătura însăși modifică acel mesaj. Un mesaj care călătorește peste o legătură aromatică rigidă se va calcula diferit față de unul care călătorește peste o legătură simplă flexibilă. Când un atom primește mesaje de la toți vecinii săi, folosește o mică rețea neuronală internă pentru a-și actualiza propria stare. Practic, calculează că este un atom de carbon influențat în prezent de un atom de oxigen de pe o legătură dublă și un atom de hidrogen de pe o legătură simplă. Acest proces iterează de mai multe ori. Informațiile se propagă în exterior, pas cu pas, pe întreaga rețea de legături. După un număr stabilit de pași, modelul adună stările finale ale tuturor atomilor pentru a-și face predicția. Deoarece MPNN-ul respectă nativ structura chimică reală, excelează în prezicerea comportamentelor cuantice complexe pe care modelele mai simple le ratează. Iată ideea cheie. Nu trebuie să inventezi metode de a mapa moleculele în array-uri plate. Folosind modele GCN și MPNN, păstrezi topologia atomică exactă a datelor tale, permițând rețelei să învețe direct din chimia în sine. Asta e tot pentru acest episod. Îți mulțumesc că ai ascultat și continuă să construiești!
10

Evaluarea modelelor științifice

4m 44s

Află de ce acuratețea standard eșuează în ML științific. Explorăm clasa Metric din DeepChem, Matthews Correlation Coefficient și modul de evaluare a modelelor multi-task dezechilibrate.

Descarcă
Salut, acesta este Alex de la DEV STORIES DOT EU. Mastering DeepChem, episodul 10 din 15. Dacă faci screening de molecule pentru un medicament nou, poate că una din zece mii chiar funcționează. Un model care prezice doar că fiecare moleculă este inutilă va atinge o rată de accuracy de nouăzeci și nouă virgulă nouăzeci și nouă la sută, în timp ce nu va descoperi absolut nimic. Acesta este motivul pentru care accuracy-ul de bază este adesea o metrică foarte proastă pentru descoperirea științifică și exact de aceea trebuie să vorbim despre evaluarea modelelor științifice. În științe, dataset-urile sunt aproape întotdeauna foarte dezechilibrate. Gândește-te la construirea unui classifier pentru a prezice inhibarea HIV. Marea majoritate a compușilor chimici testați nu vor inhiba virusul. Candidații activi pentru medicamente sunt extrem de rari. Dacă folosești accuracy standard pentru a-ți evalua modelul, rezultatele te vor minți. Modelul pur și simplu învață să ghicească clasa majoritară, obținând scoruri foarte mari, în timp ce eșuează complet să găsească un singur medicament funcțional. Pentru a remedia acest lucru, ai nevoie de metrici care să expună acest comportament. Primul este scorul de recall. Recall-ul măsoară câți dintre compușii activi reali a identificat cu succes modelul tău. Pedepsește strict modelele care ratează descoperiri reale. Totuși, recall-ul singur nu oferă o imagine completă. Un model naiv ar putea pur și simplu să ghicească faptul că fiecare compus în parte este activ, obținând un scor perfect de recall, generând în același timp mii de false positives. Aici devine esențial Matthews correlation coefficient, sau MCC. MCC este o măsură echilibrată care evaluează toate cele patru categorii ale rezultatelor tale. Acesta analizează simultan true positives, true negatives, false positives și false negatives. Produce un scor între minus unu și plus unu. Un scor de plus unu înseamnă o predicție perfectă, zero înseamnă că modelul nu este mai bun decât random guessing, iar minus unu înseamnă un dezacord total. MCC generează un scor mare doar dacă modelul face predicții corecte atât pentru compușii activi rari, cât și pentru cei inactivi comuni. Penalizează brutal un model care alege calea ușoară de a ghici clasa majoritară. Poate te întrebi de ce nu poți importa pur și simplu aceste funcții de metrici exact așa cum sunt, direct din scikit-learn. Scikit-learn are implementări foarte bune atât pentru recall, cât și pentru MCC. Problema se reduce la data shape. Modelele DeepChem efectuează frecvent multi-task learning, prezicând simultan zeci de proprietăți chimice diferite. Funcțiile standard scikit-learn se așteaptă la flat arrays simple. Dacă le pasezi output-urile complexe, multidimensionale ale DeepChem, acestea fie vor da crash, fie vor calcula scorul incorect. DeepChem rezolvă această nepotrivire cu propria sa clasă Metric. Această clasă acționează ca un wrapper în jurul funcțiilor standard matematice de scoring. Când instanțiezi o clasă Metric din DeepChem, îi pasezi funcția raw de scoring pe care vrei să o folosești, cum ar fi funcția MCC din scikit-learn. Wrapper-ul DeepChem Metric preia controlul de acolo. Acesta gestionează batching-ul datelor tale și aliniază true labels cu predicțiile modelului tău pe întregul dataset. Iată ideea cheie. Clasa Metric se bazează în mare măsură pe un mecanism intern numit normalize prediction shape. Inspectează datele tale pentru a determina dacă modelul tău face output la un single task, multiple tasks sau vectori de probabilitate one-hot encoded. Apoi face reshape la acele output-uri multidimensionale raw în exact acele flat arrays pe care le necesită funcțiile matematice subiacente. Nu trebuie să scrii loop-uri manuale pentru a face slice și unpack la array-urile tale multi-task înainte de a le calcula scorul. Wrapper-ul gestionează automat complexitatea structurală, astfel încât matematica să funcționeze exact așa cum a fost concepută. Când evaluezi un model științific pe un dataset dezechilibrat, sarcina ta principală este să demonstrezi că modelul nu înșeală baseline-ul, așa că alege o metrică care obligă modelul să învețe efectiv chimia rară. Îți mulțumesc că ai petrecut câteva minute cu mine. Până data viitoare, ai grijă de tine.
11

Tuning inteligent al hiperparametrilor

3m 57s

Treci dincolo de grid search prin forță brută. Descoperă cum să folosești GaussianProcessHyperparamOpt în DeepChem pentru a naviga inteligent prin spații complexe de hiperparametri.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. Mastering DeepChem, episodul 11 din 15. Testarea exhaustivă a fiecărei combinații posibile de learning rate, layer size și penalty pentru un model complex ar putea dura săptămâni sau chiar luni. Dar cum ar fi dacă codul tău ar putea ghici inteligent unde se află cea mai bună configurație a modelului după doar câteva încercări? Astăzi, ne uităm la hyperparameter tuning inteligent în DeepChem. Înainte de a analiza metodele de căutare, să clarificăm o confuzie comună. DeepChem oferă o clasă de bază numită HyperparamOpt. Acesta nu este training loop-ul propriu-zis al modelului tău. Este un outer optimization loop. Tu oferi o funcție numită model builder. Această funcție știe cum să construiască modelul tău specific pe baza unui set de parametri. Clasa HyperparamOpt face wrap acestui builder, dându-i diferite seturi de parametri, antrenând modelul rezultat pe un dataset, evaluându-l cu un anumit metric și returnând cea mai bună configurație. Cel mai simplu mod de a căuta în acest parameter space este folosind GridHyperparamOpt. Îi oferi liste discrete de valori. De exemplu, trei learning rates, patru numere diferite de estimators și două tipuri de penalty. Grid search adoptă abordarea brute-force. Evaluează fiecare combinație una câte una. Dacă ai un model mic și un parameter space mic, grid search este în regulă. Dar de îndată ce adaugi mai mulți parametri, te lovești de o explozie combinatorială. Dacă acel parameter grid creează o mie de combinații și fiecare durează o oră pentru a fi antrenată, grid search nu mai este viabil. Aici intervine GaussianProcessHyperparamOpt. În loc de un grid brute-force, efectuează o căutare probabilistică folosind o librărie de backend numită pyGPGO. Definești intervale continue sau alegeri categorice pentru parametrii tăi, în loc de liste fixe. Gaussian Process-ul tratează evaluarea modelului tău ca pe o funcție black-box. Vrea să găsească metricul de performanță maximă cu cele mai puține evaluări posibile. Iată ideea cheie. Gaussian Process-ul învață pe parcurs. Când testează o combinație specifică de learning rate și penalty, se uită la scorul de evaluare rezultat. Apoi construiește o hartă matematică a parameter space-ului, prezicând unde scorurile ar putea fi cele mai mari și unde predicțiile sale sunt cele mai incerte. Pentru următorul trial, nu alege pur și simplu următorul element dintr-o listă. Calculează un acquisition function pentru a decide care este cea mai inteligentă următoare estimare. Echilibrează explorarea zonelor necunoscute ale parameter space-ului tău cu exploatarea zonelor care au produs deja scoruri bune. Așadar, într-un scenariu de tuning pentru un model complex, pasezi model builder-ul tău către GaussianProcessHyperparamOpt. Definești un search space care dictează limitele superioare și inferioare pentru learning rate și numărul de estimators. Îi spui optimizatorului să ruleze pentru douăzeci de trials. În loc să parcurgă orbește o mie de combinații, algoritmul sondează spațiul, realizează că anumite learning rates au performanțe slabe, evită complet acel teritoriu și se concentrează pe zona optimă. Economisești cantități enorme de timp de calcul. Cea mai importantă concluzie aici este să îți potrivești strategia de search cu bugetul de calcul. Folosește grid search atunci când ai câteva valori discrete și timpi de antrenament rapizi, dar când antrenamentul este costisitor și parameter space-ul este vast, bazează-te pe un Gaussian Process pentru a găsi în mod activ cel mai bun model. Aș dori să-ți mulțumesc pentru că asculți — ne ajută foarte mult. Să ai o zi excelentă!
12

Metalearning pentru regimuri cu date puține

3m 51s

Explorează Model-Agnostic Meta-Learning (MAML) în DeepChem. Află cum să antrenezi modele care se pot adapta rapid la experimente științifice noi și costisitoare, cu foarte puține date.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. Mastering DeepChem, episodul 12 din 15. Când un singur experiment biologic costă zece mii de dolari, nu poți colecta big data. S-ar putea să obții doar cinci data points pentru un test complet nou. Deep learning-ul standard va face overfit instantaneu și va eșua complet aici. Ai nevoie de un algoritm conceput special pentru a extrage semnal din aproape nimic. Acest lucru ne aduce la Metalearning pentru regimuri low-data. DeepChem gestionează acest lucru printr-o clasă numită MAML, care vine de la Model-Agnostic Meta-Learning. În multe domenii științifice, în special în descoperirea de medicamente sau știința materialelor, pur și simplu nu ai volumul de date necesar pentru rețelele neuronale tradiționale. Ești forțat să operezi într-un regim low-data, unde few-shot learning este singura abordare viabilă. Mulți ingineri vor presupune că transfer learning-ul standard este răspunsul aici. Nu este. Transfer learning-ul antrenează un model pe un dataset masiv, sperând că acele features statice învățate oferă un warm-start bun pentru un dataset mai mic. MAML nu face doar un warm-start pentru weights. El optimizează matematic traiectoria gradientului modelului. Nu învață doar datele; învață cum să se adapteze eficient la date noi. Cum realizează asta? MAML folosește un nested loop de optimizare pe o distribuție de tasks. În timpul antrenamentului, nu îi dai algoritmului un singur stream continuu de date. Îi dai batches de tasks distincte. Pentru fiecare task din batch, algoritmul ia o cantitate mică de date. Calculează gradienții și determină care ar fi noile weights ale modelului după unul sau doi pași standard de antrenament. Aici este ideea cheie. Algoritmul nu aplică încă permanent acele weights actualizate. În schimb, ia acele weights ipotetice și le testează pe un al doilea dataset separat, din exact același task. Calculează loss-ul pe acest validation set. Apoi, calculează gradientul acelui validation loss în raport cu weights-urile inițiale originale și actualizează acele weights originale. Matematica forțează modelul să găsească un punct de inițializare în care efectuarea a doar câțiva pași de gradient produce o scădere masivă a erorii pentru orice task nou extras din acel domeniu. Să aplicăm asta la un scenariu concret. Să presupunem că ai date istorice de la zeci de teste biologice mai vechi. Vrei să prezici rezultatele unui test complet nou, extrem de scump, unde îți permiți să colectezi doar cinci data points reale. În DeepChem, instanțiezi obiectul MAML și îi pasezi un base model. Acest base model se numește learner. Apoi, antrenezi algoritmul MAML făcând sampling pe tasks mici din testele tale istorice. Algoritmul exersează constant adaptarea. Ia cinci data points din testul A, se actualizează, își verifică eroarea de predicție pe mai multe date din testul A și face backpropagate la rezultat către weights-urile globale de pornire. Apoi repetă exact această simulare pentru testul B, testul C și așa mai departe. În timp, modelul converge către un set optim de parametri de pornire pentru întreaga familie de teste. Când noul tău test scump ajunge în sfârșit, iei acei parametri de pornire și rulezi un pass standard de fine-tuning folosind cele cinci data points minuscule. Deoarece optimizarea MAML a aliniat traiectoria gradientului special pentru o adaptare rapidă, modelul se configurează aproape instantaneu. Obții predicții extrem de precise pentru o problemă nouă folosind un dataset microscopic. MAML schimbă obiectivul fundamental al pre-training-ului de la minimizarea erorilor de predicție pe date vechi la maximizarea adaptabilității pe date noi. Asta e tot pentru acest episod. Mulțumesc pentru audiție și continuă să construiești!
13

Descoperirea buzunarelor de legare

4m 00s

Înțelege geometria interacțiunilor proteină-ligand. Explorăm ConvexHullPocketFinder din DeepChem pentru localizarea algoritmică a canelurilor de legare pe structurile proteice 3D.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. Mastering DeepChem, episodul 13 din 15. Ai o structură 3D recent mapată a unei proteine virale, dar să găsești locul în care un medicament terapeutic se poate agăța de ea e ca și cum ai încerca să plasezi o singură piesă de puzzle pe un puzzle de zece mii de piese care plutește în trei dimensiuni. Nu poți pur și simplu să arunci o moleculă mică spre o proteină masivă și să speri că se va lipi. Trebuie mai întâi să mapezi canelurile structurale, și exact pentru asta există Binding Pocket Discovery. Înainte să mergem mai departe, hai să clarificăm o confuzie comună. Pocket discovery nu plasează un medicament în interiorul unei proteine. Examinează doar spațiul gol pentru a găsi potențiale binding sites. Generarea poziției reale a moleculei în interiorul acelui site se numește pose generation. Ăsta e un pas complet separat. Astăzi, ne interesează doar să găsim locurile de parcare goale. În DeepChem, acest workflow începe cu base class-ul Binding Pocket Finder. Acesta este un template abstract. Rolul său este să ofere o interfață standard, luând o macromoleculă 3D ca input și returnând o listă de potențiale pockets ca output. Folosind un base class, DeepChem se asigură că, indiferent dacă folosești un algoritm built-in sau îl scrii pe al tău, pipeline-ul rămâne consistent. Dar greul este dus de implementări specifice, cea mai comună fiind Convex Hull Pocket Finder. Convex Hull Pocket Finder analizează algoritmic geometria tridimensională a proteinei tale virale. Imaginează-ți că înfășori strâns întreaga macromoleculă în folie termocontractibilă. Folia se întinde drept peste golurile, crăpăturile și fisurile de pe suprafață. Acea limită exterioară este convex hull-ul matematic. Spațiile goale prinse între acea limită exterioară plată și suprafața atomică denivelată a proteinei sunt potențialele tale binding pockets. Acestea sunt canelurile vulnerabile unde un nou medicament s-ar putea ancora cu succes. Pentru a identifica sistematic aceste spații, algoritmul împarte volumul din jurul proteinei într-un grid tridimensional fin. Parcurge acest grid și identifică voxelii, care sunt niște mici cutii 3D. Caută voxeli care se află în interiorul convex hull-ului, dar nu conțin atomi de proteină. De asemenea, măsoară distanța de la aceste cutii goale la cel mai apropiat atom de proteină. Dacă o cutie este prea expusă la suprafață, este ignorată. Dacă este îngropată prea adânc în nucleul proteinei, este, de asemenea, ignorată. Algoritmul grupează cutiile valide rămase pentru a forma contururile continue ale cavităților de suprafață. Odată ce mapează o cavitate, finder-ul generează un bounding box în jurul ei. Aici e ideea cheie. Algoritmul nu taie acest bounding box perfect la dimensiunile exacte ale găurii. Adaugă un strat calculat de padding în jurul marginilor. Această margine suplimentară este critică, deoarece moleculele în biologie sunt dinamice. Când, în cele din urmă, pasezi aceste coordonate ale pocket-ului către un algoritm de docking mai târziu în pipeline-ul tău, acel padding oferă spațiul de manevră necesar. Îi dă următorului pas suficient spațiu în jur pentru a calcula cum s-ar putea răsuci, roti sau deplasa medicamentul pe măsură ce se așază în canelură. Pasezi proteina virală în Convex Hull Pocket Finder, iar el îți returnează un array curat de bounding boxes cu padding. Acum știi exact unde sunt vulnerabilitățile structurale și îți poți concentra resursele de calcul exclusiv pe acele coordonate specifice. Dacă vrei să ajuți ca aceste episoade să continue, poți susține show-ul căutând DevStoriesEU pe Patreon. Padding-ul se asigură că simulările tale downstream de docking nu vor eșua pur și simplu pentru că s-au lovit de un perete matematic artificial. Asta e tot pentru acest episod. Mulțumesc că ai ascultat și continuă să construiești!
14

Generarea de poze cu Vina și Gnina

4m 43s

Fă următorul pas în molecular docking calculând pozele de legare. Află cum VinaPoseGenerator și GninaPoseGenerator evaluează geometriile spațiale pentru a prezice interacțiunile.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. Mastering DeepChem, episodul 14 din 15. Ai o proteină țintă și o potențială moleculă de medicament, dar să știi că ar putea interacționa e inutil dacă nu știi exact cum se potrivesc fizic. Nu mai trebuie să ghicim orbește formele. Putem folosi Convolutional Neural Networks pre-antrenate pentru a prezice fizica reală a binding poses. Asta este Pose Generation cu Vina și Gnina. Mai întâi, să clarificăm o confuzie comună. Ascultătorii confundă adesea docking-ul cu Molecular Dynamics. Molecular Dynamics este o simulare bazată pe timp care arată cum moleculele se răsucesc, se pliază și vibrează pe parcursul a microsecunde. Pose generation, sau docking-ul, nu face asta. Calculează un snapshot static. Calculează geometria optimă de repaus a unui ligand în interiorul unui protein pocket și îi atribuie un scor energetic staționar bazat pe acea singură poziție. În DeepChem, greul computațional pentru asta are loc în interiorul clasei PoseGenerator. Treaba ei specifică este să calculeze multiple aranjamente tridimensionale ale ligandului tău, numite poses, în interiorul unui bounding box restricționat pe proteină. Apoi ordonează aceste poses. Implementarea standard pentru asta este VinaPoseGenerator. Acesta face wrap peste engine-ul AutoDock Vina, care se bazează pe o funcție empirică de scoring. Calculează un scor clasic de binding energy evaluând interacțiuni fizice precum legăturile de hidrogen, contactele hidrofobe și repulsia sterică. Vina testează o configurație geometrică, calculează penalizarea sau recompensa energetică, ajustează ușor atomii și încearcă din nou. Caută în acest spațiu geometric masiv și returnează o listă de poses ordonate după cea mai mică valoare de binding energy. Formulele de fizică clasică sunt incredibil de rapide, dar uneori evaluează greșit interacțiunile moleculare complexe. Aici intervine GninaPoseGenerator. GNINA este un upgrade de deep learning. Preia framework-ul Vina de bază și evaluează configurațiile folosind un Convolutional Neural Network pre-antrenat. Ia un scenariu în care evaluezi un nou candidat de medicament pentru cancer. Pose generator-ul calculează 10 configurații geometrice diferite ale acestui medicament așezat în interiorul unui binding pocket țintă. În loc să adune pur și simplu termeni de fizică clasică, GNINA trece structurile atomice tridimensionale ale acestor 10 poses prin rețeaua sa neuronală. GNINA clasifică acele 10 poses folosind trei metrici distincte. În primul rând, calculează în continuare scorul empiric tradițional Vina ca baseline. În al doilea rând, generează ca output un CNN pose score. Asta este o probabilitate între zero și unu care indică cât de bine se potrivește pose-ul generat cu o structură de înaltă calitate, dovedită experimental. În al treilea rând, calculează un CNN affinity score, care prezice puterea reală de binding. Acel CNN pose score este adăugarea critică aici. Acționează ca un filtru avansat, împiedicând sistemul să acorde un rank mare unui pose care pare stabil matematic pentru ecuațiile clasice, dar este nerealist din punct de vedere fizic în natură. Implementarea necesită doar câțiva pași. Inițializezi GninaPoseGenerator. Apelezi metoda sa generate, pasând fișierul cu structura proteinei, fișierul cu structura ligandului și dimensiunile coordonatelor care definesc bounding box-ul pentru pocket. Restricționarea căutării la un box specific împiedică sistemul să irosească compute cycles pe spațiu gol. Metoda returnează apoi acele poses ordonate, alături de scorurile CNN, permițându-ți să extragi cel mai bun candidat fizic. Iată ideea cheie. GNINA atinge această precizie ridicată tratând spațiul fizic 3D al protein pocket-ului ca pe o imagine structurată. Împarte coordonatele atomice într-un grid tridimensional. Acel Convolutional Neural Network scanează apoi după pattern-uri spațiale și chimice pe acel grid volumetric, exact așa cum o rețea standard de image-recognition caută margini și texturi într-o fotografie. Asta e tot pentru acest episod. Mulțumesc pentru audiție și continuă să construiești!
15

Reinforcement Learning în știință

4m 54s

Descoperă cum reinforcement learning poate proiecta autonom molecule. Acoperim abstracțiile Environment și Policy din DeepChem, alături de algoritmul Advantage Actor-Critic (A2C).

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. Mastering DeepChem, episodul 15 din 15. Vrei să proiectezi o moleculă extrem de stabilă, dar nu ai un dataset masiv de exemple perfecte pentru a antrena un model. Ai doar un set de reguli fizice. Când îți lipsesc datele statice, nu poți folosi supervised learning standard. În schimb, ai nevoie de un AI care învață prin încercare, eroare și feedback. Asta ne aduce la Reinforcement Learning în știință. Dacă ești familiarizat cu machine learning-ul tradițional, s-ar putea să confunzi asta cu supervised training. Sunt fundamental diferite. Supervised learning necesită un dataset static explicit, etichetat. Reinforcement learning se bazează pe recompense interactive continue, generate de un environment. Modelul încearcă o mișcare, environment-ul răspunde cu un scor, iar modelul își ajustează strategia. În DeepChem, baza acestei interacțiuni este clasa Environment. Gândește-te la Environment ca la simulatorul tău științific de înaltă fidelitate. Definește regulile fizice ale universului în care operează AI-ul tău. Urmărește starea curentă a sistemului tău, definește acțiunile matematice pe care modelul tău are voie să le facă și expune o funcție step. Când modelul tău face o acțiune, o pasează acelei funcții step. Environment-ul calculează fizica, apoi returnează trei lucruri: noua stare, o recompensă numerică bazată pe cât de bună este starea rezultată și un boolean flag care indică dacă task-ul este finalizat. Dacă lucrezi deja cu tool-uri standard din afara chimiei, DeepChem îți oferă clasa GymEnvironment. Aceasta pur și simplu face wrap peste environment-urile standard de simulare OpenAI Gym, astfel încât să se conecteze direct la workflow-urile tale din DeepChem. Componenta care interacționează de fapt cu acest Environment se numește Policy. Policy-ul este abstracția care reprezintă creierul agentului tău. Preia starea curentă din Environment și o mapează la o acțiune specifică, sau dă ca output un set de probabilități pentru diferite acțiuni posibile. Pentru a antrena eficient un Policy, DeepChem implementează algoritmi precum Advantage Actor-Critic, denumit de obicei A2C. Iată ideea principală. A2C împarte procesul de învățare în două rețele neuronale separate care rulează în paralel: Actor și Critic. Actor-ul analizează starea și decide ce acțiune să facă pentru a progresa în task. Critic-ul urmărește rezultatul și estimează valoarea generală a faptului de a fi în acea nouă stare. Cuvântul advantage se referă la diferența dintre recompensa reală primită de la Environment și recompensa prezisă de Critic. Dacă acțiunea a dus la o recompensă mai mare decât se aștepta Critic-ul, advantage-ul este pozitiv, iar rețeaua Actor este actualizată pentru a lua acea acțiune mai des în viitor. Ia în considerare un scenariu concret în care vrei să construiești autonom molecule noi. Environment-ul tău este un engine de chimie programat să calculeze stabilitatea moleculară. Începi cu un inel chimic de bază. Actor-ul evaluează această stare inițială și decide să atașeze un atom de carbon. Environment-ul procesează acest step, simulează noua structură chimică, descoperă o scădere a stabilității și returnează o recompensă negativă. Critic-ul observă acest rezultat, își actualizează așteptarea de baseline și îi semnalează Actor-ului că a fost o mișcare proastă. În următoarea iterație, Actor-ul încearcă să atașeze, în schimb, un atom de oxigen. Environment-ul simulează schimbarea, calculează o stabilitate mai mare, returnează o recompensă pozitivă, iar Critic-ul face reinforce la această alegere. Step by step, algoritmul A2C navighează prin simulatorul chimic, construind o moleculă complexă, extrem de stabilă, în mod complet autonom, fără a face vreodată referire la un dataset static de molecule bune. Agenții de reinforcement learning pot face query-uri pe simulatoare de milioane de ori, descoperind soluții pe care intuiția umană le-ar putea rata complet. Acest episod ne aduce la sfârșitul acestui deep dive în DeepChem. Dacă vrei să duci aceste tool-uri mai departe, explorează documentația oficială și încearcă să-ți construiești propriile environment-uri hands-on. De asemenea, poți vizita devstories dot eu pentru a sugera subiecte pentru seriile viitoare. Asta e tot pentru acest episod. Mersi că ai ascultat și continuă să construiești!