Burada yazılanları iyi kavrayabilmek için aşağıdaki iki blog yazısını okumanızı tavsiye ederim.

Yapay sinir ağlarına gelmeden önce kavram karmaşıklığını önlemek adına birkaç tanım yapmak istiyorum.

Copyright FatihErikli — Epam
Copyright FatihErikli — Epam
Bir yapay sinir ağı (Feedforward network)

Yapay Zeka (Artificial Intelligence)
Bilgisayar ile klasik problem çözme senaryolarında bir veri setinin çıktısı her ne zaman ve her ne durumda olursa olsun aynı olmak zorundadır. Yapay zeka bu davranıştan biraz daha farklı olarak, insanların işlem yapma tekniklerine daha yakın, tutarlı olmayan ama kullanışlı olan tekniklerin en ana kategorisidir.

Makine Öğrenmesi (Machine Learning)
Yapay zekanın alt kümesidir. Temel olarak, kendi ürettiği sonuçlar ile kendisini daha kullanışlı çıkarımlar yapmak adına eğitebilen bilgisayar programlama teknikleridir. Yani, öğrenebilen bilgisayar programlarıdır. Yapay zekaya ulaşmanın yollarından birisidir.

Derin Öğrenme (Deep Learning)
Makine öğrenmesinin alt kümesi ve uygulamasıdır. Bu alanda bilgisayar bilimcileri bir insanın düşünme ve hareket etme biçimini taklit edebilen bilgisayar programları üretmektedir. Yapay sinir ağları bir derin öğrenme yöntemidir.

Makine öğrenmesi biraz daha magazinsel dünyadan uzak ve ne olduğu belli olan bir terimdir. Basitçe, bir bilgisayarı yapacağı işleri açık açık belirterek programlamak yerine ona örnek veri setleri vererek yapacağı işi öğrenmesini sağlamaktır. Programlar çalıştıkça öğrenir ve tutarlı sonuçlar vermeye çalışır.

Veri + Program -> Çıktı

Klasik bilgisayar programlama bu şekildedir. Program kullanıcıdan ya da etrafından bilgiler alır, programlandığı üzere olan prosedürleri tamamlar ve çıktı üretir. Bu makine öğrenmesi konseptinde değişiyor.

Veri + Çıktı -> Program

Artık veri ve programı verip çıktı almak yerine, veriyi ve çıktıyı vererek bilgisayar programını bilgisayara kendisinin yazdırmasını sağlıyoruz. Bilgisayarlar artık biraz daha hesap makinesinden uzaklaşarak insanlar gibi işlem yapmaya yaklaşıyorlar.

Geleneksel bilgisayar programlamasında programın hep aynı şekilde çalışacağını varsayarız. Zaman içerisinde değişmez ve verilen veri ne ise çıktısı her koşulda aynı olmalıdır — teoride. Bu mümkün değil, bir sistem eninde sonunda kararlı çalışmayı sonlandıracaktır, çünkü evrendeki tüm organizmalar bozulmaya eğilim gösterirler.

No, it is not possible.

Makine öğrenmesi konseptlerinin önemli olmasının diğer bir sebebi ise, programlar hata yapabilir varsayımı ile çalışmaktadır. Program zaten öğrenme aşamasında hatalı olarak çalışacak olduğunu kabul edip üzerinde çalışıyoruz.

Yarın yağmur yağacak.

Bu klasik bir program çıktısıdır, kesin bir yargı var. Ancak yarın yağmur yağacağının bir garantisi yok. Bu varsayım ile ilerleyemeyiz.

Yarın %60 ihtimalle yağmur yağacak.

Burada kesin bir yargı yerine bulanık mantık devreye giriyor. Gerçeğe biraz daha yakın bir çıkarımdır. Yarın büyük bir ihtimalle yağmur yağacak diyebiliriz.

Farkettiğiniz üzere, bilgisayarları programlama biçimimiz ve onların davranışları değişiyor. İster istemez yeni meslek alanları ortaya çıkacak, ya da zaten var olan bazı meslek dallarına rağbetin artması söz konusu.

  • Veri okur-yazarları

Bunlar aklıma gelenler. Sonuncu madde bir bilim kurgu filmi terimi gibi gözükse de değil. Su an sürüçüsüz araçları yollarda görememizin en geçerli sebeblerinden birisi yasal olarak bir zemine oturtulamamalarıdır. Teknolojik olarak hiçbir engel yok, ancak bir kaza anında “kim suçlu” sorusunun yanıtını veremiyoruz, çünkü ortadaki suçlu yapay bir zeka.

Yapay Sinir Ağları

Josef (Yusuf) bebek resim çizmeyi öğreniyor — 2017

Uğraşırken en çok öğrendiğim ve beni en çok heyecanlandıran makine öğrenmesi modeli neural-network’ler, yani yapay sinir ağlarıdır. Çünkü bu alanda ilerledikçe sadece yapay zekayı değil, insan nasıl düşünür’ü de öğreniyorum. Ben bu model ile yapay zekaya ulaşmayı değil, kendimi anlamayı hedefliyorum. İnanıyorum ki günlük hayatımızda bu tarz makineler kullanmaya başladığımızda çok daha farklı bir yaşamımız olacak ve çok daha farklı şeyler hakkında endişe duymaya başlayacağız. Sadece para sayanların değil, sanat yapanların ve bilgi üretenlerin de kazanacağı bir dönem yaklaşıyor.

Sinir Sistemi — Nervous system

Yapay sinir ağları çok soyut konseptlerdir. Yapısı gereği klasik programlamada olduğu gibi sadece deneme yanılma yaparak modelleri anlamamız çok zor. Bu soyut yapıyı anlayabilmemiz için gerçekten bir sinir sistemi nasıl çalıştığını kavramaya çalışmamız gerek.

Birisi

Bunun için bir biyoloji ya da tıp öğrencisi olmamıza gerek yok. Sonuçta bu biziz. Özellikle yapay zeka alanında çalışıyor isek, nasıl çalışıyor ve nasıl bozuluyoruz anlamamız lazım :)

Copyright FatihErikli — Epam
Copyright FatihErikli — Epam
Yapay sinir ağı (Feedforward network)

The University of Queensland’in Beyin Anotomisi yayınını baştan sona okumanızı tavsiye ederim. Bu ücretsiz ve çok değerli bir kaynaktır.
https://qbi.uq.edu.au/brain/brain-anatomy

Bir hayvan canlısının parçası olan sinir sistemi, çevresinden elde ettiği bilgilerin vücudun diğer parçalarına sinyaller aracılığı ile göndermekle sorumludur.

Bu sistem anlık olarak bilgiler üretir ve işler, üretilen bilgiyi ise vücudun diğer parçalarına sinyal olarak gönderir. Bir yapay sinir sistemi ağında da birçok parça ve kanal bulunmaktadır. Bu parçalar çevrelerinden bilgiler alırlar ve bunu ilgili parçalara yönlendirirler.

Röne Dekart’ın “Treatise of Man” kitabından “bir acının izlediği yol” illüstrasyonu

Eğer bir bisikletin tepesindeyseniz ve önünüzdeki bir cisim size doğru hızla yavaşlıyorsa birazdan onunla çarpışacaksınız anlamına gelmektedir. Bu sinir sisteminizin çevresi ile yaptığı çıkarımlar sonucu ürettiği bir bilgidir ve kazayı önlemek için bir eylem yaptırtır.

Nöronlar — Sinir Hücreleri

Sinir sistemimizin en temel birimleri nöronlardır. Çevresinden, yani dış dünyasından aldığı bilgiler sonucu kaslarımıza motorsal komutlar gönderen hücrelerdir. Sinir hücreleri birbirleriyle elektriksal sinyalleri ile konuşurlar. Daha da öteye, bu hücrelerin kendi aralarındaki iletişimi bizim davranışlarımızı belirler.

Sinir hücresi çeşitleri

Yapay sinir ağlarında bu ağaç şeklindeki yapıları modellemeye çalışmaktayız. Modellenen yapıların aynı nöronlardaki gibi reseptörleri ve diğer yapılarla konuşabilecekleri dendritleri vardır.

Perseptronlar

Bu noktada artık yapay sinir ağlarına giriş yapabiliriz. İlk yapay sinir ağı, yani artificial neural network fiziksel bir bilgisayar idi. Soldaki görselde gördüğümüz üzere onu New York Times bir cyborg embriyosu olarak tanıtıyor. Haksız da değil :)

Bu makineden sonra IBM ilk defa bir yapay sinir ağını yazılımsal olarak hayatımıza sokuyor. Temel olarak bir perseptron en ilkel şeklinde bir yapay sinir ağıdır. Yapay sinir ağını bir organizma olarak varsayarsak eğer, o organizmanın en temel yapı taşıdır.

Bir perceptron makinesi görselleştirmesi https://appliedgo.net/perceptron/

Bir perceptron makinesi şöyle çalışmaktadır.

  • İlk olarak gelen bütün girişleri (input) ağırlığı (weight) ile çarp

Yalnız başına bir perceptron bu şekilde çalışmaktadır. Temel olarak yapay sinir ağımız bu olsa bile, hala yalnız başına bir nörondur. Bu ne yazık ki tek başına çok da akıllı değildir. Gelen birkaç veri üzerinde matematiksel olarak işlem yapar ve çıktı verir. Tek başına bir perceptron, sadece doğrusal olarak ayrılabilir problemleri çözebilmektedir.

Peki bu ne demektir? Doğrusal olarak ayrılabilme hali.

https://www.researchgate.net/figure/Linearly-separable-points-in-SVM_fig5_283315759

Yukarıdaki grafikte iki çeşit düğümler görüyorsunuz: siyah ve beyazlar. Grafiğe tüm olarak baktığınızda siyah ve beyazlar arasında bir tek bir çizgi baştan sonra doğru çizebilmekteyiz. Bu linearly separable, yani doğrusal olarak ayrılabilen bir problemdir.

https://eight2late.wordpress.com/2017/02/07/a-gentle-introduction-to-support-vector-machines-using-r/

Peki doğrusal olarak ayrılamayan problemler nasıl olabilir? Soldaki görselde bir örneğini görüyorsunuz. Mavi ve kırmızı düğümler arasında tek bir çizgi çizmeniz imkansız. İki adet çizgi çizmeniz gerekir, kırmızıları bir yuvarlak arasına almanız gerekir. Bu non-linearly separable bir problemdir.

Makine öğrenmesine problemleri soyutlayabilme çok önemli bir yetidir. Çünkü problem çözerken bir veri setine ihtiyaç duyarsınız. İnternette bulabileceğiniz çoğu veri setleri alanlarına özgü ve her makine öğrenmesi tekniği için kullanılamayan veri setleridir.

Ne yazık ki tüm problemlerde kullanabileceğimiz evrensel bir veri seti bulunmamaktadır. Bunun yerine makine öğrenmesi bilimcileri mantık fonksiyonlarını kullanmaktadır.

Herhangi bir programlama dilini açıp yanlış VE yanlış deyimini hesaplattırdığınızda size direkt yanlış yanıtını verir. Programlama dilleri mantık çatıları üzerine kurulmuştur. Makine öğrenmesinde soyut bir problem olarak genelde bu mantık kapılarını yapay bir şekilde hesaplattırmaya çalışıyoruz. Çözülebilecek en temel problemlerden birisidir ve bir makine öğrenmesi konseptinde ilk olarak bu problemler çözülmeye çalışılır.

http://ccg.doc.gold.ac.uk/ccg_old/teaching/artificial_intelligence/lecture12.html

Başındaki eksi değerini gözetmeksizin “1” True, yani bir doğrudur, “0” ise False, Yanlış. Burası önemli, AND ve OR kapısında 1'ler ve 0'lar arasında doğrusal bir çizgi çizebiliyoruz. AND ve OR doğrusal olarak ayrılabilir grafikler üretmekte. Farkettiyseniz eğer Exclusive OR’da 1'ler ve 0'lar arasında düz bir çizgi çizemiyoruz.

Yapay sinir ağları demolarında genelde XOR problemi çözülmektedir.

Tensorflow Playground

Yukarıdaki yapay sinir ağı simülasyonunda veri seti olarak dört adet görsel bulunmaktadır. Burada gerçekten bu dört seçenekten seçmiş olduğunuz görsel, sağdaki Output alanında bir yapay sinir ağından geçirilerek tekrar çizdirilmeye çalışılmaktadır.

Bu demoda sadece tek bir “Hidden” layer bırakarak non-linearly separable bir problemi (mesela kol böreği gibi olan) çözmeye çalışın. Yapay sinir ağınız problemi çözemeyecektir.

Doğrusal olarak ayrılabilen ve ayrılamayan problemler

İlk örnekte doğrusal olarak ayrılabilen problemi makinemiz başarıyla çözebilmektedir. Daha karmaşık olanına geçtiğimizde makinemizin başarısız olduğunu görüyoruz. İşte yapay sinir ağlarına “ağ” denmesinin sebebi budur. Tek başına perseptronlar makine öğrenmesi bağlamında çok kullanışlı değillerdir, çünkü çözebilecekleri problemleri klasik programlama teknikleri ile hiç makine öğrenmesi algoritması kullanmadan çözebilmekteyiz.

Çok katmanlı yapay sinir ağların doğrusal olarak ayrılamayan bu problemleri çözebilmesi Backpropagation algoritması sayesindedir. Bu algoritmayı soyut olarak anlatmaya çalışacak olursam eğer, makinemizi sadece verdiğimiz veri setleri ile öğrenmesini değil, aynı zamanda yaptığı çıkarımların gerçeğe ne yakın olduğunuda öğrenme stratejisinde hesaba katmasıdır.

Sağlıcakla :-)

I am a neurologist. I have an ability to kill people. I have done it myself.

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store