29 Ekim 2017 Pazar

Derin Öğrenme Başlangıç Seti - Donanım Ve Yazılım

Merhabalar dostlarım. Bu yayınımda Derin Öğrenme'ye(Deep Learning)  başlamak için yazılımsal ve donanımsal olarak nelere neden ihtiyacımız var detaylı bir şekilde anllatmaya çalıştım.
Bu yayını Deep Learning'e giriş seti olarak görebilirsiniz.

Hatırlarsanız daha önceki yayınlarımızda makine öğrenmesi ve deep learning(DL) hakkında konuşmuştuk. DL'e teorik olarak bir giriş yaptıktan sonra bunları uygulama vaktimizin geldiğini düşündüm.

Öncelikle makine öğrenmesi yayınımda elimizdeki verinin artmasından ve bu veriyi işleyecek donanımın güçlenmesinden bahsetmiştik.
Daha hızlı veri işlememiz, matematiksel hesaplamaların daha hızlı yapıldığı anlamına gelmekte. Nasıl mı?
Bilgisayarımızdaki CPU(Central Processing Unit) yani Merkezi İşlem Birimi bu hesaplamaları yapmakla görevlidir. Hesaplamalar Core(çekirdek) ile yapılmaktadır ve her bir Core bir zamanda sadece bir hesaplama yapabilir. CPU'da ki Core'ların sayısı az olsada oldukça güçlüdürler.
Örnek bir CPU fotoğrafı:

GPU(Graphics Processing Unit) yani Grafik İşlemci Ünitesi ise CPU'dan daha zayıf Core'lar içerse de sayıca çok fazla olduğu için hesaplamaları farklı Core'lara bölerek yapar ve dolayısıyla CPU'dan daha hızlı hesaplama yapabilir.
Bu olayı daha iyi anlamak için şöyle yapalım:
Örneğin bir kazan çorba düşünelim. Sizce bu koca kazanı hızlı(bir saniyede 2 kaşık) içen bir adam mı önce bitirir yoksa normal hızda(bir saniyede 1 kaşık) içen 20 kişi mi ? Tabiki normal hızda içen 20 kişi daha hızlı bitirecektir.

Örnek bir GPU fotoğrafı:

Örnek bir CPU ve GPU'daki Core sayısı karşılaştırma görseli:


Bizlerde DL çalışmalarımızda daha hızlı hesaplama yapabilmek için GPU'ları tercih etmekteyiz. DL hesaplamalarını hızlandırmak için yapılmış alternatif makineler tabiki de bulunmaktadır. Örneğin Google'un çıkardığı TPU'lar oldukça iyi gözüküyor. Yazımızın ilerleyen bölümlerinde tekrar bahsedeceğiz. Başka bir örnek olarak da VPU verilebilir.
Örnek bir TPU:

Peki bu güçlü makineleri neye göre seçeceğiz ?

İki iyi seçeneğiniz var, projenize bu makinelerden birini alabilir ya da projenizi internete bağlayarak uzaktaki makineye erişmek. Bu konuda ne alanda çalıştığınızın önemli olduğunu belirtmek isterim. Gelin bu durumları biraz inceleyelim.

Örneğin bir otonom araç yapacaksınız bu örneğimizde dron ya da bir araba düşünelebilir.
Aracın kendi kendine gidebilmesi için sensörlerinden aldığı veriyi(fotoğraf ve radar verileri gibi) makineye taşıyıp yön ve hız gibi verileri hesapladıktan sonra donanıma geri dönüt(dönme açısı ve hız verisi gibi) vermesi gerekmektedir. Buradaki veri aktarımın hızı nereye döneceğine karar vermesi kadar önemli bir yer tutmaktadır. Yoksa veri aktarımı yaparken araç kaza yapabilir veya yanlış yola sapabilir. Dolayısıyla veri işlemenin aracın içinde(local) yapılması gerekir.
Eş zamanlı işlem yapabilmesi veri akışına ve verinin işlenişine bağlıdır.


Peki nasıl bir makine ?

Arabalar için düşünecek olursak. Araba büyük olduğu için yer sorununuzun olmadığını biliyoruz. Bu nedenle normal boyutta GPU'lu makine kullanabiliriz.
Otonom araçlarda kullanılan NVIDIA Drive PX2 kartı:


Fakat dron gibi küçük, uçabilen ve enerji deposu küçük olan bir araç düşündüğümüzde bu boyutta bir kart kullanamayacağımızı görebiliriz.
Örnek dron fotoğrafları:

Peki bunlar için nasıl bir ürün kullanılabilir ?
Aklınıza hemen fiyatı ucuz olan, kredi kartı boyutundaki bilgisayar Raspberry Pi gelmiş olabilir fakat bu geliştirme kartı bizim büyük DL algoritmalarını işleyecek güce(hıza) sahip değil.
Örnek bir Raspberry Pi Zero fotoğrafı:


Peki ya ne kullanabilirim ?
Bu konuda birçok çözüm yolu bulunabilsede ben size popüler olan iki tanesinden bahsedeceğim.

NVIDIA Jetson
Bu da kredi kartı kartı boyutunda bir bilgisayar fakat bu bir GPU yani DL algoritmalarınızı gönül rahatlığıyla çalıştırabileceğiniz bir makine.
Jetson TX1 fotoğrafı:

Jetson TX2 Developer Kit ise tamamen bir bilgisayar. Üzerinde USB, HDMI, SD kart bağlantıları ve hatta Wi-Fi anteni ve bir kamerası bile var. Üzerine rahatlıkla Ubuntu kurabilir; klavye, fare ve ekran bağlayarak bir bilgisayar gibi de kullanabilirsiniz. NVIDIA JetPack yazılımını kurarak da hızlı bir başlangıç yapabilirsiniz. JetPack kurulumu ile DL için en popüler yazılım ve kütüphaneler otomatik olarak kurmuş da olacaksınız.
Jetson TX2 Developer Kit:

Jetson ile yapılmış küçük bir robot:


İkinci seçenek ise bir USB Stick. İntel'in çıkardığı bilgisayarınıza takarak DL algoritmanızı daha hızlı çalıştırabileceğiniz ürünün adı: Movidius Neural Compute Stick
Bu ürünü isterseniz Raspberry Pi'nize takarak kullanabilirsiniz:


Apple bu yıl(2017) çıkarttığı yeni iPhone'lar ile birlikte, telefonların içerisinde kullandığı ve daha verimli nöral işleme yapabilecek A11 Bionic adlı işlemcisini de tanıttı:
Donanımın ne kadar önemli olduğunu görebiliyoruz.


Peki ya bir donanım almak istemiyorsanız ?

Bu seçenekte ise eş zamanlı bir işleme yapmadığımız ya da sadece modeli eğitmek için kullandığımız donanımları inceleyeceğiz. Yani hesaplama hızı(modelin eğitimi daha ön planda) yine önemli olsun fakat veri alışverişi hızı önemli olmasın. Diyelim ki DL modelinizi eğiteceksiniz ve daha sonra kullanacaksınız.
Yani kısa süre için ihtiyacınız var ve bir donanım alıp bir sürü para vermek istemiyorsunuz.
O zaman sizlere bir Cloud lazım. İnternet üzerinden bağlanıp yazılımınızı güçlü bir makinede çalıştırabilir ve işiniz bittikten sonra makineyi kapatabilirsiniz. Ve kullandığınız kadar ödersiniz.
Not: Cloud uzun süreli kullanımlarda günümüzde pahalı bir seçenek olacaktır.

Cloud Sağlayıcıları:

En popüler üç Cloud servisine örnek verecek olursak, Amazon'un AWS'i, Google'un kendi TPU'larını kullanabileceğiniz Google Cloud Platform'u ve Floyd Hub'u örnek verebiliriz.

Donanımı tamamladık peki ya şimdi ?

Öncelikle DL modellerimizi oluşturabileceğimiz bir programlama dili seçelim.
Biliyorsunuz ki Python programlama dili oldukça popüler. Özellikle de yapay zeka, makine öğrenmesi ve derin öğrenme gibi konularda. Yapılan akademik ve ticari çalışmalarda bunu görmekteyiz.
Bunun en büyük nedeni, temiz bir syntax'ı olması ve kolay okunabilir olması. Önemli bir diğer neden ise, Python ile birçok platforma uygulama geliştirebiliyor olmamız. Masaüstü bilgisayarlardan tutun web uygulamalarına kadar birçok alana yayılmış durumda. Blogumda kısa bir tur ile bunu rahatça görebilirsiniz.

Ayrıca yaptığımız matematiksel işlemlerdeki kodlamayı kolaylaştırmak için, Python ile birlikte bazı kütüphaneler de kullanılmakta. Bunlardan en popülerlerinden biri de Numpy kütüphanesidir.
Numpy hakkında daha fazla bilgi almak için buraya tıklayınız.

Daha önce "İnsanda Ve Makinede Öğrenme" yayınımda da anlattığımız gibi Deep Learning alanında çok büyük matematiksel işlemler yapılmaktadır. Bu hesaplamaların daha optimize(hızlı ve verimli) çalışması için bazı kütüphaneler de kullanılmakta.
Örneğin Google'ın yayınladığı TensorFlow kütüphanesi bunlardan biri.

Yukarıda anlattığımız Google'un TPU'su(Tensor Processing Unit) yine Google'ın kendi kütüphanesi TensorFlow ile daha verimli çalışması için çıkartılmıştır.
TensorFlow hakkında daha fazla bilgi almak için buraya tıklayınız.
TensorFlow içerisinde bir de TensorBoard bulunmaktadır. TensorBoard bir görselleştirme uygulamasıdır modelinizi eğitirken, modelin başarı durumunu canlı bir şekilde grafikile izlemenizi sağlaması başta olmak üzere birçok getirisi daha bulunmaktadır.

TensorBoard ekran görüntüsü:


Sizlere Keras kütüphanesinden bahsetmek isterim. En popüler ve en sevdiğim kütüphanelerdendir.
Keras kütüphanesi arka planda TensorFlow, Theano ve CNTK gibi kütüphaneler kullanmaktadır. Bu kütüphaneler hakkında da yazımızın devamında konuşacağız.
Keras ile modelinizi basit ve hızlı bir şekilde oluşturduktan sonra arkaplanda hangi kütüphaneyi kullanacağınızı seçiyorsunuz ve o kütüphaneyi arkaplanda kullanarak DL modelinizi çalıştırıyor. Model oluşturma konusunda sizlere müthiş bir kolaylık sağlıyor.
Keras'da diğer kütüphaneler gibi başlı başına bir konu dolayısıyla bu konuyu başka yayınlarıma bırakıyorum.
Keras hakkında daha fazla bilgi almak için buraya tıklayınız.

New York Üniversitesi ve FaceBook'un desteklediği Torch'da popüler DL kütüphaneleri içerisinde. Torch, Lua dili ile kullanılmakta. Lua dili ile kullanılması nedeniyle şu anda durumu pek iyi değil.
PyTorch adında Python ile kullanılan bir kütüphane daha piyasaya sürüldü ve şu an FaceBook bu kütüphanenin arkasında. Çok yeni bir kütüphane fakat dokümantasyon ve örnek proje sayısı hızla artmakta özellikle de akademik alanda.
Bir diğer en popüler kütüphaneye bakacak olursak da Berkeley, Kaliforniya Üniversitesi'in çıkardığı Caffe'dir.
Piyasaya sürülen Caffe2, FaceBook'un kolları altında destek görüyor.

Montréal Üniversitesi'nin çıkardığı Theano ise oldukça başarılı bir kütüphaneydi özellikle tek GPU çalışmalarda fakat şu anda canlılığını bitirdi ve desteklerini kaybetti.

Microsoft'un CNTK kütüphanesi ve Amazon'un MXNet kütüphanesi de popüler kütüphaneler arasında.


Ayrıca sizlere son olarak NVIDIA'nın DIGITS'inden de bahsetmek istiyorum.
Eğer ellerimi kodlara değmek istemiyorum diyorsanız bu program tam size göre.

Kısaca özetleyecek olursak DIGITS web sayfasında çalışan bir arayüz ve bu program ile modellerinizi eğitebiliyor, anlık donanım durumunu ve model başarısını grafikli bir arayüzde izleyebiliyorsunuz.
Grafik arayüzü üzerinden modeller oluşturuyor ve görsel olarak inceleyebiliyorsunuz. İsterseniz kod yazarak da erişim sağlayabilirsiniz. Veri setlerini ve modelleri düzenli bir şekilde izleyebiliyorsunuz.
Bol görselli ve temiz bir arayüz.


DIGITS'ın şu anda desteklediği Deep Learning kütüphaneleri: Caffe, Torch, ve Tensorflow.

Aktif olarak GitHub'da projelerimi açık kaynak olarak yayınlamaktayım: GitHub - Arda Mavi
DL projelerimi inceleyebilirsiniz, isterseniz geliştirebilirsiniz ve kaynak gösterdiğiniz sürece kendi projelerinizde de kullanabilirsiniz.

Bu yayın ile birlikte Deep Learning'e giriş çatal-bıçak setimizi de hazırlamış olduk.

Umarım yararlı bir yayın olmuştur.
Sorularınızı, isteklerinizi ve önerilerinizi bekliyorum.
Daha fazla insana ulaşabilmem için yayınımı paylaşırsanız sevinirim.
İyi çalışmalar dilerim.

4 Eylül 2017 Pazartesi

Yapay Zeka - Düşünen Ve Üreten Makinelerin Doğuşu

Merhabalar dostlarım. Günümüzde adını sürekli duymuş olduğumuz yapay zekanın son durumu ve geleceği hakkında biraz bahsetmek ve yorumlarımı paylaşmak istiyorum.

Biliyorsunuz ki Deep Learning (DL) ile birlikte yapay zeka çok büyük bir güç kazandı ve yapay zeka ile ilgili beklentimizi oldukça arttırdı.

Şu an için DL birçok soruna çözüm üretebilecek gibi gözüküyor. Bununla birlikte birçok mesleğin de makinelere bırakılacağını da görebiliyoruz. Bu konuda detaylı olarak yazımda bahsedeceğim.

Deep Learning, yurt dışında üniversitelerin ve firmaların ilgisini fazlasıyla çekmiş olsada maalesef Türkiye'de yeterince farkındalık yaratmadığını gördüm. Bunun nedeninin ise DL'in Türkiye'de yeterince tanınmamasından kaynaklı olduğunu düşünüyorum. Bu farkındalığı yaratmak için sayfam üzerinden Türkçe DL kaynağı oluşturmaya başladım.
Yapay Zeka yayınlarım: ardamavi.com - Yapay Zeka

Yapay zeka ve robotlar şu an neler yapabiliyor ?

- Ulaşımımızı sağlıyor:
Vaktimizin çoğunu trafikte harcıyoruz ve kazalarda birçok kayıp veriyoruz.
Ulaşımın hem daha güvenli hemde de daha verimli(daha az enerji harcayarak, daha hızlı) olmasını sağlıyor.


Eğer direksiyonu bırakmak istemiyorsanız(hobi olarak araba kullanan biriyseniz), size asistanlık yapıyor ve daha güvenli araba kullanmanızı sağlıyor.
Bkz: TESLA, TOMTOM, PACCAR

- Doktorluk yapabiliyor:
En deneyimli doktorlardan daha iyi teşhis koyabiliyor.
İlaç üretebiliyor. (İlaç üretiminde ve testinde insanların görev almasından daha hızlı olduğunu görebiliyoruz.)
Daha hızlı ve daha güvenli ameliyatlar yapabiliyor.
Bkz: LUMIATA, ATHELAS

- Evinizi yönetebiliyor:
Evinizi daha kullanışlı ve güvenli tutabiliyor. Güvenlik kamerasıyla sürekli tetikteler ve akıllı nesneler ile evinizi daha kullanışlı hale getiriyor(Akıllı buz dolapları gibi).
Sizlere asistanlık yapıyor. Sizi iyice rahata alıştırıyor gibi gözükebiliyor ama evde tek başına yaşayamayanlara yardım ettiğini unutmamamız gerekiyor.
Bkz: TOYOTA HSR

- Bilimin ve teknolojinin gelişmesine katkı sağlıyor:
Çok hızlı hesaplama yapabiliyorlar ve insanların çözemediği formülleri çözebiliyor.
Bkz: ETH ZURİCH, NCSA

- Sanat üretebiliyor:


Resim yapıp, müzik besteleyebiliyor.
Bkz: AIVA Technologies , CLOUDPAINTER

- Verileri inceleyebilir ve yorum yapabilirler:
Bizim anlamadığımız verileri anlayıp yorumlayabiliyor.
Sıralı diziler arasındaki bağlantıyı insanlardan daha iyi çözebiliyor.
Bkz: ICEBERG HOCKEY ANALYTICS SYSTEM, DEEPMIND


Yukarıda verdiğim birkaç örnek ile yapay zeka alanının ne kadar güçlendiğini görebiliyoruz. Bunun nedenlerinden biri elimizdeki donanımın daha güçlü olması(daha hızlı işlem yapabilme yeteneği kazanması) ve elimizdeki verinin artması(İnternette her konu ile ilgili bilgi alabiliyoruz ve sürekli, güncel bir veri artışı var).


Yapay zeka ve robotlar gelecekte neler yapabilecek ?
Hayal gücünüze kalmış. Yapay zeka alanının önünün açık olduğunu belirtmek istiyorum. Yapabileceklerimizin hayal gücümüzle sınırlı olduğunu düşünüyorum.

Makineleri bize yardım etmesi yanında daha fazla bilimsel araştırma yapması ve yeni projeler üretmesi için kullanacağımızı düşünüyorum.
Düşünen ve üreten makinelerin doğuşunu görebiliyoruz.
Umarım yararlı olmuştur.
İyi çalışmalar diliyorum.

14 Temmuz 2017 Cuma

Deep Learning: Convolutional Neural Networks

Merhabalar arkadaşlarım bu yazımda sizlerle Derin Öğrenme(Deep Learning) ve Konvolüsyonel Sinir Ağları(Convolutional Neural Network) kavramlarını öğreneceğiz.

Derin öğrenme kavramından kısaca bahsedecek olursak:
Derin öğrenme = Büyük Veri + Büyük Hesaplama

Başlamadan önce belirtmeliyim ki bu konuların daha iyi anlaşılabilmesi için sırasıyla İnsanda Ve Makinede Öğrenme, Bilgisayarda Görüntü Ve Sayı Dizileri, Sinir Ağları yazılarımıda okumanızı öneriyorum.

Aşağıda örnek bir convolution ağı görebilirsiniz:


Bu örnekte el yazısı rakamları algılayan bir mimari gösterilmektedir.
Şimdi gelin bu ağların nasıl çalıştığını öğrenelim.

Convolution Katmanı

Bu katmanda filtreler(Filter, Kernel) görev alır.
Filtreler görsel boyunca kaydırılır. Kaydırma sırasında görselin değerleri ile filtredeki değerler çarpılır ve elde edilen değerler toplanır ve net sonuç bulunur. Bu işlemi tüm görsele uyguladığımızda yeni bir görsel elde etmiş oluruz. Aşağıda bu işlemin görselleştirilmiş hali bulunmakta:


Yukarıdaki örnekte elimizde 5x5 boyutunda bir görselimiz ve 3x3 boyutunda bir filtremiz bulunmaktadır. Filtre görsel boyunca 1 adım sağ ve her yeni satırda bir adım aşağı kaydırılarak yeni görsel elde edilir.
Gördüğünüz üzere 5x5 boyutunda bir görsele, 1x1 kaydırma(stride) ile 3x3'lük bir filtre uygularsak elde edeceğimiz yeni görselin boyutu 3x3 olmaktadır.

Fark ettiyseniz her bir filtre aslında Sinir Ağları yazımızda bahsettiğimiz bir nörondur. Filtre içerisindeki değerler ise ağırlıklardır.

Nasıl Çalışıyor?
Bir örnek ile açıklayalım:
Elimizde aşağıdaki gibi bir filtre olsun:


Sol tarafta filtre değerleri, sağ tarafta bu değerlerin görselleştirilmiş hali bulunmakta.
Aşağıdaki fare görselinde işaretlenen yere(Sarı renkte kare ile gösterilmiştir) bu filtremizi uygulayalım:


Görselin altında yapılan işemler belirtilmiştir. Sonuç olarak büyük bir veri elde edilmiştir yani aradığımız özelliğin bu bölgede olduğunu anlayabiliriz.
Peki filtremizi başka bir yere uygulamış olsaydık:


İşlem sonucumuzda elde ettiğimiz değer 0 olmuş yani aradığımız özelliğin bu bölgede olmadığını anlamaktayız.
Örneğin kaynağı: https://adeshpande3.github.io/A-Beginner's-Guide-To-Understanding-Convolutional-Neural-Networks/
Farklı filtrelerle farklı özellikler yakalayabiliriz.
Basitçe convolution katmanının nasıl çalıştığını öğrenmiş olduk.

Pooling Katmanı

Aşağıda bir Max-Pooling örneği görmekteyiz:


Bu örnekte 2x2 boyutunda bir çerçeve, 4x4 boyutunda bir görselde gezdirilmiştir(2'şer adım atlamış, 2x2 stride) ve çerçeve içindeki en büyük değer alınmıştır. Bu işlem tüm görsele uygulandıktan sonra daha küçük(2x2 boyutunda) bir görsel elde edilmiştir.

Activation Katmanı

Hatırlarsanız Sinir Ağları yazımda aktivasyon fonksiyonlarından bahsetmiştik bu katmanda da bu fonksiyonlar kullanılmaktadır.

Dropout

Bu katmanda ağımızdaki bazı nöronlar rasgele olarak etkisiz hale getirilmektedir.
Aşağıdaki görselde dropout örneği gösterilmiştir:


Bu özelliğin en önemli noktası eğitim sırasında nöronlara bağımsızlık kazandırarak sistemin daha iyi verim elde etmesini sağlamasıdır.

Bu yazımızda konvolüsyonel sinir ağları ile tanışmış olduk.
Umarım yararlı olmuştur.
Sorularınızı, isteklerinizi ve önerilerinizi bekliyorum.
İyi çalışmalar dilerim.

11 Temmuz 2017 Salı

Sinir Ağları

Merhabalar arkadaşlarım bu yazımda sizlere sinir ağlarından ve yapay sinir ağlarından bahsedeceğim.

Sinir Ağları
Sinir sistemi kısaca, çevreden alınan bilgiye karşılık bir tepki oluşturulmasını sağlayan sistemdir.
Yukarıda bir sinir hücresini(nöron) görmekteyiz.

Örneğin masada duran kalemi elimizle tutup kaldırmak istediğimizde ona dokunuruz ve yeteri kadar sıkarız. Eğer çok fazla sıkarsak kalem zarar görebilir ya da yeteri kadar sıkmazsak da bu sefer kalemi kaldıramayız, elimizden kayar. İşte tam burada sinir ağlarımız görev alır.
Önce kalemi ne kadar sıktığımız bilgisi sinir ağlarımıza gider ve belli bir değere(kalemin elimize uyguladığı basınç) gelene kadarda kaleme uyguladığımız kuvveti arttırırız.
Başka bir örnek verecek olursak odamızda otururken ellerimizde havayı hissetmeyiz ama hareket halindeki bir arabanın camından elimizi çıkardığımızda havayı(rüzgarı) hissedebiliriz. Bu örnekte havanın elimize uyguladığı basıncı hissederiz çünkü basınç istenilen değere ya da fazlasına ulaşmıştır.
Not: Bu örnekteki hissetmemiz için gereken minimum basınç değeri kişiden kişiye göre değişiklik göstermektedir.
Başka bir örnekte de sinir sistemimiz görmemizi sağlamaktadır.

Yapay Sinir Ağları (Artificial Neural Network)
Yapay sinir ağları(ysa) bir makine öğrenmesi yöntemidir. Ysa'da amaç insan sinir sistemini taklit ederek karar verebilen ve yorum yapabilen makineler oluşturmaktır.
Aşağıdaki grafikte bir yapay sinir ağı gösterilmektedir:


Gördüğünüz gibi yapay sinir ağı sistemi üç katmandan oluşmaktadır.
Not: Giriş katmanında herhangi bir hesaplama gerçekleşmez. Bu katmanda sinir ağlarına verilerin girişi sağlanır.
Göreceğiniz üzere hücreler birbirlerine bağlıdır, bu bağlantılar bizim sinir sistemimizdeki sinapsları temsil etmektedir. Bu bağlantılara konunun devamında weight(ağırlık) diyeceğiz.
Şimdi gelin sinir ağlarında nasıl bir hesaplama gerçekleşiyor tüm ayrıntılarıyla inceleyelim.

Aşağıdaki grafikte bir yapay sinir hücresi gösterilmektedir:


Gördüğünüz gibi hücremize n adet veri(girdiler X ile gösterilir) giriyor. Sonra giren veriler ağırlıklarla(weights) çarpılıyor. Daha sonra tüm veriler toplanıyor ve Bias değeri ekleniyor, bu sayede net girdi elde ediyoruz. Net girdi aktivasyon fonksiyonumuzdan geçiyor ve bir çıktı(çıktılar Y ile gösterilir) elde etmiş oluyoruz.

Aktivasyon fonksiyonları
İnternette birçok aktivasyon fonksiyonu görebilirsiniz. Bunlardan en popüleri ReLu fonksiyonudur.
ReLu (Pozitif doğrusal): Girdi 0 ya da 0'dan küçük ise 0 dönen değilse giren veriyi dönen fonksiyonlardır.
Aşağıdaki grafikte popüler aktivasyon fonksiyonlarını görebilirsiniz:


Sinir Ağlarında Eğitim
Sinir ağlarında eğitim yukarıda bahsettiğimiz ağırlıkların ve bias değerlerinin güncellenmesiyle sağlanır.
Amaç en iyi ağırlıkları ve bias değerlerini elde etmektir.
En iyi ağırlık değerlerini bulmak için, çıkması gereken sonuç ve sinir ağlarının verdiği sonuç karşılaştırılarak hata oranı bulunur ve bu orana göre optimizasyon yani en iyi ağırlıkları bulma işlemi yapılır.

Eğitimde önemli noktalar:
- Eğitim en iyi sonuca(istenilen sonuca, test doğruluk oranının en yüksek olduğu sonuca) ulaşana kadar devam etmektedir. İstenilen sonuca bazen hiç ulaşılamayabilir bu düşünülerek eğitim için bir sınır koyulması önemlidir.
- Veri setinin de yeterli olması performans için oldukça önemlidir.

Epoch:
Tüm veri setinin sinir ağları boyunca bir kere gidip gelmesine(ağırlıkların güncellenmesi) epoch denir.
Epoch'un arttırılması daha iyi verim sağlamayabilir tam tersine eğitim verisini ezberlemeye başlamasına neden olabilir ve yeni bir veride(eğitim verisinde olmayan) sonuçları istenilen performansta olmayabilir. Epoch'un az olması da istenilen performansa ulaştırmayabilir.

Batch:
Bir epoch içerisinde,  veri seti içerisindeki bir veri dizisi sinir ağlarında sona kadar gider daha sonra orada bekler batch boyutu kadar veri sona ulaştıktan sonra hata oranı hesaplanır ve optimizasyon işlemi yapılır(ağırlıklar güncellenir).

Aşağıdaki animasyonda örnek bir sinir ağı eğitimi gösterilmiştir:

Umarım yararlı olmuştur.
Sorularınızı, isteklerinizi ve önerilerinizi bekliyorum.
İyi çalışmalar dilerim.

İnsanda Ve Makinede Öğrenme

Merhabalar arkadaşlarım bu gün sizlerle öğrenmenin ne demek olduğunu, insanların ve makinelerin nasıl öğrendiğini inceleyeceğiz ve makine öğrenmesi(Machine Learning) konusuna giriş yapacağız.

Öğrenme Nedir ?
Öğrenmeyi kısaca önceki deneyimlerden çıkarım yapmak diye açıklayabiliriz.

Sizlere bir örnek ile açıklamak istiyorum.
Örneğimizde daha öce hayatımızda hiç kalem görmediğimizi var sayalım.
Bize yandaki gibi birkaç tane farklı şekillerde, renklerde ve boyutlarda kalemler verilmiş, incelememiz istenmiş ve onun kalem olduğu söylenmiş olsun.
Daha sonra bize daha önce hiç görmediğimiz yandaki kalem verildiğinde ve ne olduğu sorulduğunda kalem diyebiliriz.

Peki bu nasıl oldu? Bilgisayarlar bunu yapabilir mi? Peki daha iyi yapabilirler mi? Nasıl?
Şimdi gelin bu sorulara cevap verelim.

Örneğimizde bizlere birkaç tane kalem verilmişti biz o kalemleri elimize alıp incelediğimizde kalemlerin şekilleri ve kullanım amaçlarına göre bazı çıkarımlar elde etmiştik. Daha sonra hiç görmediğimiz bir kalem gördüğümüzde daha önceki deneyimlerimizden yararlanarak onunda kalem olabileceğini düşündük. Nesneleri insanlar bu şekilde ayırt edebiliyor.

Başka bir örnek gösterecek olursak bir kişinin bir engelli parkurda koştuğunu düşünelim. Sizce o kişi koşarken engellere olan uzaklığını ve engelin uzunluk, genişlik ve yükseklik gibi ölçülmesi gereken verilerini ölçerek mi karar veriyordur? Tabii ki de hayır daha önceki takılıp düştüğü engele bir daha takılmamak için önceki deneyimlerinden yararlanıyor ve engelin yüksekliğine ve kendine olan uzaklığına göre zıplama ya da zıplamama kararını veriyor. Eğer takılırsa bir sonraki koşusunda daha güçlü zıplayacağını öğrenmiş oluyor.

Machine Learning:
Bizlerde makine öğrenmesi ile makinelere düşünme, deneyimlerinden yararlanma özelliği kazandırmak istiyoruz.

İnsanlar nasıl bu kadar iyi ve hızlı öğrenebiliyorlar?
Yukarıdaki kalem örneğimiz üzerinden gidersek, test uygulanan bireyin eğitim için elinde yeterli miktarda örnek olduğunu ve bunlar arasındaki bağlantıyı hızlı bir şekilde oluşturduğunu görebiliriz. Birey bir kalemi eline alıp incelediğinde kalemi birçok açıdan görmüş oldu. Yani öğrenmesi için veri yeterliydi.

Peki bilgisayarlara yeteri kadar veriyi sağlayabilir miyiz?
Günümüzde Google'a kalem yazdığınızda binlerce fotoğraf bulabiliyorsunuz. Her açıdan çekilmiş çeşit çeşit birçok kalem. Yani verimizin yeterli olduğunu söyleyebilirim.

Bu kadar veriyi ne kadar hızlı işleyebiliriz?
Bilgisayarlarımızın donanımları büyük hesaplamaları yapmak için ve en iyi performansı almak için tasarlanıyorlar. Yani bilgisayarlarımızın donanımları büyük hesaplamalar yapmak için yeterli oluyor diyebiliriz. Hatta gelişimlerini sürdürmektedirler.

Örneğin NVIDIA firması çok güçlü donanımlar geliştirmekte. Makine öğrenmesi için yaptığımız çalışmaları bu cihazlarda daha hızlı eğitebiliyoruz.

Yapay zekanın günümüzde çok popüler olmasının ana nedenleri de elimizde verinin oldukça fazla olması ve bu kadar çok veriyi işleyebilecek seviyede donanımımızın olması.

Aşağıdaki grafikte yüz tanıma hata oranları gösterilmiştir:

Gördüğünüz gibi günümüzde teknoloji, insana göre daha iyi sonuçlar verebiliyor.

NVIDIA firmasının hazırladığı yapay zeka videosunu izlemenizi öneririm. Günümüzde yapay zekanın ne kadar geliştiğini bu videoda görebilirsiniz:


Umarım yararlı olmuştur.
Sorularınızı, isteklerinizi ve önerilerinizi bekliyorum.
İyi çalışmalar dilerim.

9 Temmuz 2017 Pazar

Bilgisayarda Görüntü Ve Sayı Dizileri

Merhabalar arkadaşlarım bu gün sizlerle bir bilgisayar nasıl görebilir onu öğreneceğiz.

Bilgisayarda Görüntü
Bir görüntü bilgisayarda nasıl tutulur bakalım.
Bizim gördüğümüz görüntü bilgisayar içerisinde sayı dizisi olarak tutulmaktadır.
Öncelikle siyah-beyaz tonlarındaki görüntülerden bahsedelim daha sonra renkli fotoğraflardan bahsedeceğiz.

GrayScale:
Bunu sizlere açıklamak için aşağıdaki görseli hazırladım:


Sağ tarafta gördüğünüz siyah tonlarında bizim ekranda gördüğümüz bir görüntü sol tarafta gördüğünüzde bu fotoğrafın bilgisayar içerisinde tutulan sayı dizisi. Her bir sayı bir pikselin değerini göstermektedir.
Sayı dizisine dikkat ederseniz, 255 ile gösterilen yerler ekranda beyaz olarak; 0 olarak gösterilen yerler siyah olarak gösterilmiş.
Eğer bir led son güçte(bu değer 255'i göstermektedir.) yanarsa tam bir beyaz ışık ortaya çıkar. Fakat eğer led hiç yanmazsa orası karanlık gözükecektir. 0-255 arasındaki değerler ise siyah tonlarını göstermektedir, değer ne kadar yüksek olursa led o kadar parlak(beyaz) ışık verecektir.

Sayı dizilerinden biraz bahsedelim. Matematikten de hatırlayacağımız üzere yukarıdaki dizi 2 boyutlu bir dizidir. Peki nedir bu boyut meselesi ?

Boyutlar:
Sizlere boyutları şu şekilde anlatmak istiyorum:
Diyelim odanızın içinde bir top olsun.(havada asılı durduğunu var sayalım.) Şimdi bana bu topun yerini söyleminizi istiyorum? Benim tam odanın girişinde duvara dayalı olduğumu düşünün. Ne yaparsınız?
Bana sağ-sol, yukarı ve de ileri gibi komutlar vererek topu bulmamı sağlayabilirsiniz.
Ama eğer bana sağ sol derseniz hala duvara dayalı olurum yani topa ulaşamam çünkü bu odanın bir yüksekliği ve genişliği var. Bana yukarı aşağı derseniz o topun tam karşısında olabilirim ama unutmayın bu odanın genişliği var yani bana ileri git ya da geri git demezseniz topa asla ulaşamam.
Dolayısıyla bir şeylerin yerini saptamamız içi bir koordinat sistemine ihtiyacımız var.

Ek: Diyelim o topa ulaştım fakat ben ulaşmadan bir dakika önce yere düştü bana topun orda bulunduğu zamanı söylemeniz gerekir ki topa tam anlamıyla ulaşabileyim. Yani zaman 4. boyut olarak kabul edilmekte.

Sayı dizileri, aşağıdaki görselde gösterilmektedir:


Bizde 2 boyutlu dizileri(matrix) siyah tonlarındaki fotoğraflarda kullanmaktayız. Satırlar ve sutunlar içindeki her sayı bir pikselin değerini tutmaktadır.

Renkli Fotoğraflar:
Siyah beyaz fotoğrafın nasıl oluştuğunu anladık peki ama renkliler?
Her rengi oluşturmak için farklı renkte yeni bir lede mi ihtiyacımız var? İmkansız. Biliyorsunuz ki 3 ana rengi karıştırarak farklı renkler elde edebiliriz. Kırmızı-Yeşil-Mavi (RGB) bu renklerde üç ledi yan yana koyarsak ve üçünü de açarsak beyaz ışık görürüz. Üçünü de söndürürsek karanlık(siyah) olacaktır. Farklı renkler için farklı kombinasyonlar kullanabiliriz. Unutmayalım her bir led 0 ile 255 arasında bir değer alabiliyordu.
Aşağıdaki grafikte bu 3 rengin değerlerine göre karıştırılmasıyla ortaya çıkan renkler gösterilmektedir:


Yukarıda siyah tonlarındaki fotoğraf için oluşturulmuş sayı dizisini görmüştük. Bu dizi satır ve stunlardan(2 boyutlu) oluşmaktaydı. Peki biz bu diziden üç tane kullansak yani her bir renk (Kırmızı-Yeşil-Mavi) için farklı tablo(satır-stun) oluştursak renkli görüntüler elde edebiliriz(Bu sefer 3 boyutlu bir dizi olur).

Aşağıda gördüğünüz fotoğrafa uzaktan baktığınızda bir bayan fotoğrafı görüyorsunuz herşey normal gözüküyor fakat fotoğrafa yaklaştıkça bu normal renklerin aslında farklı güçte yanan kırmızı, yeşil ve mavi renklerinin karışımından oluştuğunu anlayabiliyorsunuz:


Farklı bir örnek daha verecek olursak:


Aşağıda da bir RGB dizisi örneği görüyoruz:


Bilgisayarda görüntü bu şekilde tutulmaktadır.

İleride görüntü işleme, makine öğrenmesi ve derin öğrenme ile ilgili dersler paylaşacağım ve görüntünün ne olduğunu bilmek bu dersler için çok önemli.

Görüntü işleme ve diğer konulardaki en güncel çalışmalarım için GitHub sayfama göz atabilirsiniz.

Umarım yararlı olmuştur.
Sorularınızı, isteklerinizi ve önerilerinizi bekliyorum.
İyi çalışmalar dilerim.