Gekissimo.net - Opi ansaitsemaan rahaa webilläsi Internetissä!

Aloittelijan opas stokastisen gradientin laskeutumiseen tyhjästä

Seuraava artikkeli auttaa sinua: Aloittelijan opas stokastisen gradientin laskeutumiseen tyhjästä

Suurin osa valvotuista koneoppimismalleista rakennettaessa tärkein tehtävä on suunnitella funktiokartoitus syöttö- ja lähtömallien välille. On olemassa erilaisia ​​matemaattisia optimointimenetelmiä, jotta tämä kartoitus saadaan mahdollisimman oikeaksi etsimällä optimaalinen parametrijoukko. Gradienttilasku ja stokastinen gradienttilasku ovat joitain näistä matemaattisista käsitteistä, joita käytetään optimointiin. Tässä artikkelissa aiomme keskustella stokastisen gradientin laskeutumisesta ja sen toteuttamisesta tyhjästä, jota käytetään luokittelussa huokoinen. Tärkeimmät artikkelissa käsiteltävät kohdat on lueteltu alla.

Sisällysluettelo

  1. Mikä on gradienttilasku?
  2. Stokastinen gradienttilasku
  3. Käytännön toteutus
    1. Tietojen valmistelu
    2. Erän luominen ja toimintojen määrittely
    3. Määrittelevä malli
    4. Mallin testaus

Mikä on gradienttilasku?

Lähes kaikki koneoppimisalgoritmit perustuvat matemaattisiin operaatioihin. Samoin koneoppimisen gradienttilaskeutumismenetelmä tulee matematiikasta, jossa sitä voidaan hyödyntää ensiluokkaisessa optimoinnissa. Se toimii periaatteessa minkä tahansa differentiaalifunktion paikallisten minimien löytämiseen. Kun puhutaan gradientin laskeutumisen toiminnasta, huomaamme, että se syntyy toistamalla funktion gradientin vastakkaiseen suuntaan olevia askelia mistä tahansa kohdasta, jossa gradientti on jyrkin. Jos sama asia suoritetaan käänteisesti, sitä voidaan kutsua gradienttinousuksi, joka johtaa meidät paikalliseen maksimiin. voimme sanoa, että koneoppimisessa sitä voidaan käyttää optimointiin, joka parantaa oppimisprosessia.

Stokastinen gradienttilasku

Stokastinen gradienttilasku on myös optimointimenetelmä. Optimoitavassa tavoitefunktiossa on sopivat sileysominaisuudet ja tämä sopiva sileys tekee stokastisen gradienttilaskeutumisen erilaisen kuin gradienttilaskeutuminen. Tasaisuusominaisuuksilla olevan tavoitefunktion optimointia voidaan pitää gradientin laskeutumisen stokastisena approksimaationa. Tämä konsepti on myös matematiikasta ja koneoppimisessa sitä voidaan hyödyntää tavoitefunktion minimoimiseen, mikä tarkoittaa tavoitefunktion paikallisten minimien löytämistä sopivalla sileydellä. Tasaisuusominaisuudet voivat olla differentioituvia tai subifferoituvia.

Oletetaan, että on seuraavanlainen optimointitoiminto:

Tässä funktiossa w on parametri, joka minimoi funktion ja joka on arvioitava. W:n stokastisen gradientin laskeutumisen arvioimiseksi käytetään seuraavia vaiheita:

  1. Satunnaisten w-termien alustus
  2. W-termi-algoritmin käyttäminen laskee ennusteet
  3. Laske reaaliarvojen ja ennusteiden välinen keskineliövirhe
  4. Parametrin (w) päivitetyn arvon laskeminen käyttämällä parametrin edellistä arvoa ja keskineliövirhettä.
  5. Toista parametrin ennusteen ja päivitetyn arvon laskenta konvergenssiin asti.
🔥 Empfohlen:  Magento 2 WhatsApp -tilausilmoitus 101: Täydellinen opas

Tarkastellaan kuinka voimme toteuttaa stokastisen gradientin laskeutumisen pythonilla.

Käytännön toteutus

Tietojen valmistelu

Tässä toteutuksessa aloitamme tietojen tuomisesta. Kokeilua varten voimme käyttää iirisdataa, jota voidaan kutsua sklearn-kirjastosta.

osoitteesta sklearn.datasets import load_iris data = load_iris() data.keys()

Lähtö:

Nyt voimme muuntaa tietomme Pandas-tietokehykseksi käyttämällä seuraavia koodirivejä.

tuo pandat muodossa pd dataf = pd.DataFrame(data[‘data’]) dataf[‘Species’] = pd.DataFrame(data[‘target’]) dataf

Lähtö:

Tässä artikkelissa yritämme optimoida binääriluokituksen käyttämällä stokastista gradienttilaskua ja iirisdata tarjoaa 3 luokkaa tietojoukossa. Joten seuraavassa vaiheessa muutamme toisen luokan luokkaan 1.

for i in range(len(dataf[‘Species’])): jos dataf[‘Species’][i] == 0: dataf[‘Species’][i] = 1 muu: dataf[‘Species’][i] = 0 dataf

Lähtö:

Jaetaan tiedot.

kohteesta sklearn.model_selection import train_test_split data_feature = dataf.drop(columns=”Laji”) data_class = dataf[‘Species’]
x_train, x_test, y_train, y_test = train_test_split( data_feature, data_class, test_size = 0,2, random_state = 10 )

Tietojen jakamisen jälkeen meidän on valittava tiedoista muutama satunnainen piste tasaisuuden luomiseksi. Ennen valintaa meidän on lisättävä kohdetiedot junatietoihin.

x_train[‘Species’] = y_juna df = x_juna df

Lähtö:

Tässä saamme lopulliset tietomme. Aloitetaan seuraavasta menettelystä.

Erän luominen ja toimintojen määrittely

Tässä osiossa määrittelemme joitain mallin kanssa vaadittavia toimintoja ja teemme myös erien valinnan tiedoista jokaiselle iteraatiolle. Nyt olemme valmiita suorittamaan valintaprosessin. Voimme tehdä sen käyttämällä seuraavia koodirivejä

def stratified_spl(df): df1 = df[df[‘Species’] == 1]df0 = df[df[‘Species’] == 0]df1_spl = df1.sample(n=4) df0_spl = df0.sample(n=8) return pd.concat([df1_spl, df0_spl])

Yllä olevassa funktiossa olemme valinneet 12 satunnaista pistettä jokaiselle iteraatiolle, jossa 4 datapistettä kerätään luokasta yksi ja 8 datapistettä kerätään toisesta luokasta.

Seuraavien koodirivien avulla voimme määritellä sigmoidifunktion

def sigmoid(X, w): z = np.piste(w, XT) palauttaa 1/(1+np.exp(-(z)))

Seuraavaksi menettelyssä meidän on erotettava ominaisuudet ja kohteet tiedoista 12 valitulla satunnaisnäytteellä. Käyttämällä alla olevaa toimintoa voimme suorittaa tämän.

def sep(df): df_features = df.drop(columns=”Laji”) df_label = df[‘Species’]
df_features[’00’] = [1]*12 palauttaa df_features, df_label

Seuraavaksi menettelyssä vaadimme funktion keskineliövirheelle. Voimme määrittää funktion MSE:lle käyttämällä seuraavia koodirivejä.

🔥 Empfohlen:  Opas linkitettävään omaisuuteen tehokkaaseen linkkien rakentamiseen

def SME(X, y, w): n = len(X) yp = sigmoid(X, w) return np.sum((yp-y)**2)/n

Virhefunktion, erottelun ja sigmoidifunktion määrittämisen jälkeen olemme valmiita tekemään funktion stokastisen gradientin laskeutumisluokittelumallille.

Määrittelevä malli

Nyt olemme valmiita tekemään funktion stokastista gradienttilaskua varten.

def grad_des(df, w, alfa, aikakausi): j = []
w1 = []
w1.lisää(w) i:lle alueella(epookissa): d = stratified_spl(df) X, y = sep(d) n= len(X) yp = sigmoid(X, w) i:lle alueella(4): w[i] -= (alfa/n) * np.sum(-2*X[i]*(y-yp)) w[4] -= (alpha/n) *np.sum(-2*(y-yp)) w1.append(list(w)) j.append(SME(X, y, w)) return j, w1

Tässä yllä olevassa funktiossa voimme nähdä, että keräämme SME:n ja w:n jokaisesta iteraatiosta.

Mallin testaus

Nyt olemme valmiita testaamaan mallia. Määritellään joitakin satunnaislukuja w:n arvoksi.

tuo numpy muodossa np w = np.random.rand(5)

Nyt voimme käyttää näitä arvoja ja kouluttaa tietojoukkoa grad_des-funktiolla.

j, w1 = grad_des(x_train, w, 0,01, 100)

Tässä olemme laskeneet tiedoille päivitetyt painot, nyt näiden avulla voimme laskea keskimääräisen neliövirheen käyttämällä yllä määriteltyä funktiota.

def err_test(X, y, w): er = []
i:lle alueella(len(w1)): er.append(SME(X, y, w[i])) paluu er

Tämän funktion avulla voimme laskea ennustetun y:n jokaiselle painolle ja virheelle. Seuraavien koodirivien avulla voimme piirtää virheet.

tuo matplotlib.pyplot muodossa plt def plot(X, y, w): error = err_test(X, y, w) return plt.scatter(alue(len(error)), error) X = x_train.drop(columns=” Laji”) X[’00’] = [1]*len(X) plot(X, y_train, w1)

Lähtö:

Voimme myös tarkistaa testijoukon virheet lisäämällä harhaa.

x_testi[’00’] = [1]*len(x_test) plot(x_test, y_test, w1)

Lähtö:

Tässä näemme, että keskimääräinen neliövirhe laskee iteraatioiden myötä ja se on melkein lähellä nollaa muutamassa viimeisessä iteraatiossa, mikä tarkoittaa, että mallimme on toiminut hyvin.

Viimeiset sanat

Tässä artikkelissa olemme käsitelleet gradientin laskeutumista ja stokastista gradientin laskeutumista, joita käytetään minkä tahansa funktion parametrien optimointiin. Keskustelun ohessa olemme käyneet läpi myös idean, joka voi auttaa meitä toteuttamaan stokastisen gradienttilaskennan pythonilla.

🔥 Empfohlen:  DAZN Canada Review 2023: Onko suoratoistopalvelu sen arvoinen?

Viitteet