ai.vostman.fi
← Tekoälysanasto

Tekoälyn tietosanakirja

Gradienttimenetelmä: askelpituus muuttaa kulkureittiä

Gradienttimenetelmä (gradient descent) päivittää parametreja vähentämällä niistä oppimisnopeudella kerrotun gradientin. Toistaminen voi pienentää derivoituvaa tavoitetta, mutta askelpituus ratkaisee, pysyykö paikallinen suunta hyödyllisenä.

Kapea laakso selittää, miksi suurempi askel voi epäonnistua. Tavoite voi muuttua yhdessä suunnassa loivasti ja toisessa jyrkästi.

Yksi tavoite, kaksi reittiä

NumPy-esimerkki minimoi lausekkeen w[0]**2 + 10*w[1]**2. Toisessa suunnassa kaarevuus on kymmenkertainen.

import numpy as np

def descend(rate, steps=40):
    weights = np.array([1., 1.])
    losses = []
    for _ in range(steps):
        losses.append(weights[0]**2 + 10 * weights[1]**2)
        gradient = np.array([2 * weights[0], 20 * weights[1]])
        weights -= rate * gradient
    return np.array(losses)

stable = descend(0.05)
unstable = descend(0.12)

Pienempi oppimisnopeus lähestyy nollaa. Suurempi ylittää laakson jyrkässä suunnassa ja erkanee minimistä, vaikka gradientti on joka kerta täsmällinen.

Neuroverkkoja koulutettaessa gradientti arvioidaan tavallisesti eristä koko aineiston sijaan. Liikemäärä ja adaptiiviset optimoijat muokkaavat päivityssääntöä, mutta tarvitsevat silti sopivan oppimisnopeuden. Kasvava häviö voi johtua epävakaasta päivityksestä, ei vain huonosta aineistosta tai liian pienestä mallista.

Lähteet