Ciencia De Datos

El discreto encanto de los árboles olvidadizos

I.

A mediados de los ochenta, hubo un momento fundacional en la historia del aprendizaje automático: la aparición de los árboles de decisión. El artículo de Breiman sobre las dos culturas puede entenderse así: existe —o existía en esa época— la cultura de los que usan métodos estadísticos tradicionales y la de los que usan árboles de todo tipo.

Herramientas de minería de datos de entonces, tales como las que vendían SAS o IBM, no encerraban debajo del capó otra cosa —u otra cosa novedosa— que árboles de decisión propietarios. Por todo lo anterior había mucho interés en conseguir mejores árboles, árboles que permitiesen crear mejores modelos —en el sentido, claro está, de cometer errores pequeños—.

Casi todo sobre el ACOS

Alguien vende cachivaches en internet por, p.e., Amazon. El cachivache se vende, digamos, por 10 y Amazon se queda, por ejemplo, con 1. Se ha dado en llamar ACOS a la fracción 1 / 10; de otra manera, al cacho que Amazon se queda de cada compra.

¿A través de qué mecanismo detrae Amazon el ACOS? La cosa es, en términos resumidos, así:

  • El vendedor entra en una puja. Puede decir algo así como que si alguien busca “cachivaches” en Amazon, está dispuesto a pagar hasta 20 céntimos para que Amazon muestre su producto.
  • Si un potencial cliente busca “cachivaches”, Amazon le muestra los productos de los proveedores que más hayan pujado por ese término.
  • Si el cliente clica en el anuncio, Amazon se autoingresa el importe de la puja (nota: realmente, es un tipo de puja que, se ve, se llama de Vickrey donde no se paga el precio de la puja sino el segundo mejor precio) haya o no venta posterior.
  • El cliente puede terminar comprando el producto o, en el caso más habitual, no haciéndolo.

Una de las preocupaciones de los vendedores es mantener el ACOS bajo control. Porque algunos que dejarán de existir pronto soportan ACOS de más del 100%. Lo sé porque lo he visto.

Chocolatada informacional

Supongamos que el vector $u$ codifica cierta información A y el vector $v$ (de la misma dimensión), la información B. Hay quien sostiene que, entonces, el vector $u + v$ codifica simultáneamente A y B. En esta entrada voy a demostrar que la afirmación anterior es falsa. Luego, también, que es cierta. Terminaré explicando por qué el asunto es relevante.

Que es falsa es obvio: si $u$ y $v$ tienen dimensión 1, $u = 2$ y $v = 3$, a partir de la suma $u + v = 5$ es imposible recomponer los vectores originales.

Organización de proyectos... ¿viejuna?

I.

Este blog tiene muchos años. Cuando comencé a escribir en él, la gestión de proyectos de ciencia de datos era un carajal. Muchos de los que se dedicaban a esto organizaban los proyectos en plan TFG: ficheros y tablas con nombres de andar por casa, desorden, código que viajaba en correos electrónicos,…

Muchos eran renuentes a utilizar herramientas de control de versiones. Por aquel entonces reinaba —cuando se utilizaba, que era la excepción más que la regla— subversion. Tanto git como Github eran todavía más promesas que otra cosa. Había forjas —¡se ve que todavía existe R-forge!—, que era lo mejorcito con lo que se podía contar para trabajar colaborativamente, pero solo con los cuatro friquis que estaban dispuestos a adoptar métodos de trabajo modernos. A los más les incomodaba tener que abandonar sus mal adquiridos hábitos.

Aprendizaje por refuerzo: ¿Q o no Q?

Esta entrada está motivada por mis cavilaciones alrededor de un potencial futuro proyecto de Circiter. Es posible que por primera vez tengamos que recurrir a técnicas de aprendizaje por refuerzo y quiero aprovechar para dejar por escrito algunas cuestiones al respecto. En particular, algunas potenciales simplificaciones con respecto a la teoría general que, afortunadamente, aplicarían a nuestro caso particular.

En lo que sigue voy a dar por sabidos conceptos básicos sobre el aprendizaje por refuerzo que casi nadie conoce pero que están a un click de distancia del cerebro de cualquiera.

LLMs: grados de libertad en la generación de texto

Me he entretenido dibujando

que representa gráficamente los grados de libertad de un LLM según va generando texto. Brevemente, he arrancado con

Never in the history of

y he dejado que mi LLM fuese construyendo

Never in the history of “The Bachelor” has a contestant been so hated by the viewing public.

The “Bachelor” franchise has had its share of villains, but the one who has

mientras registraba el vector de probabilidades en cada iteración, es decir, el vector que permite que el LLM elija, por ejemplo, villains en lugar de maples, vikings or frenchmen.

LLMs en perspectiva

I.

Llevamos muchos años —muchos más de los que la mayoría de la gente piensa— detrás de mecanismos del tipo

$$f(h) = x$$

donde $h$ es una historia y $x$ es una continuación suya coherente con $h$. El texto

IN NO IST LAT WHEY CRATICT FROURE BIRS GROCID PONDENOME OF DEMONSTURES OF THE REPTAGIN IS REGOACTIONA OF CRE

se construyó en 1948 usando un procedimiento básico: $h$ son dos caracteres y $x$ es otro caracter que se elige al azar de acuerdo cierta probabilidad condicional $P(x | h)$ que se estima a partir de frecuencias observadas en un determinado corpus.

Acciones "disparadas" por chatGPT (y sus verdaderos peligros)

Para la inmensa mayoría, chatGPT es lo que su nombre indica: un chat. Le preguntas y te responde. Pero lo siguiente es un ejemplo de algo perfectamente factible hoy.

  1. Creas un programa que monitorea tu bandeja de entrada.
  2. Cuando llega un correo nuevo, le pasa el texto a chatGTP (versión API) con un prompt adecuado.
  3. Dependiendo de la respuesta, se toma una determinada acción. Por ejemplo, enviar un aviso vía Telegram.

Por ejemplo, el propmt podría ser algo así como:

Siete problemas matemáticos que plantea el "deep learning"

La emergencia (y el éxito) del llamado aprendizaje profundo (deep learning) plantea innumerables cuestiones matemáticas. Algunos algoritmos funcionan (y otros muchos que han quedado en los cajones no, obviamente) y no está muy claro por qué. He aquí una lista de siete problemas que el aprendizaje profundo ha colocado enfrente de la comunidad matemática:

  1. ¿Cuál es el papel de la profundidad en las redes neuronales? (En el fondo, una red neuronal no deja de ser una función que aproxima otra desconocida; en matemáticas abundan los procedimientos y resultados para aproximaciones planas (p.e., combinaciones lineales de funciones); pero la composición de funciones…)
  2. ¿Qué aspectos de la arquitectura de una red neuronal impactan en su desempeño? (Porque, admitámoslo, los expertos en redes neuronales, en lo concerniente a la arquitectura, no son muy distintos de aquellos artesanos del Pacífico Sur).
  3. ¿Por qué el SGD converge a mínimos locales buenos a pesar de la no-convexidad del problema de optimización? (¡Ah! En este punto, la intriga se mezcla con la envidia: no sabéis lo difícil que es optimizar funciones no lineales más o menos genéricas y las horas que he invertido en ese tipo de problemas.)
  4. ¿Por qué no sobreentrenan las redes neuronales? (¿No lo hacen?)
  5. ¿Por qué funcionan bien en altas dimensiones?
  6. ¿Qué tipo de patrones de los datos son susceptibles de ser aprendidos por las redes neuronales?
  7. ¿Podrían llegar las redes neuronales a reemplazar a los algoritmos teóricos y numéricos especializados que se utilizan en las aplicaciones de las matemáticas?

Estas cuestiones —obviamente, sin soluciones— junto con alguna discusión adicional más, se discuten menos brevemente que aquí en este enlace.

Autoencoders: una serie de lecciones aprendidas

Estos días pasados he tenido que usar autoencoders como mecanismos para reducir la dimensión de una serie de conjuntos de datos. El principal problema al que me he enfrentado —cómo no— ha sido el de diseñar una arquitectura adecuada para el problema en cuestión. El principal motivo es que la práctica totalidad de los tutoriales, ejemplos, etc. disponibles por ahí tienen como aplicación principal el tratamiento de imágenes y en mi caso no.

"Denoising diffusion" en una dimensión (entre otras simplificaciones)

I. Motivación e introducción

Denoising diffusion —DD en lo que sigue— es uno de los principales ingredientes del archipopular stable diffusion. Es un algoritmo que se usa fundamentalmente para generar imágenes y que funciona, a grandes rasgos así:

  • Se parte de un catálogo de imágenes, que son vectores en un espacio (de dimensión alta).
  • Esos vectores se difuminan utilizando un proceso concreto —piénsese en una especie de movimiento Browniano— hasta que su distribución es aproximadamente una normal (en ese espacio de dimensión elevada).
  • A partir de valores aleatorios de esa distribución normal, invirtiendo el proceso de difusión, se obtienen muestras del espacio original (de las fotos).

Subyace a todo este tinglado la conocida como hipótesis de la subvariedad. Todas las fotos son, en el fondo, vectores en $R^N$ donde si las fotos son, digamos, $1000 \times 1000$, $N$ es 3M (número de píxeles por el número de canales). La hipótesis de la subvariedad dice que la distribución de las fotos que reconocemos como tales —piénsese que la mayoría de las fotos de $R^N$ no dejan de ser manchas grises— residen en una subvariedad de dimensión baja incrustada en $R^N$. Generar imágenes equivale entonces a muestrear dicha subvariedad, con el problema de que no sabemos ni qué forma tiene ni dónde está. Lo que proporciona DD es un caminito para llegar a ella desde un punto cualquiera del espacio.

Uso y abuso de los "embeddings"

La variable feota por excelencia de nuestra profesión es el código postal: es categórica, tiene miles de niveles, muchos son infrecuentes, etc. Así que cuando se inventaron los embeddings, hace la tira, se me ocurrió crear uno por defecto. Es decir, una representación en baja dimensión de esa variable que pudiera aplicarse a una variedad de modelos. Y así fue hasta que al cabo de unos minutos se me ocurrió que ya existía una, muy natural, en dos dimensiones, que difícilmente iba a poder ser batida por un constructo ciego a la realidad: latitud y longitud.

TF-IDF

Imaginemos que queremos categorizar textos (i.e., poder decir algo así como: el texto 1434 trata de biología). Una manera de afrontar el problema, no la única, es contar palabras (o más en general, términos: piénsese en bigramas, trigramas, etc.).

Qué es

Por fijar ideas, pensemos en textos sobre economía (sí, porque voy a referirme a parte del análisis de los textos del blog nadaesgratis.es al que ya me referí aquí).

En total, en casi 33 MB de texto hay muchos términos (estrictamente, unigramas): en total, 81618 lemas (de acuerdo con la definición de Spacy de lema). Tiene sentido filtrar los términos para seleccionar solo aquellos más relevantes para clasificar los textos. Así, por ejemplo: