Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Gradienttiteippi | TensorFlow:n Perusteet
Johdanto TensorFlow'hun

Gradienttiteippi

Gradient Tape

Perustietämys tensorien perusoperaatioista mahdollistaa siirtymisen prosessien tehostamiseen ja nopeuttamiseen hyödyntämällä TensorFlown sisäänrakennettuja ominaisuuksia. Ensimmäinen näistä edistyneistä työkaluista on Gradient Tape.

Mikä on Gradient Tape?

Tässä luvussa käsitellään yhtä TensorFlown keskeisistä käsitteistä, Gradient Tape -ominaisuutta. Tämä toiminto on olennainen gradienttipohjaisten optimointimenetelmien ymmärtämisessä ja toteuttamisessa, erityisesti syväoppimisessa.

Gradient Tape TensorFlow'ssa on työkalu, joka tallentaa operaatiot automaattista differentiaatiota varten. Kun operaatioita suoritetaan Gradient Tape -lohkon sisällä, TensorFlow seuraa kaikkia suoritettuja laskutoimituksia. Tämä on erityisen hyödyllistä koneoppimismallien koulutuksessa, jossa gradientteja tarvitaan mallin parametrien optimointiin.

Note
Huomio

Käytännössä gradientti on osittaisderivaattojen joukko.

Gradient Tapen käyttö

Gradient Tapen käyttöön liittyvät seuraavat vaiheet:

  • Luo Gradient Tape -lohko: käytä with tf.GradientTape() as tape:. Tämän lohkon sisällä kaikki laskutoimitukset tallennetaan;
  • Määrittele laskutoimitukset: suorita tensorien kanssa operaatioita lohkon sisällä (esim. määrittele neuroverkon eteenpäin kulku);
  • Laske gradientit: käytä tape.gradient(target, sources) laskeaksesi gradientit kohteen suhteen lähteisiin.

Yksinkertainen gradientin laskenta

Yksinkertainen esimerkki tämän ymmärtämiseksi paremmin.

123456789101112131415
import tensorflow as tf # Define input variables x = tf.Variable(3.0) # Start recording the operations with tf.GradientTape() as tape: # Define the calculations y = x * x # Extract the gradient for the specific input (`x`) grad = tape.gradient(y, x) print(f'Result of y: {y}') print(f'The gradient of y with respect to x is: {grad.numpy()}')

Tämä koodi laskee funktion y = x^2 gradientin kohdassa x = 3. Tämä vastaa funktion y osittaisderivaattaa muuttujan x suhteen.

yksinkertainen_derivaatta

Useita osittaisderivaattoja

Kun ulostuloon vaikuttaa useita syötteitä, voidaan laskea osittaisderivaatta jokaista näistä syötteistä (tai vain valituista) kohtaan. Tämä tehdään antamalla muuttujalista sources-parametrina.

Tämän operaation tuloksena saadaan vastaava tensorilista, jossa jokainen tensori edustaa osittaisderivaattaa suhteessa kuhunkin sources-listassa määriteltyyn muuttujaan.

1234567891011121314151617
import tensorflow as tf # Define input variables x = tf.Variable(tf.fill((2, 3), 3.0)) z = tf.Variable(5.0) # Start recording the operations with tf.GradientTape() as tape: # Define the calculations y = tf.reduce_sum(x * x + 2 * z) # Extract the gradient for the specific inputs (`x` and `z`) grad = tape.gradient(y, [x, z]) print(f'Result of y: {y}') print(f"The gradient of y with respect to x is:\n{grad[0].numpy()}") print(f"The gradient of y with respect to z is: {grad[1].numpy()}")

Tämä koodi laskee funktion y = sum(x^2 + 2*z) gradientin annetuilla x- ja z-arvoilla. Tässä esimerkissä x:n gradientti esitetään kaksiulotteisena tensorina, jossa jokainen alkio vastaa alkuperäisen x-matriisin arvon osittaisderivaattaa.

osittaisderivaatat
Esimerkin kuvaus
expand arrow

Gradientin laskeminen suhteessa x:ään

Kun laskemme derivaatan y:stä suhteessa x:ään, kysymme käytännössä: "Jos muutamme x:n arvoa hieman, kuinka paljon y muuttuu?" x:ään kohdistuva operaatio on neliöinti (x^2), joten derivaatta kertoo, että jokainen yksikkö, jolla x kasvaa, kasvattaa y:tä määrällä 2*x.

Koska kaikki x:n alkiot ovat 3.0:

  • Jokaisen alkion gradientti on 2*3.0 = 6.0;
  • Gradienttimatriisi suhteessa x:ään on saman muotoinen kuin x itse (2x3), ja jokainen alkio on 6.0. Tämä osoittaa, että minkä tahansa yksittäisen x:n alkion kasvattaminen yhdellä kasvattaa y:tä kuudella yksiköllä.

Gradientin laskeminen suhteessa z:aan

z:n tapauksessa tarkastellaan, miten muutokset z:ssa vaikuttavat y:hyn. Koska z lisätään jokaiseen x:n neliöityyn alkioon (kaksinkertaistamisen jälkeen), kysytään käytännössä: "Jos z kasvaa yhdellä, kuinka paljon y kasvaa?" Broadcastauksen sääntöjen mukaan 2*z lisätään jokaiseen x^2:n alkioon, aivan kuin olisi matriisi, jonka koko on sama kuin x:llä ja kaikki alkiot ovat 2*z.

  • Operaation 2*z derivaatta z:n suhteen on yksinkertainen: se on 2, koska 2*z muuttuu kahdella yksiköllä jokaista z:n yksikkömuutosta kohden;
  • Koska tämä operaatio vaikuttaa jokaiseen x:n matriisin alkioon, kokonaismuutos y:ssä yhtä z:n yksikkömuutosta kohden on 2 kertaa x:n alkioiden määrä (eli 6, koska matriisi on 2x3). Näin ollen kokonaisgradientti suhteessa z:aan on 2*6 = 12. Tämä tarkoittaa, että z:n kasvattaminen yhdellä yksiköllä kasvattaa y:tä 12 yksiköllä, mikä kuvastaa muutoksen yhteisvaikutusta kaikkiin x:n alkioihin.

Yhteenveto

  • Gradientti suhteessa x:ään on matriisi, joka osoittaa, kuinka minkä tahansa x:n alkion yksikkömuutos kasvattaa y:tä kuudella yksiköllä, kuvastaen suoraa yhteyttä x:n ja y:n muutosten välillä;
  • Gradientti suhteessa z:aan on skalaarinen arvo (12), joka osoittaa, kuinka paljon z:n yksikkömuutos vaikuttaa y:hyn koko x-matriisin osalta.
Note
Huomio

Lisätietoja Gradient Tape -ominaisuuksista, mukaan lukien korkeamman asteen derivaatat ja Jacobin matriisin erottaminen, löytyy virallisesta TensorFlow documentation.

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 2
single

single

Gradienttiteippi

Pyyhkäise näyttääksesi valikon

Gradient Tape

Perustietämys tensorien perusoperaatioista mahdollistaa siirtymisen prosessien tehostamiseen ja nopeuttamiseen hyödyntämällä TensorFlown sisäänrakennettuja ominaisuuksia. Ensimmäinen näistä edistyneistä työkaluista on Gradient Tape.

Mikä on Gradient Tape?

Tässä luvussa käsitellään yhtä TensorFlown keskeisistä käsitteistä, Gradient Tape -ominaisuutta. Tämä toiminto on olennainen gradienttipohjaisten optimointimenetelmien ymmärtämisessä ja toteuttamisessa, erityisesti syväoppimisessa.

Gradient Tape TensorFlow'ssa on työkalu, joka tallentaa operaatiot automaattista differentiaatiota varten. Kun operaatioita suoritetaan Gradient Tape -lohkon sisällä, TensorFlow seuraa kaikkia suoritettuja laskutoimituksia. Tämä on erityisen hyödyllistä koneoppimismallien koulutuksessa, jossa gradientteja tarvitaan mallin parametrien optimointiin.

Note
Huomio

Käytännössä gradientti on osittaisderivaattojen joukko.

Gradient Tapen käyttö

Gradient Tapen käyttöön liittyvät seuraavat vaiheet:

  • Luo Gradient Tape -lohko: käytä with tf.GradientTape() as tape:. Tämän lohkon sisällä kaikki laskutoimitukset tallennetaan;
  • Määrittele laskutoimitukset: suorita tensorien kanssa operaatioita lohkon sisällä (esim. määrittele neuroverkon eteenpäin kulku);
  • Laske gradientit: käytä tape.gradient(target, sources) laskeaksesi gradientit kohteen suhteen lähteisiin.

Yksinkertainen gradientin laskenta

Yksinkertainen esimerkki tämän ymmärtämiseksi paremmin.

123456789101112131415
import tensorflow as tf # Define input variables x = tf.Variable(3.0) # Start recording the operations with tf.GradientTape() as tape: # Define the calculations y = x * x # Extract the gradient for the specific input (`x`) grad = tape.gradient(y, x) print(f'Result of y: {y}') print(f'The gradient of y with respect to x is: {grad.numpy()}')

Tämä koodi laskee funktion y = x^2 gradientin kohdassa x = 3. Tämä vastaa funktion y osittaisderivaattaa muuttujan x suhteen.

yksinkertainen_derivaatta

Useita osittaisderivaattoja

Kun ulostuloon vaikuttaa useita syötteitä, voidaan laskea osittaisderivaatta jokaista näistä syötteistä (tai vain valituista) kohtaan. Tämä tehdään antamalla muuttujalista sources-parametrina.

Tämän operaation tuloksena saadaan vastaava tensorilista, jossa jokainen tensori edustaa osittaisderivaattaa suhteessa kuhunkin sources-listassa määriteltyyn muuttujaan.

1234567891011121314151617
import tensorflow as tf # Define input variables x = tf.Variable(tf.fill((2, 3), 3.0)) z = tf.Variable(5.0) # Start recording the operations with tf.GradientTape() as tape: # Define the calculations y = tf.reduce_sum(x * x + 2 * z) # Extract the gradient for the specific inputs (`x` and `z`) grad = tape.gradient(y, [x, z]) print(f'Result of y: {y}') print(f"The gradient of y with respect to x is:\n{grad[0].numpy()}") print(f"The gradient of y with respect to z is: {grad[1].numpy()}")

Tämä koodi laskee funktion y = sum(x^2 + 2*z) gradientin annetuilla x- ja z-arvoilla. Tässä esimerkissä x:n gradientti esitetään kaksiulotteisena tensorina, jossa jokainen alkio vastaa alkuperäisen x-matriisin arvon osittaisderivaattaa.

osittaisderivaatat
Esimerkin kuvaus
expand arrow

Gradientin laskeminen suhteessa x:ään

Kun laskemme derivaatan y:stä suhteessa x:ään, kysymme käytännössä: "Jos muutamme x:n arvoa hieman, kuinka paljon y muuttuu?" x:ään kohdistuva operaatio on neliöinti (x^2), joten derivaatta kertoo, että jokainen yksikkö, jolla x kasvaa, kasvattaa y:tä määrällä 2*x.

Koska kaikki x:n alkiot ovat 3.0:

  • Jokaisen alkion gradientti on 2*3.0 = 6.0;
  • Gradienttimatriisi suhteessa x:ään on saman muotoinen kuin x itse (2x3), ja jokainen alkio on 6.0. Tämä osoittaa, että minkä tahansa yksittäisen x:n alkion kasvattaminen yhdellä kasvattaa y:tä kuudella yksiköllä.

Gradientin laskeminen suhteessa z:aan

z:n tapauksessa tarkastellaan, miten muutokset z:ssa vaikuttavat y:hyn. Koska z lisätään jokaiseen x:n neliöityyn alkioon (kaksinkertaistamisen jälkeen), kysytään käytännössä: "Jos z kasvaa yhdellä, kuinka paljon y kasvaa?" Broadcastauksen sääntöjen mukaan 2*z lisätään jokaiseen x^2:n alkioon, aivan kuin olisi matriisi, jonka koko on sama kuin x:llä ja kaikki alkiot ovat 2*z.

  • Operaation 2*z derivaatta z:n suhteen on yksinkertainen: se on 2, koska 2*z muuttuu kahdella yksiköllä jokaista z:n yksikkömuutosta kohden;
  • Koska tämä operaatio vaikuttaa jokaiseen x:n matriisin alkioon, kokonaismuutos y:ssä yhtä z:n yksikkömuutosta kohden on 2 kertaa x:n alkioiden määrä (eli 6, koska matriisi on 2x3). Näin ollen kokonaisgradientti suhteessa z:aan on 2*6 = 12. Tämä tarkoittaa, että z:n kasvattaminen yhdellä yksiköllä kasvattaa y:tä 12 yksiköllä, mikä kuvastaa muutoksen yhteisvaikutusta kaikkiin x:n alkioihin.

Yhteenveto

  • Gradientti suhteessa x:ään on matriisi, joka osoittaa, kuinka minkä tahansa x:n alkion yksikkömuutos kasvattaa y:tä kuudella yksiköllä, kuvastaen suoraa yhteyttä x:n ja y:n muutosten välillä;
  • Gradientti suhteessa z:aan on skalaarinen arvo (12), joka osoittaa, kuinka paljon z:n yksikkömuutos vaikuttaa y:hyn koko x-matriisin osalta.
Note
Huomio

Lisätietoja Gradient Tape -ominaisuuksista, mukaan lukien korkeamman asteen derivaatat ja Jacobin matriisin erottaminen, löytyy virallisesta TensorFlow documentation.

Tehtävä

Pyyhkäise aloittaaksesi koodauksen

Tavoitteena on laskea annetun matemaattisen funktion gradientti (derivaatta) tietyssä pisteessä TensorFlow'n Gradient Tape -toiminnallisuutta hyödyntäen. Funktio ja piste annetaan valmiina, ja näet, kuinka TensorFlow'ta käytetään gradientin löytämiseen kyseisessä pisteessä.

Tarkastellaan yksimuuttujaista toista astetta olevaa funktiota x, joka on määritelty seuraavasti:

f(x) = x^2 + 2x - 1

Tehtävänäsi on laskea tämän funktion derivaatta kohdassa x = 2.

Vaiheet

  1. Määrittele muuttuja x siihen pisteeseen, jossa haluat laskea derivaatan.
  2. Käytä Gradient Tape -toimintoa tallentaaksesi funktion f(x) laskennan.
  3. Laske funktion f(x) gradientti annetussa pisteessä.

Huom

Gradientti voidaan laskea vain liukulukutyyppisille arvoille.

Derivative of a Function at a Point

Ratkaisu

Switch to desktopVaihda työpöytään todellista harjoitusta vartenJatka siitä, missä olet käyttämällä jotakin alla olevista vaihtoehdoista
Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 2
single

single

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

some-alt