Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Propagación Hacia Atrás | Red Neuronal Desde Cero
Introducción a las Redes Neuronales

bookPropagación Hacia Atrás

La retropropagación (backprop) es el proceso de calcular cómo la función de pérdida cambia con respecto a cada parámetro en la red. El objetivo es actualizar los parámetros en la dirección que reduce la pérdida.

Para lograr esto, se utiliza el algoritmo de descenso de gradiente y se calculan las derivadas de la pérdida con respecto a los valores de preactivación de cada capa (valores de salida en bruto antes de aplicar la función de activación) y se propagan hacia atrás.

Cada capa contribuye a la predicción final, por lo que los gradientes deben calcularse de manera estructurada:

  1. Realizar la propagación hacia adelante;
  2. Calcular la derivada de la pérdida con respecto a la preactivación de salida;
  3. Propagar esta derivada hacia atrás a través de las capas utilizando la regla de la cadena;
  4. Calcular los gradientes para los pesos y sesgos para actualizarlos.
Note
Nota

Los gradientes representan la tasa de cambio de una función con respecto a sus entradas, es decir, son sus derivadas. Indican cuánto afecta un pequeño cambio en los pesos, sesgos o activaciones a la función de pérdida, guiando el proceso de aprendizaje del modelo mediante el descenso de gradiente.

Notación

Para clarificar la explicación, utilizaremos la siguiente notación:

  • WlW^l es la matriz de pesos de la capa ll;
  • blb^l es el vector de sesgos de la capa ll;
  • zlz^l es el vector de preactivaciones de la capa ll;
  • ala^l es el vector de activaciones de la capa ll;

Por lo tanto, estableciendo a0a^0 como xx (las entradas), la propagación hacia adelante en un perceptrón con n capas puede describirse como la siguiente secuencia de operaciones:

a0=x,......z1=W1a0+b1,zl=Wlal1+bl,zn=Wnan1+bn,a1=f1(z1),al=fl(zl),an=fn(zn),......y^=an.\begin{aligned} a^0 &= x, & &... & &...\\ z^1 &= W^1 a^0 + b^1, & z^l &= W^l a^{l-1} + b^l, & z^n &= W^n a^{n-1} + b^n,\\ a^1 &= f^1(z^1), & a^l &= f^l(z^l), & a^n &= f^n(z^n),\\ &... & &... & \hat y &= a^n. \end{aligned}

Para describir la retropropagación matemáticamente, introducimos las siguientes notaciones:

  • dalda^l: derivada de la pérdida con respecto a las activaciones en la capa ll;
  • dzldz^l: derivada de la pérdida con respecto a las pre-activaciones en la capa ll (antes de aplicar la función de activación);
  • dWldW^l: derivada de la pérdida con respecto a los pesos en la capa ll;
  • dbldb^l: derivada de la pérdida con respecto a los sesgos en la capa ll.

Cálculo de gradientes para la capa de salida

En la capa final nn, primero se calcula el gradiente de la pérdida con respecto a las activaciones de la capa de salida, danda^n. Luego, utilizando la regla de la cadena, se calcula el gradiente de la pérdida con respecto a las pre-activaciones de la capa de salida:

dzn=danfn(zn)dz^n = da^n \odot f'^n(z^n)
Note
Nota

El símbolo \odot representa la multiplicación elemento a elemento. Dado que trabajamos con vectores y matrices, el símbolo de multiplicación habitual \cdot representa el producto punto. fnf'^n es la derivada de la función de activación de la capa de salida.

Esta cantidad representa la sensibilidad de la función de pérdida ante cambios en la preactivación de la capa de salida.

Una vez que tenemos dzn\text d z^n, calculamos los gradientes para los pesos y los sesgos:

dWn=dzn(an1)Tdbn=dzn\begin{aligned} dW^n &= dz^n \cdot (a^{n-1})^T\\ db^n &= dz^n \end{aligned}

donde (an1)T(a^{n-1})^T es el vector transpuesto de activación de la capa anterior. Dado que el vector original es un vector de nneurons×1n_{neurons} \times 1, el vector transpuesto es de 1×nneurons1 \times n_{neurons}.

Para propagar esto hacia atrás, se calcula la derivada de la pérdida con respecto a las activaciones de la capa anterior:

dan1=(Wn)Tdznda^{n-1} = (W^n)^T \cdot dz^n

Propagación de Gradientes a las Capas Ocultas

Para cada capa oculta ll el procedimiento es el mismo. Dado dalda^l:

  1. Calcular la derivada de la pérdida con respecto a las preactivaciones;
  2. Calcular los gradientes para los pesos y los sesgos;
  3. Calcular dal1da^{l-1} para propagar la derivada hacia atrás.
dzl=dalfl(zl)dWl=dzl(al1)Tdbl=dzldal1=(Wl)Tdzl\begin{aligned} dz^l &= da^l \odot f'^l(z^l)\\ dW^l &= dz^l \cdot (a^{l-1})^T\\ db^l &= dz^l\\ da^{l-1} &= (W^l)^T \cdot dz^l \end{aligned}

Este paso se repite hasta que llegamos a la capa de entrada.

Actualización de pesos y sesgos

Una vez que se han calculado los gradientes para todas las capas, se actualizan los pesos y sesgos utilizando descenso de gradiente:

Wl=WlαdWlbl=blαdbl\begin{aligned} W^l &= W^l - \alpha \cdot dW^l\\ b^l &= b^l - \alpha \cdot db^l \end{aligned}

donde α\alpha es la tasa de aprendizaje, que controla cuánto se ajustan los parámetros.

question mark

Durante la retropropagación, ¿cómo actualiza una red neuronal sus pesos y sesgos para minimizar la función de pérdida?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 2. Capítulo 7

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Awesome!

Completion rate improved to 4

bookPropagación Hacia Atrás

Desliza para mostrar el menú

La retropropagación (backprop) es el proceso de calcular cómo la función de pérdida cambia con respecto a cada parámetro en la red. El objetivo es actualizar los parámetros en la dirección que reduce la pérdida.

Para lograr esto, se utiliza el algoritmo de descenso de gradiente y se calculan las derivadas de la pérdida con respecto a los valores de preactivación de cada capa (valores de salida en bruto antes de aplicar la función de activación) y se propagan hacia atrás.

Cada capa contribuye a la predicción final, por lo que los gradientes deben calcularse de manera estructurada:

  1. Realizar la propagación hacia adelante;
  2. Calcular la derivada de la pérdida con respecto a la preactivación de salida;
  3. Propagar esta derivada hacia atrás a través de las capas utilizando la regla de la cadena;
  4. Calcular los gradientes para los pesos y sesgos para actualizarlos.
Note
Nota

Los gradientes representan la tasa de cambio de una función con respecto a sus entradas, es decir, son sus derivadas. Indican cuánto afecta un pequeño cambio en los pesos, sesgos o activaciones a la función de pérdida, guiando el proceso de aprendizaje del modelo mediante el descenso de gradiente.

Notación

Para clarificar la explicación, utilizaremos la siguiente notación:

  • WlW^l es la matriz de pesos de la capa ll;
  • blb^l es el vector de sesgos de la capa ll;
  • zlz^l es el vector de preactivaciones de la capa ll;
  • ala^l es el vector de activaciones de la capa ll;

Por lo tanto, estableciendo a0a^0 como xx (las entradas), la propagación hacia adelante en un perceptrón con n capas puede describirse como la siguiente secuencia de operaciones:

a0=x,......z1=W1a0+b1,zl=Wlal1+bl,zn=Wnan1+bn,a1=f1(z1),al=fl(zl),an=fn(zn),......y^=an.\begin{aligned} a^0 &= x, & &... & &...\\ z^1 &= W^1 a^0 + b^1, & z^l &= W^l a^{l-1} + b^l, & z^n &= W^n a^{n-1} + b^n,\\ a^1 &= f^1(z^1), & a^l &= f^l(z^l), & a^n &= f^n(z^n),\\ &... & &... & \hat y &= a^n. \end{aligned}

Para describir la retropropagación matemáticamente, introducimos las siguientes notaciones:

  • dalda^l: derivada de la pérdida con respecto a las activaciones en la capa ll;
  • dzldz^l: derivada de la pérdida con respecto a las pre-activaciones en la capa ll (antes de aplicar la función de activación);
  • dWldW^l: derivada de la pérdida con respecto a los pesos en la capa ll;
  • dbldb^l: derivada de la pérdida con respecto a los sesgos en la capa ll.

Cálculo de gradientes para la capa de salida

En la capa final nn, primero se calcula el gradiente de la pérdida con respecto a las activaciones de la capa de salida, danda^n. Luego, utilizando la regla de la cadena, se calcula el gradiente de la pérdida con respecto a las pre-activaciones de la capa de salida:

dzn=danfn(zn)dz^n = da^n \odot f'^n(z^n)
Note
Nota

El símbolo \odot representa la multiplicación elemento a elemento. Dado que trabajamos con vectores y matrices, el símbolo de multiplicación habitual \cdot representa el producto punto. fnf'^n es la derivada de la función de activación de la capa de salida.

Esta cantidad representa la sensibilidad de la función de pérdida ante cambios en la preactivación de la capa de salida.

Una vez que tenemos dzn\text d z^n, calculamos los gradientes para los pesos y los sesgos:

dWn=dzn(an1)Tdbn=dzn\begin{aligned} dW^n &= dz^n \cdot (a^{n-1})^T\\ db^n &= dz^n \end{aligned}

donde (an1)T(a^{n-1})^T es el vector transpuesto de activación de la capa anterior. Dado que el vector original es un vector de nneurons×1n_{neurons} \times 1, el vector transpuesto es de 1×nneurons1 \times n_{neurons}.

Para propagar esto hacia atrás, se calcula la derivada de la pérdida con respecto a las activaciones de la capa anterior:

dan1=(Wn)Tdznda^{n-1} = (W^n)^T \cdot dz^n

Propagación de Gradientes a las Capas Ocultas

Para cada capa oculta ll el procedimiento es el mismo. Dado dalda^l:

  1. Calcular la derivada de la pérdida con respecto a las preactivaciones;
  2. Calcular los gradientes para los pesos y los sesgos;
  3. Calcular dal1da^{l-1} para propagar la derivada hacia atrás.
dzl=dalfl(zl)dWl=dzl(al1)Tdbl=dzldal1=(Wl)Tdzl\begin{aligned} dz^l &= da^l \odot f'^l(z^l)\\ dW^l &= dz^l \cdot (a^{l-1})^T\\ db^l &= dz^l\\ da^{l-1} &= (W^l)^T \cdot dz^l \end{aligned}

Este paso se repite hasta que llegamos a la capa de entrada.

Actualización de pesos y sesgos

Una vez que se han calculado los gradientes para todas las capas, se actualizan los pesos y sesgos utilizando descenso de gradiente:

Wl=WlαdWlbl=blαdbl\begin{aligned} W^l &= W^l - \alpha \cdot dW^l\\ b^l &= b^l - \alpha \cdot db^l \end{aligned}

donde α\alpha es la tasa de aprendizaje, que controla cuánto se ajustan los parámetros.

question mark

Durante la retropropagación, ¿cómo actualiza una red neuronal sus pesos y sesgos para minimizar la función de pérdida?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 2. Capítulo 7
some-alt