Bulanık Mantık #3: Bulanık Kurallar ve Çıkarım

Bulanık mantık yazı serimize devam ediyoruz. Bu yazıda basit bir bulanık sistem tasarımından ve buradaki aşamalarda geçen kural ve çıkarım kavramlarından bahsedeceğiz.

Bulanık Sistem

Önceki yazılarda bulanık mantığı oluşturan temel birimlerden söz ettik. Önemli kısımlardan yer yer bahsettiysek de, bulanık mantıkla oluşturulmuş bir sistemin iskeletinden tam olarak bu yazıda bahsedeceğiz.

Şimdiye kadar değindiğimiz bulanık kümeler ve dereceli üyelik prensibiyle oluşturulan kontrol sistemlerine bulanık sistemler deniyor. Burada kontrol kelimesinin altını çizmek istiyorum. Çünkü bulanık mantığı şimdiye kadar bir yapay zeka uğraşı olarak gördüysek de; bulanık mantık, yapay zekanın önemli bir bölümü olan makine öğrenmesinden kendini epey ayrı tutar. Makine öğrenmesi yöntemleriyle oluşturulmuş bir sistem, kontrol ve karar mekanizmalarını devreye sokmadan önce (yani gelecek veriler üzerinde tahminler yapmadan önce), elde tutulan verilerden anlamlı sonuçlar üretebilir ve bunu kendi karar mekanizmasına yansıtabilir. Fakat bulanık mantık, özü itibariyle makinelerin karar verebilme süreciyle ilgilenir. Veri kümesinden anlamlı bir model oluşturmak gibi işlemler, bulanık mantığın öncelikli alanlarından biri değildir. Yani, bulanık mantık bir öğrenme gerçekleştirmez. Yalnızca, öğrenilmiş veriler üzerinden bir kontrol mekanizması inşa edebilir. Tabi günümüzde çeşitli algoritmalarla desteklenerek oluşturulmuş bulanık sistemler; başından sonuna bir makine öğrenmesi sistemi gibi çalışabilir. Fakat bulanık mantığın temelde bu konuyla ilgili olmadığını not edelim.

Aşağıdaki şekilde (Şekil 1) bir bulanık sisteminin temel yapısı gösterilmektedir. Verilerin; en yalın haliyle sisteme alındığı giriş kısmından, anlamlı sonuçlara dönüşmüş olarak geldiği çıkış kısımına kadar bütün süreçleri adım adım takip edelim:

Şekil 1. Bulanık Sistem
  • Verilerin bulanık sistem üzerinden geçerek işlenmesi süreci, okla gösterildiği yönde ilerlemektedir. İlk olarak giriş verilerini (X) dahil ederek, bulanık sistemin çarklarını döndürmeye başlarız. Giriş verilerinin üzerinde herhangi bir yapısal işlem gerçekleştirmek (normalizasyon vb.) zorunlu değildir. Buradaki işlemlere geçmeden önce, önceki konularda bahsettiğimiz kavramlardan dilsel değişkenleri ve buna bağlı olarak; bulanık kümeleri ve üyelik fonksiyonlarını oluşturmuş olmak gerekir. Şekilde gösterilen adımlar, sistemimizi bulanık mantık kuramıyla tanımladıktan sonrasını ifade etmektedir.
  • Bulanıklaştırıcı: Sisteme yalın haliyle alınmış değerleri, üyelik fonksiyonunu kullanarak, bulanık değerlere (hatırlayın, 0 ile 1 arasındaydı) dönüştüren birimdir. Yani her bir giriş değerinin, bulanık kümeye/kümelere olan üyelik derecesini hesaplar diyebiliriz.
  • Bulanık Çıkarım Birimi: Bu kısım, bilgi tabanıyla ortak çalışarak, kendisine gelen bulanık değerlerden sonuçlar çıkarmaya çalışır. Bu sonuçların neye göre ve nasıl çıkarılacağının bilgisi (ismiyle müsemma) bilgi tabanında tutulmaktadır.
  • Bilgi Tabanı: Bulanık kümeler arasındaki ilişkiler burada tutulur. Gelecek verilere göre hangi çıkarımların yapılacağıyla ilgili kurallar yine buradadır. (Bu kısmı, bulanık sistemin anayasası gibi düşünebiliriz.)
  • Durulaştırıcı: Çıkarım yapılmış veriler buraya kadar bulanık değer aralığında gelmektedir. Oysa bizim ihtiyacımız olan çıkış verilerin bambaşka bir aralıkta olması gerekebilir. Durulaştırıcı; gelen bulanık değerleri, istediğimiz bir aralığa göre ölçeklendirmeyi sağlar.

Basit bir bulanık sistemin çalışması bu şekilde özetlenebilir. Şimdi biraz daha detaylarına göz atalım.

Çıkarım

Üyelik fonksiyonları konusunda çıkarım yöntemine kısaca değinmiştik. Bu yöntemi üyelik fonksiyonlarının belirlenmesinde kullanılan bir yöntem olarak gördük fakat; aslında bundan çok daha fazlasıdır. Çıkarım yöntemi daha geniş bir açıdan; var olan bilgileri kullanarak, yeni bilgilerin elde edilmesini ifade eder.

Bulanık sistemleri oluştururken birden fazla dilsel değer ve bulanık küme kullanabiliriz. İncelediğimiz ilk örneklerden olan ‘bu kişi genç mi, değil mi?’ örneğini hatırlayın. Belirli bir yaş aralığındaki kişiler için yaptığımız gençlik kabulünü, hem kesin hem de bulanık kümeler açısından irdelemiştik. Şimdi bu örneğe, kişinin yaş değerinin yanı sıra, cinsiyet bilgisini de ikame edelim. Gençlik algısının yalnızca yaşla değil, cinsiyetle de ilgili olduğuna dair farazi bir öngörümüz olduğunu düşünelim. Bu durumda; kişinin gençliğine karar verebilmemiz için yaş bilgisine ek olarak, cinsiyet bilgisini de sorgulamamız ve bu iki farklı türden bilgiyi, anlamlı şekilde bir araya getirmemiz gerecektir.

İşte burada, bu iki farklı değeri mantıksal ifadelerle tanımlayan kurallara ihtiyacımız vardır. Bu kurallar, geleneksel mantıkta da olduğu gibi, basit bir bileşik önerme formunda tanımlanabilir. Örneğin:

Kişi, 14 yaşındaysa ve kadınsa gençtir.

Burada iki farklı değeri (önermeyi) birbirine bağlayan ‘ve’ bağlacına dikkat ediniz. Bu iki önermeyi, aslında iki bulanık kümenin (yaş ve cinsiyet kümeleri) bir temsili olarak düşünelim. Bulanık kümelerin ilişkilerinden bahsettiğimiz yazıda, birleşim ve kesişim durumlarının mantıksal ifadelerle de gösterilebildiğine atıf yapmıştık. Nitekim, buradaki bağlaç da, aslında bu iki bulanık kümenin ilişkisini tanımlamaktadır. Bu şekilde önceden yaptığımız tanımlarla, bulanık sistemin bilgi tabanında tutulacak kurallarını oluşturmuş oluruz. Daha sonra da (birazdan bahsedeceğimiz) çıkarım yöntemlerini kullanarak, oluşturduğumuz kuralların direktifinde yeni bilgiler elde ederiz. Bu bilgiler de sistemden alınan sonuçlara karşılık gelecektir.

Not: Örnek olarak verdiğimiz ifadenin kesin hükümler içermesi nedeniyle kesin kümeler açısından da değerlendirilmesi olasıdır. Fakat aynı örneğe sadık kalmak için bu yanılgıyı göz ardı etmiş bulundum. Bulanık sistem içerisinde daha doğru bir önerme şu şekilde olabilir: “Kişi, küçük yaştaysa ve kadınsa gençtir”.

Mantıksal Bağlaçlar

Birden fazla önermeyi birbirine bağlamak için kullanılan ifadelere mantıksal bağlaçlar denmektedir. Bu bağlaçları kullanarak, kendilerine özgü doğruluk değerleri olan önermelerden, üçüncü bir değer elde edilebilir. (Şekil 2) Yani, bir çıkarım sağlanabilir.

Şekil 2. Mantıksal bağlaçlar. kaynak
  • P ve Q ifadeleri birer önermeyi temsil eder. Her bir satır, P ve Q önermelerinin doğruluk değerini ve mantıksal bağlaçlarla ifadelerinden çıkan yeni değeri gösterir.
  • Bağlaçlar sırasıyla: ‘ve’, ‘veya’, ‘ise’, ‘ancak ve ancak’ şeklinde ifade edilir.
  • Bağlaçlı önermelerin (bileşik önermelerin) okunması şu şekildedir; her bir önermenin gerçek değerine bakılır ve mantıksal bağlacın, bu değerlere göre hangi sonucu döndürdüğü tablodan bulunur. Örneğin: P önermesinin değeri 1, Q önermesinin ise 0 olsun. Bu durumda P ⇒ Q (P ise Q) bileşik önermesinin değeri 0 olacaktır.

Bileşik önermelerin her zaman 1 sonucunu ürettiği durumlara totoloji, her zaman 0 sonucunu ürettiği durumlara ise çelişki denir. Örneğin:

(P Λ (P ⇒ Q)) ⇒ Q

bileşik önermesi, P ve Q değerleri ne olursa olsun, her zaman 1 sonucunu üretir. Yani totolojidir (önermedeki ifadeler ne olursa olsun, önermeden çıkarılan yorumlar doğrudur) Verilen örnek, özel bir bileşik önermeyi ifade etmektedir. Bu ifadeye modus ponens (doğrulama) denir. Burada; P bir olguyu, (P ⇒ Q) bir kuralı, (en sağdaki) Q ise sonucu temsil etmektedir. Örneğin:

  • P = Ali’nin para kazanması (olgu)
  • Q = Ali’nın yeni bir araba alması (sonuç)
  • (P ⇒ Q) = Ali para kazanıyorsa, araba alabilir (kural)

Bu durumda; Ali para kazanıyorsa ve kurala göre Ali para kazanıyorken araba alabilirse, bu durumda ‘Ali araba alacaktır’ çıkarımı yapılabilir.

Diğer bir önerme ise:

( ~Q Λ (P ⇒ Q)) ⇒ ~P

şeklindedir. Bu bileşik önerme de bir totolojidir ve modus tollens (yanlışlama) olarak bilinir. Benzer şekilde ~Q olgu, (P ⇒ Q) kural ve ~P ise sonuçtur. Aynı örnek üzerinden incelersek (~ işareti, önermenin olumsuzunu belirtmektedir):

  • ~P = Ali’nin para kazanmaması (olgu)
  • ~Q = Ali’nin yeni bir araba almaması (sonuç)
  • (P ⇒ Q) = Ali para kazanıyorsa, araba alabilir (kural)

Ali para kazanmıyorsa ve Ali, para kazanıyorken araba alabilirse; bu durumda ‘Ali araba almamıştır’ çıkarımı yapılır.

Modus ponens ve modus tollens, temel çıkarım yöntemlerinden ikisidir. Örnekleri incelerken; sonuç (çıkış) önermesinin, olgu (giriş) ve kural önermelerine bağlı olarak değiştiğini göz önünde bulundurunuz.

Kural Sunumu

Bir giriş değerine ve bir kurala bağlı olarak yeni bir bilginin nasıl çıkarılacağı konusunu inceledik. Şimdi ise bir kuralın, bulanık sistemleri kurgularken nasıl ifade edilebileceğinden bahsedelim.

Şekil 1.e geri dönersek; bilgi tabanı biriminin, bulanık sistemin anayasası olduğu yönünde bir benzetim yapmıştık. Bu benzetme, akılda kalıcı olmasının yanı sıra, aynı zamanda kuralların bulanık sistemler için ne kadar önemli olduğuna da atıf yapmaktadır. Çünkü birden fazla olguyu anlamlı bir şekilde bir araya getirmek gerektiğinde, bu şekilde kuralların oluşturulması ve ileride yapılacak çıkarımların, bu kurallara riayet etmesi gerekmektedir.

Kuralların sunumu basitçe; EĞER — O HALDE (IF — THEN) denilen bir yöntem kullanılarak gerçekleştirilir. Aşağıdaki örnekleri inceleyelim:

  • EĞER (IF) yol kaygan ise, O HALDE (THEN) araba kullanmak tehlikelidir.
  • EĞER (IF) elma kırmızı ise, O HALDE (THEN) olgundur.
  • EĞER (IF) hava kapalı VE/VEYA saat geç ise, O HALDE (THEN) sıcaklık düşüktür.

Bu yöntem kısaca: ‘Eğer X A ise, o halde Y B’dir’ şeklinde ifade edilebilir. Son örnekte olduğu gibi; birden fazla olguyu da, mantıksal bağlaçları kullanarak, aynı kural içerisinde bir araya getirebiliriz.

Bulanık Çıkarım Yöntemleri

Bulanık mantıkla çalışırken yukarıda bahsettiğimiz temel yöntemlerin yanı sıra, kullanabileceğimiz pek çok çıkarım yöntemi bulunmaktadır. Bu yöntemlerden bazıları (bizim de değineceğimiz) doğrudan bulanık mantık üzerinde çalışmak üzere geliştirilmiştir. Her bir yöntem temelde aynı işlevi (belirlenen kurallara göre yeni bilgiler çıkarma görevini) yerine getirse de; verimlilik, karmaşıklık gibi yönlerden bazıları diğerlerine göre tercih sebebi olabilir. Bu tercihler, üzerinde çalışılan problemin parametrelerine bağlıdır.

Bulanık sistemlerde en çok kullanılan çıkarım yöntemleri şu şekildedir:

  1. Mamdani Çıkarımı
  2. Sugeno Çıkarımı

Bu yöntemlere ek olarak; Tsukamoto çıkarımı ve Larsen çıkarımı yöntemleri de bulunmaktadır. Fakat literatürde en çok geçen ve en bilindik çıkarım yöntemleri oldukları için Mamdani ve Sugeno yöntemini inceleyeceğiz.

İsimlerinden de anlaşılabileceği gibi, her bir çıkarım yöntemi onu geliştiren bilim insanının soyadını taşımaktadır.

1. Mamdani Çıkarımı

En çok kullanılan bulanık çıkarım yöntemidir. Bunun başlıca sebepleri; Mamdani çıkarımının insan algısına daha çok hitap etmesi, tasarımının nispeten kolay olması ve yorumlanabilirliliği daha fazla olmasından dolayıdır.

İlk kez 1975 yılında, Londra Üniversitesi’nde çalışan matematikçi ve bilgisayar bilimci İbrahim Mamdani tarafından geliştirilmiştir.

Mamdani çıkarım yönteminin babası İbrahim Mamdani (1942–2010). kaynak
  • Mamdani çıkarımında giriş ve çıkışlar bulanık değerlerdir.
  • Giriş değerlerinin tetiklediği kurallara göre, üyelik değerleri hesaplanır. Daha sonra hesaplanan değerler, kuralların içerisinde geçen ve/veya mantıksal bağlaçlarına göre max ya da min operatörüne verilirler. Eğer, kural içerisinde geçen olgular birbirine ‘ve’ ile bağlıysa, hesaplanan üyelik değerleri min operatörüne; ‘veya’ ile bağlıysa max operatörüne verilir. Bu operatörler, adlarından da anlaşılabildiği gibi, aldıkları birden çok değer arasından en küçüğü ya da en büyüğü döndürürler.

Örnek: 100 tane ikinci el arabanın model ve kilometre bilgisini tutan bir veritabanı olduğunu düşünelim. Amacımız; bu bilgilere bakarak, araçların yaklaşık fiyatlarını tahmin eden bir bulanık sistem tasarlamak. Bu durumda:

  • Giriş değerleri: model ve km
  • Çıkış değeri: fiyat

olduğunu söyleyebiliriz. Her bir değişken için belirlediğimiz dilsel değerler şu şekilde olsun:

  • Model: Düşük [2002, 2007 yıl], Orta [2002, 2012 yıl], Yüksek [2007, 2012 yıl]
  • Kilometre: Düşük [0, 50K km], Orta [0, 100K km], Yüksek [50K, 100K km]
  • Fiyat: Düşük [0, 20K TL], Orta [0, 40K TL], Yüksek [20K, 40K TL]

Her bir dilsel değerin tanım aralığı ve birimi yanında belirtilmiştir. Yine her bir değer için üçgen üyelik fonksiyonu kullanılacaktır. Üyelik fonksiyonlarının grafiği Şekil 3.te gösterilmektedir.

Buraya kadar oluşturduğumuz kısımlar, bulanık sistemde geçen bilgi tabanı kısmının bir bölümünü oluşturmaktadır (Veri tabanı). Diğer önemli bölümü ise kuralların oluşturulmasıdır (Kural tabanı). Şimdi de kurallarımızı oluşturalım:

  • KURAL 1: EĞER model Düşük VE kilometre Yüksek ise, O HALDE fiyat Düşüktür.
  • KURAL 2: EĞER model Orta VE kilometre Orta ise, O HALDE fiyat Ortadır.
  • KURAL 3: EĞER model Yüksek VE kilometre Düşük ise, O HALDE fiyat Yüksektir.

Bu kuralların oluşturulması, diğer yazılarda da bahsettiğimiz gibi, sistemi oluşturan olgular hakkında yeteri kadar bilgi sahibi olmayı (yani ‘uzman’ olmayı) gerektirmektedir. Buradaki kurallar, sistem hakkında daha isabetli ve doğru bilgilere göre yorumlanıp yeniden düzenlenebilir.

Kural tabanımız da artık hazır. Çıkarım birimimizi de, konu başlığı olduğu üzere, Mamdani çıkarımı olarak belirledik. Artık sistemimiz giriş değerlerini almaya hazır hale geldi. Giriş değerlerimiz şu şekilde olsun:

  • Model = 2011
  • Kilometre = 25K

Giriş değerlerini aldıktan sonra yapmamız gereken ilk iş bulanıklaştırma işlemidir (Bkz. Şekil 1). Öncelikle Model için, 2011 değerinin her bir bulanık kümeye (düşük, orta, yüksek) olan üyelik değerini hesaplayalım (M: Model):

  • 𝜇Mdüşük(2011) = model_düşük = 0
  • 𝜇Morta(2011) = model_orta = 0.24
  • 𝜇Myüksek(2011) = model_yüksek = 0.8

Ardından Kilometre için 25K değerinin, yine her bir dilsel değerin bulanık kümesine olan üyelik değerini hesaplayalım (K: Kilometre):

  • 𝜇Kdüşük(25000) = kilometre_düşük = 0.48
  • 𝜇Korta(25000) = kilometre_orta = 0.52
  • 𝜇Kyüksek(25000) = kilometre_yüksek = 0

Bulanıklaştırma işlemini tamamladık. Şimdi ise çıkarım işleminin ilk adımı olarak, giriş değerlerinin hangi kuralları tetiklediğini değerlendirmemiz gerekiyor. Burada ‘kuralların tetiklenmesi’nden kasıt; kurallarda geçen dilsel değerlerin üyelik değerlerini yerine yazdığımız zaman, en az birini 0'dan farklı olmasıdır. Bu durumda, ‘kural tetiklenmiştir’ yorumunu yapabiliriz. Aksi durumda (bütün değerlerin üyelik derecesi sıfırsa), ‘kural tetiklenmemiştir’ diyebiliriz.

Kuralları ve elimizdeki değerleri incelersek, 2. ve 3. kuralların tetiklendiğini söyleyebiliriz.

Mamdani çıkarım yöntemine göre; hesaplanan uygunluk değerleri, tetiklenen kurallar için max/min operatörüne verilir ve alınan değerler, yine kurallarda verilen sonuç değerinin dilsel değerleriyle eşleştirilir.

Tetiklenen 2. kural için,

  • min(model_orta, kilometre_orta) = fiyat_orta

değerlerini yerine koyarsak:

  • min(0.24, 0.52) = fiyat_orta = 0.24

Aynı şekilde 3. kural için aynı işlemleri yaparsak:

  • min(model_yüksek, kilometre_düşük) = fiyat_yüksek
  • min(0.8, 0.48) = fiyat_yüksek = 0.48

Şimdiye kadar yaptığımız işlemleri aşağıdaki şekil üzerinden (Şekil 3) inceleyebiliriz.

Şekil 3. Araç problemi için uygulanan Mamdani çıkarımı.

Mamdani çıkarımında son olarak; elde edilen üyelik değerlerinin sonuç kümeleri üzerinde (düşük, orta, yüksek fiyat) kestiği alanlar hesaplar. Bu alanlar toplanır ve bulunan toplam alan değeri, daha sonra durulaştırma yöntemleri (bu yöntemlere ileride değineceğiz) kullanılarak bulanık değerlerden, istediğimiz aralıktaki değerlere ölçeklenir. Şekilde durulaştırma işlemi de gerçekleştirilmiş (Ağırlık merkezi metodu ile) ve son olarak çıkış değerinin 28.4 bin TL olarak hesaplandığı da gösterilmiştir.

2. Sugeno Çıkarımı

Sugeno çıkarımı özellikle kontrol problemlerinde çokça tercih edilen çıkarım yöntemlerinden birisidir.

Sugeno çıkarımının Mamdani çıkarımından en büyük farkı: Mamdani çıkarımı bulanık değerlerle çıkış verirken, Sugeno çıkarımı çıkış değerini bir fonksiyon şeklinde vermektedir. Bu yüzden Sugeno çıkarımında durulaştırma işlemleri, genellikle ortalama hesaplamak kadar basit işlemlerdir.

Yukarıda bahsettiğimiz Mamdani yönteminde, giriş değerlerinin yanında çıkış değerinin de (fiyat) bir bulanık küme olarak tanımlandığını gördük. Sugeno’da ise, girişler bulanık kümeler şeklinde olabilirken, çıkışın bir fonksiyon şeklinde (genellikle polinom) tanımlanmış olması gerekir. (Şekil 4)

Şekil 4. Sugeno çıkarım yöntemi

Şekilde görüldüğü üzere: y1 ve y2 değerleri, oluşturulan çıkış fonksiyonlarının, giriş değerlerine göre ürettiği sonuçlardır. Daha sonra bu değerler, üyelik değerleri (w1 ve w2) de kullanılarak, durulaştırma işlemine geçilir ve çıkış değeri istenilen şekilde sistemden alınır.

Bu yazıda bulanık çıkarım yöntemlerine, olabildiğince sade ve yalın bir şekilde göz atmaya çalıştık. Anlatılan yöntemlerin çok daha derin matematiksel altyapılara sahip olduğunu ve daha başka çıkarım yöntemlerinin de olduğunu; dilerseniz, bu yöntemler hakkındaki makalelere de göz atabileceğinizi not edelim.

Sonraki yazımızda, yukarıda verdiğimiz örnekten biraz daha kapsamlı olan bir kaç örneği daha inceleyerek, kendimiz sıfırdan bir bulanık sistem tasarlamaya çalışacağız.

Referans

  • Dr. A. Merve ACILAR, NEÜ, Bilgisayar Müh., Bulanık Mantık dersi notları

Written by

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store