Retour au catalogue
Season 22 15 Épisodes 54 min 2026

Mastering DeepChem

v2.8 — Édition 2026. Un guide complet sur DeepChem, un framework pour démocratiser le deep learning dans les sciences. Couvrant tout, de la manipulation des données et MoleculeNet aux graph featurizers, en passant par les modèles ML spécialisés, le molecular docking et le reinforcement learning (v2.8 - 2026).

Calcul scientifique Deep Learning pour la science Chemoinformatique
Mastering DeepChem
Lecture en cours
Click play to start
0:00
0:00
1
Le Projet DeepChem
Une introduction au projet DeepChem et à sa mission de démocratiser le deep learning pour la science. Nous abordons la façon dont il a évolué, passant d'applications chimiques à une suite plus large d'outils de machine learning scientifique.
3m 36s
2
Gérer les Datasets Scientifiques
Explorez l'abstraction Dataset de DeepChem pour la manipulation de données scientifiques à grande échelle. Découvrez les différences cruciales entre NumpyDataset et DiskDataset pour la gestion de la mémoire out-of-core.
3m 17s
3
Les Benchmarks MoleculeNet
Découvrez MoleculeNet, la principale suite de benchmarks intégrée à DeepChem. Nous discutons de la manière dont la standardisation de datasets comme Tox21 et QM9 accélère la chimie computationnelle.
3m 44s
4
Feature Engineering pour les Molécules
Découvrez comment DeepChem traduit les structures chimiques en nombres lisibles par la machine à l'aide des Featurizers. Nous explorons la méthode CircularFingerprint pour mapper les chaînes SMILES en vecteurs de bits.
3m 43s
5
Graph Convolution Featurizers
Allez au-delà des simples vecteurs de bits et explorez comment DeepChem représente les molécules sous forme de graphes mathématiques. Nous couvrons ConvMolFeaturizer et MolGraphConvFeaturizer.
3m 28s
6
Splitting Scientifiquement Éclairé
Découvrez pourquoi les random splits standards échouent sur les datasets scientifiques. Nous explorons RandomStratifiedSplitter et comment valider correctement les modèles sur des données multi-tâches fortement déséquilibrées.
3m 55s
7
Dompter les Données avec les Transformers
Apprenez à normaliser des distributions scientifiques brutes à l'aide des Transformers de DeepChem. Nous discutons du NormalizationTransformer et du MinMaxTransformer pour un entraînement stable.
3m 46s
8
L'API Model et les Wrappers Scikit-Learn
Explorez l'interface unifiée Model de DeepChem et comment encapsuler des algorithmes traditionnels à l'aide de SklearnModel. Découvrez pourquoi la meilleure solution n'est parfois pas un réseau de neurones profond.
2m 44s
9
Modèles de Graphes Moléculaires Spécialisés
Plongez dans les architectures de deep learning conçues spécifiquement pour la chimie. Nous couvrons les Graph Convolutional Networks (GCNModel) et les Message Passing Neural Networks (MPNNModel).
3m 58s
10
Évaluer les Modèles Scientifiques
Découvrez pourquoi la précision standard échoue en ML scientifique. Nous explorons la classe Metric de DeepChem, le coefficient de corrélation de Matthews et comment évaluer des modèles multi-tâches déséquilibrés.
3m 57s
11
Tuning Intelligent des Hyperparamètres
Allez au-delà de la recherche en grille par force brute. Découvrez comment utiliser GaussianProcessHyperparamOpt dans DeepChem pour naviguer intelligemment dans des espaces d'hyperparamètres complexes.
3m 25s
12
Meta-learning pour les Régimes à Faibles Données
Explorez le Model-Agnostic Meta-Learning (MAML) dans DeepChem. Apprenez à entraîner des modèles capables de s'adapter rapidement à de nouvelles expériences scientifiques coûteuses avec très peu de données.
3m 38s
13
Découverte des Poches de Liaison
Comprenez la géométrie des interactions protéine-ligand. Nous explorons le ConvexHullPocketFinder de DeepChem pour localiser algorithmiquement les sillons de liaison sur des structures protéiques 3D.
3m 50s
14
Génération de Poses avec Vina et Gnina
Franchissez une nouvelle étape dans le molecular docking en calculant les poses de liaison. Découvrez comment VinaPoseGenerator et GninaPoseGenerator évaluent les géométries spatiales pour prédire les interactions.
3m 50s
15
Le Reinforcement Learning en Science
Découvrez comment le reinforcement learning peut concevoir des molécules de manière autonome. Nous couvrons les abstractions Environment et Policy de DeepChem aux côtés de l'algorithme Advantage Actor-Critic (A2C).
3m 49s

Épisodes

1

Le Projet DeepChem

3m 36s

Une introduction au projet DeepChem et à sa mission de démocratiser le deep learning pour la science. Nous abordons la façon dont il a évolué, passant d'applications chimiques à une suite plus large d'outils de machine learning scientifique.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Maîtriser DeepChem, épisode 1 sur 15. Tu veux appliquer le machine learning à un problème scientifique, alors tu te tournes vers les outils standards. Mais ces outils traitent les molécules et les protéines comme de simples arrays de données plats, en ignorant complètement la physique sous-jacente. L'outil qui comble ce vide, c'est le projet DeepChem. On pense souvent que DeepChem est un moteur de tenseurs standalone, un truc que tu utilises à la place de PyTorch, TensorFlow ou JAX. C'est faux. DeepChem est un toolset spécifique à un domaine, construit directement au-dessus de ces frameworks génériques. Il agit comme un traducteur. Il gère toute l'ingénierie complexe nécessaire pour transformer des données physiques désordonnées en un format qu'un réseau de neurones standard peut traiter. Le projet existe pour démocratiser le deep learning pour la science. À ses débuts, il se concentrait strictement sur la chimie. L'objectif de départ, c'était de rendre la découverte de médicaments accessible, en donnant aux chercheurs les outils pour prédire des propriétés chimiques sans avoir besoin d'un énorme laboratoire propriétaire. Mais plus le domaine a grandi, plus le framework a évolué. Aujourd'hui, DeepChem est discrètement devenu un hub central pour presque n'importe quelle application scientifique de deep learning. Pour comprendre son ampleur, regarde la différence entre les domaines qu'il gère. Lundi, tu pourrais utiliser DeepChem pour prédire la solubilité aqueuse d'une nouvelle molécule de type médicament. Ça demande un modèle qui comprend les liaisons moléculaires et les états quantiques. Et le jeudi, tu pourrais utiliser le même framework pour analyser une image de microscopie afin de compter des cellules individuelles. Ce sont des problèmes physiques complètement différents. DeepChem fait l'abstraction du boilerplate sous-jacent pour les deux, en fournissant des outils spécialisés pour le machine learning moléculaire, la bio-informatique, et même la science des matériaux. Voici l'idée clé. La partie la plus dure dans le machine learning scientifique, c'est la représentation des données. Un modèle de deep learning standard n'a aucune notion de structure atomique ou de séquences biologiques. DeepChem résout ça en fournissant des featurizers ultra-optimisés. Un featurizer prend un objet scientifique brut, comme un composé chimique écrit en notation textuelle standard, et le traduit mathématiquement en un graphe ou un vecteur. Après la featurization, l'information va dans des objets dataset DeepChem spécialisés. Ces objets sont conçus pour gérer efficacement de grandes collections de données scientifiques sur le disque. Ça évite les crashs mémoire quand tu traites des millions de composés complexes. DeepChem gère aussi la façon dont les modèles scientifiques sont évalués. En machine learning standard, tu splittes généralement tes données de training et de testing aléatoirement. Mais en chimie, un split aléatoire pousse les modèles à mémoriser les données de training plutôt qu'à apprendre la vraie physique. Pour corriger ça, DeepChem fournit des splitters spécialisés. Par exemple, un scaffold splitter sépare les molécules en fonction de leur structure bidimensionnelle de base. Ça garantit que tes données de testing représentent des familles chimiques entièrement nouvelles, ce qui force le modèle à prouver qu'il généralise vraiment sur des composés qu'il n'a jamais vus. Une fois que tes données sont préparées et splittées, DeepChem fournit toute une suite de modèles pré-construits, adaptés à ces datasets. Tu passes tes objets scientifiques au featurizer, DeepChem les convertit, gère les splits, les envoie dans la couche PyTorch ou TensorFlow sous-jacente, et sort une prédiction. La vraie puissance de DeepChem, c'est qu'il encode la connaissance du domaine directement dans ton pipeline de données, ce qui te permet de te concentrer purement sur la découverte scientifique plutôt que sur la plomberie structurelle du machine learning. Si tu veux aider à faire vivre l'émission, tu peux chercher DevStoriesEU sur Patreon. C'est tout pour cet épisode. Merci d'avoir écouté, et continue de builder !
2

Gérer les Datasets Scientifiques

3m 17s

Explorez l'abstraction Dataset de DeepChem pour la manipulation de données scientifiques à grande échelle. Découvrez les différences cruciales entre NumpyDataset et DiskDataset pour la gestion de la mémoire out-of-core.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Maîtriser DeepChem, épisode 2 sur 15. Le plus gros bottleneck en machine learning scientifique n'est presque jamais l'architecture du modèle. C'est plutôt d'essayer de charger des fichiers massifs sans faire crasher ta RAM. Gérer les datasets scientifiques, c'est comme ça que tu dépasses ce mur de mémoire. Quand tu passes sur DeepChem, le premier réflexe c'est souvent de tout charger dans un DataFrame Pandas. Les DataFrames sont excellents pour les données tabulaires en deux dimensions. Mais le machine learning scientifique demande souvent des arrays à plus haute dimension, plusieurs tâches de prédiction en simultané, et une importance des samples par tâche. DeepChem utilise sa propre abstraction de Dataset, parce qu'elle lie nativement les features, les labels multi-tâches et les weights des samples dans un format strict que les modèles peuvent consommer efficacement. Chaque objet Dataset dans DeepChem garantit la présence de quatre arrays parallèles. D'abord, tu as X, qui contient tes features numériques. Ensuite, tu as y, qui contient tes labels ou les targets que tu essaies de prédire. Troisièmement, tu as w, l'array des weights. C'est là que ça devient intéressant. Les datasets scientifiques sont souvent sparse. Tu peux avoir des données expérimentales qui montrent qu'une molécule est efficace contre une target, mais aucune donnée sur sa toxicité pour le foie. Au lieu de dropper la molécule complètement ou d'inventer un faux label, tu mets le weight de la tâche manquante à zéro. Le modèle apprend à partir des données que tu as et ignore les trous. Enfin, tu as l'array ids, qui stocke un identifiant unique pour chaque sample, comme une string SMILES chimique. Avoir un format standardisé c'est utile, mais la vraie puissance de l'abstraction Dataset, c'est la façon dont elle gère la mémoire système. DeepChem propose deux méthodes principales pour stocker ces quatre arrays. Si ton dataset est assez petit pour tenir dans ta mémoire système, tu utilises un NumpyDataset. Sous le capot, ça stocke simplement des arrays NumPy standards dans la RAM. Ça offre un accès extrêmement rapide et c'est idéal pour le prototypage ou pour travailler avec de plus petites collections de molécules. La limite du NumpyDataset devient évidente quand tu bosses avec des données scientifiques du monde réel. Imagine que tu travailles avec un dataset de 100 gigaoctets de structures cristallines denses en trois dimensions. Essayer de charger ça dans des arrays in-memory standards fera instantanément crasher une machine classique. Pour résoudre ça, DeepChem propose le DiskDataset. Un DiskDataset fait exactement ce que son nom indique. Il stocke les arrays X, y, w et ids sur plusieurs petits fichiers, ou shards, directement sur ton disque dur. Tu spécifies un data directory, et DeepChem gère le stockage. Quand tu entraînes un modèle, le DiskDataset ne tire que le batch de données actuel dans la RAM. Une fois que le modèle a traité ce batch, la mémoire est libérée pour le suivant. La transition entre ces deux formats est totalement transparente pour le reste de ton code. Tu peux écrire une training loop, la tester en local avec un petit NumpyDataset, puis deploy exactement le même code sur un cluster qui pointe vers un DiskDataset massif. Le modèle demande simplement au dataset le batch suivant, et le dataset gère si ce batch vient de la RAM ou s'il est streamé depuis le disque. Concevoir tes data pipelines autour de cet out-of-core streaming dès le premier jour garantit que ton infrastructure survivra au passage de quelques milliers de records expérimentaux à des millions de structures générées. Merci d'avoir écouté, happy coding tout le monde !
3

Les Benchmarks MoleculeNet

3m 44s

Découvrez MoleculeNet, la principale suite de benchmarks intégrée à DeepChem. Nous discutons de la manière dont la standardisation de datasets comme Tox21 et QM9 accélère la chimie computationnelle.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Maîtriser DeepChem, épisode 3 sur 15. Tu lis un papier qui affirme qu'un nouveau graph neural network atteint des résultats state-of-the-art sur des propriétés chimiques. Mais quand tu regardes de plus près, tu vois qu'ils ont utilisé un data split custom, un dataset propriétaire et une métrique obscure, ce qui rend leur affirmation mathématiquement dénuée de sens. La comparaison standardisée est la seule façon de faire des progrès scientifiques, et en chimie computationnelle, ce standard, c'est la suite de benchmarks MoleculeNet. Une erreur courante, c'est de penser que MoleculeNet est juste un repository statique. Ce n'est pas un dossier téléchargeable de fichiers CSV qui traîne sur un serveur et que tu dois parser et nettoyer toi-même. C'est une suite de datasets soigneusement sélectionnés et profondément intégrés directement dans DeepChem via le module dc point molnet. Ça sert de ImageNet pour le machine learning moléculaire. Ça fournit un ensemble partagé de tâches, des splits standardisés et des baselines évaluées dans différents domaines. La suite catégorise ses données en domaines scientifiques spécifiques pour tester différentes capacités de modélisation. Tu as des datasets de mécanique quantique, comme QM9, qui contient les propriétés géométriques et énergétiques des petites molécules. Tu as des datasets de chimie physique pour prédire la solubilité ou l'énergie libre d'hydratation. Et tu as des datasets de biophysique et de physiologie, y compris des benchmarks de toxicité comme Tox21, qui mesure comment des milliers de produits chimiques environnementaux interagissent avec des voies biologiques spécifiques. Prenons un scénario pratique. Tu viens de concevoir un nouveau modèle de prédiction de toxicité, et tu dois prouver mathématiquement qu'il surpasse les baselines précédentes. Tu n'as pas besoin de chercher les données brutes de Tox21, de gérer les valeurs manquantes ou d'écrire un parser custom. À la place, tu appelles la fonction load tox 21 du module dc point molnet. C'est là que ça devient intéressant. Quand tu invoques une fonction load dans MoleculeNet, elle ne renvoie pas juste du texte brut. Elle traite les données dynamiquement en utilisant un featurizer que tu spécifies dans les arguments, comme des circular fingerprints ou des structures de graphes. La fonction renvoie généralement un tuple contenant trois éléments principaux. Premièrement, elle te donne une liste des noms de tâches. Pour Tox21, ce sont les douze cibles biologiques spécifiques que tu essaies de prédire. Deuxièmement, elle renvoie le dataset lui-même, qui est déjà proprement partitionné en sous-ensembles de training, de validation et de test. Troisièmement, elle fournit les transformers utilisés pour normaliser ou scaler les données pendant la phase de chargement. Tu prends ce training set Tox21 pré-split, tu le donnes à ton nouveau modèle, puis tu évalues les prédictions par rapport au test set. Parce que tous les autres chercheurs utilisent exactement la même API et le même pipeline de featurization, ton score ROC final peut être comparé directement et équitablement aux baselines publiées. MoleculeNet standardise aussi la façon dont tu évalues la généralisation grâce à des stratégies de split. L'API supporte plusieurs façons de diviser tes données. Même si tu peux utiliser un random split basique, la chimie nécessite souvent un scaffold split. Un scaffold split sépare les molécules en fonction de leurs structures bidimensionnelles de base. Ça force le test set à contenir des frameworks moléculaires que le modèle n'a jamais vus pendant le training. Ça teste si ton modèle a réellement appris les règles chimiques sous-jacentes, plutôt que de juste mémoriser des petites variations. Par défaut, les fonctions load appliquent la méthode de split qui a le plus de sens scientifiquement pour ce dataset spécifique. La partie la plus dure du machine learning appliqué, ce n'est pas d'écrire l'architecture du modèle, c'est de prouver que le modèle généralise vraiment sur des données inédites sans data leakage. MoleculeNet te donne le playground strict et standardisé nécessaire pour que ces preuves tiennent la route. C'est tout pour cet épisode. Merci d'avoir écouté, et continue de développer !
4

Feature Engineering pour les Molécules

3m 43s

Découvrez comment DeepChem traduit les structures chimiques en nombres lisibles par la machine à l'aide des Featurizers. Nous explorons la méthode CircularFingerprint pour mapper les chaînes SMILES en vecteurs de bits.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Maîtriser DeepChem, épisode 4 sur 15. Un réseau de neurones ne peut pas digérer une structure chimique dessinée sur un tableau blanc. Même si tu écris cette structure sous forme de string, les algorithmes de machine learning standards ne peuvent toujours pas la lire. Ils ont besoin que la data soit prémâchée sous forme d'arrays numériques. Le pont entre une représentation chimique et un modèle mathématique, c'est le Feature Engineering pour les molécules. En chimio-informatique, on représente souvent les molécules par des strings SMILES. Ce sont des séquences de caractères qui définissent les atomes et les liaisons. Un cycle carboné devient un pattern textuel spécifique. Mais si tu essaies de passer une string brute à un Random Forest ou à une Support Vector Machine, ça va planter. Un modèle mathématique a besoin d'un vecteur numérique de longueur fixe en input. Transformer ce texte chimique en un array de nombres, c'est ce qu'on appelle la featurization. DeepChem gère cette étape avec un ensemble de classes dédiées qu'on appelle des featurizers. Avant de regarder comment DeepChem fait ça, il y a un point de confusion fréquent à clarifier. Quand les gens entendent parler de générer une représentation vectorielle de texte, ils pensent tout de suite aux embeddings appris, comme ceux qu'on utilise dans les modèles de langage modernes. Les fingerprints chimiques ne sont pas des embeddings appris. Il n'y a pas de poids mis à jour, et aucun réseau de neurones n'intervient dans la création de la feature elle-même. Un fingerprint est un algorithme de hashing déterministe. Si tu traites exactement la même molécule sur deux machines différentes, tu obtiendras exactement le même array de 1 et de 0. Le featurizer le plus courant que tu utiliseras pour les modèles baseline dans DeepChem, c'est le Circular Fingerprint. Il implémente une méthode connue sous le nom de Extended Connectivity Fingerprints. Voici comment la logique fonctionne. L'algorithme examine chaque atome lourd de ta molécule. À partir de chaque atome, il rayonne vers l'extérieur en cercle, en regardant les atomes et les liaisons voisins jusqu'à un rayon spécifique. Tu peux contrôler ce rayon, mais regarder jusqu'à deux liaisons de distance est la pratique standard. Il capture ces fragments structurels locaux, les passe dans une fonction de hash, et les mappe à un index spécifique dans un array de longueur fixe. Le résultat est un bit vector. Un 1 à un index spécifique signifie qu'une sous-structure chimique particulière est présente. Un 0 signifie qu'elle est absente. Imagine que tu as une liste de strings SMILES qui représentent des centaines de petites molécules de type médicament. Tu veux entraîner un modèle Random Forest pour prédire leur toxicité. D'abord, tu initialises la classe CircularFingerprint dans DeepChem. Tu la configures pour avoir un output d'une taille de 1024. C'est la partie qui compte. Chaque molécule, qu'elle ait dix ou cinquante atomes, sera convertie en un array d'exactement 1024 bits. Tu passes ensuite ta liste de strings SMILES à la méthode featurize de cette classe. L'algorithme traite chaque string indépendamment et renvoie une matrice en deux dimensions. Les lignes représentent tes molécules, et les 1024 colonnes représentent la présence ou l'absence de sous-structures spécifiques. Comme l'output est juste une matrice numérique standard, tu n'es plus limité aux outils spécifiques à la chimie. Tu peux passer cette matrice directement à des librairies de machine learning standards. Comme les fingerprints reposent sur des hashes déterministes de longueur fixe plutôt que sur une sémantique apprise, des collisions peuvent se produire, ce qui veut dire que deux fragments structurels complexes différents peuvent parfois se mapper sur exactement le même bit. Malgré ça, ils restent la baseline la plus rapide et la plus fiable pour transformer de la chimie abstraite en maths concrètes. C'est tout pour cet épisode. Merci d'avoir écouté, et continue de développer !
5

Graph Convolution Featurizers

3m 28s

Allez au-delà des simples vecteurs de bits et explorez comment DeepChem représente les molécules sous forme de graphes mathématiques. Nous couvrons ConvMolFeaturizer et MolGraphConvFeaturizer.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Maîtriser DeepChem, épisode 5 sur 15. Si tu représentes un composé chimique par une simple string de caractères, tu fais complètement abstraction de la topologie physique qui dicte comment il interagit avec le monde. Les molécules ne sont pas des phrases linéaires, ce sont des structures interconnectées. Pour préserver cette réalité structurelle dans tes datasets, tu as besoin de Graph Convolution Featurizers. Quand tu entends le mot convolution, tu imagines peut-être un modèle d'image qui fait glisser un filtre sur une grille de pixels fixe et carrée. Tu dois oublier ce modèle mental. Les atomes ne sont pas disposés sur des grilles uniformes. Un atome de carbone peut se connecter à quatre voisins, alors qu'un oxygène se connecte à deux, et un hydrogène à un seul. Les opérations de graphe gèrent cette connectivité arbitraire et irrégulière, et les graph featurizers servent de pont pour traduire les données chimiques brutes dans un format que ces opérations peuvent consommer. DeepChem propose deux outils principaux pour faire ça. Le premier, c'est le ConvMolFeaturizer. Cette fonction analyse une molécule et génère un feature vector initial pour chaque atome. Elle calcule des propriétés comme le type d'élément, le nombre total d'atomes lourds connectés, la valence, la charge formelle, la charge partielle et l'hybridation orbitale. Elle regroupe ces features au niveau de l'atome dans un objet spécifique appelé ConvMol. Ce format a été conçu pour alimenter directement les graph convolution networks natifs de DeepChem. Le deuxième outil, c'est le MolGraphConvFeaturizer. C'est l'approche la plus moderne, et elle est hyper polyvalente parce qu'elle sort un objet GraphData standard. Ça en fait le choix de référence si tu passes des données à des frameworks génériques comme PyTorch Geometric ou DGL. Voyons comment le MolGraphConvFeaturizer gère un simple cycle benzénique. Le benzène est composé de six atomes de carbone arrangés en un hexagone continu. Le featurizer traite cette structure en la divisant en nodes et en edges. D'abord, il crée les nodes. Pour chacun des six atomes de carbone, il calcule un array numérique de propriétés atomiques, en enregistrant l'état d'hybridation et la charge partielle de cet atome spécifique. Ces six arrays individuels sont empilés ensemble pour former la node feature matrix. Ensuite, il mappe les edges, qui correspondent aux liaisons chimiques. Il construit un edge index, qui est tout simplement une liste de paires de coordonnées identifiant exactement quel atome est connecté à quel autre. Il génère aussi des edge features. Pour chaque liaison dans cet edge index, le featurizer enregistre des données structurelles. Il vérifie si la liaison est simple, double, triple ou aromatique. Puisqu'on regarde le benzène, le featurizer encode explicitement la nature aromatique de ces liaisons, et indique si la liaison est conjuguée ou fait partie d'un système cyclique. Enfin, il regroupe la node feature matrix, l'edge index et les edge features dans un seul objet GraphData. Tu as maintenant un graphe mathématique qui conserve à la fois les caractéristiques atomiques et les connexions topologiques exactes de la molécule d'origine, en contournant complètement les limites des représentations vectorielles plates. Voici l'idée clé. La qualité d'un graph neural network est entièrement bridée par la richesse structurelle de la data structure que tu lui fournis. En utilisant correctement un graph featurizer, tu t'assures que ton modèle apprend réellement la chimie sous-jacente au lieu d'essayer de mémoriser un résumé unidimensionnel. Merci d'avoir passé quelques minutes avec moi. À la prochaine, porte-toi bien.
6

Splitting Scientifiquement Éclairé

3m 55s

Découvrez pourquoi les random splits standards échouent sur les datasets scientifiques. Nous explorons RandomStratifiedSplitter et comment valider correctement les modèles sur des données multi-tâches fortement déséquilibrées.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Maîtriser DeepChem, épisode 6 sur 15. Tu construis un modèle sur un nouveau dataset chimique, tu lances ta validation et tu obtiens 99 % de précision. Tu lances le deploy, et il échoue immédiatement dans le monde réel. Tes métriques de validation t'ont menti en toute confiance à cause de la façon dont tu as divisé tes données. Aujourd'hui, on s'intéresse au Scientifically Aware Splitting, et plus précisément on va comparer le Random Splitter par défaut avec le Random Stratified Splitter. Tu pourrais penser que faire un split de données dans DeepChem, c'est exactement pareil que d'utiliser une fonction train-test split basique d'une librairie de machine learning généraliste comme Scikit-Learn. C'est une erreur courante. Les splitters généralistes fonctionnent bien pour des arrays simples avec un seul label. Les splitters de DeepChem sont conçus pour gérer nativement les environnements multi-task complexes, les labels boolean sparse, et les structures de données spécifiques que DeepChem utilise pour stocker les molécules. Commençons par l'approche par défaut : le Random Splitter. Cet outil se comporte exactement comme son nom l'indique. Il prend ton dataset chargé et répartit les composés chimiques de manière aléatoire et uniforme dans les sets de training, de validation et de testing. Si tu travailles avec un dataset parfaitement équilibré, où tes composés actifs et inactifs sont présents en proportions égales, ce mélange aléatoire fonctionne très bien. Mais les données scientifiques ne sont pratiquement jamais équilibrées. Prends l'exemple d'un dataset de toxicité comme Tox21. Dans le monde réel, la grande majorité des composés chimiques que tu testes sont sûrs, et les composés toxiques sont relativement rares. Supposons que seulement 1 % des composés de ton dataset soient marqués comme toxiques. C'est un déséquilibre de classe sévère. Si tu passes ce dataset dans un Random Splitter standard, le simple hasard statistique veut que ton set de validation ou de test puisse se retrouver avec zéro exemple toxique. Si ton set de test est composé uniquement de composés sûrs, un modèle qui devine simplement « sûr » pour chaque input obtiendra un score de 100 %. Tu te retrouves avec un score mathématiquement parfait pour un modèle complètement inutile. C'est là que le Random Stratified Splitter devient obligatoire. Au lieu de jeter aveuglément les composés dans des buckets, la stratification force le split à respecter la distribution réelle de tes labels. Le Random Stratified Splitter scanne les propriétés de ton dataset avant de diviser quoi que ce soit. Si tes données globales contiennent exactement 1 % de composés toxiques et 99 % de composés sûrs, le splitter garantit que ton set de training a un ratio de 1 pour 99, que ton set de validation a un ratio de 1 pour 99, et que ton set de test conserve exactement cette même proportion. Voici l'idée clé. Les datasets DeepChem impliquent généralement du multi-task learning. Ça signifie qu'un seul composé chimique n'est pas juste évalué pour une seule propriété, mais souvent pour des dizaines de tests biologiques différents en même temps. Les labels à travers ces tasks sont très sparse. Tu pourrais n'avoir qu'une poignée de hits positifs pour un test de toxicité spécifique sur dix mille lignes de données. Le Random Stratified Splitter navigue dans cette matrice multidimensionnelle. Il s'assure que ces hits positifs extrêmement rares sont répartis équitablement à travers tes splits. Chaque sous-ensemble de tes données reçoit une part représentative des composés actifs, empêchant n'importe quelle task de perdre sa minority class pendant le split. Sans ce mécanisme, l'évaluation de ton modèle repose complètement sur la chance. Pour les datasets scientifiques hautement déséquilibrés et multi-task, la stratification n'est pas une optimisation optionnelle. C'est une exigence fondamentale pour prouver que ton modèle a réellement appris la chimie sous-jacente au lieu de juste exploiter un angle mort statistique. Merci d'avoir passé quelques minutes avec moi. À la prochaine, à plus.
7

Dompter les Données avec les Transformers

3m 46s

Apprenez à normaliser des distributions scientifiques brutes à l'aide des Transformers de DeepChem. Nous discutons du NormalizationTransformer et du MinMaxTransformer pour un entraînement stable.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Maîtriser DeepChem, épisode 7 sur 15. Les vraies données scientifiques sont chaotiques, déséquilibrées et s'étalent sur des plages numériques immenses. Si tu donnes ces valeurs expérimentales brutes directement à un neural network, tu cherches vraiment à obtenir des gradients non convergents pendant la backpropagation. Pour corriger ça, tu dois dompter tes distributions avant qu'elles ne touchent ton model, et c'est là qu'interviennent les Transformers de DeepChem. Quand tu entends le mot Transformer dans le machine learning moderne, tu penses sûrement aux attention mechanisms, aux large language models, ou à BERT. Oublie tout ça pour cet épisode. Dans l'écosystème DeepChem, un Transformer est simplement un utilitaire de data preprocessing. Ce n'est pas une layer de neural network. C'est un objet qui prend un dataset et modifie ses features, ses labels ou ses weights pour rentrer dans les contraintes mathématiques strictes des algorithmes de machine learning. Prends un scénario où tu prédis la solubilité moléculaire expérimentale. Tes training data brutes peuvent contenir des target values allant de tout petits nombres négatifs à des dizaines de milliers. Les weights du neural network s'initialisent généralement avec de très petits nombres. Si tes input features ou tes target labels contiennent une valeur de quarante mille, le calcul de la loss qui en résulte génère un gradient massif. Les weights du réseau vont fluctuer violemment pendant l'étape d'update, sans réussir à converger vers une solution. Tu dois scaler les données. Une façon de gérer ça, c'est le MinMax Transformer. Cet utilitaire scanne tout ton dataset, trouve les valeurs minimales et maximales absolues pour tes features ou labels spécifiés, et écrase toute la distribution dans une plage stricte de zéro à un. La valeur la plus basse devient zéro, la plus haute devient un, et tout le reste se place proportionnellement entre les deux. Tu initialises le Transformer en lui passant ton dataset cible pour qu'il puisse calculer ces limites. Ensuite, tu appelles sa méthode transform, qui sort un nouveau dataset avec les nombres fraîchement scalés. Maintenant, les gradients restent stables. Écraser les données entre zéro et un n'est pas toujours idéal, surtout si ton dataset contient des outliers massifs. Un outlier extrême va forcer le reste de tes data points normaux à se compresser dans une minuscule fraction indiscernable de cette plage de zéro à un. Pour ça, tu utilises le Normalization Transformer. Au lieu d'imposer des limites strictes, il décale toute ta distribution pour que la moyenne soit exactement à zéro, et scale la dispersion pour que l'écart type soit de un. Ça centre parfaitement tes données, en les alignant avec le sweet spot opérationnel de la plupart des activation functions de neural network. Voici l'idée clé. Scaler les input features est à sens unique, mais transformer tes labels crée un deuxième problème. Si ton model s'entraîne sur des targets de solubilité normalisées, ses prédictions finales seront aussi normalisées. Une valeur prédite de zéro virgule quatre est mathématiquement correcte, mais pratiquement inutile pour un chimiste qui s'attend à une mesure du monde réel. DeepChem résout ça en conservant l'état des métriques de scaling à l'intérieur de l'objet Transformer. Une fois que ton model génère une prédiction normalisée, tu passes cet output dans la méthode untransform de ce même Transformer. Ça inverse l'arithmétique, en mappant la prédiction scalée directement vers son unité scientifique d'origine. Normaliser tes données n'est pas une étape d'optimisation optionnelle en deep learning, c'est une exigence structurelle pour la stabilité du training. Merci d'avoir écouté, happy coding tout le monde !
8

L'API Model et les Wrappers Scikit-Learn

2m 44s

Explorez l'interface unifiée Model de DeepChem et comment encapsuler des algorithmes traditionnels à l'aide de SklearnModel. Découvrez pourquoi la meilleure solution n'est parfois pas un réseau de neurones profond.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Maîtriser DeepChem, épisode 8 sur 15. Parfois, la meilleure solution à un problème scientifique, c'est pas un réseau de neurones massif qui prend une semaine à s'entraîner. Souvent, un random forest robuste suffit. Mais passer d'un algorithme traditionnel à un pipeline de deep learning complexe, ça implique généralement de réécrire tout ton code de gestion de données. Cet épisode couvre l'API Model et les wrappers Scikit-Learn, qui résolvent exactement ce problème. DeepChem utilise une classe de base unifiée, tout simplement appelée Model. Cette classe standardise la façon dont tu entraînes et tu évalues les algorithmes dans toute la librairie. La logique de base repose sur deux méthodes principales. Tu utilises fit pour entraîner l'algorithme, et tu utilises predict pour générer des outputs sur de nouvelles données. La caractéristique principale de cette interface, c'est que ces méthodes attendent des objets Dataset de DeepChem en input. Tu ne passes pas directement des arrays ou des dataframes bruts au modèle. Le Dataset sert de conteneur standard pour tes features, tes labels et tes weights, et l'API Model sait exactement comment le lire. Tu pourrais penser qu'une librairie spécialisée comme DeepChem écrirait ses propres implémentations custom pour les algorithmes de machine learning de base. Eh bien non. DeepChem ne réinvente pas Scikit-Learn. À la place, elle fournit un adaptateur appelé SklearnModel. Ce wrapper prend n'importe quel estimator Scikit-Learn standard et lui donne l'interface Model de DeepChem. Imaginons un scénario où tu veux prédire les propriétés physiques d'un nouveau matériau. D'abord, tu importes un random forest regressor standard directement depuis Scikit-Learn et tu l'initialises. Ensuite, tu passes ce regressor standard dans le wrapper SklearnModel de DeepChem. Tu as maintenant un objet compatible avec DeepChem. Pour l'entraîner, tu appelles fit sur le modèle wrappé, en lui passant ton Dataset DeepChem. En coulisses, le wrapper extrait automatiquement les matrices de features, les targets et les sample weights du Dataset, et les transmet à l'algorithme Scikit-Learn sous-jacent. Au moment de tester, tu appelles predict sur un nouveau Dataset, et le wrapper reformate l'output en un array standard. Voici le point essentiel. Vu que le wrapper SklearnModel expose exactement les mêmes méthodes fit et predict qu'un réseau de neurones profond construit nativement dans DeepChem, tu peux changer l'algorithme sous-jacent sans toucher à ton data pipeline. Tu peux établir une baseline rapide avec un modèle de machine learning traditionnel, puis passer sans problème sur un réseau de neurones complexe plus tard, juste en changeant la seule ligne de code qui initialise le modèle. Le data loading, la training loop et les étapes d'évaluation restent identiques. Ce qu'il faut retenir, c'est que l'API Model découple ton ingestion de données du choix de ton algorithme, ce qui te laisse libre de tester différentes approches mathématiques sans réécrire constamment du glue code. Si tu trouves ces épisodes utiles et que tu veux soutenir l'émission, tu peux chercher DevStoriesEU sur Patreon. C'est tout pour cet épisode. À la prochaine !
9

Modèles de Graphes Moléculaires Spécialisés

3m 58s

Plongez dans les architectures de deep learning conçues spécifiquement pour la chimie. Nous couvrons les Graph Convolutional Networks (GCNModel) et les Message Passing Neural Networks (MPNNModel).

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Maîtriser DeepChem, épisode 9 sur 15. Tu ne peux pas juste passer une molécule à un neural network standard conçu pour les images. Les molécules ne sont pas des grilles rigides de pixels ; ce sont des réseaux complexes d'atomes de tailles et de connexions variées. Si tu les forces dans une grille standard, tu détruis la chimie structurelle qui les rend uniques. Pour résoudre ça, on utilise des Specialized Molecular Graph Models. Ces modèles sont conçus spécifiquement pour ingérer nativement les featurized graphs générés dans tes étapes de preprocessing précédentes. Les auditeurs les confondent parfois avec les Convolutional Neural Networks traditionnels. Un CNN standard fait glisser un filtre de taille fixe sur une grille en deux dimensions. Mais une molécule n'a pas de coin en haut à gauche ou de résolution fixe. À la place, les graph models spécialisés opèrent dynamiquement sur les liaisons chimiques en tant que edges, et les atomes en tant que nodes. Ils se fichent des coordonnées de la grille. Ils ne s'intéressent qu'à la connectivité. DeepChem propose quelques architectures spécifiques pour ça. La première est le GCNModel, qui signifie Graph Convolutional Network. Vois un GCN comme un moyen de rassembler les voisinages atomiques locaux. Pour chaque atome de ta molécule featurized, le GCN regarde ses voisins immédiats. Il prend les features de ces atomes voisins, comme leur type d'élément ou leur état d'hybridation, et fait un pooling pour mettre à jour les features de l'atome d'origine. Il répète ce process sur quelques layers. À la fin, chaque atome a une représentation mathématique qui inclut le contexte de son environnement chimique. Le modèle agrège ensuite toutes ces représentations d'atomes en un seul vecteur mathématique pour prédire une propriété chimique générale, comme la toxicité ou la solubilité. Ça couvre les GCN, qui se concentrent surtout sur l'agrégation des données des nodes. Mais qu'en est-il des liaisons elles-mêmes ? Une double liaison se comporte très différemment d'une liaison simple, et parfois tu as besoin que le network pondère fortement cette différence. C'est là qu'intervient le MPNNModel, ou Message Passing Neural Network. Les Message Passing Neural Networks ne se contentent pas de regarder une molécule. Ils simulent mathématiquement comment l'information circule entre les voisins atomiques. Disons que tu entraînes un MPNNModel pour prédire les propriétés de mécanique quantique d'une molécule. Pour faire ça avec précision, la nature exacte des liaisons compte énormément. Dans un MPNN, les atomes et les liaisons contiennent tous les deux des données de features explicites. Pendant l'étape de training, le modèle effectue une phase de message passing. Chaque atome génère un message basé sur son state actuel et l'envoie à ses voisins via les liaisons qui les connectent. Point crucial, la liaison elle-même modifie ce message. Un message voyageant sur une liaison aromatique rigide sera calculé différemment d'un message voyageant sur une liaison simple flexible. Quand un atome reçoit les messages de tous ses voisins, il utilise un petit neural network interne pour mettre à jour son propre state. Il calcule en gros qu'il est un atome de carbone actuellement influencé par un atome d'oxygène sur une double liaison et un atome d'hydrogène sur une liaison simple. Ce process itère plusieurs fois. L'information se propage vers l'extérieur, étape par étape, à travers tout le réseau de liaisons. Après un nombre défini de steps, le modèle rassemble les states finaux de tous les atomes pour faire sa prédiction. Parce que le MPNN respecte nativement la vraie structure chimique, il excelle pour prédire des comportements quantiques complexes que des modèles plus simples ratent. Voici l'idée clé. Tu n'as pas besoin d'inventer des moyens de mapper les molécules dans des arrays plats. En utilisant les modèles GCN et MPNN, tu préserves la topologie atomique exacte de tes data, ce qui permet au network d'apprendre directement de la chimie elle-même. C'est tout pour cet épisode. Merci d'avoir écouté, et continue de développer !
10

Évaluer les Modèles Scientifiques

3m 57s

Découvrez pourquoi la précision standard échoue en ML scientifique. Nous explorons la classe Metric de DeepChem, le coefficient de corrélation de Matthews et comment évaluer des modèles multi-tâches déséquilibrés.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Mastering DeepChem, épisode 10 sur 15. Si tu testes des molécules pour un nouveau médicament, peut-être qu'une sur dix mille fonctionne vraiment. Un modèle qui prédit juste que chaque molécule est inutile atteindra un taux d'accuracy de 99,99 %, tout en ne découvrant absolument rien. C'est pour ça que l'accuracy de base est souvent une très mauvaise mesure pour la découverte scientifique, et c'est exactement pour ça qu'on doit parler de l'évaluation des modèles scientifiques. Dans les sciences, les datasets sont presque toujours très déséquilibrés. Imagine que tu construises un classifier pour prédire l'inhibition du VIH. La grande majorité des composés chimiques testés n'inhiberont pas le virus. Les candidats médicaments actifs sont extrêmement rares. Si tu utilises l'accuracy standard pour évaluer ton modèle, les résultats vont te mentir. Le modèle apprend simplement à deviner la classe majoritaire, en obtenant des scores très élevés tout en échouant complètement à trouver un seul médicament qui marche. Pour corriger ça, tu as besoin de metrics qui exposent ce comportement. La première est le score de recall. Le recall mesure combien de composés actifs réels ton modèle a réussi à identifier. Il punit sévèrement les modèles qui ratent de vraies découvertes. Cependant, le recall seul ne donne pas une image complète. Un modèle naïf pourrait juste deviner que chaque composé est actif, atteignant un score de recall parfait tout en générant des milliers de faux positifs. C'est là que le coefficient de corrélation de Matthews, ou MCC, devient essentiel. Le MCC est une mesure équilibrée qui évalue les quatre catégories de tes résultats. Il regarde les vrais positifs, les vrais négatifs, les faux positifs et les faux négatifs en même temps. Il produit un score entre moins un et plus un. Un score de plus un signifie une prédiction parfaite, zéro signifie que le modèle n'est pas meilleur qu'une supposition au hasard, et moins un signifie un désaccord total. Le MCC ne génère un score élevé que si le modèle prédit avec précision à la fois les composés actifs rares et les composés inactifs courants. Il pénalise brutalement un modèle qui choisit la facilité de deviner la classe majoritaire. Tu te demandes peut-être pourquoi tu ne peux pas juste importer ces fonctions de metric directement depuis scikit-learn. Scikit-learn a de très bonnes implémentations du recall et du MCC. Le problème vient de la shape des données. Les modèles DeepChem font fréquemment du multi-task learning, en prédisant des dizaines de propriétés chimiques différentes en même temps. Les fonctions standard de scikit-learn s'attendent à de simples flat arrays. Si tu leur passes les outputs complexes et multidimensionnels de DeepChem, elles vont soit crasher, soit calculer le score de manière incorrecte. DeepChem résout ce décalage avec sa propre classe Metric. Cette classe agit comme un wrapper autour des fonctions de scoring mathématiques standard. Quand tu instancies une Metric DeepChem, tu lui passes la fonction de scoring brute que tu veux utiliser, comme la fonction MCC de scikit-learn. Le wrapper Metric de DeepChem prend le relais à partir de là. Il gère le batching de tes données et aligne les true labels avec les prédictions de ton modèle sur tout le dataset. Voici l'idée clé. La classe Metric repose fortement sur un mécanisme interne appelé normalize prediction shape. Il inspecte tes données pour déterminer si ton modèle sort une seule tâche, plusieurs tâches, ou des vecteurs de probabilité encodés en one-hot. Il reshape ensuite ces outputs multidimensionnels bruts pour obtenir exactement les flat arrays dont les fonctions mathématiques sous-jacentes ont besoin. Tu n'as pas besoin d'écrire des boucles manuelles pour slicer et unpack tes arrays multi-task avant de les scorer. Le wrapper gère la complexité structurelle automatiquement pour que les maths fonctionnent exactement comme prévu. Quand tu évalues un modèle scientifique sur un dataset déséquilibré, ton boulot principal est de prouver que le modèle ne triche pas avec la baseline, alors choisis une metric qui force le modèle à vraiment apprendre la chimie rare. Merci d'avoir passé quelques minutes avec moi. À la prochaine, porte-toi bien.
11

Tuning Intelligent des Hyperparamètres

3m 25s

Allez au-delà de la recherche en grille par force brute. Découvrez comment utiliser GaussianProcessHyperparamOpt dans DeepChem pour naviguer intelligemment dans des espaces d'hyperparamètres complexes.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Maîtriser DeepChem, épisode 11 sur 15. Tester exhaustivement toutes les combinaisons possibles de learning rate, de layer size et de penalty pour un modèle lourd peut prendre des semaines, voire des mois. Et si ton code pouvait deviner intelligemment où se trouve la meilleure configuration de modèle après seulement quelques essais ? Aujourd'hui, on s'intéresse au hyperparameter tuning intelligent dans DeepChem. Avant de regarder les méthodes de recherche, clarifions une confusion courante. DeepChem fournit une base class appelée HyperparamOpt. Ce n'est pas ta vraie training loop de modèle. C'est une optimization loop externe. Tu fournis une fonction appelée model builder. Cette fonction sait comment construire ton modèle spécifique à partir d'un set de paramètres. La classe HyperparamOpt wrappe ce builder, lui passe différents sets de paramètres, entraîne le modèle qui en résulte sur un dataset, l'évalue avec une metric spécifique et renvoie la meilleure configuration. La méthode la plus simple pour explorer cet espace de paramètres, c'est d'utiliser GridHyperparamOpt. Tu lui donnes des listes discrètes de valeurs. Par exemple, trois learning rates, quatre nombres différents d'estimators et deux types de penalty. Le grid search adopte l'approche brute-force. Il évalue chaque combinaison une par une. Si tu as un petit modèle et un petit espace de paramètres, le grid search fait l'affaire. Mais dès que tu ajoutes plus de paramètres, tu te heurtes à une explosion combinatoire. Si ta parameter grid crée mille combinaisons et que chacune prend une heure à entraîner, le grid search n'est plus viable. C'est là qu'intervient GaussianProcessHyperparamOpt. Au lieu d'une grid en brute-force, il effectue une recherche probabiliste en utilisant une library backend appelée pyGPGO. Tu définis des plages continues ou des choix catégoriels pour tes paramètres, plutôt que des listes fixes. Le Gaussian Process traite l'évaluation de ton modèle comme une fonction black-box. Il veut trouver la metric de performance maximale avec le moins d'évaluations possible. Voici l'idée clé. Le Gaussian Process apprend au fur et à mesure. Quand il teste une combinaison spécifique de learning rate et de penalty, il regarde le score d'évaluation qui en résulte. Il construit ensuite une carte mathématique de l'espace des paramètres, en prédisant où les scores pourraient être les plus élevés et où ses prédictions sont les plus incertaines. Pour son prochain essai, il ne se contente pas de choisir l'élément suivant dans une liste. Il calcule une acquisition function pour décider de la prochaine estimation la plus intelligente. Il trouve l'équilibre entre l'exploration des zones inconnues de ton espace de paramètres et l'exploitation des zones qui ont déjà produit de bons scores. Donc, dans un scénario de tuning d'un modèle lourd, tu passes ton model builder à GaussianProcessHyperparamOpt. Tu définis un espace de recherche qui dicte les limites supérieures et inférieures pour le learning rate et le nombre d'estimators. Tu dis à l'optimizer de tourner pendant vingt essais. Au lieu de parcourir aveuglément mille combinaisons, l'algorithme sonde l'espace, se rend compte que certains learning rates sont peu performants, évite complètement ce territoire et se concentre sur la zone optimale. Tu économises énormément de temps de calcul. Le point le plus important à retenir ici, c'est d'adapter ta stratégie de recherche à ton budget de calcul. Utilise le grid search quand tu as une poignée de valeurs discrètes et des temps d'entraînement rapides, mais quand l'entraînement est coûteux et que l'espace des paramètres est vaste, appuie-toi sur un Gaussian Process pour traquer activement le meilleur modèle. Je voudrais prendre un moment pour te remercier de ton écoute, ça nous aide beaucoup. Passe une excellente journée !
12

Meta-learning pour les Régimes à Faibles Données

3m 38s

Explorez le Model-Agnostic Meta-Learning (MAML) dans DeepChem. Apprenez à entraîner des modèles capables de s'adapter rapidement à de nouvelles expériences scientifiques coûteuses avec très peu de données.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Maîtriser DeepChem, épisode 12 sur 15. Quand une seule expérience biologique coûte dix mille dollars, tu ne peux pas collecter de la big data. Tu n'auras peut-être que cinq data points pour un tout nouveau test. Le deep learning standard va overfit instantanément et échouer complètement ici. Ce qu'il te faut, c'est un algorithme conçu spécifiquement pour extraire du signal à partir de presque rien. C'est là qu'intervient le meta-learning pour les low-data regimes. DeepChem gère ça avec une classe appelée MAML, qui signifie Model-Agnostic Meta-Learning. Dans beaucoup de domaines scientifiques, surtout la découverte de médicaments ou la science des matériaux, tu n'as tout simplement pas le volume de data requis pour les réseaux de neurones traditionnels. Tu es forcé de travailler dans un low-data regime, où le few-shot learning est la seule approche viable. Beaucoup d'ingénieurs vont supposer que le transfer learning standard est la solution ici. Ce n'est pas le cas. Le transfer learning entraîne un modèle sur un dataset massif, en espérant que les features statiques apprises fourniront un bon warm-start pour un plus petit dataset. MAML ne fait pas juste un warm-start des weights. Il optimise mathématiquement la trajectoire du gradient du modèle. Il ne se contente pas d'apprendre la data, il apprend à s'adapter efficacement à de la nouvelle data. Comment est-ce qu'il fait ça ? MAML utilise une boucle d'optimisation imbriquée sur une distribution de tâches. Pendant le training, tu ne donnes pas à l'algorithme un seul flux continu de data. Tu lui donnes des batches de tâches distinctes. Pour chaque tâche dans le batch, l'algorithme prend une toute petite quantité de data. Il calcule les gradients et détermine ce que seraient les nouveaux weights du modèle après une ou deux étapes de training standard. Voici l'idée clé. L'algorithme n'applique pas encore ces weights mis à jour de manière permanente. À la place, il prend ces weights hypothétiques et les teste sur un deuxième set de data séparé, issu exactement de la même tâche. Il calcule la loss sur ce validation set. Ensuite, il calcule le gradient de cette validation loss par rapport aux weights de départ originaux, et met à jour ces weights originaux. Les maths forcent le modèle à trouver un point d'initialisation où faire juste quelques étapes de gradient produit une baisse massive de l'erreur pour n'importe quelle nouvelle tâche tirée de ce domaine. Appliquons ça à un scénario concret. Supposons que tu aies de la data historique provenant de dizaines d'anciens tests biologiques. Tu veux prédire les résultats d'un tout nouveau test très coûteux, pour lequel tu ne peux te permettre de collecter que cinq data points réels. Dans DeepChem, tu instancies l'objet MAML et tu lui passes un modèle de base. Ce modèle de base s'appelle le learner. Tu entraînes ensuite l'algorithme MAML en échantillonnant de petites tâches à partir de tes tests historiques. L'algorithme s'entraîne constamment à s'adapter. Il prend cinq data points du test A, se met à jour, vérifie son erreur de prédiction sur plus de data du test A, et backpropagate le résultat vers les weights de départ globaux. Ensuite, il répète exactement cette simulation pour le test B, le test C, et ainsi de suite. Avec le temps, le modèle converge vers un set optimal de paramètres de départ pour toute la famille de tests. Quand ton nouveau test coûteux arrive enfin, tu prends ces paramètres de départ et tu lances une passe de fine-tuning standard en utilisant tes cinq petits data points. Parce que l'optimisation MAML a aligné la trajectoire du gradient spécifiquement pour une adaptation rapide, le modèle se configure presque instantanément. Tu obtiens des prédictions très précises pour un problème inédit en utilisant un dataset microscopique. MAML déplace l'objectif fondamental du pre-training, passant de la minimisation de l'erreur de prédiction sur l'ancienne data à la maximisation de l'adaptabilité sur la nouvelle data. C'est tout pour cette fois. Merci de ton écoute, et continue de développer !
13

Découverte des Poches de Liaison

3m 50s

Comprenez la géométrie des interactions protéine-ligand. Nous explorons le ConvexHullPocketFinder de DeepChem pour localiser algorithmiquement les sillons de liaison sur des structures protéiques 3D.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Maîtriser DeepChem, épisode 13 sur 15. Tu as une structure 3D de protéine virale qui vient d'être cartographiée, mais trouver où un médicament thérapeutique peut vraiment s'y fixer, c'est comme essayer de placer une seule pièce de puzzle sur un puzzle de dix mille pièces qui flotte en trois dimensions. Tu ne peux pas juste balancer une petite molécule sur une protéine massive et espérer qu'elle s'y accroche. Tu dois d'abord cartographier les sillons structuraux, et c'est exactement à ça que sert le Binding Pocket Discovery. Avant d'aller plus loin, mettons les choses au clair sur un malentendu très courant. Le pocket discovery ne place pas un médicament à l'intérieur d'une protéine. Il explore uniquement l'espace libre pour trouver des binding sites potentiels. Générer la position réelle de la molécule à l'intérieur de ce site, c'est ce qu'on appelle le pose generation. C'est une étape complètement distincte. Aujourd'hui, on s'intéresse uniquement à trouver les places de parking vides. Dans DeepChem, ce workflow commence avec la base class Binding Pocket Finder. C'est un template abstrait. Son job est de fournir une interface standard, qui prend une macromolécule 3D en input et renvoie une liste de poches potentielles en output. Grâce à une base class, DeepChem garantit que la pipeline reste cohérente, que tu utilises un algorithme intégré ou que tu écrives le tien. Mais le gros du travail est fait par des implémentations spécifiques, la plus courante étant le Convex Hull Pocket Finder. Le Convex Hull Pocket Finder analyse de façon algorithmique la géométrie en trois dimensions de ta protéine virale. Imagine que tu enveloppes toute la macromolécule bien serrée dans du film plastique. Le film s'étire tout droit au-dessus des trous, des fentes et des crevasses à la surface. Cette limite extérieure, c'est le convex hull mathématique. Les espaces vides coincés entre cette limite extérieure plate et la vraie surface atomique bosselée de la protéine sont tes binding pockets potentiels. Ce sont les sillons vulnérables où un nouveau médicament pourrait réussir à s'ancrer. Pour identifier ces espaces de manière systématique, l'algorithme divise le volume autour de la protéine en une fine grille en trois dimensions. Il balaie cette grille et identifie des voxels, qui sont de minuscules boîtes 3D. Il cherche les voxels qui se trouvent à l'intérieur du convex hull mais qui ne contiennent aucun atome de protéine. Il mesure aussi la distance entre ces boîtes vides et l'atome de protéine le plus proche. Si une boîte est trop exposée à la surface, elle est ignorée. Si elle est enfouie trop profondément dans le cœur de la protéine, elle est aussi ignorée. L'algorithme regroupe les boîtes valides restantes pour former les contours continus des cavités de surface. Une fois qu'il a cartographié une cavité, le finder génère une bounding box autour d'elle. Voici le point clé. L'algorithme ne coupe pas cette bounding box parfaitement aux dimensions exactes du trou. Il ajoute une couche calculée de padding autour des bords. Cette marge supplémentaire est critique parce que les molécules en biologie sont dynamiques. Quand tu finis par passer ces coordonnées de poche à un algorithme de docking plus tard dans ta pipeline, ce padding offre la marge de manœuvre nécessaire. Ça donne à l'étape suivante suffisamment d'espace autour pour calculer comment le médicament pourrait se tordre, pivoter ou se décaler en s'installant dans le sillon. Tu passes ta protéine virale dans le Convex Hull Pocket Finder, et il te renvoie un array propre de bounding boxes avec du padding. Tu sais maintenant exactement où se trouvent les vulnérabilités structurelles, et tu peux concentrer tes ressources de calcul uniquement sur ces coordonnées spécifiques. Si tu veux aider à ce que ces épisodes continuent, tu peux soutenir l'émission en cherchant DevStoriesEU sur Patreon. Le padding garantit que tes simulations de docking en aval ne vont pas échouer simplement parce qu'elles ont heurté un mur mathématique artificiel. C'est tout pour cet épisode. Merci d'avoir écouté, et continue à développer !
14

Génération de Poses avec Vina et Gnina

3m 50s

Franchissez une nouvelle étape dans le molecular docking en calculant les poses de liaison. Découvrez comment VinaPoseGenerator et GninaPoseGenerator évaluent les géométries spatiales pour prédire les interactions.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Maîtriser DeepChem, épisode 14 sur 15. Tu as une protéine cible et une molécule de médicament potentielle, mais savoir qu'elles pourraient interagir ne sert à rien si tu ne sais pas exactement comment elles s'emboîtent physiquement. On n'a plus besoin de deviner les formes à l'aveuglette. On peut exploiter des Convolutional Neural Networks pré-entraînés pour prédire la physique réelle des binding poses. C'est ça, la Pose Generation avec Vina et Gnina. D'abord, clarifions une confusion fréquente. Les auditeurs confondent souvent le docking avec la Molecular Dynamics. La Molecular Dynamics est une simulation temporelle qui montre comment les molécules se tordent, se replient et vibrent sur plusieurs microsecondes. La Pose Generation, ou docking, ne fait pas ça. Elle calcule un snapshot statique. Elle calcule la géométrie de repos optimale d'un ligand dans une poche de protéine et lui attribue un score énergétique stationnaire basé sur cette seule position. Dans DeepChem, le gros du calcul se fait dans la classe PoseGenerator. Son job spécifique, c'est de calculer plusieurs arrangements en 3D de ton ligand, qu'on appelle des poses, à l'intérieur d'une bounding box restreinte sur la protéine. Ensuite, elle classe ces poses. L'implémentation standard pour ça, c'est le VinaPoseGenerator. Il wrappe le moteur AutoDock Vina, qui repose sur une fonction de scoring empirique. Il calcule un score d'énergie de binding classique en évaluant des interactions physiques comme les liaisons hydrogène, les contacts hydrophobes et la répulsion stérique. Vina teste une configuration géométrique, calcule la pénalité ou le gain d'énergie, ajuste légèrement les atomes, et réessaie. Il explore cet immense espace géométrique et renvoie une liste de poses classées par leur énergie de binding la plus basse. Les formules de physique classique sont incroyablement rapides, mais elles évaluent parfois mal les interactions moléculaires complexes. C'est là qu'intervient le GninaPoseGenerator. GNINA est une mise à jour basée sur le deep learning. Il reprend le framework Vina sous-jacent et évalue les configurations à l'aide d'un Convolutional Neural Network pré-entraîné. Prends un scénario où tu évalues un nouveau candidat médicament contre le cancer. Le pose generator calcule 10 configurations géométriques différentes de ce médicament reposant à l'intérieur d'une binding pocket cible. Au lieu de juste additionner les termes de physique classique, GNINA passe les structures atomiques en 3D de ces 10 poses à travers son réseau de neurones. GNINA classe ces 10 poses en utilisant trois métriques distinctes. Premièrement, il calcule toujours le score empirique traditionnel de Vina pour avoir une baseline. Deuxièmement, il sort un CNN pose score. C'est une probabilité entre zéro et un qui indique à quel point la pose générée correspond à une structure de haute qualité prouvée expérimentalement. Troisièmement, il calcule un CNN affinity score, qui prédit la force de binding réelle. Le CNN pose score est l'ajout critique ici. Il agit comme un filtre avancé, empêchant le système de bien classer une pose qui semble mathématiquement stable pour les équations classiques, mais qui est physiquement irréaliste dans la nature. Implémenter ça ne demande que quelques étapes. Tu initialises le GninaPoseGenerator. Tu appelles sa méthode generate, en passant le fichier de structure de la protéine, le fichier de structure du ligand, et les dimensions des coordonnées qui définissent la bounding box de la poche. Restreindre la recherche à une box spécifique évite au système de gaspiller des compute cycles sur de l'espace vide. La méthode renvoie ensuite tes poses classées, avec les scores CNN, ce qui te permet d'extraire le meilleur candidat physique. Voici l'idée clé. GNINA atteint cette haute précision en traitant l'espace 3D physique de la poche de la protéine comme une image structurée. Il divise les coordonnées atomiques en une grille en 3D. Le Convolutional Neural Network scanne ensuite cette grille volumétrique à la recherche de patterns spatiaux et chimiques, exactement comme un réseau de reconnaissance d'images standard cherche des contours et des textures dans une photo. C'est tout pour cet épisode. Merci d'avoir écouté, et continue de développer !
15

Le Reinforcement Learning en Science

3m 49s

Découvrez comment le reinforcement learning peut concevoir des molécules de manière autonome. Nous couvrons les abstractions Environment et Policy de DeepChem aux côtés de l'algorithme Advantage Actor-Critic (A2C).

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Maîtriser DeepChem, épisode 15 sur 15. Tu veux concevoir une molécule très stable, mais tu n'as pas un énorme dataset d'exemples parfaits pour entraîner un modèle. Tu as juste un ensemble de règles physiques. Quand tu manques de données statiques, tu ne peux pas utiliser le supervised learning standard. À la place, il te faut une IA qui apprend par essais, erreurs et feedback. C'est ce qui nous amène au Reinforcement Learning en science. Si tu as l'habitude du machine learning traditionnel, tu pourrais confondre ça avec le supervised training. Ils sont fondamentalement différents. Le supervised learning nécessite un dataset statique explicite et labellisé. Le Reinforcement Learning repose sur des rewards interactifs continus générés par un environnement. Le modèle tente un mouvement, l'environnement répond avec un score, et le modèle ajuste sa stratégie. Dans DeepChem, la base de cette interaction, c'est la classe Environment. Vois l'Environment comme ton simulateur scientifique haute fidélité. Il définit les règles physiques de l'univers dans lequel ton IA évolue. Il suit le state actuel de ton système, définit les actions mathématiques que ton modèle est autorisé à prendre, et expose une step function. Quand ton modèle prend une action, il la passe à cette step function. L'Environment calcule la physique, puis retourne trois choses : le nouveau state, un reward numérique basé sur la qualité de ce state, et un boolean flag indiquant si la tâche est terminée. Si tu travailles déjà avec des outils standards en dehors de la chimie, DeepChem fournit la classe GymEnvironment. Elle wrap simplement les environnements de simulation OpenAI Gym standards pour qu'ils se branchent directement dans tes workflows DeepChem. Le composant qui interagit réellement avec cet Environment s'appelle la Policy. La Policy est l'abstraction qui représente le cerveau de ton agent. Elle prend le state actuel de l'Environment et le map à une action spécifique, ou output un ensemble de probabilités pour différentes actions possibles. Pour entraîner une Policy efficacement, DeepChem implémente des algorithmes comme Advantage Actor-Critic, généralement appelé A2C. Voici l'idée clé. A2C divise le processus d'apprentissage en deux réseaux de neurones séparés qui tournent en parallèle : l'Actor et le Critic. L'Actor regarde le state et décide quelle action prendre pour faire avancer la tâche. Le Critic observe le résultat et estime la valeur globale d'être dans ce nouveau state. Le mot advantage fait référence à la différence entre le reward réel reçu de l'Environment et le reward que le Critic a prédit. Si l'action a donné un reward plus élevé que ce que le Critic attendait, l'advantage est positif, et le réseau de l'Actor est mis à jour pour prendre cette action plus souvent à l'avenir. Prends un scénario concret où tu veux construire de nouvelles molécules de manière autonome. Ton Environment est un moteur chimique programmé pour calculer la stabilité moléculaire. Tu commences avec un cycle chimique de base. L'Actor évalue ce state de départ et décide d'y attacher un atome de carbone. L'Environment traite cette étape, simule la nouvelle structure chimique, découvre une baisse de stabilité, et retourne un reward négatif. Le Critic observe ce résultat, met à jour son attente de base, et signale à l'Actor que c'était un mauvais mouvement. À l'itération suivante, l'Actor essaie plutôt d'attacher un atome d'oxygène. L'Environment simule le changement, calcule une meilleure stabilité, retourne un reward positif, et le Critic renforce ce choix. Étape par étape, l'algorithme A2C navigue dans le simulateur chimique, construisant une molécule complexe et très stable de manière entièrement autonome, sans jamais se référer à un dataset statique de bonnes molécules. Les agents de Reinforcement Learning peuvent interroger les simulateurs des millions de fois, découvrant des solutions que l'intuition humaine pourrait complètement rater. Cet épisode nous amène à la fin de notre deep dive dans DeepChem. Si tu veux pousser ces outils plus loin, explore la documentation officielle et essaie de construire tes propres environnements toi-même. Tu peux aussi visiter devstories dot eu pour suggérer des sujets pour de futures séries. C'est tout pour celui-ci. Merci d'avoir écouté, et keep building !