Funciones de pérdida y cálculo de error
Cuantifica el error entre predicciones y objetivos utilizando Mean Squared Error (MSE) y Binary Cross-Entropy (BCE).
Constrúyelo en tu lenguaje
El tester trata tu programa como una caja negra: sirve cualquier lenguaje. Estos son los más cómodos para este proyecto.
Fundamentos: ¿Cómo sabe una máquina que se equivocó?
Imagina que estás practicando tiro al blanco. Si disparas y la flecha cae a 10 centímetros de la diana, mides esa distancia y ajustas tu puntería en el siguiente tiro. Si no midieras la distancia del fallo, nunca podrías mejorar.
En machine learning ocurre exactamente lo mismo: para que un modelo aprenda, necesitamos una medida matemática precisa de qué tan lejos estuvo su predicción de la realidad. A esa medida la llamamos función de pérdidaFunción matemática que cuantifica el costo o discrepancia entre las predicciones del modelo y las etiquetas realesVer documentación oficial o función de costo (loss function).
Las dos métricas de pérdida esenciales
En esta etapa implementarás las dos funciones más fundamentales del aprendizaje supervisado:
1. Error Cuadrático Medio (MSE - Mean Squared Error)
Usado comúnmente en problemas de regresión y aproximación:
¿Por qué se eleva al cuadrado la diferencia?
- Evita cancelaciones: Si en un ejemplo fallamos por y en otro por , la suma simple daría (aparentando error nulo). Al elevar al cuadrado, todo error se vuelve positivo.
- Penaliza errores grandes: Un error pequeño de al cuadrado es (casi inofensivo), pero un error grande de al cuadrado se convierte en (penalización severa).
2. Entropía Cruzada Binaria (BCE - Binary Cross-Entropy)
Es la función estándar para clasificaciones donde el objetivo real es binario () y el modelo predice una probabilidad ():
¿Por qué es ideal para clasificación?
- Si la etiqueta real es , la fórmula simplifica a : si el modelo predijo , el costo es casi nulo (). Pero si predijo , el costo se dispara ().
- Estabilidad numérica (): En programación, si , la operación genera o errores de cálculo (
NaN). Para prevenirlo de forma robusta, recortamos al intervalo seguro con : Dato curioso de la industria: Frameworks profesionales como PyTorch (torch.nn.BCELoss) implementan este mismo recorte por debajo para evitar que los modelos se rompan durante el entrenamiento.
Tu objetivo en esta etapa
Cuando la entrada contenga "op": "loss", tu programa debe leer:
metric: nombre de la métrica ("mse"o"bce")predictions: lista de predicciones numéricastargets: lista de valores objetivo reales
Ejemplo guiado (MSE)
{
"op": "loss",
"metric": "mse",
"predictions": [0.8, 0.2],
"targets": [1.0, 0.0]
}
- Error muestra 1: .
- Error muestra 2: .
- Promedio: .
- Salida:
{"loss":0.04}.
Implementación práctica y consejos de código
- Cálculo de MSE:
python # Python mse = sum((p - y) ** 2 for p, y in zip(preds, targets)) / len(preds)typescript // TypeScript const sumSq = preds.reduce((acc, p, i) => acc + (p - targets[i]) ** 2, 0); const mse = sumSq / preds.length; - Cálculo de BCE con recorte seguro:
python # Python eps = 1e-7 total = 0.0 for p, y in zip(preds, targets): p_c = max(eps, min(1.0 - eps, p)) total += y * math.log(p_c) + (1.0 - y) * math.log(1.0 - p_c) bce = -total / len(preds)typescript // TypeScript const eps = 1e-7; let total = 0; for (let i = 0; i < preds.length; i++) { const p = Math.max(eps, Math.min(1 - eps, preds[i])); total += targets[i] * Math.log(p) + (1 - targets[i]) * Math.log(1 - p); } const bce = -total / preds.length;
Reglas de validación y salida
- Si
predictionsytargetstienen longitudes diferentes o están vacías, escribeerrorenstderry termina con código1. - Si
metricno es"mse"ni"bce", escribeerrorenstderry termina con código1. - Redondea el valor de pérdida a 4 decimales. Si el número resulta entero (como
0), emítelo como entero. - Salida compacta:
json { "loss": 0.04 }
Formato de salida y errores
Los ejemplos multilínea se muestran así para facilitar la lectura. Emite JSON compacto, sin espacios opcionales, con las propiedades en el orden de los ejemplos de salida y un salto de línea final. No escribas logs en stdout. Las pruebas comparan texto exacto.
Para entradas inválidas, usa stderr con la palabra error, stdout vacío y código 1. Para entradas válidas, código 0. Usa números JSON enteros cuando el resultado sea entero; en neural-network aplica el redondeo a cuatro decimales indicado en la etapa.