Upload
ders-notlari
View
145
Download
9
Embed Size (px)
Citation preview
Kaynak: http://adilmoujahid.com/posts/2016/06/introduction-deep-learning-python-caffe/
Caffe ve Python ile Derin Öğrenmeye Giriş
Derin öğrenme, makine öğrenmesindeki yeni bir eğilimdir. Bilgisayarla görme, konuşma tanıma ve
doğal dil işleme alanlarında birçok yeni başarı elde etti.
Bu blog yayınının amacı size derin öğrenmeye uygulamalı olarak bir giriş yapmaktır. Bunu yapmak için,
konvolüsyonel sinir ağı (CNN) ve Kaggle veri seti denilen derin bir öğrenme algoritmasını kullanarak bir
Kedi / Köpek resim sınıflandırıcısı oluşturacağız.
Bu yazı 2 ana kısma ayrılmıştır. Birinci bölüm derin öğrenmenin ardındaki bazı temel kavramları
kapsarken, ikinci bölüm uygulamalı formatta hazırlanmıştır. Uygulamalı dersin (bölüm 4) ilk
bölümünde, sıfırdan konvülasyonel sinir ağı kullanan bir Kedi / Köpek resim sınıflandırıcısı
oluşturacağız. Eğiticinin ikinci bölümünde (bölüm 5), aktarım öğrenme adı verilen konvolüsyon sinir
ağlarının eğitimi için gelişmiş bir tekniği ele alacağız. Sınıflandırıcıyı oluşturmak için bazı Python
kodlarını ve Caffe adı verilen popüler bir açık kaynaklı derin öğrenme kütüphanesini kullanacağız.
Sınıflandırıcı % 97'lik bir sınıflandırma doğruluğu elde edebilecek hale gelecektir.
Bu yazının sonunda, konveksiyonel sinir ağlarının nasıl çalıştığını anlayacaksınız ve bu ağların
oluşturulması için gerekli olan adımları ve kodu öğrenmiş olacaksınız.
Bu dersin kaynak kodu bu github deposunda bulabilirsiniz.
1. Problem Tanımı
Bu yazıda, Kaggle'dan bir veri kümesi kullanacağız. Veri seti, köpeklerin ve kedilerin 25.000 imajından
oluşmaktadır.
Amacımız yeni hayali hayvanı (kedi veya köpeği) yeni görülen imgelerde bulabilen bir makine öğrenme
algoritması oluşturmaktır.
Makine öğrenmede, bu tip problemler sınıflandırma olarak adlandırılır.
2. Geleneksel Makine Öğrenme ve Derin Öğrenme'yi kullanarak sınıflandırma
Bir makine öğrenme algoritması kullanılarak sınıflandırma iki aşamada gerçekleşir:
Eğitim aşaması: Bu aşamada, görüntülerden ve ilgili etiketlerden oluşan bir veri kümesi kullanarak bir
makine öğrenme algoritması yetiştiriyoruz.
Tahmin aşaması: Bu aşamada, eğitim görmüş modeli kullanarak eğitim veri setinde olmayan
görüntülerin etiketlerini tahmin etmek için kullanırız.
Resim sınıflandırmanın eğitim aşamasında karşılaşılan problemin iki ana adımı vardır:
Özellik Çıkarma: Bu aşamada, makine öğrenme algoritması tarafından kullanılacak yeni özellikler
çıkarmak için alan bilgisinden faydalanırız. HoG ve SIFT, görüntü sınıflandırmasında kullanılan
özelliklerin örnekleridir.
Model Eğitimi: Bu aşamada, makine öğrenme modelini eğitmek için resimlerin özelliklerinden ve ilgili
etiketlerden oluşan temiz bir veri kümesini kullanıyoruz.
Tahmin aşamasında, yeni görüntülere aynı öznitelik çıkarma sürecini uygularız ve özellikleri eğitilmiş
makine öğrenme algoritmasına geçirerek etiketi tahmin ederiz.
Geleneksel makine öğrenimi ve derin öğrenme algoritmaları arasındaki ana fark, feature engineering.
Geleneksel makine öğrenme algoritmalarında, özellikleri elle hazırlamamız gerekir. Buna karşılık, derin
öğrenme algoritmalarında, mühendislik otomatik olarak algoritma tarafından yapılır. feature
engineering zor, zaman alıcı ve alan uzmanlığı gerektirir. Derin öğrenme vaadi, daha az ya da hiç
feature engineering olmaksızın geleneksel makine öğrenimiyle karşılaştırıldığında daha doğru makine
öğrenme algoritmalarıdır.
(*feature engineering:https://en.wikipedia.org/wiki/Feature_engineering)
Derin öğrenme, birçok işleme katından oluşan bir sınıf yapay sinir ağları (ANN) anlamına gelir. *YSA
çok uzun yıllardır varlığını sürdürüyordu, ancak YSA'ların derin mimarilerini denemek için girişimler,
Geoffrey Hinton'un 2000'lerin ortasında gerçekleştirdiği atılım çalışmalarına kadar başarısız oldu.
Algoritmik yeniliklere ek olarak, GPU'ları kullanarak bilgi işlem yeteneğinde artış ve daha geniş veri
kümeleri toplamak, son zamanlarda derin öğrenme dalgalanmalarına yardımcı olan faktörlerdir.
(YSA/ANN: Yapay Sinir Ağı)
3.1. Yapay Sinir Ağları (ANN’s)
Yapay sinir ağları (YSA), biyolojik sinir ağlarından esinlenen bir makine öğrenme modelleri ailesidir.
Yapay Sinir Ağları vs Biyolojik Sinir Ağları
Biyolojik Nöronlar insan beyninin temel bileşenleridır. Bir nöron, bir hücre gövdesi, dendritler ve bir
aksondan oluşur. Elektrik sinyalleri yayarak bilgiyi diğer nöronlara işler ve iletir. Her nöron kendi
dendritlerinden girdi sinyalleri alır ve akson boyunca çıktı sinyalleri üretir. Akson dallanıp sinapslar
vasıtasıyla diğer nöronların dendritlerine bağlanır.
Nöronların çalışma şekli için temel bir model şu şekildedir: Her sinaps, öğrenilebilir bir güce sahiptir ve
bir nöronun bir başkasına etkisinin gücünü kontrol eder. Dendritler sinyalleri hedef nöronun vücuduna
taşıdıkları yerde toplarlar. Eğer nihai toplam belirli bir eşiğin üstündeyse, nöron ateþ edilerek
aksonunda bir diklik gönderilir. [1]
Yapay nöronlar, biyolojik nöronlardan esinlenir ve yukarıda açıklanan modeli hesaplama formunda
formüle etmeye çalışırlar. Bir yapay sinir hücresi, ağırlıkları kendisine bağlı olan sonlu sayıda girişe ve
bir aktive fonksiyonuna (aktarım fonksiyonu olarak da adlandırılır) sahiptir. Nöronun çıkışı,
ağırlıklandırılmış girişlerin toplamına uygulanan aktivasyon işlevinin sonucudur. Yapay sinir ağları
oluşturmak için yapay sinirler birbirlerine bağlanır.
Feedforward Sinir Ağları
Feedforward Sinir Ağları, Yapay Sinir Ağlarının en basit şeklidir.
Bu ağların 3 katman türü vardır: Giriş katmanı, gizli katman ve çıktı katmanı. Bu ağlarda, veriler giriş
katmanından gizli düğümler (varsa) ve çıktı düğümleri arasında geçiş yapar.
Aşağıda, 2 gizli katmana sahip, tamamen bağlı bir feedforward sinir ağı örneği verilmiştir. "Tam bağlı"
her düğüm bir sonraki katmandaki tüm düğümlere bağlı olduğu anlamına gelir.
Unutmayın, gizli katmanların sayısı ve bunların boyutu yalnızca bağımsız parametrelerdir. Gizli
katmanlar ne kadar büyük ve derin olursa, teoride modelleyebileceğimiz daha karmaşık modeller de o
kadar artar.
Aktivasyon Fonksiyonları
Aktivasyon fonksiyonları, yapay sinir hücrelerine giren girdilerin ağırlıklı toplamını dönüştürür. Bu
işlevler, verilerin karmaşık modellerini kodlamak için doğrusal olmayan olmalıdır. En popüler
aktivasyon fonksiyonları Sigmoid, Tanh ve ReLU'dur. ReLU, derin sinir ağlarında en popüler aktivasyon
fonksiyonudur.
Yapay Sinir Ağı Eğitimi
Eğitim aşamasının amacı ağın ağırlıklarını öğrenmektir. Bir yapay sinir ağı yetiştirmek için 2 elemente
ihtiyacımız var:
Eğitim verileri: Resim sınıflandırması durumunda, eğitim verileri görüntülerden ve ilgili etiketlerden
oluşur.
Loss fonksiyonu: Tahminlerin hatalılığını ölçen bir fonksiyon.
Yukarıdaki 2 elemente sahip olduktan sonra, geriye doğru yayma (backpropagation) olarak
adlandırılan ve degradasyon inişiyle (veya türevlerinden biri) bir algoritma kullanarak ANN'yi eğitiriz.
Geri yayılımın ayrıntılı bir açıklaması için, bu makaleyi öneriyorum.
3.2. Dönüşümsel Sinir Ağları (CNN'ler veya Konvetsiyonlar)
Dönüşümlü sinir ağları, ileri besleme ağlarının özel bir türüdür. Bu modeller, görsel bir korteksin
davranışını taklit etmek için tasarlanmıştır. CNN'ler görsel tanıma görevlerinde çok iyi performans
gösterirler. CNN'lerin konvolüel katmanlar ve katman havuzu katmanları adı verilen özel katmanları
vardır ve bu katmanlar bazı görüntü özelliklerini kodlamak için ağa izin verir.
Konvolüsyon Katmanı
Bu katman, görüntünün uzamsal olarak kaydırıldığı, filtrenin girdileri ile girdi görüntüsü arasında nokta
ürünleri hesaplayan bir dizi öğrenilebilir filtreden oluşur. Filtreler giriş görüntüsünün tam derinliğine
kadar uzanmalıdır. Örneğin, 32x32 boyutundaki renkli bir görüntüye 5x5 boyutunda bir filtre
uygulamak istersek, filtrenin resmin 3 renk kanalının (Kırmızı, Yeşil, Mavi) tamamını kapsayacak şekilde
derinlik 3 (5x5x3) olması gerekir. Bu filtreler, görüntülerde aynı özel yapıyı gördüklerinde etkinleştirilir.
Havuzlaşma Katmanı
Havuzlaşma, doğrusal olmayan aşağı örneklemenin bir biçimidir. Havuz katmanının amacı, ağdaki
parametrelerin ve hesaplamanın miktarını azaltmak ve dolayısıyla aşırı uygunluğu kontrol etmek için
temsilin uzamsal boyutunu aşamalı olarak azaltmaktır. Havuzlamayı uygulamak için, maksimum
havuzlamanın en yaygın olduğu birkaç işlev vardır. Havuzlaşma sıklıkla, her derinlik diliminde 2 adımla
uygulanan 2x2 boyutlu filtrelerle uygulanır. İki boyutlu 2x2 boyutlu bir havuzlama katmanı, giriş
görüntüsünü orijinal boyutunun 1 / 4'ü kadar küçültür. [2]