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.
- ¿Cuáles son las diferencias entre un programa y un algoritmo?
- ¿Es posible cuantificar la experiencia laboral?
- ¿Se ha completado Javascript Turing?
- Cómo resolver el problema BAT4 en SPOJ usando dp iterativo o recursivo
- ¿Cómo calcula YouTube el algoritmo mencionado a continuación?