La propagación hacia atrás es una técnica utilizada para entrenar redes neuronales artificiales. En cada iteración de entrenamiento, hace dos cosas:
- en primer lugar, calcula los gradientes de la función de costo con respecto a los parámetros de red (por ejemplo, pesos y sesgos). En otras palabras, ¿cuánto contribuye cada parámetro al error de la red?
- en segundo lugar, realiza un paso de descenso de gradiente basado en estos gradientes (por ejemplo, resta los gradientes por la velocidad de aprendizaje de los parámetros) Esto ajusta los parámetros en la dirección que se espera que minimice la función de costo.
Podría implementar ambos pasos manualmente, pero sería bastante complicado, especialmente al calcular los gradientes. Sin embargo, TensorFlow hace todo esto de forma gratuita. Por ejemplo, puede usar la función tf.gradients()
para calcular los gradientes. Aquí hay un ejemplo:
>>> importar tensorflow como tf
>>> x = tf.Variable (3.0)
>>> y = tf.Variable (5.0)
>>> f = (x * y + 5) ** 2 # algún ejemplo de función f (x, y)
>>> grads = tf.gradients (f, [x, y])
>>> init = tf.global_variables_initializer ()
>>> con tf.Session () como sess:
… Init.run ()
… Imprimir (sess.run ([x, y, f, grads]))
…
[3.0, 5.0, 400.0, [200.00002, 120.00002]]
Como puede ver, encuentra que f (x = 3, y = 5) es 400.0, y la derivada de f (x, y) con respecto a x es 200.0, y con respecto a y es 120.0. Si conoce el cálculo, puede verificar fácilmente que esto es correcto. Obviamente, la función de costo de una red neuronal profunda es una función mucho más complicada, con potencialmente millones de parámetros, pero TensorFlow puede calcular los gradientes con respecto a cada parámetro con solo dos pasadas a través del gráfico (usa una técnica llamada reversa). modo autodiff). Es muy eficiente, preciso y automático.
- Mis gafas de sol hacen que ciertas luces se atenúen completamente cuando inclino mi cabeza 45 grados hacia la derecha. Esas ciertas luces se vuelven más brillantes cuando inclino mi cabeza 45 grados hacia la izquierda. ¿Que es esto?
- Cómo evitar que mi cerebro piense demasiado en algo que no es verdad
- ¿Qué implica confiar en otro humano? ¿Por qué deberíamos?
- ¿Qué es lo que te hace reír cada vez que lo oyes o lo ves?
- ¿Por qué a veces las personas no hacen las cosas incluso si saben claramente que eso es bueno para ellas mismas?
Esto se encarga del primer paso de la propagación hacia atrás. El segundo es ajustar los parámetros del modelo usando los gradientes. Nuevamente, puede manejar esto manualmente, pero TensorFlow proporciona los llamados “optimizadores” que lo manejan por usted. Continuando con el ejemplo anterior, tratemos de encontrar valores de x e y que minimicen f (x, y):
>>> opt = tf.train.GradientDescentOptimizer (learning_rate = 0.01)
>>> training_op = opt.minimize (f)
>>> con tf.Session () como sess:
… Init.run ()
… Para iteración en rango (1000):
… Sess.run (training_op)
… Imprimir (sess.run ([x, y, f]))
[-1.3205377, 3.7863362, 2.2737366e-13]
El training_op
del optimizador calcula los gradientes (igual que arriba) pero también realiza el segundo paso, ajustando las variables x e y en cada iteración. Después de 1000 iteraciones, terminamos con x = -1.32 y y = 3.78, para lo cual f (x, y) = 0 (ignorando errores de precisión de punto flotante). Cualquier par x, y tal que x * y = -5 minimiza esta función. TensorFlow encontró uno de esos pares.
Espero que esto ayude.