OCR Uygulaması
Bu soruda ele aldığımız konu aslında bir OCR (Optical Character Recognition) konusunun çok dar bir alanıdır. Burada yapılmakta olan aslında bir yazının mekaniksel veya yazılımsal olarak tanınması uygulamasıdır.
Görüntü işleme kullanılarak tespit edilen karakterler daha sonra kullanılacak olan ağa uygun olarak ölçeklendirilerek yeterli satır ve sütun sayısının elde edilmesi sağlanmaktadır. Bizim burada ilk etapta yapmakta olduğumuz belli karakterler için ağın bunları tanımasını sağlamaktadır.
Eğitim Kümesi
Bu uygulamada ağın eğitim süreci ve eğitimler sonucunda test edilmesi işlemleri önemli olmaktadır. Burada yapay sinir ağlarımız belleklilik özelliğini kullanarak girişleri ilişkin belirli çıkarsamaları ağ içerisinde tutmaktadır.
Eğitim kümesi içerisinde ne kadar fazla veri olursa yapay sinir ağımız o eğitimi yapılan değer için daha iyi sonuçlar vermeye başlanacaktır. Burada sistemin ezberlemeden öğrenebilir ve genelleme yapabilir hale getirilmesi istenmektedir.
Burada minimum rakam olarak 6 sayısı verilmiştir. Sistemimi kod üzerinde hazırlarken bu değişken değeri parametre olarak saklanmıştır böylece farklı sayıda eğitim değeri içinde sonuçlar incelenebiliyor.
Burada önemli olan eğitim ve test kümesindeki karakterlerin orijinallerinden azda olsa bir miktar farklı olması gerekmektedir. Bunu sağlamak amacıyla da yazdığım program içerisinde parametrik olarak ne kadar bir değişim istendiğini öğrenmekteyim. Daha sonra bu değişim miktarı kadar değeri o karaktere ait veri dizisi üzerinde değiştirmekteyim. Burada elde edilen değerler rastgele olarak ağa aktarıldığından daha rastgelelik üzerine kurulu bir sonuç elde edilmektedir.
Parametrelerin Seçimi
Yapay sinir ağları konusunda beklide en şüpheli noktalardan biride kullanılan ağ içerisinde performansı etkileyecek çok fazla değer olmasıdır ve bunların hiçbir zaman en iyisi budur gibi bir söylemle tanıtılması mümkün olmamaktadır.
Bu nedenle öncelikle bizim sistemimizin parametrelerine ve bunların sonuçları nasıl etkilediklerine açıklama getirmeye çalışalım.
Düğüm sayısının artması ağın hatırlama yeteneğini arttırmakla beraber öğrenme işlemi süresini uzatmaktadır. Ama burada yapılacak olan uygun düğüm sayısında yapılan değişikliklerin incelenmesi olacaktır.
Öğrenme oranı
Öğrenme oranının ağ performansı üzerinden önemli bir etkiye sahiptir. Küçük öğrenme oranı değerleri için eğitme işlemi uzun zaman alırken bu değerin büyütülmesi ile bu süreç daha kısa sürede gözlemlenmektedir. ,
Farklı Öğrenme Oranlar için sonuçlar:

Şekil 1: Iterasyon sayısının katmanların dengeye gelmesi üzerine etkisi
Burada görüldüğü üzere iterasyon sayısında belirli bir artma gözlenmiştir. Sistemin yüksek öğrenme katsayısı değerleri için osilasyona girmesini de gözlemlemeye çalıştım ama sistemin local minimumlarında takılı kalmadığından dolayı bu durum gözlenemedi. Öğrenme katsayısının azalması ile sistemin hedefe ulaşma süresi uzatmıştır. Bu da yukarıda bahsettiğimiz şekilde beklenen bir durumdur.
Gizli Katman Sayısı
Gizli katmandaki sinir sayılarının arttırılması hem hafızada hem de CPUda yük artmasına sonuç olmaktadır. Gizli katman sinir sayısının az miktarda alınması ağın hatırlama yeteneğini olumsuz yönde etkilemektedir.
Sistemlerin karmaşıklığı arttıkça katman sayısını ve nöron sayısının arttırılması uygulanan yöntemlerdendir ancak bundan daha mantıklı yöntemle sonuç elde edilebilmektedir. Bunlar arasında aktivasyon fonksiyonlarını değiştirilmesi veya öğrenme oranı momentum terimi gibi etkileri devreye sokmak yer alabilmektedir.
Minimum Hata değeri
Minimum hata değeri işlem yapılırken toplam karesel hatanın belirli bir değeri durdurması amacıyla tanımlanmaktadır. Aslında durdurma koşulu olarak ta kullanılabilmektedir. Bu değerin seçilmesi gereksiz iterasyonlardan sakındırdığı için önemli olmaktadır.
Katmanlardaki Nöron Sayıları
Katmanlardaki nöron sayıları da bizim için önemli olan kriterlerden bir tanesidir. Sistemlerin minimum katman sayısını bulmaya yönelik bir teoremin hesapladığı üzere bir yapay sinir ağları sisteminin çalışmasında sınıflandırma problemi için sadece 1 gizli katman ve çıkış katmanı yeterli olmaktadır ancak biz her zaman bu şekilde çalışmıyoruz. Genellikle bir katmandaki nöron sayısının çok fazla olmaması için katmanlarda yatay bir büyüme sağlanarak katman sayısı arttırılmaktadır.
Katman sayısını arttırmak bir çözüm olabileceği gibi her zaman bir katmanda fazla sayıda nöron kullanmamamızda gerekmemektedir. Sistemin çalışmasına yönelik olarak optimum sayıda nöron belirlenebilmektedir. Bunun sistemin öğrenmesine etkisi olduğu gibi öğrenme süresi ve işlem maliyeti de bundan etkilenmektedir.
Birinci katmandaki farklı nöron sayıları için iterasyon ve hata değerleri:




Şekil 2: İterasyon değerleri ve hatalardaki değişim
Yukarıdaki grafiklerden de görüleceği üzere sistemin katmandaki nöron sayısı azaldıkça hatanın azalarak sistemin dengeye gelmesi için gerekli olan iterasyon sayısında artma meydana gelmiştir.
İkinci katmandaki farklı nöron sayıları için iterasyon ve hata değerleri:


Şekil 3: İterasyon değerleri ve hatalardaki değişim
Aktivasyon Fonksiyonu
Aktivasyon fonksiyonları eğitim kurallarımızı nasıl seçtiğimizle de alakalı olarak önemle belirlenmesi gereken bir kıstastır. Yapay sinir ağı sistemlerde bir düzenek eğer iyi çalışmıyorsa ilk olarak denenmekte olan şeyler ağ yapısı üzerinde değişiklikler yapılarak nöron sayısı veya katman sayısı ile oynamak olmaktadır.
Aslında aktivasyon fonksiyonları da giriş ve çıkış arasında ilişkiyi doğrudan etkilemekte olduklarından en önemli parametrelerden birisi olmaktadır. Sigmoid çoğunlukla tercih ettiğimiz bir aktivasyon fonksiyonu olmasına rağmen zorunlu olarak kullanılması zorunlu değildir. Bunun dışında kullanılabilecek başka fonksiyonlarda olmaktadır. Biz sigmoid fonksiyonun kullanmayı uygun gördük.
Durdurma Koşulu
Yapay sinir ağlarında eğitim işleminin durdurulması koşulu da sistemin performansı ve işlem süresi açısından önemli olmaktadır. Burada kullanılacak olan koşullar sistemin eğitimi eğer çok uzun sürecekse bir sınır iterasyon koşulu konulması ve belirli bir hata koşulu konulması gereklidir. Burada hata koşullarında grup uyarlamalı veya veri uyarlamalı olarak kullanılabilmektedir.
Veri uyarlamalı ve grup uyarlamalı sistemlerde belli başlı farklılıklar yer almaktadır. Veri uyarlamalı sistemlerde bağlantılar için gereken bellek az olmaktadır ve problemler büyüdükçe daha iyi çözüm üretilmesi sağlanmaktadır.
Bizim kullanmakta olduğumuz sistemde 35 adet giriş 7x5 karakterleri temsil amacıyla oluşturulmuştur. Bunların ilk etapta girişlerde 10 nörondan oluşmuş bir katmana alınmıştır bu sayı daha arttırılarakta denenebilir nöron sayısının artması sistemin öğrenme kabiliyetini arttırmakta ancak işlem yükünü ve bellek gereksinimini de beraberinde yükseltmektedir. Gizli katman sayısı 2 olarak seçilmiştir. Bunun seçiminde tek katmanda yeterli olabilmektedir ancak giriş katmanındaki nöron sayısını fazla tutmaktansa yatay olarak ağı genişletmek uygun olmuştur. Çıkış katmanında ise 3 farklı karakter için çalışıyor olduğumuzdan 3 değer kullanılmıştır. Burada sistemin kurulumunda sigmoid fonksiyonu seçilmiştir ve hata değerlerinin normal çıkması içinde eğitim kümesinde çıkış değerleri
,
,
seçilmiştir. Burada yapılabilecek diğer bir durum sigmoid fonksyonumuzu (-1,1) arasında çıkış verecek şekilde kullanarak çıkış değerlerini 0 ve 1lerden oluşan vektörler halinde değil -1,1 değerleri kullanarak oluşturabiliriz.



Şekil 4: Bozulan piksel karşısında sistem başarımı
Burada yapılması amaçlanan harflerin bozulma miktarı arttıkça sistemin tanıma kabiliyetinin ne kadar değiştiğidir. Tanıma kabiliyeti 0-1 arasında kuantalanmıştır. Burada 1e yakın değerler gözlendiğinden bozulan bit sayısı fazla olsa da sistem doğru şekilde tanınabilmektedir. Sistemin resimleri bozması rastgele pixel değerlerinin seçilerek yapılmasından ötürü sistemin tanıma yeteneği beklendiği gibi düzgün azalmamakta ancak gene de hata yapıldığında sistemin diğer karakterlere benzetilmesi daha fazla olmaktadır. Sistemde tanınacak eleman sayısı arttırılacak olursa bu durumda benzer karakterler arasında oluşan hatalar daha fazla olacaktır.