Perceptron: Yapay Sinir Ağının Yapı Taşı

Kaynak Düğüm: 1216283

Bir makine öğrenimi ve AI meraklısıysanız, perceptron kelimesiyle karşılaşmış olmalısınız. Perceptron, birçok derin öğrenme kursunun ilk bölümünde öğretilir. Peki tam olarak nedir? Arkasındaki ilham nedir? Sınıflandırma problemini tam olarak nasıl çözer? Bu makalede, algılayıcının arkasındaki biyolojik ilhamla başlayacağız ve ardından matematiksel tekniklerini inceleyeceğiz ve son olarak bir algılayıcı birimi kullanarak sıfırdan bir ikili sınıflandırıcı oluşturacağız.

Sinir Ağlarının Biyolojik İlhamı

Bir nöron (sinir hücresi), sinir sisteminin temel yapı taşıdır. Bir insan beyni, birbirine bağlı milyarlarca nörondan oluşur. Beyinden sinyal alıp göndermekten sorumludurlar. Aşağıdaki şemada görüldüğü gibi, tipik bir nöron üç ana bölümden oluşur – dendritler, bir akson ve hücre gövdesi veya soma. Dendritler, hücre gövdesinden çıkan ağaç benzeri dallardır. Diğer nöronlardan bilgi alırlar. Soma bir nöronun çekirdeğidir. Dendritlerden alınan bilgilerin işlenmesinden sorumludur. Akson, nöronların bilgiyi ilettiği bir kablo gibidir. Sonuna doğru akson, dendritleri aracılığıyla diğer nöronlarla bağlantı kuran birçok dala ayrılır. bu akson ve diğer nöron dendritleri arasındaki bağlantıya sinaps denir.

1: Biyolojik Nöron ve Yapay Sinir Ağı

Resim Kaynak: Willems, K. (2017, 2 Mayıs). Keras Eğitimi: Python'da Derin Öğrenme.

YSA beynin işleyişinden ilham aldığı için, şimdi beynin nasıl çalıştığını görelim. Beyin, milyarlarca nörondan oluşan bir ağdan oluşur. Bir nörondan gelen bilginin diğer nöronlara iletildiği bir sinaps aracılığıyla elektriksel ve kimyasal sinyaller aracılığıyla iletişim kurarlar. İletim süreci, 'aksiyon potansiyeli' adı verilen elektriksel bir dürtü içerir. Bilginin iletilmesi için, giriş sinyallerinin (impuls) belirli bir eşik bariyerini geçecek kadar güçlü olması gerekir, daha sonra sadece bir nöron aktive olur ve sinyali daha fazla iletir (çıkış).

Bir nöronun biyolojik işleyişinden ilham alan Amerikalı bilim adamı Franck Rosenblatt, 1957'de Cornell Havacılık Laboratuvarı'nda algılayıcı kavramını ortaya attı.

  • Bir nöron, diğer nöronlardan değişen güçte elektriksel darbeler şeklinde bilgi alır.
  • Nöron, diğer nöronlardan aldığı tüm uyarıları bütünleştirir.
  • Ortaya çıkan toplam belirli bir eşik değerinden büyükse, nöron 'ateşlenir' ve diğer bağlı nöronlara iletilen bir aksiyon potansiyelini tetikler.

Perceptron'un Ana Bileşenleri

Rosenblatt'ın algılayıcısı temelde bir ikili sınıflandırıcıdır. Algılayıcı 3 ana bölümden oluşur:

  • Giriş düğümleri veya giriş katmanı: Giriş katmanı, daha sonraki işlemler için ilk verileri sisteme alır. Her giriş düğümü sayısal bir değerle ilişkilendirilir. Herhangi bir gerçek değer alabilir.
  • Ağırlıklar ve sapma: Ağırlık parametreleri, birimler arasındaki bağlantının gücünü temsil eder. Ağırlık ne kadar yüksekse, çıktıya karar vermek için ilişkili girdi nöronunun etkisi o kadar güçlüdür. Bias, lineer bir denklemde kesişme ile aynı şeyi oynar.
  • Aktivasyon fonksiyonu: Aktivasyon fonksiyonu, nöronun ateşlenip ateşlenmeyeceğini belirler. En basit haliyle, aktivasyon fonksiyonu bir adım fonksiyonudur, ancak senaryoya bağlı olarak farklı aktivasyon fonksiyonları kullanılabilir.

Bunlarla ilgili daha fazla bilgiyi sonraki bölümde göreceğiz.

Bir Perceptron'un Çalışması

İlk adımda, tüm girdi değerleri ilgili ağırlıkları ile çarpılır ve toplanır. Elde edilen sonuca ağırlıklı toplam denir ∑wi*xi, veya farklı bir şekilde ifade edilmesi,  x1*w1 + x2*w2 +…wn*xn. Bu toplam, girdilerin önemine göre uygun bir temsilini verir. Ek olarak, bir önyargı terimi b bu toplama eklenir ∑wi*xi + b. Önyargı, modelin performansını iyileştirmek için ayarlanabilen başka bir model parametresi (ağırlıklara ek olarak) olarak hizmet eder.

İkinci adımda, bir aktivasyon fonksiyonu f yukarıdaki toplamın üzerine uygulanır ∑wi*xi + b çıktısını elde etmek için Y = f(∑wi*xi + b). Senaryoya ve kullanılan etkinleştirme işlevine bağlı olarak, Çıktı ya ikili {1, 0} veya sürekli bir değer. 

Bir Perceptron'un Çalışması

(Genellikle bu iki adım çok katmanlı algılayıcılarda tek bir adım olarak temsil edilir, burada daha iyi anlamak için onları iki farklı adım olarak gösterdim)

Aktivasyon Fonksiyonları

Biyolojik bir nöron yalnızca belirli bir eşik aşıldığında ateşlenir. Benzer şekilde, yapay nöron da yalnızca girdilerin toplamı (ağırlıklı toplam) belirli bir eşik değerini, diyelim ki 0'ı aştığında tetiklenir. Sezgisel olarak, şöyle kural tabanlı bir yaklaşım düşünebiliriz –

∑wi*xi + b > 0 ise: çıktı = 1 değilse: çıktı = 0

Grafiği şöyle bir şey olacak:

Aktivasyon Fonksiyonları

Bu aslında Rosenblatt tarafından orijinal olarak kullanılan Birim Adımı (Eşik) etkinleştirme işlevidir. Ama gördüğünüz gibi, bu fonksiyon 0'da süreksizdir, bu nedenle matematiksel hesaplamalarda sorunlara neden olur. Yukarıdaki işlevin daha yumuşak bir versiyonu sigmoid işlevidir. 0 ile 1 arasında çıktı verir. Bir diğeri Hiperbolik tanjant(tanh-1 ile 1 arasında çıktı üreten fonksiyon. Günümüzde ReLU ve Leaky ReLU en popüler olarak kullanılan aktivasyon fonksiyonlarıdır. Derin ağlar üzerinde nispeten kararlıdırlar.

İkili Sınıflandırıcı Olarak Perceptron

Şimdiye kadar algılayıcının biyolojik ilhamını ve matematiğini gördük. Bu bölümde, bir algılayıcının lineer sınıflandırma problemini nasıl çözdüğünü göreceğiz.

Bazı kitaplıkları içe aktarma –

sklearn.datasets'ten make_blobs'u içe aktar matplotlib.pyplot'u plt olarak içe aktar numpy'yi np olarak içe aktar %matplotlib satır içi

kullanarak kukla bir veri kümesi oluşturma make_blobs scikit öğrenme tarafından sağlanan işlevsellik –

# X veri kümesi oluştur, Y = make_blobs(n_features = 2, center = 2, n_samples = 1000, random_state = 12)
# Veri kümesini görselleştirin plt.figure(figsize = (6, 6)) plt.scatter(X[:, 0], X[:, 1], c = Y) plt.title('Ground gerçeği', fontsize = 18) plt.göster()
İkili Sınıflandırıcı Olarak Perceptron

Diyelim ki mavi noktalar 1'ler ve yeşil noktalar 0'lar. Perceptron mantığını kullanarak bir karar sınırı oluşturabiliriz(hiper düzlem) grafikteki farklı veri noktalarını ayıran sınıflandırma için.

Daha fazla ilerlemeden önce, giriş vektörüne bir önyargı terimi (birler) ekleyelim –

# Giriş vektörüne bir sapma ekleyin X_bias = np.ones([X.shape[0], 3]) X_bias[:, 1:3] = X

Veri kümesi şöyle görünecek

veri kümesi

Burada, yukarıdaki veri kümesinin her satırı, girdi vektörünü (bir veri noktası) temsil eder. Bir karar sınırı oluşturmak için uygun ağırlıkları bulmamız gerekir. Ağırlıklar, aşağıdaki kural kullanılarak eğitimden 'öğrenilir' –

w = w + (beklenen — tahmin edilen) * x

algılayıcı

Bu, tahmin edilen sonucun temel gerçeğinden çıkarılması ve ardından bunun mevcut girdi vektörü ile çarpılması ve ağırlıkların yeni değerini elde etmek için eski ağırlıkların eklenmesi anlamına gelir. Çıktımız gerçek sınıfla aynıysa, ağırlıklar değişmez. Ancak tahminimiz gerçeklerden farklıysa, ağırlıklar buna göre artar veya azalır. Bu, ağırlıkların her yinelemede aşamalı olarak ayarlanmasıdır.

Ağırlık vektörüne rasgele değerler atayarak başlıyoruz, ardından eldeki hatayı ve verileri kullanarak bunları her yinelemede aşamalı olarak ayarlıyoruz –

# ağırlıkları rastgele değerlerle başlat w = np.random.rand(3, 1) print(w)

Çıktı:

[[0.37547448] [0.00239401] [0.18640939]]

Algılayıcının aktivasyon fonksiyonunu tanımlayın -

def activation_func(z): eğer z >= 1: 1 döndürürse: 0 döndürür

Ardından, algılayıcı öğrenme kuralını uygularız –

_ in range(100): i in range(X_bias.shape[0]): y = activation_func(w.transpose().dot(X_bias[i, :])) # Ağırlıkları güncelle w = w + (( Y[i] - y) * X_bias[i, :]).reshape(w.shape[0], 1)

Ağırlıkların tek geçişte birleşeceği garanti edilmez, bu nedenle öğrenme kuralını sürekli uygularken tüm eğitim verilerini perceptron algoritmasına 100 kez besleriz, böylece sonunda en uygun ağırlıkları elde etmeyi başarırız.

Şimdi, optimal ağırlıkları elde ettiğimize göre, Y = kullanarak her veri noktası için sınıfı tahmin edin f(∑wi*xi + b) veya Y = wT.x vektör biçiminde.

# veri noktalarının sınıfını tahmin etme sonuç_sınıfı = [X_bias'ta x için activation_func(w.transpose().dot(x))]

Karar sınırını ve tahmin edilen sınıf etiketlerini görselleştirin –

# birim vektöre dönüştür w = w/np.sqrt(w.transpose().dot(w))
# Sonuçları görselleştirin plt.figure(figsize = (6, 6)) plt.scatter(X[:, 0], X[:, 1], c = result_class) plt.plot([-10, -1], hyperplane ([-10, -1], w), lw = 3, c = 'kırmızı') plt.title('Karar sınırı ile algılayıcı sınıflandırması') plt.show()
Karar sınırı ile Perceptron sınıflandırması

Kesin bilgi görüntüsünü tahmin edilen sonuç görüntüsü ile karşılaştırabilir ve yanlış sınıflandırılan bazı noktaları görebilirsiniz. Doğruluğunu hesaplarsak yaklaşık %98'e geliyor (bunu okuyuculara bir alıştırma olarak bırakıyorum).

Görüyorsanız, burada orijinal verilerimiz oldukça ayrılmıştı, bu yüzden bu kadar iyi bir doğruluk elde edebiliyoruz. Ancak gerçek dünya verileri için durum böyle değil. Tek bir algılayıcı kullanarak, yalnızca doğrusal bir karar sınırı oluşturabiliriz, bu nedenle veriler birbirine karıştırılırsa algılayıcı algoritması kötü performans gösterecektir. Bu, tek algılayıcı modelinin sınırlamalarından biridir.

Son Notlar

Rosenblatt'ın algısının ardındaki biyolojik ilhamı anlayarak başladık. Daha sonra algılayıcının matematiğine ve aktivasyon fonksiyonlarına geçtik. Son olarak bir oyuncak veri seti kullanarak, perceptron'un farklı sınıflara ait veri noktalarını ayıran doğrusal bir karar sınırı oluşturarak temel sınıflandırmayı nasıl yapabildiğini gördük.

Yazar Hakkında

Pratik Nabriya şu anda Noida merkezli bir Analytics & AI firmasında çalışan yetenekli bir Veri Bilimcisidir. Makine öğrenimi, Derin öğrenme, NLP, Zaman Serisi Analizi, Veri işleme, SQL, Python konularında uzmandır ve Bulut ortamında çalışmaya aşinadır. Boş zamanlarında Hackathon'larda yarışmayı ve teknik makaleler yazmayı seviyor.

Bu makalede gösterilen medya Analytics Vidhya'ya ait değildir ve Yazarın takdirine bağlı olarak kullanılır.

Kaynak: https://www.analyticsvidhya.com/blog/2021/10/perceptron-building-block-of-artificial-neural-network/

Zaman Damgası:

Den fazla Analitik Vidhya