Bilgisayarlar nasıl “görür”? — Computer Vision ve Deep Learning
--
Jedi güçleri edinmeye uzak değiliz.
Jedi güçleri derken şundan bahsediyorum:
Kadının giydiği herhangi bir eldiven, kullandığı herhangi bir kumanda yok, ama drone’u kollarıyla kontrol edebiliyor.
Ve bu kurmaca bir şey değil, gerçek. Resmin altındaki siteye girip bakabilirsiniz.
Zeka mı, Bilinç mi?
Drone, kadının kollarını “görüyor”.
Nasıl “görüyor”?
Bu alana (Yapay Zeka) aşina değilseniz, kafanızda:
“Drone’un hisleri, bilinci mi var?” gibi düşünceler olabilir.
Aslında drone’da bilinç yok. Drone’un burada sahip olduğu şey “zeka”. Yani, dümdüz anlamı ile, bir şeyi yapabilme, o iş üstüne kendini geliştirebilme yeteneği.
Bilinç, zekadan farklı bir şey; ve bilinç, elde edilmesi zekadan çok daha zor olan bir özellik.
Bilinç, bir şeyi hissetmek. Gözlerinizi kapatıp kendi kendinize “Ben buradayım. Varım.” diyorsunuz. Etrafınızdaki sıcaklığı, kokuyu tecrübe ediyorsunuz. Bilinç olarak nitelendirilen şey bu.
Zekaya bisiklette dengede durmayı verebiliriz. Alışınca, özel bir çaba olmadan bisiklette dengede durabiliyoruz. Dengede durmak üzerine kendimizi geliştirmiş oluyoruz. Ama dengede durmak için hislerimizi devreye sokmamıza gerek olmuyor.
Nasıl çalışıyor?
Drone’un burada yaptığı şey kadının elini takip etmek. Bir kamerası var, görüntü alıyor. El takibi için ihtiyacı olan şey elin videoda nerede olduğunu bulmak. Sonra el nerede bulunuyorsa, drone o el komutuna göre hareket etmek üzere pervanelerine güç veriyor.
Bu satırdan itibaren ara ara, anlamı basitleştirmek adına başka bir örnek üzerinden de gideceğim. El yazısı ile yazılmış rakam fotoğraflarının, hangi rakam olduğunu tahmin etmek. (Az sonra resimleri görünce muhtemelen daha iyi anlayacaksınız.)
Videolar, Resimler, Koordinatlar:
Bir video, basitçe, binlerce resimden oluşur. Resimler hızlı oynatıldığında insan gözü görüntüyü akıyor olarak anlamlandırır.
Bir resim ise, basitçe, bir kareli defterdir (matris).
- Elinize kareli bir defter alın.
- Kareli defterin her bir karesini 0 ve 1 arasında bir sayı ile numaralandırın.
- Herhangi bir karenin içinde yazan sayı ne kadar 1'e yakınsa, o kareyi o kadar beyaza boyayın.
- Sayı ne kadar 0'a yakınsa, o kareyi o kadar siyaha boyayın.
- Sayı 0.5 ise, kareyi griye boyayın.
Bu şekilde bir kareli deftere istediğiniz resmi çizebilirsiniz.
Deftere dikkatlice bu şekilde çizim yaparsanız, deftere uzaktan baktığınızda gözünüze normal çizilmiş bir resimmiş gibi gelecektir. Üstteki resim için deneyin. Ekrandan birkaç metre uzaklaşın. Resim daha normal gelecektir.
Aslında, bilgisayar ekranları ve televizyon ekranları da bu şekilde milyonlarca çok küçük kareyi kullanarak resimleri, videoları gösterir. Resimleri kaydetmek içinse, o kareli defterdeki sayıları belleğinde tutar.
Pikselli dediğimiz kalitesiz görüntülerde bu kareli defterdeki kareleri tek tek görebilirsiniz.
Koordinatlar
Drone, bu kareli defteri alıyor. Bir dizi işlemden geçiriyor. Öyle güzel işlemlerden geçiriyor ki, yaptığı işlemler sonrasında, bu kareli defterdeki sayılar, dört tane “koordinata” dönüşmüş oluyor.
Nasıl yaptığını anlamadınız mı? Çok normal, sizden ricam, şu anlık sadece koordinat kısmına odaklanın.
Amiral battı oynadıysanız koordinat derken ne demek istediğimi anlamışsınızdır. Bir koordinat, resimde bir noktanın nerede olduğunu anlatır.
Mesela, koordinatı (4,9) olan bir olan noktayı şöyle hayal edebiliriz:
- Parmağını kareli defterin (resmin) sol alt köşesine koy.
- Parmağını 4 çizgi (4 piksel) sağa götür.
- Dur.
- Parmağını 9 çizgi (9 piksel) yukarı götür.
- Artık, (4,9) noktasındasın.
Tekrardan Drone’un yaptığı şey:
Kareli defterin karelerine yazılmış sayıları alıyor. Bu sayıları öyle bir işlemden geçiriyor ki, işlemin sonucu olarak 4 tane koordinat çıkıyor.
Bu 4 koordinat, 4 noktayı temsil ediyor.
- Bir resim düşünün, içinde bir el olsun.
- Resimdeki elin etrafına bir dikdörtgen çizin. El, dikdörtgenin tam içinde olsun.
İşte drone, bu dikdörtgenin köşelerinin koordinatlarını buluyor. Bu köşeleri bulunca, elin nerede olduğunu bulmuş oluyor.
Drone’un bulduğu dikdörtgen resmin sağ tarafında kalıyorsa, drone sağa doğru gidiyor. Dikdörtgen resmin solunda kalıyorsa drone sola gidiyor. Ortasında kalıyorsa, drone hareket etmiyor.
Dikdörtgenin köşelerini bulmayı Nasıl Öğrendi?
Drone’un köşeleri kendi kendine bulabilmek için iki şeye ihtiyacı var:
1- Boş ve doğru yapıda bir beyin. (Bir nöral ağ.)
2- Beynini doğru şekillendirmesini sağlayacak bilgi. (Bir veri seti.)
Beyin mi?
İnsan beyni değil. Ama şekli şemali benziyor, o yüzden beyin diyorum. Aslında şöyle bir şey:
Elinizde böyle bir yapı, böyle bir Nöral Ağ olduğu zaman:
- İçine kareli defterdeki sayıları atabiliyorsunuz.
- Sonra bu nöral ağdan, doğru cevabın çıkmasını umabiliyorsunuz.
Bir cevabın çıkmasını umabiliyoruz. Ama o cevap nasıl doğru çıkıyor?
Üstteki nöral ağdan, neden 3 değil de, 7 cevabı çıkıyor?
Drone’un (yapay zekanın) ihtiyacı olan şeyleri hatırlayın:
1- Boş ve doğru yapıda bir beyin. (Bir nöral ağ.)
2- Beynini doğru şekillendirmesini sağlayacak bilgi. (Bir veri seti.)
Yani bir beyne sahip olmak yeterli değil. O beynin nöronlarının her birinin doğru miktarda elektrik üretmesi gerekiyor.
Üstteki o nöral ağ, ilk yapıldığında, saçma sapan cevaplar veriyordu. Doğru cevaplar vermiyordu.
Yavaş yavaş doğru cevabı vermeye yönelik olarak kendini değiştirdi, geliştirdi.
Kendini değiştirmek için veri setini kullandı. Veri seti şuna benziyordu:
- Veri seti, binlerce resim, ve o resimlerin hangi sayılar olduklarına dair doğru cevapları içeriyordu.
- Yapay Zeka, başta, sallamasyon şekilde resimlerin hangi sayı olduğunu tahmin etti.
- Yapay Zeka’nın tahminleri ile doğru cevaplar arasındaki fark hesaplandı. (Basitçe çıkarma işlemi yapıldı.)
- Bu farkı küçültmek için, nöral ağdaki nöronların her birini nasıl değiştirmeliyiz? Bu hesaplandı. (türev alarak, gradient descent, backpropagation)
- Hesaplara uygun olarak nöronlar (nöron ağırlıkları) değiştirildi. (updating neuron weights)
- Az önce saydığım üç adım, binlerce resim için, yüzbinlerce kez tekrar edildi. (eğitim, training)
- En sonunda nöronları o kadar eğitmiş, o kadar kez doğru yönde geliştirmiş olduk ki, nöral ağ, doğru sonuçlar çıkarmaya başladı.
(Teknik detay: Tahminler ile gerçek cevap arasındaki fark terimsel sözlükte “yitim” olarak geçer.[1] İngilizcesi: “loss”.)
(Teknik detay: Türev işleminde, yitimin (lossun), nöron ağırlıklarına göre türevi alınır.)
Yapıyı tekrardan hatırlayalım:
Yuvarlakları birbirine bağlayan her çizgi, soldaki yuvarlağın, sağdaki yuvarlağı ne kadar etkilediğini gösteren bir bağdır. Her çizgi bir nörondur.
Bağ ne kadar kalınsa, o nöron o kadar fazla elektrik üretiyor gibi düşünebilirsiniz. Aslında olan şey ise, her nöronun kendine dair bir ağırlık sayısına (değerine) sahip olması. O sayı ne kadar büyükse, o nöron o kadar kalın.
- Bir yuvarlağa giren sayıların hepsi toplanıyor. Yuvarlağa o sayı değeri yazılıyor.
- Herhangi bir nöronun (çizginin) kalınlığı ile nöronun solunda kalan yuvarlaktaki sayı çarpılıyor.
- O nöronun (çizginin) sağında kalan yuvarlakta, o yuvarlağa giren tüm nöronların sonuçları toplanıyor. (1. maddede de bunu yazdım aslında.)
- En son, biz nöral ağda sağa doğru gide gide tüm yuvarlakları bitirince, kareli defterdeki sayılarımız, “işlenmiş” şekilde nöral ağdan çıkmış oluyor. Bu “işlem” doğru öğrenilmişse, çıkan sonuç doğru oluyor.
Özetle:
- Videolar basitçe resim yığınıdır.
- Resimler basitçe kareli defterlerdir. (matris)
- Bazı yapılar (nöral ağlar), bu kareli defterlerden, elin koordinat noktalarını tahmin edebilirler.
- Başka bir örnek vermek gerekirse bu yapılar, uygun veri seti ile eğitilirlerse, el yazısıyla yazılmış rakam fotoğraflarının, hangi rakam olduğunu tahmin edebilirler.
- Nöral Ağlar üstte gördüğünüz resme benzerler. İçlerinde nöron denen çizgiler bulunur. Nöronlar, piksel değerlerini (en soldaki yuvarlakları) çarpma ve toplama işlemleri ile işlerler, sonraki yuvarlaklara iletirler. Sıradaki yuvarlağın içinde iletilmiş sonuçların hepsi toplanır. Bir sonraki yuvarlağa iletmek üzere işleme devam edilir.
- Bu nöral ağlar, bir verisetini alıp, sallayarak tahmin yapıp, tahminleri ile doğru sonuçların arasındaki farka bakarlar. Tahminlerini nasıl iyileştirebileceklerini hesaplarlar. Bunu yaparken türev kullanırlar.
- Sonra hesaplarına uygun olarak kendilerini, yani içlerindeki nöron ağırlıklarını yani çizgilerin kalınlıklarını değiştirirler.
- Bunu binlerce resim için yüzbinlerce kez tekrar ettiklerinde, o işi çok başarılı şekilde yapabilen yapılara dönüşmüş olurlar.
Peki bunun Jedi’lıkla ne alakası var?
Yazıya bununla başlamıştık.
Şu alakası var: Telekinezi, yani Jedi’lık derken kastettiğim şey, nesnelere dokunmadan onları hareket ettirmek demek.
Günümüzde, binlerce özelleşmiş fabrika sayesinde, istediğimiz tür bir nesneyi, istediğimiz şekilde üretebiliyoruz. Bu nesnelerin içine bir pil koyduğumuzda bu nesneler hareket edebiliyorlar.
Artık bu şeyleri kumandasız hareket ettirebiliyoruz. Çünkü bizi görebiliyorlar.
İş sadece hareket ettirmekle de sınırlı değil:
- Evinizde ışıkları açıp kaparken
- Televizyonun kanalını değiştirirken
- Bilgisayarda çizim yaparken
- Oyun oynarken
- Hoparlöre sesi kıs demek için
- İçinde bulunduğunuz araçları yönetmek için
Özet olarak bu Nöral Ağları kullanan şirketler ürünlerini piyasaya sunduklarında çoğu şeyi daha kolay kontrol edebileceğiz.
Sevdiğim bir film karesi ile sonlandırayım yazıyı:
Referans:
[1]: https://github.com/deeplearningturkiye/turkce-yapay-zeka-terimleri/blob/master/turkce-ingilizce.md