Neural Network Training Labs
Laboratorio 00 · Central · 1 / 31

🔢 Neurona con NumPy

Neurona con NumPy

Objetivo

Implementar propagación, entropía cruzada y descenso de gradiente sin autograd.

Dataset real

Datos clínicos reales derivados de imágenes digitalizadas de aspirados de masas mamarias.

Fundamento matemático

p(y=1|x)=σ(xw+b); gradiente de la entropía cruzada.

Protocolo experimental

  1. Descargar y verificar la procedencia.
  2. Conservar o crear una partición reproducible.
  3. Ajustar transformaciones únicamente con train.
  4. Seleccionar modelo e hiperparámetros usando validation.
  5. Evaluar test una sola vez tras congelar la decisión.
  6. Comparar con la línea base: DummyClassifier y regresión logística de scikit-learn.
  7. Guardar configuración, entorno, métricas, predicciones, gráficos y modelo.

Ejecución

python labs/00_numpy_neuron/train.py --quick
python labs/00_numpy_neuron/train.py --config improved

Preparar únicamente el dataset:

python -m neural_labs.cli dataset --lab 00_numpy_neuron

Inferencia y exportación:

neural-labs predict --lab 00_numpy_neuron --run latest --input sample.json
neural-labs export --lab 00_numpy_neuron --run latest --format onnx --verify

Métricas

accuracy, balanced_accuracy, precision, recall, f1, roc_auc, pr_auc.

Archivos

Ejercicios

Material formativo v3

Comandos profesionales

neural-labs quality --lab 00_numpy_neuron --quick
neural-labs benchmark --lab 00_numpy_neuron --quick --split-seed 42 --training-seeds 41 42 43
neural-labs leaderboard

Sellado del experimento

La partición se controla con split_seed; la inicialización y el entrenamiento con training_seed. El conjunto test se abre solamente después de seleccionar el checkpoint mediante validación y escribir experiment.lock.json.

🧠 Teoría

Teoría — Neurona con NumPy

Propósito

Implementar propagación, entropía cruzada y descenso de gradiente sin autograd.

Idea central

Este laboratorio estudia regresión logística implementada sin autograd usando breast_cancer_wisconsin, un dataset público real procedente de UCI.

La regresión logística es la unidad de construcción más simple del aprendizaje profundo: una sola neurona que combina linealmente sus entradas y las pasa por una no linealidad suave. Aquí no delegamos nada en un motor de diferenciación automática; escribimos a mano la propagación hacia adelante, la pérdida y las derivadas. El objetivo pedagógico es doble: entender de dónde salen los gradientes (no aparecen por magia) y comprobar que una neurona bien planteada resuelve un problema clínico real de diagnóstico binario (tumor benigno frente a maligno) a partir de 30 medidas morfológicas del núcleo celular.

Al forzar la derivación explícita, el laboratorio hace visible la cadena completa: cada peso wⱼ tiene una responsabilidad concreta sobre el error, y esa responsabilidad es exactamente lo que el gradiente cuantifica. Cuando en los laboratorios siguientes deleguemos esto en autograd, sabremos qué está calculando la máquina por debajo.

Fundamento matemático

El modelo predice la probabilidad de que la clase sea positiva combinando las entradas de forma lineal y aplastando el resultado al intervalo (0, 1) con la función logística (sigmoide):

p(y=1 | x) = σ(z), con z = x·w + b = Σⱼ xⱼwⱼ + b, y σ(z) = 1 / (1 + e⁻ᶻ)

La sigmoide convierte una puntuación real ilimitada z en una probabilidad. Su forma en "S" comprime valores muy negativos hacia 0 y muy positivos hacia 1, dejando la mayor sensibilidad alrededor de z = 0, donde σ(0) = 0.5 marca la frontera de decisión. El sesgo b desplaza esa frontera y los pesos w orientan el hiperplano separador en el espacio de las 30 características.

Para ajustar los parámetros medimos el desacuerdo con la entropía cruzada binaria (equivalente a la log-verosimilitud negativa de un modelo Bernoulli). Para un conjunto de N ejemplos:

L = −(1/N) Σᵢ [ yᵢ·ln(pᵢ) + (1 − yᵢ)·ln(1 − pᵢ) ]

Esta pérdida penaliza con fuerza creciente la confianza equivocada: si el modelo asigna pᵢ ≈ 0 a un caso realmente positivo, ln(pᵢ) → −∞. Elegir entropía cruzada en lugar del error cuadrático no es arbitrario: al combinarla con la sigmoide, el gradiente se simplifica de forma notable y evita las mesetas de aprendizaje que produciría σ′(z) elevada al cuadrado.

El resultado clave, que este laboratorio deriva a mano, es que el gradiente de la pérdida respecto a los parámetros depende solo del error de predicción (pᵢ − yᵢ):

∂L/∂wⱼ = (1/N) Σᵢ (pᵢ − yᵢ)·xᵢⱼ y ∂L/∂b = (1/N) Σᵢ (pᵢ − yᵢ)

La intuición es transparente: si el modelo predice de más (pᵢ > yᵢ), el gradiente empuja los pesos en dirección contraria a las entradas activas; si predice de menos, los empuja a favor. La magnitud del ajuste es proporcional tanto al error como al valor de la característica, por eso la escala de las variables importa: una variable con valores muy grandes domina el gradiente y desestabiliza la convergencia si no se normaliza.

Finalmente, el descenso de gradiente actualiza los parámetros iterativamente con una tasa de aprendizaje η:

w ← w − η·∇_w L ; b ← b − η·∂L/∂b

La formulación debe conectarse con cuatro elementos: representación de entrada, función del modelo, función de pérdida y regla de actualización. El notebook muestra las dimensiones de los tensores y conserva la misma implementación que el script de terminal.

Protocolo científico

Riesgos de interpretación

Datos clínicos reales derivados de imágenes digitalizadas de aspirados de masas mamarias.

El dataset refleja su proceso de recolección y no representa automáticamente otros períodos, países o poblaciones. Una asociación predictiva no demuestra causalidad.

Pregunta crítica

¿Cómo cambia la convergencia al modificar la escala de las variables?

🔗 Referencias

Las referencias apuntan a las obras; no se reproduce su contenido, la redacción es original.

🔬 Experimentos

Plan de experimentos — Neurona con NumPy

Hipótesis principal

Implementar propagación, entropía cruzada y descenso de gradiente sin autograd. La hipótesis debe aceptarse o rechazarse comparando el modelo con DummyClassifier y regresión logística de scikit-learn y no solo observando que la pérdida disminuye.

Experimento mínimo

  1. Ejecutar baseline.yaml con tres semillas.
  2. Ejecutar improved.yaml con las mismas semillas.
  3. Mantener fija la partición de datos dentro de cada semilla.
  4. Elegir la variante con validation.
  5. Comparar la variante elegida contra la línea base en test.
  6. Revisar intervalos de confianza, errores y costo computacional.

Experimento específico

Comparar el gradiente analítico con diferencias finitas.

Variables controladas

Tabla que debe completarse

Variante Semilla Métrica validation Métrica test Tiempo Parámetros Observación
baseline 41
baseline 42
baseline 43
improved 41
improved 42
improved 43

Criterio de conclusión

La conclusión debe declarar magnitud de la mejora, incertidumbre, costo adicional, errores relevantes y condiciones bajo las cuales el resultado podría no repetirse.

📝 Evaluación

Evaluación — Neurona con NumPy

Evidencias obligatorias

Preguntas

  1. Explique con sus palabras: p(y=1|x)=σ(xw+b); gradiente de la entropía cruzada.
  2. ¿Qué información del dataset solo puede utilizarse durante entrenamiento?
  3. ¿Por qué la línea base DummyClassifier y regresión logística de scikit-learn es una comparación razonable?
  4. ¿Cómo cambia la convergencia al modificar la escala de las variables?
  5. ¿Qué cambiaría antes de usar este modelo fuera del laboratorio?

Rúbrica

Criterio Insuficiente Adecuado Excelente Peso
Integridad de datos mezcla particiones separación correcta auditoría, hashes y justificación 20%
Implementación no ejecuta entrena y evalúa código claro, reusable y probado 20%
Diseño experimental resultado aislado comparación controlada multi-semilla e incertidumbre 20%
Análisis repite métricas interpreta errores identifica sesgos, límites y costo 25%
Comunicación incompleta reporte entendible model card y conclusiones verificables 15%

La aprobación exige al menos 70% y cero errores críticos de fuga de datos.