¿Debo abandonar el aprendizaje automático si he estado luchando con la propagación hacia atrás durante 3 meses y aún no lo consigo?

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.

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.

Esto es análogo a la pregunta hipotética: “¿Debo dejar de aprender a conducir si no puedo entender cómo funciona un motor de combustión interna rotativo?”

En primer lugar, hay muchos algoritmos de Aprendizaje Automático (ML), por lo que puede tener éxito sin usar Redes Neuronales (NN). Debido al teorema Sin almuerzo gratis, habrá casos en los que NN no será la mejor opción.

En segundo lugar, la propagación hacia atrás es una técnica utilizada para encontrar una aproximación de una solución al sistema NN. Entenderlo lo suficientemente bien a grandes rasgos para que pueda evitar los inconvenientes de aplicar NN es suficiente. No es necesario que lo comprenda hasta el punto de poder volver a programar la prop. Hay muchas personas inteligentes que ya lo hacen.

En tercer lugar, NN tarda en entrenar y necesita muchos ejemplos de conjuntos de entrenamiento, por lo que puede que ni siquiera sea la opción práctica.

Es mucho más importante saber cómo construir un modelo de LD y evaluarlo después de que lo construyes que saber los entresijos de los accesorios anteriores.

Si su pregunta hubiera sido “¿No puedo entender la propagación de vuelta, debería renunciar al aprendizaje automático?”, Mi respuesta habría sido sí.

Pero el hecho de que haya estado tratando de entender el concepto durante 3 meses muestra su persistencia, ¡NO SE RASTE!

Intenta y escribe algunos programas para entender el concepto. Puede ser un pequeño proyecto. Además, si su problema son las matemáticas detrás del concepto, tal vez una comprensión más profunda de las matemáticas ayude.

También recuerde que el mismo Andrew dice, incluso después de muchos años en este campo, incluso él no puede comprender completamente todo en las redes neuronales.

¡Sólo relájate y no te rindas!

todo lo mejor.

Por lo general, si estás luchando con un concepto específico, es porque no has aprendido los fundamentos lo suficientemente bien como para hacerlo más fácil. ¿Qué tan bien entiendes el cálculo de una sola variable, el cálculo multivariable y el álgebra lineal? Si no los tienes abajo, me concentraría en revisarlos antes de continuar.

Por lo que dijiste, parece que has golpeado una pared de ladrillos aquí. Randy Pausch, profesor de la Universidad Carnegie Mellon, habló mucho sobre las paredes de ladrillo en su libro The Last Lecture . Una de las cosas que dijo sobre estas paredes de ladrillo siempre se me ha pegado.

“Las paredes de ladrillo están ahí por una razón. Nos dan la oportunidad de mostrar lo mucho que queremos algo “.

Ahora que estás enfrentando este muro de ladrillos con una dificultad conceptual, tienes la oportunidad de mostrar cuánto quieres entender la teoría detrás de un algoritmo extremadamente importante en el aprendizaje automático. Y por lo que parece, parece que realmente quieres entenderlo, por lo que renunciar al aprendizaje automático no tiene mucho sentido para mí.

De los métodos que ha descrito, hay una forma de aprendizaje que parece estar ausente, y es el aprendizaje por colaboración e interacción. Hasta ahora, parece que está intentando aprender este solo, pero parece que ahora puede ser un buen momento para comunicarse con personas que también están aprendiendo la propagación hacia atrás o que ya lo han aprendido. Hágales preguntas sobre lo que usted no entiende. Trabajar a través de una implementación del algoritmo juntos. Trabajar a través de problemas que involucran la propagación hacia atrás juntos. En mi experiencia, trabajar con otros en conceptos sobre los que he sido un poco inestable ha sido una de las experiencias más enriquecedoras desde una perspectiva de aprendizaje. Nunca debe sentirse mal o avergonzado por pedir ayuda.

Edit: He tenido la intención de escribir una respuesta en backpropagation por un tiempo y finalmente llegué a eso. Echa un vistazo a mi respuesta a ¿Cómo entiendo la belleza del algoritmo de propagación hacia atrás?

Verifique las diapositivas de la clase 2 (cs763-dl / 2017Spring) https://github.com/cs763-dl/2017… . ¿Espero que ayude?