Yapay Sinir Ağı ile XOR Kapısı (PIC Assembly)

ÖZET

Bu çalışmada, bir mikrodenetleyiciye yapay sinir ağını gerçekleyebilmesini sağlayacak bir program yazılması amaçlanmıştır. Hazırlanan yapay sinir ağı, program içerisine gömülü olan XOR doğruluk tablosuna göre eğitilir ve mikrodenetleyicinin giriş portlarından alınan giriş verilerini kullanarak çıkış üretir. Çalışmada, öğrenme metodu için geri yayılım metodu, aktivasyon fonksiyonu için basamak fonksiyonu, ağırlık güncellemeleri için Hebbian Kuralı kullanılmıştır. Geliştirilen uygulama, PIC Assembly dili ile PIC16F84 mikrodenetleyicisi için kodlanmıştır. Uygulama, öğrenme işlemini başarı ile gerçekleştirerek, denenen tüm giriş verileri için doğru sonuçlar üretmiştir.

1.GİRİŞ

XOR (özel veya) problemi sahip olduğu doğrusal olmayan yapı sayesinde sınıflama ve modelleme algoritmalarının test edilmesi ve başarılarının ölçülmesinde önemli bir ölçüttür. Çalışma XOR kapısının yanında farklı birçok amaçla da kullanılabilir. Çalışma bir sisteme dahil edilip, sistem ve mikrodenetleyiciye paralel veri girişi sağlanabilir. Giriş verilerini alarak eğitilen mikrodenetleyici, daha sonra kendi çıkış verileri ile sistemin çıkış verilerini karşılaştırabilir. Verilerin doğru olmaması gibi durumlarda sistemdeki hataları gidermede kullanılabilir.

Çalışmada yapay sinir ağı, 1 giriş, 1 ara ve 1 çıkış katmanlarından oluşur. Giriş katmanı ise 2 nöron ve 1 bias olmak üzere 3 giriş, 3 ara nöron ve 1 çıkış nöronundan oluşur. Giriş nöronu dışındaki nöronlar için bir aktivasyon fonksiyonu vardır. Her nörondan diğer nörona giden bir bağlantı bulunur ve bu bağlantının bir ağırlığı vardır. Her bir giriş ile ona ait ağırlık değeri çarpımlarının toplanmasına toplama işlevi denir. Nöronların değerleri aktivasyon fonksiyonu ile belirlenir. Çıkış nöronunda elde edilen değer ile hedef değer farklı ise geri yayılımlı olarak ağırlıklar tekrar hesaplanır ve öğrenme gerçekleştirilir. Öğrenme işlemi için çalışmada Hebbian Kuralı uygulanmıştır. Böylece her bağlantıdaki ağırlık güncellenerek baştan hesaplanır ve işlem hedef sonuca ulaşana kadar devam eder. Uygulamadaki hedef sonuçlar için XOR kapısının doğruluk tablosu kullanılmıştır.

XOR kapısından gerçekleştirilmeden önce ilk olarak tek nöronlu yapay sinir ağı gerçekleştirilmiştir. Giriş verisi rastgele bir ağırlık ile çarpılıp, belli bir eşik değerden geçirilmiş ve çıkış değeri elde edilmiştir. İkinci aşama olarak AND kapısı gerçekleştirilmiştir. AND mantık kapısının seçilmesinin nedeni, yapay sinir ağı ile öğrenmenin  kolay bir şekilde gerçekleşebilmesidir. AND kapısının kolay olmasını sağlayan durum, bir doğru ile kolaylıkla sınırlandırılabilmesidir. Bunun dışında AND kapısı için bias değerine ihtiyaç duyulmaz, böylece giriş sayısı değişmez ve daha az ağırlık değeri ile işlem gerçekleştirilir. XOR kapısından önce bu iki aşama tamamlanmıştır.

Uygulama sonuçları Tüm farklı giriş verileri, mikrodenetleyiciye aktarılıp elde edilen çıkış verileri doğruluk tablosu ile karşılaştırıldığında tüm sonuçların doğru olduğu gözlemlenmiştir.

2. MATERYAL VE YÖNTEM

Bu bölümde, çalışmada kullanılan yapay sinir ağları ve mikrodenetleyici hakkında detaylı bilgi ve uygulamanın adım adım nasıl gerçekleştirildiği anlatılmaktadır. Çalışma için gerekli ve yeterli derecede yapay sinir ağlarından bahsedilmiştir. Mikrodenetleyici PIC Assembly dili ile basit bir metin editörü kullanılarak kodlanmıştır.

2.1. Yapay Sinir Ağları

Yapay sinir ağlarının birçok tanımı bulunmaktadır. Bu çalışmayı daha çok kapsayan yapay sinir ağları tanımını, Haykin Sinir Ağlarına Detaylı Bakış isimli kitabında şöyle tanılamıştır; “Bir sinir ağı, bilgiyi depolamak için doğal eğilimli olan basit birimlerden oluşan paralel dağıtılmış bir işlemcidir. Sinaptik ağırlıklar olarak bilinen nöronlar arası bağlantı kuvvetlerini, bilgiyi depolamak için kullanır” [1].

 

Şekil 1. XOR için YSA Modeli

Yapay nöronun davranışını belirleyen önemli bir etken aktivasyon fonksiyonudur. Buna aynı zamanda “öğrenme eğrileri” de denir. Uygulamada basamak fonksiyonu kullanılmıştır. Basamak fonksiyonu tek veya çift kutuplu olabilirken çalışmada tek kutuplu fonksiyon kullanılmıştır. Bu fonksiyon, bir nöron için toplama işlevi sonucunda elde edilen değeri belirli bir eşik değer ile kıyaslar. Eşik değere göre nöron çıkışı 1 veya 0 değeri alarak işlem devam eder. Basamak fonksiyonu bu şeklide diğer nöronlara da uygulanır.

Şekil 2. Tek Kutuplu Basamak Fonksiyonu

Çalışma için tasarlanan yapay sinir ağının sınıfı geri beslemeli ağlardır. Geri beslemeli ağlarda katmanlar arasında çift yönlü bağlantılar bulunur. Bağlantıların çift yönlü olması ara katmanın veya çıkış katmanının çıkışlarının bir önceki katmana giriş olarak gönderilebileceğinin anlamına gelir. Bu ağlar dinamik ağlar olarak da adlandırılır.

Yapay sinir ağlarından iyi bir sonuç elde etmek için ağ uyarlanabilir olmalıdır. Bu ise ancak uygun değerli ağırlıklar ve doğru bağlantılarla mümkündür. Uygun ağırlıkların ve bağlantıların elde edilebilmesi için sistemin davranışlarını öğrenmeli ya da kendi kendi örgütlemelidir. Yapay sinir ağlarında bilgi, ağdaki sinirlerin bağlantılarının ağırlıklarında tutulur. Bilgi tüm ağda saklandığı için bir düğümün sahip olduğu ağırlık değerleri tek başına birşey ifade etmez. Tüm ağdaki ağırlıklar uygun değerler almalıdır. Ancak yapay sinir ağlarında başlangıçta en uygun ağırlıkların değerlerinin bulunması için geliştirilmiş bir formül yoktur. Ağdaki işlemci elemanlar zamanla bir takım kurallar yardımıyla en uygun ağırlık değerlerini belirlerler. Bu işleme “ağın eğitilmesi” denir.

Çalışmada ağın eğitilmesi için hebbian öğrenme kuralı uygulanmıştır. Hebb’in kuralına göre, iki nöronun da işareti aynı ise ağırlık artırılır, aksi takdirde azaltılır.

Matematiksel olarak;    wi=wi+n.(t-y).xi şeklinde ifade edilir.

Formülde n; öğrenme katsayısı, t; hedef sonuç, y;o anki sonuç değeri, xi ise wi ağırlık değeri ile çarpılan önceki nöronun çıkış değeridir. Formülde görüldüğü gibi hedef ile elde edilen sonuç arasında fark varsa ve bu fark negatif ise ağırlık azaltılır. Fark pozitif ise ağırlık değeri artırılır. Hedef ile elde edilen sonuç aynı ise ağ kendi değeri ile güncellenir. [2]

2.2. PIC 16F84 Mikrodenetleyicisi

Mikrodenetleyici olarak 16F84 üzerinde işlem yapılmaktadır. 16F84 Mikrodenetleyici flash teknolojisi bulunmaktadır. Flash teknolojisi bulunan bir belleğe yüklenen program, çipe uygulanan enerji kesilse bile silinmez. RA0-RA3 pinleri ve RB0-RB7 pinleri I/O portlardır. Bu portlardan girilen dijital sinyaller vasıtasıyla PIC içerisinde çalışan programa veri girilmiş olur. Program verileri değerlendirerek portları kullanmak suretiyle dış ortama dijital sinyaller gönderir. PIC’in besleme gerilimi 5 ve 14 numaralı pinlere uygulanır. 5 numaralı Vdd ucu +5v’a, 14 Vss ucu da toprağa bağlanır. PIC     16F84’ün 1 kbyte’lık program belleği vardır. Her bir bellek hücresi içerisinde 14 bit uzunluğunda program komutu saklanır. Program belleği flash olmasına rağmen, programın çalışması esnasında sadece okunabilir.

Mikrodenetleyici PIC Assembly dili kodlanmıştır ve bu dil 35 komuttan oluşur. Bu komutlar arasında direkt olarak döngü ve karar yapıları bulunmaz. Döngü komutlarından kasıt dallanma komutları değildir. Çalışmada ihtiyaç duyulan işlemler fonksiyon grupları şeklinde kodlanmıştır. Text dosyası biçiminde kodlanmış olan assembly komutlarını makine diline MPASWIN  ile çevrilir. [3]

 

Şekil 3. PIC16F84’ün Pin Görünüşü

2.3. XOR Kapısı

XOR (özel veya) problemi sahip olduğu doğrusal olmayan yapı sayesinde sınıflama ve modelleme algoritmaların test edilmesi ve başarılarının ölçülmesinde önemli bir ölçüttür. XOR kapısının doğruluk tablosu incelendiğinde bir doğru ile 1 ve 0 değerleri birbirinden ayrıştırılamamaktadır. Oysaki diğer lojik operatörler örneğin AND ve OR gibi işlemler bir doğru ile kolaylıkla sınırlandırılabilir [4].

Tablo 1. XOR doğruluk tablosu

X1 X2 Y
0 0 0
0 1 1
1 0 1
1 1 0

Şekil 3. XOR ve OR İki Boyutlu Gösterimi

2.4. Yöntemin Uygulanışı

Uygulama ISIS Proteus devre simülasyonu programında hazırlanmıştır. Uygulama için gerekli olan devre ve devre elemanları PIC16F84, butonlar, Binary Coded Desimal Segment Display ve  +5v güç devre elemanı bağlantıları yapılarak hazırlanmıştır. Uygulamada ilk olarak giriş ve çıkış portları belirlenip tüm değişkenler tanımlanmıştır. Sistem içim sabit olan bazı değişkenlere ilk değerler verilir. Sistemin genel işleyişi şu şöyle devam eder:

  • Tüm gerekli ağırlıklar buton yardımı ile kullanıcı tarafından rastgele ve 0 ile 1 değeri arasında değerler verilir.
  • Eğit butonu ile tüm olası durumlar için ağırlıklar güncellenir. Bu olası durumlar giriş verilerinin 0 ile 0, 0 ile 1,1 ile 0, 1 ile 1 şeklindedir. Sistem sıra ile ilk olası durumu ve olası duruma göre hedef değerini alarak döngüye başlar. Döngü içerisinde sıra ile her nöronun toplama işlevi hesaplanıp aktivasyon fonksiyonundan geçirilir. Çıkış nöronundaki değer ile hedef değer kıyaslanır. Ağırlıkların güncellenmesi için hebbian kuralı kullanıldığı için bu kurala göre fark negatif ise ağırlıklar öğrenme katsayısı kadar azaltılır. Fark pozitif ise öğrenme katsayısı kadar artırılır. Çıkış nöron değeri ile hedef aynı ise ağırlık değişmez. Bu işlem tüm durumlar için tekrarlanır.
  • Sonuç ekranında iki ayrı buton ile giriş değeri değiştirilip sonuç gözlemlenir. İki ayrı butonla farklı giriş değeri verilip sonuç ekranında izlenir.
  • Sistemde bulunan reset butonu ile eğitilen ağın öğrenme işlemi siliniyor. Reset butonuna basıldıktan sonra sonuç ekranındaki butonlarla farklı girişler verilirse doğru olmayan değerler gözlemlenir. Çünkü ağdaki değerler rastgele seçilmiştir ve her durumu kapsayan sonuçlar veremez.
  • Tekrar doğru işlemler elde etmek için eğit butonuna basılarak ilk duruma geri döner. Artık sonuç ekranındaki butonlara basılması halinde öğrenme işlemi sonrasındaki güncellenmiş ağırlık değerleri ile sonuç ekrana verildiği için tüm olası durumlara göre doğru sonuçlar üretilir.

3.  PERFORMANS ANALİZİ

Devrenin simülasyonu ISIS Proteus programı ile hazırlanmıştır. Devrenin çalıştırılabilmek için üst menüden source/Add-Remove Source Files seçeneği seçilir. Source code filename grubu altında new seçeneği ile program için hazırlanmış olan asm dosyası seçilir. MPASWIN ile assembly komutları makine diline çevrilir.

Şekil 4. Programa Kaynak Kodunun Eklenmesi

Daha sonra üste menüden Edit/Find and Edit component seçeneği seçilip gelen ekrana devre grubu olan U1 parametresi girilir. Bu seçim ile birlikte gelen ekran tamam seçeneğine tıklanır. Bu ekranda clock hızı ve hex dosyasının konumu gibi XOR uygulaması için değiştirilmesi gerekli olmayan birkaç parametre bulunur.

Şekil 5. Edit/Find and Edit Component Seçimindeki Ekran

3.1. Uygulamanın Arayüzü

 Uygulama çalıştırılmaya hazırdır. Sistemin arayüz ekranında ağırlıklar rastgele atanması için buton, eğit butonu, reset butonu ve sonuç ekranı altında iki giriş butonu ve seven segment display bulunmaktadır.

Şekil 6. Uygulamanın Arayüzü

3.2. Ağırlıkların Rastgele Atanması

Uygulama başlanırken ilk olarak ağırlık değerleri atanır. Bu ağırlık değerlerinin ne olduğu sonuç ekranında gözlemlenir. Her ağırlık için bu işlem gerçekleştikten sonra atama işlemlerinin bittiğini gösteren bir 0F değeri ekranda görüntülenir. Bu değer ekranda bulunduğunda ağırlıklar rastgele atanması tamamlanmış diğer işlemlere geçilmesi gerektiği anlaşılır. Kullanıcı hala butona basmaya devam etse bile program akışı diğer adıma geçtiği için buton devre dışı olacaktır.

 

Şekil 7. Ağırlık Değerlerinin Atanması

 

 Şekil 8. Tüm Ağırlık Değerlerinin Atandığını Gösteren Ekran

3.3. Ağın Eğitilmesi

Tüm ağırlıklara rastgele değerler verildikten sonraki aşama YSA’nın eğitilmesidir. Bu aşamada sadece eğit butonuna basmak gerekir. Eğit butonu ile tüm olası girişler ve bu olasılıklara göre ağın hedef sonuçları alınarak ağ eğitilir. Tüm ağırlıklar güncellenir.

Şekil 9. Eğit Butonuna Basıldıktan Sonraki İlk Ekran

3.4. Eğitim Sonuçlarını Kontrol Etme

Eğitilmiş olan ağda farklı girişlerde nasıl sonuçlar verdiğini gözlemlemek için sonuç ekranı kısmındaki x1 ve x2 butonlarına 0 veya 1 değerleri verilerek sonuç ekranı gözlemlenir. Şekil 10 ve 11’de farklı giriş değerleri verilmiştir. Giriş değerleri 0 ve 1 verildiğinde sonucun 1, 0 ve 0 değeri verildiğinde sonucun 0 olduğu görülmüştür.

Şekil 10. Eğitim Sonrası Farklı Değerlerle Sonuçların Gözlenmesi

Şekil 11. Eğitim Sonrası Farklı Değerlerle Sonuçların Gözlenmesi

3.5. Resetleme

Eğitilmiş olan YSA ağına reset işlemi uygulanabilir. Bu işlem sonucunda öğrenme kuralı ile güncellenmiş olan ağ değerleri yerine ilk alınan ağırlık değerleri kullanılarak çıkış değeri sonuç ekranına yansıtılır.

Şekil 12. Reset Butonuna Basıldıktan Sonraki İlk Ekran

3.6. Resetleme Sonuçlarını Kontrol Etme

Resetlenmiş olan ağda farklı girişlerde nasıl sonuçlar verdiğini gözlemlemek için sonuç ekranı kısmındaki x1 ve x2 butonlarına 0 veya 1 değerleri verilerek sonuç ekranı gözlemlenir.

 

Şekil 13. Reset Sonrası Farklı Değerlerle Sonuçların Gözlenmesi

Şekil 14. Reset Sonrası Farklı Değerlerle Sonuçların Gözlenmesi

3.7. Ağın Tekrar Eğitim Sonuçlarını Göstermesi

Reset işleminden sonra ağı tekrar eğitmek için eğit butonuna basmak yeterlidir. Program eğit butonuna basıldıktan sonra sonuç ekranında sadece eğitim sonuçları gözlemlenir. Eğer tekrar reset butonuna basılırsa sonuç ekranında reset sonrası oluşan değerler görülür. Program bu aşama hangi buton aktif ise yani en son tıklanmış olan buton ile ilgili sonuç ekranında değerler görüntülenir.

Şekil 15. Reset Sonrası Tekrar Eğit Butonuna Basılıp Sonuçların Gözlenmesi

4. SONUÇ

Çalışmada mikrodenetleyici olarak Microchip firmasının PIC 16F84 isimli denetleyicisi seçilmiştir. Bu uygulamada YSA eğitimi program içerisinde yapılmıştır. Çalışmada yapay sinir ağı, 1 giriş, 1 ara ve 1 çıkış katmanlarından oluşur. Giriş katmanı 2 nöron ve 1 bias olmak üzere 3 giriş, 3 ara nöron ve 1 çıkış nöronundan oluşur. Giriş verileri PIC 16F84’ün A portundan, çıkış değerleri ise B portundan verilmektedir. Yapay sinir ağının toplama işlevi, aktivasyon fonksiyonu olan Tek Kutuplu Basamak Fonksiyonu, Hebbian Kuralına göre öğrenme işlemi yani ağırlıkların güncellenmesi için kod blokları geliştirilmiştir. Kod bloklarına verilen giriş değerleri tek bir sonuç elde ederek bloğun çağırıldığı noktaya geri döner. Böylece işlemler daha modüler gerçekleştirilir ve programın boyutu kısaltılır.

Uygulama farklı amaçlarda hedeflemektedir. Bu hedeflerden biri, bir sistemin giriş verilerine göre çıkış verilerinin kontrolünün yapılmasıdır. Giriş değerlerinin hedeflediği sonuçları YSA öğrenme yöntemi ile eğitilip, sistemdeki çıkış değerleri ile öğrendiği bilgiyi kıyaslayarak sonucun hatalı olup olmadığı kontrol edebilir.

Programda eğitim sonrası verilen girişlere göre doğru sonuçlar elde edilmiştir. Sonuçların doğruluğu XOR kapısı doğruluk tablosu ile kıyaslanmıştır. XOR (özel veya) problemi sahip olduğu doğrusal olmayan yapı sayesinde sınıflama ve modelleme algoritmalarının test edilmesi ve başarılarının ölçülmesinde önemli bir ölçüttür. XOR kapısının doğruluk tablosu incelendiğinde bir doğru ile 1 ve 0 değerleri birbirinden ayrıştırılamamaktadır. Oysaki diğer lojik operatörler, örneğin AND ve OR gibi işlemler, bir doğru ile kolaylıkla sınırlandırılabilir. Bu uygulama XOR kapısı için gerçekleştirildiği için kolaylıkla diğer mantık kapıları için de gerçekleştirilebilir.

 

5. KAYNAKLAR

1. Laurene Fausett , Fundamentals of Neural Networks,  New Jersey: Prentice-Hall, 1994,s.3.

2. PIC mikrodenetleyici ile yapay sinir ağı donanım modülü, Yüksek Lisans, Marmara Üniversitesi, Fen Bilimleri Enstitüsü, 2006

3. Mikrodenetleyiciler ve PIC Programlama s.13.

4. Alan programlamalı kapı dizileri (FPGA) üzerinde bir yapay sinir ağları (YSA)’nın tasarlanması ve donanım olarak gerçekleştirilmesi, Yüksek Lisans, Selçuk Üniversitesi, Fen Bilimleri Enstitüsü, 2008

6. KODLAR

Gist Kodları