You are on page 1of 165

Derin Öğrenme

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?

Bu sorular yeni bir programlama paradigmasına kapı açmıştır.


Makine Öğrenmesi
Klasik yapay zeka programlamada sembolik yaklaşımlar kullanılarak geliştirici girdi olarak kuralları ve verileri
ortaya koyar, veriler bu kurallardan geçirilerek bir cevap elde edilir.

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;

 Girdilerimiz noktaların koordinatlarını


 Beklenen çıktımız noktanın rengi
 Başarım ise doğru sınıflandırılan nokta sayısının toplam nokta sayısına oranı olsun

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

Rakam sınıflandırma için bir derin ağ


Katmanlardaki gösterim

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.

Kayıp fonksiyonu ağın çıktısının


kalitesini ölçer
Derin Öğrenme
Derin öğrenmenin kritik noktası, bu puanı geri bildirim sinyali
olarak kullanarak mevcut girdi için kaybı azaltacak yönde ağırlık
matrisini güncelleştirmektir. Bu güncelleme işlemi geriye yayılım
(Backpropagation) diye adlandırılan derin öğrenmenin ana
algoritmasını kullanan eniyileme (optimizer) algoritmalarının
görevidir.

Ağrılık matrisine başlangıç olarak rastgele değerler atandığından,


sinir ağları küçük dönüşümler yapmak durumunda kalır. Bunun
sonucunda çıktı beklenene çok uzak olacağından kayıp puanı
görece çok yüksek olacaktır. Ağ her örneği işlediğinde doğru
istikamette ağırlıklar güncellenecek ve kayıp puanı azalacaktır.
Öğrenme döngüsü olarak adlandırılan bu süreç defalarca kez
tekrar edildiğinde kayıp fonksiyonu en düşük değerini en düşük
noktasına ulaştıracaktır.
Derin öğrenme neleri başardı?
Makine öğrenmesi ile çözümünde zorluklar yaşanan aşağıdaki konularda derin öğrenme önemli atılımlar yapmıştır:

 İnsan seviyesinde görüntü sınıflandırma


 Ses tanıma
 El yazısı
 Otomatik tercüme sistemleri
 Metinden ses üretimi
 Google Now ve Amazon Alexa gibi dijital yardımcılar
 Otonom araç sürüşü
 Dijital reklamlar için hedef kitle tespiti
 Go oyununda insan üstü seviye
Derin öğrenmenin farkı neydi?
Derin öğrenmenin bu kadar hızla yayılmasının ana sebebi birçok problem için yüksek performans sunuyor
olmasıdır. Ama bu tek neden de değildir. Derin öğrenme, öznitelik çıkarımı olarak adlandırılan makine
öğrenmesinin kritik adımını tamamen otomatikleştirmiş olması nedeniyle problemlerin çözümünü
kolaylaştırmıştır.
Bu noktada aklınıza maden işin düğümü birden çok katman kullanmakta, o zaman neden klasik metotlara
bunu uygulamadığımız gelebilir. Uygulamada birbirini takip eden katmanlar şeklinde dizayn edilen sığ
öğrenme metotları (shallow learning) birbirinin etkisini azaltmaktadır. Çünkü üç katmanlı bir modelin ilk
katmanının en iyi gösterimi, bir veya iki katmanlı bir modelin ilk katmanının gösteriminin en iyi halinden
farklıdır. Derin öğrenmeyi dönüştürücü yapan nokta; modelin tüm katmanlarının gösterimlerini sıralı olarak
öğrenmek yerine bütünleşik olarak öğrenebilmesine imkan tanımasıdır. Her şey tek bir geri bildirim sinyali
tarafından kontrol edilir ve modeldeki her değişim hedefe ulaşmaya hizmet eder. Böylece sığ modelleri üst
üste sıralamak yerine gösterimleri ara katmanlardan birbirinden soyut olarak öğrenebilmek mümkün
olmaktadır.
Derin öğrenmenin farkı neydi?
Derin öğrenmenin veriden öğrenebilmesini iki durumla karakterize etmek mümkündür:
1. Katmanlar halinde artan bir şekilde daha karmaşık gösterimler oluşturulabilir.
2. Tüm katmanların beraber öğrenebilmesi, bir katmanın kendi üstündeki ve atındaki
katmanların ihtiyaçlarına göre kendisini güncelleyebilmesidir.

İ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.

Zaman eseni olarak ikinci eksen (eksen 1) kullanımı yaygındır.

 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.

MNIST veriseti Keras üzerinde önceden Numpy dizileri şeklinde yüklü


halde gelmektedir.
conda install -c anaconda keras
pip install keras, pip install tensorflow
train_images ve train_labels modeliminizin öğrenmek için kullanacağı eğitim veri setini oluşturmaktadır.
Modelimiz daha sonra test veri setini oluşturan test_images ve test_labels üzerinde test edilecektir.
Görüntüler Numpy dizisi olarak kodlanmış ve etiketler 0 ile 9 arasındaki rakamlardan oluşan birer dizidir.
Görüntüler ile etiketler arasında birebir ilişki vardır.
Derin ağların temel yapıtaşı, veri için filtre olarak düşünülebilecek veri işleme modülü olan katmanlardır
(layer). Veri katmana ham hali ile girer ve daha kullanışlı formda çıkar. Katmanlar kendisini besleyen
verilerden problemin çözümünde yardımcı olacak daha anlamlı gösterimler (representations) çıkartmaya
çalışırlar. Derin öğrenmede öğrenme sürece çoğunlukla basit katmanları üst üste getirerek verinin
ilerledikçe daha da arıtılmasını sağlayan bir yapıdır. Derin öğrenme, verinin ilerledikçe daha da arıtıldığı
birbirini takip eden süzgeçlere benzetilmektedir.
Modelimiz, 2 adet birbirini takip eden Dense (fully connected) katmanını içeriyor. İkinci (yani son
katmanımız) 10 adet çıktı birimi bulunan ve 10 elemanlı olasılık puanlarını gösteren (toplamları 1) bir
diziyi geriye döndüren katmandır. Dizinin her elemanı, o anki örneğimizdeki sayının 1'den 10'a kadar
hangi sınıfa ait olduğunu gösteren bir olasılık değeridir.
Ağımızı eğitime hazır hale getirmek için 3 şeyi daha derleme (compilation) adımı olarak almamız
gerekiyor:

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.

Aynı zamanda etiketleri kategorik olarak etiketlememiz gerekiyor.


Artık eğitime başlayabiliriz. Bunun için Keras'ın fit metodunu çağırarak modelimizi eğitim veri setine
uyduruyoruz (fit).

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.

Keras'ta bunun basit yolunu daha önceki MNIST örneğimizde


görmüştük.
Ağın İnşası
Dense katmanlarında her katman kendisinden önceki katmanın çıktılarına ulaşabilmektedir. Eğer bir katman
gerekli bilgiyi öğrenemezse sonraki katmanların bunu telafi etme şansı yoktur ve katmanların bir darboğaz haline
gelme ihtimali bulunmaktadır.
Önceki örnekte kullanılan 16 boyutlu katmanlar 46 farklı sınıfı öğrenmek için yetersiz kalacaktır. Böyle küçük
katmanlar ileriye gerekli bilgiyi taşıyamadıkları için darboğaz oluşturacaklardır. Bu sebeple 64 birimli katman
kullanılmıştır.
Ağın İnşası
Ağın sonunda 46 boyutlu bir Dense katmanı kullanılmıştır. Bu her girdi örneği için 46 boyutlu bir vektör
çıktısı üretileceği anlamına gelmektedir. Bu vektörün her girdisi farklı bir sınıfa ait çıktıyı kodlamaktadı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

8. epoktan sonra overfitting (aşırı uydurma) başlamıştır.


Modeli Baştan Eğitmek

Bu yaklaşım ile yaklaşık %80 başarıma ulaşılmıştır.


Predictions içindeki her eleman boyutu 46 olan bir vektördür. En büyük eleman ise tahmin edilen sınıf: En
yüksek olasılık değerinin atandığı sınıf olacaktır.
Alternatif yol :
Etiketleri kodlamanın diğer yolunun tam sayı tensörlerine kodlamaktır.

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.

4 boyutlu bir ara katman tanımlandığında, ağ en


yüksek %71 başarıma ulaşmaktadır. %8'lik bir
kayıp söz konusudur.

Bu düşüşün nedeni, ara katmanlarda çok fazla


bilgiyi (46 sınıfa ait düzlemleri birbirinden
ayırmaya yetecek bilgiyi) sıkıştırmaya
çalışılmasıdır.
Doğrusal Bağlanım: Ev Fiyatı Tahmini
Regresyon (bağlanım), bir etikete eşleştirmek yerine sürekli bir değer tahmin edilmeye
çalışmaktadır.
Not : Lojistik regresyon (bağlanım) bir regresyon algoritması değil, sınıflandırma algoritmasıdır.
Boston Gayrimenkul Fiyatları veri seti, bölgesel vergi oranı, suç oranı vb. 13 öznitelik bilgilerini
içeren, 404'ü eğitim 102'si test olmak üzere 506 örnek içermektedir. Verideki her nitelik farklı
ölçektedir. Örneğin bazıları 0 ile 1 arasında oransaldır, bazıları 1 ile 12 arasında değer alırken
bazıları 0 ile 100 arasındadır.
Verilerin Hazırlanması : Normalizasyon
Hepsi çok farklı aralıkta olan verilerle sinir ağlarını beslemek sorun çıkartabilir. Ağ kendini böyle
heterojen verilere kendiliğinden uyum sağlayabilir ancak sonuçta öğrenme daha zorlaşacaktır.
Bunun için genellikle nitelik bazında normalize (standardizasyon) edilmektedir:
Her sütundan o sütunun ortalamasını çıkarıp standart sapmasına bölmektir (Z score). Böylece
nitelik 0 civarında ortalanır ve birim standart sapmaya sahiptir.

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.

Bu şekle göre 80'inci epoktan sonra MAE skorunun ilerlemesi durmaktadır. Bu


noktadan sonra overfitting başlamaktadır.
Derin Öğrenme
Overfitting - Underfitting
DR. ŞAFAK KAYIKÇI
Optimization - Generalization
Optimization (Eniyileme) : Eğitim veri setinde en iyi performansı vermesi için modeli
güncellemeye (=öğrenme) karşılık gelmektedir.

Generilization (Genelleştirme) : Modelin daha önce hiç görmediği veriler üzerindeki


performansının ne kadar iyi olduğuna karşılık gelir.
Overfitting
Eğer modelimiz, eğitim için kullandığımız veri setimiz üzerinde gereğinden fazla çalışıp ezber
yapmaya başlamışsa ya da eğitim setimiz tek düze ise overfitting olma riski büyük demektir.
Overfitting çözümleri
1. Öz nitelik sayısını azaltmak:
2. Daha fazla veri
3. Regularization (Düzenleme) :
Underfitting
Bir model yetersiz öğrenmeye sahipse, modelin eğitim verilerine uymadığı ve bu nedenle
verilerdeki trendleri kaçırdığı anlamına gelir.
Best Fitting
Örnek
Örnek - Quiz
Örnek – Final Sınavı
Değerlendirme
Varyans-Bias Çelişkisi

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

Eğitim zamanında dropout uygulanan aktivasyon matrisi. Test


zamanında değişmeyecek
Dropout – İletim Sönümü
Keras'ta ağ katmanının çıkışına Dropout katmanı ekleyerek iletim sönümü uygulanabilir.
Derin Öğrenme
Convolutional Neural Network
DR. ŞAFAK KAYIKÇI
Evrişim İşlemi
Evrişimsel sinir ağları, derin öğrenmenin bir alt dalıdır ve genellikle görsel bilginin analiz edilmesinde kullanılır.
Yaygın kullanım alanları resim ve video tanıma, öneri sistemleri, resim sınıflandırma, tıbbi görüntü analizi ve
doğal dil işleme olarak sıralanabilir

Resimler kenarlar (edges),


kaplamalar (textures) vb.
bölgesel örüntülere bölünebilirler
Evrişimli Ağ Özellikleri
1. Öğrendikleri örüntüler yön değiştirmezdir (transformation invariant)
2. Örüntüler uzamsal (spatial) hiyerarşileri öğrenebilirler

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.

cevap haritası : Girdinin farklı bölgelerinde bulunan örüntülerin 2B haritası


Evrişim Parametreleri
1. Girdiden çıkarılacak parçaların boyutu : Genellikle 3x3 veya 5x5 olarak seçilir. Örnek 3x3
olarak seçilmiştir.
2. Nitelik çıktı haritasının derinliği : Evrişim esnasında hesaplanacak filtre sayısıdır. Örnekte 32
ile başlayıp, 64 ile bitirilmiştir.

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)

5x5 ik bir girdide geçerli 3x3 'lük parçalar

5x5'lik bir girdiye doldurma yaparak 25


tane 3x3'lük parça çıkarmak
Evrişim adım aralığı (Strides)

3x3'lük evrişimde 2x2'lik adım aralığı kullanmak


En büyükleri biriktirme (max-pooling)
MaxPooling amacı : Adımlı evrişim gibi nitelik haritalarının boyutunu küçültmektedir.
MaxPooling, girdi nitelik haritasından pencereler çıkarıp her kanalın en büyük değerini
almaktadır.
Ortalama Biriktirme (Average Pooling)
Ortalama biriktirmede verilen pencerede en büyük değeri almak yerine kanal bazında ortalaması
alır. Ama max-pooling daha iyi performans gösterir.
Dogs & Cats
www.kaggle.com/c/dogs-vs-cats/data
Toplam 4000 resim : 2000 kedi, 2000 köpek
Ağ İnşası
Veri Önişleme
1. Resim dosyasını oku
2. JPEG içeriğini kod çözerek RGB görüntü noktalarına dönüştür
3. Bu noktaları ondalık tensörlerine dönüştür
4. Görüntü noktalarının değerlerini (0-255 arasında) yeniden ölçekle (0-1 aralığına)

Keras'ta keras.preprocessing.image modülündeki Image-DataGenerator sınıfı kullanılabilir.


Veri Önişleme
Model Eğitilmesi
fit_generator metodu kullanarak üreteçleri daha önce kullandığımız fit metodu gibi kullanabiliriz.
fit_generator kullanırken validation_data parametresini aynı fit metodunda olduğu gibi
kullanabilirsiniz.
Model kaybı ve başarımı
Veri Seti Çeşitlendirme (Data Augmentation)
ImageDataGenerator
 rotation_range : derece cinsinden (0-180) resimlerin restegele döndürme açısı
 width_shift ve height_shift : resimlerin yatayda ve dikeyde toplam genişlik ve yüksekliğe göre
kaydırma oranı
 shear_range : burkma işlemi
 zoom_range : yakınlaşma işlemi
 horizontal_flip : dikeyde resmi döndürme (dikeyde asimetrik olma zorunluluğu yoksa)
 fill_mode : kaydırma, döndürme vb. işlem sonrası ortaya çıkan fazla görüntü noktalarının nasıl
doldurulacağını belirler
Augmentation ve Dropout Eklenmiş hali
Sonuçlar
Öneğitimli (pretrained) Evrişimli Sinir Ağı
Resim veri seti küçük olduğunda derin öğrenmede çok yaygın kullanılan bir teknik, öneğitimli
sinir ağı kullanmaktır. Öneğitimli ağ daha önce büyük bir veri setinde genellikle de büyük ölçekli
resim sınıflandırma görevinde eğitilip kaydedilmiş ağdır.
Öneğitimli bir ağı kullanmanın iki yolu vardır :
1. Öznitelik Çıkarımı
2. Hassas ayar yapmak
Öznitelik Çıkarımı

Evrişim tabanı üzerinde sınıflandırıcaları


değiştirmek
Öznitelik Çıkarımı
VGG16 modeli diğer bazı modeller gibi Keras içerisinde gelmektedir. keras-applications
modülünü kullanarak içerisinde bulunan resim sınıflandırma modellerini (hepsi ImageNet
üzerinde eğitilmiş) kullanabilirsiniz. Kullanabileceğiniz bazı pretrained modeller :

 Xception  VGG16  VGG19  ResNet, ResNetV2,  InceptionV3


ResNeXt
 InceptionResNetV2  MobileNet  MobileNetV2  DenseNet  NASNet
VGG16
 weights : Modelin başlatılacağı kontrol noktasını belirler
 include_top : Dense katmanların dahil olup olmadığını
belirler. Ön tanımlı olarak tamamen bağlı katmanlar
ImageNet'teki 1000 sınıf içindir. Kendi Dense
sınıfladırıcımızı (kedi-köpek olarak sadece iki sınıf)
kullanacağımızdan buna ihtiyacımız olmayacak.
 input_shape : Ağı besleyecek tensörün şeklini belirler.
Tamamen opsiyoneldir. Boş bırakılırsa ağın şekli ne olursa
olsun işlem yapar.
VGG16
Son nitelik haritasının şekli (4, 4, 512). Bunun üzerine kendi Dense sınıflandırıcımızı ekleyeceğiz.
Bu noktada iki farklı yol seçilebilir:
1. Evrişimli tabanı kendi veri setimizle çalıştırıp, sonuçları Numpy dizisi olarak diske kaydedip,
bunu daha sonra kendi başına girdi olarak düşünüp, 1.Kısım'da kullandığımıza benzer fully
connected Dense bir sınıflandırıcıya gönderebiliriz.
2. Modeli sahip olduğu tabanın (conv_base) üzerine Dense katman eklemek ve tüm girdilerle en
baştan çalıştırmak.

Örnekte birinci teknik kullanılmıştır.


Augmentation olmadan Hızlıca öznitelik
çıkarma

Çı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

148x148'lik 32 kanallı bir çıktısı var.

İlk katman aktivasyonlarının dördüncü kanalını çizdirilmesi İlk katman aktivasyonlarının yedinci kanalını çizdirilmesi

Diagonal köşe dedektörü Açık yeşil nokta dedektörü


Evrişim Filtelerini Görselleştirmek
Evrişimli sinir ağlarının öğrendiği filtreleri incelemenin bir diğer yolu da her filtrenin hangi
örüntüye cevap verdiğini göstermektir. Örneğin ImageNet'te öneğitilmiş VGG16 ağının
block_conv1 katmanının sıfırıncı filtresi için bir kayıp fonksiyonu aşağıdadır :

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.

 Yapay sinir ağları: sınıflandırma ve regresyon problemleri


 Evrişimli sinir ağları : görüntü işleme
İnsan Beyni
Sinir ağları insan beynini taklit etmek için tasarlanmıştır. Bu, hem yapısı
(hem beyin hem de sinir ağları nöronlardan oluşur) hem de işlevleri (her
ikisi de karar ve öngörüde bulunmak için kullanılır) için geçerlidir.

Beynin üç ana bölümü şunlardır:


 Beyin (cerebrum)
 Beyin sapı (brainstem)
 Beyincik (cerebellum)

Muhtemelen beynin en önemli kısmı serebrumdur. Dört lob içerir:


Frontal lob  RNN
Parietal lob
Temporal lob  ANN
Oksipital lob  CNN
RNN

ilk değişiklik, ağın her katmanı bir araya getirilir.


temel bir sinir ağı
RNN
Ardından, üç değişikliğin daha yapılır:
1. Sinir ağının nöron sinapslarının tek bir hatta basitleştirilir
2. Tüm sinir ağının 90 derece döndürülür
3. Sinir ağının gizli katmanı etrafında bir döngü oluşturulur

Tekrarlayan sinir ağının gizli katmanını çevreleyen bu çizgiye


zamansal döngü (temporal loop) denir. Gizli katmanın yalnızca
bir çıktı oluşturduğunu değil, çıktının aynı katmana girdi olarak
geri beslendiğini belirtmek için kullanılır.
RNN
Bir veri kümesinin belirli bir gözleminde kullanılan
gizli katman yalnızca o gözlem için bir çıktı
oluşturmak için değil, aynı zamanda bir sonraki
gözlemin gizli katmanını eğitmek için de kullanılır.

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.

Bu durum aslında geri yayılım algoritmasının çarpımsal doğasından kaynaklıdır.


Bu sorunu çözmek için LSTM'lerde Wrec = 1 olarak set edilir.
LSTM
Bu sinir ağı, bir katmandan gelen çıktıların ağırlıklı toplamlarını
bir sonraki katmanın girdileri olarak ileten nöronlara ve
sinapslara sahiptir.

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ı

Genel Yapı Peephole (gözetleme deliği) Coupled Gate Varyasyonu:


Varyasyonu: Katmanlarının hücre Unutulacakları ve yeni bilgiler
durumundan verileri okumasına eklememiz gerektiğini ayrı ayrı
izin veren yapıdır. belirlemek yerine, bu kararlar birlikte
alınır.
Örnek : Facebook Fiyat Hesaplaması
Eğitim verisi : 2015'in başından 2019'un sonuna kadar Facebook'un hisse senedi fiyatı hakkında
bilgi içeren bir dizi eğitim verisi
Test Verisi : 2020'nin ilk ayı boyunca Facebook'un hisse senedi fiyatı hakkında bilgi içeren bir dizi
test verisi
RNN : 2015-2019 verileri üzerine eğitilecek ve Ocak 2020'den itibaren verileri tahmin etmek için
kullanılacaktır
RNN - timestamps
Timestamps, tekrarlayan sinir ağı mevcut gözlem hakkında bir öngörüde bulunduğunda kaç tane
önceki gözlemin dikkate alınması gerektiğini belirtir.

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.

return_sequences = True : Bu eklediğinizden sonra başka bir LSTM katmanı eklemeyi


planlıyorsanız, bu her zaman belirtilmelidir. son LSTM katmanını için return_sequences =
False yapılmalıdır.

input_shape: eğitim verilerimizdeki timestamps sayısı ve predictor(tahminleyici) sayısıdır.


Örneğimizde, timestamps = 40 ve predictor= 1 (hisse senedi fiyatı) dir.
Derin Öğrenme
Generative Adversarial Network
DR. ŞAFAK KAYIKÇI
Üretken Çekişmeli Ağlar
Üretken çekişmeli ağlar (GAN'lar), insanların ürettiklerine benzer görüntüler, müzik, konuşma
veya metin gibi materyaller üreten sinir ağlarıdır.
Üretken çekişmeli ağlar , belirli bir veri dağıtımını taklit etmeyi öğrenebilen makine öğrenimi
sistemleridir.
İlk olarak derin öğrenme uzmanı Ian Goodfellow ve meslektaşları tarafından bir 2014 NeurIPS
makalesinde önerilmiştir.
StyleGAN Kullanımına örnek : https://www.thispersondoesnotexist.com/
Örnek

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

You might also like