Yayın: 6 Temmuz 2025
|
Son Güncelleme: 7 Temmuz 2025
Q-Learning, ajanların bilinmeyen ortamlarda optimal kararlar almalarını öğreten model-bağımsız bir pekiştirmeli öğrenme algoritmasıdır. Denetimli öğrenmeden farklı olarak, ajan deneme-yanılma yoluyla öğrenir ve hangi eylemlerin en iyi uzun vadeli ödüllere yol açtığını bir öğretmene veya önceden etiketlenmiş verilere ihtiyaç duymadan keşfeder.
Q-Learning Güncelleme Formülü:
Q(s,a) ← Q(s,a) + α[r + γ max Q(s',a') - Q(s,a)]
Örnek Hesaplama:
Ajan (2,3) konumunda ve sağa hareket etmek için mevcut Q-değeri 5.2'dir. Ajan sağa hareket eder, -1 ödül alır (standart adım cezası - daha kısa yollar bulmayı teşvik eder) ve (3,3) konumuna gelir.
Önce (2,3)
Sonra (3,3)
Adım 1: Sağ eylem için mevcut Q-değeri = 5.2
Adım 2: Alınan ödül = -1 (adım cezası - daha kısa yolları teşvik eder)
Adım 3: Yeni konumdaki (3,3) en iyi Q-değeri = 12.5 (yukarı yönü)
Adım 4: Formülü uygula:
Yeni Q = 5.2 + 0.1 × [-1 + 0.9 × 12.5 - 5.2]
Yeni Q = 5.2 + 0.1 × [-1 + 11.25 - 5.2]
Yeni Q = 5.2 + 0.1 × [5.05]
Yeni Q = 5.2 + 0.505 = 5.7
(2,3)'ten sağa hareket etmek için Q-değeri 5.2'den 5.7'ye iyileşti çünkü ajan mükemmel gelecek beklentileri olan bir konum keşfetti!
ADIM Modu: Her bireysel eylem ve Q-değeri güncellemesini izleyin. OTO Modu: Sürekli bölümlerle hızlı öğrenme.
İşte eğitim döngüsü ile tam bir Q-Learning uygulaması:
import random
import numpy as np
class QLearningAgent:
def __init__(self, grid_size=10, alpha=0.1, gamma=0.9, epsilon=0.1):
self.grid_size = grid_size
self.alpha = alpha # Öğrenme oranı
self.gamma = gamma # İndirim faktörü
self.epsilon = epsilon # Keşif oranı
self.q_table = {} # Her (durum, eylem) çifti için Q-değerleri
self.actions = ['yukarı', 'sağ', 'aşağı', 'sol']
# Q-tablosunu başlat
for x in range(grid_size):
for y in range(grid_size):
for action in self.actions:
self.q_table[(x, y, action)] = 0.0
def choose_action(self, x, y):
"""Epsilon-greedy politikası kullanarak eylem seç"""
if random.random() < self.epsilon:
return random.choice(self.actions) # Keşfet
# Yararlan: en yüksek Q-değerine sahip eylemi seç
q_values = [self.q_table.get((x, y, action), 0) for action in self.actions]
max_q = max(q_values)
best_actions = [action for action, q in zip(self.actions, q_values) if q == max_q]
return random.choice(best_actions)
def update_q_value(self, state, action, reward, next_state):
"""Q-learning formülünü kullanarak Q-değerini güncelle"""
x, y = state
next_x, next_y = next_state
current_q = self.q_table.get((x, y, action), 0)
next_q_values = [self.q_table.get((next_x, next_y, a), 0) for a in self.actions]
max_next_q = max(next_q_values) if next_q_values else 0
# Q(s,a) = Q(s,a) + α[r + γ max Q(s',a') - Q(s,a)]
new_q = current_q + self.alpha * (reward + self.gamma * max_next_q - current_q)
self.q_table[(x, y, action)] = new_q
def train(self, walls, goal, episodes=1000):
"""Belirtilen sayıda bölüm için ajanı eğit"""
for episode in range(episodes):
x, y = 0, 0 # Başlangıç konumu
for step in range(200): # Bölüm başına maksimum adım
action = self.choose_action(x, y)
# Yeni konumu ve ödülü hesapla
moves = {'yukarı': (0, -1), 'sağ': (1, 0), 'aşağı': (0, 1), 'sol': (-1, 0)}
dx, dy = moves[action]
new_x, new_y = x + dx, y + dy
if (new_x < 0 or new_x >= self.grid_size or
new_y < 0 or new_y >= self.grid_size):
reward = -30 # Izgaradan düştü
new_x, new_y = x, y
elif (new_x, new_y) in walls:
reward = -30 # Duvara çarptı
new_x, new_y = x, y
elif (new_x, new_y) == goal:
reward = 30 # Hedefe ulaştı
else:
reward = -1 # Normal adım
# Q-değerini güncelle ve hareket et
self.update_q_value((x, y), action, reward, (new_x, new_y))
x, y = new_x, new_y
if (x, y) == goal or reward == -30:
break
# Kullanım
walls = [(1,1), (2,1), (3,1)]
goal = (9, 8)
agent = QLearningAgent()
agent.train(walls, goal, episodes=500)
Bu blog İngilizce'den LLM ile çevrilmiştir. Herhangi bir belirsizlik durumunda İletişim sayfasından bana ulaşabilirsiniz.
Yorum bırak
Yorumlar
Şuan yorum yok.
Diğer bloglara bak
2025/07/06
Optimizasyon Algoritmaları: SGD, Momentum ve Adam
2025/07/05
Karakterlerden Kelimelere: Japonca BPE Tokenizer
2024/06/19
Svelte ve JavaScript ile Basit ve Dinamik Bir Tooltip Yaratma Yöntemi
2024/06/17
JavaScript ile Tokyo'nun İnteraktif Haritasını Oluşturun
2024/06/14
Matplotlib'de Japonca Karakter Sorununu Çözme Yöntemi
2024/06/13
Kitap İncelemesi | Ötekiyle Konuşmak by Malcolm Gladwell
2024/06/07
Japonca'da En Sık Kullanılan 3.000 Kanji
2024/06/07
VSCode'da Regex Kullanarak Replace Yapma Yöntemi
2024/06/06
Svelte'de Readable Store Kullanmayın
2024/06/05
Dosyaları Gzip ve Pako ile Sıkıştırarak Web Sitesinin Yükleme Hızını Artırın
2024/05/31
Web Sayfasında Farenin Uzerinde Oldugu Kelimeyi JavaScript ile Bulun
2024/05/29
Svelte ve SVG ile Interaktif Harita Oluşturun
2024/05/28
Kitap İncelemesi | Geleneklere Uymayanlar Dünyayı Nasıl İleri Taşıyor? by Adam Grant & Sheryl Sandberg
2024/05/27
Javascript Kullanarak Sudoku Nasıl Çözülür?
2024/05/26
Web Siteme Gelen Trafiği Bir Ayda Nasıl 10 Kat Artırdım?
2024/05/24
Hayat Bisiklet Sürmek Gibidir
2024/05/19
JavaScript'te Backtracking Algoritması ile Tamamlanmış Sudoku Oluşturun
2024/05/16
Tailwind Neden Harikadır ve Web Geliştirmeyi Nasıl Kolay Hale Getirir?
2024/05/15
Python ve Git Hooks ile Otomatik Olarak Site Haritası Oluşturma
2024/05/14
Kitap İncelemesi | Çok Yönlü - Başarı İçin Neden Çok Şeyle İlgilenmeliyiz? by David Epstein
2024/05/13
Svelte ve SvelteKit nedir?
2024/05/12
SvelteKit ile Internationalization (Çoklu Dil Desteği)
2024/05/11
Svelte'de Caching ile Deploy Süresini Azaltın
2024/05/10
Svelte ve Intersection Oberver ile Lazy-Load
2024/05/10
Genetik Algoritma İle Hisse Senedi Portföyü Optimizasyonu
2024/05/09
ShapeFile Formatini SVG Formatina Degistirme Yontemi
2024/05/08
Svelte'de Reaktivite: Variables, Binding, ve Key Fonksiyonu
2024/05/07
Kitap İncelemesi | Savaş Sanatı - Sun Tzu
2024/05/06
Specialistlik Bitti. Yaşasın Generalistlik!
2024/05/03
2018 Milletvekili Seçimlerinde Yaşa Göre Parti Eğilimi
2024/05/01
Python Selenium Ile Secmen Veritabani Olusturma
2024/04/30
Svelte ve Tailwind Ile Infinite Scroll Yapma Yontemi
2024/04/29
1 Yıl İçerisinde Japonca Konuşabilmek
2024/04/25
Svelte ve Tailwind ile Kullanıma Hazır Web Sitesi Şablonu
2024/01/29
Tembel Muhendisler Kotu Urunler Yapar
2024/01/28
Mukemmellik Uzerine
2024/01/28
MacBook'ta PDF'i PNG'ye Cevirme Yontemi
2023/12/31
2023'u Kapatiyoruz: Bu Yil Okunan 24 Kitap
2023/12/30
Python PIL Kullarak Foto Kolaji Yapma Yontemi
2024/01/09
Site Ziyaretcilerinin Alet ve Tarayicilarini Tespit Etme Yontemi
2024/01/19
ChatGPT Cevap Anatomisi