$ cd ../
Mixture Density Networks -- p(y|x) multimodal desde cero — bash

user@devops:~$ cat README.md

Mixture Density Networks -- p(y|x) multimodal desde cero

# Descripción

Mixture Density Networks (Bishop 1994) implementadas desde cero en PyTorch: en vez de una media condicional, la red predice los parametros de una mixtura de gaussianas p(y|x) = sum_k pi_k(x) * N(y | mu_k(x), sigma_k(x)) con cabezas pi (softmax), mu (lineal) y sigma (softplus). Parte 1: problema uno-a-muchos 1D con dos ramas cruzadas (rama A y = 2.2*tanh(x/1.2) + 1.8*sin(1.6x), rama B su simetrica, ruido 0.12, 2.600 puntos, seed 42). Parte 2: red MSE clasica 1-32-32-1 --- predice el punto medio de las dos ramas (RMSE 1.727) y su NLL gaussiana es 1.966: la bimodalidad es invisible para una gaussiana unica. Parte 3: MDN K=8 componentes hidden 32, NLL test 0.050 (vs 1.966): la mixtura coloca componentes en AMBAS ramas (5 activos). Parte 4: densidad predictiva p(y|x) en rejilla (estructura en X que se cruza en x=0) y muestreo: 99.7% de las muestras caen en una rama u otra. Parte 5: MDN one-to-many en MNIST (Salakhutdinov & Hinton 2009): input = una clase (10 one-hot), output = distribucion sobre imagenes 784d con K=8 gaussianas diagonales, hidden 64, 2.500 muestras, 25 epocas, NLL val -1.688 nats/px = -2.436 bits/px (densidad continua, sigma medio 0.231). Parte 6: imagen modal (mu del componente dominante) por clase y 3 digitos generados por clase vs reales; 3.31 componentes efectivos de 8. Hallazgo: para p(y|x) multimodal una gaussiana unica es insuficiente; la mixtura reparte masa entre modos y da NLL muy inferior. CPU: MSE 0.6s + MDN 1D 1.5s + MNIST 18s. 7 visualizaciones.

# Características principales

$ Cabezas de mixtura desde cero: pi (softmax), mu (lineal), sigma (softplus) en PyTorch puro

$ Problema uno-a-muchos 1D: dos ramas cruzadas; el MSE predice el medio (NLL 1.97) y el MDN 0.05

$ Densidad predictiva p(y|x) en rejilla: estructura en X con picos en ambas ramas; 99.7% de muestras en un modo

$ MDN one-to-many en MNIST: 1 clase -> distribucion 784d con 8 gaussianas diagonales (NLL -1.688 nats/px)

$ Generacion: imagen modal por clase + digitos muestreados de la mixtura que imitan a los reales

$ 3.31 componentes efectivos de 8 por clase: cada estilo de escritura es un componente

$ Checkpoint determinista (seed 42): re-run regenera metricas y figuras sin reentrenar

$ 7 visualizaciones: datos, MSE vs MDN, componentes, muestras, curvas, modos, generadas-vs-reales

# Galería

Terminal del proyecto
Mixture Density Networks -- p(y|x) multimodal desde cero - Terminal del proyecto
Datos uno-a-muchos 1D
Mixture Density Networks -- p(y|x) multimodal desde cero - Datos uno-a-muchos 1D
MSE vs densidad MDN
Mixture Density Networks -- p(y|x) multimodal desde cero - MSE vs densidad MDN
Medias y pesos de la mixtura
Mixture Density Networks -- p(y|x) multimodal desde cero - Medias y pesos de la mixtura
Muestras MDN 1D
Mixture Density Networks -- p(y|x) multimodal desde cero - Muestras MDN 1D
NLL MNIST por epoca
Mixture Density Networks -- p(y|x) multimodal desde cero - NLL MNIST por epoca
Imagen modal por clase
Mixture Density Networks -- p(y|x) multimodal desde cero - Imagen modal por clase
Generadas vs reales
Mixture Density Networks -- p(y|x) multimodal desde cero - Generadas vs reales

# Tecnologías utilizadas

Python PyTorch NumPy Pandas scikit-learn Matplotlib