Probablemente debería elegir un enfoque opuesto: comience con lo básico. Revisar el cálculo y la teoría de la probabilidad. La mayoría de las personas que escriben esos libros y tutoriales en ML conocen esas fundaciones tan bien que olvidan que otros no (o simplemente esperan lectores académicos).
Tampoco creo que debas entender la propagación hacia atrás para usarla. El sentimiento general abstracto de cómo funciona debería funcionar perfectamente. Te prometo que usarás la función compute_gradients () de algunos marcos para el 99% del tiempo.
Intentaré poner aquí una explicación del algoritmo de propagación hacia atrás que más me atraiga.
Entiendo la propagación hacia atrás como una versión de un gradiente de pendiente para niveles múltiples de funciones (neuronas). Supongo que ya sabes qué pendiente de gradiente es de los videos de Andrew Ng.
- ¿Alguna vez se escapó después de infringir la ley en beneficio de otra persona?
- ¿Debo romper con mi novia porque creo que hay alguien mejor que yo esperándola?
- Mi novio recientemente rompió conmigo porque creía que estaba engañando. ¿Cómo le hago creer que no lo era?
- ¿Hay algo que pueda ayudarte a seguir adelante?
- Después de discutir y casi romper con tu pareja romántica, ¿cuánto tiempo te llevó recuperarte emocionalmente después de recuperarte?
Así que aquí hay una neurona, f (x1, x2, x3, w1, w2, w3) como una función matemática (AF simplificado):
Digamos que queremos que tome a, byc y produzca y. Definimos la función de costo como J (f (x1, x2, x3, w1, w2, w3), y)
Lo que hacemos en este caso es:
– Simplemente calcula nuestra f (a, b, c, w1, w2, w3) y obtén algo de ~ y (también llamada aproximación)
– Calcular los gradientes de costos ( derivados parciales para cada peso,
es decir, cómo cambia la función de costo dependiendo de cada peso )
– y ajustar nuestros pesos en consecuencia.
Básicamente, lo que hacemos aquí es tomar nuestro ~ y ver cuán equivocada fue esta aproximación basada en cada peso .
Y ahora veamos la versión multicapa de la misma.
Vamos a intentar usar el descenso de gradiente aquí.
Ahora tenemos 2 casos para minimizar: f5 , que en realidad es el mismo que teníamos y el resto. No tenemos resultados deseados para el segundo caso y simplemente no podemos verlos individualmente.
Dado que el descenso de gradiente puede minimizar la función de costo para algo solo si tiene entradas y salidas de entrenamiento definidas, podemos elegir ese ejemplo dado.
Yo diría que es una línea que conecta entrada y salida.
Consideremos todo lo que no pertenece a esa línea roja como constantes. Entonces podemos reescribir nuestro ejemplo como
f5 (f2 (f1 (X1))) = Y
Entonces nuestras funciones de costo se verán como J (f5 (f2 (f1 (X1))), Y).
Como tratamos todo, pero las funciones que necesitamos como una constante, podemos hablar de tres pesos: w5, w2 y w1 (para cada función).
Ahora deberíamos calcular los gradientes para ponderaciones, en su mayoría igual que en el ejemplo anterior (derivadas parciales).
Cada peso está incrustado en la función correspondiente.
w5
Simplemente calculamos la salida de nuestra red ~ Y y luego calculamos δJ / δw5 (~ Y, Y)
w2 y w1
Ese es el lugar donde los problemas deberían comenzar ya que la Y anterior no se conoce (llamémosla {Y-1})
δJ / δw2 (~ {Y-1}, {Y-1}) =?
¿Cómo eliminamos este {Y-1}?
Aquí viene el truco: ¿recuerdas la regla de la cadena del cálculo? Se parece a esto:
(f (g (x))) `= f (g (x))` g (x) `, para todas las x
Esta regla realmente nos permite calcular una derivada parcial de la función interna de nuestra función de costo superior (es decir, cómo un peso profundo afecta nuestros resultados finales):
δJ / δw2 (f5 (f2 ({Y-2})), Y)
p.ej
Si
J (f, Y) = (f – Y) ^ 2
y
f5 (x) = (w5 * x)
entonces
δJ / δw2 = w5 * 2 * (w5 * f2 (x) – Y) * δ f2 / δ w2
si f2 (x) = (w2 * x), entonces
δJ / δw1 = w5 * 2 * (w5 * f2 (f1 (x)) – Y) * δ f2 / δ w2 * δ f1 / δ w1
etc …
Bam! La misma pendiente de gradiente antiguo con gradientes calculados de una manera interesante.
Y esto vale para cada peso que hay en tu red.
Lo siento si hay algún error presente, todavía envolviendo mi cabeza alrededor de esto también.
Espero eso ayude.