Skip to content

3.4. [BİLGİ] Yapay Sinir Ağı ile Sınıflandırma 101

ayyüce kızrak edited this page May 18, 2019 · 4 revisions

Özetle

Bir sonraki paragrafta koyu olarak belirtilen tüm terimler zaten biliyorsanız, bir sonraki uygulamaya geçebilirsiniz. Eğer derin öğrenmeye yeni başlıyorsanız hoş geldiniz, ve lütfen okumaya devam edin.

Bir yapay sinir ağı sınıflandırıcısı birkaç nöron katmanından oluşur. Görüntü sınıflandırma için bunlar yoğun veya daha sık, evrişimli katmanlar olabilir.Genellikle relu aktivasyon fonksiyonu ile aktifleştirilirler. Son katman, sınıflar kadar çok nöron kullanır ve softmax ile aktive edilir. Sınıflandırma için, cross-entropy, one-hot encoded etiketleri (yani doğru cevapları) sinir ağı tarafından tahmin edilen olasılıklarla karşılaştırarak en yaygın kullanılan kayıp fonksiyonudur. Yitimi en aza indirmek için AdamOptimizer gibi momentumlu bir optimize edici seçmek ve eğitim görüntüleri ve etiketlerini yığınlar üzerinde eğitmek en iyi yoldur.

Katmanlar dizisi olarak oluşturulmuş modeller için Keras, sıralı (sequential) API sunar.Örneğin, üç yoğunluk katmanı (dense layer) kullanan bir görüntü sınıflandırıcı Keras'a şu şekilde yazılabilir:

model = tf.keras.Sequential([
    tf.keras.layers.Flatten(input_shape=[192, 192, 3]),
    tf.keras.layers.Dense(500, activation="relu"),
    tf.keras.layers.Dense(50, activation="relu"),
    tf.keras.layers.Dense(5, activation='softmax') # classifying into 5 classes
])

# this configures the training of the model. Keras calls it "compiling" the model.
model.compile(
  optimizer='adam',
  loss= 'categorical_crossentropy',
  metrics=['accuracy']) # % of correct answers

# train the model
model.fit(dataset, ... )

Yoğun sinir ağı (Dense Neural Network)

Görüntüleri sınıflandırmak için en basit sinir ağıdır. Katmanlar halinde düzenlenmiş "nöronlar" dan oluşmuştur. İlk katman girdi verilerini işler ve çıktıları ile diğer katmanları besler."Yoğun" olarak adlandırılır, çünkü her nöron önceki katmandaki tüm nöronlara bağlanır.

Görüntü ile ağı besleyebilmek için tüm piksellerinin RGB değerleri uzun bir vektörde düzleştirilerek ve giriş olarak kullanılabilir.Görüntü tanıma için en iyi teknik değildir ancak daha sonra bu yapıyı geliştireceğiz.

Nöronlar, aktivasyonlar, RELU

Bir "nöron", tüm girdilerinin ağırlıklı bir toplamını hesaplar, "önyargı" (bias) adı verilen bir değer ekler ve sonucu "aktivasyon işlevi" adı verilen bir yöntemle besler. Ağırlıklar ve önyargı ilk başta bilinmemektedir. Bunlar rastgele olarak başlayacak ve birçok bilinen veri üzerinde eğitilerek sinir ağı tarafından öğrenilecek.

En popüler aktivasyon işlevi Rektifiye Doğrusal Birim (Rectified Linear Unit-RELU) olarak adlandırılır. Yukarıdaki grafikte görebileceğiniz gibi çok basit bir fonksiyondur.

Softmax aktivasyonu

Yukarıdaki ağ 5 nöron katmanla bitiyor çünkü çiçekleri 5 kategoriye ayırıyoruz (gül, lale, karahindiba, papatya, ayçiçeği). Ara katmanlardaki nöronlar, klasik RELU aktivasyon işlevi kullanılarak etkinleştirilir.Yine de son katmanda, bu çiçeğin gül, lale vb. olma ihtimalini temsil eden 0 ile 1 arasındaki sayıları hesaplamak istiyoruz. Bunun için "softmax" adında bir aktivasyon fonksiyonu kullanacağız.

Bir vektöre softmax uygulanması, her bir elemanın üsteli alınması ve sonra vektörün tipik olarak L1 normu (mutlak değerlerin toplamı) kullanılarak normalleştirilmesiyle yapılır,böylece değerler 1'e kadar eklenir ve olasılık olarak yorumlanabilir.

Neden "softmax" softmax olarak adlandırılıyor? Üstel, artan bir fonksiyondur. Nöronların çıktıları arasındaki farkları artıran yapıdadır. Daha sonra, vektör normalize edildiğinde normlara egemen olan en büyük eleman, 1'e yakın bir değere normalize olurken diğer tüm elemanlar büyük bir değere bölünür ve 0'a yakın bir şeye normalleştirilir. Elde edilen vektör, hangisinin kazanan sınıfı "max" olduğunu açıkça gösterir, ancak değerlerinin orijinal göreli sırası korunurr, dolayısıyla "yumuşak" olur.

Çapraz entropi kaybı (Cross-entropy loss)

Şimdi sinir ağımız girdi görüntülerinden tahminler ürettiğinden, ne kadar iyi olduklarını, yani ağın bize ne söylediğini ve genellikle "etiketler" denilen doğru cevapları arasındaki mesafeyi ölçmemiz gerekir.Veri kümesindeki tüm görüntüler için doğru etiketlere sahip olduğumuzu unutmayın.

Herhangi bir mesafe ölçümü işe yarar, ancak sınıflandırma problemleri için “çapraz entropi mesafesi” en etkili olanıdır. Buna bizim hatamız veya “kayıp” işlevi diyeceğiz:

"One-hot" kodlama örneğin "3) karahindiba" etiketi için 5 değerlik bir vektör kullanarak temsil edilir; bu vektörde yalnızca 3. değer '1' alır bunun dışındaki tüm değerler sıfır olur. Bu vektör karahindiba olma olasılığını% 100 temsil eder. Sinir ağımız da öngörülerini 5 olasılık değerinin bir vektörü olarak verir. Karşılaştırma yapmak kolaydır.

Stokastik Gradyan

Sinir ağını "eğitmek" aslında, çapraz entropi kaybını en aza indirgemek üzere ağırlık ve önyargıları ayarlamak için eğitim görüntüleri ve etiketlerinin kullanılması anlamına gelir. Peki bu işlem nasıl çalışıyor?

Çapraz entropi, ağırlıkların, önyargıların, eğitim görüntüsünün piksellerinin ve bilinen sınıfının bir fonksiyonudur.

Çapraz entropinin kısmi türevlerini tüm ağırlıklara ve tüm önyargılara göre hesaplarsak, belirli bir görüntü, etiket ve şimdiki ağırlık ve önyargı için hesaplanan bir "gradyan" elde ederiz. Gradyanı hesaplamak için milyonlarca ağırlık ve önyargıya sahip olabileceğimizi unutmayın ve bu işlem uğraştırıcı olacağa benziyor.Neyse ki, Tensorflow bunu bizim için yapıyor.Bir gradyanın matematiksel özelliği, "yukarı" yı göstermesidir.Çapraz entropinin düşük olduğu yere gitmek istediğimiz için ters yöne gidiyoruz. Ağırlıkları ve önyargıları, gradyanın bir kısmıyla güncelleriz. Daha sonra aynı şeyi tekrar tekrar bir sonraki eğitim görüntülerini ve etiketlerini bir eğitim döngüsünde kullanarak yapıyoruz. Bu işlem bu minimumun benzersiz olduğunu garanti etmese de, çapraz entropinin minimum olduğu bir yere yaklaşır.

"Öğrenme Hızı": Ağırlıklarınızı ve önyargılarınızı, her bir yinelemedeki gradyanın uzunluğu boyunca güncelleyemezsiniz. Bu yedi lig botları giyerken bir vadinin dibine inmeye çalışmak gibi olurdu. Vadinin bir tarafından diğerine atlıyor gibi olacaksınız. Dibe ulaşmak için daha küçük adımlar atmanır gerekir, yani genellikle bu gradyanın yalnızca 1 / 1000 gibi bir kısmına denk gelir. Bu kesir "öğrenme oranı" olarak adlandırılır.

Mini-batching ve momentum

Gradyanınızı yalnızca bir örnek resim üzerinde hesaplayabilir ve hemen ağırlıkları ve önyargıları güncelleyebilirsiniz. Ancak bunu örneğin 128 resim gibi bir yığın üzerinde yaparak, farklı örnek resimlerin getirdiği kısıtlamaları daha iyi temsil eden ve bu nedenle yakınsamaya neden olan bir gradyan elde eder ve çözüme doğru daha hızlı ilerleyebilirsiniz. Mini yığının boyutu ayarlanabilir bir parametredir.

Bazen "stokastik gradyan iniş" adı verilen bu tekniğin başka, daha pragmatik bir faydası var: yığınlarla çalışmak, daha büyük matrislerle çalışmak anlamına gelir ve bunlar genellikle GPU'larda ve TPU'larda daha kolay optimize edilir.

Yakınsama yine de biraz karmaşık olabilir ve gradyan vektörünün tümünün sıfır olduğunda durabilir.Peki bu minimumu bulduğumuz anlamına mı gelir? Her zaman değil. Gradyan bileşeni minimum veya maksimumda sıfır olabilir. Milyonlarca eleman içeren bir gradyan vektöründe, eğer hepsi sıfırsa, her sıfırın bir asgari değere karşılık gelme olasılığı ve hiçbirinin bir maksimum noktaya ulaşma olasılığı oldukça küçüktür. Birçok boyutta bir alanda, eyer noktaları oldukça yaygındır ve biz de bunlarda durmak istemiyoruz.

Görsel: bir eyer noktası. Gradyan 0'dır, ancak her yönde minimum değildir. (Resim kaynağı Wikimedia: Nicoguaro tarafından - Kendi eseri, CC BY 3.0)

Çözüm, optimizasyon algoritmasına bir miktar ivme kazandırmak ve böylece engel noktalarının durmadan ilerleyebilmektir.

Tensorflow kütüphanesi, tf.train.GradientDescentOptimizer ile başlayan bir dizi optimize edici sunar. Yerleşik bir momentuma sahip daha gelişmiş popüler optimize ediciler tf.train.RMSPropOptimizer veya tf.train.AdamOptimizer'dir.

Sözlük

yığın veya mini-yığın : eğitim her zaman eğitim verisi yığınları ve etiket kümeleri üzerinde gerçekleştirilir. Bunu yapmak algoritmanın yaklaşımına yardımcı olur. "Yığın" boyutu tipik olarak veri tensörlerinin ilk boyutudur. Örneğin [100, 192, 192, 3] şeklindeki bir tensör, piksel başına üç değere (RGB) sahip 192x192 piksellik 100 görüntü içerir.

çapraz entropi kaybı: sınıflandırıcılarda sıklıkla kullanılan özel bir kayıp fonksiyonudur.

yoğunluk katmanı: her nöronun önceki tabakadaki tüm nöronlara bağlandığı bir katmandır.

Öznitelikler: Bir sinir ağındaki girdiler bazen "öznitellikler" olarak adlandırılır. İyi tahminler almak için bir veri kümesinin hangi bölümlerinin (veya bölümlerin kombinasyonlarının) bir sinir ağını besleyeceğini bulma sanatına "öznitelik mühendisliği" denir.

etiketler: "sınıflar" için başka bir ad veya denetlenen sınıflandırma problemindeki doğru cevaplardır.

Öğrenme hızı: Eğitim döngüsünün her yinelemesinde ağırlıkların ve önyargıların güncellenme derecesinin kesridir.

logits: Aktivasyon fonksiyonu uygulanmadan önce bir nöron katmanının çıkışlarına "logits" denir. Terim "lojistik fonksiyon" namı diğer "sigmoid fonksiyonu" en popüler aktivasyon fonksiyonu olarak kullanılır."Lojistik işlevinden önce nöron çıktıları" "logits" olarak kısaltılmıştır.

yitim: sinir ağı çıktılarını doğru cevaplarla karşılaştıran hata fonksiyonudur.

nöron: Girdilerinin ağırlıklı toplamını hesaplar, önyargı ekler ve sonucu bir aktivasyon işlevi ile besler.

one-hot kodlama: 5 sınıflı bir yapıda 3'ü kodlamak, 5 değerli bir vektörün yalnızca 3. değerinin 1 diğer tüm değerlerin 0 olarak kodlanmasıdır.

relu: düzeltilmiş doğrusal birim. Nöronlar için popüler bir aktivasyon işlevidir.

sigmoid: eskiden popüler olan ve özel durumlarda hala yararlı olan başka bir aktivasyon işlevidir.

softmax: bir vektöre etki eden, en büyük bileşen ile diğerleri arasındaki farkı artıran ve aynı zamanda bir olasılık vektörü olarak yorumlanabilmesi için vektörün toplamı 1 olacak şekilde normalleştiren özel bir aktivasyon işlevidir. Sınıflandırıcılarda son adım olarak kullanılır.

tensör: Bir "tensör" bir matris gibidir, ancak rasgele boyutlardadır.1 boyutlu bir tensör bir vektördür. 2 boyutlu bir tensör bir matristir. 3, 4, 5 veya daha fazla boyuta sahip tensörlere sahip olabilirsiniz.


→ Gelecek Bölüm: 3.5. [YENİ BİLGİ] Evrişimli Sinir Ağları

Clone this wiki locally