Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Mallin Koulutus | Neuroverkon Rakentaminen Alusta Alkaen
Johdatus Neuroverkkoihin Pythonilla

Mallin Koulutus

Pyyhkäise näyttääksesi valikon

Neuroverkon kouluttaminen on iteraatiivinen prosessi, jossa malli parantaa suoritustaan vähitellen säätämällä painoja ja bias-arvoja minimoidakseen häviöfunktion. Tätä prosessia kutsutaan gradienttipohjaiseksi optimoinniksi, ja se noudattaa jäsenneltyä algoritmia.

Yleinen algoritmi

Aineisto syötetään ensin verkkoon useita kertoja silmukassa, jossa jokaista täyttä läpikäyntiä kutsutaan epookiksi. Jokaisen epookin aikana data sekoitetaan estämään mallia oppimasta esimerkkien järjestykseen perustuvia kaavoja. Sekoittaminen lisää satunnaisuutta, mikä johtaa kestävämpään malliin.

Jokaiselle koulutusesimerkille malli suorittaa eteenpäinlevityksen, jossa syötteet kulkevat verkon läpi kerros kerrokselta tuottaen ulostulon. Tämä ulostulo verrataan todelliseen tavoitearvoon, jolloin lasketaan häviö.

Sekoittaminen ja eteenpäinlevitys

Seuraavaksi malli suorittaa takaisinkytkennän (backpropagation) ja päivittää painot ja biasit jokaisessa kerroksessa pienentääkseen häviötä.

Tätä prosessia toistetaan useiden epochien ajan, jolloin verkko voi vähitellen hioa parametrejaan. Koulutuksen edetessä verkko oppii tekemään yhä tarkempia ennusteita. Hyperparametrien, kuten oppimisnopeuden, huolellinen säätäminen on kuitenkin ratkaisevan tärkeää, jotta koulutus olisi vakaata ja tehokasta.

Epoch

Oppimisnopeus (α\alpha) määrittää painopäivitysten askelkoon. Jos se on liian suuri, malli voi ohittaa optimaaliset arvot eikä saavuta konvergenssia. Jos se on liian pieni, koulutus hidastuu ja voi jumittua epäoptimaaliseen ratkaisuun. Sopivan oppimisnopeuden valinta tasapainottaa nopeuden ja vakauden koulutuksessa. Tyypilliset arvot vaihtelevat välillä 0.001–0.1 ongelmasta ja verkon koosta riippuen.

Alla oleva kuvaaja havainnollistaa, kuinka sopiva oppimisnopeus mahdollistaa häviön tasaisen pienenemisen optimaalisella tahdilla:

Eri oppimisnopeudet

Lopuksi stokastinen gradienttimenetelmä (SGD) on keskeisessä roolissa mallin koulutuksen tehokkuudessa. Sen sijaan, että painopäivitykset laskettaisiin koko aineiston käsittelyn jälkeen, SGD päivittää parametrit jokaisen yksittäisen esimerkin jälkeen. Tämä tekee koulutuksesta nopeampaa ja tuo päivityksiin pieniä vaihteluita, mikä voi auttaa mallia välttämään paikallisia minimejä ja saavuttamaan paremman kokonaisratkaisun.

fit()-metodi

fit()-luokan Perceptron-metodi vastaa mallin kouluttamisesta käyttäen stokastista gradienttimenetelmää.

def fit(self, training_data, labels, epochs, learning_rate):
    # Iterating over multiple epochs
    for epoch in range(epochs):
        # Shuffling the data  
        indices = np.random.permutation(training_data.shape[0])
        training_data = training_data[indices]
        labels = labels[indices]
        # Iterating through each training example
        for i in range(training_data.shape[0]):
            inputs = training_data[i, :].reshape(-1, 1)
            target = labels[i, :].reshape(-1, 1)

            # Forward propagation
            output = ...

            # Computing the gradient of the loss function w.r.t. output
            da = ...

            # Backward propagation through all layers
            for layer in self.layers[::-1]:
                da = ...
Koodin kuvaus
expand arrow
for epoch in range(epochs):

Käy läpi koulutusprosessin annetun epoch-määrän verran. Jokainen epoch tarkoittaa yhtä kokonaista läpikäyntiä koko aineiston yli.

indices = np.random.permutation(training_data.shape[0])
training_data = training_data[indices]
labels = labels[indices]

Sekoittaa koulutusdatan ja vastaavat tunnisteet ennen jokaista epokkia. Tämä estää mallia oppimasta järjestykseen perustuvia kuvioita.

for i in range(training_data.shape[0]):

Iteroi jokaisen koulutusesimerkin läpi. Koska käytössä on SGD, painot päivitetään jokaisen yksittäisen esimerkin jälkeen.

inputs = training_data[i, :].reshape(-1, 1)
target = labels[i, :].reshape(-1, 1)

Poimii i:nnen koulutusesimerkin ja sen tunnisteen. Muotoilee ne n x 1 -matriisiksi, jotta matriisilaskut toimivat oikein.

output = ...

Suorittaa eteenpäinlevityksen ennustetun tuloksen laskemiseksi.

da = ...

Laskee tappiofunktion gradientin suhteessa ulostuloaktivaatioon. Tämä toimii lähtögradienttina takaisinkytkennässä.

for layer in self.layers[::-1]:
    da = ...

Suorittaa takaisinkytkennän kaikissa kerroksissa käänteisessä järjestyksessä. Jokainen kerros päivittää painonsa ja bias-arvonsa gradienttilaskeuman avulla.

question mark

Miksi kutsutaan yhtä kokonaista läpikäyntiä koko koulutusaineiston yli?

Valitse oikea vastaus

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 9

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

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

Osio 2. Luku 9
some-alt