red neuronal – TensorFlow o Theano: ¿cómo saben la derivada de la función de pérdida basada en el gráfico de red neuronal?

En TensorFlow o Theano, solo le dices a la biblioteca cómo está tu red neuronal y cómo debería funcionar el feed-forward.

Por ejemplo, en TensorFlow, escribirías:

with graph.as_default():
    _X = tf.constant(X)
    _y = tf.constant(y)

    hidden = 20
    w0 = tf.Variable(tf.truncated_normal([X.shape[1], hidden]))
    b0 = tf.Variable(tf.truncated_normal([hidden]))

    h = tf.nn.softmax(tf.matmul(_X, w0) + b0)

    w1 = tf.Variable(tf.truncated_normal([hidden, 1]))
    b1 = tf.Variable(tf.truncated_normal([1]))

    yp = tf.nn.softmax(tf.matmul(h, w1) + b1)

    loss = tf.reduce_mean(0.5*tf.square(yp - _y))
    optimizer = tf.train.GradientDescentOptimizer(0.5).minimize(loss)

Estoy usando la función de pérdida de la norma L2, C = 0.5 * suma ((y-yp) ^ 2), y en el paso de propagación hacia atrás, presumiblemente, la derivada deberá calcularse, dC = suma (y-yp). Ver (30) in this book.

Mi pregunta es: ¿cómo puede TensorFlow (o Theano) conocer el derivado analítico para la propagación hacia atrás? ¿O hacen una aproximación? ¿O de alguna manera no usar el derivado?

He hecho el deep learning udacity course en TensorFlow, pero todavía estoy en desacuerdo sobre cómo dar sentido a cómo funcionan estas bibliotecas.

Mejor respuesta
La diferenciación ocurre en la línea final:

    optimizer = tf.train.GradientDescentOptimizer(0.5).minimize(loss)

Cuando ejecuta el método minimiza (), TensorFlow identifica el conjunto de variables de las que depende la pérdida y calcula los gradientes para cada una de ellas. La diferenciación se implementa en ops/gradients.py y utiliza “reverse accumulation”. Básicamente, busca desde el tensor de pérdida a las variables, aplicando la regla de la cadena a cada operador en el gráfico de flujo de datos. TensorFlow incluye “funciones de degradado” para la mayoría de los operadores (diferenciables), y puede ver un ejemplo de cómo se implementan en ops/math_grad.py. Una función de degradado puede usar la operación original (incluidas sus entradas, salidas y atributos) y los degradados calculados Cada una de sus salidas produce gradientes para cada una de sus entradas.

La página 7 de Ilya Sutskever’s PhD thesis tiene una buena explicación de cómo funciona este proceso en general.

Por favor indique la dirección original:red neuronal – TensorFlow o Theano: ¿cómo saben la derivada de la función de pérdida basada en el gráfico de red neuronal? - Código de registro