# Perceptron
Perceptron (Algılayıcı), tek katmanlı bir yapay sinir ağının temel birimidir. Eğitilebilecek tek bir yapay sinir hücresinden oluşmaktadır. Denetimli bir öğrenme algoritmasıdır. Bir perceptron giriş değerleri, ağırlıklar ve sapma, ağırlıklı toplam ve aktivasyon fonskiyonu olmak üzere dört bölümden oluşmaktadır. Hem giriş hem de çıkış değerleri verilir ve sinir ağının öğrenmesi beklenir.


## Tarihçe.
1957'de Cornell Havacılık Laboratuvarı'nda Amerikalı psikolog Frank Rosenblatt tarafından bulunmuştur. İlk olarak bir veya daha fazla girdi, bir işlemci ve yalnızca bir çıktıdan oluşmaktaydı. Rosenblatt'ın amacı biyolojik nörondan ve onun öğrenme yeteneğinden etkilendiği için bir nöron gibi davranan fiziksel bir makine yaratmaktı.
İlk uygulama IBM 704'te test edilmiş bir yazılımdı. Bu yazılım görüntü için kullanmak amacıyla özel yapım donanımlara uygulandı. Rosenblatt ve AI topluluğu yalnızca veri noktalarının doğrusal olarak ayrılmasıyla çalışabildiğini fark ettiler. Perceptron başlangıçta ümit verici görünse de, birçok model sınıfını tanımak için eğitilemediği kanıtlandı. Bu da ilginin azalmasına sebep olmuştur.


## Tanım.
Yapay sinir ağlarının en küçük öğrenme birimi olan perceptronun matematiksel ifadesi aşağıdaki gibidir.
f(x) = w.x + b
  - b: bias
  - w: ağırlık
  - x: giriş değeri
  - f(x): çıkış değeri
Bu formülle hesaplanmak istenen modelin en iyi değeri vereceği w ve b parametrelerini hesaplamaktır. Perceptron Modeli'nin kullanılarak doğru bir sınıflandırma yapılabilmesi için öncelikle eşik değeri gereklidir. Eşik değeri problemden probleme göre değişebilmektedir. Eşik değeri sayesinde aktivasyon fonksiyon eğrisi yukarı veya aşağı kaydırılmaktadır. Böylece gerekli değerler arasındaki giriş eşlenebilir. Perceptron genellikle verilerin iki bölüme ayrılmasına olanak sağlar. Bu nedenle Doğrusal İkili Sınıflandırıcı olarak da adlandırılmaktadır.


## Öğrenme Algoritması.
Perceptron öğrenme algoritmasının amacı, pozitif girdileri ve negatif girdileri doğru sınıflandırabilen bir karar sınırı (çizgi) oluşturmaktır. Doğru sınır değerine ulaşılması için girdi ve çıktı verilerinin fazla olması gerekmektedir.
  - Ağırlık ve eşik değerleri başlatılmalıdır.
  - Her bir veri için giriş üzerinden aşağıdaki adımları gerçekleştirilmelidir.
   - Gerçek çıktı değerinin hesaplanması için:
    - y_j(t) = f[w(t).x_j]
    - y_i(t) = f[w_0(t).x_j,0 + w_1(t).x_j,1 + w_n(t).x_j,n]
   - Ağırlık değerini güncellenmesi için:
    - w_i(t+1) = w_i(t) + r.(d_j - y_j(t)x_j,i) 
 0 ≤i ≤n
  - İkinci madde yineleme hatası alınana kadar işlem tekrarlanmalıdır. 
   - 1/s ∑_j=1^s |d_j - y_j(t)|
x tanıtmak istenilen resmin matrisi, y tanıtılan resmin gerçekle olan benzerlik değeri, w ise elde edilen çıktı değerinin yükseltilmesi için kullanılmaktadır.
Model lineer olarak ayrılabilirse perceptron algoritmasının kesin sonuç üretmesi beklenir. Ancak sistem lineer olarak ayrılamıyorsa perceptron algoritması kötü sonuç üretecektir ve modeli sınıflandıramayacaktır.


## Sınırlamalar.
  - Perceptron, doğrusal olmayan ayrılabilir veri noktalarını sınıflandıramaz.
  - Çok katmanlı parametreleri içeren karmaşık problemler, Perceptronla çözülemez.
  - Perceptron, lineer olmayan ayrılabilir veri noktalarını sınıflandıramaz.
Yukarıda karşılaşılan problemlere çözüm için farklı yollarla bağlanan ve farklı aktivasyon fonksiyonlarında çalışan perceptronların bir bileşimi olan MultiLayer Perceptron kullanılmaktadır.