19 puan yazan GN⁺ 2025-01-07 | 1 yorum | WhatsApp'ta paylaş
  • 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:
    1. Makale: geliştiricilerin bilgi arama biçimine dair veri analizi
      Foraging and Navigations, Fundamentally: Developers Predictions of Value and Cost (PDF))
    2. 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:
      1. 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.
      2. Programcıyı rahatsız etmeden bu yanlış anlamaları düzeltmek ve mantığı açıklamak.
      3. İ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:
  • 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

Kapanış

  • Harika bir 25 yıldı
  • Sırada ne var? Öğretmeye, öğrenmeye ve üretmeye devam edeceğim

1 yorum

 
GN⁺ 2025-01-07
Hacker News görüşleri
  • AI ekibindeydim, ama gerçekten ikna edici bir neden yoksa AI uygulamaktan kaçındım. Bunun kullanıcı sorununu çözmeye yönelik olup olmadığını, LLM gerektirip gerektirmediğini ya da birkaç if ifadesinin yeterli olup olmayacağını düşündüm. Doğal dilin uygun bir arayüz olduğundan emin olmak gerekir
    • AI alanında bu pratik yaklaşım ferahlatıcı geliyor. Basit bir regresyon modelinin sinir ağından daha iyi performans gösterdiği bir araç geliştirme deneyimim oldu. AI'ye tamamen yüklenmeme konusunda ekipten gelen tepkiyi önlemek zordu
  • 14 yıl boyunca benzer bir yolculuk yaşadım ve bunun bugün nasıl farklı olacağını hep merak ettim
    • Sektörle birlikte büyüdük ve adım adım daha karmaşık şeyler öğrenebildik. Bugün mezun olan öğrenciler ilk işlerinde onlarca yıllık karmaşıklıkla karşılaşıyor
  • Kısa süre önce UTK'dan ayrılan birini gördüm ve onun yazdığı blog yazısı, yüksek lisanstan sonra akademiye gitme konusunu yeniden düşünmeme neden oldu
  • Reklamlar ve açılır pencerelerle dağınık olmayan bir web sayfası ferahlatıcı hissettiriyor. Temiz, iyi düzenlenmiş metin ve basit bir yapıdan oluşuyor
  • Birçok insan için AI, şaşırtıcı şeyler yaratmaya yönelik eğlenceli bir yolculuk. Sonuçların etkileyici olduğuna katılıyorum. Ancak bilim insanlarının çalışmalarının toplum üzerindeki daha büyük etkisini düşünmemesi üzücü. Toplumsal statüleri yükseldikçe yarattıkları şeyler toplumsal yapıyı kökten değiştiriyor. AI tehlikeli unsurlardan biri ve büyük şirketlerin zekâyı yücelterek insanları kendine çekmesi bir felaketin habercisi