Derin Öğrenme Nedir?

Hayal edelim ki.. Size önümüzdeki hafta safariye gideceğimi söyledim ve bana daha önceden safari tecrübesi olan biri olarak fillerden uzak durmam gerektiğini söylediniz.

Bir aptalmışcasına “Fil nedir?” diye size sorduğumda açıklama yapma gereksinimi yapmadan bana bir fil resmi gösterip, bunlardan uzak dur diyerek, örnek verdiniz  🙂

Bir sonraki hafta safariden döndüğümde neredeyse bir fil tarafından öldürüleceğimi söyledim size ve bana ne olduğunu sordunuz.

Büyük bir hayvan gördüğümü ama bana gösterdiğiniz fotoğrafa benzemediğini ve o yüzden de onu güvenli görerek yanına yaklaştığımı söyledim. Gördüğüm hayvan aşağıdadır 🙂

Tabii ki bu kadar da olmaz diyerek, beynimin kapasitesinden fazlasını beklediğinizi farkettiniz.

Bana bir “cheat code” vereceğinizi ve bir sonraki safaride işe yarayacağını söylediniz.

Cheat Code: Eğer her açıdan kahverengimsi, 4 adet kalın derili ayağa sahip büyük kulakları olan ve yüzünden çıkan bir tüp gibi kalın, uzun bir burnu olan, ayrıca senden şişman ve büyük bir şey görürsen o bir fildir ve ondan uzak durman gerekir.

Bir sonraki ay, tekrar safariye gittim ve bu sefer bir file doğru gitmedim. Çünkü bana verdiğiniz “cheat code” işe yaradı.

Cheat Code’u Bulalım

Peki bu “cheat code”u nereden buldun? Çünkü bir file ait hangi açıdan bakarsan bak değişmeyen özellikler topladın. Sonuç olarak elinde bir fil hakkında bir çok data bulunmaktadır ve bu bilgiler bize zihnimizde bir fil görüntüsü oluşmasına yardımcı olarak bize “cheat code” bilgisini verir.

Düşünün ki gerçekten filin ne olduğunu bilmiyorum ama bu cheat code aklımda bir file dair görüntü oluşturmama yardımcı olacaktır.

Bana daha önce gösterdiğiniz fotoğraf neden mi işe yaramadı? Halbuki orada da bir filin ne olduğunu göstermiştiniz. Ama dediğim gibi bir aptal olarak tam olarak bir filin o görüntüde olduğunu düşündüğüm için işe yaramamıştı.

İşte DERİN ÖĞRENME bu şekilde çalışır.

Basit bir derin öğrenme; yapay sinir ağları ayrıca buna derin sinir ağları da denir.

Farzedelim ki liseden kalma bir matematik bilgimiz var, matrix nedir hepimiz biliyoruz değil mi? Ve bir matrix’i diğer matrix ile çarpmayı? Aşağıda bilgileri tazelemek adına bir örnek mevcut.

Otonom Araçlara Giriş
Otonom Araçlara Giriş

Matrix nedir? Hatırlayalım. Bu yapay sinir ağları (İngilizcesinin baş harflerinden gelen kısaltmasıyla ANN) aslında çok derin bir konudur ama biz bebek adımları ile ilerleyeceğiz. Bildiğiniz gibi insan beyni birden çok nörondan oluşan bir ağdan oluşur. Yapay sinir ağlarının ilham kaynağı budur.

Kağıt üzerinde aşağıdaki şekilde görünür.

Otonom Araçlara Giriş

ANN, sihirli bir kutu gibidir. Girdiler alır ve bir takım çıktılar verir. Örneğin, fotoğrafları girdi olarak alan bir fotoğrafın bir fil olup olmadığının çıktısını veren bir ANN sağlayabiliriz. Ya da bir yolun fotoğrafını verdiğiniz bir ANN size daha hızlı olmanızı ya da yavaşlamanızı söyleyebilir.

Bu nasıl olur? Nasıl bir ANN yaratabilirsiniz?

Basitçe ANN, bir insan beyni gibidir. Önce verilerle sistem eğitilir. ANN’e data verdiğinizde, bir sonraki seferde nasıl karar vermesine yardım edecek bir “cheat code“ yaratır.

Bu cheat code’a ANN’in Weights’i (ağırlık) denir.

Daha önce matrix’de gördünüz (x,y) ANN’in inputları, (u,w) ise ağırlıklar ya da cheat code’lardır. Input ile cheat code çarpıldığında cevabı buluruz.

Bir çok çeşitte ANN vardır, nasıl design edildiğine göre değişir. Evet/hayır cevabı gibi örnek vererek ya da özel bir numara çıktısı veren ANN’ler olabilir. Nasıl girdiler verileceğini ve nasıl çıktılar alacağınızı siz seçersiniz. Ya da ne kadar büyük ve kompleks oluşuna siz karar verirsiniz. Örneğin bir videoyu girdi olarak alarak bunun sonucunda ses, görüntü ya da yazı çıktısı veren yapay sinir ağı oluşturabilirsiniz.

Tabii ki bunların hepsi bilgisayar tarafından sayılara çevrilir ve girdi ile çarptığımızda bir çıktıyı verecek kocaman bir matrix ağırlığı (weights) oluşturur.

Yukarıda bahsettiğim eğitme işini biraz açalım. “Nasıl eğitilir?”de bir ANN bize anlamlı çıktılar verir.

Nasıl Eğitilir?

Belirli tipte girdileri ve çıktıları olan bir ANN yarattınız ama ANN çözmeye çalıştığı sorun hakkında bir şey bilmiyor. En başta bahsettiğimiz fil örneği gibi, benim de siz bana bir fil fotoğrafı gösterene kadar bir filin ne olduğu hakkında bir fikrim bile yoktu.

O anda bana fotoğraf gösterip sorsaydınız, size o fotoğraf hakkında rastgele bir şeyler söyleyebilirdim. Bu durumda rastgele bir cheat code oluşturmuş olurum. Değil mi?

Ama şimdi bana bir fil fotoğrafı daha gösterip bunun fil olduğunu söylerseniz, daha önce oluşturduğum cheat code’u bu bilgiye göre ayarlarım, bu durumda bilgilerimi kesinleştirip, bir filin ne olduğu hakkında bir fikrim olduğu için cheat code’um rastgele olmaktan çıkar ve eğer önden başka bir fil fotoğrafı görseydim muhtemelen doğru cevabı verirdim. Eğer daha çeşitli fil fotoğraflarına sahip olsaydım, cheat code’um daha doğru cevap vermek üzere daha iyileştirilmiş olurdu.

Sonuç olarak bir filin tam olarak ne olduğunu bilmiyorum ama bir filin özelliklerini tanımak ve onlardan uzak durmak adına farklı fotoğraflarda yeterince korelasyon gördüm.

Benzer bir şekilde, bir ANN oluşturduğunuzda rastgele bir cheat code seti ile başlanır. Daha sonrasında bir resim input olarak verilir ve beklenilen output söylenir (yes). ANN’in güzelliği, eğer bir örnek input verip beklenen sonucu söylerseniz, ANN cheat code’unu düzenleyip, bir sonraki sefer bunu tekrar ederek doğru cevabı vermesidir. Cevabınızla eşleşmesi için verdiğiniz dataya göre matrix’in ağırlığı (weights) değişecektir. Bunun için rastgele ağırlıkla (weight) başlayabilirsiniz. ANN bunları ayarlayarak cheat code’un en iyi şekilde çalışması için ayarlamasını yapacaktır. İşte bu bir ANN’i eğitmektir (training). Daha çok data daha kesin sonuçlar yaratır.

Daha önce açıkladığım gibi, bu durum matrix çarpımı ile olur. ANN içini input resminizle (sayılara çevrilir), weight’i (ağırlığı) çarparsanız cevabı alırsınız.

Hesaplama

Otonom Araçlara Giriş
Otonom Araçlara Giriş

Tabii bu yeterli değil, unutmayın ANN çok da zeki değil. Sonuçta cheat code ile çalışıyor. Ona sadece fil fotoğrafları verip sonuç olarak evet cevabını verirseniz sizce ne olur?

Tembelleşecektir ve her gördüğü fotoğrafa fil diyecektir. Ağırlıklarını (cheat code’unu) verilen fotoğrafa bakmaksızın ayarlayacak ve her zaman bir “yes” output’u çıkaracaktır. Buna “underfitting” denir. Yani aptal arkadaşınızı zeki sanma hatası yapmaya “underfitting” denir. ANN’iniz belirli bir cevaba karşı önyargılı olmuş oldu. Bunu önlemek için “hayır” cevabını veren karşıt örnekler de vermeniz gerekir. Yani inputlarınızı çeşitlendirerek  aslan, kaplan, insan, Pikachu, deniz atı gibi örnekler verdiniz. Bu durumda ANN cheat code’unu daha dikkatli ayarlamak zorunda kalacak. Artık doğruluğu artırıyorsunuz ve daha güvenilir olmasını sağlıyorsunuz. Ya da ANN’in cheat code’u hala tembel olsa da artık verdiğiniz tüm dataları hatırlayan bir hal alabilir buna da “overfitting” denir. Bu genellikle ANN büyük ve derin olduğunda olan bir durumdur. Sonuç olarak verdiğiniz tüm dataları depolamaya başlar. Bu durumda eğitim datalarınız da çok başarılı olur ama verdiğiniz yeni bir örnekte başarısız olur.

Artık cheat code bir cheat code gibi değil de görüntüler sözlüğü gibi çalışır. Modelinizin boyutunu azaltarak (weight’i düşürerek) veya veri çeşitliliğini artırarak bu durum önlenebilir. İlk çözüme “dropout” ikinci çözüme “balancing the dataset” adı verilir.

Aynı zamanda safari örneğimizde resmin birden çok açısının verilmesi gerektiğini öğrenmiştik ki orada benim yaptığım aptalca bir hata gibi hatayla karşılaşmayalım. Bunun için araştırmacılar, mühendisler aynı resmin çeşitliliğini artırmak için rengini açarak, koyultarak ya da aynı etkiyi vererek eğitim setleri elde ederler. Bu ANN’in olabildiğince kesin sonuç verebilmesini sağlar.

Eğitim bittiğinde yeterince dengeli ve filleri makul bir doğrulukta elde eden bir ANN elde etmiş olacaksınız. (eğitimli model yapay sinir ağı)

Backpropagation

Ağırlığın (weights) ayarlanma işlemine (dataya bağlı cheat code’un güncellenmesi) “backpropagation” denir. Eğitim yaparken ANN’e örnek olarak bir kedi gösterdiğimizi ve cevap olarak hayır bu bir fil cevabını aldığımızı farzedelim. Önce kendi cevabını oluşturmak için cheat code’unu kullanacaktır. Eğer cevap doğruysa cheat code’da ayarlama yapmaya gerek yok değil mi? Tembel bir ANN yalnızca yanlış yaptığında cheat code ayarlaması yapar.

Bu yüzden eğer cevap yanlış olsaydı ağırlığında (cheat code’unda) bir tiny bit ile ayarlama yapar ve ağırlığı tekrar test eder. Bu ayarlama algoritmasına “backpropagation” denir. ANN tarafından yapılan hatalar matrix ağırlığına dalgalar yollayarak değerlerde değişiklik sağlar. Bu yüzden ANN yaratılırken rastgele değerler verilebilir. Zamanla kendi kendine ayarlamasını yapacaktır.

Aslında bu, sınavlarda yaptığımız hataların üzerinden geçip bir daha hata yapmamamıza benzer bir durumdur.

Şimdi daha önce yukarıda paylaştığım geçtiğimiz sinir ağına dönersek, hidden layer göreceksiniz. ANN nöron katmanlarından oluşur. Bu nöronlar, ağırlıkları (weights) değer gibi taşır. Bunlara gizli katman denir. Çünkü ağdaki tam ağırlığını bilmeniz gerekmez. Bilmeniz gereken şey bu bir cheat code ve verdiğiniz input’a göre kendini günceller.

Bu, derin öğrenmenin neden black box olarak anlaşıldığının nedenidir. Eğer herhangi bir dilde bir program yazdıysanız, her şey için açık bir şekilde yönergeleri yazmışsınızdır. Ama burada bilgisayarın yazılı algoritmanın yerine kendi yarattığı cheat code’u göremezsiniz.

Otonom araçlara dönersek, farzedelim ki belirli bir milisaniyede arabanız etrafında birçok kameradan görüntüler alıyorsunuz. Radar ve ridarlardan da verileri topluyorsunuz. Bu bilgileri bir liste altında birleştirince arabanın ANN’i olarak kullanırsınız. Ve ağdan beklediğiniz output uzun bir yönlendirme açısı, gaz/fren değerleri, farları yakıp yakmama, korna çalıp çalmama gibidir.

Sürücüsüz Aracı Nasıl Eğitiriz

Şimdi arabanın beynini nasıl eğitiriz? Önce arabayı kendiniz normal bir şekilde sürersiniz ama sensör ve kameralardan girdileri toplamaya devam ederiz. Aynı şekilde her milisaniyelik datayı, yönlendirme açısını ve gaz şiddetini ölçecek ekipmanımız vardır. Eve geldiğinizde topladığınız bütün dataları kullanarak ANN’i eğitmeye başlayabilirsiniz. ANN, sizin bilgisayar görü versiyonunuzu ve sürüş kararlarınızı olabildiğince taklit edebilmek için kendi cheat codunu güncelleyecektir. Buna behavioural coloning denir. Ve günümüzde birçok araç üreticisi tarafından kullanılmaktadır (sürüş datası toplamak ve araçlarına pratik yaptırmak). Her bir deneme sürüşünden sonra araç karar alma konusunda daha iyi olacaktır.

Diğer her şey aynı olurken, kendini süren arabalar yarışında en büyük kazandırıcı faktör sürüş datası olacaktır.

Şimdi deep learning’in ne olduğunu ve ne işe yaradığını biliyorsunuz. Derin Sinir Ağları’nın (ANN) ne olduğunu ve nasıl çalıştığını (ağırlıklar=cheat codes, bacpropagation=verilen örnek teste göre ağırlıkları ayarlamak) biliyorsunuz. Overfit olmaması adına büyük ve dengeli bir data setiniz olması gerektiğini de biliyorsunuz (cheat codelarını ayarlamak fazla tembel veya aşırı zeki olması).

Tebrikler, düşündüğünüzden daha da büyük bir başarı bu. Dalga geçmiyorum.

Bir sonraki yazıda Bilgisayar Görüsü (Computer Vision) ile devam ediyor olacağız.
Bir önceki yazımız; Otonom Araçlara Giriş – 1 

Kaynak: https://medium.com/swlh/everything-about-self-driving-cars-explained-for-non-engineers-f73997dcb60c

 

Facebook Yorumları