Tek gizli katmanlı (Sığ/Shallow) Sinir Ağı mimarisi (Ders-2)

derin öğrenme 101 iki ya da daha çok katmanlı derin sinir ağları

Tek perceptron,girdi verilerinde, kompleks non-lineer ilişkileri ya da hatta basit ilişkileri modellemek için yeterli kabiliyete sahip değildir. Bu yüzden birden çok perceptron, ayrı bir yazıda tartışılacak olan UNIVERSAL APPROXIMATION THEOREM (EVRENSEL YAKLAŞIM TEOREMİ) göre doğrusal olmayan herhangi bir ilişkiyi modellemeye yetecek kadar yetenekli bir YAPAY SİNİR AĞI (YSA) adı verilen karmaşık bir yapı (ağ/mimari) oluşturmak için bir araya getirilir.

Önemli tanımlar :

ANN-Artificial neural network -> Yapay sinir ağı

ANN aynı zamanda çok katmanlı perceptron (Multi layer perceptron-MLP) olarak da bilinir. perceptron koleksiyonunun, perceptron’lar arasındaki bağlantıların meydana getirdiği çoklu katmanlarda yığınlanmasıdır.

MLP – Tam bağlantılı sinir ağı (FCNNFully connected neural network) her bir katmandaki her bir nodun, bir sonraki katmandaki diğer nodlarla bağlantılı olmasıdır. Ancak, bir katman içindeki node’lar herhangi bir bağlantı paylaşmaz.

Sığ sinir Ağlarında Katmanlar :

Sinir ağındaki katmanları inceleyelim.

                Giriş katmanı (Input layer) :

Giriş katmanı x1,x2,xn olarak gelen girdileri alan input nöronlarından oluşur. MLP (FCNN)’de Giriş nöronu herhangi bir hesaplama icra etmez ve yalnızca ne aldıysa bunu çıktı olarak verir. Diğer bir deyişle, yalnızca girdi verisini alır. Bu yüzden, MLP’nin giriş nöronları yalnızca node’dur. Bias nöronu aynı zamanda buradadır ve daima 1 verisini çıkarır.

Keras’ta kullandığımız birçok farklı tip input katmanı vardır. En popüler olanı Dense (FC-Fully connected), Convolutional ve Recurrent’tır.

Girdi verisinin şekli, sinir ağında kullandığımız giriş katmanının tipine bağlıdır. Bu şu anlama gelir, girdi verisini giriş katmanının tipine göre şekillendirmeliyiz.

Giriş nöronları daima sayı alır. eğer biz resim, video, metin veya ses verisi sağlarsak, bunlar sayılara dönüştürülür. Bu sayılar ÇOK BOYUTLU DİZİLERDE-MULTI DIMENSIONAL ARRAYS yerleştirilir. (Derin öğrenme terminolojisinde TENSORLER olarak da bilinir.)

Dense (FC) girdi katmanı tipinde, giriş nöronu sayısı, giriş katmanının boyutunu belirler. x1,x2,x3, … olarak gösterilir. Bunlar ilk gizli katmanın girdileridir ve gizli katmandaki nöronlara ağırlıklar aracılığıyla tam bağlıdır (fully connected)  (ağırlıklar önem seviyesini kontrol eder. )

Giriş katmanının boyutu bir Hiperparametredir. Eğitim (Training) öncesi modelimizde tanımlamalıyız. Hiperparametrenin optimal değeri verilerden öğrenilmez. Buna karşılık, parametreler eğitim süreci sırasında verilerden optimal değerlerini öğrenirler.

                Gizli Katman (Hidden Layer):

Girdi ve çıktı katmanları arasındaki katmandır. Sığ bir sinir ağında, yalnızca 1 (bir) gizli katman vardır.

Derin sinir ağlarında, iki veya daha fazla gizli katmandan oluşur. Gizli katman sayısı programcı tarafından belirlenir. Hiperparametredir. Gizli katman sayısı, bir sinir ağının derinliğini ölçer.

Gizli katman sayısı arttıkça, sinir ağları veride daha kompleks ilişkileri modelleyebilir. Ancak, bu durumda eğitim daha uzun sürer ve aynı zamanda model veriyi overfit (aşırı uydurma) eğilimine gidebilir.

Çıkış Katmanı (Output Layer) :

Çıktı katmanı, çıkış nöronlarından oluşan nihai tahmini yapan katmandır. Çıkış katmanının boyutunu tanımlamalıyız. Bu çıkış katmanındaki nöron sayısının belirlenmesidir. Bu da aynı şekilde Hiperparametredir. Bunun değeri çözmek istediğimiz problemin tipine bağlıdır. Bazı popüler tip problemler ve tanımlanması gereken nöron/node sayısı..

Binary classification (ikili sınıflandırma)  : bir node,

Multi class classification (ikiden fazla sınıf) : çıkış katmanında, sınıf sayısı kadar nöron sayısı,

Regression (regresyon) : bir node,

Aslında ilerledikçe, problem tipleri hakkında daha fazla öğreneceğiz.

Bir sinir ağında girdilerin matrix gösterimi ve parametreler :

Tek perceptron’un aksine, sinir ağındaki hesaplamalar kolay değildir çünkü birçok perceptron dahil olur. Bu yüzden, girdi ve parametre değerlerini çok boyutlu dizi biçiminde ifade ederiz . (çok boyutlu dizi , derin öğrenme terminolojisinde tensör olarak geçer.)

X, girdi verilerini ifade eder. Boyutu 2 x 4 ‘tür. 2 satır, 4 sütun (özellik).  4 özellik olduğu için, giriş katmanın boyutu 4’tür.

W1 ve W2 ağırlık matrisleridir. W1, giriş katmanındaki ve gizli katman 1’deki nöronlarla ilişkili ağırlıkları (oklarla temsil edilen) içerir. Bu iki katman arasındaki bağlantılar, W1’deki ağırlıklar aracılığıyla gerçekleşir. Aynısı, gizli katman 1 ve çıktı katmanındaki nöronlarla ilişkili ağırlıkları (oklarla temsil edilen) içeren W2 için de geçerlidir.

W1’in ilk kolonu, gizli katmanın ilk nöronu ile ilgili ağırlıkları içerir.Aynı şekilde, W2’nin ilk kolonu, çıktı katmanının ilk nöronu-en üstteki nöron ile ilgili ağırlıkları içerir.

W1’in boyutu : 4×3 . W1’deki satır sayısı, giriş katmanının sütun sayısı ile eşittir. Aynı zamanda W1’in sütun sayısı/kolon sayısı  ,gizli katman 1’in size’ına eşittir.

W2’nin boyutu 3×2’dir. W2’deki satır sayısı, gizli katman 1’in sütun sayısına eşittir. W2’nin sütun sayısı/kolon sayısı, çıktı katmanın size’ına eşittir.

b1 ve b2 bias vektörleridir. b1, gizli katman 1’de nöronlarla ilgili bias değeridir.

b2, çıktı katmanındaki nöronlarla ilgili bias değeridir.

b1 ve b2 bias vektörleri, b1’deki element sayısı ile gizli katman 1’in size’I aynıdır.

Bir sinir ağı içinde Hesaplama:

Perceptron’da yaptığımız hesaplamadan farklı olarak (skalerler ile), matris ve vektörleri kullanacağız. Çünkü artık birden çok perceptron var. tek perceptron değil.

z1 matrisini hesaplayalım.

z1=X*W1+b1

import numpy as np  
# Input, X
X = np.array([[3, 1, 7, 5], [2, 2, 6, 8]])  

# Weight matrix, W1
W1 = np.array([[0.1, 0.3, 3.5], [0.2, 0.5, 0.3],               
[0.2, 1.2, 0.0], [0.3, 0.8, 0.3]])  

# Bias vector, b1
b1 = np.array([1.0, 3.3, 5.4])  
z1 = np.dot(X, W1) + b1 print(z1)

Sonuç (z1) :

[[ 4.4 17.1 17.7]  
[ 5.2 18.5 15.4]]

4.4’ü lineer fonksiyonun değeri olarak düşünebilirsiniz. z1

ReLU aktivasyon fonksiyonu kullanarak gizli katman 1’in aktivasyonunu hesaplayalım.

Başka bir deyişle, gizli katman 1’in aktivasyonunu almak için z1 üzerinde ReLU aktivasyon fonksiyonunu uygularız.

a1 = ReLU(z1)

ReLU fonksiyonunda, eğer girdi negatifse, çıktı 0’dır. Yoksa, girdi neyse çıktı o dur.

def relu(z):
return np.maximum(0.0, z)
# Activation, a1
a1 = relu(z1)
print(a1)

Şimdi giriş değerimiz a1’dir. W2 ağırlıkları ile çarpıp, b2 bias değerini ekleyerek z2 değerini bulacağız.

# Input, a1 (already calculated)  
# Weight matrix, W2
W2 = np.array([[0.2, 0.7], [0.3, 0.1], [0.5, 0.1]])  
# Bias vector, b2
b2 = np.array([2.3, 3.0])  
z2 = np.dot(a1, W2) + b2
print(z2)

Başka bir deyişle, çıktı katmanının aktivasyonunu elde etmek için z2’ye sigmoid işlevini uygularız. Bu, son çıktıdır, y.

y = a2 = sigmoid(z2)

Sigmoid fonksiyonu :

# Define sigmoid

                def sigmoid(z):

                  return 1 / (1 + np.exp(-z))

                # Activation, a2=y

                a2 = sigmoid(z2)

                print(a2)

Hesaplamaların sonucunda 2×2’lik bir nihai çıktı elde ettik.

Çıktı katmanındaki node sayısı, kolon sayısına eşittir. Çıktı matrisindeki satır sayısı, Veri setindeki gözlem sayısına eşittir.

Nihai çıktının yorumlaması :

Multi label sınıflandırmasını örneği olarak düşünülebilir. Örneğin giriş katmanında iki film verisi ile besliyoruz. Sınıflar çocuklar için uygun olup olmadığı ve macera filmi olup olmadığı ile ilgili olsun.

Macera (binary : 1-evet, 0-hayır) , çocuklar için uygunluk durumu (binary: 1-uygun, 0-uygun değil)

Elde ettiğimiz nihai çıktıya göre, her iki film macera filmi ve çocuklar için uygundur. Elde ettiğimiz çıktının yorumu bu şekilde olur.

Her bir sınıf binary değer olan 0 veya 1 alır. bu yüzden, çıkış katmanında node’lar için sigmoid aktivasyon fonksiyonunu kullanıyoruz.

Özet :

Yukarıda anlattığımız ve yaptığımız şeyler, sinir ağının eğitim sürecini yansıtmaz. Yaptığımız hesaplamalar hali hazırda eğitilmiş olan sinir ağı için tahmin işlemi olarak düşünülebilir. Örnekte de belirttiğimiz üzere W1,W2 b1 ve b2 parametrelerinin değerleri elimizde yani bir eğitim sonrası optimum değerler elde edilmiş, bu elde edilmiş değerlere göre işlem gerçekleştirdik. Eğitim öncesi ağırlıkların değerlerini bilemeyiz.

Örneğimizde eğitilebilir parametre sayısı 23’tür. Bu w1,w2,b1 ve b2 elementlerinin toplamıdır.

İlerleyen aşamalardaki hesaplamaları, burada yaptığımız gibi elle değil, çeşitli kütüphaneler kullanarak yapacağız. Birkaç satır kodla , ilgili kütüphaneler aracılığıyla yapacağız.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

error: Yapay ZekAi : İçerik Korumalıdır !!