Gradientti: mikä muutos pienentäisi häviötä?
Gradientti (gradient) kokoaa skalaarifunktion osittaisderivaatat sen syötteiden suhteen. Koulutuksessa syötteet ovat tavallisesti mallin parametrit ja skalaari on häviö.
Jokainen komponentti mittaa paikallista herkkyyttä: kuinka paljon häviö muuttuisi, jos yhtä parametria muutettaisiin hieman muiden pysyessä paikallaan. Tavallisessa euklidisessa geometriassa gradientti osoittaa jyrkimmän kasvun suuntaan; gradienttimenetelmä askeltaa vastakkaiseen suuntaan.
Derivoi mallin virhe
TensorFlow-esimerkki derivoi keskineliövirheen kahden piirteen lineaarisen mallin läpi. Automaattinen derivointi seuraa tallennettuja operaatioita.
import tensorflow as tf
features = tf.constant([[1., 2.], [3., 1.]])
targets = tf.constant([4., 5.])
weights = tf.Variable([0.2, -0.1])
with tf.GradientTape() as tape:
predictions = tf.linalg.matvec(features, weights)
loss = tf.reduce_mean(tf.square(predictions - targets))
gradient = tape.gradient(loss, weights)
gradient on samanmuotoinen kuin weights. Sen laskeminen ei päivitä mitään, vaan optimoijan on tehtävä muutos erikseen.
Gradientti on paikallinen signaali, ei lupaus suuren askeleen hyödystä tai parhaasta mahdollisesta mallista. Vastavirta-algoritmi on tehokas ketjusääntöön perustuva menettely näiden gradienttien laskemiseen verkon läpi.