- AI/ML alanında çalışmak gibi bir niyetim hiç yoktu
- Sadece iş için gerekli araçları kullanırken doğal olarak yapay zeka ve makine öğrenimini kullanmaya başladım ve sonunda bu alana girdim (CMU doçenti)
- Yeni yıl vesilesiyle 2000 yılına dönüp yer aldığım başlıca AI/ML projelerine dönüp bakıyorum
if ifadeleri ve rastgele sayılar: ilk programlama deneyimleri
- Video oyunlarıyla başlangıç:
- Tamagotchi'den ilham alarak VB6 ile sanal evcil hayvan oyunu geliştirmeyi denedim.
- Zamanlayıcılar ve koşullu ifadelerle basit mantık kurdum:
- Her 10 saniyede bir açlık seviyesi artıyor.
- Açlık belli bir seviyeyi aşınca sağlık her 3 saniyede bir azalıyor.
- Sağlık 0 olunca evcil hayvan yere yığılıyor.
- Sonuç: tekdüze ve eğlencesiz bir oyun.
- Lise yıllarında oyun geliştirme:
- 2D bir uzay shoot 'em up oyunu geliştirdim:
- Oyuncu düşman dalgalarını savunuyor ve güçlendirmeler topluyor.
- Düşmanların ortaya çıkma desenlerini rastgele sayılarla ve oyun istatistiklerini (oynanan süre, ateş etme sayısı, HP vb.) kullanan uzun
if ifadeleriyle kurdum.
- Sonuç:
- Oyun biraz daha dinamik ve öngörülemez hissettiriyordu.
- Ama ilgi uzun sürmediği için oyuncular çabucak bırakıyordu.
- AI kavramlarını keşfetme:
- 2000'lerin ortasında Programming Game AI by Example kitabını alıp oyunlara AI eklemeyi öğrenmeye başladım.
- İlk başta kullanamasam da sonraki projelerde çok yardımcı oldu.
- Bu dönemdeki deneyimler, daha karmaşık ve ilginç oyun mekaniklerini denememin temelini oluşturdu
Durum makineleri ve yüksek dereceden fonksiyonlar: üniversite yıllarında oyun geliştirme
- Oyunların evrimi:
- Üniversitedeyken oyun geliştirmeyi bir üst seviyeye taşıyıp milyonlarca kişi tarafından oynanan oyunlar yaptım.
- Bazıları gelir de elde etti.
- Programlama becerilerim olgunlaştıkça kitapta öğrendiklerimi pratiğe dökebildim.
- Tekniklerin uygulanması:
- Sonlu durum makinesi (Finite State Machine):
- Düşman davranış desenlerini uygulamak için kullandım.
- Factory pattern:
- Nesne oluşturma ve yönetimi için.
- Yüksek dereceden fonksiyonlar (Higher-order Functions):
- Düşman ve silah davranışlarını birleştirilebilir şekilde tasarladım.
- Örnek:
- Silah, sağa sola 25 derecelik genlikle salınıp dar bir koni şeklinde mermi ateşliyor.
- Mermiler yakındaki hedeflere hafifçe yöneliyor ve %1 olasılıkla ricochet yapıyor.
- Oyunun canlılığı:
- Oyun durumu ve oyuncu girdisine göre dinamiklik unsurlarını kademeli olarak ekledim.
- Rastgelelik ve birleştirilebilirlik ile çeşitlilik kattım.
- Bu yaklaşımı yalnızca düşman davranışlarına değil, sprite'lara, particle effect'lere, ses efektlerine, mermilere, animasyonlara ve oyunun geneline katmanlı biçimde uyguladım.
- Sonuç:
- Oyunlar daha canlı ve eğlenceli hale geldi.
- Ama bunun AI değil, sadece iyi tasarlanmış
if ifadeleri ile fonksiyon çağrılarının birleşimi olduğunu fark ettim.
- Oyunlara "canlı" hissi verebiliyordum ama bu aşamada hâlâ her şey elle tasarlanmış mantık ve fonksiyonlardan ibaretti
Birinci dereceden mantık, bilgi temsili, support vector machine ve sinir ağları: yüksek lisansın ilk dönemleri
- Yüksek lisansa başlama:
- Mezun olduktan sonra son başvuru tarihinde yüksek lisansa yazıldım.
- Seçebileceğim dersler sınırlıydı; AI ve sinir ağları derslerini aldım.
- Aslında almak istediğim derleyici dersi yerine seçmek zorunda kaldığım bu dersler beni hayal kırıklığına uğrattı:
- Uygulama ya da gerçekleştirim olmadan yüksek düzey teoriye odaklanıyorlardı.
- Tanımlar üzerine uzun tartışmalar yapılıyordu.
- AI dersi:
- Artificial Intelligence: A Modern Approach (Third Edition) ders kitabını kullandık.
- Planlama, ajanlar, birinci dereceden mantık, bilgi temsili gibi kavramları öğrendim.
- Problemleri düşünmek için yeni bir kelime dağarcığı kazandım ama bunu pratiğe dökmek zordu.
- Sinir ağları dersi:
- Perceptron, support vector machine (SVM), feedforward network, Hopfield modeli, backpropagation gibi teorileri öğrendim.
- Uygulamaya dair net yönlendirme yoktu:
- Hocanın "bir MATLAB paketi bul" cevabı beni hayal kırıklığına uğrattı.
- Düşük bant genişlikli görüntülü sohbet programı geliştirme:
- OpenCV ile yüz algılama ve bölge çıkarımı yaptım:
- Ağız köşelerinin durumu, sol kaşın konumu, sağ gözün açık olup olmadığı gibi şeyleri sınıflandırdım.
- Veritabanından yüzlerce etiketlenmiş yüz görüntüsü topladım.
- Sınıflandırılmış ikili durumları soket üzerinden gönderip OpenGL ile avatarı render ettim.
- Sonuç:
- Işık değişimlerine duyarlıydı, parametreleri ayarlamak zordu ve eğitim uzun sürüyordu.
- OpenCV kullanımı zorluydu ve programı değiştirmek zahmetliydi.
- Kazanımlar:
- Pek çok deneme-yanılma sayesinde çok şey öğrendim.
- Ocak 2013'te erken bir demo videosu yükleyip paylaştım:
- Demo videosu amatörce olsa da 1000'in üzerinde görüntülenme aldı.
- Bu dönem, teoriyi gerçekten uygulamaya koymayı ve problemleri çözmeyi öğrenmem açısından önemli bir büyüme süreciydi
Karar ağaçları, kümeleme, öneri algoritmaları: doktora sürecindeki deneyimler
- Araştırma hedefi:
- Kod editörü günlük verilerini analiz ederek şu sorunları çözmeye çalıştım:
- Programcının kod içinde tıkandığını ya da yolunu kaybettiğini belirlemek.
- Programcının sırada hangi dosyayı inceleyeceğini tahmin etmek.
- İlgili kodu isabetli biçimde önermek.
- Kullanılan istatistiksel yöntemler:
- C4.5 algoritması: karar ağacı üretimi.
- K-means ve DBSCAN: olay kümeleme.
- Apriori ve işbirlikçi filtreleme: olaylar arası ilişkileri bulma.
- Sonuç:
- Basit yöntemler olmalarına rağmen şaşırtıcı derecede güçlü performans gösterdiler.
- Çoğu durumda karmaşık sinir ağlarından daha fazlasına gerek yoktu.
- Çıktılar:
- Makaleler yayımladım, birkaç staj yaptım ve geliştirici araçları ürettim.
- Doktorayı başarıyla tamamladım.
- İlgili materyaller:
- Makale: geliştiricilerin bilgi arama biçimine dair veri analizi
Foraging and Navigations, Fundamentally: Developers Predictions of Value and Cost (PDF))
- Microsoft staj raporu: kod inceleme botu geliştirme deneyimi
When users never use the features they asked for
- Doktora boyunca istatistiksel tekniklerle gerçek problemleri çözüp hem akademide hem pratikte anlamlı sonuçlar elde ettim
Akıllı kullanıcı arayüzleri: profesör olarak araştırmaya başlangıç
- Yeni araştırma yönü belirleme:
- 2018'de tenure-track profesör olarak araştırma konusu olarak Akıllı Geliştirici Araçları (Intelligent Developer Tools) alanını seçtim.
- Başta kavram belirsizdi ama tahmin modelleriyle programcıların yanlış anlamalarını önceden tespit edip düzeltmeye odaklanan bir projeyle başladım.
- İlk araştırma önerisi:
- Proje hedefleri:
- Yeni başlayan programcıların program davranışı hakkında sahip olduğu yanlış anlamaları tespit etmek için program analizi teknikleri ve tahmin modelleri kullanmak.
- Programcıyı rahatsız etmeden bu yanlış anlamaları düzeltmek ve mantığı açıklamak.
- İstenmeyen program davranışı değişimlerini yakalayacak test kodu üreterek gelecekteki yanlış anlamaları önlemek.
- Özet:
- İkinci proje:
- Programcının bilgi ihtiyacını tahmin edip gerçek zamanlı kullanıcı arayüzü üreten bir araştırma.
- Örnek:
- Git geçmişini gezen bir programcıya önerilen commit kümelerini görselleştirerek sunmak.
- Araştırmaların birleşmesi:
- "Inquisitive Programming Environments as Learning Environments for Novices and Experts" şeklinde büyük bir vizyon önerdim.
- İlgili materyaller:
- Başarılar ve sınırlamalar:
- Proje hibe alarak başarılı biçimde başladı ama araştırma tam anlamıyla ilerlemeden profesörlük görevimden ayrıldım.
- Bu dönem, akıllı kullanıcı arayüzleri araştırmasını somutlaştırdığım ve büyük bir vizyon kurduğum önemli bir dönüm noktasıydı
Program sentezi ve büyük dil modelleri (LLM'ler): Microsoft deneyimi
- Microsoft'a katılış:
- Ocak 2022'de Microsoft'un program sentezi ekibine katıldım.
- Aynı yıl ChatGPT'nin çıkmasıyla AI teknolojileri her alana yayılmaya başladı; AI üzerinde yoğunlaşmak için mükemmel bir zamandı.
- AI kullanımına temkinli yaklaşım:
- Bir AI ekibinde olmama rağmen güçlü bir gerekçe yoksa AI kullanımına karşıydım:
- Gerçekten kullanıcı sorununu çözmeye yönelik net bir hedef var mı diye soruyordum.
- Bunun basit bir
if ifadesiyle çözülemeyeceğini kontrol ediyordum.
- Doğal dil arayüzünün gerçekten doğru tercih olup olmadığını düşünüyordum.
- Bu konudaki görüşlerim:
- Başlıca projeler
-
- LLM'lerin attention ağırlıklarıyla yapılan araştırma:
-
- Veri bilimi için AI eğitmeni:
- Motivasyon blog yazıları:
- IntelliCode kullanıcı deneyimini iyileştirme:
- Veri bilimciler için LLM tabanlı araçlar:
- Motivasyon blog yazısı:
- Başlıca araçlar:
- Öğrenciler için LLM tabanlı araçlar:
- Motivasyon blog yazısı:
- Başlıca araçlar:
- Şirketlerde Copilot geliştirmeye dair araştırma:
- Bugün ve sonrasında
- Bağımsız AI araçları geliştirme:
- Microsoft'tan ayrıldıktan sonra kişisel AI projelerine yoğunlaştım.
- Başlıca araçlar:
- AI ve LLM tabanlı çeşitli projelerle yenilikçi çözümler geliştiriyor, AI araçları üzerine araştırma ve geliştirme çalışmalarını hâlâ sürdürüyorum
Kapanış
- Harika bir 25 yıldı
- Sırada ne var? Öğretmeye, öğrenmeye ve üretmeye devam edeceğim
1 yorum
Hacker News görüşleri
ififadesinin yeterli olup olmayacağını düşündüm. Doğal dilin uygun bir arayüz olduğundan emin olmak gerekir