- Belirsizliği kod düzeyinde ele almak için yeni bir soyutlama olan
Uncertain<T> tipinin kavramsal tanıtımı
- Bu tip, geleneksel boolean mantığı yerine değerin güven düzeyini veya olasılığını modellemek için olasılıksal programlama metodolojisini uygular
- GPS, sensör verileri gibi gürültülü gerçek dünya verilerini matematiksel olasılık dağılımları olarak ele alma yeteneği sunar
- SPRT ve Monte Carlo yöntemleri gibi örnekleme teknikleriyle hesaplama verimliliği ile sonuç güvenilirliği arasında denge kurulmasını destekler
- Mevcut kodla kademeli entegrasyon mümkün olduğu için pratikte uygulanabilirliği yüksektir
Belirsizliğin kodlanması: özgüven ile gerçek veri arasındaki uçurum
- Birçok insanın kesinliğe aşırı bağımlı olma eğiliminden söz ediliyor
- Yazılım geliştirme deneyimi arttıkça “duruma göre değişir” denme sıklığının arttığına dikkat çekiliyor
- Koddaysa hâlâ yalnızca doğru/yanlış kararlarına dayanan kalıplar tekrar ediyor
- Özellikle GPS gibi belirsiz verilerle çalışırken bile sadece boolean değerler kullanılmasının sorunlu olduğu eleştiriliyor
- Programlama modelleri, gerçek dünyadaki ‘belirsizliği’ fazla hızlı biçimde ikiye bölerek karmaşıklığı gizliyor
Doğru soyutlamayı seçmek
- 2014’te University of Washington ve Microsoft Research, belirsizliği doğrudan tip sistemine yansıtan bir kavram önerdi
- "Uncertain<T>: A First-Order Type for Uncertain Data" başlıklı makale ile olasılıksal programlama yaklaşımının pratik olduğu gösterildi
- Kavramın Swift’e taşınmış kodu GitHub deposunda yayımlandı
Uncertain<T> kullanıldığında, karşılaştırma sonuçları da göreli olasılık olarak ifade edilir ve sonuç doğru/yanlış yerine Uncertain<Bool> olarak döner
- GPS konum hatası, Rayleigh dağılımı gibi gerçek veri özelliklerine uygun şekilde modellenir
Çeşitli belirsizlik işlemlerinin pratikteki karşılığı
- Çeşitli operatörleri ve olasılık dağılımı modellerini destekler; işlem grafiği kurar ve yalnızca gerektiğinde örnekleme yürütür
- Verimli örnek sayısı ayarlaması için SPRT (Sequential Probability Ratio Testing) kullanılır
- Örnek kodda basit karşılaştırmalar ile bileşik karşılaştırmaların gerektirdiği örnek sayısı farkı açıklanır
- Bu soyutlama sayesinde belirsizlik göz ardı edilmeden, hesaplama sürecinde doğal biçimde kullanılarak daha “akıllı” kod yazılabilir
Monte Carlo metodolojisinin uygulanması
- Olasılık dağılımı analizi ve beklenen değer hesaplaması için Monte Carlo örneklemesi kullanılır
- Gerçekte slot makinesi sonuçları tekrar tekrar simüle edilerek beklenen değer kolayca çıkarılabilir
- Karmaşık analitik hesaplar olmadan, yalnızca bilgisayarın tekrarlı örneklemesiyle gerçekçi sonuçlar elde edilebilir
Zengin olasılık dağılımı modelleme
Uncertain<T>, çeşitli olasılık dağılımı oluşturucularını yerleşik olarak sunarak sensör gürültüsü, kullanıcı davranışı, ağ gecikmesi gibi gerçek dünya verilerini ayrıntılı biçimde modelleyebilir
- Karışım dağılımı (mixture), Bernoulli, exponential, normal gibi birçok senaryo için parametre desteği sağlar
- Her dağılımın sezgisel olarak anlaşılmasına yardımcı olmak için ayrıca etkileşimli görselleştirme projesi de sunulur
İstatistik ve analiz işlemleri
- Beklenen değer, standart sapma, güven aralığı, çarpıklık (skewness), basıklık (kurtosis), entropi gibi çeşitli istatistiksel fonksiyonlar sağlar
- Hesaplama sonuçlarında örnek sayısı ayarlanabildiği için kesinlik ile verimlilik arasında ödünleşim yapılabilir
- Kümülatif dağılım fonksiyonu (CDF) kullanılarak belirli bir değerin altında kalma olasılığı da kolayca hesaplanabilir
Gerçek dünyada uygulama rehberi
- Uygulamalarda belirsizliğin yok sayılmasıyla ortaya çıkabilecek sorunlar (ör. saçma GPS hız gösterimleri gibi) anlatılıyor
- Kademeli geçiş vurgulanıyor: mevcut mesafe ölçümü gibi kritik yollardan başlayarak
Uncertain<T> entegrasyonu öneriliyor
- Örnek sayısı gibi hesaplama maliyeti ayarlarıyla doğruluk ve performans dengesi kurulabilir
- Pratikte Instruments.app gibi profilleme araçlarının aktif kullanımı öneriliyor
- Amaç belirsizliği ortadan kaldırmak değil, varlığını kabul edip uygun şekilde ele alan bir geliştirme pratiği kurmak
Sonuç ve gelecek
- Geliştiricilerin küçük alanlardan başlayarak belirsizlik işlemeyi devreye almasıyla kullanılabilirliği artırması ve hataları azaltması bekleniyor
- Tam kesinliğin var olmadığını kabul edip uygun araçlar ve soyutlamalarla yazılım kalitesi bir seviye yukarı taşınabilir
- Pratik açıdan, mevcut belirsizliğin kendisini doğru şekilde ele almak gerçek bir mühendislik iyileştirmesidir
1 yorum
Hacker News görüşleri
y = m * x + bdenklemine bakarsak, bunların hepsi literal olduğunda bu yalnızca basit bir render fonksiyonudur. Ama değişkenler, türetildikleri işlem yolunun tüm yapısını taşıyorsa, işlem yönüne göre değer tahmin edip render edebiliriz (forward pass) ya da otomatik olarak gradient/türev elde edip bunu sinir ağı eğitimine bağlayabiliriz. Bu çıktılar matematiksel olarak örneklenirse, modeli oluşturan ağırlıkları elde etmek mümkün olur. Derin öğrenmedeki her katman bu şekilde tasarlanmıştır ve PyTorch gibi sistemler yalnızca işlemlerin bileşimini belirterek bunu en iyi koda derleyebilir. Yani Uncertain<T> sadece bir başlangıçtır; her sayısal değişkenin her an aday değerlerin metaverisiyle tanımlandığını ve bu metaverinin değişken değeri toplamak kadar kolay manipüle edilebildiğini hayal etmek çok ilginç bir deneydir(-2,2)*(-2,2)hesabı(-4,4)verir, ama olasılık açısından aşırı uçların aynı anda gerçekleşmesi çok daha düşük olduğundan yaklaşık(-2.35,2.35)daha gerçekçi olurcertain Tdiye belirtilmeli