Meydan okuma 4
- Makine Öğrenmesi kursu
- Uzman
- Ders 44/44
- 8 dk
RL agent policy tanımlarsın.
Meydan okuma: yakın ödül mü, büyük ödül mü?
7 hücrelik bir koridorda ajan 2'den başlar. Sol uç (0) yakındır ve 0.5 ödül verir; sağ uç (6) uzaktır ama 2.0 verir. Hangi yolun seçileceğini indirim oranı γ belirler:
# sol: 2 adım -> değer 0.5 · γ
# sağ: 4 adım -> değer 2.0 · γ³
# γ = 0.3: sol 0.15 > sağ 0.054 (sabırsız)
# γ = 0.9: sol 0.45 < sağ 1.458 (sabırlı)Bu meydan okumada önce Q-learning ile politikayı öğrenecek, sonra değer yinelemesi (value iteration) ile modeli bilinen ortamda kesin çözümü bulup iki γ için karşılaştıracaksın.
Uygulama Q-learning ile öğren
Verilen ortamda Q-learning'i (alfa=0.5, eps=0.3, 2000 bölüm, her bölüm durum 2'den) γ = 0.3 ve γ = 0.9 için ayrı ayrı eğiten q_tablosu(gamma) fonksiyonunu yaz. Her γ için iç durumların (1..5) açgözlü politikasını yazdır (0 = SOL, 1 = SAG).
Başlangıç kodu
import numpy as np
N = 7 # durumlar 0..6; 0 ve 6 bitiş
SOL, SAG = 0, 1
def adim(s, a):
yeni = s - 1 if a == SOL else s + 1
if yeni == 0:
return yeni, 0.5, True
if yeni == N - 1:
return yeni, 2.0, True
return yeni, 0.0, False
rng = np.random.default_rng(0)
# buraya yazÖrnek çözüm
import numpy as np
N = 7 # durumlar 0..6; 0 ve 6 bitiş
SOL, SAG = 0, 1
def adim(s, a):
yeni = s - 1 if a == SOL else s + 1
if yeni == 0:
return yeni, 0.5, True
if yeni == N - 1:
return yeni, 2.0, True
return yeni, 0.0, False
rng = np.random.default_rng(0)
def q_tablosu(gamma, alfa=0.5, eps=0.3, bolum=2000):
Q = np.zeros((N, 2))
for _ in range(bolum):
s, bitti = 2, False
while not bitti:
a = int(rng.integers(2)) if rng.random() < eps else int(np.argmax(Q[s]))
y, r, bitti = adim(s, a)
Q[s, a] += alfa * (r + gamma * Q[y].max() * (not bitti) - Q[s, a])
s = y
return Q
for gamma in [0.3, 0.9]:
print(gamma, q_tablosu(gamma)[1:N - 1].argmax(axis=1))Beklenen çıktı
0.3 [0 0 1 1 1] 0.9 [1 1 1 1 1]
Uygulama Değer yinelemesi
Ortam modeli bilindiği için deger_yinelemesi(gamma, tur=100) fonksiyonunu yaz: her turda her iç durum için iki eylemin sonucunu adim ile hesapla, V[s] = max(r + γ V[y] (bitiş değilse)) güncelle. γ = 0.3 ve 0.9 için başlangıç durumu 2'nin değerini round(..., 3) ile ve iç durumların politikasını aynı satırda yazdır.
Başlangıç kodu
import numpy as np
N = 7 # durumlar 0..6; 0 ve 6 bitiş
SOL, SAG = 0, 1
def adim(s, a):
yeni = s - 1 if a == SOL else s + 1
if yeni == 0:
return yeni, 0.5, True
if yeni == N - 1:
return yeni, 2.0, True
return yeni, 0.0, False
# buraya yazÖrnek çözüm
import numpy as np
N = 7 # durumlar 0..6; 0 ve 6 bitiş
SOL, SAG = 0, 1
def adim(s, a):
yeni = s - 1 if a == SOL else s + 1
if yeni == 0:
return yeni, 0.5, True
if yeni == N - 1:
return yeni, 2.0, True
return yeni, 0.0, False
def deger_yinelemesi(gamma, tur=100):
V = np.zeros(N)
for _ in range(tur):
V_yeni = V.copy()
for s in range(1, N - 1):
sonuclar = [adim(s, a) for a in (SOL, SAG)]
V_yeni[s] = max(r + gamma * V[y] * (not b) for y, r, b in sonuclar)
V = V_yeni
politika = [int(np.argmax([r + gamma * V[y] * (not b) for y, r, b in [adim(s, a) for a in (SOL, SAG)]])) for s in range(1, N - 1)]
return V, politika
for gamma in [0.3, 0.9]:
V, politika = deger_yinelemesi(gamma)
print(gamma, round(V[2], 3), politika)Beklenen çıktı
0.3 0.15 [0, 0, 1, 1, 1] 0.9 1.458 [1, 1, 1, 1, 1]
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 γ = 0.9 iken başlangıçtaki ajan hangi yöne gitmelidir?
- Yerinde kalmalı
- Sağa (2.0 ödüle) Doğru cevap
- Sola (0.5 ödüle)
- Fark etmez
Açıklama: 2.0 · 0.9³ = 1.458 > 0.5 · 0.9 = 0.45.
2 Değer yinelemesinde en iyi eylemin değerini al.
V_yeni[s] = ____(r + gamma * V[y] * (not b) for y, r, b in sonuclar)
V_yeni[s] = max(r + gamma * V[y] * (not b) for y, r, b in sonuclar)
Açıklama: Bellman en iyilik denklemi: V(s) = max_a [r + γ V(s')].
3 Eşleştir.
| Kavram | Anlamı |
|---|---|
γ = 0.3 |
Yakın ödül |
γ = 0.9 |
Büyük ödül |
Q-learning |
Modelsiz öğrenme |
değer yinelemesi |
Model bilinirken kesin çözüm |