Kurallar ve Mantıksal Çıkarım: Eğer-Öyleyse Düşünmenin Programlanabilir Hali

Bilgisayara akıl yürütmeyi öğretmek ilk bakışta bilim kurgu gibi durabilir; ama işin temelinde oldukça tanıdık bir yapı vardır: eğer bir koşul doğruysa, o koşuldan yeni bir sonuç çıkar. Kurallar ve mantıksal çıkarım, önceden tanımlanmış gerçekleri referans alarak yeni bilgiler üretmemizi sağlar. Yani sistem, elindeki bilgi kartlarını karıştırır, eşleşenleri bulur ve mantıklı yeni kartlar üretir. `` Günlük hayatta bunu sürekli yaparız. Eğer gökyüzü kapalıysa ve hava serinse, yağmur yağabilir diye düşünürüz. Eğer yağmur yağıyorsa, zeminin ıslak olacağını tahmin ederiz. Kural tabanlı sistemlerde bu düşünce biçimi daha resmi hale getirilir. Bir kural genellikle şu biçimdedir:

$A \rightarrow B$

Burada $A$ koşul, $B$ ise sonuçtur. Anlamı şudur: Eğer $A$ doğruysa, $B$ de doğru kabul edilebilir. Daha karmaşık kurallarda birden fazla koşul bulunabilir:

\[A \land B \rightarrow C\]

Bu ifade, hem $A$ hem de $B$ doğruysa $C$ sonucuna ulaşılır demektir. Buradaki $\land$ sembolü mantıksal ve anlamına gelir.

Kavram Anlamı Örnek
Gerçek Sistemin doğru bildiği bilgi hava_yağmurlu
Kural Koşul-sonuç ilişkisi hava_yağmurlu ise zemin_ıslak
Çıkarım Yeni bilgi üretme süreci zemin_ıslak sonucuna varmak
Bilgi tabanı Gerçekler ve kurallar bütünü tüm kurallar listesi

Mantıksal çıkarımın iki popüler yöntemi vardır: ileri zincirleme ve geri zincirleme. İleri zincirleme, eldeki gerçeklerden başlayıp mümkün olan tüm sonuçları üretmeye çalışır. Geri zincirleme ise hedef bir sonucun doğru olup olmadığını kanıtlamaya çalışır. Dedektif benzetmesiyle düşünürsek, ileri zincirleme olay yerindeki tüm ipuçlarını inceleyip sonuçlara gider; geri zincirleme ise önce şüpheliyi seçer, sonra kanıt arar.

Yöntem Başlangıç Noktası Kullanım Alanı Mantık
İleri zincirleme Mevcut gerçekler Simülasyon, uzman sistem Bildiklerimden ne çıkar?
Geri zincirleme Hedef sonuç Tanı sistemleri, sorgulama Bu sonucu kanıtlayabilir miyim?

Basit bir ileri zincirleme motoru Python ile şöyle modellenebilir:

facts = {'hava_yagmurlu', 'bulutlu'}

rules = [
    ({'hava_yagmurlu'}, 'zemin_islak'),
    ({'zemin_islak'}, 'kayma_riski'),
    ({'bulutlu', 'hava_yagmurlu'}, 'semsiye_gerekli')
]

def forward_chain(facts, rules):
    changed = True
    while changed:
        changed = False
        for conditions, result in rules:
            if conditions.issubset(facts) and result not in facts:
                facts.add(result)
                changed = True
                print('Yeni sonuc:', result)
    return facts

final_facts = forward_chain(facts, rules)
print(final_facts)

Bu kodda facts başlangıçta doğru kabul edilen bilgileri tutar. rules listesinde ise her kuralın koşulları ve sonucu vardır. issubset kontrolü, kuralın tüm koşullarının mevcut gerçekler içinde olup olmadığını denetler. Eğer koşullar sağlanıyorsa sonuç bilgi tabanına eklenir. Döngü, artık yeni bilgi üretilemeyene kadar devam eder.

Bu yaklaşımın en güzel tarafı açıklanabilir olmasıdır. Bir sinir ağı bazen neden öyle karar verdiğini anlatmakta zorlanırken, kural tabanlı sistemlerde karar zinciri izlenebilir: Yağmur yağdı, bu yüzden zemin ıslandı; zemin ıslandı, bu yüzden kayma riski oluştu. Gayet dedikoducu ama şeffaf bir sistem!

Elbette kuralların da sınırları vardır. Çok fazla kural olduğunda çakışmalar ortaya çıkabilir. Örneğin bir kural klima aç derken başka bir kural pencere aç diyebilir. Bu durumda önceliklendirme, ağırlıklandırma veya çatışma çözme stratejileri gerekir. Bazen kurallara güven derecesi de eklenir. Mesela $P(yağmur)=0.8$ gibi olasılıksal ifadelerle sistem daha esnek hale getirilebilir.

Sonuç olarak kurallar ve mantıksal çıkarım, yapay zekanın en anlaşılır yapı taşlarından biridir. Veriyi ezberlemek yerine, bilgiden bilgi üretmeyi sağlar. Küçük bir eğer-öyleyse cümlesi, doğru bağlandığında koca bir karar mekanizmasına dönüşebilir. Yazılım dünyasında bu yapı; uzman sistemlerden oyun yapay zekasına, iş kurallarından otomasyon senaryolarına kadar birçok yerde sessizce çalışır.

Yorumlar