Professional Documents
Culture Documents
Giriş
DR. ŞAFAK KAYIKÇI
Yapay Zeka, Makine Öğrenmesi, Derin Öğrenme
Yapay Zeka
Yapay zeka, 1950’li yıllarda yeni gelişmeye başlamış ve bilgisayar bilimcilerin bugün de cevabını aradığı
"Bilgisayarlar düşünebilir mi?" sorusuna cevap ararken ortaya çıkmıştır.
Yapay zeka kısaca "normalde insanlar tarafından yerine getirilen düşünsel faaliyetleri otonom hale
getirmek" olarak tanımlanabilir.
Birçok uzman, insan seviyesinde yapay zekanın bilgiyi işleyebilecek yada değiştirecek kuralların
geliştiriciler tarafından elle kodlanması ile mümkün olabileceğine uzun süre inanmamıştır. Bu
yaklaşıma "sembolik yapay zeka" denilmiş ve 1950'lerden 1980'lerin sonuna kadar egemen görüş
olmuştur. Sembolik yapay zeka akımı, uzman sistemlerin 1980'lerde patlaması ile zirveye ulaşmıştır.
Her ne kadar satranç gibi iyi tanımlanmış problemlerde iyi çözümler sunduğu kanıtlanmış olsa da
görüntü sınıflandırma, ses tanıma ve diller arasında çeviri yapma gibi daha karmaşık problemlerde
istenen sonuçları pek de sağlayamadığı görülmüştür.
İleriki yıllarda yapay zeka yaklaşımının yerini almak ve karmaşık problemleri çözmek için makine
öğrenmesi yaklaşımı ortaya çıkmıştır.
Makine Öğrenmesi
Lady Ada Lovelace, bilinen ilk maksatlı mekanik bilgisayar olan "Analytical Engine"
mucidi olan Charles Babbage'ın arkadaşı ve destekçisiydi. Her ne kadar zamanına
göre ileri olsa da "Analitik Makine" tasarlandığı 1830-1840 yıllarında henüz genel
maksatlı bilgisayar kavramı da keşfedilmediğinden bu noktada genel maksat
bilgisayarı olarak da değerlendirilmemelidir. Kendisinden istenilen matematiksel
analizleri yerine getirmek için birtakım mekanik işlemler yerine getirdiğinden "Analitik
Makine" olarak adlandırılmıştır. Ada Lovelace 1843'te yaptığı bir konuşmada "Analitik
makine herhangi bir şeyi yaratmak iddiasında değildir.. Varlık sebebi bizim halihazırda
bildiğimiz, yapabildiğimiz şeyleri yapabilmek için bize yardım etmektir." demiştir.
Makine Öğrenmesi
Yapay zeka kavramının öncülerinden Alan Turing yapay zekanın ana kavram ve
konseptlerini şekillendiren "Turing Testi" ni anlattığı 1950 yılında yayımlanan
"Hesaplama Makinesi ve Zeka"1 isimli makalesinde Ada Lovelace tarafından
söylenen bu söyleme katılmadığı için "Ada Lovelace İtirazı" olarak anılmıştır. Turing,
Ada Lovelace'dan alıntı yaptıktan sonra gerçekten genel maksatlı bilgisayarların
öğrenme ve özgünlüğü konusunda tartışıp Ada Lovelace'ın aksine kendilerinin bunu
yapabildiklerini söylemiştir.
1A. M. Turing, “Computing Machinery and Intelligence,” Mind 59, no. 236 (1950): 433-460
Makine Öğrenmesi
Makine öğrenmesi şu temel sorulardan ortaya çıkmaktadır :
Acaba bilgisayarların bizim herhangi bir şeyi nasıl yaptığımızın ötesine geçerek belirli bir işlemi
kendi kendine yapabilmeyi öğrenebilmesi mümkün müdür?
Bilgisayarların bize sürpriz yapması mümkün müdür?
Geliştiricilerin veriden öğrenmek için elle kurallar oluşturmasından ziyade bilgisayarlar veriye
bakarak bu kuralları kendileri öğrenebilir mi?
Makine öğrenmesi, veri ve beklenen çıktıları kullanarak yeni verilere özgün cevaplar üretilebilecek kuralları
öğrenir.
Makine Öğrenmesi
Makine öğrenmesi sistemleri elle programlanmak yerine eğitilirler. Göreve yönelik verilen örneklere
bakarak istatistiksel örüntüleri ortaya çıkartıp görevi otomatikleştirecek kuralları ortaya koyar.
Örneğin, tatil fotoğraflarınızı tasnif edecek bir program yazmak isteseniz insanlar tarafından
etiketlenmiş örnek fotoğrafları makine öğrenme sisteminizi eğitmek için kullanmanız halinde sistem
yeni fotoğrafların hangi etikete ait olduğunu ilişkilendirebilecek istatiksel kuralları kendi kendine
öğrenebilir.
Her ne kadar makine öğrenmesi 1990'larda parlamaya başlamış olsa da kısa sürede hızlı donanım ve
büyük veri setlerinin varlığı sayesinde yapay zekanın en meşhur ve başarılı alt dalı olmuştur. Makine
öğrenmesi istatistik ile yakından ilgili olsa da birçok kritik yönden istatistikten ayrılmaktadır. Makine
öğrenmesi büyük ve karmaşık veri setleri (her biri binlerce piksel içeren milyonlarca görüntüden
oluşan veri setleri) ile çalışmaya meyillidir ki bu noktada klasik istatistik yöntemlerinden Bayes analizi
yetersiz kalacaktır. Sonuç olarak; makine öğrenmesi ve özellikle derin öğrenme daha az matematik
tabanlı olup daha çok mühendislik odaklıdır. Teorik olmaktan çok gözleme ve pratik programlamaya
dayanmaktadır.
Veriden Gösterimi Öğrenmek
Derin öğrenmeyi tanımlayabilmek, ne olduğunu anlayabilmek ve diğer makine öğrenmesi
yaklaşımları ile farkını anlayabilmek için ilk önce makine öğrenmesi algoritmalarının nasıl çalıştığı
hakkında bilgi sahibi olmalıyız. Makine öğrenmesinin, girdileri ve çıktıları sağladıktan sonra
kuralları kendisinin bulduğunu belirtmiştik. Dolayısıyla makine öğrenmesi için ihtiyaç
duyduğumuz şeyler :
Veri Giriş Noktaları : Eğer görev ses tanıma ise veriler insan konuşmaları içeren ses dosyaları
olabilir. Görev görüntü etiketleme ise veriler görüntüler olabilir.
Beklenen Çıktılar : Ses tanımada beklenen çıktılar insanlar tarafından çıkarılan ses dosyası
dökümleri olabilir. Görüntü tanımada ise görüntünün neye aşt olduğu –kedi, köpek vb. – olabilir.
Algoritmanın Başarımının Ölçülmesi : Beklenen çıktı ile gerçekleşen arasındaki farkın ölçülmesi
gerekmektedir. Ölçüm, algoritmanın kendi başarımını en iyileştirmesi için geri bildirim olarak
değerlendirilmektedir. Bu işlemi "Öğrenme" olarak adlandırıyoruz.
Veriden Gösterimi Öğrenmek
Makine öğrenme modelleri bilinen girdi ve beklenen çıktılardan girdileri anlamlı çıktılara
dönüştürmeyi öğrenirler. Bu noktada makine öğrenmesinin ana sorunu, beklenen çıktılara en
yakın sonucu verebilmek için verilerden anlamlı gösterimler elde edebilecek dönüşümü
sağlayabilmektir. Sonuç olarak; aslında makine öğrenmesi, veriyi temsil edebilecek farklı
gösterimler bulmak demektir.
Örnek olarak bir görüntü, RGB renk uzayında veya HSV renk uzayında gösterilebilir ki bu aynı
verinin iki farklı gösterimidir. Bazı görevler bir veri gösteriminde zorlu olabilirken diğer bir
gösterimde kolay olabilir. Örneğin, kırmızı görüntü noktalarını bulmak RGB renk uzayında basit
iken görüntünün doygunluğunu azaltmak HSV renk uzayında daha kolay olabilir. Makine
öğrenmesi modellerinin ana amacı, görüntü sınıflandırma görevi gibi herhangi bir görevde
girdilerden istediğimiz sonuca ulaşan dönüşümü sağlayabilecek bir gösterim bulmaktır.
Veriden Gösterimi Öğrenmek
Şekildeki (x,y) koordinatlarını alarak bir noktanın siyah mı yoksa beyaz mı olduğunu
sınıflandıracak bir algoritma geliştirdiğimizi düşünelim. Bu noktada;
Burada doğru bir şekilde siyah noktaları beyaz noktalardan ayırabilecek bir yeni
gösterime ihtiyacımız var.
Veriden Gösterimi Öğrenmek
Eksenleri değiştirerek başlayabiliriz. Bu yeni gösterim ile çok basit bir kural bulabiliriz :
x>0 ise siyah, x<0 ise beyaz noktadır.
Görüldüğü gibi bu yeni gösterim sınıflandırma sorunumuzu kolayca çözdü. Örnekte koordinat düzleminin
değişimini biz kendimiz elle belirledik. Bunun yerine koordinat sistemi alternatiflerini arayıp, doğru
sınıflandırma oranını geri bildirim olarak geri gönderseydik bu işlemi makine öğrenmesi ile yapıyor olacaktık.
Makine öğrenmesi bakış açısı, öğrenme ile otomatik olarak yapılan daha iyi gösterim elde etme işlemi olarak
tanımlanabilir.
Veriden Gösterimi Öğrenmek
Makine öğrenme algoritmaları, verilerden daha kullanışlı gösterimler elde edebilecek önceki
örnekteki gibi dönüşümleri bulabilmektir. Bu dönüşümler, yaptığımız gibi koordinat değişimi,
doğrusal veya doğrusal olmayan değişimler olabilir. Makine öğrenme algoritmaları, genelde yeni
bir şeyler ortaya koymak yerine kendine verilen hipotez uzayı denilen önceden belirlenmiş
işlemler içerisinde arama yaparlar.
Sonuç olarak makine öğrenmesi teknik olarak, geri bildirim sinyalinin yardımıyla önceden
belirlenen ihtimaller uzayında, veriden daha kullanışlı gösterimler aramaktır. Bu basit fikir ses
tanımadan otonom araç süremeye kadar çok farklı alanlarda bilişsel sorulara cevap bulmaktadır.
Derinlemesine Derin Öğrenme
Derin öğrenme, birbirini takip eden katmanlarda veriler işlenirken giderek artan şekilde daha
kullanışlı gösterimler elde edilebilen makine öğrenmesinin bir alt alanıdır. Derin derken
kastedilen derin öğrenmenin birtakım derin bilgiler elde etmesi değil, birbirini takip eden
gösterim katmanları ifade edilmektedir. Modeldeki katman sayısı modelin derinliğini
oluşturmaktadır. Buna katmanlı gösterim öğrenimi (layered representations learning) veya
hiyerarşik gösterim öğrenme (hierarchical representations learning) demek de uygun olabilir.
Modern derin öğrenme modelleri, onlarca hatta yüzlerce birbirini takip eden katmanlar
içermektedir. Oysa diğer makine öğrenme algoritmaları, genelde bir veya iki katmandan oluşur ki
bazen sığ öğrenme olarak da adlandırılırlar.
Derinlemesine Derin Öğrenme
Bu katmanlı gösterim, sinir ağı diye adlandırılan ve birbirini takip eden katmanları olan model
sayesinde öğrenilmektedir. Sinir ağları nörobiyolojiye atıf yapsa ve derin öğrenmenin ana
kavramları insan beyninden etkilenmiş olsa da derin öğrenme insan beyninin bir modeli değildir.
Ayrıca insan beyninin günümüz derin öğrenme modellerine benzer bir çalışma prensibi olduğuna
dair herhangi bir kanıt bulunmamaktadır. Bizim bakış açımızdan, derin öğrenme veriden işe yarar
gösterimler öğrenebilen matematiksel bir araçtır.
Derinlemesine Derin Öğrenme
Derin ağları, çok aşamalı bilgi damıtma işlemi (multistage information-distillation) olarak düşünebilirsiniz.
Birbirini takip eden filtrelerden geçerken giderek daha saflaştırılır.
Sonuç olarak; derin öğrenme teknik olarak veri gösterimi öğrenmenin çok aşamalı bir yoludur.
Derin Öğrenme
Bir katmanın girdisine uyguladığı işlem o katmana ait ağrılık
matrisinde bulunmaktadır. Teknik olarak, katmanda yapılan
dönüşüm işlemi o katmana ait ağırlıklara bağlıdır. Bu bağlamda,
öğrenme girdiyi beklenen çıktıya ulaştıran ağın tüm
katmanlarının ağırlıklarının bulunması işlemidir. Ama derin sinir
ağları on milyonlarca parametre barındırabilir. Her bir
parametreyi tam doğru bulmak göz korkutan bir işlemdir ve Sinir ağı ağırlıkları ile parametrelendirilir
birinde olacak bir değişiklik aynı anda diğer tüm parametrelerin
davranışını da etkileyecektir.
Derin Öğrenme
Sinir ağının çıktısını kontrol etmek için beklenen çıktı ile ağın çıktısının
arasındaki farkı ölçmek gerekir. Bu işlem ağın kayıp fonksiyonu (bazen
hedef fonksiyonu da denir) tarafından yapılır. Kayıp fonksiyonu ağın
çıktısı ile beklenen çıktısını alarak arasındaki mesafeyi puanlar ve bir
girdi için ağın başarımının ne kadar iyi olduğunu gözlemler.
İkisi beraber derin öğrenmeyi önceki makine öğrenme modellerinden daha başarılı yapmaktadır.
İlerlemeyi sağlayan faktörler :
1. Donanım
2. Veri setleri
3. Algoritmalardaki iyileştirmeler
Derin Öğrenme
Matematiksel Temeller
DR. ŞAFAK KAYIKÇI
Veri Gösterimleri
Makine öğrenme sistemleri temel veri yapısı olarak genellikler tensör kullanır. Google kendi
kütüphanesini TensorFlow olarak adlanmıştır.
Temel olarak tensörler veri için taşıyıcı vazifesini görür ve genellikle sayısal verileri tutarlar.
Tensörlerden bahsedilirken boyut yerine genellikle eksen(axis) kullanılır.
Skalerler (0B Tensörler)
Sadece bir eleman taşıyan tensörlere skaler (0B tensör) denir.
Numpy kütüphanesinde float32 ve float64 sayılar birer skaler tensördür.
Numpy kütühanesinde bir tensörün kaç ekseni olduğunu ndim özelliği kullanarak öğrenilebilir.
Skaler sıfır eksene (ndim=0) eksene sahiptir.
Bir tensörün eksen sayısı aynı zamanda tensörün derecesi olarak adlandırılmaktadır.
Vektörler (1B Tensörler)
Sayı dizilerine vektör yada 1B tensör denir.
1B tensör sadece bir eksene sahiptir.
Matrisler (2B tensörler)
Bir vektör dizisi matris veya 2B tensördür.
Bir matrisin iki ekseni vardır (satır ve sütun olarak adlandırılır).
3B ve daha fazla boyutlu Tensörler
Matrisleri bir dizide birleştirerek 3B tensör elde edilebilir.
3B tensörleri sayı küpü olarak hayal edebilirsiniz.
Yukdarıdaki gibi 3B tensötleri birleştirerek 4B tensör elde edebilirsiniz ve bu şekilde artırarak devam
edebilirsiniz. Derin öğrenmede genellikle 0B'den 4B'ye kadar tensörlerle ilgilenilir ancak söz konusu video
olduğunda 5B tensörlerde kullanılabilir.
Anahtar Özellikler
1. Eksen Sayısı (derecesi) : Örneğin 3B tensörlerin üç ekseni, matrislerin iki ekseni vardır. Numpy
gibi Pyhton kütüphanelerinde bu ndim olarak adlandırılır.
2. Şekli (shape) : Bu, tuple şeklinde her eksende kaç boyut olduğunu belirten sayılardır.
3. Veri Tipi (dtype) : Tensörün taşıdığı veri tipidir. Not: string veri tipi tensörlerde kullanılmaz.
Veri Tensörleri Örnekleri
Vektör verisi : 2B tensörler
örnekler (samples), öznitelikler (features)
Zaman serisi (timeseries) yada ardışık (sequence) veri : 3B tensörler
örnekler (samples), zaman_adımı (time_stamp), öznitelikler (features)
Görüntüler (images): 4B tensörler
örnekler (samples), yükseklik (height), genişlik (width), kanallar (channels)
örnekler (samples), kanallar (channels), yükseklik (height), genişlik (width)
Video : 5B tensörler
örnekler (samples), kareler (frames), yükseklik (height), genişlik (width), kanallar (channels)
örnekler (samples), kanallar (channels), kareler (frames), yükseklik (height), genişlik (width)
Vektör Verisi
En sık karşılaşılan durumdur. Böyle bir veri setinde, her veri noktası bir vektör olarak kodlanabilir
ve böylece tüm veri 2B tensör (vektör dizisi) olarak kodlanmış olur. Birinci eksen örnek ekseni
(samples axis), ikinci eksen öznitelik ekseni (features axis) olur.
Sigorta istatistikleri veri setimizde her kişi için yaş, posta kodu ve aylık bilgileri olsun. Her kişi üç
değerli bir vektör olursa 100.000 kişi için tüm veri seti (100000, 3) şeklinde olacaktır.
Metin bilgileri veri setimizde sözlüğümüzde bulunan en çok kullanılan 20.000 kelimenin kaç defa
bulunduğunu saklayacağız. Her belde 20000 değeri olan bir vektör olarak kodlanacak ve toplam
500 belge için veri setimiz (500, 20000) şeklinde olacaktır.
Zaman serisi – Ardışık Veri
Veri setinde zaman (ya da ardışıklık durumu) olursa, verileri bir ekseni zaman olacak
şekilde 3B tensörlerde saklamak gerekir. Her örnek ardışık 2B tensörler olarak
kodlanabilir. Böylece tüm veri 3B tensör olarak kodlanmış olur.
Hisse senedi fiyat veri seti : Her dakika bir hisse senedinin anlık en düşük fiyatını
ve en yüksek fiyatını saklayacağız. Dolayısıyla her dakika 3B bir vektör olacağından
tüm günün verisi (390, 3) şeklinde bir 2B tensör ve 250 günlük veri ise (250, 390,
3) şeklinde 3B bir tensör olacaktır. Burada her örnek bir günün verisini
oluşturacaktır.
Her bir 128 farklı karakterden birisi olan 280 karakterlik bir dizi olacak şekilde
tweet verisi olsun. Bu durumda her karakter 128 elemanı bir binary vektör
olacaktır (tüm elemanlar sıfır, sadece ilgili karakterin indeksi 1 olacak). Sonra her
tweet (280, 128) şeklinde bir 2B tensör olacağından 1 milyon tweet bulunan ver
setimiz (1000000, 280, 128) şeklinde bir tensör olacaktır.
Görüntü Verisi
Görüntülerin tipik olarak 3 boyutu vardır: Yükseklik, genişlik ve kanal sayısı
256 x 256 boyutunda 128 tane gri ölçekli örnekler için (128, 256, 256, 1)
şeklinde 3 renk derinliği olan bir görüntü için ise (128, 256, 256, 3) şeklinde
tensörler olacaktır.
Uygulamalarda kullanılan iki görüntü tensörü şekli vardır : Kanal verisinin
sonda (TensorFlow kullanıyor) ve kanal verisinin başta (Theano kullanıyor).
Yukardaki örneği Theano için kullansaydık gri ölçek için (128, 1, 256, 256) ve
renk derinliği 3 olan görüntü için (128, 3, 256, 256) yazacaktır.
Keras her iki kullanımı da desteklemektedir.
Video Verisi
Video verisi, gerçek hayatta 5B tensör kullanacağınız birkaç nadir örnekten biridir. Video, her biri
renkli ardışık kareler (frame) olarak düşünülebilir. Çünkü her bir kare 3B tensör (yükseklik,
genişlik, kanallar) ve kare dizileri 4B tensör (kare, yükseklik, genişlik, kanallar) ve video yığını ise
(örnek, kare, yükseklik, genişlik, kanallar) şeklinde 5B bir tensör oluşturur.
Örneğin 60 saniyelik, 144 x 256 boyutunda bir YouTube videosu saniyede 4 kare ile örneklenmiş
olsun (toplam 240 kare). Böyle 4 video bulunan bir yığın (4, 240, 144, 256, 3) şeklinde bir tensör
olacaktır. Toplam 106.168.320 değer ! Eğer veri tipi float32 olursa bu tensörün büyüklüğü 450
MB olacaktır. Gerçek hayatta kullandığımız videolar daha küçüktür. Çünkü veri tipi float32
değildir ve yüksek oranda (MPEG formatında olduğu gibi) sıkıştırılırlar.
İlk Örnek – MNIST veriseti
10 kategoriye ayrılmış (0'dan-9'a kadar) elle yazılmış rakamlardan
oluşan siyah-beyaz (28 x 28 piksel) görüntülerdir.
1980'lerde, ABD Ulusal Standartlar ve Teknoloji Enstitüsü tarafından
oluşturulmuş, 60.000'i eğitim 10.000'i test için kullanılan 70.000
görüntü içerir.
Derin öğrenmenin "Merhaba Dünyası" olarak düşünülebilir.
1) Kayıp fonksiyonu (loss function) : Ağımızın eğitim veri seti üzerinde kendi performansını
gözlemlemesi ve böylece kendi kendine doğru yolu bulabilmesi için
2) En iyileme (optimization) : Ağımızın girdisi olan veri ile oluşturduğu kaybı göz önünde bulundurarak
kendisini güncelleme mekanizması
3) Eğitim ve test süresince takip edilecek metrikler (metrics) : Burada biz sadece doğruluğa (accuracy :
doğru sınıflandırılan görüntülerin toplam görüntü sayısına oranı) odaklanacağız."
Eğitime başlamadan önce, tüm girdilerimizdeki değerleri [0,1] aralığına ölçeklendiriyoruz. Bu aşamadan
önce eğitim veri setimizdeki görüntüler (60000, 28, 28) şeklinde bir dizide ve her elemanı uint8 veri
tipinde [0,255] veri aralığında saklanmıştı. Eğitim veri setindeki görüntüleri (60000, 28, 28) float32 veri
tipinde 0 ile 1 arasında olacak şekilde düzenliyoruz.
5 epoch sonunda eğitim veri setinde 0.989 yani %98.9'luk bir doğruluğa ulaştık. Modelimizi test veri seti
üzerinde denersek :
Test veri seti doğruluğu %97.8 olarak eğitim veri setinde elde ettiğimiz doğruluğun biraz altında
karşımıza çıkıyor. Makine öğrenmesi modelleri, eğitim setinin haricindeki yeni verilerde daha kötü
sonuçlar gösterme eğilimindedir. Eğitim ve test arasındaki bu boşluk aşırı uydurmanın (overfitting) bir
örneğidir. Bu konu ileride detaylı işlenecektir.
Derin Öğrenme
Sinir Ağlarına Giriş
DR. ŞAFAK KAYIKÇI
Sinir Ağlarının Yapısı
YSA'yı eğitimi aşağıdaki nesneler çevresinde döner :
Katmanlar, ağı (ya da modeli) oluşturan yapılar
Girdi verisi ve hedefler
Kayıp fonksiyonu, öğrenmeyi sağlayan geri bildirim sinyalini belirler
Eniyileme algoritması, öğrenmenin nasıl gerçekleşeceğini belirler
Katmanlar : Derin Öğrenmenin Yapı Taşları
Katman bir veya birden fazla tensörü girdi olarak alarak sonuçta bir veya daha fazla katmana
dönüştüren veri işleyen modüldür.
Bazı katmanlar durum bilgisi taşımaz (stateless) ancak çoğu katmanda stokastik gradyan inişi
sonucunda öğrenilen ve durum bilgisi olan bir veya birden çok tensörden oluşan ağırlıkları vardır
ve bu ağırlıklar ağın öğrendiği bilgiyi bulundurur.
Farklı katmanlar farklı tensör biçimleri ve veri tiplerine uygundur. Örneğin, basit 2B tensör
(samples, features) şeklinde olan vektör verisi genellikle sıkıca bağlı (densely connected)
katmanlarda işlenir ve genelde tamamen bağlı (fully connected) veya sıkı (Keras'ta Dense sınıfı)
katman denir. Seri verileri 3B tensörlerde (samples, timesteps, features) saklanır ve LSTM gibi
yinelenen (recurrent) katmanlarda işlenir. Görüntü verisi 4B tensörlerde saklanır ve genellikle 2B
evrişim (convolution – Conv2D) katmanlarında işlenir.
Katmanlar
Keras'ta derin öğrenme modellerinin oluşturulması uygun
katmanların birleştirilerek kullanışlı veri dönüşüm hattı oluşturularak
yapılır. Katman uyumluluğundan kasıt, her katmanın belli bir şekle
sahip tensör girdisi alıp, belli bir şekle sahip çıktı üretmesidir.
Sadece birinci boyutu 784 (eksen 0 tanımlandığından yığın boyutu ne
olursa olsun kabul edilecektir) olan 2B tensörler kabul eden bir
katman oluşturduk. Bu katman birinci boyutu 32'ye dönüştürülmüş
bir tensörü geri döndürecek.
Dolayısıyla bu katman 32 boyutlu bir vektörü girdi olarak bekleyen bir
katmana veri sağlayabilir. Keras'ta katman uyumluluğunu
düşünmenize gerek yoktur. Dinamik olarak önceki katmanın çıktı
boyutuna bakarak yeni katmanı hazırlar.
İkinci katman girdi şeklini bekleyen bir parametre almayıp, bunun
yerine otomatik olarak önceki katmanın çıktısına bakarak girdi şeklini
alır.
Model Tanımı :
Sequential – functional API
Sequential : en sık kullanılan birbirini takip eden
katmanlar şeklinde tasarımlar için kullanılır.
functional API : yönlü ve döngüsüz katmanlar
kullanarak istediğimiz şekilde katmanlar için
kullanılır. Katmanları birer fonksiyon gibi
düşünerek veri tensörlerine uygulanır.
Model tanımlandıktan sonra Sequential yada
functional API kullanılması önemli değildir. Sonraki
adımlar aynıdır.
İkili Sınıflandırma Örneği: IMDB verisi
50.000 adet film kritiği içeren IMDB verisi, 25.000 örnek eğitim veri set, 25.000 örnek test veri
seti olarak ayrılmıştır. İki sette de %50 olumlu kritik, %50 olumsuz kritik bulunmaktadır. Boyutu
80MB civarıdır.
Veri seti önişlemden geçirilmiştir : Kritikler (kelime dizileri) her sayının sözlükte bir kelimeyi
temsil eden sayı dizisine dönüştürülmüştür.
num_words parametresi ile en sık tekrarlanan 10.000 örneği saklanıp, nadir örnekleri göz ardı
edilecektir. Bu yönetilebilir bir vektör verisi ile çalışma imkanı sağlayacaktır.
train_data ve test_data film kritiklerini bulunduran liste değişkenleri ve her liste, kelimeleri
temsil eden sayıları tutmaktadır. train_labels ve test_labels 0 ve 1'lerden oluşan listeleri ve 0
olumsuz kritikleri, 1 ise olumlu kritikleri temsil etmektedir.
Veriyi Hazırlamak
İçerisinde sayı bulunan listeleri sinir ağlarına gönderilmez. Listeleri tensörlere dönüştürmelidir.
Bu iki şekilde yapılabilir:
Tüm elemanları aynı uzunlukta olacak şekilde eksikleri sıfırlar ile doldurulur ve (samples,
word_indices) şeklinde tam sayı tensörlerine dönüştürülür. İlk katman (Embedding) bu tam sayı
tensörlerini kullanabilecek şekilde tasarlanır.
Liste one-hot (bir-elemanı-bir) olarak kodlanır. Örneğin : [3,5] dizisi 10.000 boyutlu 3'üncü ve
5'inci indeks değerleri 1, diğer hepsi 0 olacak şekilde bir vektör oluşturulur. Bu şekilde Dense
katmanı gibi bir katman kullanılabilir.
Ağın İnşası
Girdiler vektör ve etiketler skaler (1 ve 0) : Bu tip bir problem için kullanılacak en iyi ağ tipi
yığın (stack) sıkı bağlı katmanlardan (Dense) oluşan ve aktivasyon fonksiyonu relu kullanan
bir ağdır : Dense(16, activation='relu')
Dense fonksiyonuna gönderilen (16) parametresi bu katmanda olmasını istediğimiz gizli
birim sayısıdır. Gizli birim katmanın gösterim uzayının boyutudur.
output = relu(dot(W,input)+b)
16 gizli birim bulunması W ağırlık matrisinin (input_dimension, 16) şeklinde olması
anlamına gelir: W ağırlık matrisi ile iç çarpım işlemi girdi verilerini 16 boyutlu bir gösterim
uzayına dönüştürür. Daha sonra b (bias=önyargı) vektörünü eklenip, relu işleminden
geçirilir.
Daha fazla gizli birim bulunması (daha büyük gösterim uzayı) ağın daha karmaşık
gösterimler öğrenebilmesini sağlayacak ama daha fazla hesaplama karmaşıklığına sahip
olmasını da sağlayacaktır. İstenmeyen örüntüleri de öğrenmesine neden olabilecektir.(Bu
örüntüler eğitim verisi üzerinde başarıyı yükseltecek ancak test verileri üzerinde başarıya
katkı sağlamayacaktır)
Ağın İnşası
Ara katmanların aktivasyon fonkisyonu relu (rectified linear unit) kullanılıp son katmanda
sigmoid aktivasyon fonkisyonunu kullanarak çıktıları olasılık değerlerine (0 ile 1 arası)
dönüştürülecektir.
relu sigmoid
Aktivasyon Fonksiyonu
relu gibi bir aktivasyon fonksiyonu (aynı zamanda doğrusallığı bozan olarak da adlandırılır)
olmaksızın Dense katmanı iki doğrusal işlem barındırır (iç çarpım ve toplama) :
output = relu(dot(W,input)+b)
Dolayısıyla ağ girdilerden sadece doğrusal dönüşümleri (affine transformations)
öğrenebilecektir: Katmanın hipotez uzayı 16 boyutlu olası tüm doğrusal dönüşümlerden
oluşacaktır. Böyle bir hipotez uzayı kullanmak derin bir ağı kullanmanın avantajlarının
kullanılmamasına ve hala yeni doğrusal gösterimler öğrenmesine neden olacaktır. Yeni katmanlar
eklemek de hipotez uzayını genişletmeye yetmeyecektir.
Derin gösterimlerden faydalanarak daha zengin hipotez uzayı elde edebilmek için doğrusallığı
kaldıran aktivasyon fonksiyonuna ihtiyaç duyulur. relu derin öğrenmenin en meşhur aktivasyon
fonksiyonudur ama prelu, elu vb. gibi diğer adaylarda kullanılabilir.
Kayıp fonksiyonu – Eniyileme Algoritması
İkili sınıflandırma problemi olduğu için ve ağın çıktısı bir olasılık değeri olduğu için
binary_crossentropy kayıp fonksiyonu kullanılmıştır. Bunun dışında mean_squared_error 'da
kullanılabilir. Ancak binary_crossentropy çıktısı olasılık değerleri olan modelleri için genellikle en
iyi çözümdür. crossentropy Bilgi Kuramından gelir ve olasılık dağılımları arasındaki uzaklığı ölçer.
Bu örnekte tahminler ile olması gereken dağılım arasındaki uzaklık ölçülmüştür.
rmspop, binary_crossentropy ve accuracy Keras'ta tanımlanmış olması nedeniyle metinsel
parametre olarak gönderilebilir. Bazen eniyileme algoritmasının parametrelerini değiştirmek
veya kendi oluşturduğunuz bir kayıp fonksiyonuna göndermek istenebilir.
Doğrulama (Validation)
Eğitim başarımını ölçmek için ağın daha önce hiç görmediği özgün veri setinden 10000 örnekten
oluşan doğrulama veri seti oluşturulmuştur. Eğitim veri seti üzerinde daha iyi performans
gösteren sinir ağları daha önce hiç görmediği veriler üzerinde giderek daha kötü performans
göstererek aşırı uydururlar. Bu yüzden eğitim veri seti hariç başka bir veri seti üzerinde
performans gözlemlemesi yapılır.
Model 20 epokta, 512'lik mini yığınlar kullanılarak eğitilmiştir. Aynı zamanda kayıp değeri ve ağ
başarımı ayrılmış olan doğrulama veri setinde gözlemlenecektir. Bu doğrulama veri seti
validation_data parametresine gönderilmiştir.
CPU kullanılarak her epok 2 saniyeden az, toplam eğitim süresi 20 sn. üzerinde olacaktır.
History
model.fit() metodu History nesnesini geri döndürmektedir. Bu nesnenin, eğitim boyunca neler
olduğu bilgisini tutan history isimli bir elamanı bulunmaktadır.
Gözlem
Görüleceği üzere eğitim kaybı her epokta düşerken, eğitim başarımı her epokta artmaktadır. Bu
gradyan inişi kullanınca görülmesi gereken küçültmek istenen değerin her epoktan biraz
düşmesidir.
Ama eğitim ve doğruluk başarımında bunun olması beklenmez, dördüncü epokta tepe
değerlerine ulaşmaktadırlar. Eğitim esnasında çok iyi performans gösteren modelin, daha önce
hiç görmediği örnekler içinde aynı performansı göstermesi beklenilmemelidir. Bunun sebebi aşırı
uydurmadır (overfitting) : İkinci epoktan sonra eğitim veri seti üzerinde aşırı eğitim olduğu için
model eğitim veri setine özel gösterimleri öğrenmektedir ancak bunu eğitim veri seti dışında
genelleştirememektedir.
Bu durumda aşırı uydurmayı önlemek için üçüncü epoktan sonra eğitim durdurulmalıdır.
Overfitting etkilerini hafifletebilecek teknikler ileriki derslerde gösterilecektir.
Modeli Baştan Eğitmek
Bu basit yaklaşım ile %88 başarım elde edilmiştir. Şu anda bilinen en iyi yaklaşım %95'tir.
Tahmin için predict metotdu kullanılarak olumlu kritiklerin olasıkları oluşturulabilir. Ağın bazı örnekler
için emin (0.99 yada daha fazla, 0.01 yada daha az), bazıları için daha az emin (0.6 yada 0.4) olduğu
gözlemlenebilir.
Çoklu Sınıflandırma : Haber Sınıflandırma
Birden fazla sınıf olduğu için çoklu sınıflandırma (multiclass classification) bir sınıflandırma
problemidir ve her veri bu kategorilerden sadece birine sınıflandırılması gerektiğinden bir etiket,
çoklu sınıflandırmanın (single-label, multiclass classification) bir örneğidir. Eğer bir veri noktası
birden fazla kategoriye sahip olursa problem çok etiketli, çoklu sınıflandırma (multilabel,
multiclass classification) problemi olacaktır.
Reuters'ın 1986'dan beri yayınladığı kısa haberler ve ait oldukları 46 farklı konuyu içeren veri
setidir.
Veri Hazırlamak
Eğitim ve test verisi önceki örnekte olduğu gibi vektöre
dönüştürülmüştür.
Etiketleri vektöre dönüştürmek için iki farklı yöntem vardır :
Etiketleri tam sayı listesi olarak kullanmak
Bir-elemanı-bir (one-hot) vektör kullanmak
One-hot yöntemi kategorik verilerde sıkça kullanılır ve aynı
zamanda kategorik kodlama olarak bilinir. Bu durumda
etiketlerin one-hot kodlaması eşleşen etiketin indeksinin 1
olduğu, geri kalan tüm indekslerin ise 0 olduğu bir vektördür.
Son katman aktivasyon fonksiyonu olarak softmax kullanılmıştır (MNIST örneği gibi). Bu da ağın 46 sınıfa
ait olasılık dağılımı olacağı anlamına gelmektedir: Her girdi için 46 boyutlu bir vektör çıkacak ve output[i]
i'inci sınıfa ait olma olasılığını gösterecektir. Bu 46 değerin toplamı 1 olacaktır.
Modelin Derlenmesi
categorical_crossentropy kullanılabilecek en iyi kayıp fonksiyonu olacaktır.
categorical_crossentropy iki olasılık dağılımı arasındaki mesafeyi ölçer: Burada birinci olasılık
dağılımı ağın çıktısı, diğeri ise etiketlerin doğru dağılımıdır. Bu mesafeyi en aza indirerek ağ
mümkün olduğunca doğru etiketleri öğrenmesi için eğitilecektir.
Gözlem
Etiketleri böyle kullanmak için sadece kayıp fonksiyonunu değiştirmek gerekmektedir. Bunun için
categorical_crossentropy gibi etiketleri kategorik kodlama ile bekleyen bir kayıp fonksiyonu yerine
sparse_catrgorical_crossentropy kullanılmalıdır.
Yeni kayıp fonksiyonu categorical_crossentropy kayıp fonksiyonu ile aynı matematiksel işlemi yapmakta
sadece farklı bir arayüz kullanmaktadır.
Darboğaz Örneği
Çıktılarımız 46 boyutlu olduğu için ara
katmanların 46 gizli birimden daha az olmaması
gerekmektedir.
Burada, test verilerini normalize etmek içinde eğitim veri setinde hesaplanan ortalama ve
standart sapma kullanılmıştır. Kesinlikle iş akışında test veri seti üzerinde hesaplanmış bir değer
kullanılmalıdır.
Ağ İnşası
Çok az veri olduğundan 64 birimli iki gizli katman kullanılmıştır. Genelde veri azaldıkça overfitting
olasılığı artar ve küçük bir ağ kullanmak aşırı uydurmayı önlemenin bir yoludur.
Ağ tek bir çıktı birimine sahipti ve aktivasyon bulundurmamaktadır (doğrusal). Bu skaler
regresyonda (sürekli değer tahmin eden bir bağlanım) tipik bir yapılandırmadır.
Ağ derlerken ortalama karesel hata:mse (mean squared error : tahminlerle doğru değerler
arasındaki farkın karesi) kayıp fonksiyınunda kullanılmıştır. Bağlanım problemlerinde sıkça
kullanılmaktadır.
Metrik olarak ortalama mutlak hata:MAE (mean absolute error) : tahminlerle doğru hedeflerin
arasındaki farkın mutlak değeridir. Örneğin 0.5'lik bir MAE tahminlerimizin gerçek değerinden
ortalama 500$ farklı olduğu anlamına gelmektedir.
K-Fold Doğrulama
Elde çok az veri olup, doğrulama için ayrılması halinde çok küçük bir veri seti (mesela 100 örnek)
ile karşı karşıya gelinecektir. Bunun sonucu olarak da, doğrulama değerleri hangi verinin
doğrulama verisi olduğuna bağlı olarak değişecektir: Doğrulama değerleri doğrulama veri setine
bağlı olarak yüksek variance (değişirlik) değerine sahip olacaktır.
K-fold çapraz doğrulama (cross validation), eldeki veriyi K parçaya (genelde K=4 veya K=5 alınır)
ayrılır, K tane aynı model oluşturulup her biri K-1 parça veriyle eğitilip kalanı da değerlendirmeye
tabi tutulur. Doğrulama skoru K tane doğrulama skorunun ortalamasıdır.
Gözlem
İkinci şekil her noktayı, önceki noktaların kayar ortalaması (moving average) olarak
göstererek yumuşak bir eğri (smooth curve) oluşturulmuştur.
Varyans, gerçek değerden tahmin edilen değerin ne kadar dağınık olduğunu söyler.
Bias, gerçek değerlerden tahmin edilen değerlerin ne kadar uzak olduğudur.
Varyans-Bias Çelişkisi
Varyans-Bias Çelişkisi
Varyans-Bias Çelişkisi
Düşük Bias Düşük Varyans: Modeller ortalama olarak doğru
ve tutarlıdır. Modellerimizde bu sonucu elde etmek için
çabalamaktayız
Düşük Bias Yüksek Varyans: Modeller bir dereceye kadar
doğrudur ancak ortalamada tutarsızdır. Veri setinde ufak bir
değişiklik yapıldığında büyük hata oranına neden olmaktadır
Yüksek Bias Düşük Varyans: Modeller tutarlıdır, ancak
ortalama hata oranı yüksektir.
Yüksek Bias Yüksek Varyans : Modeller hem hatalı hem de
tutarsızdır .
.
Film Kritiği - Daha Küçük Ağ
Film Kritiği - Daha Büyük Ağ
Ağrılıkların Düzenlileştirilmesi
L1 Regularization – Maliyet ağırlıkların katsayılarının mutlak değerlerine oransal olarak eklenir
(ağırlıkların L1 normu).
L2 Regularization – Maliyet ağırlıkların katsayılarının karelerine oransal olarak eklenir
(ağırlıkların L2 normu). L2 düzenlileştirme sinir ağları bağlamında ağırlık azalımı (weigth decay)
olarak da adlandırılır.
Ağrılıkların Düzenlileştirilmesi
Dropout – İletim Sönümü
Dropout bir katmana uygulandığında eğitim esnasında o katmanın öğrendiği bilginin bir
bölümünü rastgele olarak sıfır yapar. Dropout rate (iletim sönüm oranı) sıfırlanacak elemanların
toplam sayıya oranıdır ve genellikle 0.2 ile 0.5 arasında bir değer seçilir.
Dropout – İletim Sönümü
Katman çıktılarının (batch_size, features) şeklinde bir numpy matrisi olduğunu düşünün. Eğitim
zamanında rastgele elemanları sıfır yapıyoruz :
#Eğitim sırasında %50'si sıfırlandı
Test zamanında ise aynı oranda çıktıları küçülteceğiz. Buda 0.5 oranında olacak.
#Test zamanı
Bu iki işlem aynı anda eğitim zamanında yapılıp, test zamanında herhangi bir şey yapmaya gerek
olmayabilir. Pratikte de genelde böyle yapılır.
#Eğitim zamanı
#Bu sefer küçültmek yerine büyütüyoruz
Görsel dünyada parçalar arasında uzamsal hiyerarşi vardır: Lokal köşeler birleşerek göz veya kulak gibi lokal
nesneler, lokal nesnelerin birleşimi ise kedi gibi daha yüksek seviyeli kavramları oluşturur.
Nitelik Haritaları
MNIST
MNIST örneğinde ilk evrişim katmanı (28, 28, 1) boyutunda nitelik haritası (feature map) alır ve
(26, 26, 32) boyutunda bir nitelik çıktı haritası üretir.
Keras'ta Conv2D katmanı bu iki parametreyi ilk iki parametre olarak almaktadır.
Evrişim işlemi
Burada çıktının genişliği ve yüksekliğinin girdinin genişliği ve
yüksekliğinden farklı olabilir. Bunun iki nedeni vardır :
1. Kenar etkisi (Border effect) : Girdi nitelik haritasına
yapılacak doldurma (padding) ile çözülebilir.
2. Adım aralığı (stride) kullanmak.
Kenar Etkisi (Border Effect) ve Doldurma (Padding)
Çıkardığımız özniteliklerin şekli (samples, 4, 4, 512) oldu. Onları tamamen bağlı sınıflandırıcıya
göndermeden önce (samples, 8192) şekline düzleştirmeliyiz.
Ağ İnşası
Sadece iki Dense katmanı olduğundan eğitim çok hızlı olacakır. –(CPU'da bile bir epok 1 saniyeden az olacaktır)
Sonuçlar
CNN Öğrendiklerini görselleştirmek
Evrişimli sinir ağları tarafından öğrenilen gösterimler görsel kavramların gösterimi olduklarından
görselleştirme için çok uygundur. En çok kullanılan teknikler :
Ara çıktılarını görselleştirmek : Birbirini takip eden katmanların girdilerini nasıl dönüştürdüklerini
anlamak ve her bir evrişim filtresi hakkında bilgi sahibi olabilmek için kullanışlıdır.
Evrişim filtrelerini görselleştirmek : Hangi görsel örüntülerin ya da kavramların öğrenildiğini
anlamak için kullanışlıdır.
Bir resimde sınıf aktivasyon ısı haritasını görselleştirmek : Bir resmin hangi bölümlerinin verilen
sınıfa ait olduğunu anlamak için kullanılır ve nesnenin yeri hakkında bilgi verir.
Ara Çıktıları Görselleştirmek
Bakmak istediğimiz nitelik haritalarını çıkartmak için girdi olarak resim yığınları verdiğinizde, çıktı
olarak tüm evrişim ve pooling katmanlarının aktivasyonlarını veren bir Keras modeli
oluşturulmuştur.
Ara Çıktıları Görselleştirmek
İlk katman aktivasyonlarının dördüncü kanalını çizdirilmesi İlk katman aktivasyonlarının yedinci kanalını çizdirilmesi
block_conv1 katmanının
sıfırıncı kanalının en büyük
cevabı verdiği filtre
Evrişim Filtelerini Görselleştirmek
Sınıf Aktivasyon Isı Haritaları
Evrişim sinir ağının sınıflandırma için kararını verirken remin hangi bölümünün etken olduğunu
anlamak için faydalıdır. Bu kategorideki tekniklere sınıf aktivasyon haritası (CAM-Class Activation
Map) görselleştirme denir ve aktivasyon haritalarının girdi resimleri üzerine uygulanmasından
ibarettir.
Sınıf Aktivasyon Isı Haritaları
Predicted: [
('African_elephant', 0.89544886),
('tusker', 0.09967599),
('Indian_elephant', 0.0046395455)]
normalized opencv
Derin Öğrenme
Recurrent Neural Network
DR. ŞAFAK KAYIKÇI
Tekrarlayan Sinir Ağları
Tekrarlayan sinir ağları, tipik olarak zaman serisi problemlerini çözmek için kullanılan derin
öğrenme modelleridir.
h_t: Şu anki h değeri Bir aktivasyon fonksiyonu ile kullanımı: W_hy: Çıktı katmanının ağırlık değeri
h_t-1: Bir önceki h değeri W: Ağırlık y_t: Çıktı
x_t: Şu anki girdi vektörü h: Gizli katman
W_hh: Bir önceki gizli katmanın ağırlığı
W_hx: Şu anki gizli katmanın ağırlığı
tanh: Aktivasyon fonksiyonu
Basit Örnek
Gün boyu dışarıdasın ve ev arkadaşın senin için yemek yapıyor ama bazı kuralları var. Yemekleri
elmalı turta, hamburger ve tavuk sırasıyla yapıyor.
Bir diğer kural olarak hava güneşliyse o da dışarı çıkıyor ve bir önceki gün yemek olarak ne
yaptıysa aynısını yapıyor. Eğer hava yağmurluysa dün yaptığı yemeği değiştiriyor.
Basit Örnek
Pazartesi => Sıradaki ilk yemek olan elmalı turta ile başla
Salı => Güneşli Hava (Yemek aynı kalsın) + Turta = Turta
Çarşamba => Yağmurlu Hava (Yemeği Değiştir) + Turta = Hamburger
Perşembe => Yağmurlu Hava (Yemeği değiştir) + Hamburger = Tavuk
Cuma => Güneşli Hava (Yemek aynı kalsın) + Tavuk = Tavuk
Cumartesi => Güneşli Hava (Yemek aynı kalsın) + Tavuk = Tavuk
Yapacağı yemeği karar vermek için hava durumuna ve bir önceki gün ne yaptığına bakarak karar vermesi RNN’e benzemektedir.
RNN'in dez avantajı Gradient vanishing /exploding problemlerine maruz kalmasıdır.
Kaybolan Gradyan Sorunu (vanishing gradient)
Kaybolan gradyan sorunu, tekrarlayan sinir ağlarının başarısının önündeki en büyük engellerden
biri olmuştur. Derin öğrenmede tekrarlayan sinir ağlarının geliştirilmesinde etkili bir rolü olan
Alman bilgisayar bilimcisi Sepp Hochreiter tarafından keşfedilmiştir.
Vanishing Gradient
Kaybolan gradyan problemi, geri yayılım algoritması,
ağırlıklarını güncellemek için sinir ağının tüm nöronlarından geri
gittiğinde ortaya çıkar. Tekrarlayan sinir ağlarının doğası, sinir
ağının derin bir katmanında hesaplanan maliyet fonksiyonunun,
daha sığ katmanlarda nöronların ağırlıklarını değiştirmek için
kullanılacağı anlamına gelir.
Vanishing Gradient
Geri yayılım algoritmasında tekrarlayan bir sinir ağı aracılığıyla çarpılan gerçek faktör Wrec
matematiksel değişkenle ifade edilir. İki problemi ortaya çıkarır:
Wrec küçük olduğunda , kaybolan bir gradyan problemi yaşanır.
Wrec büyük olduğunda , patlayan bir gradyan problemi yaşanır.
Patlayan Gradyan Problemi Çözümü
Patlayan gradyanlar için, truncated backpropagation adı verilen geri yayılım algoritmasının
değiştirilmiş bir sürümünü kullanmak mümkündür. Bu algoritma, geri yayılımın yapılacağı zaman
adımlarını kısıtlar ve problem oluşmadan algoritmayı çalışmasını durdurur.
Ayrıca penalties dediğimiz, bir sinir ağındaki daha sığ katmanlardan geçerken bir geri yayılmanın
etkisini azaltmak için kodun içine gömülü teknikler kullanılabilir.
Son olarak, gradient clipping adı verilen, bir geri yayılım algoritmasında gradyanın ne kadar
büyük olabileceğini sınırlayan yapay bir tavan uygulanabilir.
Kaybolan Gradyan Problemi Çözümü
Ağırlıklara ilk değer vermek, kaybolan gradyan problemini çözmek için kullanılabilecek bir
tekniktir. Geri yayılım algoritmasının gerçekçi olmayan şekilde küçük ağırlıklar atamasını önlemek
için yapay olarak bir sinir ağındaki ağırlıklar için bir başlangıç değeri oluşturmayı içerir.
En önemli çözüm ise, Sepp Hochreiter ve Jürgen Schmidhuber'in öncülüğünü yaptığı Uzun Kısa
Süreli Bellek Ağları (Long Short-Term Memory Networks - LSTM) adı verilen özel bir sinir ağı
türüdür.
Long Short-Term Memory Network (LSTM)
Wrec < 1 olduğunda kaybolan bir gradyan problemi yaşanır.
Wrec > 1 olduğunda , patlayan bir gradyan problemi yaşanır.
LSTM ise, normal tekrarlayan bir sinir ağından çok daha fazla
gömülü karmaşıklığa sahiptir. Bir LSTM modelinin her girişi ve
çıktısı bir vektördür.
LSTM - forget gate layer (Unutma Kapısı)
Bir LSTM içinde ilk olan forget gate layer 'daki aktivasyon fonksiyonudur.
Hangi bilginin tutulacağı veya unutulacağına karar verir.
LSTM – Cell State (Hücre Durumu)
Hücre durumunun amacı, tekrarlayan bir sinir ağının eğitildiği farklı gözlemlerden hangi bilgilerin ileriye taşınacağına
karar vermektir. Taşınması gereken verileri alır ve hücre sonuna, oradan da diğer hücrelere taşır. Bilgiyi ileriye taşıyıp
taşımama kararı kapılar tarafından verilir (başlıca örnek : forget gate).
LSTM - Input Gate (Girdi Kapısı)
Cell State’i güncellemek için kullanılır. Öncelikle Forget Gate’de (Unutma Kapısı) olduğu gibi
Sigmoid fonksiyonu uygulanır, hangi bilginin tutulacağına karar verilir. Daha sonra ağı
düzenlemek için Tanh fonksiyonu yardımıyla -1,1 arasına indirgenir ve çıkan iki sonuç çarpılır.
LSTM – output (Çıktı Kapısı)
LSTM'nin son adımı, bu gözlem için çıktıyı belirler (ht). Bu adımda hem bir sigmoid fonksiyonu hem de
bir hiperbolik tanjant fonksiyonu kullanılır. Öncelikle bir önceki değer ile şu anki girdi Sigmoid
fonksiyonundan geçer. Cell State’den gelen değer Tanh fonksiyonundan geçtikten sonra iki değer
çarpılır ve bir sonraki katmana “Bir önceki değer” olarak gider. Cell State ilerler.
LSTM Mimarilerinin Varyasyonları
Bu örnekte örnekte 40 zaman adımı kullanılmıştır. Bu, sinir ağının tahmin ettiği her gün için,
üretimini belirlemek için önceki 40 günlük hisse senedi fiyatlarını dikkate alacağı anlamına
gelmektedir. Belirli bir ayda yalnızca ~ 20 işlem günü olduğu için, 40 zaman adımı kullanmak,
önceki 2 ayın hisse senedi fiyatı verilerini kullanmamız anlamına gelir.
LSTM
units = 45 : Bu katmana dahil etmek istediğiniz LSTM nöronlarının sayısıdır. Nöron sayısını
artırmak, tekrarlayan sinir ağınızın boyutsallığını artırmak için bir yöntemdir.
Daha sonra satmak üzere, müşterilerden belirli şarap türlerini satın alan bir dükkan olduğunu varsayalım.
Sahte şarap satan dolandırıcı müşterilerde mevcuttur. Bu durumda, dükkan sahibi sahte ve gerçek şarapları
birbirinden ayırt edebilmelidir.
Örnek
Ayrımcı (Discriminative) ve Üretken (Generative)
Modeller
GAN'lar, biri veri üretmek için eğitilmiş, diğeri sahte verileri gerçek verilerden ayırmak için
eğitilmiş iki sinir ağından oluşur.
GAN'lar dahil olmak üzere veri üreten yapılar, daha geniş çapta incelenen ayrımcı modellerin
(discriminative models) aksine üretici modeller (generative models) olarak kabul edilir.
Ayrımcı (Discriminative) ve Üretken
(Generative) Modeller
GAN'lar gibi üretken modeller, bir veri kümesinin bir olasılık modeli açısından nasıl üretildiğini
açıklamak için eğitilir . Üretken bir modelden örnek alarak yeni veriler üretebilirsiniz. Denetimli
öğrenme için ayrımcı modeller kullanılırken, üretken modeller genellikle etiketlenmemiş veri
kümeleriyle kullanılır ve denetimsiz öğrenmenin bir biçimi olarak görülebilir .
Ayrımcı (Discriminative) ve Üretken
(Generative) Modeller
Yeni örneklerin çıktısını almak için, üretken modeller genellikle model tarafından oluşturulan
örnekleri etkileyen stokastik veya rastgele bir öğeyi dikkate alır. Üreticiyi çalıştırmak için
kullanılan rastgele örnekler , vektörlerin oluşturulan örneklerin bir tür sıkıştırılmış biçimini temsil
ettiği gizli bir alandan (latent space) elde edilir.
GAN'ların yanı sıra, aşağıdakiler gibi çeşitli başka üretken model mimarileri vardır:
Boltzmann makineleri
Varyasyonel otomatik kodlayıcılar
Gizli Markov modelleri vb.
GAN mimarisi
.
Üreticinin(genreator) rolü, gerçek verilere benzeyen oluşturulmuş örnekleri sağlamak için gerçek
örneklerin olasılık dağılımını tahmin etmektir. Ayırıcı (discriminator), belirli bir örneğin üretici
tarafından sağlanmak yerine gerçek verilerden gelme olasılığını tahmin etmek için eğitilir. Bu
yapılara üretken çekişmeli ağlar denir çünkü üretici ve ayırıcı birbirleriyle rekabet etmek için
eğitilir: Ayırıcı, oluşturulan örnekleri tanımlamada daha iyi olmaya çalışırken, üretici ayırıcıyı
kandırmada daha iyi olmaya çalışır.
Örnek
Örnek
Örnek
GAN
Örneğin
Ayırt Edici ağ gerçek bir resme 0.7 değerini vermişse 1–0.7 = 0.3 hata yapmıştır. Tam tersi olarak
sahte bir resme 0.7 değeri vermişse de 0.7–0 = 0.7 hata yapmıştır. Ayırt edici ağın değerleri
eğitim sırasında her iterasyonda bu hata değerlerini 0’a indirecek şekilde güncellenir.
Üretici ağ ise tam tersi olarak kendi ürettiği sahte resimlerin gerçeğe yakın olmasını yani 1 olarak
değerlendirilmesini ister. Eğer kendi ürettiği resmi Ayırt Edici ağ 0.6 olarak değerlendirmişse,
Üretici ağ 1–0.6=0.4 hata yapmıştır. Üretici Ağ da her iterasyonda bu hatayı 0’a indirmeyi ister.
Bu şekilde eğitim süreci ilerledikçe ayırt edici ağ, gerçek ve sahte resimleri ayırt etme işinde
daha başarılı olur. Üretici ağ ise daha gerçekçi sahte resimler üretir. Eğitim süreci bittiğinde
elimizde gerçeğinden ayırt edilemeyecek kalitede resimler üreten bir üretici sistem kalır.
Kullanım örnekleri
MNIST örnek