Ir al contenido

Aprendizaje en Redes Multicapa, Retropropagación

En un Perceptrón Simple (una sola neurona), si el sistema falla, sabemos que la culpa es de esa única neurona. El error es fácil de calcular: Objetivo - Salida.

En una Red Multicapa (Deep Learning), tenemos un problema grave: El Problema de Asignación de Crédito.

  • Si la red dice “Gato” y era “Perro”, la neurona de salida se equivocó.
  • Pero, ¿por qué se equivocó? Quizás porque la neurona oculta de la capa anterior le pasó un dato malo.
  • ¿Y por qué esa neurona oculta le pasó un dato malo? Quizás porque la anterior a ella falló.

No tenemos un “profesor” para las capas intermedias. La Retropropagación es el método matemático para enviar la “culpa” del error desde el final hacia atrás, capa por capa, para saber cuánto ajustar cada peso interno.

7.2 Definiciones Previas: Anatomía de la Señal

Sección titulada «7.2 Definiciones Previas: Anatomía de la Señal»

Para entender las fórmulas, primero debemos distinguir qué pasa dentro de cada neurona.

  1. Entrada Neta (NetNet o zz): Es la suma bruta de lo que recibe la neurona. Netj=(xiwij)Net_j = \sum (x_i \cdot w_{ij})

    • Es el “ruido total” antes de filtrar.
  2. Salida (yy o OutOut): Es el resultado procesado tras pasar el filtro (sigmoide). yj=f(Netj)y_j = f(Net_j)

    • Es lo que la neurona “grita” a la siguiente capa.

[!Importante] Para poder usar Retropropagación, necesitamos una función de activación que sea suave y continua (derivable en todo punto). Usamos la Sigmoide: f(z)=11+ezf(z) = \frac{1}{1+e^{-z}} Esta función curva suavemente la entrada, transformando cualquier número (del -\infty al ++\infty) en un valor entre 0 y 1.

Lo mejor de la Sigmoide no es solo su forma, sino que su derivada es increíblemente fácil de calcular en un ordenador. La derivada se puede expresar en función de la propia salida de la neurona (yy o f(z)f(z)): f(z)=f(z)(1f(z))f'(z) = f(z) \cdot (1 - f(z)) Para calcular la pendiente (sensibilidad) de la neurona, no necesitas volver a hacer cálculos complejos con exponenciales (eze^{-z}). Si la neurona ya sabe su salida (yy), simplemente calculas y(1y)y \cdot (1-y).

  1. Objetivo (tt): El valor correcto que deberíamos haber obtenido (solo existe al final de la red).

7.3 El Fundamento Matemático: El Descenso del Gradiente

Sección titulada «7.3 El Fundamento Matemático: El Descenso del Gradiente»

Nuestro objetivo es minimizar el Error Global (EE). Definimos el error cuadrático medio:

E=12(ty)2E = \frac{1}{2} (t - y)^2

  • 12\frac{1}{2}: Es un truco matemático. Al derivar x2x^2, el 2 baja (2x2x). Al multiplicarlo por 1/21/2, se cancelan. Nos simplifica la vida.
  • Derivada: Para aprender, necesitamos saber la pendiente. Si cambio el peso ww, ¿el error sube o baja?

La Necesidad de la Derivada (La Regla de la Cadena)

Sección titulada «La Necesidad de la Derivada (La Regla de la Cadena)»

Queremos cambiar un peso ww que está en el medio de la red. Pero ese peso no toca el Error (EE) directamente.

  1. El peso ww cambia la Entrada Neta (NetNet).
  2. La Entrada Neta cambia la Salida (yy).
  3. La Salida cambia el Error (EE).

Por la Regla de la Cadena, la derivada total es la multiplicación de estos pasos: Ew=EyyNetNetw\frac{\partial E}{\partial w} = \frac{\partial E}{\partial y} \cdot \frac{\partial y}{\partial Net} \cdot \frac{\partial Net}{\partial w}

Aquí es donde nace el concepto de DELTA (δ\delta). Para no escribir todo eso, llamamos δ\delta (Delta o Error Local) a la parte que combina el Error y la Activación: “Cuánto contribuye la neurona al error total”.

El aprendizaje ocurre repitiendo estos dos pasos.

Paso 1: Propagación Hacia Adelante (Forward Pass)

Sección titulada «Paso 1: Propagación Hacia Adelante (Forward Pass)»

La red funciona normalmente.

  1. Metemos los datos en la entrada.
  2. Calculamos Entradas Netas y Salidas capa por capa hasta el final.
  3. Comparamos la salida final con el objetivo real.

Paso 2: Propagación Hacia Atrás (Backward Pass) - Calculando Deltas

Sección titulada «Paso 2: Propagación Hacia Atrás (Backward Pass) - Calculando Deltas»

Ahora calculamos el error local (δ\delta) de cada neurona.

A. Para la Neurona de Salida (Sabemos la respuesta): Aquí es fácil. La culpa es la diferencia directa con la realidad, multiplicada por la sensibilidad de la neurona (su derivada). δsalida=(ty)f(Net)\delta_{salida} = (t - y) \cdot f'(Net)

  • (ty)(t - y): El error bruto.
  • f(Net)f'(Net): La derivada de la función sigmoide. Significa “¿Qué tan fácil era hacer cambiar de opinión a esta neurona?”.

B. Para las Neuronas Ocultas (La Magia): No tenemos (ty)(t-y). Calculamos la culpa “escuchando las quejas” de las neuronas de la siguiente capa a las que alimentamos. δoculta=f(Net)(δsiguientewconexion)\delta_{oculta} = f'(Net) \cdot \sum (\delta_{siguiente} \cdot w_{conexion})

  • (δw)\sum (\delta \cdot w): Sumo las culpas de las neuronas siguientes ponderadas por mi conexión con ellas. “Si la neurona siguiente tiene un error gigante (δ\delta alto) y yo le grité muy fuerte (ww alto), yo tengo mucha culpa”.

[!Nota] Esta imagen no se si está bien pero bueno es un poco para entender como se monta todo este tinglao.

7.5 Actualización de Pesos (El Aprendizaje)

Sección titulada «7.5 Actualización de Pesos (El Aprendizaje)»

Una vez que cada neurona tiene su “nota de culpa” (δ\delta), actualizamos los pesos para corregir el error.

wnuevo=wactual+Δww_{nuevo} = w_{actual} + \Delta w

La corrección (Δw\Delta w) se calcula así:

Δw=ηδEntradaorigen\Delta w = \eta \cdot \delta \cdot \text{Entrada}_{origen}

Desglose de la fórmula:

  1. η\eta (Tasa de aprendizaje): La Prudencia. “Aunque el error sea grande, corregimos poco a poco para no pasarnos”.
  2. δ\delta (Delta del destino): La Dirección del Error. “¿Debo subir o bajar el peso?”.
  3. Entradaorigen\text{Entrada}_{origen} (Salida de la anterior): La Evidencia. “Solo corregimos el peso si la neurona de origen estaba activa. Si envió un 0, este peso no tuvo nada que ver en el resultado, así que no se toca”.

Partimos de la fórmula del inicio

Ew=EyyNetParte ANetwParte B\frac{\partial E}{\partial w} = \underbrace{\frac{\partial E}{\partial y} \cdot \frac{\partial y}{\partial Net}}_{\text{Parte A}} \cdot \underbrace{\frac{\partial Net}{\partial w}}_{\text{Parte B}}

Si te fijas en la Parte A (los dos primeros términos), verás que coinciden exactamente con la definición de δsalida\delta_{salida}:

  • 1º Término: Ey\frac{\partial E}{\partial y}

    • Como calculamos antes, esto es igual a (ty)-(t - y).
    • (El signo menos se suele absorber en la fórmula final de actualización de pesos).
  • 2º Término: yNet\frac{\partial y}{\partial Net}

    • Esto es la derivada de la función de activación, es decir, f(Net)f'(Net).

Si multiplicas esos dos términos, obtienes exactamente tu fórmula de delta:

δsalidaEyyNet=(ty)f(Net)\delta_{salida} \approx \frac{\partial E}{\partial y} \cdot \frac{\partial y}{\partial Net} = (t - y) \cdot f'(Net)

Nota técnica: Matemáticamente, δ\delta se define como ENet-\frac{\partial E}{\partial Net}. El signo negativo del error (yt)(y-t) se cancela con el menos de la definición, quedando el positivo (ty)(t-y).

La Parte B (Netw\frac{\partial Net}{\partial w}) es lo que nos faltaba, esta derivada es simplemente la entrada xx.

Gracias a esta relación, podemos reescribir la terrorífica Regla de la Cadena (primera fórmula) de una forma súper simple y elegante para programar: Ew=δxentrada\frac{\partial E}{\partial w} = - \delta \cdot x_{entrada}

Y de ahí sale la famosa regla de actualización: Δw=ηδxentrada\Delta w = \eta \cdot \delta \cdot x_{entrada}

En resumen:

  • La primera fórmula es la explicación matemática completa (el “por qué”).
  • La segunda fórmula (δ\delta) es el resumen práctico de los dos primeros pasos, que representa la “culpa local” de la neurona antes de mirar sus cables de entrada.
  1. Inicializar pesos: Valores pequeños aleatorios (nunca todos a cero).
  2. Repetir hasta que el error sea bajo:
    • Forward: Calcular todas las NetNet y yy desde el inicio hasta el fin.
    • Cálculo de Error (δ\delta) Salida: Usando (ty)(t-y).
    • Backpropagation: Calcular los δ\delta ocultos trayendo el error desde el futuro hacia el pasado usando los pesos.
    • Update: Modificar todos los pesos (ww) usando la fórmula ηδy\eta \cdot \delta \cdot y.

Una vez más se demuestra que el grado presenta una dejadez considerable por parte de las “vacas sagradas” de la facultad. Y es que no puede ser: estas personas son reconocidísimas en sus ámbitos, publican 300 artículos, acuden a congresos internacionales… pero cuando llega el momento de pensar en sus alumnos y proporcionarles una bibliografía de calidad con la cual puedan aprender los conceptos de forma intuitiva, te sueltan un PDF de 2001 robado de otra universidad o presentaciones sin orden lógico alguno, llenas de palabras sueltas y esquemas incomprensibles.

Eso sí, si te quejas, la alternativa que te ofrecen es el libro de turno de 1990 escrito en alemán por un médico francés. Y apáñate tú para conseguirlo y entenderlo.

La situación es insostenible. Es frecuente encontrarse con:

  • Documentación completamente desactualizada
  • Materiales de dudosa procedencia sin adaptar al contexto actual
  • Presentaciones caóticas sin estructura pedagógica
  • Bibliografía obsoleta, inaccesible o en idiomas que nadie domina

¿Tan difícil es hacer las cosas bien? Otras carreras universitarias lo consiguen. No se pide la perfección, pero sí un mínimo de coherencia y actualización en los materiales docentes.

Considero que el grado debería aprender de otras titulaciones y mejorar urgentemente este aspecto. Con la jubilación progresiva de las viejas vacas sagradas de la universidad, espero sinceramente que esta situación mejore con el tiempo y que la nueva generación de profesorado traiga una renovación real en la calidad docente, no solo en la investigadora.

Otra asignatura te lo paso, pero en esta no me jodas. Es imposible que con todos los conocimientos sobre IA que tienes y la cantidad de herramientas que existen, no te salga de dentro redactar unos apuntes propios mediante el uso de la IA.