Volver al catálogo
Season 22 15 Episodios 1h 6m 2026

Mastering DeepChem

v2.8 — Edición 2026. Una guía exhaustiva sobre DeepChem, un framework para democratizar el deep learning en las ciencias. Abarca desde el manejo de datos y MoleculeNet hasta graph featurizers, modelos de ML especializados, molecular docking y reinforcement learning (v2.8 - 2026).

Computación científica Deep Learning para ciencia Quimioinformática
Mastering DeepChem
Reproduciendo ahora
Click play to start
0:00
0:00
1
El proyecto DeepChem
Una introducción al proyecto DeepChem y su misión de democratizar el deep learning para la ciencia. Analizamos cómo evolucionó desde aplicaciones químicas hasta convertirse en un conjunto más amplio de herramientas de machine learning científico.
4m 45s
2
Gestión de datasets científicos
Explora la abstracción Dataset de DeepChem para el manejo de datos científicos a gran escala. Aprende las diferencias fundamentales entre NumpyDataset y DiskDataset para la gestión de memoria out-of-core.
4m 14s
3
Benchmarks de MoleculeNet
Descubre MoleculeNet, la principal suite de benchmarks curada dentro de DeepChem. Hablamos sobre cómo la estandarización de datasets como Tox21 y QM9 acelera la química computacional.
4m 29s
4
Feature Engineering para moléculas
Aprende cómo DeepChem traduce estructuras químicas en números legibles por máquinas utilizando Featurizers. Exploramos el método CircularFingerprint para mapear cadenas SMILES a vectores de bits.
4m 20s
5
Graph Convolution Featurizers
Ve más allá de los vectores de bits planos y explora cómo DeepChem representa las moléculas como grafos matemáticos. Cubrimos ConvMolFeaturizer y MolGraphConvFeaturizer.
4m 24s
6
Splitting con conocimiento científico
Descubre por qué los random splits estándar fallan en los datasets científicos. Exploramos RandomStratifiedSplitter y cómo validar correctamente modelos en datos multi-task altamente desbalanceados.
4m 18s
7
Domando datos con Transformers
Aprende a normalizar distribuciones científicas complejas utilizando los Transformers de DeepChem. Analizamos NormalizationTransformer y MinMaxTransformer para un entrenamiento estable.
4m 31s
8
La API Model y los wrappers de Scikit-Learn
Explora la interfaz unificada Model de DeepChem y cómo envolver algoritmos tradicionales usando SklearnModel. Aprende por qué a veces la mejor solución no es una red neuronal profunda.
3m 46s
9
Modelos especializados de grafos moleculares
Sumérgete en las arquitecturas de deep learning creadas específicamente para la química. Cubrimos las Graph Convolutional Networks (GCNModel) y las Message Passing Neural Networks (MPNNModel).
4m 39s
10
Evaluación de modelos científicos
Aprende por qué el accuracy estándar falla en el ML científico. Exploramos la clase Metric de DeepChem, el Matthews Correlation Coefficient y cómo evaluar modelos multi-task desbalanceados.
4m 47s
11
Ajuste inteligente de hiperparámetros
Ve más allá del grid search por fuerza bruta. Descubre cómo usar GaussianProcessHyperparamOpt en DeepChem para navegar de forma inteligente por espacios de hiperparámetros complejos.
4m 08s
12
Metalearning para regímenes de pocos datos
Explora el Model-Agnostic Meta-Learning (MAML) en DeepChem. Aprende a entrenar modelos que pueden adaptarse rápidamente a nuevos y costosos experimentos científicos con muy pocos datos.
4m 24s
13
Descubrimiento de binding pockets
Comprende la geometría de las interacciones proteína-ligando. Exploramos ConvexHullPocketFinder de DeepChem para localizar algorítmicamente las hendiduras de unión en estructuras de proteínas en 3D.
4m 12s
14
Generación de poses con Vina y Gnina
Da el siguiente paso en el molecular docking calculando poses de unión. Aprende cómo VinaPoseGenerator y GninaPoseGenerator puntúan geometrías espaciales para predecir interacciones.
4m 44s
15
Reinforcement Learning en la ciencia
Descubre cómo el reinforcement learning puede diseñar moléculas de forma autónoma. Cubrimos las abstracciones Environment y Policy de DeepChem junto con el algoritmo Advantage Actor-Critic (A2C).
5m 03s

Episodios

1

El proyecto DeepChem

4m 45s

Una introducción al proyecto DeepChem y su misión de democratizar el deep learning para la ciencia. Analizamos cómo evolucionó desde aplicaciones químicas hasta convertirse en un conjunto más amplio de herramientas de machine learning científico.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. Dominando DeepChem, episodio 1 de 15. Si quieres aplicar machine learning a un problema científico, recurres a herramientas estándar, pero estas tratan las moléculas y proteínas como arrays de datos planos, ignorando por completo la física subyacente. La herramienta que salva esta brecha es el proyecto DeepChem. La gente suele asumir que DeepChem es un tensor engine independiente, algo que usas en lugar de PyTorch, TensorFlow o JAX. Eso es incorrecto. DeepChem es un toolset de dominio específico construido directamente sobre esos frameworks genéricos. Actúa como un traductor. Se encarga de la compleja ingeniería necesaria para convertir datos físicos desordenados en un formato que una red neuronal estándar pueda procesar. El proyecto existe para democratizar el deep learning en la ciencia. En sus inicios, se centraba exclusivamente en la química. El objetivo inicial era facilitar el descubrimiento de fármacos, proporcionando a los investigadores las herramientas para predecir propiedades químicas sin necesidad de un laboratorio propietario de gran tamaño. Pero a medida que el campo creció, también lo hizo el framework. Hoy en día, DeepChem ha evolucionado discretamente hasta convertirse en un hub central para prácticamente cualquier aplicación científica de deep learning. Para entender su alcance, piensa en la diferencia de los dominios que maneja. El lunes, podrías usar DeepChem para predecir la solubilidad acuosa de una nueva molécula con potencial farmacológico. Esto requiere un modelo que comprenda los enlaces moleculares y los estados cuánticos. El jueves, podrías usar el mismo framework para analizar una imagen de microscopía y contar células individuales. Esos son problemas físicos muy diferentes. DeepChem abstrae el boilerplate subyacente para ambos, proporcionando herramientas especializadas para el machine learning molecular, la bioinformática e incluso la ciencia de materiales. Aquí está la clave. La parte más difícil del machine learning científico es la representación de datos. Un modelo estándar de deep learning no tiene el concepto de estructura atómica o secuencias biológicas. DeepChem resuelve esto proporcionando featurizers altamente optimizados. Un featurizer toma un objeto científico en bruto, como un compuesto químico escrito en notación de texto estándar, y lo traduce matemáticamente a un grafo o un vector. Después de la featurization, la información va a objetos dataset especializados de DeepChem. Estos objetos están diseñados para gestionar de forma eficiente grandes colecciones de datos científicos en disco. Esto evita memory crashes cuando procesas millones de compuestos complejos. DeepChem también aborda cómo se evalúan los modelos científicos. En el machine learning estándar, normalmente divides tus datos de training y testing de forma aleatoria. Pero en química, el random splitting hace que los modelos memoricen los datos de training en lugar de aprender la física real. Para solucionar esto, DeepChem proporciona splitters especializados. Por ejemplo, un scaffold splitter separa las moléculas basándose en su estructura bidimensional central. Esto asegura que tus datos de testing representen familias químicas completamente nuevas, obligando al modelo a demostrar que realmente generaliza a compuestos no vistos. Una vez que tus datos están preparados y divididos, DeepChem proporciona una suite completa de modelos preconstruidos adaptados para estos datasets. Le pasas tus objetos científicos al featurizer, DeepChem los convierte, maneja los splits, los introduce en la capa subyacente de PyTorch o TensorFlow, y genera una predicción. El verdadero poder de DeepChem es que codifica el conocimiento del dominio directamente en tu pipeline de datos, permitiéndote centrarte puramente en el descubrimiento científico en lugar del plumbing estructural del machine learning. Si quieres ayudar a que el programa siga adelante, puedes buscar DevStoriesEU en Patreon. Eso es todo por este episodio. ¡Gracias por escuchar, y sigue construyendo!
2

Gestión de datasets científicos

4m 14s

Explora la abstracción Dataset de DeepChem para el manejo de datos científicos a gran escala. Aprende las diferencias fundamentales entre NumpyDataset y DiskDataset para la gestión de memoria out-of-core.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. Dominando DeepChem, episodio 2 de 15. El mayor cuello de botella en el machine learning científico casi nunca es la arquitectura del modelo. Es intentar cargar archivos enormes sin colapsar tu RAM. Gestionar datasets científicos es cómo superas ese muro de memoria. Al pasarte a DeepChem, el instinto habitual es cargar todo en un DataFrame de Pandas. Los DataFrames son excelentes para datos tabulares bidimensionales. Pero el machine learning científico suele requerir arrays de mayor dimensión, múltiples tareas de predicción simultáneas y la importancia de las muestras por tarea. DeepChem utiliza su propia abstracción de Dataset porque vincula de forma nativa las features, las labels multitarea y los weights de las muestras en un formato estricto que los modelos pueden consumir de manera eficiente. Cada objeto Dataset en DeepChem garantiza la presencia de cuatro arrays paralelos. Primero, tienes X, que contiene tus features numéricas. Segundo, tienes y, que contiene tus labels o los targets que intentas predecir. Tercero, tienes w, el array de weights. Aquí es donde la cosa se pone interesante. Los datasets científicos suelen ser sparse. Puedes tener datos experimentales que demuestren que una molécula es efectiva contra un target, pero ningún dato sobre si es tóxica para el hígado. En lugar de descartar la molécula por completo o inventar una label falsa, pones el weight de la tarea que falta a cero. El modelo aprende de los datos que tienes e ignora los huecos. Finalmente, tienes el array ids, que almacena un identificador único para cada muestra, como un string SMILES químico. Tener un formato estandarizado es útil, pero el verdadero poder de la abstracción Dataset es cómo gestiona la memoria del sistema. DeepChem ofrece dos formas principales de almacenar estos cuatro arrays. Si tu dataset es lo bastante pequeño como para caber en la memoria de tu sistema, usas un NumpyDataset. Bajo el capó, esto simplemente almacena arrays estándar de NumPy en la RAM. Proporciona un acceso extremadamente rápido y es ideal para hacer prototipos o trabajar con colecciones más pequeñas de moléculas. La limitación de NumpyDataset se hace evidente al lidiar con datos científicos del mundo real. Supón que estás trabajando con un dataset de 100 gigabytes de estructuras cristalinas tridimensionales densas. Intentar cargar eso en arrays estándar en memoria colapsará instantáneamente una máquina típica. Para solucionar esto, DeepChem proporciona el DiskDataset. Un DiskDataset hace exactamente lo que su nombre indica. Almacena los arrays X, y, w e ids en múltiples archivos pequeños, o shards, directamente en tu disco duro. Tú especificas un directorio de datos, y DeepChem gestiona el almacenamiento. Cuando entrenas un modelo, el DiskDataset solo carga el batch de datos actual en la RAM. Una vez que el modelo procesa ese batch, la memoria se libera para el siguiente. La transición entre estos dos formatos es totalmente transparente para el resto de tu código. Puedes escribir un bucle de entrenamiento, probarlo localmente usando un pequeño NumpyDataset, y luego hacer deploy de ese mismo código exacto en un clúster apuntando a un DiskDataset masivo. El modelo simplemente le pide al dataset el siguiente batch, y el dataset se encarga de si ese batch viene de la RAM o se hace stream desde el disco. Diseñar tus pipelines de datos en torno a este streaming out-of-core desde el primer día garantiza que tu infraestructura sobrevivirá al salto de unos pocos miles de registros experimentales a millones de estructuras generadas. ¡Gracias por escuchar, feliz programación a todos!
3

Benchmarks de MoleculeNet

4m 29s

Descubre MoleculeNet, la principal suite de benchmarks curada dentro de DeepChem. Hablamos sobre cómo la estandarización de datasets como Tox21 y QM9 acelera la química computacional.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. Dominando DeepChem, episodio 3 de 15. Lees un paper que afirma que una nueva Graph Neural Network consigue resultados state-of-the-art en propiedades químicas. Pero si lo miras de cerca, usaron un data split personalizado, un dataset propietario y una métrica oscura, lo que hace que su afirmación no tenga sentido matemático. La comparación estandarizada es la única forma de que haya progreso científico, y en química computacional, ese estándar es la suite de benchmarks MoleculeNet. Un error común es pensar que MoleculeNet es solo un repositorio estático. No es una carpeta descargable de archivos CSV en un servidor que tengas que parsear y limpiar tú mismo. Es una suite de datasets curada y profundamente integrada, incorporada directamente en DeepChem a través del módulo dc punto molnet. Funciona como el ImageNet del machine learning molecular. Proporciona un conjunto compartido de tareas, splits estandarizados y baselines evaluados en diferentes dominios. La suite clasifica sus datos en áreas científicas específicas para probar diferentes capacidades de modelado. Tienes datasets de mecánica cuántica, como QM9, que contiene propiedades geométricas y energéticas para moléculas pequeñas. Tienes datasets de fisicoquímica para predecir la solubilidad o la energía libre de hidratación. Y tienes datasets de biofísica y fisiología, incluyendo benchmarks de toxicidad como Tox21, que mide cómo miles de sustancias químicas ambientales interactúan con vías biológicas específicas. Veamos un escenario práctico. Acabas de diseñar un nuevo modelo de predicción de toxicidad y necesitas demostrar matemáticamente que supera a los baselines anteriores. No necesitas buscar los datos raw de Tox21, gestionar los missing values ni escribir un parser personalizado. En su lugar, llamas a la función load tox 21 del módulo dc punto molnet. Aquí es donde se pone interesante. Cuando invocas una función load en MoleculeNet, no devuelve simplemente texto raw. Procesa los datos dinámicamente usando un featurizer que especificas en los argumentos, como circular fingerprints o estructuras de grafos. La función suele devolver una tupla con tres elementos principales. Primero, te da una lista de los nombres de las tareas. Para Tox21, estos son los doce targets biológicos específicos que intentas predecir. Segundo, devuelve el propio dataset, que ya está perfectamente particionado en subconjuntos de training, validation y test. Tercero, proporciona los transformers utilizados para normalizar o escalar los datos durante la fase de carga. Coges ese training set de Tox21 pre-split, se lo pasas a tu nuevo modelo y luego evalúas las predicciones contra el test set. Como todos los demás investigadores usan exactamente esta misma API y pipeline de featurization, tu score de receiver operating characteristic final se puede comparar de forma directa y justa con los baselines publicados. MoleculeNet también estandariza cómo evalúas la generalización mediante estrategias de splitting. La API admite varias formas de dividir tus datos. Aunque puedes usar un random split básico, la química a menudo requiere un scaffold split. Un scaffold split separa las moléculas basándose en sus estructuras bidimensionales centrales. Esto obliga al test set a contener frameworks moleculares que el modelo nunca vio durante el training. Comprueba si tu modelo realmente aprendió las reglas químicas subyacentes, en lugar de simplemente memorizar pequeñas variaciones. Por defecto, las funciones load aplican el método de splitting que tiene más sentido científico para ese dataset específico. La parte más difícil del machine learning aplicado no es escribir la arquitectura del modelo, es demostrar que el modelo realmente generaliza a datos no vistos sin data leakage. MoleculeNet te da el playground estricto y estandarizado necesario para que esas pruebas sean concluyentes. Eso es todo por este episodio. ¡Gracias por escuchar y sigue construyendo!
4

Feature Engineering para moléculas

4m 20s

Aprende cómo DeepChem traduce estructuras químicas en números legibles por máquinas utilizando Featurizers. Exploramos el método CircularFingerprint para mapear cadenas SMILES a vectores de bits.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. Dominando DeepChem, episodio 4 de 15. Una red neuronal no puede digerir una estructura química dibujada en una pizarra. Incluso si escribes esa estructura como un string de texto, los algoritmos estándar de machine learning siguen sin poder leerla. Necesitan que los datos estén premasticados en arrays numéricos. El puente entre una representación química y un modelo matemático es el Feature Engineering para moléculas. En quimioinformática, a menudo representamos las moléculas como strings SMILES. Estas son secuencias de caracteres que definen átomos y enlaces. Un anillo de carbono se convierte en un patrón de texto específico. Pero si intentas pasarle un raw string a un Random Forest o a una Support Vector Machine, fallará. Un modelo matemático requiere un vector numérico de longitud fija como input. Transformar ese texto químico en un array de números es lo que llamamos featurization. DeepChem gestiona este paso con un conjunto de clases específicas llamadas featurizers. Antes de ver cómo lo hace DeepChem, hay un punto común de confusión que conviene aclarar. Cuando la gente oye hablar de generar una representación vectorial de texto, piensa inmediatamente en embeddings aprendidos, como los que se usan en los modelos de lenguaje modernos. Los fingerprints químicos no son embeddings aprendidos. No hay pesos que se actualicen, y no intervienen redes neuronales en la creación de la feature en sí. Un fingerprint es un algoritmo de hashing determinista. Si procesas exactamente la misma molécula en dos máquinas diferentes, obtendrás exactamente el mismo array de unos y ceros. El featurizer más común que usarás para modelos baseline en DeepChem es el Circular Fingerprint. Este implementa un método conocido como Extended Connectivity Fingerprints. Así es como funciona la lógica. El algoritmo analiza cada átomo pesado de tu molécula. Desde cada átomo, se expande en círculo, analizando los átomos y enlaces vecinos hasta un radio específico. Puedes controlar este radio, pero lo habitual es analizar hasta dos enlaces de distancia. Captura estos fragmentos estructurales locales, los pasa por una función hash y los mapea a un índice específico en un array de longitud fija. El resultado es un vector de bits. Un uno en un índice específico significa que una subestructura química particular está presente. Un cero significa que está ausente. Imagina que tienes una lista de strings SMILES que representan cientos de moléculas pequeñas, similares a fármacos. Quieres entrenar un modelo Random Forest para predecir su toxicidad. Primero, inicializas la clase CircularFingerprint en DeepChem. La configuras para que devuelva un output de tamaño 1024. Esta es la parte que importa. Cada molécula, independientemente de si tiene diez o cincuenta átomos, se convertirá en un array de exactamente 1024 bits. Luego, pasas tu lista de strings SMILES al método featurize de esta clase. El algoritmo procesa cada string de forma independiente y devuelve una matriz bidimensional. Las filas representan tus moléculas y las 1024 columnas representan la presencia o ausencia de subestructuras específicas. Como el output es simplemente una matriz numérica estándar, ya no estás limitado a herramientas específicas de química. Puedes pasar esa matriz directamente a librerías estándar de machine learning. Como los fingerprints se basan en hashes deterministas de longitud fija en lugar de semántica aprendida, pueden producirse colisiones, lo que significa que dos fragmentos estructurales complejos diferentes podrían, en ocasiones, mapearse al mismo bit. A pesar de esto, siguen siendo el baseline más rápido y fiable para convertir la química abstracta en matemáticas concretas. Eso es todo por este episodio. ¡Gracias por escuchar, y sigue creando!
5

Graph Convolution Featurizers

4m 24s

Ve más allá de los vectores de bits planos y explora cómo DeepChem representa las moléculas como grafos matemáticos. Cubrimos ConvMolFeaturizer y MolGraphConvFeaturizer.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. Dominando DeepChem, episodio 5 de 15. Si representas un compuesto químico como un string plano de caracteres, eliminas por completo la topología física que determina cómo interactúa con el mundo. Las moléculas no son frases lineales, son estructuras interconectadas. Para preservar esa realidad estructural en tus datasets, necesitas Graph Convolution Featurizers. Cuando oyes la palabra convolución, puede que te imagines un modelo de imagen deslizando un filtro sobre una cuadrícula cuadrada y fija de píxeles. Tienes que olvidar ese modelo mental. Los átomos no están en cuadrículas uniformes. Un átomo de carbono puede conectarse a cuatro vecinos, mientras que uno de oxígeno se conecta a dos, y uno de hidrógeno a solo uno. Las operaciones de grafos manejan esta conectividad arbitraria e irregular, y los graph featurizers actúan como puente para traducir los datos químicos en bruto a un formato que estas operaciones puedan consumir. DeepChem ofrece dos herramientas principales para hacer esto. La primera es el ConvMolFeaturizer. Esta función analiza una molécula y genera un feature vector inicial para cada átomo. Calcula propiedades como el tipo de elemento, el número total de átomos pesados conectados, la valencia, la carga formal, la carga parcial y la hibridación orbital. Agrupa estas features a nivel de átomo en un objeto específico llamado ConvMol. Este formato se diseñó para alimentar directamente las redes de graph convolution nativas de DeepChem. La segunda herramienta es el MolGraphConvFeaturizer. Este es el enfoque más moderno y es muy versátil porque devuelve un objeto GraphData estándar. Esto lo convierte en la opción ideal si le pasas datos a frameworks genéricos como PyTorch Geometric o DGL. Veamos cómo el MolGraphConvFeaturizer maneja un anillo de benceno simple. El benceno está formado por seis átomos de carbono dispuestos en un hexágono continuo. El featurizer procesa esta estructura dividiéndola en nodos y edges. Primero, crea los nodos. Para cada uno de los seis átomos de carbono, calcula un array numérico de propiedades atómicas, registrando el estado de hibridación y la carga parcial de ese átomo en concreto. Estos seis arrays individuales se apilan para formar la feature matrix del nodo. A continuación, mapea los edges, que corresponden a los enlaces químicos. Construye un edge index, que es simplemente una lista de pares de coordenadas que identifican exactamente qué átomo está conectado a cuál. También genera edge features. Para cada enlace en ese edge index, el featurizer registra datos estructurales. Comprueba si el enlace es simple, doble, triple o aromático. Como estamos viendo el benceno, el featurizer codifica explícitamente la naturaleza aromática de estos enlaces, junto con si el enlace está conjugado o forma parte de un sistema de anillos. Finalmente, empaqueta la feature matrix del nodo, el edge index y las edge features en un único objeto GraphData. Ahora tienes un grafo matemático que conserva tanto las características atómicas como las conexiones topológicas exactas de la molécula original, esquivando por completo las limitaciones de las representaciones de vectores planos. Aquí está la clave. La calidad de una graph neural network está totalmente limitada por la riqueza estructural de la estructura de datos que le pasas. Al utilizar correctamente un graph featurizer, te aseguras de que tu modelo realmente aprenda la química subyacente en lugar de intentar memorizar un resumen unidimensional. Gracias por pasar unos minutos conmigo. Hasta la próxima, cuídate.
6

Splitting con conocimiento científico

4m 18s

Descubre por qué los random splits estándar fallan en los datasets científicos. Exploramos RandomStratifiedSplitter y cómo validar correctamente modelos en datos multi-task altamente desbalanceados.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. Dominando DeepChem, episodio 6 de 15. Creas un modelo con un nuevo dataset químico, ejecutas la validación y obtienes un 99 % de precisión. Haces el deploy y falla inmediatamente en el mundo real. Tus métricas de validación te mintieron con total seguridad por cómo hiciste el split de los datos. Hoy vamos a ver el Scientifically Aware Splitting, comparando específicamente el Random Splitter por defecto con el Random Stratified Splitter. Podrías pensar que hacer el split de datos en DeepChem es exactamente igual que usar una función básica de train-test split de una librería general de machine learning como Scikit-Learn. Es un error muy común. Los splitters de propósito general funcionan bien para arrays simples single-label. Los splitters de DeepChem están diseñados para manejar de forma nativa entornos complejos multi-task, labels booleanos sparse y las estructuras de datos específicas que usa DeepChem para almacenar moléculas. Empecemos con el enfoque por defecto: el Random Splitter. Esta herramienta se comporta exactamente como indica su nombre. Coge tu dataset cargado y asigna los compuestos químicos a los sets de training, validation y testing de forma uniformemente aleatoria. Si trabajas con un dataset perfectamente balanceado, donde tus compuestos activos e inactivos aparecen en la misma proporción, este random shuffling funciona bien. Pero los datos científicos prácticamente nunca están balanceados. Piensa en un dataset de toxicidad como Tox21. En el mundo real, la gran mayoría de los compuestos químicos que testeas son seguros, y los compuestos tóxicos son relativamente raros. Supongamos que solo el uno por ciento de los compuestos de tu dataset están marcados como tóxicos. Esto es un class imbalance severo. Si pasas este dataset por un Random Splitter estándar, la pura casualidad estadística dicta que tu set de validación o de testing podría acabar con cero ejemplos tóxicos. Si tu set de testing está formado únicamente por compuestos seguros, un modelo que simplemente adivine "seguro" para cada input obtendrá una puntuación del cien por cien. Acabas con una puntuación matemáticamente perfecta para un modelo completamente inútil. Aquí es donde el Random Stratified Splitter se vuelve obligatorio. En lugar de tirar compuestos a ciegas en distintos buckets, la estratificación obliga a que el split respete la distribución real de tus labels. El Random Stratified Splitter escanea las propiedades de tu dataset antes de hacer ningún split. Si tus datos globales contienen exactamente un uno por ciento de compuestos tóxicos y un noventa y nueve por ciento de compuestos seguros, el splitter garantiza que tu set de training tenga una proporción de uno a noventa y nueve, tu set de validación tenga una proporción de uno a noventa y nueve, y tu set de testing mantenga exactamente esa misma proporción. Aquí está la clave. Los datasets de DeepChem suelen implicar multi-task learning. Esto significa que un único compuesto químico no se evalúa solo para una propiedad, sino a menudo para docenas de ensayos biológicos diferentes a la vez. Los labels en estas tareas son altamente sparse. Puede que solo tengas un puñado de resultados positivos para un ensayo de toxicidad específico entre diez mil filas de datos. El Random Stratified Splitter navega por esta matriz multidimensional. Garantiza que esos resultados positivos extremadamente raros se distribuyan de forma justa entre tus splits. Cada subconjunto de tus datos recibe una porción representativa de los compuestos activos, evitando que ninguna tarea pierda su clase minoritaria durante el split. Sin este mecanismo, la evaluación de tu modelo depende completamente de la suerte. Para datasets científicos multi-task altamente desbalanceados, la estratificación no es una optimización opcional. Es un requisito fundamental para demostrar que tu modelo realmente ha aprendido la química subyacente en lugar de simplemente explotar un punto ciego estadístico. Gracias por pasar unos minutos conmigo. Hasta la próxima, cuídate.
7

Domando datos con Transformers

4m 31s

Aprende a normalizar distribuciones científicas complejas utilizando los Transformers de DeepChem. Analizamos NormalizationTransformer y MinMaxTransformer para un entrenamiento estable.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. Dominando DeepChem, episodio 7 de 15. Los datos científicos reales son caóticos, están desbalanceados y se extienden por rangos numéricos enormes. Si le pasas esos valores experimentales raw directamente a una red neuronal, prácticamente estás pidiendo a gritos gradientes que no convergen durante la backpropagation. Para solucionar esto, necesitas domar tus distribuciones antes de que toquen tu modelo, y ahí es donde entran en juego los Transformers de DeepChem. Cuando escuchas la palabra transformer en el machine learning moderno, probablemente tu mente salte a mecanismos de atención, large language models o BERT. Olvídate de todo eso en este episodio. En el ecosistema de DeepChem, un Transformer es simplemente una utilidad de preprocesamiento de datos. No es una layer de una red neuronal. Es un objeto que coge un dataset y modifica sus features, labels o weights para que encajen en las estrictas restricciones matemáticas de los algoritmos de machine learning. Imagina un escenario en el que estás prediciendo la solubilidad molecular experimental. Tus datos de training raw podrían contener target values que van desde números negativos minúsculos hasta decenas de miles. Los weights de las redes neuronales generalmente se inicializan como números muy pequeños. Si tus input features o target labels contienen un valor de cuarenta mil, el cálculo de la loss resultante genera un gradiente enorme. Los weights de la red fluctuarán drásticamente durante el update step, sin lograr converger en una solución. Tienes que escalar los datos. Una forma de manejar esto es con el MinMax Transformer. Esta utilidad escanea todo tu dataset, localiza los valores mínimo y máximo absolutos para tus features o labels especificadas, y comprime toda la distribución en un rango estricto de cero a uno. El valor más bajo se convierte en cero, el más alto en uno, y todo lo demás cae proporcionalmente entre medias. Inicializas el transformer pasándole tu target dataset para que pueda calcular esos límites. Luego, llamas a su método transform, que devuelve un dataset nuevo con los números recién escalados. Ahora los gradientes se mantienen estables. Comprimir los datos entre cero y uno no siempre es ideal, especialmente si tu dataset contiene outliers enormes. Un outlier extremo obligará al resto de tus data points normales a comprimirse en una franja minúscula e indistinguible de ese rango de cero a uno. Para esto, utilizas el Normalization Transformer. En lugar de imponer límites rígidos, desplaza toda tu distribución para que la media se sitúe exactamente en cero, y escala la dispersión para que la desviación estándar sea uno. Esto centra tus datos a la perfección, alineándolos con el sweet spot operativo de la mayoría de las activation functions de las redes neuronales. Aquí está la clave. Escalar las input features es un camino de un solo sentido, pero transformar tus labels crea un problema secundario. Si tu modelo se entrena con targets de solubilidad normalizados, sus predicciones finales también estarán normalizadas. Un valor predicho de cero coma cuatro es matemáticamente correcto, pero prácticamente inútil para un químico que espera una medición del mundo real. DeepChem resuelve esto manteniendo el estado de las métricas de escalado dentro del objeto transformer. Una vez que tu modelo genera una predicción normalizada, le pasas ese output al método untransform de ese mismo transformer. Invierte la aritmética, mapeando la predicción escalada directamente de vuelta a su unidad científica original. Normalizar tus datos no es un paso de optimización opcional en deep learning, es un requisito estructural para la estabilidad del training. Gracias por escuchar, ¡feliz programación a todos!
8

La API Model y los wrappers de Scikit-Learn

3m 46s

Explora la interfaz unificada Model de DeepChem y cómo envolver algoritmos tradicionales usando SklearnModel. Aprende por qué a veces la mejor solución no es una red neuronal profunda.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. Dominando DeepChem, episodio 8 de 15. A veces, la mejor solución a un problema científico no es una red neuronal masiva que tarda una semana en entrenarse. A menudo, un random forest robusto es todo lo que necesitas. Pero cambiar entre un algoritmo tradicional y un pipeline de deep learning complejo suele implicar reescribir todo tu código de manejo de datos. Este episodio trata sobre la Model API y los wrappers de Scikit-Learn, que resuelven precisamente ese problema. DeepChem utiliza una clase base unificada llamada simplemente Model. Esta clase estandariza cómo entrenas y evalúas algoritmos en toda la librería. La lógica central se basa en dos métodos principales. Usas fit para entrenar el algoritmo, y usas predict para generar resultados con datos nuevos. La característica distintiva de esta interfaz es que estos métodos esperan objetos Dataset de DeepChem como entrada. No pasas arrays ni dataframes en crudo directamente al modelo. El Dataset actúa como un contenedor estándar para tus features, labels y weights, y la Model API sabe exactamente cómo leerlo. Podrías pensar que una librería especializada como DeepChem escribiría sus propias implementaciones a medida para los algoritmos básicos de machine learning. Pues no lo hace. DeepChem no reinventa Scikit-Learn. En su lugar, proporciona un adaptador llamado SklearnModel. Este wrapper coge cualquier estimator estándar de Scikit-Learn y le da la interfaz Model de DeepChem. Imagina un escenario en el que quieres predecir las propiedades físicas de un nuevo material. Primero, importas un random forest regressor estándar directamente desde Scikit-Learn y lo inicializas. Luego, le pasas ese regressor estándar al wrapper SklearnModel de DeepChem. Ahora tienes un objeto compatible con DeepChem. Para entrenarlo, llamas a fit en el modelo envuelto, pasándole tu Dataset de DeepChem. Entre bambalinas, el wrapper extrae automáticamente las matrices de features, los targets y los sample weights del Dataset, y se los pasa al algoritmo subyacente de Scikit-Learn. Cuando llega el momento de testear, llamas a predict con un nuevo Dataset, y el wrapper vuelve a formatear la salida como un array estándar. Aquí está la clave. Como el wrapper SklearnModel expone exactamente los mismos métodos fit y predict que una red neuronal profunda construida de forma nativa en DeepChem, puedes cambiar el algoritmo subyacente sin tocar tu pipeline de datos. Puedes establecer una baseline rápida con un modelo de machine learning tradicional, y luego cambiar a una red neuronal compleja sin problemas, simplemente cambiando la única línea de código que inicializa el modelo. La carga de datos, el training loop y los pasos de evaluación permanecen idénticos. La conclusión principal es que la Model API desacopla tu ingesta de datos de tu elección de algoritmo, dándote libertad para probar diferentes enfoques matemáticos sin tener que reescribir constantemente el glue code. Si estos episodios te resultan útiles y quieres apoyar el programa, puedes buscar DevStoriesEU en Patreon. Eso es todo por este episodio. ¡Nos vemos en la próxima!
9

Modelos especializados de grafos moleculares

4m 39s

Sumérgete en las arquitecturas de deep learning creadas específicamente para la química. Cubrimos las Graph Convolutional Networks (GCNModel) y las Message Passing Neural Networks (MPNNModel).

Descargar
Hola, soy Alex de DEV STORIES DOT EU. Dominando DeepChem, episodio 9 de 15. No puedes simplemente pasarle una molécula a una red neuronal estándar diseñada para imágenes. Las moléculas no son cuadrículas rígidas de píxeles; son redes complejas de átomos de diferentes tamaños y conexiones. Si las fuerzas a encajar en un grid estándar, destruyes la química estructural que las hace únicas. Para solucionar esto, usamos modelos de grafos moleculares especializados. Estos modelos están diseñados específicamente para ingerir de forma nativa los grafos featurizados generados en tus pasos de preprocesamiento anteriores. A veces, los oyentes los confunden con las Convolutional Neural Networks tradicionales. Una CNN estándar desliza un filtro de tamaño fijo sobre un grid bidimensional. Pero una molécula no tiene una esquina superior izquierda ni una resolución fija. En cambio, los modelos de grafos especializados operan dinámicamente sobre los enlaces químicos como edges y los átomos como nodos. No les importan las coordenadas del grid. Les importa únicamente la conectividad. DeepChem ofrece algunas arquitecturas específicas para esto. La primera es el GCNModel, que significa Graph Convolutional Network. Piensa en una GCN como una forma de agrupar vecindarios atómicos locales. Para cada átomo de tu molécula featurizada, la GCN examina a sus vecinos inmediatos. Toma las features de esos átomos vecinos, como su tipo de elemento o estado de hibridación, y hace un pooling con ellas para actualizar las features del átomo original. Repite este proceso a lo largo de unas cuantas layers. Al final, cada átomo tiene una representación matemática que incluye el contexto de su entorno químico circundante. Luego, el modelo agrega todas estas representaciones de átomos en un único vector matemático para predecir una propiedad química general, como la toxicidad o la solubilidad. Eso cubre las GCNs, que se centran principalmente en agregar datos de los nodos. Pero, ¿qué pasa con los enlaces en sí? Un enlace doble se comporta de forma muy diferente a un enlace simple, y a veces necesitas que la red le dé mucho peso a esa diferencia. Aquí es donde entra en juego el MPNNModel, o Message Passing Neural Network. Las Message Passing Neural Networks no solo miran una molécula. Simulan matemáticamente cómo fluye la información entre vecinos atómicos. Digamos que estás entrenando un MPNNModel para predecir las propiedades mecánico-cuánticas de una molécula. Para hacer esto con precisión, la naturaleza exacta de los enlaces importa muchísimo. En una MPNN, tanto los átomos como los enlaces contienen datos de features explícitos. Durante el step de entrenamiento, el modelo realiza una fase de message passing. Cada átomo genera un mensaje basado en su estado actual y lo envía a sus vecinos a través de los enlaces conectores. De manera crucial, el propio enlace modifica ese mensaje. Un mensaje que viaja por un enlace aromático rígido se calculará de forma diferente a uno que viaja por un enlace simple flexible. Cuando un átomo recibe mensajes de todos sus vecinos, usa una pequeña red neuronal interna para actualizar su propio estado. Básicamente, calcula que es un átomo de carbono que está siendo influenciado por un átomo de oxígeno en un enlace doble y un átomo de hidrógeno en un enlace simple. Este proceso itera varias veces. La información se propaga hacia afuera, paso a paso, por toda la red de enlaces. Después de un número determinado de steps, el modelo recopila los estados finales de todos los átomos para hacer su predicción. Como la MPNN respeta de forma nativa la verdadera estructura química, sobresale al predecir comportamientos cuánticos complejos que a los modelos más simples se les escapan. Aquí está la clave. No necesitas inventar formas de mapear moléculas en arrays planos. Al usar modelos GCN y MPNN, preservas la topología atómica exacta de tus datos, permitiendo que la red aprenda directamente de la propia química. Eso es todo por este episodio. ¡Gracias por escuchar, y sigue programando!
10

Evaluación de modelos científicos

4m 47s

Aprende por qué el accuracy estándar falla en el ML científico. Exploramos la clase Metric de DeepChem, el Matthews Correlation Coefficient y cómo evaluar modelos multi-task desbalanceados.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. Dominando DeepChem, episodio 10 de 15. Si estás analizando moléculas para un nuevo fármaco, tal vez solo una de cada diez mil funcione. Un modelo que simplemente predice que todas las moléculas son inútiles alcanzará un accuracy del 99,99 %, sin descubrir absolutamente nada. Por eso, el accuracy básico suele ser una medida pésima para el descubrimiento científico, y es precisamente por eso que necesitamos hablar sobre la evaluación de modelos científicos. En las ciencias, los datasets casi siempre están muy desequilibrados. Imagina que construyes un classifier para predecir la inhibición del VIH. La gran mayoría de los compuestos químicos probados no inhibirán el virus. Los candidatos a fármacos activos son extremadamente raros. Si utilizas el accuracy estándar para evaluar tu modelo, los resultados te engañarán. El modelo simplemente aprende a adivinar la clase mayoritaria, obteniendo puntuaciones muy altas mientras fracasa por completo en encontrar un solo fármaco que funcione. Para solucionar esto, necesitas métricas que revelen este comportamiento. La primera es el recall score. El recall mide cuántos de los compuestos activos reales identificó correctamente tu modelo. Penaliza severamente a los modelos que pasan por alto los verdaderos descubrimientos. Sin embargo, el recall por sí solo no ofrece una visión completa. Un modelo ingenuo podría simplemente adivinar que todos los compuestos son activos, logrando un recall score perfecto mientras genera miles de falsos positivos. Aquí es donde el coeficiente de correlación de Matthews, o MCC, se vuelve esencial. El MCC es una medida equilibrada que evalúa las cuatro categorías de tus resultados. Analiza simultáneamente los verdaderos positivos, los verdaderos negativos, los falsos positivos y los falsos negativos. Produce una puntuación entre menos uno y más uno. Una puntuación de más uno significa una predicción perfecta, cero significa que el modelo no es mejor que adivinar al azar, y menos uno significa una discrepancia total. El MCC solo genera una puntuación alta si el modelo predice con precisión tanto los compuestos activos raros como los inactivos comunes. Penaliza brutalmente a un modelo que opta por la vía fácil de adivinar la clase mayoritaria. Quizás te preguntes por qué no puedes simplemente importar estas funciones de métricas directamente desde scikit-learn. Scikit-learn tiene implementaciones perfectamente válidas tanto para el recall como para el MCC. El problema se reduce al data shape. Los modelos de DeepChem suelen realizar multi-task learning, prediciendo docenas de propiedades químicas diferentes simultáneamente. Las funciones estándar de scikit-learn esperan arrays planos simples. Si les pasas los outputs complejos y multidimensionales de DeepChem, fallarán o calcularán la puntuación incorrectamente. DeepChem resuelve esta discrepancia con su propia clase Metric. Esta clase actúa como un wrapper para las funciones de puntuación matemáticas estándar. Cuando instancias un Metric de DeepChem, le pasas la función de puntuación en bruto que quieres usar, como la función MCC de scikit-learn. El wrapper de Metric de DeepChem se encarga a partir de ahí. Gestiona el batching de tus datos y alinea las labels reales con las predicciones de tu modelo en todo el dataset. Aquí está la clave. La clase Metric se basa en gran medida en un mecanismo interno llamado normalize prediction shape. Inspecciona tus datos para determinar si tu modelo está devolviendo una sola tarea, múltiples tareas o vectores de probabilidad one-hot encoded. Luego, hace un reshape de esos outputs multidimensionales en bruto para convertirlos en los arrays planos exactos que requieren las funciones matemáticas subyacentes. No tienes que escribir bucles manuales para hacer slice y desempaquetar tus arrays multi-task antes de evaluarlos. El wrapper maneja la complejidad estructural automáticamente para que las matemáticas funcionen exactamente como se espera. Cuando evalúas un modelo científico en un dataset desequilibrado, tu trabajo principal es demostrar que el modelo no está engañando a la baseline, así que elige una métrica que obligue al modelo a aprender realmente la química rara. Gracias por pasar unos minutos conmigo. Hasta la próxima, cuídate.
11

Ajuste inteligente de hiperparámetros

4m 08s

Ve más allá del grid search por fuerza bruta. Descubre cómo usar GaussianProcessHyperparamOpt en DeepChem para navegar de forma inteligente por espacios de hiperparámetros complejos.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. Dominando DeepChem, episodio 11 de 15. Probar exhaustivamente cada combinación posible de learning rate, layer size y penalty para un modelo pesado puede llevar semanas o incluso meses. Pero, ¿y si tu código pudiera adivinar de forma inteligente dónde se encuentra la mejor configuración del modelo después de solo unas pocas pruebas? Hoy, veremos el hyperparameter tuning inteligente en DeepChem. Antes de analizar los métodos de búsqueda, aclaremos una confusión común. DeepChem proporciona una clase base llamada HyperparamOpt. Este no es tu training loop real del modelo. Es un loop de optimización externo. Le pasas una función llamada model builder. Esta función sabe cómo construir tu modelo específico dado un set de parámetros. La clase HyperparamOpt hace un wrap de este builder, pasándole diferentes sets de parámetros, entrenando el modelo resultante en un dataset, evaluándolo con una metric específica y devolviendo la mejor configuración. La forma más sencilla de buscar en este espacio de parámetros es usando GridHyperparamOpt. Le pasas listas discretas de valores. Por ejemplo, tres learning rates, cuatro números diferentes de estimators y dos tipos de penalty. El grid search utiliza un enfoque de fuerza bruta. Evalúa cada combinación una por una. Si tienes un modelo pequeño y un espacio de parámetros pequeño, el grid search está bien. Pero en cuanto añades más parámetros, te topas con una explosión combinatoria. Si tu grid de parámetros crea mil combinaciones y cada una tarda una hora en entrenar, el grid search ya no es viable. Aquí es donde entra en juego GaussianProcessHyperparamOpt. En lugar de un grid de fuerza bruta, realiza una búsqueda probabilística usando una librería de backend llamada pyGPGO. Tú defines rangos continuos u opciones categóricas para tus parámetros en lugar de listas fijas. El Gaussian Process trata la evaluación de tu modelo como una función black-box. Quiere encontrar la metric de máximo rendimiento con la menor cantidad de evaluaciones posibles. Aquí está la clave. El Gaussian Process aprende sobre la marcha. Cuando prueba una combinación específica de learning rate y penalty, se fija en el score de evaluación resultante. Luego construye un mapa matemático del espacio de parámetros, prediciendo dónde los scores podrían ser más altos y dónde sus predicciones son más inciertas. Para su siguiente prueba, no se limita a elegir el siguiente elemento de una lista. Calcula una acquisition function para decidir cuál es la siguiente suposición más inteligente. Equilibra la exploración de zonas desconocidas de tu espacio de parámetros con la explotación de áreas que ya han producido buenos scores. Así que, en un escenario donde haces tuning de un modelo pesado, le pasas tu model builder a GaussianProcessHyperparamOpt. Defines un espacio de búsqueda que dicta los límites superior e inferior para el learning rate y el número de estimators. Le dices al optimizador que se ejecute durante veinte pruebas. En lugar de recorrer a ciegas mil combinaciones, el algoritmo explora el espacio, se da cuenta de que ciertos learning rates tienen un rendimiento deficiente, evita por completo ese territorio y se centra en la zona óptima. Te ahorras enormes cantidades de tiempo de computación. La conclusión más importante aquí es adaptar tu estrategia de búsqueda a tu presupuesto computacional. Usa grid search cuando tengas un puñado de valores discretos y tiempos de entrenamiento rápidos, pero cuando el entrenamiento sea costoso y el espacio de parámetros sea inmenso, confía en un Gaussian Process para cazar activamente el mejor modelo. Me gustaría tomarme un momento para darte las gracias por escucharnos; nos ayuda muchísimo. ¡Que tengas un buen día!
12

Metalearning para regímenes de pocos datos

4m 24s

Explora el Model-Agnostic Meta-Learning (MAML) en DeepChem. Aprende a entrenar modelos que pueden adaptarse rápidamente a nuevos y costosos experimentos científicos con muy pocos datos.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. Dominando DeepChem, episodio 12 de 15. Cuando un solo experimento biológico cuesta diez mil dólares, no puedes recopilar big data. Quizás solo consigas cinco data points para un ensayo completamente nuevo. El deep learning estándar hará overfit al instante y fallará por completo aquí. Lo que necesitas es un algoritmo diseñado específicamente para extraer señal de casi nada. Esto nos lleva al metalearning para low data regimes. DeepChem gestiona esto mediante una clase llamada MAML, que significa Model-Agnostic Meta-Learning. En muchos dominios científicos, especialmente en el descubrimiento de fármacos o la ciencia de materiales, simplemente no tienes el volumen de datos necesario para las redes neuronales tradicionales. Te ves obligado a operar en un low-data regime, donde el few-shot learning es el único enfoque viable. Muchos ingenieros asumirán que el transfer learning estándar es la solución aquí. No lo es. El transfer learning entrena un modelo con un dataset masivo, con la esperanza de que las features estáticas aprendidas proporcionen un buen warm-start para un dataset más pequeño. MAML no se limita a hacer un warm-start de los weights. Optimiza matemáticamente la trayectoria del gradient del modelo. No solo aprende los datos; aprende a adaptarse a nuevos datos de forma eficiente. ¿Cómo lo consigue? MAML utiliza un loop anidado de optimización a través de una distribución de tareas. Durante el training, no le pasas al algoritmo un stream continuo de datos. Le pasas batches de tareas distintas. Para cada tarea del batch, el algoritmo coge una pequeña cantidad de datos. Calcula los gradients y computa cuáles serían los nuevos weights del modelo después de uno o dos pasos de training estándar. Aquí está la clave. El algoritmo todavía no aplica permanentemente esos weights actualizados. En su lugar, coge esos weights hipotéticos y los prueba contra un segundo set de datos independiente de esa misma tarea. Calcula la loss en este validation set. Luego, computa el gradient de esa validation loss con respecto a los weights iniciales originales, y actualiza esos weights originales. Las matemáticas obligan al modelo a encontrar un punto de inicialización donde dar solo unos pocos pasos de gradient produzca una caída masiva en el error para cualquier tarea nueva sacada de ese dominio. Apliquemos esto a un escenario concreto. Supón que tienes datos históricos de docenas de ensayos biológicos antiguos. Quieres predecir los resultados de un ensayo completamente nuevo y carísimo, donde solo te puedes permitir recopilar cinco data points reales. En DeepChem, instancias el objeto MAML y le pasas un modelo base. Este modelo base se llama learner. Luego entrenas el algoritmo MAML haciendo sampling de pequeñas tareas de tus ensayos históricos. El algoritmo practica constantemente cómo adaptarse. Coge cinco data points del ensayo A, se actualiza, comprueba su error de predicción en más datos del ensayo A, y hace backpropagate del resultado a los weights iniciales globales. Luego repite esta misma simulación para el ensayo B, el ensayo C, y así sucesivamente. Con el tiempo, el modelo converge en un set óptimo de parámetros iniciales para toda la familia de ensayos. Cuando por fin llega tu nuevo y caro ensayo, coges esos parámetros iniciales y ejecutas una pasada de fine-tuning estándar usando tus cinco pequeños data points. Como la optimización MAML alineó la trayectoria del gradient específicamente para una adaptación rápida, el modelo se configura casi al instante. Obtienes predicciones de alta precisión para un problema nuevo usando un dataset microscópico. MAML cambia el objetivo fundamental del pre-training de minimizar el error de predicción en datos antiguos a maximizar la adaptabilidad en datos nuevos. Eso es todo por este episodio. ¡Gracias por escuchar, y sigue creando!
13

Descubrimiento de binding pockets

4m 12s

Comprende la geometría de las interacciones proteína-ligando. Exploramos ConvexHullPocketFinder de DeepChem para localizar algorítmicamente las hendiduras de unión en estructuras de proteínas en 3D.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. Dominando DeepChem, episodio 13 de 15. Tienes la estructura 3D recién mapeada de una proteína viral, pero encontrar dónde puede engancharse realmente un fármaco terapéutico es como intentar colocar una sola pieza en un puzle de diez mil piezas flotando en tres dimensiones. No puedes simplemente tirarle una molécula pequeña a una proteína enorme y esperar que se pegue. Primero necesitas mapear los surcos estructurales, y para eso exactamente sirve el Binding Pocket Discovery. Antes de continuar, aclaremos un malentendido común. El pocket discovery no coloca un fármaco dentro de una proteína. Solo explora el espacio vacío para encontrar posibles binding sites. Generar la posición real de la molécula dentro de ese sitio se llama pose generation. Ese es un paso completamente aparte. Hoy, solo nos interesa encontrar las plazas de aparcamiento vacías. En DeepChem, este workflow empieza con la base class Binding Pocket Finder. Esta es una plantilla abstracta. Su trabajo es proporcionar una interfaz estándar, tomando una macromolécula 3D como input y devolviendo una lista de posibles pockets como output. Al usar una base class, DeepChem asegura que, tanto si usas un algoritmo built-in como si escribes el tuyo propio, la pipeline se mantenga consistente. Pero el trabajo pesado real lo hacen implementaciones específicas, siendo la más común el Convex Hull Pocket Finder. El Convex Hull Pocket Finder analiza algorítmicamente la geometría tridimensional de tu proteína viral. Imagínate envolver toda la macromolécula bien apretada en plástico retráctil. El plástico se estira en línea recta sobre los huecos, hendiduras y grietas de la superficie. Ese límite exterior es el convex hull matemático. Los espacios vacíos atrapados entre ese límite exterior plano y la verdadera superficie atómica rugosa de la proteína son tus posibles binding pockets. Estos son los surcos vulnerables donde un nuevo fármaco podría anclarse con éxito. Para identificar estos espacios sistemáticamente, el algoritmo divide el volumen alrededor de la proteína en un grid tridimensional fino. Recorre este grid e identifica voxels, que son diminutas cajas 3D. Busca voxels que están dentro del convex hull pero que no contienen ningún átomo de la proteína. También mide la distancia desde estas cajas vacías hasta el átomo de proteína más cercano. Si una caja está demasiado expuesta a la superficie, se ignora. Si está enterrada demasiado profundamente en el núcleo de la proteína, también se ignora. El algoritmo agrupa las cajas válidas restantes para formar las formas continuas de las cavidades de la superficie. Una vez que mapea una cavidad, el finder genera un bounding box a su alrededor. Aquí está la clave. El algoritmo no recorta este bounding box perfectamente a las dimensiones exactas del hueco. Añade una capa calculada de padding alrededor de los bordes. Este margen adicional es fundamental porque las moléculas en biología son dinámicas. Cuando finalmente le entregas estas coordenadas del pocket a un algoritmo de docking más adelante en tu pipeline, ese padding proporciona el margen de maniobra necesario. Le da al siguiente paso suficiente espacio circundante para calcular cómo podría girar, rotar o desplazarse el fármaco al asentarse en el surco. Le pasas tu proteína viral al Convex Hull Pocket Finder, y te devuelve un array limpio de bounding boxes con padding. Ahora sabes exactamente dónde están las vulnerabilidades estructurales y puedes concentrar tus recursos computacionales exclusivamente en esas coordenadas específicas. Si quieres ayudar a que sigamos publicando estos episodios, puedes apoyar el programa buscando DevStoriesEU en Patreon. El padding asegura que tus simulaciones de docking downstream no fallen simplemente porque chocaron contra un muro matemático artificial. Eso es todo por este episodio. ¡Gracias por escuchar, y a seguir construyendo!
14

Generación de poses con Vina y Gnina

4m 44s

Da el siguiente paso en el molecular docking calculando poses de unión. Aprende cómo VinaPoseGenerator y GninaPoseGenerator puntúan geometrías espaciales para predecir interacciones.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. Dominando DeepChem, episodio 14 de 15. Tienes una proteína objetivo y una molécula de fármaco potencial, pero saber que podrían interactuar es inútil a menos que sepas exactamente cómo encajan físicamente. Ya no tenemos que adivinar formas a ciegas. Podemos aprovechar las Convolutional Neural Networks preentrenadas para predecir la física real de las binding poses. Esto es Pose Generation con Vina y Gnina. Primero, aclaremos una confusión común. Los oyentes suelen confundir el docking con la Molecular Dynamics. La Molecular Dynamics es una simulación basada en el tiempo que muestra cómo las moléculas se retuercen, se pliegan y vibran a lo largo de microsegundos. La Pose Generation, o docking, no hace esto. Calcula una instantánea estática. Calcula la geometría de reposo óptima de un ligando dentro de un pocket de la proteína y le asigna un score energético estacionario basado en esa única posición. En DeepChem, el trabajo computacional pesado para esto ocurre dentro de la clase PoseGenerator. Su función específica es calcular múltiples configuraciones tridimensionales de tu ligando, llamadas poses, dentro de un bounding box restringido en la proteína. Luego, clasifica estas poses. La implementación estándar para esto es el VinaPoseGenerator. Este hace de wrapper del motor AutoDock Vina, que se basa en una scoring function empírica. Calcula un score clásico de energía de binding evaluando interacciones físicas como puentes de hidrógeno, contactos hidrofóbicos y repulsión estérica. Vina prueba una configuración geométrica, calcula la penalización o recompensa de energía, ajusta ligeramente los átomos y vuelve a intentarlo. Busca en este enorme espacio geométrico y devuelve una lista de poses ordenadas por su menor energía de binding. Las fórmulas de la física clásica son increíblemente rápidas, pero a veces evalúan mal las interacciones moleculares complejas. Aquí es donde entra en juego el GninaPoseGenerator. GNINA es un upgrade de deep learning. Toma el framework subyacente de Vina y evalúa las configuraciones usando una Convolutional Neural Network preentrenada. Imagina un escenario en el que estás evaluando un nuevo fármaco candidato contra el cáncer. El pose generator calcula 10 configuraciones geométricas diferentes de este fármaco alojado dentro de un binding pocket objetivo. En lugar de simplemente sumar términos de física clásica, GNINA pasa las estructuras atómicas tridimensionales de estas 10 poses a través de su red neuronal. GNINA clasifica esas 10 poses utilizando tres métricas distintas. Primero, sigue calculando el score empírico tradicional de Vina como baseline. Segundo, devuelve un CNN pose score. Esta es una probabilidad entre cero y uno que indica cuánto se parece la pose generada a una estructura de alta calidad probada experimentalmente. Tercero, calcula un CNN affinity score, que predice la fuerza de binding real. El CNN pose score es la adición crítica aquí. Actúa como un filtro avanzado, evitando que el sistema le asigne un ranking alto a una pose que parece matemáticamente estable para las ecuaciones clásicas, pero que es físicamente irreal en la naturaleza. Implementar esto requiere solo unos pocos pasos. Inicializas el GninaPoseGenerator. Llamas a su método generate, pasándole el archivo de estructura de la proteína, el archivo de estructura del ligando y las dimensiones de las coordenadas que definen el bounding box del pocket. Restringir la búsqueda a un box específico evita que el sistema desperdicie ciclos de computación en espacio vacío. Luego, el método devuelve tus poses clasificadas, junto con los CNN scores, permitiéndote extraer el mejor candidato físico. Aquí está la clave. GNINA logra esta alta precisión tratando el espacio físico 3D del pocket de la proteína como una imagen estructurada. Divide las coordenadas atómicas en un grid tridimensional. La Convolutional Neural Network luego escanea en busca de patrones espaciales y químicos a través de ese grid volumétrico, exactamente de la misma manera que una red de reconocimiento de imágenes estándar busca bordes y texturas en una fotografía. Eso es todo por este episodio. ¡Gracias por escuchar, y sigue programando!
15

Reinforcement Learning en la ciencia

5m 03s

Descubre cómo el reinforcement learning puede diseñar moléculas de forma autónoma. Cubrimos las abstracciones Environment y Policy de DeepChem junto con el algoritmo Advantage Actor-Critic (A2C).

Descargar
Hola, soy Alex de DEV STORIES DOT EU. Dominando DeepChem, episodio 15 de 15. Quieres diseñar una molécula altamente estable, pero no tienes un dataset masivo de ejemplos perfectos para entrenar un modelo. Solo tienes un conjunto de reglas físicas. Cuando te faltan datos estáticos, no puedes usar supervised learning estándar. En su lugar, necesitas una IA que aprenda por ensayo, error y feedback. Esto nos lleva al Reinforcement Learning en la ciencia. Si estás muy metido en el machine learning tradicional, podrías confundirlo con el supervised training. Son fundamentalmente diferentes. El supervised learning requiere un dataset estático, explícito y etiquetado. El Reinforcement Learning se basa en rewards interactivos continuos generados por un entorno. El modelo intenta un movimiento, el entorno responde con un score, y el modelo ajusta su estrategia. En DeepChem, la base de esta interacción es la clase Environment. Piensa en el Environment como tu simulador científico de alta fidelidad. Define las reglas físicas del universo en el que opera tu IA. Registra el estado actual de tu sistema, define las acciones matemáticas que tu modelo puede realizar y expone una step function. Cuando tu modelo realiza una acción, se la pasa a esa step function. El Environment calcula la física y luego devuelve tres cosas: el nuevo estado, un reward numérico basado en lo bueno que sea el estado resultante, y una boolean flag que indica si la tarea ha terminado. Si ya trabajas con herramientas estándar ajenas a la química, DeepChem proporciona la clase GymEnvironment. Esta clase simplemente envuelve los entornos de simulación estándar de OpenAI Gym para que se integren directamente en tus workflows de DeepChem. El componente que realmente interactúa con este Environment se llama Policy. La Policy es la abstracción que representa el cerebro de tu agent. Toma el estado actual del Environment y lo mapea a una acción específica, o devuelve un conjunto de probabilidades para diferentes acciones posibles. Para entrenar una Policy de forma eficiente, DeepChem implementa algoritmos como Advantage Actor-Critic, normalmente conocido como A2C. Aquí está la clave. A2C divide el proceso de aprendizaje en dos redes neuronales separadas que se ejecutan en paralelo: el Actor y el Critic. El Actor mira el estado y decide qué acción tomar para avanzar en la tarea. El Critic observa el resultado y estima el valor general de estar en ese nuevo estado. La palabra advantage se refiere a la diferencia entre el reward real recibido del Environment y el reward que predijo el Critic. Si la acción resultó en un reward mayor del que esperaba el Critic, el advantage es positivo, y la red del Actor se actualiza para tomar esa acción con más frecuencia en el futuro. Imagina un escenario concreto en el que quieres construir moléculas nuevas de forma autónoma. Tu Environment es un motor químico programado para calcular la estabilidad molecular. Empiezas con un anillo químico básico. El Actor evalúa este estado inicial y decide añadir un átomo de carbono. El Environment procesa este paso, simula la nueva estructura química, descubre una caída en la estabilidad y devuelve un reward negativo. El Critic observa este resultado, actualiza su expectativa base y le señala al Actor que fue un mal movimiento. En la siguiente iteración, el Actor prueba a añadir un átomo de oxígeno en su lugar. El Environment simula el cambio, calcula una mayor estabilidad, devuelve un reward positivo, y el Critic refuerza esa elección. Paso a paso, el algoritmo A2C navega por el simulador químico, construyendo una molécula compleja y altamente estable de forma totalmente autónoma, sin consultar jamás un dataset estático de moléculas buenas. Los agents de Reinforcement Learning pueden consultar simuladores millones de veces, descubriendo soluciones que la intuición humana podría pasar por alto completamente. Este episodio nos lleva al final de nuestro deep dive en DeepChem. Si quieres llevar estas herramientas más allá, explora la documentación oficial y prueba a construir tus propios environments de forma práctica. También puedes visitar devstories dot eu para sugerir temas para futuras series. Eso es todo por este episodio. ¡Gracias por escuchar, y sigue construyendo!