Erstatt Q-tabellen med et nevralt nettverk, og se hvorfor replay buffer og target network trengs for at læringen skal bli stabil.
Læringsmål
01Forklar hvorfor en Q-tabell ikke skalerer, og hvordan et Q-nettverk generaliserer til tilstander det aldri har sett
02Forklar hvorfor vektdeling gjør at ett gradientsteg endrer Q-verdiene til mange tilstander, og hvorfor det kan gi ustabil trening
03Regn ut DQN-målet y og det kvadrerte TD-tapet, også for terminale overganger
04Forklar hva replay buffer med tilfeldige minibatcher og et frosset target-nettverk løser hver for seg
05Regn ut ε under lineær annealing og tolk hvorfor utforskningen senkes gradvis
06Kjenn igjen reward hacking i et scenario og foreslå et bedre belønningsdesign
0 av 21 aktiviteter
Kjerneidé
En Q-tabell er som en notatbok med én linje per situasjon: den husker nøyaktig det agenten har opplevd, men vet ingenting om situasjoner den aldri har vært i. DQN bytter notatboka mot et nevralt nettverk som regner ut Q-verdier fra tilstanden, omtrent som en erfaren sjåfør som aldri har kjørt akkurat denne veien, men som vet hvordan en våt kurve oppfører seg. Prisen er at alt henger sammen, så DQN trenger to grep for å holde treningen stabil: et minne den trekker tilfeldig fra, og et mål som holdes i ro.
Steg 1 av 7
Fra Q-tabell til Q-nettverk
Konsept
Q-learning fra kapittel 14 lagrer én verdi per tilstand–handling-par. Det fungerer så lenge tilstandsrommet er lite og diskret, men det bryter sammen av to grunner. Den første er størrelse: hver ny tilstandsvariabel multipliserer antall celler, og med et kamerabilde som tilstand finnes det langt flere mulige bilder enn atomer i universet. Den andre er verre: en tabell generaliserer ikke. En celle som aldri blir besøkt, får aldri en oppdatering, og to tilstander som er nesten like, deler ingenting. Agenten må lære hver situasjon på nytt, selv om den har sett tusen lignende.
Løsningen er funksjonsapproksimasjon: i stedet for å slå opp Q(s,a) i en tabell regner vi den ut med en funksjon Q(s,a;θ) med parametre θ. Funksjonen ser på features i tilstanden, så tilstander som ligner, får lignende verdier, også tilstander den aldri har sett. Antall parametre er fast og mye mindre enn antall tilstander.
I praksis er funksjonen et Q-nettverk. Tilstanden går inn som en vektor eller et bilde, og utgangslaget har ett nevron per handling. Ett forward pass gir dermed alle Q-verdiene for tilstanden, og grådig valg er bare argmax over utgangene. Utgangene er forventet avkastning, ikke sannsynligheter, så det er ingen softmax på slutten. Q-learning med et slikt nettverk og to stabiliseringsgrep som kommer senere i kapitlet, kalles DQN (Deep Q-Network).
Tilstanden må fortsatt være Markov. Ett stillbilde fra et spill viser ikke om ballen er på vei opp eller ned, så DQN-agenter for spill får gjerne de siste fire bildene stablet som input.
Figur 15.1Q-nettverk: én Q-verdi per handling, størst for venstre
Playground
Hvor mye av en Q-tabell blir noen gang besøkt?
Prøv:Dra bins og dims opp og se «besøkt minst én gang» falle mot 0 %, så «aldri besøkt» dekker nesten hele tabellen.
Pythonkap15-tabelldekning.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
importnumpyasnprng = np.random.default_rng(15)
# intervaller per tilstandsvariabel, og antall variabler (f.eks. posisjon, fart, vinkel, vinkelfart)bins = 10# @param 2..30dims = 4# @param 1..6besok = 5000# tilstander agenten har opplevd under trening# Agenten havner oftest nær midten av tilstandsrommetX = np.clip(rng.normal(0.5, 0.15, size=(besok, dims)), 0, 0.999)
sett = {tuple(c) forcinnp.floor(X * bins).astype(int)}
totalt = bins ** dimsprint(f"celler i tabellen: {totalt}")
print(f"besøkt minst én gang: {len(sett)} ({100 * len(sett) / totalt:.1f} %)")
print(f"aldri besøkt, Q-verdien oppdateres aldri: {totalt - len(sett)}")
Ctrl/Cmd + Enter kjører
RegneeksempelHvor mange Q-verdier må en tabell lagre for en lagerrobot på et 30 × 30-rutenett med 4 retninger, 3 batterinivåer og 4 handlinger?Vis løsningSkjul løsning
Steg 1. Tilstandene er alle kombinasjoner av variablene: 30⋅30⋅4⋅3=10800.
Steg 2. Tabellen har én Q-verdi per tilstand og handling: 10800⋅4=43200 celler.
Steg 3. Legger vi til én variabel til, for eksempel om roboten bærer en pakke (2 verdier), dobles tabellen til 86400 celler. Hver ny variabel multipliserer størrelsen.
Steg 4. Bytter vi rutenettet med et gråtonebilde på 84×84 piksler med 256 nivåer, finnes det 2567056 mulige tilstander. Ingen tabell kan lagre det, og agenten ser nesten aldri samme bilde to ganger. Et Q-nettverk med noen hundre tusen vekter gir likevel en verdi for hvert bilde.
Øving 1 av 3Flervalg
Hvorfor erstatter DQN Q-tabellen med et nevralt nettverk?
Øving 2 av 3Flervalg
Et DQN styrer en agent med 4 mulige handlinger og tar tilstanden som input. Hva er vanligvis outputen fra nettet?
Øving 3 av 3Tallsvar
En agent styrer en varmepumpe. Tilstanden består av innetemperatur i hele grader fra 15 til 26 (12 verdier), utetemperatur i 8 intervaller, klokketime (24 verdier) og om noen er hjemme (2 verdier). Agenten kan velge mellom 5 effekttrinn. Hvor mange Q-verdier må en Q-tabell lagre?
Steg 2 av 7
Vektdeling: én oppdatering flytter mange verdier
Konsept
I en tabell er hver celle uavhengig: oppdaterer du Q(s,a), står alle andre celler stille. I et Q-nettverk regnes alle Q-verdiene ut med de samme vektene θ. Det kalles vektdeling, og det er både styrken og svakheten til DQN.
Ett gradientsteg på én overgang endrer θ, og dermed endres Q-verdiene for alle tilstander som deler features med den vi trente på. Med tapet 21(y−Qθ(s,a))2 er steget
θ←θ+η(y−Qθ(s,a))∇θQθ(s,a)
Styrken er generalisering. Lærer agenten at det lønner seg å bremse foran én våt kurve, flytter den samme oppdateringen verdiene for andre våte kurver også. Med langt færre parametre enn tilstander er det den eneste måten å lære noe om tilstander som aldri er besøkt.
Svakheten er at oppdateringen ikke spør om lov. Tilstander som ligner i input, men som burde ha helt forskjellig verdi, blir dratt med. Trener nettet lenge på en smal del av tilstandsrommet, kan det skrive over det det lærte et annet sted, såkalt katastrofal glemsel. Og fordi Q-learning lager målene sine fra egne estimater, flytter en vektendring også målene. Kombinasjonen av funksjonsapproksimasjon, mål fra egne estimater og off-policy-læring er kjent for å kunne gi ustabil og til og med divergerende trening. DQN fjerner ikke problemet, men demper det med grepene i de neste stegene.
Playground
Ett gradientsteg flytter mange Q-verdier
Prøv:Dra bredde ned mot 0,005 og se «Q etter steg» flytte færre tilstander og kurven smalne; flytt s_trent og se hvilke naboer som følger med.
Pythonkap15-vektdeling.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
importnumpyasnpimportmatplotlib.pyplotaspltsentre = np.linspace(0, 1, 5) # fem features deles av alle tilstander# hvor langt hver feature «rekker», og tilstanden vi trener påbredde = 0.05# @param 0.005..0.3 0.005s_trent = 0.30# @param 0..1 0.05y, eta = 1.0, 0.5# mål for den trente tilstanden og læringsratedeffeatures(s):
s = np.asarray(s)[..., None]
returnnp.exp(-((s - sentre) ** 2) / bredde)
w = np.zeros(5) # vektene til Q(s, fram); alle Q starter på 0defQ(s):
returnfeatures(s) @ ws_alle = np.linspace(0, 1, 101)
for_steg = Q(s_alle) # Q før steget: alt er 0w += eta * (y - Q(s_trent)) * features(s_trent) # ett gradientsteg på ett eksempeltilstander = [0.0, 0.25, 0.30, 0.35, 0.60, 0.90, 1.0]
print("s: " + " ".join(f"{s:5.2f}"forsintilstander))
print("Q etter steg:" + " ".join(f"{Q(s):5.2f}"forsintilstander))
plt.figure()
plt.plot(s_alle, Q(s_alle), label="Q etter steget")
plt.plot(s_alle, for_steg, color="C1", label="Q før steget")
plt.axvline(s_trent, linestyle="--", label="trent tilstand")
plt.xlabel("Tilstand s")
plt.ylabel("Q(s, fram)")
plt.legend()
plt.tight_layout()
plt.show()
Ctrl/Cmd + Enter kjører
RegneeksempelEn lineær Q-funksjon Q(s)=w0+w1s har w0=0,5 og w1=1,0. Vi tar ett steg med η=0,1 på tilstanden s=2 med mål y=4. Hvor mye endres Q(2) og Q(5)?Vis løsningSkjul løsning
Steg 1. Prediksjonen er Q(2)=0,5+1,0⋅2=2,5, så TD-feilen er δ=4−2,5=1,5.
Steg 2. Gradienten av Q med hensyn på vektene er featurene (1,s)=(1,2).
Steg 3. Oppdateringen gir w0=0,5+0,1⋅1,5⋅1=0,65 og w1=1,0+0,1⋅1,5⋅2=1,3.
Steg 4. Nå er Q(2)=0,65+1,3⋅2=3,25, en økning på 0,75. Men Q(5) gikk fra 0,5+5=5,5 til 0,65+6,5=7,15, en økning på 1,65.
Konklusjon. Tilstanden vi aldri trente på, flyttet seg mer enn den vi trente på. I en tabell ville Q(5) stått helt stille.
Øving 1 av 2Flervalg
I et DQN gjøres ett gradientsteg for ett enkelt par (s,a). Hvorfor kan Q-verdiene til mange andre tilstander også endre seg?
Øving 2 av 2Tallsvar
En lineær Q-funksjon Q(s)=w0+w1s har w0=1 og w1=2. Vi tar ett gradientsteg med regelen w←w+η(y−Q(s))(1,s) og læringsrate η=0,1 på tilstanden s=1 med mål y=5. Hva blir Q(3) etter steget? Oppgi svaret med én desimal.
Steg 3 av 7
DQN-målet og tapet
Konsept
I kapittel 14 flyttet Q-learning én tabellcelle en andel α mot målet r+γmaxa′Q(s′,a′). Et nettverk har ingen celle å flytte. DQN gjør derfor hver overgang om til et lite regresjonsproblem: målet blir en fasit y, og nettet trenes med gradient descent til å treffe den. Målet er ƒDQN-målet, og tapet over en minibatch B er ƒDQN-tapet:
y=r+γ(1−d)a′maxQθ−(s′,a′)
L(θ)=∣B∣1i∈B∑(yi−Qθ(si,ai))2
Tre detaljer er verdt å feste. For det første tar målet maksimum over handlingene i neste tilstand, ikke gjennomsnittet og ikke handlingen agenten faktisk tok etterpå. Det er det som gjør metoden off-policy. For det andre er d et ferdig-flagg: når episoden slutter i s′, finnes det ingen fortsettelse, og målet er bare r. Glemmer du (1−d), tror agenten at det finnes verdi etter at spillet er over. For det tredje behandles y som en konstant fasit. Gradienten går bare gjennom Qθ(si,ai), og bare utgangen for handlingen som faktisk ble tatt, får feil fra denne overgangen. De andre utgangene endres bare indirekte, gjennom vektdelingen.
Playground
Vektene θ− i målet tilhører target-nettverket, som kommer om to steg. Foreløpig holder det å vite at det er en kopi av Q-nettverket.
DQN-mål og tap for en minibatch
Prøv:Sett bruk_ferdig til 0 og se «mål y» for «overgang 1» (terminal) blåses opp; dra gamma til 0 og se målene bli bare r.
Pythonkap15-dqn-maal.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
importnumpyasnpgamma = 0.9# @param 0..1 0.05bruk_ferdig = 1# @param 0..1r = np.array([0.0, 1.0, -1.0, 0.5]) # minibatch med fire overgangerer_slutt = np.array([0, 1, 0, 0]) # 1 = episoden sluttet i s'ferdig = er_slutt * bruk_ferdig# 0 = vi glemmer å gjenkjenne sluttenq_target_neste = np.array([[1.0, 2.0], # target-nettets Q(s', ·)
[4.0, 3.0],
[0.5, -0.5],
[3.0, 3.5]])
q_online = np.array([1.5, 2.0, 0.0, 3.0]) # online-nettets Q(s, a)y = r + gamma * (1 - ferdig) * q_target_neste.max(axis=1)
feil = y - q_onlineforiinrange(4):
status = "terminal"ifer_slutt[i] else"ikke terminal"print(f"overgang {i} ({status}): r = {r[i]:4.1f} -> mål y = {y[i]:5.2f}, TD-feil = {feil[i]:5.2f}")
print(f"MSE-tap: {np.mean(feil ** 2):.4f}")
Ctrl/Cmd + Enter kjører
RegneeksempelRegn ut DQN-målene og MSE-tapet for tre overganger med γ=0,9.Vis løsningSkjul løsning
•Overgang 1: r=0, ikke terminal, Qθ−(s′,⋅)=(1,0;2,0) og Qθ(s,a)=1,5.
•Overgang 2: r=1, terminal, Qθ−(s′,⋅)=(4,0;3,0) og Qθ(s,a)=2,0.
•Overgang 3: r=−1, ikke terminal, Qθ−(s′,⋅)=(0,5;−0,5) og Qθ(s,a)=0.
Steg 1 — mål.y1=0+0,9⋅2,0=1,8. y2=1, fordi d=1 og verdiene i s′ ikke brukes. y3=−1+0,9⋅0,5=−0,55.
Steg 2 — TD-feil.1,8−1,5=0,3, 1−2=−1 og −0,55−0=−0,55.
Steg 3 — tap.L=30,09+1+0,3025=31,3925≈0,464.
Kontroll. De tre første målene i koden over er de samme.
Øving 1 av 3Flervalg
En overgang gir belønning r=1, og target-nettet gir Q-verdiene (2,5,3) for de tre handlingene i neste tilstand. Med γ=0,9, hva er DQN-målet y?
Øving 2 av 3Flervalg
Online-nettet gir Q(s,a)=6. Overgangen har r=2 og γ=0,5, og target-nettets beste verdi i neste tilstand er 4. Hva er det kvadrerte TD-tapet (y−Q(s,a))2?
Øving 3 av 3Kode · Python
DQN-mål og tap
I DQN regnes målet for en overgang (s,a,r,s′) ut med et eget target-nettverk, som holdes fast mellom synkroniseringene:
y=r+γ(1−d)maxa′Qtarget(s′,a′)
der d=1 betyr at episoden sluttet i s′. Tapet for en minibatch er gjennomsnittlig kvadratfeil mellom målene og nettverket som trenes, n1∑i(yi−Q(si,ai))2.
Signatur:dqn_mal(r, ferdig, q_mal_neste, gamma) returnerer målet y for én overgang, og dqn_tap(mal, q_pred) returnerer tapet for minibatchen.
Inndata: første linje er γ og andre linje antall overganger n. Så følger n linjer med r, ferdig-flagget og target-nettets Q-verdier for s′, og til slutt én linje med Q(si,ai) fra nettverket som trenes.
Utdata: målene på første linje og tapet på andre, med fire desimaler. Koden under den låste linjen leser inndata og skriver utdata, så du fyller bare inn funksjonene.
Eksempel
Inndata:
0.9
1
1 0 2 5
5
Utdata:
5.5000
0.2500
Utregning: Overgangen har γ=0,9, r=1, er ikke terminal og har Qtarget(s′,⋅)=(2,5). Det gir y=1+0,9⋅5=5,5. Med Q(s,a)=5 blir tapet (5,5−5)2=0,25.
Pythonlosning.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
"""DQN-mål med target-nettverk og terminalflagg, og MSE-tapet for en minibatch."""defdqn_mal(r, ferdig, q_mal_neste, gamma):
# TODO: y = r for terminale overganger, ellers r + gamma * max av q_mal_nestereturn0.0defdqn_tap(mal, q_pred):
# TODO: gjennomsnittlig kvadratfeil mellom målene og Q(s, a)return0.0# --- ikke endre under denne linjen ---deffmt(v, d=4):
s = f"{v:.{d}f}"returns[1:] ifs.startswith("-") andfloat(s) == 0elsesgamma = float(input())
n = int(input())
mal = []
for_inrange(n):
deler = input().split()
r, ferdig = float(deler[0]), deler[1] == "1"q_mal_neste = [float(t) fortindeler[2:]]
mal.append(dqn_mal(r, ferdig, q_mal_neste, gamma))
q_pred = [float(t) fortininput().split()]
print(" ".join(fmt(y) foryinmal))
print(fmt(dqn_tap(mal, q_pred)))
Testtilfeller3 tester kjøres ved «Sjekk»
Steg 4 av 7
Replay buffer: tilfeldige minibatcher
Konsept
En agent opplever verden som en film, ikke som en stokket kortstokk. Steg t og steg t+1 ligner nesten alltid hverandre: samme rom, samme fart, samme situasjon. Trener nettet på overgangene i den rekkefølgen de kommer, blir gradientstegene korrelerte. Det er som å øve til eksamen ved å regne 500 like oppgaver om ett tema og så 500 om et annet: nettet tilpasser seg det siste det har sett og glemmer resten, og vektdelingen gjør det verre. I tillegg brukes hver erfaring bare én gang før den kastes, selv om erfaring kan være dyr å samle.
En replay buffer løser begge problemene. Hver overgang (s,a,r,s′,d) legges i et minne med fast kapasitet N. Når minnet er fullt, skrives den eldste overgangen over, ofte som en ringbuffer med en skrivepeker som går rundt: pos←(pos+1)modN. I hvert treningssteg trekkes en tilfeldig minibatch, for eksempel med random.sample(buffer, 32), som trekker uten tilbakelegging.
Interaktiv figur
Det gir to gevinster. Minibatchen blander overganger fra ulike episoder og tidspunkter, så eksemplene blir tilnærmet uavhengige, slik veiledet læring forutsetter. Og hver overgang kan brukes i mange oppdateringer. At overgangene ble samlet inn av eldre versjoner av policyen, er ikke noe problem, fordi målet i Q-learning bruker max og ikke avhenger av hvem som valgte handlingen.
Prøv:Gå gjennom ett steg i fem trinn, og slå så replay på og se i trinn 3 at minibatchen trekkes fra hele bufferet i stedet for de siste overgangene.
Laster interaktiv figur …
Figur 15.2DQN-løkka med og uten replay buffer. Hvert miljøsteg lagres i bufferet, og minibatchen hentes derfra; uten replay er den de fire siste overgangene.
Interaktiv
Playground
Ringbuffer, random.sample og DQN-mål
Prøv:Dra KAPASITET ned og se hvilke steg som er borte fra «steg i bufferet»; sett tilfeldig til 0 og se «minibatch» bli tre påfølgende steg.
Pythonkap15-replay.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
importrandomrandom.seed(4)
KAPASITET = 6# @param 3..9tilfeldig = 1# @param 0..1GAMMA = 0.9buffer, pos = [], 0deflegg_til(overgang):
globalposiflen(buffer) < KAPASITET:
buffer.append(overgang)
else:
buffer[pos] = overgang# skriv over den eldstepos = (pos + 1) % KAPASITET# Overgang: (steg, r, ferdig, target-nettets Q(s', ·))fortinrange(9):
ferdig = t % 4 == 3# episoden slutter hvert fjerde steglegg_til((t, 1.0ifferdigelse0.0, ferdig, [0.1 * t, 0.2 * t]))
print(f"steg i bufferet: {[o[0] for o in buffer]}")
batch = random.sample(buffer, 3) iftilfeldigelsebuffer[-3:] # minibatch på treprint("minibatch:")
fort, r, ferdig, q_nesteinbatch:
y = rifferdigelser + GAMMA * max(q_neste)
status = "terminal"ifferdigelse"ikke terminal"print(f" steg {t} ({status}): r = {r}, mål y = {y:.2f}")
Ctrl/Cmd + Enter kjører
Øving 1 av 2Flervalg
Hvorfor lagrer DQN overganger (s,a,r,s′) i en replay buffer og trener på tilfeldige minibatcher fra den?
Øving 2 av 2Kode · Python
Replay buffer som ringbuffer
DQN lagrer overganger i en replay buffer med fast kapasitet og trekker minibatcher fra den. Når bufferet er fullt, overskrives den eldste overgangen. Bufferet har lista lagret og skrivepekeren pos, som starter på 0. Et nytt element legges til på slutten så lenge bufferet ikke er fullt, og skriver ellers over plass pos. Deretter flyttes pekeren til (pos+1)modkapasitet.
Signatur: klassen ReplayBuffer(kapasitet) med metodene legg_til(overgang), eldst_til_nyest(), som returnerer elementene fra eldst til nyest, og __len__(), som gir antall lagrede elementer.
Inndata: kapasiteten på første linje og elementene som legges til, i rekkefølge, på andre.
Utdata: innholdet i lagret i plassrekkefølge, elementene fra eldst til nyest og antallet, på hver sin linje. Koden under den låste linjen leser inndata og skriver utdata, så du fyller bare inn klassen.
Eksempel
Inndata:
3
a b c d
Utdata:
d b c
b c d
3
Utregning: Etter a b c er bufferet fullt og pekeren tilbake på plass 0, så d skriver over a. Plassene er da d b c, det eldste elementet ligger på plassen pekeren nå peker på (plass 1), og rekkefølgen fra eldst til nyest er b c d.
Pythonlosning.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
"""Replay buffer med fast kapasitet som overskriver den eldste overgangen."""classReplayBuffer:
def__init__(self, kapasitet):
self.kapasitet = kapasitetself.lagret = [] # plassene i bufferet, i plassrekkefølgeself.pos = 0# plassen som skrives neste gang bufferet er fulltdeflegg_til(self, overgang):
# TODO: fyll opp til kapasiteten, og skriv deretter over plass pospassdefeldst_til_nyest(self):
# TODO: returner elementene fra eldst til nyestreturn []
def__len__(self):
# TODO: antall lagrede elementerreturn0# --- ikke endre under denne linjen ---kapasitet = int(input())
elementer = input().split()
buffer = ReplayBuffer(kapasitet)
foreinelementer:
buffer.legg_til(e)
print(" ".join(buffer.lagret))
print(" ".join(buffer.eldst_til_nyest()))
print(len(buffer))
Testtilfeller4 tester kjøres ved «Sjekk»
Steg 5 av 7
Target-nettverk: et mål som står stille
Konsept
Uten noe ekstra ville DQN regnet målet med de samme vektene som trenes: y=r+γmaxa′Qθ(s′,a′). Da er fasitsvaret selv en output fra nettet. Neste tilstand s′ ligner som regel s, så når et gradientsteg dytter Qθ(s,a) opp, dytter vektdelingen Qθ(s′,⋅) opp også, og målet følger etter. Det er som å rette sin egen prøve mot en fasit man skriver om hver gang man endrer et svar: en del av hver forbedring forsvinner fordi fasiten flyttet seg. Regneeksempelet lenger ned viser hvor stor del av steget som går tapt, og hva som skjer når målet flytter seg mer enn prediksjonen.
Et target-nettverk holder fasiten i ro. Vi lagrer en kopi θ− av vektene og regner alle mål med den. Kopien trenes ikke, men oppdateres ved at vi kopierer vektene fra online-nettet med jevne mellomrom, ƒsynkronisering av target-nettet. Mellom to synkroniseringer er treningen vanlig regresjon mot faste fasitsvar. Etter en synkronisering får nettet et nytt og bedre regresjonsproblem.
Intervallet C er en avveining. Er C veldig lite, flytter målene seg nesten like mye som uten target-nett. Er C veldig stort, bygger målene på gammel kunnskap, og læringen går tregt. Typiske verdier er fra noen hundre til noen titusen steg. En variant er myk oppdatering, der θ− flyttes en liten andel τ mot θ i hvert steg.
Interaktiv figur
Hold rollene fra hverandre. Online-nettet velger handlinger med ε-greedy og er det som trenes. Target-nettet gjør bare én ting: det regner ut maxa′Qθ−(s′,a′) i målet.
Prøv:Gå gjennom trinn 4 med target-nettet av, slå det så på og se at målet y står stille mellom synkene hvert 8. steg.
Laster interaktiv figur …
Figur 15.3DQN-løkka med og uten target-nett. Grafen viser målet y for én fast overgang: uten target-nett flytter det seg hvert steg, med target-nett bare ved synk.
Interaktiv
RegneeksempelOvergangen har r=1 og γ=0,9. Online-nettet gir Qθ(s,a)=5,0 og maxa′Qθ(s′,a′)=5,0. Etter ett gradientsteg er Qθ(s,a)=5,3, og fordi s′ ligner s, har maxa′Qθ(s′,a′) steget til 5,25. Hvor langt unna målet er vi etter steget, uten og med target-nett?Vis løsningSkjul løsning
Steg 1 — før steget.y=1+0,9⋅5,0=5,5, og feilen er 5,5−5,0=0,5.
Steg 2 — uten target-nett. Målet regnes med de nye vektene: y=1+0,9⋅5,25=5,725. Feilen er 5,725−5,3=0,425. Prediksjonen steg 0,3, men målet flyttet seg 0,225 samme vei, så vi kom bare 0,075 nærmere.
Steg 3 — med target-nett.θ− er frosset, så målet er fortsatt 5,5, og feilen er 5,5−5,3=0,2. Hele steget teller.
Konklusjon. Flytter målet seg mer enn prediksjonen, kan feilen til og med vokse. Det frosne målet gjør hvert gradientsteg til reell framgang.
Øving 1 av 2Flervalg
Hva er hensikten med target-nettverket i DQN?
Øving 2 av 2Tallsvar
En overgang har r=−1 og γ=0,95, og neste tilstand er ikke terminal. Online-nettet gir Qθ(s′,⋅)=(4,0;6,5;5,0), mens target-nettet gir Qθ−(s′,⋅)=(3,0;4,0;5,5). Hva er DQN-målet y? Oppgi svaret med tre desimaler.
Steg 6 av 7
Utforskning og reward hacking
Konsept
Et nytt Q-nettverk har tilfeldige vekter, så Q-verdiene i starten er meningsløse. Velger agenten grådig fra første steg, låser den seg til tilfeldige vaner, og replay bufferet fylles med bare dem. Derfor starter ε i ε-greedy gjerne på 1, altså rent tilfeldige handlinger, og senkes gradvis mot en liten minsteverdi som 0,05. Det kalles ε-annealing, og den enkleste varianten er lineær, ƒlineær ε-annealing. En liten ε beholdes hele tiden, fordi noen tilstander fortsatt er dårlig kjent. Når agenten evalueres, brukes en grådig eller nesten grådig policy.
Regneeksempelε senkes lineært fra 1,0 til 0,1 over 10 000 steg. Hva er ε etter 2 500 og etter 15 000 steg, og hvor sannsynlig er den grådige handlingen etter 2 500 steg når agenten har 3 handlinger?Vis løsningSkjul løsning
Steg 2. Etter 15 000 steg gir uttrykket inne i formelen 1,0−0,9⋅1,5=−0,35, men max holder ε på εmin=0,1.
Steg 3. Den grådige handlingen velges enten bevisst, med sannsynlighet 1−ε, eller ved et tilfeldig trekk, med sannsynlighet ε/3: 0,225+0,775/3≈0,483.
Konsept
Det andre som avgjør hva agenten lærer, er belønningen. Agenten optimerer tallet vi gir den, ikke intensjonen vår. Finner den en billigere vei til høy belønning enn den vi hadde i tankene, tar den den. Det kalles reward hacking eller specification gaming: agenten finner et smutthull i måten vi har formulert belønningen på. Jo sterkere optimeringen er, jo større er sjansen, og DQN finner strategier mennesker ikke har tenkt på. Noen eksempler:
•En lagerrobot får belønning per strekkodeskanning og lærer å skanne den samme pakken om og om igjen.
•En agent i et bilspill får poeng for hver sjekkpost den passerer, og kjører i ring rundt én sjekkpost i stedet for å fullføre løpet.
•En kundeservice-bot belønnes for korte samtaler og lærer å avslutte chatten før problemet er løst.
•En simulert robot belønnes for fart framover og finner en feil i fysikkmotoren som lar den skli av gårde på ryggen.
Playground
Tiltakene er å belønne det faktiske målet i stedet for en proxy, legge inn straff og begrensninger for uønsket atferd, teste i varierte miljøer og se på hva agenten faktisk gjør. En belønningskurve som stiger, beviser ingenting: den ser akkurat slik ut når agenten hacker belønningen.
Reward hacking hos en lagerrobot
Prøv:Dra r_gjentatt ned fra 1 og finn verdien der «en belønningsmaksimerende agent velger» ikke lenger er «skann samme igjen».
Pythonkap15-proxy-belonning.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
T = 120# tidssteg i ett skiftr_gjentatt = 1.0# @param -0.5..1 0.05defbelonning(ny_pakke):
return1.0ifny_pakkeelser_gjentatt# dagens design: +1 for hver skanningdefskift(strategi):
t, sum_r, sett, pakke = 0, 0.0, set(), 0whilet < T:
ifstrategi == "hent ny pakke":
pakke += 1# hente og skanne en ny pakke tar 4 stegt += 4else:
t += 1# skanne samme pakke igjen tar 1 stegsum_r += belonning(pakkenotinsett)
sett.add(pakke)
returnsum_r, len(sett)
resultater = {s: skift(s) forsin ["hent ny pakke", "skann samme igjen"]}
fors, (sum_r, ulike) inresultater.items():
print(f"{s:18s} belønning = {sum_r:6.1f} ulike pakker = {ulike}")
print("en belønningsmaksimerende agent velger:", max(resultater, key=lambdas: resultater[s][0]))
Ctrl/Cmd + Enter kjører
Øving 1 av 3Flervalg
I mange DQN-oppsett starter ε i ε-greedy på 1 og senkes gradvis til rundt 0,05. Hvorfor?
Øving 2 av 3Flervalg
En matteapp for barneskolen lar en agent velge neste oppgave til eleven, og agenten får belønning for hvert riktige svar. Etter trening gir den nesten bare oppgaver eleven allerede kan, som enkle plusstykker, og elevene lærer lite nytt. Hva illustrerer dette, og hva er et fornuftig tiltak?
Øving 3 av 3Tallsvar
Utforskningsraten ε senkes lineært fra 1,0 til 0,05 over 20000 steg. Agenten har 4 handlinger. Hva er sannsynligheten for at den velger den grådige handlingen etter 8000 steg? Oppgi svaret med tre desimaler.
Steg 7 av 7
Eksamensfokus
Slik spørres det
Spørsmålene om DQN faller gjerne i fire grupper. Regning: et mål y fra r, γ og Q-verdiene for neste tilstand, ofte med en terminal overgang eller med både online- og target-verdier oppgitt, og noen ganger et kvadrert TD-tap. Hensikt: hva replay buffer og target-nettverk løser hver for seg, ofte med distraktorer der de to er byttet om. Vektdeling: hvorfor ett gradientsteg endrer Q-verdiene til andre tilstander, og hvorfor det både er en styrke og en svakhet. Belønningsdesign: et kort scenario der agenten gjør noe absurd som likevel gir høy belønning, der du skal kjenne igjen reward hacking og foreslå et tiltak. Kodelesing kan handle om en replay buffer og tilfeldig utvalg av en minibatch, eller om hvor ferdig-flagget brukes i målet.
Vanlig felleOnline- eller target-nett i målet?
Målet y regnes med target-nettets vekter θ−, mens prediksjonen Qθ(s,a) kommer fra online-nettet. Får du oppgitt begge, er det maksimum av target-verdiene som brukes, også når online-nettet ville valgt en annen handling.
Vanlig felleReplay buffer er ikke target-nettverk
Replay buffer handler om hvilke data nettet trenes på: tilfeldige, gjenbrukte overganger. Target-nettverket handler om hvilke mål det trenes mot: frosne. Begge stabiliserer, men de løser forskjellige problemer, og et svaralternativ som bytter dem om, er feil.
Sjekk deg selvHva er målet y for en overgang der episoden slutter i s′?Vis svarSkjul svar
Bare belønningen: y=r. Ferdig-flagget d=1 nuller ut framtidsleddet, fordi det ikke finnes noen fortsettelse etter at episoden er over.
Sjekk deg selvHvorfor er det greit å trene på gamle overganger fra bufferet, selv om policyen har endret seg siden?Vis svarSkjul svar
Q-learning er off-policy. Målet bruker maxa′ over neste tilstand og avhenger ikke av hvilken policy som valgte handlingen i overgangen. En gammel overgang (s,a,r,s′) er fortsatt et gyldig eksempel på hva som skjer etter handling a i s.
Sjekk deg selvEn DQN-agent får stadig høyere belønning per episode, men oppførselen ser meningsløs ut når du ser på den. Hva bør du mistenke?Vis svarSkjul svar
Reward hacking: agenten har funnet en måte å samle belønning på som belønningsdesignet ikke forutså. Stigende belønning bekrefter bare at optimeringen virker, ikke at målet er riktig spesifisert. Se på episodene, og endre belønningen eller legg inn begrensninger.
Øving 1 av 1Flervalg
DQN-agenter for videospill får ofte de fire siste skjermbildene stablet som input i stedet for bare det siste. Hvorfor?
Mine notater
Skriv egne notater for dette kapittelet. De lagres automatisk og dukker opp i «Mine notater»-oversikten paa fag-siden.
Trinn 1 av 5 · HandlingSteg 1: agenten står i 0 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 1.Overgangen (s, a, r, s′) lagres på plass 1 i bufferet (1 av 12 plasser fylt).Bufferet har bare 1 av 4 overganger, så det blir ingen trening i dette steget.Uten minibatch er det ikke noe mål å regne ennå.Ingen minibatch, så ingen oppdatering. Target-nettet synkes om 4 steg.Steg 1: agenten står i 0 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 1. Overgangen (s, a, r, s′) lagres på plass 1 i bufferet (1 av 12 plasser fylt). ingen trening ennå. Target-nettet synkes om 4 steg.Steg 2: agenten står i 1 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2.Overgangen (s, a, r, s′) lagres på plass 2 i bufferet (2 av 12 plasser fylt).Bufferet har bare 2 av 4 overganger, så det blir ingen trening i dette steget.Uten minibatch er det ikke noe mål å regne ennå.Ingen minibatch, så ingen oppdatering. Target-nettet synkes om 3 steg.Steg 2: agenten står i 1 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2. Overgangen (s, a, r, s′) lagres på plass 2 i bufferet (2 av 12 plasser fylt). ingen trening ennå. Target-nettet synkes om 3 steg.Steg 3: agenten står i 2 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3.Overgangen (s, a, r, s′) lagres på plass 3 i bufferet (3 av 12 plasser fylt).Bufferet har bare 3 av 4 overganger, så det blir ingen trening i dette steget.Uten minibatch er det ikke noe mål å regne ennå.Ingen minibatch, så ingen oppdatering. Target-nettet synkes om 2 steg.Steg 3: agenten står i 2 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3. Overgangen (s, a, r, s′) lagres på plass 3 i bufferet (3 av 12 plasser fylt). ingen trening ennå. Target-nettet synkes om 2 steg.Steg 4: agenten står i 3 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2.Overgangen (s, a, r, s′) lagres på plass 4 i bufferet (4 av 12 plasser fylt).Uten replay tar vi de 4 siste overgangene (t = 1, 2, 3, 4). De følger rett etter hverandre og ligner på hverandre.For overgang t = 1 regner target-nettet (frosne vekter θ⁻) målet: y = 0 + 0,9 · 0,380 = 0,342. Online-nettet gir Q = 0,300.Tapet L = 0,0103 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,620 til 0,649. Target-nettet synkes om 1 steg.Steg 4: agenten står i 3 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2. Overgangen (s, a, r, s′) lagres på plass 4 i bufferet (4 av 12 plasser fylt). Minibatch og mål gir tap L = 0,0103 og ett oppdatert online-nett. Target-nettet synkes om 1 steg.Steg 5: agenten står i 2 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 1.Overgangen (s, a, r, s′) lagres på plass 5 i bufferet (5 av 12 plasser fylt).Uten replay tar vi de 4 siste overgangene (t = 2, 3, 4, 5). De følger rett etter hverandre og ligner på hverandre.For overgang t = 2 regner target-nettet (frosne vekter θ⁻) målet: y = 0 + 0,9 · 0,460 = 0,414. Online-nettet gir Q = 0,406.Tapet L = 0,0067 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,649 til 0,651. Target-nettet synkes nå: θ⁻ ← θ.Steg 5: agenten står i 2 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 1. Overgangen (s, a, r, s′) lagres på plass 5 i bufferet (5 av 12 plasser fylt). Minibatch og mål gir tap L = 0,0067 og ett oppdatert online-nett. Target-nettet synkes nå: θ⁻ ← θ.Steg 6: agenten står i 1 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2.Overgangen (s, a, r, s′) lagres på plass 6 i bufferet (6 av 12 plasser fylt).Uten replay tar vi de 4 siste overgangene (t = 3, 4, 5, 6). De følger rett etter hverandre og ligner på hverandre.For overgang t = 3 regner target-nettet (frosne vekter θ⁻) målet: y = 0 + 0,9 · 0,570 = 0,513. Online-nettet gir Q = 0,489.Tapet L = 0,0028 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,651 til 0,668. Target-nettet synkes om 4 steg.Steg 6: agenten står i 1 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2. Overgangen (s, a, r, s′) lagres på plass 6 i bufferet (6 av 12 plasser fylt). Minibatch og mål gir tap L = 0,0028 og ett oppdatert online-nett. Target-nettet synkes om 4 steg.Steg 7: agenten står i 2 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3.Overgangen (s, a, r, s′) lagres på plass 7 i bufferet (7 av 12 plasser fylt).Uten replay tar vi de 4 siste overgangene (t = 4, 5, 6, 7). De følger rett etter hverandre og ligner på hverandre.For overgang t = 4 regner target-nettet (frosne vekter θ⁻) målet: y = 0 + 0,9 · 0,489 = 0,440. Online-nettet gir Q = 0,406.Tapet L = 0,0005 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,668 til 0,676. Target-nettet synkes om 3 steg.Steg 7: agenten står i 2 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3. Overgangen (s, a, r, s′) lagres på plass 7 i bufferet (7 av 12 plasser fylt). Minibatch og mål gir tap L = 0,0005 og ett oppdatert online-nett. Target-nettet synkes om 3 steg.Steg 8: agenten står i 3 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2.Overgangen (s, a, r, s′) lagres på plass 8 i bufferet (8 av 12 plasser fylt).Uten replay tar vi de 4 siste overgangene (t = 5, 6, 7, 8). De følger rett etter hverandre og ligner på hverandre.For overgang t = 5 regner target-nettet (frosne vekter θ⁻) målet: y = 0 + 0,9 · 0,408 = 0,367. Online-nettet gir Q = 0,366.Tapet L = 0,0001 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,676 til 0,679. Target-nettet synkes om 2 steg.Steg 8: agenten står i 3 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2. Overgangen (s, a, r, s′) lagres på plass 8 i bufferet (8 av 12 plasser fylt). Minibatch og mål gir tap L = 0,0001 og ett oppdatert online-nett. Target-nettet synkes om 2 steg.Steg 9: agenten står i 2 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3.Overgangen (s, a, r, s′) lagres på plass 9 i bufferet (9 av 12 plasser fylt).Uten replay tar vi de 4 siste overgangene (t = 6, 7, 8, 9). De følger rett etter hverandre og ligner på hverandre.For overgang t = 6 regner target-nettet (frosne vekter θ⁻) målet: y = 0 + 0,9 · 0,489 = 0,440. Online-nettet gir Q = 0,433.Tapet L = 0,0000 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,679 til 0,680. Target-nettet synkes om 1 steg.Steg 9: agenten står i 2 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3. Overgangen (s, a, r, s′) lagres på plass 9 i bufferet (9 av 12 plasser fylt). Minibatch og mål gir tap L = 0,0000 og ett oppdatert online-nett. Target-nettet synkes om 1 steg.Steg 10: agenten står i 3 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2.Overgangen (s, a, r, s′) lagres på plass 10 i bufferet (10 av 12 plasser fylt).Uten replay tar vi de 4 siste overgangene (t = 7, 8, 9, 10). De følger rett etter hverandre og ligner på hverandre.For overgang t = 7 regner target-nettet (frosne vekter θ⁻) målet: y = 0 + 0,9 · 0,570 = 0,513. Online-nettet gir Q = 0,516.Tapet L = 0,0000 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,680 til 0,678. Target-nettet synkes nå: θ⁻ ← θ.Steg 10: agenten står i 3 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2. Overgangen (s, a, r, s′) lagres på plass 10 i bufferet (10 av 12 plasser fylt). Minibatch og mål gir tap L = 0,0000 og ett oppdatert online-nett. Target-nettet synkes nå: θ⁻ ← θ.Steg 11: agenten står i 2 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3.Overgangen (s, a, r, s′) lagres på plass 11 i bufferet (11 av 12 plasser fylt).Uten replay tar vi de 4 siste overgangene (t = 8, 9, 10, 11). De følger rett etter hverandre og ligner på hverandre.For overgang t = 8 regner target-nettet (frosne vekter θ⁻) målet: y = 0 + 0,9 · 0,514 = 0,463. Online-nettet gir Q = 0,438.Tapet L = 0,0006 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,678 til 0,693. Target-nettet synkes om 4 steg.Steg 11: agenten står i 2 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3. Overgangen (s, a, r, s′) lagres på plass 11 i bufferet (11 av 12 plasser fylt). Minibatch og mål gir tap L = 0,0006 og ett oppdatert online-nett. Target-nettet synkes om 4 steg.Steg 12: agenten står i 3 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 4.Overgangen (s, a, r, s′) lagres på plass 12 i bufferet (12 av 12 plasser fylt).Uten replay tar vi de 4 siste overgangene (t = 9, 10, 11, 12). De følger rett etter hverandre og ligner på hverandre.For overgang t = 9 regner target-nettet (frosne vekter θ⁻) målet: y = 0 + 0,9 · 0,596 = 0,536. Online-nettet gir Q = 0,527.Tapet L = 0,0001 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,693 til 0,699. Target-nettet synkes om 3 steg.Steg 12: agenten står i 3 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 4. Overgangen (s, a, r, s′) lagres på plass 12 i bufferet (12 av 12 plasser fylt). Minibatch og mål gir tap L = 0,0001 og ett oppdatert online-nett. Target-nettet synkes om 3 steg.Steg 13: agenten står i 4 og går høyre. Miljøet svarer med belønning r = 1 og ny tilstand s′ = 5 (slutt, ny episode fra 0).Overgangen (s, a, r, s′) lagres på plass 1 i bufferet og overskriver den eldste (t = 1).Uten replay tar vi de 4 siste overgangene (t = 10, 11, 12, 13). De følger rett etter hverandre og ligner på hverandre.For overgang t = 10 regner target-nettet (frosne vekter θ⁻) målet: y = 0 + 0,9 · 0,514 = 0,463. Online-nettet gir Q = 0,457.Tapet L = 0,0226 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,699 til 0,822. Target-nettet synkes om 2 steg.Steg 13: agenten står i 4 og går høyre. Miljøet svarer med belønning r = 1 og ny tilstand s′ = 5 (slutt, ny episode fra 0). Overgangen (s, a, r, s′) lagres på plass 1 i bufferet og overskriver den eldste (t = 1). Minibatch og mål gir tap L = 0,0226 og ett oppdatert online-nett. Target-nettet synkes om 2 steg.Steg 14: agenten står i 0 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 1.Overgangen (s, a, r, s′) lagres på plass 2 i bufferet og overskriver den eldste (t = 2).Uten replay tar vi de 4 siste overgangene (t = 11, 12, 13, 14). De følger rett etter hverandre og ligner på hverandre.For overgang t = 11 regner target-nettet (frosne vekter θ⁻) målet: y = 0 + 0,9 · 0,596 = 0,536. Online-nettet gir Q = 0,631.Tapet L = 0,0142 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,822 til 0,808. Target-nettet synkes om 1 steg.Steg 14: agenten står i 0 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 1. Overgangen (s, a, r, s′) lagres på plass 2 i bufferet og overskriver den eldste (t = 2). Minibatch og mål gir tap L = 0,0142 og ett oppdatert online-nett. Target-nettet synkes om 1 steg.Steg 15: agenten står i 1 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2.Overgangen (s, a, r, s′) lagres på plass 3 i bufferet og overskriver den eldste (t = 3).Uten replay tar vi de 4 siste overgangene (t = 12, 13, 14, 15). De følger rett etter hverandre og ligner på hverandre.For overgang t = 12 regner target-nettet (frosne vekter θ⁻) målet: y = 0 + 0,9 · 0,678 = 0,610. Online-nettet gir Q = 0,711.Tapet L = 0,0127 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,808 til 0,826. Target-nettet synkes nå: θ⁻ ← θ.Steg 15: agenten står i 1 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2. Overgangen (s, a, r, s′) lagres på plass 3 i bufferet og overskriver den eldste (t = 3). Minibatch og mål gir tap L = 0,0127 og ett oppdatert online-nett. Target-nettet synkes nå: θ⁻ ← θ.Steg 16: agenten står i 2 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3.Overgangen (s, a, r, s′) lagres på plass 4 i bufferet og overskriver den eldste (t = 4).Uten replay tar vi de 4 siste overgangene (t = 13, 14, 15, 16). De følger rett etter hverandre og ligner på hverandre.For overgang t = 13 regner target-nettet (frosne vekter θ⁻) målet: y = 1 + 0,9 · 0,000 = 1,000. Online-nettet gir Q = 0,826.Tapet L = 0,0087 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,826 til 0,930. Target-nettet synkes om 4 steg.Steg 16: agenten står i 2 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3. Overgangen (s, a, r, s′) lagres på plass 4 i bufferet og overskriver den eldste (t = 4). Minibatch og mål gir tap L = 0,0087 og ett oppdatert online-nett. Target-nettet synkes om 4 steg.Steg 17: agenten står i 3 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 4.Overgangen (s, a, r, s′) lagres på plass 5 i bufferet og overskriver den eldste (t = 5).Uten replay tar vi de 4 siste overgangene (t = 14, 15, 16, 17). De følger rett etter hverandre og ligner på hverandre.For overgang t = 14 regner target-nettet (frosne vekter θ⁻) målet: y = 0 + 0,9 · 0,523 = 0,470. Online-nettet gir Q = 0,494.Tapet L = 0,0030 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,930 til 0,864. Target-nettet synkes om 3 steg.Steg 17: agenten står i 3 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 4. Overgangen (s, a, r, s′) lagres på plass 5 i bufferet og overskriver den eldste (t = 5). Minibatch og mål gir tap L = 0,0030 og ett oppdatert online-nett. Target-nettet synkes om 3 steg.Steg 18: agenten står i 4 og går høyre. Miljøet svarer med belønning r = 1 og ny tilstand s′ = 5 (slutt, ny episode fra 0).Overgangen (s, a, r, s′) lagres på plass 6 i bufferet og overskriver den eldste (t = 6).Uten replay tar vi de 4 siste overgangene (t = 15, 16, 17, 18). De følger rett etter hverandre og ligner på hverandre.For overgang t = 15 regner target-nettet (frosne vekter θ⁻) målet: y = 0 + 0,9 · 0,624 = 0,561. Online-nettet gir Q = 0,548.Tapet L = 0,0047 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,864 til 0,917. Target-nettet synkes om 2 steg.Steg 18: agenten står i 4 og går høyre. Miljøet svarer med belønning r = 1 og ny tilstand s′ = 5 (slutt, ny episode fra 0). Overgangen (s, a, r, s′) lagres på plass 6 i bufferet og overskriver den eldste (t = 6). Minibatch og mål gir tap L = 0,0047 og ett oppdatert online-nett. Target-nettet synkes om 2 steg.Steg 19: agenten står i 0 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 1.Overgangen (s, a, r, s′) lagres på plass 7 i bufferet og overskriver den eldste (t = 7).Uten replay tar vi de 4 siste overgangene (t = 16, 17, 18, 19). De følger rett etter hverandre og ligner på hverandre.For overgang t = 16 regner target-nettet (frosne vekter θ⁻) målet: y = 0 + 0,9 · 0,725 = 0,652. Online-nettet gir Q = 0,697.Tapet L = 0,0032 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,917 til 0,911. Target-nettet synkes om 1 steg.Steg 19: agenten står i 0 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 1. Overgangen (s, a, r, s′) lagres på plass 7 i bufferet og overskriver den eldste (t = 7). Minibatch og mål gir tap L = 0,0032 og ett oppdatert online-nett. Target-nettet synkes om 1 steg.Steg 20: agenten står i 1 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 0.Overgangen (s, a, r, s′) lagres på plass 8 i bufferet og overskriver den eldste (t = 8).Uten replay tar vi de 4 siste overgangene (t = 17, 18, 19, 20). De følger rett etter hverandre og ligner på hverandre.For overgang t = 17 regner target-nettet (frosne vekter θ⁻) målet: y = 0 + 0,9 · 0,826 = 0,743. Online-nettet gir Q = 0,801.Tapet L = 0,0032 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,911 til 0,927. Target-nettet synkes nå: θ⁻ ← θ.Steg 20: agenten står i 1 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 0. Overgangen (s, a, r, s′) lagres på plass 8 i bufferet og overskriver den eldste (t = 8). Minibatch og mål gir tap L = 0,0032 og ett oppdatert online-nett. Target-nettet synkes nå: θ⁻ ← θ.Steg 21: agenten står i 0 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 1.Overgangen (s, a, r, s′) lagres på plass 9 i bufferet og overskriver den eldste (t = 9).Uten replay tar vi de 4 siste overgangene (t = 18, 19, 20, 21). De følger rett etter hverandre og ligner på hverandre.For overgang t = 18 regner target-nettet (frosne vekter θ⁻) målet: y = 1 + 0,9 · 0,000 = 1,000. Online-nettet gir Q = 0,927.Tapet L = 0,0043 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,927 til 0,984. Target-nettet synkes om 4 steg.Steg 21: agenten står i 0 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 1. Overgangen (s, a, r, s′) lagres på plass 9 i bufferet og overskriver den eldste (t = 9). Minibatch og mål gir tap L = 0,0043 og ett oppdatert online-nett. Target-nettet synkes om 4 steg.Steg 22: agenten står i 1 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2.Overgangen (s, a, r, s′) lagres på plass 10 i bufferet og overskriver den eldste (t = 10).Uten replay tar vi de 4 siste overgangene (t = 19, 20, 21, 22). De følger rett etter hverandre og ligner på hverandre.For overgang t = 19 regner target-nettet (frosne vekter θ⁻) målet: y = 0 + 0,9 · 0,589 = 0,530. Online-nettet gir Q = 0,522.Tapet L = 0,0009 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,984 til 0,986. Target-nettet synkes om 3 steg.Steg 22: agenten står i 1 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2. Overgangen (s, a, r, s′) lagres på plass 10 i bufferet og overskriver den eldste (t = 10). Minibatch og mål gir tap L = 0,0009 og ett oppdatert online-nett. Target-nettet synkes om 3 steg.Steg 23: agenten står i 2 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3.Overgangen (s, a, r, s′) lagres på plass 11 i bufferet og overskriver den eldste (t = 11).Uten replay tar vi de 4 siste overgangene (t = 20, 21, 22, 23). De følger rett etter hverandre og ligner på hverandre.For overgang t = 20 regner target-nettet (frosne vekter θ⁻) målet: y = 0 + 0,9 · 0,477 = 0,429. Online-nettet gir Q = 0,386.Tapet L = 0,0006 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,986 til 0,978. Target-nettet synkes om 2 steg.Steg 23: agenten står i 2 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3. Overgangen (s, a, r, s′) lagres på plass 11 i bufferet og overskriver den eldste (t = 11). Minibatch og mål gir tap L = 0,0006 og ett oppdatert online-nett. Target-nettet synkes om 2 steg.Steg 24: agenten står i 3 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 4.Overgangen (s, a, r, s′) lagres på plass 12 i bufferet og overskriver den eldste (t = 12).Uten replay tar vi de 4 siste overgangene (t = 21, 22, 23, 24). De følger rett etter hverandre og ligner på hverandre.For overgang t = 21 regner target-nettet (frosne vekter θ⁻) målet: y = 0 + 0,9 · 0,589 = 0,530. Online-nettet gir Q = 0,518.Tapet L = 0,0003 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,978 til 0,965. Target-nettet synkes om 1 steg.Steg 24: agenten står i 3 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 4. Overgangen (s, a, r, s′) lagres på plass 12 i bufferet og overskriver den eldste (t = 12). Minibatch og mål gir tap L = 0,0003 og ett oppdatert online-nett. Target-nettet synkes om 1 steg.Steg 25: agenten står i 4 og går høyre. Miljøet svarer med belønning r = 1 og ny tilstand s′ = 5 (slutt, ny episode fra 0).Overgangen (s, a, r, s′) lagres på plass 1 i bufferet og overskriver den eldste (t = 13).Uten replay tar vi de 4 siste overgangene (t = 22, 23, 24, 25). De følger rett etter hverandre og ligner på hverandre.For overgang t = 22 regner target-nettet (frosne vekter θ⁻) målet: y = 0 + 0,9 · 0,702 = 0,632. Online-nettet gir Q = 0,624.Tapet L = 0,0004 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,965 til 0,974. Target-nettet synkes nå: θ⁻ ← θ.Steg 25: agenten står i 4 og går høyre. Miljøet svarer med belønning r = 1 og ny tilstand s′ = 5 (slutt, ny episode fra 0). Overgangen (s, a, r, s′) lagres på plass 1 i bufferet og overskriver den eldste (t = 13). Minibatch og mål gir tap L = 0,0004 og ett oppdatert online-nett. Target-nettet synkes nå: θ⁻ ← θ.Steg 26: agenten står i 0 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 0.Overgangen (s, a, r, s′) lagres på plass 2 i bufferet og overskriver den eldste (t = 14).Uten replay tar vi de 4 siste overgangene (t = 23, 24, 25, 26). De følger rett etter hverandre og ligner på hverandre.For overgang t = 23 regner target-nettet (frosne vekter θ⁻) målet: y = 0 + 0,9 · 0,859 = 0,773. Online-nettet gir Q = 0,745.Tapet L = 0,0046 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,974 til 1,000. Target-nettet synkes om 4 steg.Steg 26: agenten står i 0 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 0. Overgangen (s, a, r, s′) lagres på plass 2 i bufferet og overskriver den eldste (t = 14). Minibatch og mål gir tap L = 0,0046 og ett oppdatert online-nett. Target-nettet synkes om 4 steg.Steg 27: agenten står i 0 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 1.Overgangen (s, a, r, s′) lagres på plass 3 i bufferet og overskriver den eldste (t = 15).Uten replay tar vi de 4 siste overgangene (t = 24, 25, 26, 27). De følger rett etter hverandre og ligner på hverandre.For overgang t = 24 regner target-nettet (frosne vekter θ⁻) målet: y = 0 + 0,9 · 0,974 = 0,877. Online-nettet gir Q = 0,884.Tapet L = 0,0026 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 1,000 til 1,006. Target-nettet synkes om 3 steg.Steg 27: agenten står i 0 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 1. Overgangen (s, a, r, s′) lagres på plass 3 i bufferet og overskriver den eldste (t = 15). Minibatch og mål gir tap L = 0,0026 og ett oppdatert online-nett. Target-nettet synkes om 3 steg.Steg 28: agenten står i 1 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2.Overgangen (s, a, r, s′) lagres på plass 4 i bufferet og overskriver den eldste (t = 16).Uten replay tar vi de 4 siste overgangene (t = 25, 26, 27, 28). De følger rett etter hverandre og ligner på hverandre.For overgang t = 25 regner target-nettet (frosne vekter θ⁻) målet: y = 1 + 0,9 · 0,000 = 1,000. Online-nettet gir Q = 1,006.Tapet L = 0,0016 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 1,006 til 1,014. Target-nettet synkes om 2 steg.Steg 28: agenten står i 1 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2. Overgangen (s, a, r, s′) lagres på plass 4 i bufferet og overskriver den eldste (t = 16). Minibatch og mål gir tap L = 0,0016 og ett oppdatert online-nett. Target-nettet synkes om 2 steg.Steg 29: agenten står i 2 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3.Overgangen (s, a, r, s′) lagres på plass 5 i bufferet og overskriver den eldste (t = 17).Uten replay tar vi de 4 siste overgangene (t = 26, 27, 28, 29). De følger rett etter hverandre og ligner på hverandre.For overgang t = 26 regner target-nettet (frosne vekter θ⁻) målet: y = 0 + 0,9 · 0,515 = 0,464. Online-nettet gir Q = 0,410.Tapet L = 0,0008 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 1,014 til 1,018. Target-nettet synkes om 1 steg.Steg 29: agenten står i 2 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3. Overgangen (s, a, r, s′) lagres på plass 5 i bufferet og overskriver den eldste (t = 17). Minibatch og mål gir tap L = 0,0008 og ett oppdatert online-nett. Target-nettet synkes om 1 steg.Steg 30: agenten står i 3 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 4.Overgangen (s, a, r, s′) lagres på plass 6 i bufferet og overskriver den eldste (t = 18).Uten replay tar vi de 4 siste overgangene (t = 27, 28, 29, 30). De følger rett etter hverandre og ligner på hverandre.For overgang t = 27 regner target-nettet (frosne vekter θ⁻) målet: y = 0 + 0,9 · 0,630 = 0,567. Online-nettet gir Q = 0,553.Tapet L = 0,0002 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 1,018 til 1,009. Target-nettet synkes nå: θ⁻ ← θ.Steg 30: agenten står i 3 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 4. Overgangen (s, a, r, s′) lagres på plass 6 i bufferet og overskriver den eldste (t = 18). Minibatch og mål gir tap L = 0,0002 og ett oppdatert online-nett. Target-nettet synkes nå: θ⁻ ← θ.Steg 8: agenten står i 3 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2.
Tap L0,0001Mål y0,586s = 3 → 4Påfølgende par100 %i minibatchene
Steg 8: s = 3, venstre, r = 0, s′ = 2. Minibatch = de 4 siste (påfølgende), tap 0,0001; target-nettet synkes om 2 steg. Mål for probe-overgangen: 0,586.
Vis utregning
1. Miljøs = 3, a = venstre, r = 0, s′ = 2
2. Bufferlagret på plass 8 (8 av 12 fylt)
3. Minibatchde 4 siste: 3 av 3 nabo-par er påfølgende steg, 3 av 4 er de samme som i forrige batch
4. Måly = r + 0,9 · max Q(s′, ·; θ⁻), bare r når s′ er terminal
5. TapL = 0,0001, ett SGD-steg med η = 0,5
6. Vektdelingθ deles av alle tilstander, så oppdateringen flyttet Q(4, venstre) 0,479 → 0,486 og Q(4, høyre) 0,676 → 0,679, selv om ingen overgang i batchen startet i 4
7. Targetfrosset, synkes om 2 steg
Minibatchen i steg 8: overgang, Q fra online-nettet, mål y og kvadrert feil.
t
s
a
r
s′
Q(s,a)
y
(y−Q)²
5
2
V
0
1
0,366
0,367
0,0000
6
1
H
0
2
0,430
0,440
0,0001
7
2
H
0
3
0,512
0,513
0,0000
8
3
V
0
2
0,423
0,440
0,0003
a: V = venstre, H = høyre; γ = 0,9.
Trinn 1 av 5 · HandlingSteg 1: agenten står i 0 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 1.Overgangen (s, a, r, s′) lagres på plass 1 i bufferet (1 av 16 plasser fylt).Bufferet har bare 1 av 4 overganger, så det blir ingen trening i dette steget.Uten minibatch er det ikke noe mål å regne ennå.Ingen minibatch, så ingen oppdatering. Uten target-nett finnes det ingen kopi å synke.Steg 1: agenten står i 0 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 1. Overgangen (s, a, r, s′) lagres på plass 1 i bufferet (1 av 16 plasser fylt). ingen trening ennå. Uten target-nett finnes det ingen kopi å synke.Steg 2: agenten står i 1 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2.Overgangen (s, a, r, s′) lagres på plass 2 i bufferet (2 av 16 plasser fylt).Bufferet har bare 2 av 4 overganger, så det blir ingen trening i dette steget.Uten minibatch er det ikke noe mål å regne ennå.Ingen minibatch, så ingen oppdatering. Uten target-nett finnes det ingen kopi å synke.Steg 2: agenten står i 1 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2. Overgangen (s, a, r, s′) lagres på plass 2 i bufferet (2 av 16 plasser fylt). ingen trening ennå. Uten target-nett finnes det ingen kopi å synke.Steg 3: agenten står i 2 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3.Overgangen (s, a, r, s′) lagres på plass 3 i bufferet (3 av 16 plasser fylt).Bufferet har bare 3 av 4 overganger, så det blir ingen trening i dette steget.Uten minibatch er det ikke noe mål å regne ennå.Ingen minibatch, så ingen oppdatering. Uten target-nett finnes det ingen kopi å synke.Steg 3: agenten står i 2 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3. Overgangen (s, a, r, s′) lagres på plass 3 i bufferet (3 av 16 plasser fylt). ingen trening ennå. Uten target-nett finnes det ingen kopi å synke.Steg 4: agenten står i 3 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2.Overgangen (s, a, r, s′) lagres på plass 4 i bufferet (4 av 16 plasser fylt).Vi trekker 4 tilfeldige overganger fra bufferet (t = 3, 2, 1, 4), så de ikke ligger rett etter hverandre i tid.For overgang t = 3 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,540 = 0,486. Online-nettet gir Q = 0,460.Tapet L = 0,0103 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,620 til 0,649. Uten target-nett finnes det ingen kopi å synke.Steg 4: agenten står i 3 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2. Overgangen (s, a, r, s′) lagres på plass 4 i bufferet (4 av 16 plasser fylt). Minibatch og mål gir tap L = 0,0103 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 5: agenten står i 2 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 1.Overgangen (s, a, r, s′) lagres på plass 5 i bufferet (5 av 16 plasser fylt).Vi trekker 4 tilfeldige overganger fra bufferet (t = 4, 1, 3, 5), så de ikke ligger rett etter hverandre i tid.For overgang t = 4 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,487 = 0,438. Online-nettet gir Q = 0,286.Tapet L = 0,0103 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,649 til 0,667. Uten target-nett finnes det ingen kopi å synke.Steg 5: agenten står i 2 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 1. Overgangen (s, a, r, s′) lagres på plass 5 i bufferet (5 av 16 plasser fylt). Minibatch og mål gir tap L = 0,0103 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 6: agenten står i 1 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2.Overgangen (s, a, r, s′) lagres på plass 6 i bufferet (6 av 16 plasser fylt).Vi trekker 4 tilfeldige overganger fra bufferet (t = 2, 1, 6, 3), så de ikke ligger rett etter hverandre i tid.For overgang t = 2 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,504 = 0,454. Online-nettet gir Q = 0,423.Tapet L = 0,0010 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,667 til 0,702. Uten target-nett finnes det ingen kopi å synke.Steg 6: agenten står i 1 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2. Overgangen (s, a, r, s′) lagres på plass 6 i bufferet (6 av 16 plasser fylt). Minibatch og mål gir tap L = 0,0010 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 7: agenten står i 2 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3.Overgangen (s, a, r, s′) lagres på plass 7 i bufferet (7 av 16 plasser fylt).Vi trekker 4 tilfeldige overganger fra bufferet (t = 7, 2, 3, 6), så de ikke ligger rett etter hverandre i tid.For overgang t = 7 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,620 = 0,558. Online-nettet gir Q = 0,537.Tapet L = 0,0006 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,702 til 0,732. Uten target-nett finnes det ingen kopi å synke.Steg 7: agenten står i 2 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3. Overgangen (s, a, r, s′) lagres på plass 7 i bufferet (7 av 16 plasser fylt). Minibatch og mål gir tap L = 0,0006 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 8: agenten står i 3 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2.Overgangen (s, a, r, s′) lagres på plass 8 i bufferet (8 av 16 plasser fylt).Vi trekker 4 tilfeldige overganger fra bufferet (t = 2, 3, 7, 4), så de ikke ligger rett etter hverandre i tid.For overgang t = 2 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,565 = 0,508. Online-nettet gir Q = 0,481.Tapet L = 0,0047 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,732 til 0,753. Uten target-nett finnes det ingen kopi å synke.Steg 8: agenten står i 3 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2. Overgangen (s, a, r, s′) lagres på plass 8 i bufferet (8 av 16 plasser fylt). Minibatch og mål gir tap L = 0,0047 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 9: agenten står i 2 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3.Overgangen (s, a, r, s′) lagres på plass 9 i bufferet (9 av 16 plasser fylt).Vi trekker 4 tilfeldige overganger fra bufferet (t = 9, 4, 6, 1), så de ikke ligger rett etter hverandre i tid.For overgang t = 9 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,668 = 0,601. Online-nettet gir Q = 0,583.Tapet L = 0,0032 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,753 til 0,775. Uten target-nett finnes det ingen kopi å synke.Steg 9: agenten står i 2 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3. Overgangen (s, a, r, s′) lagres på plass 9 i bufferet (9 av 16 plasser fylt). Minibatch og mål gir tap L = 0,0032 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 10: agenten står i 3 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2.Overgangen (s, a, r, s′) lagres på plass 10 i bufferet (10 av 16 plasser fylt).Vi trekker 4 tilfeldige overganger fra bufferet (t = 4, 2, 9, 8), så de ikke ligger rett etter hverandre i tid.For overgang t = 4 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,604 = 0,544. Online-nettet gir Q = 0,457.Tapet L = 0,0040 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,775 til 0,788. Uten target-nett finnes det ingen kopi å synke.Steg 10: agenten står i 3 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2. Overgangen (s, a, r, s′) lagres på plass 10 i bufferet (10 av 16 plasser fylt). Minibatch og mål gir tap L = 0,0040 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 11: agenten står i 2 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3.Overgangen (s, a, r, s′) lagres på plass 11 i bufferet (11 av 16 plasser fylt).Vi trekker 4 tilfeldige overganger fra bufferet (t = 7, 10, 9, 4), så de ikke ligger rett etter hverandre i tid.For overgang t = 7 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,702 = 0,632. Online-nettet gir Q = 0,616.Tapet L = 0,0009 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,788 til 0,798. Uten target-nett finnes det ingen kopi å synke.Steg 11: agenten står i 2 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3. Overgangen (s, a, r, s′) lagres på plass 11 i bufferet (11 av 16 plasser fylt). Minibatch og mål gir tap L = 0,0009 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 12: agenten står i 3 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 4.Overgangen (s, a, r, s′) lagres på plass 12 i bufferet (12 av 16 plasser fylt).Vi trekker 4 tilfeldige overganger fra bufferet (t = 5, 9, 8, 10), så de ikke ligger rett etter hverandre i tid.For overgang t = 5 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,538 = 0,484. Online-nettet gir Q = 0,474.Tapet L = 0,0003 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,798 til 0,803. Uten target-nett finnes det ingen kopi å synke.Steg 12: agenten står i 3 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 4. Overgangen (s, a, r, s′) lagres på plass 12 i bufferet (12 av 16 plasser fylt). Minibatch og mål gir tap L = 0,0003 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 13: agenten står i 4 og går høyre. Miljøet svarer med belønning r = 1 og ny tilstand s′ = 5 (slutt, ny episode fra 0).Overgangen (s, a, r, s′) lagres på plass 13 i bufferet (13 av 16 plasser fylt).Vi trekker 4 tilfeldige overganger fra bufferet (t = 4, 12, 11, 8), så de ikke ligger rett etter hverandre i tid.For overgang t = 4 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,629 = 0,566. Online-nettet gir Q = 0,559.Tapet L = 0,0001 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,803 til 0,811. Uten target-nett finnes det ingen kopi å synke.Steg 13: agenten står i 4 og går høyre. Miljøet svarer med belønning r = 1 og ny tilstand s′ = 5 (slutt, ny episode fra 0). Overgangen (s, a, r, s′) lagres på plass 13 i bufferet (13 av 16 plasser fylt). Minibatch og mål gir tap L = 0,0001 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 14: agenten står i 0 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 1.Overgangen (s, a, r, s′) lagres på plass 14 i bufferet (14 av 16 plasser fylt).Vi trekker 4 tilfeldige overganger fra bufferet (t = 4, 6, 1, 7), så de ikke ligger rett etter hverandre i tid.For overgang t = 4 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,636 = 0,572. Online-nettet gir Q = 0,564.Tapet L = 0,0005 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,811 til 0,831. Uten target-nett finnes det ingen kopi å synke.Steg 14: agenten står i 0 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 1. Overgangen (s, a, r, s′) lagres på plass 14 i bufferet (14 av 16 plasser fylt). Minibatch og mål gir tap L = 0,0005 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 15: agenten står i 1 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2.Overgangen (s, a, r, s′) lagres på plass 15 i bufferet (15 av 16 plasser fylt).Vi trekker 4 tilfeldige overganger fra bufferet (t = 15, 13, 9, 1), så de ikke ligger rett etter hverandre i tid.For overgang t = 15 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,655 = 0,589. Online-nettet gir Q = 0,567.Tapet L = 0,0076 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,831 til 0,919. Uten target-nett finnes det ingen kopi å synke.Steg 15: agenten står i 1 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2. Overgangen (s, a, r, s′) lagres på plass 15 i bufferet (15 av 16 plasser fylt). Minibatch og mål gir tap L = 0,0076 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 16: agenten står i 2 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3.Overgangen (s, a, r, s′) lagres på plass 16 i bufferet (16 av 16 plasser fylt).Vi trekker 4 tilfeldige overganger fra bufferet (t = 11, 4, 12, 1), så de ikke ligger rett etter hverandre i tid.For overgang t = 11 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,824 = 0,742. Online-nettet gir Q = 0,729.Tapet L = 0,0023 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,919 til 0,933. Uten target-nett finnes det ingen kopi å synke.Steg 16: agenten står i 2 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3. Overgangen (s, a, r, s′) lagres på plass 16 i bufferet (16 av 16 plasser fylt). Minibatch og mål gir tap L = 0,0023 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 17: agenten står i 3 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 4.Overgangen (s, a, r, s′) lagres på plass 1 i bufferet og overskriver den eldste (t = 1).Vi trekker 4 tilfeldige overganger fra bufferet (t = 4, 6, 16, 10), så de ikke ligger rett etter hverandre i tid.For overgang t = 4 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,741 = 0,667. Online-nettet gir Q = 0,597.Tapet L = 0,0026 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,933 til 0,943. Uten target-nett finnes det ingen kopi å synke.Steg 17: agenten står i 3 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 4. Overgangen (s, a, r, s′) lagres på plass 1 i bufferet og overskriver den eldste (t = 1). Minibatch og mål gir tap L = 0,0026 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 18: agenten står i 4 og går høyre. Miljøet svarer med belønning r = 1 og ny tilstand s′ = 5 (slutt, ny episode fra 0).Overgangen (s, a, r, s′) lagres på plass 2 i bufferet og overskriver den eldste (t = 2).Vi trekker 4 tilfeldige overganger fra bufferet (t = 4, 10, 15, 12), så de ikke ligger rett etter hverandre i tid.For overgang t = 4 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,751 = 0,676. Online-nettet gir Q = 0,645.Tapet L = 0,0006 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,943 til 0,950. Uten target-nett finnes det ingen kopi å synke.Steg 18: agenten står i 4 og går høyre. Miljøet svarer med belønning r = 1 og ny tilstand s′ = 5 (slutt, ny episode fra 0). Overgangen (s, a, r, s′) lagres på plass 2 i bufferet og overskriver den eldste (t = 2). Minibatch og mål gir tap L = 0,0006 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 19: agenten står i 0 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 1.Overgangen (s, a, r, s′) lagres på plass 3 i bufferet og overskriver den eldste (t = 3).Vi trekker 4 tilfeldige overganger fra bufferet (t = 8, 16, 9, 6), så de ikke ligger rett etter hverandre i tid.For overgang t = 8 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,757 = 0,681. Online-nettet gir Q = 0,666.Tapet L = 0,0002 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,950 til 0,963. Uten target-nett finnes det ingen kopi å synke.Steg 19: agenten står i 0 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 1. Overgangen (s, a, r, s′) lagres på plass 3 i bufferet og overskriver den eldste (t = 3). Minibatch og mål gir tap L = 0,0002 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 20: agenten står i 1 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 0.Overgangen (s, a, r, s′) lagres på plass 4 i bufferet og overskriver den eldste (t = 4).Vi trekker 4 tilfeldige overganger fra bufferet (t = 5, 12, 7, 15), så de ikke ligger rett etter hverandre i tid.For overgang t = 5 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,672 = 0,605. Online-nettet gir Q = 0,592.Tapet L = 0,0002 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,963 til 0,973. Uten target-nett finnes det ingen kopi å synke.Steg 20: agenten står i 1 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 0. Overgangen (s, a, r, s′) lagres på plass 4 i bufferet og overskriver den eldste (t = 4). Minibatch og mål gir tap L = 0,0002 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 21: agenten står i 0 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 1.Overgangen (s, a, r, s′) lagres på plass 5 i bufferet og overskriver den eldste (t = 5).Vi trekker 4 tilfeldige overganger fra bufferet (t = 7, 13, 9, 14), så de ikke ligger rett etter hverandre i tid.For overgang t = 7 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,875 = 0,788. Online-nettet gir Q = 0,778.Tapet L = 0,0005 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,973 til 0,998. Uten target-nett finnes det ingen kopi å synke.Steg 21: agenten står i 0 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 1. Overgangen (s, a, r, s′) lagres på plass 5 i bufferet og overskriver den eldste (t = 5). Minibatch og mål gir tap L = 0,0005 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 22: agenten står i 1 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2.Overgangen (s, a, r, s′) lagres på plass 6 i bufferet og overskriver den eldste (t = 6).Vi trekker 4 tilfeldige overganger fra bufferet (t = 7, 12, 22, 10), så de ikke ligger rett etter hverandre i tid.For overgang t = 7 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,899 = 0,809. Online-nettet gir Q = 0,800.Tapet L = 0,0006 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 0,998 til 1,006. Uten target-nett finnes det ingen kopi å synke.Steg 22: agenten står i 1 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2. Overgangen (s, a, r, s′) lagres på plass 6 i bufferet og overskriver den eldste (t = 6). Minibatch og mål gir tap L = 0,0006 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 23: agenten står i 2 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3.Overgangen (s, a, r, s′) lagres på plass 7 i bufferet og overskriver den eldste (t = 7).Vi trekker 4 tilfeldige overganger fra bufferet (t = 10, 9, 21, 16), så de ikke ligger rett etter hverandre i tid.For overgang t = 10 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,807 = 0,727. Online-nettet gir Q = 0,690.Tapet L = 0,0006 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 1,006 til 1,019. Uten target-nett finnes det ingen kopi å synke.Steg 23: agenten står i 2 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3. Overgangen (s, a, r, s′) lagres på plass 7 i bufferet og overskriver den eldste (t = 7). Minibatch og mål gir tap L = 0,0006 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 24: agenten står i 3 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 4.Overgangen (s, a, r, s′) lagres på plass 8 i bufferet og overskriver den eldste (t = 8).Vi trekker 4 tilfeldige overganger fra bufferet (t = 23, 9, 20, 15), så de ikke ligger rett etter hverandre i tid.For overgang t = 23 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,919 = 0,827. Online-nettet gir Q = 0,819.Tapet L = 0,0002 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 1,019 til 1,029. Uten target-nett finnes det ingen kopi å synke.Steg 24: agenten står i 3 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 4. Overgangen (s, a, r, s′) lagres på plass 8 i bufferet og overskriver den eldste (t = 8). Minibatch og mål gir tap L = 0,0002 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 25: agenten står i 4 og går høyre. Miljøet svarer med belønning r = 1 og ny tilstand s′ = 5 (slutt, ny episode fra 0).Overgangen (s, a, r, s′) lagres på plass 9 i bufferet og overskriver den eldste (t = 9).Vi trekker 4 tilfeldige overganger fra bufferet (t = 19, 23, 18, 12), så de ikke ligger rett etter hverandre i tid.For overgang t = 19 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,729 = 0,656. Online-nettet gir Q = 0,628.Tapet L = 0,0004 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 1,029 til 1,025. Uten target-nett finnes det ingen kopi å synke.Steg 25: agenten står i 4 og går høyre. Miljøet svarer med belønning r = 1 og ny tilstand s′ = 5 (slutt, ny episode fra 0). Overgangen (s, a, r, s′) lagres på plass 9 i bufferet og overskriver den eldste (t = 9). Minibatch og mål gir tap L = 0,0004 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 26: agenten står i 0 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 0.Overgangen (s, a, r, s′) lagres på plass 10 i bufferet og overskriver den eldste (t = 10).Vi trekker 4 tilfeldige overganger fra bufferet (t = 25, 11, 23, 12), så de ikke ligger rett etter hverandre i tid.For overgang t = 25 regner online-nettet (uten target-nett er det samme nett) målet: y = 1 + 0,9 · 0,000 = 1,000. Online-nettet gir Q = 1,025.Tapet L = 0,0002 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 1,025 til 1,018. Uten target-nett finnes det ingen kopi å synke.Steg 26: agenten står i 0 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 0. Overgangen (s, a, r, s′) lagres på plass 10 i bufferet og overskriver den eldste (t = 10). Minibatch og mål gir tap L = 0,0002 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 27: agenten står i 0 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 1.Overgangen (s, a, r, s′) lagres på plass 11 i bufferet og overskriver den eldste (t = 11).Vi trekker 4 tilfeldige overganger fra bufferet (t = 16, 21, 23, 26), så de ikke ligger rett etter hverandre i tid.For overgang t = 16 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,920 = 0,828. Online-nettet gir Q = 0,822.Tapet L = 0,0027 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 1,018 til 1,028. Uten target-nett finnes det ingen kopi å synke.Steg 27: agenten står i 0 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 1. Overgangen (s, a, r, s′) lagres på plass 11 i bufferet og overskriver den eldste (t = 11). Minibatch og mål gir tap L = 0,0027 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 28: agenten står i 1 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2.Overgangen (s, a, r, s′) lagres på plass 12 i bufferet og overskriver den eldste (t = 12).Vi trekker 4 tilfeldige overganger fra bufferet (t = 21, 13, 16, 19), så de ikke ligger rett etter hverandre i tid.For overgang t = 21 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,733 = 0,660. Online-nettet gir Q = 0,635.Tapet L = 0,0005 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 1,028 til 1,031. Uten target-nett finnes det ingen kopi å synke.Steg 28: agenten står i 1 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2. Overgangen (s, a, r, s′) lagres på plass 12 i bufferet og overskriver den eldste (t = 12). Minibatch og mål gir tap L = 0,0005 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 29: agenten står i 2 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3.Overgangen (s, a, r, s′) lagres på plass 13 i bufferet og overskriver den eldste (t = 13).Vi trekker 4 tilfeldige overganger fra bufferet (t = 23, 16, 19, 17), så de ikke ligger rett etter hverandre i tid.For overgang t = 23 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,934 = 0,840. Online-nettet gir Q = 0,836.Tapet L = 0,0002 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 1,031 til 1,038. Uten target-nett finnes det ingen kopi å synke.Steg 29: agenten står i 2 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3. Overgangen (s, a, r, s′) lagres på plass 13 i bufferet og overskriver den eldste (t = 13). Minibatch og mål gir tap L = 0,0002 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 30: agenten står i 3 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 4.Overgangen (s, a, r, s′) lagres på plass 14 i bufferet og overskriver den eldste (t = 14).Vi trekker 4 tilfeldige overganger fra bufferet (t = 15, 30, 24, 16), så de ikke ligger rett etter hverandre i tid.For overgang t = 15 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,843 = 0,758. Online-nettet gir Q = 0,745.Tapet L = 0,0001 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 1,038 til 1,038. Uten target-nett finnes det ingen kopi å synke.Steg 30: agenten står i 3 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 4. Overgangen (s, a, r, s′) lagres på plass 14 i bufferet og overskriver den eldste (t = 14). Minibatch og mål gir tap L = 0,0001 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 31: agenten står i 4 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3.Overgangen (s, a, r, s′) lagres på plass 15 i bufferet og overskriver den eldste (t = 15).Vi trekker 4 tilfeldige overganger fra bufferet (t = 26, 29, 27, 22), så de ikke ligger rett etter hverandre i tid.For overgang t = 26 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,649 = 0,584. Online-nettet gir Q = 0,488.Tapet L = 0,0025 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 1,038 til 1,048. Uten target-nett finnes det ingen kopi å synke.Steg 31: agenten står i 4 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3. Overgangen (s, a, r, s′) lagres på plass 15 i bufferet og overskriver den eldste (t = 15). Minibatch og mål gir tap L = 0,0025 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 32: agenten står i 3 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 4.Overgangen (s, a, r, s′) lagres på plass 16 i bufferet og overskriver den eldste (t = 16).Vi trekker 4 tilfeldige overganger fra bufferet (t = 31, 19, 21, 18), så de ikke ligger rett etter hverandre i tid.For overgang t = 31 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,951 = 0,856. Online-nettet gir Q = 0,838.Tapet L = 0,0009 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 1,048 til 1,039. Uten target-nett finnes det ingen kopi å synke.Steg 32: agenten står i 3 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 4. Overgangen (s, a, r, s′) lagres på plass 16 i bufferet og overskriver den eldste (t = 16). Minibatch og mål gir tap L = 0,0009 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 33: agenten står i 4 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3.Overgangen (s, a, r, s′) lagres på plass 1 i bufferet og overskriver den eldste (t = 17).Vi trekker 4 tilfeldige overganger fra bufferet (t = 28, 31, 30, 23), så de ikke ligger rett etter hverandre i tid.For overgang t = 28 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,848 = 0,764. Online-nettet gir Q = 0,753.Tapet L = 0,0001 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 1,039 til 1,040. Uten target-nett finnes det ingen kopi å synke.Steg 33: agenten står i 4 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3. Overgangen (s, a, r, s′) lagres på plass 1 i bufferet og overskriver den eldste (t = 17). Minibatch og mål gir tap L = 0,0001 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 34: agenten står i 3 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 4.Overgangen (s, a, r, s′) lagres på plass 2 i bufferet og overskriver den eldste (t = 18).Vi trekker 4 tilfeldige overganger fra bufferet (t = 21, 32, 31, 20), så de ikke ligger rett etter hverandre i tid.For overgang t = 21 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,754 = 0,678. Online-nettet gir Q = 0,658.Tapet L = 0,0001 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 1,040 til 1,041. Uten target-nett finnes det ingen kopi å synke.Steg 34: agenten står i 3 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 4. Overgangen (s, a, r, s′) lagres på plass 2 i bufferet og overskriver den eldste (t = 18). Minibatch og mål gir tap L = 0,0001 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 35: agenten står i 4 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3.Overgangen (s, a, r, s′) lagres på plass 3 i bufferet og overskriver den eldste (t = 19).Vi trekker 4 tilfeldige overganger fra bufferet (t = 34, 22, 20, 23), så de ikke ligger rett etter hverandre i tid.For overgang t = 34 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 1,041 = 0,937. Online-nettet gir Q = 0,946.Tapet L = 0,0000 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 1,041 til 1,041. Uten target-nett finnes det ingen kopi å synke.Steg 35: agenten står i 4 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3. Overgangen (s, a, r, s′) lagres på plass 3 i bufferet og overskriver den eldste (t = 19). Minibatch og mål gir tap L = 0,0000 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 36: agenten står i 3 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2.Overgangen (s, a, r, s′) lagres på plass 4 i bufferet og overskriver den eldste (t = 20).Vi trekker 4 tilfeldige overganger fra bufferet (t = 27, 22, 21, 25), så de ikke ligger rett etter hverandre i tid.For overgang t = 27 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,756 = 0,681. Online-nettet gir Q = 0,661.Tapet L = 0,0006 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 1,041 til 1,037. Uten target-nett finnes det ingen kopi å synke.Steg 36: agenten står i 3 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2. Overgangen (s, a, r, s′) lagres på plass 4 i bufferet og overskriver den eldste (t = 20). Minibatch og mål gir tap L = 0,0006 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 37: agenten står i 2 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3.Overgangen (s, a, r, s′) lagres på plass 5 i bufferet og overskriver den eldste (t = 21).Vi trekker 4 tilfeldige overganger fra bufferet (t = 36, 22, 34, 28), så de ikke ligger rett etter hverandre i tid.For overgang t = 36 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,850 = 0,765. Online-nettet gir Q = 0,763.Tapet L = 0,0001 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 1,037 til 1,038. Uten target-nett finnes det ingen kopi å synke.Steg 37: agenten står i 2 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3. Overgangen (s, a, r, s′) lagres på plass 5 i bufferet og overskriver den eldste (t = 21). Minibatch og mål gir tap L = 0,0001 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 38: agenten står i 3 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2.Overgangen (s, a, r, s′) lagres på plass 6 i bufferet og overskriver den eldste (t = 22).Vi trekker 4 tilfeldige overganger fra bufferet (t = 37, 35, 31, 30), så de ikke ligger rett etter hverandre i tid.For overgang t = 37 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,945 = 0,850. Online-nettet gir Q = 0,851.Tapet L = 0,0000 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 1,038 til 1,033. Uten target-nett finnes det ingen kopi å synke.Steg 38: agenten står i 3 og går venstre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 2. Overgangen (s, a, r, s′) lagres på plass 6 i bufferet og overskriver den eldste (t = 22). Minibatch og mål gir tap L = 0,0000 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 39: agenten står i 2 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3.Overgangen (s, a, r, s′) lagres på plass 7 i bufferet og overskriver den eldste (t = 23).Vi trekker 4 tilfeldige overganger fra bufferet (t = 27, 29, 33, 35), så de ikke ligger rett etter hverandre i tid.For overgang t = 27 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 0,755 = 0,679. Online-nettet gir Q = 0,662.Tapet L = 0,0001 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 1,033 til 1,037. Uten target-nett finnes det ingen kopi å synke.Steg 39: agenten står i 2 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 3. Overgangen (s, a, r, s′) lagres på plass 7 i bufferet og overskriver den eldste (t = 23). Minibatch og mål gir tap L = 0,0001 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 40: agenten står i 3 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 4.Overgangen (s, a, r, s′) lagres på plass 8 i bufferet og overskriver den eldste (t = 24).Vi trekker 4 tilfeldige overganger fra bufferet (t = 30, 26, 29, 35), så de ikke ligger rett etter hverandre i tid.For overgang t = 30 regner online-nettet (uten target-nett er det samme nett) målet: y = 0 + 0,9 · 1,037 = 0,934. Online-nettet gir Q = 0,945.Tapet L = 0,0018 er snittet av (y − Q)² over batchen. Ett gradientsteg flytter θ, og max Q(4, ·) går fra 1,037 til 1,033. Uten target-nett finnes det ingen kopi å synke.Steg 40: agenten står i 3 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 4. Overgangen (s, a, r, s′) lagres på plass 8 i bufferet og overskriver den eldste (t = 24). Minibatch og mål gir tap L = 0,0018 og ett oppdatert online-nett. Uten target-nett finnes det ingen kopi å synke.Steg 12: agenten står i 3 og går høyre. Miljøet svarer med belønning r = 0 og ny tilstand s′ = 4.
Tap L0,0003Mål y0,718s = 3 → 4Δy siste steg+0,009
Steg 12: s = 3, høyre, r = 0, s′ = 4. Minibatch trukket tilfeldig (t = 5, 9, 8, 10), tap 0,0003; uten target-nett flytter målet seg hvert steg. Mål for probe-overgangen: 0,718.
Vis utregning
1. Miljøs = 3, a = høyre, r = 0, s′ = 4
2. Bufferlagret på plass 12 (12 av 16 fylt)
3. Minibatchrandom.sample(buffer, 4): 2 av 3 nabo-par er påfølgende steg, 2 av 4 er de samme som i forrige batch
4. Måly = r + 0,9 · max Q(s′, ·; θ), bare r når s′ er terminal
5. TapL = 0,0003, ett SGD-steg med η = 0,5
6. Vektdelingθ deles av alle tilstander, så oppdateringen flyttet Q(4, venstre) 0,609 → 0,628 og Q(4, høyre) 0,798 → 0,803, selv om ingen overgang i batchen startet i 4
7. Targetav: målet regnes med θ, som nettopp endret seg
Minibatchen i steg 12: overgang, Q fra online-nettet, mål y og kvadrert feil.