¿Cuáles son los beneficios del algoritmo de retropropagación frente a la estimación numérica del gradiente?

El algoritmo de retropropagación es más preciso y más barato que estimar los gradientes numéricamente. La principal desventaja de usar la propagación hacia atrás es la generalización. Si estaba utilizando gradientes numéricos, podría definir cualquier función de activación en cualquier unidad de su red y usar el mismo código para calcular los gradientes numéricos para todas las unidades. ¿Por qué? Los gradientes numéricos no son específicos de la operación; podrías calcular el gradiente numérico de sin (x) y e ^ x con el mismo código. Con la retropropagación, la implementación común es definir una forma de calcular gradientes para cada operación individualmente. Por ejemplo, supongamos que desea que una unidad tenga sin (x) como función de activación, necesitaría definir un código que calcule cos (x) para que sea la regla de retroprogramación para sin (x).

¿Por qué cambiar la generalización por velocidad y precisión mediante el uso de propagación hacia atrás en lugar de gradientes numéricos? Una razón es que no es probable que las personas usen funciones extrañas y locas en su red neuronal. Las activaciones y transformaciones comunes como ReLU, operaciones lineales afines, sigmoide y tanh tienen gradientes fácilmente computables. En otras palabras, puede ser más trabajo definir la regla de propagación hacia atrás para cada operación, pero dado que la lista de operaciones que las personas realmente usan en las redes neuronales es limitada, este no es un problema tan grande.

La retropropagación es una forma económica de calcular exactamente el gradiente. El uso de diferencias finitas es innecesario porque realizar las propagaciones hacia adelante múltiples necesarias es mucho más costoso que la propagación hacia adelante + hacia atrás habitual. Además, el uso de diferencias finitas es menos preciso.

El único beneficio de usar diferencias finitas es que no tiene que implementar la propagación hacia atrás. Pero realmente la implementación de backprop no es difícil, y es un costo único. En resumen, generalmente no es una idea útil en redes neuronales usar diferencias finitas para estimar el gradiente.

Sin embargo, es muy común y posiblemente necesario usar aproximaciones centradas de diferencias finitas para verificar y depurar sus cálculos de propagación hacia atrás.