Wróć do katalogu
Season 22 15 Odcinki 1h 1m 2026

Mastering DeepChem

v2.8 — Edycja 2026. Kompleksowy przewodnik po DeepChem, frameworku do demokratyzacji deep learningu w naukach ścisłych. Obejmuje wszystko, od przetwarzania danych i MoleculeNet po graph featurizers, specjalistyczne modele ML, dokowanie molekularne i reinforcement learning (v2.8 - 2026).

Obliczenia naukowe Deep Learning w nauce Chemoinformatyka
Mastering DeepChem
Teraz odtwarzane
Click play to start
0:00
0:00
1
Projekt DeepChem
Wprowadzenie do projektu DeepChem i jego misji demokratyzacji deep learningu w nauce. Omawiamy, jak ewoluował od zastosowań chemicznych do szerszego zestawu narzędzi naukowego machine learningu.
3m 58s
2
Zarządzanie naukowymi zbiorami danych
Poznaj abstrakcję Dataset w DeepChem do obsługi danych naukowych na dużą skalę. Dowiedz się, jakie są kluczowe różnice między NumpyDataset a DiskDataset w zarządzaniu pamięcią out-of-core.
3m 41s
3
Benchmarki MoleculeNet
Odkryj MoleculeNet, wiodący zestaw benchmarków rozwijany w ramach DeepChem. Omawiamy, jak standaryzacja zbiorów danych, takich jak Tox21 i QM9, przyspiesza rozwój chemii obliczeniowej.
4m 08s
4
Feature Engineering dla cząsteczek
Dowiedz się, jak DeepChem tłumaczy struktury chemiczne na liczby czytelne dla maszyn za pomocą Featurizers. Analizujemy metodę CircularFingerprint do mapowania łańcuchów SMILES na wektory bitowe.
3m 59s
5
Graph Convolution Featurizers
Wyjdź poza płaskie wektory bitowe i odkryj, jak DeepChem reprezentuje cząsteczki jako grafy matematyczne. Omawiamy ConvMolFeaturizer oraz MolGraphConvFeaturizer.
3m 42s
6
Podział danych z uwzględnieniem specyfiki naukowej
Odkryj, dlaczego standardowe losowe podziały zawodzą w przypadku naukowych zbiorów danych. Omawiamy RandomStratifiedSplitter i uczymy się, jak poprawnie walidować modele na wysoce niezbalansowanych danych wielozadaniowych.
4m 33s
7
Poskramianie danych za pomocą Transformers
Dowiedz się, jak normalizować surowe rozkłady danych naukowych za pomocą Transformers w DeepChem. Omawiamy NormalizationTransformer i MinMaxTransformer w celu zapewnienia stabilnego trenowania.
4m 00s
8
API Model i wrappery Scikit-Learn
Poznaj ujednolicony interfejs Model w DeepChem i dowiedz się, jak opakować tradycyjne algorytmy za pomocą SklearnModel. Dowiedz się, dlaczego czasami najlepszym rozwiązaniem wcale nie jest głęboka sieć neuronowa.
3m 23s
9
Specjalistyczne modele grafów molekularnych
Zanurz się w architekturach deep learningu stworzonych specjalnie dla chemii. Omawiamy Graph Convolutional Networks (GCNModel) oraz Message Passing Neural Networks (MPNNModel).
4m 40s
10
Ewaluacja modeli naukowych
Dowiedz się, dlaczego standardowa dokładność zawodzi w naukowym ML. Omawiamy klasę Metric w DeepChem, współczynnik korelacji Matthewsa oraz sposoby ewaluacji niezbalansowanych modeli wielozadaniowych.
4m 40s
11
Inteligentne strojenie hiperparametrów
Wyjdź poza siłowy grid search. Odkryj, jak używać GaussianProcessHyperparamOpt w DeepChem do inteligentnego poruszania się po złożonych przestrzeniach hiperparametrów.
3m 44s
12
Meta-learning dla małych zbiorów danych
Poznaj Model-Agnostic Meta-Learning (MAML) w DeepChem. Dowiedz się, jak trenować modele, które potrafią szybko adaptować się do nowych, drogich eksperymentów naukowych przy użyciu bardzo małej ilości danych.
4m 11s
13
Odkrywanie kieszeni wiążących
Zrozum geometrię interakcji białko-ligand. Omawiamy ConvexHullPocketFinder w DeepChem do algorytmicznego lokalizowania rowków wiążących na trójwymiarowych strukturach białek.
4m 11s
14
Generowanie póz z Vina i Gnina
Zrób kolejny krok w dokowaniu molekularnym, obliczając pozycje wiązania. Dowiedz się, jak VinaPoseGenerator i GninaPoseGenerator oceniają geometrie przestrzenne w celu przewidywania interakcji.
3m 44s
15
Reinforcement Learning w nauce
Odkryj, jak reinforcement learning może autonomicznie projektować cząsteczki. Omawiamy abstrakcje Environment i Policy w DeepChem wraz z algorytmem Advantage Actor-Critic (A2C).
4m 36s

Odcinki

1

Projekt DeepChem

3m 58s

Wprowadzenie do projektu DeepChem i jego misji demokratyzacji deep learningu w nauce. Omawiamy, jak ewoluował od zastosowań chemicznych do szerszego zestawu narzędzi naukowego machine learningu.

Pobierz
Cześć, tu Alex z DEV STORIES DOT EU. Mastering DeepChem, odcinek 1 z 15. Chcesz zastosować machine learning do problemu naukowego, więc sięgasz po standardowe narzędzia, ale one traktują cząsteczki i białka jak płaskie tablice danych, całkowicie ignorując leżącą u ich podstaw fizykę. Narzędziem, które wypełnia tę lukę, jest projekt DeepChem. Ludzie często zakładają, że DeepChem to samodzielny silnik tensorowy, coś, czego używasz zamiast PyTorch, TensorFlow czy JAX. To nieprawda. DeepChem to dziedzinowy zestaw narzędzi zbudowany bezpośrednio na tych ogólnych frameworkach. Działa jak translator. Bierze na siebie skomplikowaną inżynierię potrzebną do przekształcenia nieuporządkowanych danych fizycznych w format, który może przetworzyć standardowa sieć neuronowa. Projekt istnieje po to, aby zdemokratyzować deep learning w nauce. Na początku koncentrował się wyłącznie na chemii. Początkowym celem było ułatwienie odkrywania leków, dając naukowcom narzędzia do przewidywania właściwości chemicznych bez potrzeby posiadania ogromnego, komercyjnego laboratorium. Jednak wraz z rozwojem dziedziny, rozwijał się również framework. Dziś DeepChem po cichu ewoluował, stając się centralnym hubem dla niemal każdej naukowej aplikacji deep learningu. Aby zrozumieć tę skalę, zastanów się nad różnicą w domenach, które obsługuje. W poniedziałek możesz użyć DeepChem do przewidywania rozpuszczalności w wodzie nowej cząsteczki o charakterze leku. Wymaga to modelu, który rozumie wiązania molekularne i stany kwantowe. W czwartek możesz użyć tego samego frameworka do analizy obrazu mikroskopowego w celu zliczenia pojedynczych komórek. To zupełnie różne problemy fizyczne. DeepChem ukrywa pod spodem cały boilerplate dla obu tych przypadków, dostarczając specjalistyczne narzędzia do molekularnego machine learningu, bioinformatyki, a nawet inżynierii materiałowej. I tu jest kluczowa kwestia. Najtrudniejszą częścią naukowego machine learningu jest reprezentacja danych. Standardowy model deep learningowy nie ma pojęcia o strukturze atomowej ani sekwencjach biologicznych. DeepChem rozwiązuje ten problem, oferując świetnie zoptymalizowane featurizery. Featurizer bierze surowy obiekt naukowy, taki jak związek chemiczny zapisany w standardowej notacji tekstowej, i matematycznie przekształca go w graf lub wektor. Po featurizacji informacje trafiają do wyspecjalizowanych obiektów datasetów DeepChem. Obiekty te zostały zaprojektowane z myślą o efektywnym zarządzaniu dużymi zbiorami danych naukowych na dysku. Zapobiega to crashom pamięci, gdy przetwarzasz miliony złożonych związków. DeepChem rozwiązuje też problem ewaluacji modeli naukowych. W standardowym machine learningu zazwyczaj dzielisz swoje dane treningowe i testowe losowo. Ale w chemii losowy split sprawia, że modele zapamiętują dane treningowe, zamiast uczyć się rzeczywistej fizyki. Aby temu zaradzić, DeepChem oferuje wyspecjalizowane splittery. Na przykład scaffold splitter rozdziela cząsteczki na podstawie ich głównej, dwuwymiarowej struktury. To gwarantuje, że twoje dane testowe reprezentują zupełnie nowe rodziny chemiczne, zmuszając model do udowodnienia, że faktycznie generalizuje na niewidziane wcześniej związki. Kiedy twoje dane są już przygotowane i po splicie, DeepChem udostępnia cały pakiet gotowych modeli dostosowanych do tych datasetów. Przekazujesz swoje obiekty naukowe do featurizera, DeepChem je konwertuje, obsługuje splity, przekazuje je do warstwy PyTorch lub TensorFlow pod spodem i zwraca predykcję. Prawdziwą siłą DeepChem jest to, że koduje wiedzę dziedzinową bezpośrednio w twoim data pipeline, pozwalając ci skupić się wyłącznie na odkryciach naukowych, a nie na infrastrukturze machine learningu. Jeśli chcesz pomóc w utrzymaniu podcastu, możesz wyszukać DevStoriesEU na Patreonie. To wszystko w tym odcinku. Dzięki za wysłuchanie i budujcie dalej!
2

Zarządzanie naukowymi zbiorami danych

3m 41s

Poznaj abstrakcję Dataset w DeepChem do obsługi danych naukowych na dużą skalę. Dowiedz się, jakie są kluczowe różnice między NumpyDataset a DiskDataset w zarządzaniu pamięcią out-of-core.

Pobierz
Cześć, tu Alex z DEV STORIES DOT EU. Mastering DeepChem, odcinek 2 z 15. Największym bottleneckiem w naukowym machine learningu prawie nigdy nie jest architektura modelu. Jest nim próba załadowania ogromnych plików bez crashowania RAM-u. Zarządzanie naukowymi datasetami to sposób na pokonanie tej ściany pamięci. Wchodząc w DeepChem, częstym odruchem jest ładowanie wszystkiego do Pandas DataFrame. DataFrame'y doskonale sprawdzają się do dwuwymiarowych danych tabelarycznych. Jednak naukowy machine learning często wymaga wielowymiarowych arrayów, wielu jednoczesnych tasków predykcyjnych i określania ważności sampli per task. DeepChem korzysta z własnej abstrakcji Dataset, ponieważ natywnie binduje feature'y, multi-taskowe labele i wagi sampli w ścisłym formacie, który modele mogą efektywnie konsumować. Każdy obiekt Dataset w DeepChem gwarantuje obecność czterech równoległych arrayów. Po pierwsze, masz X, który przechowuje twoje numeryczne feature'y. Po drugie, masz y, który trzyma twoje labele lub targety, które próbujesz przewidzieć. Po trzecie, masz w, czyli array wag. Tutaj robi się ciekawie. Naukowe datasety są często sparse. Możesz mieć dane eksperymentalne pokazujące, że cząsteczka jest skuteczna na jeden target, ale brak danych o tym, czy jest toksyczna dla wątroby. Zamiast całkowicie dropować cząsteczkę lub wymyślać fake'owy label, ustawiasz wagę brakującego taska na zero. Model uczy się z danych, które masz, i ignoruje luki. Na koniec masz array ids, który przechowuje unikalny identyfikator dla każdego sampla, na przykład chemiczny string SMILES. Posiadanie ustandaryzowanego formatu jest przydatne, ale prawdziwą siłą abstrakcji Dataset jest to, jak zarządza pamięcią systemową. DeepChem oferuje dwa główne sposoby przechowywania tych czterech arrayów. Jeśli twój dataset jest na tyle mały, że mieści się w pamięci systemowej, używasz NumpyDataset. Pod spodem trzyma to po prostu standardowe arraye NumPy w RAM-ie. Zapewnia to ekstremalnie szybki dostęp i jest idealne do prototypowania lub pracy z mniejszymi kolekcjami cząsteczek. Ograniczenia NumpyDataset stają się oczywiste, gdy masz do czynienia z prawdziwymi danymi naukowymi. Załóżmy, że pracujesz ze stugigabajtowym datasetem gęstych, trójwymiarowych struktur krystalicznych. Próba załadowania tego do standardowych in-memory arrayów natychmiast zcrashuje typową maszynę. Aby to rozwiązać, DeepChem udostępnia DiskDataset. DiskDataset robi dokładnie to, co sugeruje nazwa. Przechowuje arraye X, y, w oraz ids w wielu małych plikach, czyli shardach, bezpośrednio na twoim dysku twardym. Podajesz data directory, a DeepChem zarządza storage'em. Kiedy trenujesz model, DiskDataset zaciąga do RAM-u tylko aktualny batch danych. Gdy model przetworzy ten batch, pamięć jest zwalniana na kolejny. Przejście między tymi dwoma formatami jest całkowicie transparentne dla reszty twojego kodu. Możesz napisać training loop, przetestować go lokalnie na małym NumpyDataset, a następnie zdeployować dokładnie ten sam kod na klastrze wskazującym na potężny DiskDataset. Model po prostu prosi dataset o kolejny batch, a dataset ogarnia, czy ten batch pochodzi z RAM-u, czy jest streamowany z dysku. Zaprojektowanie twoich data pipeline'ów wokół tego streamingu out-of-core od pierwszego dnia gwarantuje, że twoja infrastruktura przetrwa skok z kilku tysięcy eksperymentalnych rekordów do milionów wygenerowanych struktur. Dzięki za wysłuchanie, happy coding wszystkim!
3

Benchmarki MoleculeNet

4m 08s

Odkryj MoleculeNet, wiodący zestaw benchmarków rozwijany w ramach DeepChem. Omawiamy, jak standaryzacja zbiorów danych, takich jak Tox21 i QM9, przyspiesza rozwój chemii obliczeniowej.

Pobierz
Cześć, tu Alex z DEV STORIES DOT EU. Mastering DeepChem, odcinek 3 z 15. Czytasz artykuł, który twierdzi, że nowa grafowa sieć neuronowa osiąga wyniki state-of-the-art dla właściwości chemicznych. Ale kiedy przyjrzysz się bliżej, widzisz, że użyli własnego data splitu, zamkniętego datasetu i jakiejś dziwnej metryki, przez co ich twierdzenie nie ma matematycznego sensu. Standaryzowane porównania to jedyny sposób na postęp naukowy, a w chemii obliczeniowej tym standardem jest pakiet MoleculeNet Benchmark. Częstym błędem jest myślenie, że MoleculeNet to po prostu statyczne repozytorium. To nie jest folder z plikami CSV na serwerze, który możesz pobrać i który musisz samemu sparsować i wyczyścić. To starannie wyselekcjonowany, głęboko zintegrowany pakiet datasetów wbudowany bezpośrednio w DeepChem przez moduł dc dot molnet. Działa to jak ImageNet dla molekularnego machine learningu. Zapewnia wspólny zestaw zadań, ustandaryzowane splity i sprawdzone baseline'y w różnych domenach. Pakiet dzieli dane na konkretne obszary naukowe, aby testować różne możliwości modelowania. Masz tu datasety z mechaniki kwantowej, takie jak QM9, który zawiera właściwości geometryczne i energetyczne małych cząsteczek. Masz datasety z chemii fizycznej do przewidywania rozpuszczalności czy swobodnej energii hydratacji. Masz też datasety z biofizyki i fizjologii, w tym benchmarki toksyczności, takie jak Tox21, który mierzy, jak tysiące środowiskowych substancji chemicznych wchodzi w interakcje z konkretnymi szlakami biologicznymi. Spójrzmy na praktyczny scenariusz. Właśnie zaprojektowałeś nowy model do przewidywania toksyczności i musisz matematycznie udowodnić, że przebija on poprzednie baseline'y. Nie musisz szukać surowych danych Tox21, obsługiwać brakujących wartości ani pisać własnego parsera. Zamiast tego wywołujesz funkcję load tox 21 z modułu dc dot molnet. I tu robi się ciekawie. Kiedy wywołujesz funkcję load w MoleculeNet, nie zwraca ona po prostu surowego tekstu. Przetwarza dane dynamicznie, używając featurizera, który podajesz w argumentach, na przykład circular fingerprints albo struktur grafowych. Funkcja zazwyczaj zwraca tuplę zawierającą trzy główne elementy. Po pierwsze, daje ci listę nazw tasków. Dla Tox21 jest to dwanaście konkretnych celów biologicznych, które próbujesz przewidzieć. Po drugie, zwraca sam dataset, który jest już ładnie podzielony na podzbiory treningowe, walidacyjne i testowe. Po trzecie, dostarcza transformery użyte do normalizacji lub skalowania danych podczas fazy ładowania. Bierzesz ten wstępnie podzielony zbiór treningowy Tox21, przekazujesz go do swojego nowego modelu, a następnie oceniasz predykcje na zbiorze testowym. Ponieważ każdy inny badacz używa dokładnie tego samego API i pipeline'u featurizacji, twój ostateczny wynik receiver operating characteristic może być bezpośrednio i sprawiedliwie porównany z opublikowanymi baseline'ami. MoleculeNet standaryzuje również to, jak oceniasz generalizację poprzez strategie splitu. API obsługuje wiele sposobów na podział twoich danych. Choć możesz użyć zwykłego random splitu, chemia często wymaga scaffold splitu. Scaffold split oddziela cząsteczki na podstawie ich głównych, dwuwymiarowych struktur. To wymusza, aby zbiór testowy zawierał frameworki molekularne, których model nigdy nie widział podczas treningu. Testuje to, czy twój model faktycznie nauczył się ukrytych reguł chemicznych, zamiast tylko zapamiętywać drobne wariacje. Domyślnie, funkcje load stosują metodę splitu, która ma najwięcej naukowego sensu dla tego konkretnego datasetu. Najtrudniejszą częścią stosowanego machine learningu nie jest napisanie architektury modelu, ale udowodnienie, że model faktycznie generalizuje na niewidziane dane bez data leakage. MoleculeNet daje ci rygorystyczny, ustandaryzowany playground, niezbędny do tego, by te dowody miały pokrycie w rzeczywistości. To wszystko w tym odcinku. Dzięki za wysłuchanie i buduj dalej!
4

Feature Engineering dla cząsteczek

3m 59s

Dowiedz się, jak DeepChem tłumaczy struktury chemiczne na liczby czytelne dla maszyn za pomocą Featurizers. Analizujemy metodę CircularFingerprint do mapowania łańcuchów SMILES na wektory bitowe.

Pobierz
Cześć, tu Alex z DEV STORIES DOT EU. Mastering DeepChem, odcinek 4 z 15. Sieć neuronowa nie jest w stanie przetrawić struktury chemicznej narysowanej na tablicy. Nawet jeśli zapiszesz tę strukturę jako string, standardowe algorytmy machine learningu nadal nie potrafią jej odczytać. Potrzebują danych przemielonych na tablice numeryczne. Mostem między reprezentacją chemiczną a modelem matematycznym jest Feature Engineering dla cząsteczek. W chemioinformatyce często reprezentujemy cząsteczki jako stringi SMILES. Są to sekwencje znaków definiujące atomy i wiązania. Pierścień węglowy staje się określonym wzorcem tekstowym. Ale jeśli spróbujesz przekazać surowego stringa do Random Forest albo Support Vector Machine, to się nie uda. Model matematyczny wymaga na wejściu wektora numerycznego o stałej długości. Przekształcenie tego chemicznego tekstu w tablicę liczb nazywamy featurizacją. DeepChem obsługuje ten krok za pomocą dedykowanego zestawu klas zwanych featurizerami. Zanim przyjrzymy się, jak DeepChem to robi, musimy wyjaśnić pewną powszechną niejasność. Kiedy ludzie słyszą o generowaniu wektorowej reprezentacji tekstu, od razu myślą o wyuczonych embeddingach, takich jak te używane w nowoczesnych modelach językowych. Chemiczne fingerprinty nie są wyuczonymi embeddingami. Żadne wagi nie są aktualizowane, a w tworzeniu samego feature'a nie biorą udziału żadne sieci neuronowe. Fingerprint to deterministyczny algorytm hashujący. Jeśli przetworzysz dokładnie tę samą cząsteczkę na dwóch różnych maszynach, otrzymasz dokładnie tę samą tablicę jedynek i zer. Najpopularniejszym featurizerem, którego będziesz używać dla modeli baseline w DeepChem, jest Circular Fingerprint. Implementuje on metodę znaną jako Extended Connectivity Fingerprints. Oto jak wygląda ta logika. Algorytm analizuje każdy ciężki atom w twojej cząsteczce. Od każdego atomu promieniuje na zewnątrz po okręgu, analizując sąsiednie atomy i wiązania aż do określonego promienia. Możesz kontrolować ten promień, ale standardową praktyką jest sprawdzanie na odległość dwóch wiązań. Przechwytuje te lokalne fragmenty strukturalne, przepuszcza je przez funkcję hashującą i mapuje na konkretny indeks w tablicy o stałej długości. Wynikiem jest wektor bitowy. Jedynka pod konkretnym indeksem oznacza, że dana podstruktura chemiczna jest obecna. Zero oznacza jej brak. Wyobraź sobie, że masz listę stringów SMILES reprezentujących setki małych cząsteczek lekopodobnych. Chcesz wytrenować model Random Forest, aby przewidzieć ich toksyczność. Najpierw inicjalizujesz klasę CircularFingerprint w DeepChem. Konfigurujesz ją tak, aby na wyjściu dawała rozmiar 1024. I to jest najważniejsza część. Każda pojedyncza cząsteczka, niezależnie od tego, czy ma dziesięć, czy pięćdziesiąt atomów, zostanie przekonwertowana na tablicę dokładnie 1024 bitów. Następnie przekazujesz swoją listę stringów SMILES do metody featurize tej klasy. Algorytm przetwarza każdy string niezależnie i zwraca dwuwymiarową macierz. Wiersze reprezentują twoje cząsteczki, a 1024 kolumny reprezentują obecność lub brak konkretnych podstruktur. Ponieważ na wyjściu otrzymujesz po prostu standardową macierz numeryczną, nie jesteś już ograniczony do narzędzi specyficznych dla chemii. Możesz przekazać tę macierz bezpośrednio do standardowych bibliotek machine learningu. Ponieważ fingerprinty opierają się na deterministycznych hashach o stałej długości, a nie na wyuczonej semantyce, mogą wystąpić kolizje, co oznacza, że dwa różne, złożone fragmenty strukturalne mogą czasami mapować się na ten sam bit. Mimo to pozostają one najszybszym i najbardziej niezawodnym baselinem do przekształcania abstrakcyjnej chemii w konkretną matematykę. To wszystko w tym odcinku. Dzięki za wysłuchanie i budujcie dalej!
5

Graph Convolution Featurizers

3m 42s

Wyjdź poza płaskie wektory bitowe i odkryj, jak DeepChem reprezentuje cząsteczki jako grafy matematyczne. Omawiamy ConvMolFeaturizer oraz MolGraphConvFeaturizer.

Pobierz
Cześć, tu Alex z DEV STORIES DOT EU. Mastering DeepChem, odcinek 5 z 15. Jeśli reprezentujesz związek chemiczny jako płaski string, całkowicie tracisz fizyczną topologię, która decyduje o tym, jak wchodzi on w interakcje z otoczeniem. Cząsteczki to nie są liniowe zdania, to połączone ze sobą struktury. Aby zachować tę strukturalną rzeczywistość w swoich datasetach, potrzebujesz Graph Convolution Featurizers. Słysząc słowo convolution, możesz wyobrazić sobie model obrazkowy przesuwający filtr po stałej, kwadratowej siatce pikseli. Musisz porzucić ten model mentalny. Atomy nie są ułożone w jednorodne siatki. Atom węgla może łączyć się z czterema sąsiadami, atom tlenu z dwoma, a atom wodoru tylko z jednym. Operacje grafowe radzą sobie z tą arbitralną, nieregularną siecią połączeń, a graph featurizers działają jak most, który tłumaczy surowe dane chemiczne na format, który te operacje mogą przetworzyć. DeepChem oferuje dwa główne narzędzia do tego celu. Pierwszym jest ConvMolFeaturizer. Ta funkcja analizuje cząsteczkę i generuje początkowy feature vector dla każdego pojedynczego atomu. Oblicza takie właściwości, jak typ pierwiastka, całkowita liczba połączonych atomów ciężkich, wartościowość, ładunek formalny, ładunek cząstkowy i hybrydyzacja orbitali. Pakuje te features na poziomie atomu w konkretny obiekt o nazwie ConvMol. Ten format został zaprojektowany, aby bezpośrednio zasilać natywne graph convolution networks w DeepChem. Drugim narzędziem jest MolGraphConvFeaturizer. To nowocześniejsze podejście i jest bardzo wszechstronne, ponieważ zwraca standardowy obiekt GraphData. Dzięki temu jest to domyślny wybór, jeśli przekazujesz dane do generycznych frameworków, takich jak PyTorch Geometric czy DGL. Prześledźmy, jak MolGraphConvFeaturizer radzi sobie z prostym pierścieniem benzenowym. Benzen składa się z sześciu atomów węgla ułożonych w ciągły sześciokąt. Featurizer przetwarza tę strukturę, dzieląc ją na nodes i edges. Najpierw tworzy nodes. Dla każdego z sześciu atomów węgla oblicza numeryczny array właściwości atomowych, zapisując stan hybrydyzacji i ładunek cząstkowy tego konkretnego atomu. Te sześć pojedynczych arrayów jest stackowanych ze sobą, tworząc node feature matrix. Następnie mapuje edges, które odpowiadają wiązaniom chemicznym. Buduje edge index, który jest po prostu listą par współrzędnych identyfikujących dokładnie, który atom jest połączony z którym. Generuje również edge features. Dla każdego wiązania w tym edge index, featurizer zapisuje dane strukturalne. Sprawdza, czy wiązanie jest pojedyncze, podwójne, potrójne czy aromatyczne. Ponieważ patrzymy na benzen, featurizer jawnie koduje aromatyczny charakter tych wiązań, a także to, czy wiązanie jest sprzężone, czy jest częścią systemu pierścieniowego. Na koniec pakuje node feature matrix, edge index i edge features w pojedynczy obiekt GraphData. Masz teraz matematyczny graf, który zachowuje zarówno charakterystykę atomową, jak i dokładne topologiczne połączenia oryginalnej cząsteczki, całkowicie omijając ograniczenia płaskich reprezentacji wektorowych. Oto kluczowy wniosek. Jakość graph neural network jest w pełni limitowana przez bogactwo strukturalne struktury danych, którą ją zasilasz. Odpowiednio wykorzystując graph featurizer, upewniasz się, że twój model faktycznie uczy się prawdziwej chemii, zamiast próbować zapamiętać jednowymiarowe podsumowanie. Dzięki za spędzenie ze mną tych kilku minut. Do następnego razu, trzymaj się.
6

Podział danych z uwzględnieniem specyfiki naukowej

4m 33s

Odkryj, dlaczego standardowe losowe podziały zawodzą w przypadku naukowych zbiorów danych. Omawiamy RandomStratifiedSplitter i uczymy się, jak poprawnie walidować modele na wysoce niezbalansowanych danych wielozadaniowych.

Pobierz
Cześć, tu Alex z DEV STORIES DOT EU. Mastering DeepChem, odcinek 6 z 15. Budujesz model na nowym chemicznym datasecie, odpalasz walidację i dostajesz 99% dokładności. Robisz deploy, a on w realnym świecie od razu się wywala. Twoje metryki walidacyjne bezczelnie cię okłamały przez to, jak podzieliłeś dane. Dzisiaj przyjrzymy się Scientifically Aware Splitting, a konkretnie porównamy domyślny Random Splitter z Random Stratified Splitterem. Możesz zakładać, że splitowanie danych w DeepChem wygląda dokładnie tak samo, jak użycie zwykłej funkcji train-test split z ogólnej biblioteki machine learningowej, takiej jak Scikit-Learn. To powszechne nieporozumienie. Splittery ogólnego przeznaczenia dobrze sprawdzają się w przypadku prostych tablic typu single-label. Splittery w DeepChem są zaprojektowane tak, by natywnie obsługiwać złożone środowiska multi-task, rzadkie etykiety boolean i specyficzne struktury danych, których DeepChem używa do przechowywania cząsteczek. Zacznijmy od domyślnego podejścia: Random Splittera. To narzędzie działa dokładnie tak, jak sugeruje nazwa. Bierze twój załadowany dataset i całkowicie losowo przypisuje związki chemiczne do setów: treningowego, walidacyjnego i testowego. Jeśli pracujesz z idealnie zbilansowanym datasetem, w którym aktywne i nieaktywne związki występują w równych proporcjach, takie losowe tasowanie sprawdza się świetnie. Ale dane naukowe praktycznie nigdy nie są zbilansowane. Weźmy na przykład dataset dotyczący toksyczności, taki jak Tox21. W realnym świecie zdecydowana większość testowanych przez ciebie związków chemicznych jest bezpieczna, a te toksyczne występują stosunkowo rzadko. Załóżmy, że tylko jeden procent związków w twoim datasecie jest oflagowany jako toksyczny. To poważny class imbalance. Jeśli przepuścisz ten dataset przez standardowy Random Splitter, czysta statystyka mówi, że twój validation set lub test set może skończyć bez żadnych toksycznych przykładów. Jeśli twój test set składa się wyłącznie z bezpiecznych związków, model, który po prostu zgaduje „bezpieczny” dla każdego inputu, zdobędzie sto procent. Kończysz z matematycznie idealnym wynikiem dla całkowicie bezużytecznego modelu. I tutaj Random Stratified Splitter staje się obowiązkowy. Zamiast ślepo wrzucać związki do koszyków, stratyfikacja wymusza taki split, który respektuje rzeczywisty rozkład twoich etykiet. Random Stratified Splitter skanuje właściwości twojego datasetu, zanim cokolwiek podzieli. Jeśli twoje dane zawierają dokładnie jeden procent związków toksycznych i dziewięćdziesiąt dziewięć procent bezpiecznych, splitter gwarantuje, że twój training set ma stosunek jeden do dziewięćdziesięciu dziewięciu, twój validation set ma stosunek jeden do dziewięćdziesięciu dziewięciu, a test set zachowuje dokładnie tę samą proporcję. I tu jest kluczowa sprawa. Datasety w DeepChem zazwyczaj opierają się na multi-task learningu. Oznacza to, że pojedynczy związek chemiczny jest ewaluowany nie tylko pod kątem jednej właściwości, ale często dla dziesiątek różnych testów biologicznych jednocześnie. Etykiety w tych taskach są bardzo sparse. Możesz mieć tylko garstkę pozytywnych trafień dla jednego konkretnego testu toksyczności na dziesięć tysięcy wierszy danych. Random Stratified Splitter świetnie nawiguje po tej wielowymiarowej macierzy. Upewnia się, że te niezwykle rzadkie, pozytywne trafienia są sprawiedliwie rozłożone pomiędzy twoimi splitami. Każdy podzbiór twoich danych otrzymuje reprezentatywny wycinek aktywnych związków, zapobiegając sytuacji, w której jakikolwiek pojedynczy task traci swoją klasę mniejszościową podczas splitu. Bez tego mechanizmu ewaluacja twojego modelu opiera się wyłącznie na szczęściu. Dla mocno niezbalansowanych, multi-taskowych naukowych datasetów, stratyfikacja nie jest opcjonalną optymalizacją. To fundamentalny wymóg, by udowodnić, że twój model faktycznie nauczył się faktycznych zależności chemicznych, a nie tylko wykorzystał statystyczną lukę. Dzięki za spędzenie ze mną tych kilku minut. Do usłyszenia następnym razem, trzymaj się.
7

Poskramianie danych za pomocą Transformers

4m 00s

Dowiedz się, jak normalizować surowe rozkłady danych naukowych za pomocą Transformers w DeepChem. Omawiamy NormalizationTransformer i MinMaxTransformer w celu zapewnienia stabilnego trenowania.

Pobierz
Cześć, tu Alex z DEV STORIES DOT EU. Mastering DeepChem, odcinek 7 z 15. Prawdziwe dane naukowe są szalone, niezbalansowane i rozrzucone po ogromnych zakresach liczbowych. Jeśli wrzucisz te surowe wartości eksperymentalne bezpośrednio do sieci neuronowej, praktycznie prosisz się o brak zbieżności gradientów podczas backpropagation. Aby to naprawić, musisz okiełznać swoje rozkłady, zanim w ogóle dotkną twojego modelu, i właśnie tu wkraczają Transformery z DeepChem. Kiedy słyszysz słowo Transformer w nowoczesnym machine learningu, twoje myśli prawdopodobnie od razu wędrują do mechanizmów attention, dużych modeli językowych albo BERTa. W tym odcinku zapomnij o tym wszystkim. W ekosystemie DeepChem, Transformer to po prostu narzędzie do preprocessingu danych. To nie jest warstwa sieci neuronowej. To obiekt, który przyjmuje dataset i modyfikuje jego features, labels lub weights, aby wpasować się w surowe matematyczne ograniczenia algorytmów machine learningu. Weźmy scenariusz, w którym przewidujesz eksperymentalną rozpuszczalność cząsteczek. Twoje surowe dane treningowe mogą zawierać wartości docelowe od malutkich liczb ujemnych do dziesiątek tysięcy. Weights sieci neuronowych zazwyczaj inicjalizują się jako bardzo małe liczby. Jeśli twoje wejściowe features lub docelowe labels zawierają wartość czterdziestu tysięcy, wynikowe obliczanie lossa wygeneruje ogromny gradient. Weights sieci będą gwałtownie skakać podczas kroku update, nie potrafiąc zbiec do rozwiązania. Musisz przeskalować te dane w dół. Jednym ze sposobów, by sobie z tym poradzić, jest MinMax Transformer. To narzędzie skanuje cały twój dataset, lokalizuje absolutne wartości minimalne i maksymalne dla określonych features lub labels, i spłaszcza cały rozkład do ścisłego przedziału od zera do jedynki. Najniższa wartość staje się zerem, najwyższa jedynką, a wszystko inne wpada proporcjonalnie pomiędzy nie. Inicjalizujesz Transformera, przekazując mu docelowy dataset, aby mógł obliczyć te granice. Następnie wywołujesz jego metodę transform, która zwraca świeży dataset z nowo przeskalowanymi liczbami. Teraz gradienty pozostają stabilne. Spłaszczanie danych między zerem a jedynką nie zawsze jest idealne, szczególnie jeśli twój dataset zawiera potężne outliery. Ekstremalny outlier zmusi resztę twoich normalnych punktów danych do skompresowania się w malutki, nierozróżnialny skrawek tego przedziału od zera do jedynki. Do tego używasz Normalization Transformera. Zamiast narzucać sztywne granice, przesuwa on cały rozkład tak, aby średnia wynosiła dokładnie zero, i skaluje rozrzut tak, by odchylenie standardowe wynosiło jeden. To idealnie centruje twoje dane, dopasowując je do optymalnego punktu działania większości funkcji aktywacji sieci neuronowych. Oto kluczowy wniosek. Skalowanie wejściowych features to droga jednokierunkowa, ale transformowanie twoich labels tworzy dodatkowy problem. Jeśli twój model trenuje na znormalizowanych targetach rozpuszczalności, jego ostateczne predykcje również będą znormalizowane. Przewidziana wartość zero przecinek cztery jest matematycznie poprawna, ale praktycznie bezużyteczna dla chemika oczekującego rzeczywistego pomiaru. DeepChem rozwiązuje to, utrzymując stan metryk skalowania wewnątrz obiektu Transformera. Gdy twój model wygeneruje znormalizowaną predykcję, przekazujesz ten output do metody untransform dokładnie tego samego Transformera. Odwraca to arytmetykę, mapując przeskalowaną predykcję bezpośrednio z powrotem do jej oryginalnej jednostki naukowej. Normalizacja danych to nie jest opcjonalny krok optymalizacyjny w deep learningu, to strukturalny wymóg dla stabilności treningu. Dzięki za wysłuchanie, miłego kodowania wszystkim!
8

API Model i wrappery Scikit-Learn

3m 23s

Poznaj ujednolicony interfejs Model w DeepChem i dowiedz się, jak opakować tradycyjne algorytmy za pomocą SklearnModel. Dowiedz się, dlaczego czasami najlepszym rozwiązaniem wcale nie jest głęboka sieć neuronowa.

Pobierz
Cześć, tu Alex z DEV STORIES DOT EU. Mastering DeepChem, odcinek 8 z 15. Czasami najlepszym rozwiązaniem problemu naukowego nie jest ogromna sieć neuronowa, której trenowanie zajmuje tydzień. Często wszystko, czego potrzebujesz, to solidny random forest. Ale przełączanie się między tradycyjnym algorytmem a złożonym pipelinem deep learningowym zazwyczaj oznacza przepisanie całego kodu do obsługi danych. W tym odcinku omówimy Model API i wrappery Scikit-Learn, które rozwiązują dokładnie ten problem. DeepChem korzysta z ujednoliconej klasy bazowej o nazwie Model. Ta klasa standaryzuje sposób, w jaki trenujesz i ewaluujesz algorytmy w całej bibliotece. Główna logika opiera się na dwóch podstawowych metodach. Używasz fit do trenowania algorytmu, a predict do generowania wyników na nowych danych. Cechą charakterystyczną tego interfejsu jest to, że te metody oczekują obiektów Dataset z DeepChem jako inputu. Nie przekazujesz surowych tablic ani dataframe'ów bezpośrednio do modelu. Dataset działa jako standardowy kontener na twoje features, labels i weights, a Model API dokładnie wie, jak go odczytać. Mógłbyś założyć, że specjalistyczna biblioteka, taka jak DeepChem, napisze własne, customowe implementacje dla podstawowych algorytmów machine learningowych. Wcale tak nie jest. DeepChem nie wymyśla Scikit-Learn na nowo. Zamiast tego dostarcza adapter o nazwie SklearnModel. Ten wrapper bierze dowolny standardowy estimator ze Scikit-Learn i nadaje mu interfejs Model z DeepChem. Weźmy scenariusz, w którym chcesz przewidzieć właściwości fizyczne nowego materiału. Najpierw importujesz standardowy random forest regressor bezpośrednio ze Scikit-Learn i go inicjalizujesz. Następnie przekazujesz ten standardowy regressor do wrappera SklearnModel w DeepChem. Masz teraz obiekt kompatybilny z DeepChem. Aby go wytrenować, wywołujesz fit na zwrapowanym modelu, przekazując swój Dataset z DeepChem. Pod spodem wrapper automatycznie wyciąga macierze features, targets i sample weights z Datasetu i przekazuje je do podległego algorytmu Scikit-Learn. Kiedy przychodzi czas na testy, wywołujesz predict na nowym Datasecie, a wrapper formatuje output z powrotem do standardowej tablicy. I tu jest kluczowa sprawa. Ponieważ wrapper SklearnModel wystawia dokładnie te same metody fit i predict, co głęboka sieć neuronowa zbudowana natywnie w DeepChem, możesz podmienić bazowy algorytm bez ruszania swojego data pipeline'u. Możesz szybko ustalić baseline za pomocą tradycyjnego modelu machine learningowego, a potem płynnie podmienić go na złożoną sieć neuronową, zmieniając tylko jedną linijkę kodu, która inicjalizuje model. Ładowanie danych, training loop i kroki ewaluacji pozostają identyczne. Główny wniosek jest taki, że Model API oddziela data ingestion od wyboru algorytmu, dając ci swobodę testowania różnych matematycznych podejść bez ciągłego przepisywania glue code'u. Jeśli uważasz te odcinki za przydatne i chcesz wesprzeć podcast, możesz wyszukać DevStoriesEU na Patreonie. To tyle na dzisiaj. Do usłyszenia następnym razem!
9

Specjalistyczne modele grafów molekularnych

4m 40s

Zanurz się w architekturach deep learningu stworzonych specjalnie dla chemii. Omawiamy Graph Convolutional Networks (GCNModel) oraz Message Passing Neural Networks (MPNNModel).

Pobierz
Cześć, tu Alex z DEV STORIES DOT EU. Mastering DeepChem, odcinek 9 z 15. Nie możesz po prostu wrzucić cząsteczki do standardowej sieci neuronowej stworzonej do obrazów. Cząsteczki nie są sztywnymi siatkami pikseli; są złożonymi sieciami atomów o różnych rozmiarach i połączeniach. Jeśli wtłoczysz je w standardowy grid, zniszczysz ich strukturę chemiczną, która czyni je wyjątkowymi. Aby rozwiązać ten problem, używamy specjalistycznych modeli grafów molekularnych. Te modele są zaprojektowane specjalnie po to, by natywnie przyjmować sfeaturyzowane grafy wygenerowane w twoich wcześniejszych krokach preprocessingu. Słuchacze czasami mylą je z tradycyjnymi Convolutional Neural Networks. Standardowa sieć CNN przesuwa filtr o stałym rozmiarze po dwuwymiarowym gridzie. Ale cząsteczka nie ma lewego górnego rogu ani stałej rozdzielczości. Zamiast tego, specjalistyczne modele grafowe operują dynamicznie na wiązaniach chemicznych jako krawędziach i atomach jako węzłach. Nie obchodzą ich współrzędne na gridzie. Liczy się dla nich wyłącznie łączność. DeepChem dostarcza do tego kilka konkretnych architektur. Pierwszą z nich jest GCNModel, co rozwija się jako Graph Convolutional Network. Pomyśl o GCN jako o sposobie na zbieranie informacji z lokalnego sąsiedztwa atomów. Dla każdego atomu w twojej sfeaturyzowanej cząsteczce, GCN patrzy na jego bezpośrednich sąsiadów. Bierze feature'y tych sąsiednich atomów, takie jak typ pierwiastka czy stan hybrydyzacji, i pooluje je, aby zaktualizować feature'y oryginalnego atomu. Powtarza ten proces przez kilka warstw. Na koniec każdy atom ma matematyczną reprezentację, która uwzględnia kontekst z otaczającego go środowiska chemicznego. Następnie model agreguje wszystkie te reprezentacje atomów w jeden matematyczny wektor, aby przewidzieć ogólną właściwość chemiczną, taką jak toksyczność czy rozpuszczalność. To by było na tyle, jeśli chodzi o GCN, które skupiają się głównie na agregowaniu danych z węzłów. Ale co z samymi wiązaniami? Wiązanie podwójne zachowuje się zupełnie inaczej niż pojedyncze, a czasami potrzebujesz, żeby sieć nadała tej różnicy dużą wagę. I tutaj wkracza MPNNModel, czyli Message Passing Neural Network. Sieci Message Passing Neural Networks nie tylko patrzą na cząsteczkę. Matematycznie symulują to, jak informacje przepływają między sąsiadującymi atomami. Powiedzmy, że trenujesz MPNNModel, aby przewidzieć właściwości kwantowo-mechaniczne cząsteczki. Żeby zrobić to precyzyjnie, dokładna natura wiązań ma ogromne znaczenie. W MPNN zarówno atomy, jak i wiązania posiadają jawne feature'y. Podczas kroku treningowego, model wykonuje fazę message passing. Każdy atom generuje wiadomość na podstawie swojego obecnego stanu i wysyła ją do swoich sąsiadów wzdłuż łączących je wiązań. Co istotne, samo wiązanie modyfikuje tę wiadomość. Wiadomość podróżująca przez sztywne wiązanie aromatyczne zostanie obliczona inaczej niż ta podróżująca przez elastyczne wiązanie pojedyncze. Kiedy atom otrzyma wiadomości od wszystkich swoich sąsiadów, używa małej wewnętrznej sieci neuronowej, aby zaktualizować swój własny stan. W zasadzie oblicza, że jest atomem węgla, na który obecnie wpływa atom tlenu na wiązaniu podwójnym i atom wodoru na wiązaniu pojedynczym. Ten proces iteruje kilka razy. Informacja rozchodzi się na zewnątrz, krok po kroku, po całej sieci wiązań. Po ustalonej liczbie kroków, model zbiera końcowe stany wszystkich atomów, aby dokonać predykcji. Ponieważ MPNN natywnie respektuje prawdziwą strukturę chemiczną, świetnie radzi sobie z przewidywaniem złożonych zachowań kwantowych, które prostsze modele pomijają. Oto kluczowy wniosek. Nie musisz wymyślać sposobów na mapowanie cząsteczek do płaskich tablic. Używając modeli GCN i MPNN, zachowujesz dokładną topologię atomową swoich danych, pozwalając sieci uczyć się bezpośrednio z samej chemii. To wszystko w tym odcinku. Dzięki za wysłuchanie i buduj dalej!
10

Ewaluacja modeli naukowych

4m 40s

Dowiedz się, dlaczego standardowa dokładność zawodzi w naukowym ML. Omawiamy klasę Metric w DeepChem, współczynnik korelacji Matthewsa oraz sposoby ewaluacji niezbalansowanych modeli wielozadaniowych.

Pobierz
Cześć, tu Alex z DEV STORIES DOT EU. Mastering DeepChem, odcinek 10 z 15. Jeśli badasz cząsteczki pod kątem nowego leku, może jedna na dziesięć tysięcy faktycznie działa. Model, który po prostu przewiduje, że każda cząsteczka jest bezużyteczna, osiągnie accuracy na poziomie 99,99%, nie odkrywając absolutnie niczego. Właśnie dlatego zwykłe accuracy jest często fatalną miarą w odkryciach naukowych i właśnie dlatego musimy porozmawiać o ewaluacji modeli naukowych. W świecie nauki datasety są prawie zawsze mocno niezbalansowane. Wyobraź sobie budowę klasyfikatora do predykcji inhibicji HIV. Zdecydowana większość testowanych związków chemicznych nie zahamuje wirusa. Aktywni kandydaci na leki są niezwykle rzadcy. Jeśli użyjesz standardowego accuracy do ewaluacji swojego modelu, wyniki cię okłamią. Model po prostu uczy się zgadywać klasę większościową, wykręcając bardzo wysokie wyniki, a jednocześnie nie potrafi znaleźć ani jednego działającego leku. Aby to naprawić, potrzebujesz metryk, które obnażą to zachowanie. Pierwszą z nich jest recall. Recall mierzy, ile z faktycznie aktywnych związków twój model poprawnie zidentyfikował. Surowo karze modele, które omijają prawdziwe odkrycia. Jednak sam recall nie daje pełnego obrazu. Naiwny model mógłby po prostu zgadywać, że każdy związek jest aktywny, osiągając idealny wynik recall, generując przy tym tysiące false positives. I tu niezbędny staje się współczynnik korelacji Matthewsa, czyli MCC. MCC to zbalansowana miara, która ewaluuje wszystkie cztery kategorie twoich wyników. Analizuje jednocześnie true positives, true negatives, false positives i false negatives. Generuje wynik od minus jeden do plus jeden. Wynik plus jeden oznacza idealną predykcję, zero oznacza, że model nie jest lepszy od losowego zgadywania, a minus jeden oznacza całkowitą niezgodność. MCC generuje wysoki wynik tylko wtedy, gdy model trafnie przewiduje zarówno rzadkie związki aktywne, jak i te powszechne, nieaktywne. Brutalnie karze model, który idzie na łatwiznę i zgaduje klasę większościową. Możesz się zastanawiać, dlaczego nie możesz po prostu zaimportować tych konkretnych funkcji metryk bezpośrednio ze scikit-learn. Scikit-learn ma świetne implementacje zarówno recall, jak i MCC. Problem sprowadza się do shape'u danych. Modele DeepChem często wykonują multi-task learning, przewidując dziesiątki różnych właściwości chemicznych jednocześnie. Standardowe funkcje scikit-learn oczekują prostych, płaskich arrayów. Jeśli przekażesz im złożone, wielowymiarowe outputy z DeepChem, albo się wywalą, albo policzą wynik nieprawidłowo. DeepChem rozwiązuje ten problem za pomocą własnej klasy Metric. Ta klasa działa jak wrapper na standardowe, matematyczne funkcje oceniające. Kiedy tworzysz instancję DeepChem Metric, przekazujesz jej surową funkcję oceniającą, której chcesz użyć, na przykład funkcję MCC ze scikit-learn. Wrapper DeepChem Metric przejmuje wtedy stery. Zarządza batchowaniem twoich danych i dopasowuje true labels do predykcji modelu w całym datassecie. Oto kluczowa sprawa. Klasa Metric mocno opiera się na wewnętrznym mechanizmie o nazwie normalize prediction shape. Analizuje twoje dane, aby określić, czy model zwraca single task, multiple tasks, czy wektory prawdopodobieństwa zakodowane jako one-hot. Następnie robi reshape tych surowych, wielowymiarowych outputów do dokładnie takich płaskich arrayów, jakich wymagają funkcje matematyczne pod spodem. Nie musisz pisać ręcznych pętli, żeby robić slice i rozpakowywać swoje multi-taskowe arraye przed ich oceną. Wrapper automatycznie ogarnia tę strukturalną złożoność, dzięki czemu matematyka działa dokładnie tak, jak powinna. Kiedy ewaluujesz model naukowy na niezbalansowanym datassecie, twoim głównym zadaniem jest udowodnienie, że model nie oszukuje baseline'u, więc wybierz metrykę, która zmusi model do faktycznego nauczenia się tej rzadkiej chemii. Dzięki za spędzenie ze mną tych kilku minut. Do usłyszenia następnym razem, trzymaj się.
11

Inteligentne strojenie hiperparametrów

3m 44s

Wyjdź poza siłowy grid search. Odkryj, jak używać GaussianProcessHyperparamOpt w DeepChem do inteligentnego poruszania się po złożonych przestrzeniach hiperparametrów.

Pobierz
Cześć, tu Alex z DEV STORIES DOT EU. Mastering DeepChem, odcinek 11 z 15. Dokładne testowanie każdej możliwej kombinacji learning rate'u, layer size'u i penalty dla ciężkiego modelu może zająć tygodnie, a nawet miesiące. Ale co, gdyby twój kod potrafił inteligentnie odgadnąć, gdzie kryje się najlepsza konfiguracja modelu po zaledwie kilku próbach? Dzisiaj przyjrzymy się inteligentnemu tuningowi hiperparametrów w DeepChem. Zanim przyjrzymy się metodom przeszukiwania, wyjaśnijmy częste nieporozumienie. DeepChem udostępnia klasę bazową o nazwie HyperparamOpt. To nie jest twoja główna pętla treningowa modelu. To zewnętrzna pętla optymalizacyjna. Przekazujesz funkcję o nazwie model builder. Ta funkcja wie, jak zbudować twój konkretny model na podstawie zestawu parametrów. Klasa HyperparamOpt opakowuje ten builder, przekazując mu różne zestawy parametrów, trenując wynikowy model na datasecie, ewaluując go za pomocą określonej metryki i zwracając najlepszą konfigurację. Najprostszym sposobem przeszukania tej przestrzeni parametrów jest użycie GridHyperparamOpt. Przekazujesz mu dyskretne listy wartości. Na przykład trzy wartości learning rate, cztery różne liczby estymatorów i dwa typy penalty. Grid search wykorzystuje podejście brute-force. Ewaluuje każdą pojedynczą kombinację jedna po drugiej. Jeśli masz mały model i małą przestrzeń parametrów, grid search sprawdza się świetnie. Ale gdy tylko dodasz więcej parametrów, trafiasz na eksplozję kombinatoryczną. Jeśli twój grid parametrów tworzy tysiąc kombinacji, a trenowanie każdej z nich zajmuje godzinę, grid search przestaje mieć sens. I tu wkracza GaussianProcessHyperparamOpt. Zamiast brute-force'owego grida, wykonuje probabilistyczne przeszukiwanie przy użyciu biblioteki backendowej o nazwie pyGPGO. Definiujesz ciągłe zakresy lub kategoryczne wybory dla swoich parametrów zamiast sztywnych list. Proces Gaussa traktuje ewaluację twojego modelu jak funkcję black-box. Chce znaleźć maksymalną metrykę wydajności przy jak najmniejszej liczbie ewaluacji. Oto kluczowa kwestia. Proces Gaussa uczy się w locie. Kiedy testuje konkretną kombinację learning rate'u i penalty, patrzy na wynikowy score ewaluacji. Następnie buduje matematyczną mapę przestrzeni parametrów, przewidując, gdzie score'y mogą być najwyższe, a gdzie jego przewidywania są najbardziej niepewne. Do kolejnej próby nie wybiera po prostu następnego elementu z listy. Oblicza acquisition function, aby zdecydować o najmądrzejszym kolejnym strzale. Balansuje między eksploracją nieznanych stref twojej przestrzeni parametrów, a eksploatacją obszarów, które już wygenerowały dobre score'y. Więc w scenariuszu tuningu ciężkiego modelu, przekazujesz swój model builder do GaussianProcessHyperparamOpt. Definiujesz search space, dyktujący górne i dolne granice dla learning rate'u i liczby estymatorów. Mówisz optymalizatorowi, żeby odpalił dwadzieścia prób. Zamiast ślepo maszerować przez tysiąc kombinacji, algorytm sonduje przestrzeń, zdaje sobie sprawę, że pewne wartości learning rate działają słabo, całkowicie unika tego terytorium i skupia się na optymalnej strefie. Oszczędzasz ogromne ilości czasu obliczeniowego. Najważniejszy wniosek z tego jest taki, żeby dopasować strategię przeszukiwania do twojego budżetu obliczeniowego. Używaj grid search, gdy masz garstkę dyskretnych wartości i szybkie czasy trenowania, ale gdy trenowanie jest kosztowne, a przestrzeń parametrów ogromna, polegaj na procesie Gaussa, aby aktywnie upolować najlepszy model. Chciałbym poświęcić chwilę, żeby podziękować ci za słuchanie — to bardzo nam pomaga. Trzymaj się!
12

Meta-learning dla małych zbiorów danych

4m 11s

Poznaj Model-Agnostic Meta-Learning (MAML) w DeepChem. Dowiedz się, jak trenować modele, które potrafią szybko adaptować się do nowych, drogich eksperymentów naukowych przy użyciu bardzo małej ilości danych.

Pobierz
Cześć, tu Alex z DEV STORIES DOT EU. Mastering DeepChem, odcinek 12 z 15. Kiedy pojedynczy eksperyment biologiczny kosztuje dziesięć tysięcy dolarów, nie możesz zbierać big data. Możesz uzyskać tylko pięć punktów danych dla zupełnie nowego testu. Standardowy deep learning natychmiast tu zrobi overfit i całkowicie zawiedzie. Potrzebujesz algorytmu zaprojektowanego specjalnie do wyciągania sygnału z praktycznie niczego. To prowadzi nas do meta-learningu w low-data regimes. DeepChem radzi sobie z tym za pomocą klasy o nazwie MAML, co jest skrótem od Model-Agnostic Meta-Learning. W wielu dziedzinach nauki, zwłaszcza przy odkrywaniu leków czy w inżynierii materiałowej, po prostu nie masz wolumenu danych wymaganego dla tradycyjnych sieci neuronowych. Jesteś zmuszony do działania w low-data regime, gdzie few-shot learning to jedyne sensowne podejście. Wielu inżynierów założy, że standardowy transfer learning jest tutaj rozwiązaniem. Nie jest. Transfer learning trenuje model na ogromnym datasecie, mając nadzieję, że wyuczone statyczne cechy zapewnią dobry warm-start dla mniejszego datasetu. MAML nie robi tylko warm-startu wag. Matematycznie optymalizuje trajektorię gradientu modelu. Nie uczy się tylko samych danych; uczy się, jak efektywnie adaptować się do nowych danych. Jak to osiąga? MAML wykorzystuje zagnieżdżoną pętlę optymalizacji na rozkładzie zadań. Podczas treningu nie karmisz algorytmu pojedynczym, ciągłym strumieniem danych. Podajesz mu batche odrębnych zadań. Dla każdego zadania w batchu, algorytm pobiera niewielką ilość danych. Oblicza gradienty i wylicza, jakie byłyby nowe wagi modelu po jednym lub dwóch standardowych krokach treningowych. Oto kluczowa kwestia. Algorytm nie aplikuje jeszcze na stałe tych zaktualizowanych wag. Zamiast tego bierze te hipotetyczne wagi i testuje je na drugim, oddzielnym zestawie danych z dokładnie tego samego zadania. Oblicza loss na tym validation set. Następnie oblicza gradient tego validation loss w odniesieniu do pierwotnych wag początkowych i aktualizuje te oryginalne wagi. Matematyka zmusza model do znalezienia punktu inicjalizacji, w którym wykonanie zaledwie kilku kroków gradientu powoduje ogromny spadek błędu dla każdego nowego zadania z tej domeny. Zastosujmy to do konkretnego scenariusza. Załóżmy, że masz historyczne dane z dziesiątek starszych testów biologicznych. Chcesz przewidzieć wyniki zupełnie nowego, bardzo drogiego testu, w którym możesz sobie pozwolić na zebranie tylko pięciu rzeczywistych punktów danych. W DeepChem instancjonujesz obiekt MAML i przekazujesz mu model bazowy. Ten model bazowy nazywa się learner. Następnie trenujesz algorytm MAML, samplując małe zadania z twoich historycznych testów. Algorytm stale ćwiczy adaptację. Pobiera pięć punktów danych z testu A, aktualizuje się, sprawdza swój błąd predykcji na większej ilości danych z testu A i backpropaguje wynik do globalnych wag początkowych. Następnie powtarza dokładnie tę samą symulację dla testu B, testu C i tak dalej. Z czasem model konwerguje do optymalnego zestawu parametrów początkowych dla całej rodziny testów. Kiedy twój nowy, drogi test w końcu się pojawi, bierzesz te parametry początkowe i odpalasz standardowy fine-tuning, używając swoich pięciu malutkich punktów danych. Ponieważ optymalizacja MAML dopasowała trajektorię gradientu specjalnie pod kątem szybkiej adaptacji, model konfiguruje się niemal natychmiast. Otrzymujesz bardzo dokładne predykcje dla nowego problemu, używając mikroskopijnego datasetu. MAML przesuwa fundamentalny cel pre-trainingu z minimalizacji błędu predykcji na starych danych na maksymalizację zdolności adaptacji na nowych danych. To wszystko w tym odcinku. Dzięki za wysłuchanie i buduj dalej!
13

Odkrywanie kieszeni wiążących

4m 11s

Zrozum geometrię interakcji białko-ligand. Omawiamy ConvexHullPocketFinder w DeepChem do algorytmicznego lokalizowania rowków wiążących na trójwymiarowych strukturach białek.

Pobierz
Cześć, tu Alex z DEV STORIES DOT EU. Mastering DeepChem, odcinek 13 z 15. Masz nowo zmapowaną strukturę 3D białka wirusowego, ale znalezienie miejsca, w którym lek terapeutyczny może się do niego przyczepić, przypomina próbę dopasowania pojedynczego elementu do układanki z dziesięciu tysięcy elementów unoszącej się w trójwymiarze. Nie możesz po prostu rzucić małą cząsteczką w ogromne białko i mieć nadzieję, że się przyklei. Najpierw musisz zmapować bruzdy strukturalne, a właśnie do tego służy Binding Pocket Discovery. Zanim przejdziemy dalej, wyjaśnijmy powszechne nieporozumienie. Pocket Discovery nie umieszcza leku wewnątrz białka. Bada jedynie pustą przestrzeń, żeby znaleźć potencjalne miejsca wiązania. Generowanie rzeczywistej pozycji cząsteczki w tym miejscu to tak zwane pose generation. To zupełnie osobny krok. Dzisiaj zależy nam tylko na znalezieniu wolnych miejsc parkingowych. W DeepChem ten workflow zaczyna się od base class Binding Pocket Finder. To abstrakcyjny szablon. Jego zadaniem jest dostarczenie standardowego interfejsu, który przyjmuje makrocząsteczkę 3D jako input i zwraca listę potencjalnych kieszeni jako output. Dzięki użyciu base class, DeepChem gwarantuje, że niezależnie od tego, czy używasz wbudowanego algorytmu, czy piszesz własny, twój pipeline pozostaje spójny. Jednak całą czarną robotę odwalają konkretne implementacje, z których najpopularniejszą jest Convex Hull Pocket Finder. Convex Hull Pocket Finder algorytmicznie analizuje geometrię 3D twojego białka wirusowego. Wyobraź sobie, że ciasno owijasz całą makrocząsteczkę folią termokurczliwą. Folia napina się prosto nad szczelinami, zagłębieniami i pęknięciami na powierzchni. Ta zewnętrzna granica to matematyczny convex hull. Puste przestrzenie uwięzione między tą płaską zewnętrzną granicą a rzeczywistą, wyboistą powierzchnią atomową białka to twoje potencjalne kieszenie wiążące. To właśnie te wrażliwe bruzdy, w których nowy lek może się skutecznie zakotwiczyć. Aby systematycznie zidentyfikować te przestrzenie, algorytm dzieli przestrzeń wokół białka na gęstą siatkę 3D. Przeszukuje tę siatkę i identyfikuje woksele, czyli maleńkie pudełka 3D. Szuka wokseli, które znajdują się wewnątrz convex hull, ale nie zawierają żadnych atomów białka. Mierzy również odległość od tych pustych pudełek do najbliższego atomu białka. Jeśli pudełko jest zbyt mocno wyeksponowane na zewnątrz, jest ignorowane. Jeśli jest zakopane zbyt głęboko w rdzeniu białka, również jest ignorowane. Algorytm grupuje pozostałe, prawidłowe pudełka, tworząc ciągłe kształty wnęk na powierzchni. Kiedy zmapuje wnękę, finder generuje wokół niej bounding box. I tu jest kluczowa sprawa. Algorytm nie przycina tego bounding boxa idealnie do dokładnych wymiarów otworu. Dodaje wyliczoną warstwę paddingu wokół krawędzi. Ten dodatkowy margines jest kluczowy, ponieważ cząsteczki w biologii są dynamiczne. Kiedy ostatecznie przekażesz te współrzędne kieszeni do algorytmu dokującego na późniejszym etapie twojego pipeline'u, ten padding zapewni niezbędne pole manewru. Daje to kolejnemu krokowi wystarczająco dużo przestrzeni wokół, żeby obliczyć, jak lek może się skręcić, obrócić lub przesunąć, gdy osadza się w bruzdzie. Przekazujesz swoje białko wirusowe do Convex Hull Pocket Finder, a on zwraca ci czysty array bounding boxów z paddingiem. Teraz dokładnie wiesz, gdzie znajdują się słabe punkty struktury, i możesz skupić swoje zasoby obliczeniowe wyłącznie na tych konkretnych współrzędnych. Jeśli chcesz pomóc w tworzeniu kolejnych odcinków, możesz wesprzeć podcast, wyszukując DevStoriesEU na Patreonie. Padding gwarantuje, że twoje downstreamowe symulacje dokowania nie zawiodą tylko dlatego, że uderzyły w sztuczną, matematyczną ścianę. To wszystko w tym odcinku. Dzięki za wysłuchanie i twórz dalej!
14

Generowanie póz z Vina i Gnina

3m 44s

Zrób kolejny krok w dokowaniu molekularnym, obliczając pozycje wiązania. Dowiedz się, jak VinaPoseGenerator i GninaPoseGenerator oceniają geometrie przestrzenne w celu przewidywania interakcji.

Pobierz
Cześć, tu Alex z DEV STORIES DOT EU. Mastering DeepChem, odcinek 14 z 15. Masz białko docelowe i potencjalną cząsteczkę leku, ale wiedza o ich możliwych interakcjach jest bezużyteczna, dopóki nie wiesz dokładnie, jak fizycznie do siebie pasują. Nie musimy już zgadywać kształtów na ślepo. Możemy wykorzystać pre-trained Convolutional Neural Networks do przewidywania rzeczywistej fizyki póz wiązania. To jest Pose Generation z Viną i Gniną. Najpierw wyjaśnijmy częste nieporozumienie. Słuchacze często mylą dokowanie z dynamiką molekularną. Dynamika molekularna to symulacja w czasie, pokazująca, jak cząsteczki skręcają się, zwijają i wibrują na przestrzeni mikrosekund. Pose generation, czyli dokowanie, tego nie robi. Oblicza statyczny snapshot. Oblicza optymalną geometrię spoczynkową ligandu wewnątrz kieszeni białkowej i przypisuje mu stacjonarny wynik energetyczny na podstawie tej jednej pozycji. W DeepChem całą czarną robotę obliczeniową wykonuje klasa PoseGenerator. Jej głównym zadaniem jest obliczenie wielu trójwymiarowych układów twojego ligandu, zwanych pozami, wewnątrz zdefiniowanego bounding boxa na białku. Następnie rankuje te pozy. Standardową implementacją do tego jest VinaPoseGenerator. Jest to wrapper na silnik AutoDock Vina, który opiera się na empirycznej funkcji scoringowej. Oblicza klasyczny wynik energii wiązania, oceniając fizyczne interakcje, takie jak wiązania wodorowe, kontakty hydrofobowe i odpychanie steryczne. Vina testuje konfigurację geometryczną, oblicza karę lub nagrodę energetyczną, lekko przesuwa atomy i próbuje ponownie. Przeszukuje tę ogromną przestrzeń geometryczną i zwraca listę póz posortowanych według najniższej energii wiązania. Klasyczne wzory fizyczne są niesamowicie szybkie, ale czasami błędnie oceniają złożone interakcje molekularne. I tutaj do akcji wkracza GninaPoseGenerator. GNINA to upgrade oparty na deep learningu. Bierze pod spodem framework Vina i ocenia konfiguracje za pomocą pre-trained Convolutional Neural Network. Weźmy scenariusz, w którym oceniasz nowego kandydata na lek na raka. Pose generator oblicza 10 różnych konfiguracji geometrycznych tego leku spoczywającego w docelowej kieszeni wiążącej. Zamiast po prostu sumować klasyczne parametry fizyczne, GNINA przepuszcza trójwymiarowe struktury atomowe tych 10 póz przez swoją sieć neuronową. GNINA rankuje te 10 póz za pomocą trzech różnych metryk. Po pierwsze, nadal oblicza tradycyjny, empiryczny wynik Vina jako baseline. Po drugie, zwraca CNN pose score. Jest to prawdopodobieństwo od zera do jedynki, wskazujące, jak bardzo wygenerowana poza pasuje do wysokiej jakości, eksperymentalnie potwierdzonej struktury. Po trzecie, oblicza CNN affinity score, który przewiduje rzeczywistą siłę wiązania. CNN pose score jest tutaj kluczowym dodatkiem. Działa jak zaawansowany filtr, zapobiegając wysokiemu rankowaniu przez system pozy, która wydaje się matematycznie stabilna dla klasycznych równań, ale w naturze jest fizycznie nierealna. Zaimplementowanie tego wymaga zaledwie kilku kroków. Inicjalizujesz GninaPoseGenerator. Wywołujesz jego metodę generate, przekazując plik struktury białka, plik struktury ligandu oraz wymiary współrzędnych definiujące bounding box kieszeni. Ograniczenie wyszukiwania do konkretnego boxa zapobiega marnowaniu cykli obliczeniowych na pustą przestrzeń. Następnie metoda zwraca twoje zrankowane pozy wraz z wynikami CNN, pozwalając ci wyciągnąć najlepszego fizycznego kandydata. Oto kluczowa sprawa. GNINA osiąga tę wysoką dokładność, traktując fizyczną przestrzeń 3D kieszeni białkowej jak ustrukturyzowany obraz. Dzieli współrzędne atomowe na trójwymiarowy grid. Następnie Convolutional Neural Network skanuje ten wolumetryczny grid w poszukiwaniu wzorców przestrzennych i chemicznych, dokładnie tak, jak standardowa sieć rozpoznawania obrazu szuka krawędzi i tekstur na zdjęciu. To wszystko w tym odcinku. Dzięki za wysłuchanie i keep building!
15

Reinforcement Learning w nauce

4m 36s

Odkryj, jak reinforcement learning może autonomicznie projektować cząsteczki. Omawiamy abstrakcje Environment i Policy w DeepChem wraz z algorytmem Advantage Actor-Critic (A2C).

Pobierz
Cześć, tu Alex z DEV STORIES DOT EU. Mastering DeepChem, odcinek 15 z 15. Chcesz zaprojektować bardzo stabilną cząsteczkę, ale nie masz ogromnego datasetu idealnych przykładów, żeby wytrenować model. Masz tylko zestaw reguł fizycznych. Kiedy brakuje ci statycznych danych, nie możesz użyć standardowego supervised learning. Zamiast tego potrzebujesz AI, które uczy się metodą prób, błędów i feedbacku. I tak dochodzimy do reinforcement learning w nauce. Jeśli siedzisz głęboko w tradycyjnym machine learningu, możesz to pomylić z supervised training. To fundamentalnie różne rzeczy. Supervised learning wymaga jawnego, oetykietowanego i statycznego datasetu. Reinforcement learning opiera się na ciągłych, interaktywnych nagrodach generowanych przez environment. Model próbuje wykonać ruch, environment odpowiada wynikiem, a model dostosowuje swoją strategię. W DeepChem fundamentem tej interakcji jest klasa Environment. Pomyśl o Environment jak o swoim bardzo dokładnym symulatorze naukowym. Definiuje ona fizyczne reguły wszechświata, w którym działa twoje AI. Śledzi aktualny state twojego systemu, definiuje matematyczne akcje, które twój model może podjąć, i wystawia funkcję step. Kiedy twój model wykonuje akcję, przekazuje ją do tej funkcji step. Environment przelicza fizykę, a następnie zwraca trzy rzeczy: nowy state, liczbowy reward oparty na tym, jak dobry jest ten nowy state, oraz flagę boolean, która wskazuje, czy task jest zakończony. Jeśli pracujesz już ze standardowymi narzędziami spoza chemii, DeepChem udostępnia klasę GymEnvironment. Ona po prostu opakowuje standardowe środowiska symulacyjne OpenAI Gym, dzięki czemu wpinają się bezpośrednio w twoje workflow w DeepChem. Komponent, który faktycznie wchodzi w interakcję z tym Environment, nazywa się Policy. Policy to abstrakcja reprezentująca mózg twojego agenta. Pobiera aktualny state z Environment i mapuje go na konkretną akcję, albo zwraca zestaw prawdopodobieństw dla różnych możliwych akcji. Żeby wydajnie wytrenować Policy, DeepChem implementuje algorytmy takie jak Advantage Actor-Critic, nazywane zazwyczaj A2C. Oto kluczowa kwestia. A2C dzieli proces uczenia na dwie oddzielne sieci neuronowe działające równolegle: Actor i Critic. Actor patrzy na state i decyduje, jaką akcję podjąć, żeby posunąć task do przodu. Critic obserwuje wynik i szacuje ogólną wartość bycia w tym nowym state. Słowo advantage odnosi się do różnicy między rzeczywistym rewardem otrzymanym od Environment, a rewardem przewidzianym przez Critica. Jeśli akcja przyniosła wyższy reward, niż oczekiwał Critic, advantage jest dodatni, a sieć Actor jest aktualizowana, żeby częściej podejmować tę akcję w przyszłości. Weźmy konkretny scenariusz, w którym chcesz autonomicznie konstruować nowe cząsteczki. Twoje Environment to silnik chemiczny zaprogramowany do obliczania stabilności molekularnej. Zaczynasz od podstawowego pierścienia chemicznego. Actor ocenia ten początkowy state i decyduje się dołączyć atom węgla. Environment przetwarza ten step, symuluje nową strukturę chemiczną, odkrywa spadek stabilności i zwraca ujemny reward. Critic obserwuje ten wynik, aktualizuje swoje bazowe oczekiwania i sygnalizuje Actorowi, że to był kiepski ruch. W kolejnej iteracji Actor próbuje zamiast tego dołączyć atom tlenu. Environment symuluje zmianę, oblicza wyższą stabilność, zwraca dodatni reward, a Critic wzmacnia ten wybór. Krok po kroku, algorytm A2C nawiguje po symulatorze chemicznym, budując złożoną, bardzo stabilną cząsteczkę całkowicie autonomicznie, bez odwoływania się do statycznego datasetu dobrych cząsteczek. Agenci reinforcement learning mogą odpytywać symulatory miliony razy, odkrywając rozwiązania, które ludzka intuicja mogłaby całkowicie przegapić. Ten odcinek kończy nasz deep dive w DeepChem. Jeśli chcesz pójść z tymi narzędziami o krok dalej, sprawdź oficjalną dokumentację i spróbuj zbudować własne environments w praktyce. Możesz też odwiedzić devstories dot eu, żeby zasugerować tematy do przyszłych serii. To wszystko w tym odcinku. Dzięki za wysłuchanie i buduj dalej!