Q-Learning: İnteraktif Pekiştirmeli Öğrenmenin Temeli

Yayın: 6 Temmuz 2025

|

Son Güncelleme: 7 Temmuz 2025

Q-Learning: İnteraktif Pekiştirmeli Öğrenmenin Temeli

Q-Learning Nedir?

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 Formülü

Q-Learning Güncelleme Formülü:

Q(s,a) ← Q(s,a) + α[r + γ max Q(s',a') - Q(s,a)]

  • s: Mevcut konum
  • a: Gerçekleştirilen eylem (↑→↓←)
  • r: Anlık ödül (-1 adım, +30 hedef, -30 duvar)
  • s': Eylem sonrası yeni konum
  • α: Öğrenme oranı (0.1)
  • γ: İndirim faktörü (0.9)

Ö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)

7.8
5.2
4.9
3.1
🤖

Sonra (3,3)

12.5
8.0
6.8
7.2
🤖

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!

Etkileşimli Q-Learning Gösterimi

ADIM Modu: Her bireysel eylem ve Q-değeri güncellemesini izleyin. OTO Modu: Sürekli bölümlerle hızlı öğrenme.

Bölüm: 0
Q-Learning Izgarası Başlatılıyor...

Öğrenme İlerlemesi (Bölüm Başına Toplam Ödül)

Öğrenme ilerlemesini görmek için eğitimi başlatın!

Tam Uygulama

İş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)

Q-Learning'in Artıları ve Eksileri

Avantajlar

  • Model-bağımsız: Ortam dinamiklerini bilmeye gerek yok
  • Doğru koşullarda garantili yakınsama
  • Basit ve anlaşılır
  • Keşif yoluyla optimal politikalar öğrenebilir

Sınırlamalar

  • Sadece ayrık durumlar ve eylemlerle çalışır
  • Büyük durum uzaylarında yavaş yakınsama
  • Bellek durum-eylem kombinasyonlarıyla artar
  • İyi öğrenmek için kapsamlı keşif gerektirir

Temel Çıkarımlar

  • Q-değerleri gelecek ödülleri tahmin eder - ajana en iyi eylemi seçmede yardımcı olur
  • Öğrenme deneyim yoluyla gerçekleşir - her eylem ajanın bilgisini günceller
  • Değerler geriye doğru yayılır - ödüllere yakın alanlar önce değerli hale gelir
  • Keşif vs yararlanma - ajan bildiklerini kullanırken yeni şeyler denemelidir

Bu blog İngilizce'den LLM ile çevrilmiştir. Herhangi bir belirsizlik durumunda İletişim sayfasından bana ulaşabilirsiniz.

Yorum bırak

Yorumlar

Diğer bloglara bak

Claude Code Ayarlarım: Başında Durmadan Maksimum Verim

2026/03/24

Claude Code Ayarlarım: Başında Durmadan Maksimum Verim

Claude CodeAIAyarlarİzinlerGeliştirici AraçlarıGüvenlik
Optimizasyon Algoritmaları: SGD, Momentum ve Adam

2025/07/06

Optimizasyon Algoritmaları: SGD, Momentum ve Adam

OptimizasyonSGDAdamMomentumMakine ÖğrenmesiDerin ÖğrenmeSinir AğlarıAlgoritmalar
Karakterlerden Kelimelere: Japonca BPE Tokenizer

2025/07/05

Karakterlerden Kelimelere: Japonca BPE Tokenizer

BPETokenizerJaponcaNLPKelimeMakine ÖğrenmesiMetin İşleme
Svelte ve JavaScript ile Basit ve Dinamik Bir Tooltip Yaratma Yöntemi

2024/06/19

Svelte ve JavaScript ile Basit ve Dinamik Bir Tooltip Yaratma Yöntemi

JavaScriptSvelteKolayBasitDinamikTooltipFront-end
JavaScript ile Tokyo'nun İnteraktif Haritasını Oluşturun

2024/06/17

JavaScript ile Tokyo'nun İnteraktif Haritasını Oluşturun

SvelteSVGJavaScriptTailwindInteraktif HaritaTokyoJaponya23 WardsTokyo Metropolitan Bölgesi
Matplotlib'de Japonca Karakter Sorununu Çözme Yöntemi

2024/06/14

Matplotlib'de Japonca Karakter Sorununu Çözme Yöntemi

MatplotlibGrafikÇizimPythonJaponca KarakterlerSorunBug
Kitap İncelemesi | Ötekiyle Konuşmak by Malcolm Gladwell

2024/06/13

Kitap İncelemesi | Ötekiyle Konuşmak by Malcolm Gladwell

Kitap İncelemesiÖtekiyle KonuşmakTalking to StrangersMalcolm Gladwell
Japonca'da En Sık Kullanılan 3.000 Kanji

2024/06/07

Japonca'da En Sık Kullanılan 3.000 Kanji

3000Kullanma YayginligiKanji KullanimiKanjiJaponcaKanji ListesiKanji YayginligiJLPTJaponca CalismaOgrenmeYaygin Japonca Kelimeler
VSCode'da Regex Kullanarak Replace Yapma Yöntemi

2024/06/07

VSCode'da Regex Kullanarak Replace Yapma Yöntemi

VSCodeRegexAramaDeğiştirmeKoşullu DeğiştirmeFindReplaceConditional Replace
Svelte'de Readable Store Kullanmayın

2024/06/06

Svelte'de Readable Store Kullanmayın

SvelteReadableWritableState ManagementStoreHızBellekDosya Boyutu
Dosyaları Gzip ve Pako ile Sıkıştırarak Web Sitesinin Yükleme Hızını Artırın

2024/06/05

Dosyaları Gzip ve Pako ile Sıkıştırarak Web Sitesinin Yükleme Hızını Artırın

GzipSıkıştırmaPakoWeb SitesiYükleme HızıSvelteKit
Web Sayfasında Farenin Uzerinde Oldugu Kelimeyi JavaScript ile Bulun

2024/05/31

Web Sayfasında Farenin Uzerinde Oldugu Kelimeyi JavaScript ile Bulun

JavascriptFarePointerHoverWeb Geliştirme
Svelte ve SVG ile Interaktif Harita Oluşturun

2024/05/29

Svelte ve SVG ile Interaktif Harita Oluşturun

SvelteSVGInteraktif HaritaFront-end
Kitap İncelemesi | Geleneklere Uymayanlar Dünyayı Nasıl İleri Taşıyor? by Adam Grant & Sheryl Sandberg

2024/05/28

Kitap İncelemesi | Geleneklere Uymayanlar Dünyayı Nasıl İleri Taşıyor? by Adam Grant & Sheryl Sandberg

Kitap İncelemesiGeleneklere Uymayanlar Dünyayı Nasıl İleri Taşıyor?Originals: How Non-Conformists Move the WorldAdam Grant & Sheryl Sandberg
Javascript Kullanarak Sudoku Nasıl Çözülür?

2024/05/27

Javascript Kullanarak Sudoku Nasıl Çözülür?

Sudoku ÇözümAlgoritmaJavaScriptKodlama
Web Siteme Gelen Trafiği Bir Ayda Nasıl 10 Kat Artırdım?

2024/05/26

Web Siteme Gelen Trafiği Bir Ayda Nasıl 10 Kat Artırdım?

Website Trafik ArtırmaClick (Tıklama)Impression (Gösterim)Google Search Console
Hayat Bisiklet Sürmek Gibidir

2024/05/24

Hayat Bisiklet Sürmek Gibidir

BisikletHayatFilozofiBaşarı
JavaScript'te Backtracking Algoritması ile Tamamlanmış Sudoku Oluşturun

2024/05/19

JavaScript'te Backtracking Algoritması ile Tamamlanmış Sudoku Oluşturun

SudokuBacktracking AlgoritmasıTamamlanmış SudokuJavaScript
Tailwind Neden Harikadır ve Web Geliştirmeyi Nasıl Kolay Hale Getirir?

2024/05/16

Tailwind Neden Harikadır ve Web Geliştirmeyi Nasıl Kolay Hale Getirir?

TailwindHarikaFront-endWeb Geliştirme
Python ve Git Hooks ile Otomatik Olarak Site Haritası Oluşturma

2024/05/15

Python ve Git Hooks ile Otomatik Olarak Site Haritası Oluşturma

Git HooksPythonSite HaritasıSvelteKit
Kitap İncelemesi | Çok Yönlü - Başarı İçin Neden Çok Şeyle İlgilenmeliyiz? by David Epstein

2024/05/14

Kitap İncelemesi | Çok Yönlü - Başarı İçin Neden Çok Şeyle İlgilenmeliyiz? by David Epstein

Kitap İncelemesiRange(Çok Yönlü)David EpsteinBaşarı İçin Neden Çok Şeyle İlgilenmeliyiz?
Svelte ve SvelteKit nedir?

2024/05/13

Svelte ve SvelteKit nedir?

SvelteSvelteKitFront-endVite
SvelteKit ile Internationalization (Çoklu Dil Desteği)

2024/05/12

SvelteKit ile Internationalization (Çoklu Dil Desteği)

InternationalizationÇoklu Dil DestegiSvelteKitI18N
Svelte'de Caching ile Deploy Süresini Azaltın

2024/05/11

Svelte'de Caching ile Deploy Süresini Azaltın

SvelteEnhanced ImageCachingDeploy Suresi
Svelte ve Intersection Oberver ile Lazy-Load

2024/05/10

Svelte ve Intersection Oberver ile Lazy-Load

Lazy LoadingWebsite Hiz OptimizasyonuSvelteIntersection Observer
Genetik Algoritma İle Hisse Senedi Portföyü Optimizasyonu

2024/05/10

Genetik Algoritma İle Hisse Senedi Portföyü Optimizasyonu

Hisse SenediPortföy OptimizasyonuGenetik AlgoritmaPython
ShapeFile Formatini SVG Formatina Degistirme Yontemi

2024/05/09

ShapeFile Formatini SVG Formatina Degistirme Yontemi

ShapeFileSVGPythonGeoJSON
Svelte'de Reaktivite: Variables, Binding, ve Key Fonksiyonu

2024/05/08

Svelte'de Reaktivite: Variables, Binding, ve Key Fonksiyonu

SvelteSayfa GuncellemeBindingKey Fonksiyonu
Kitap İncelemesi | Savaş Sanatı - Sun Tzu

2024/05/07

Kitap İncelemesi | Savaş Sanatı - Sun Tzu

Kitap İncelemesiThe Art of War (Savaş Sanatı)Sun TzuThomas Cleary
Specialistlik Bitti. Yaşasın Generalistlik!

2024/05/06

Specialistlik Bitti. Yaşasın Generalistlik!

GenelUzmanParadigma DegisimiYazilim Muhendisligi
2018 Milletvekili Seçimlerinde Yaşa Göre Parti Eğilimi

2024/05/03

2018 Milletvekili Seçimlerinde Yaşa Göre Parti Eğilimi

PythonSecmen Profil Analizi2018 Milletvekili SecimleriSecmen Yas Analizi
Python Selenium Ile Secmen Veritabani Olusturma

2024/05/01

Python Selenium Ile Secmen Veritabani Olusturma

PythonSeleniumVeri KazimaMilletvekili Secimleri
Svelte ve Tailwind Ile Infinite Scroll Yapma Yontemi

2024/04/30

Svelte ve Tailwind Ile Infinite Scroll Yapma Yontemi

SvelteTailwindInfinite ScrollFront-end
1 Yıl İçerisinde Japonca Konuşabilmek

2024/04/29

1 Yıl İçerisinde Japonca Konuşabilmek

JaponcaDil yeterliligiJLPTKisa zamanda dil ogrenme
Svelte ve Tailwind ile Kullanıma Hazır Web Sitesi Şablonu

2024/04/25

Svelte ve Tailwind ile Kullanıma Hazır Web Sitesi Şablonu

Website SablonuFront-endSvelteTailwind
Tembel Muhendisler Kotu Urunler Yapar

2024/01/29

Tembel Muhendisler Kotu Urunler Yapar

Tembel MuhendisKotu UrunStarbucksSBI
Mukemmellik Uzerine

2024/01/28

Mukemmellik Uzerine

MukemmellikHayatin anlamiTatmin Edici HayatAmac
MacBook'ta PDF'i PNG'ye Cevirme Yontemi

2024/01/28

MacBook'ta PDF'i PNG'ye Cevirme Yontemi

PDFPNGMacBookAutomator
2023'u Kapatiyoruz: Bu Yil Okunan 24 Kitap

2023/12/31

2023'u Kapatiyoruz: Bu Yil Okunan 24 Kitap

KitapOkuma2023Geriye Bakma
Python PIL Kullarak Foto Kolaji Yapma Yontemi

2023/12/30

Python PIL Kullarak Foto Kolaji Yapma Yontemi

PythonPILGörüntü işlemeKolaj
Site Ziyaretcilerinin Alet ve Tarayicilarini Tespit Etme Yontemi

2024/01/09

Site Ziyaretcilerinin Alet ve Tarayicilarini Tespit Etme Yontemi

JavascriptAlet TespitiBrowser TespitiWebsite Analizi
ChatGPT Cevap Anatomisi

2024/01/19

ChatGPT Cevap Anatomisi

ChatGPTBuyuk Dil ModeliMakina OgrenimiYapay Zeka