3 puan yazan GN⁺ 2025-08-29 | 1 yorum | WhatsApp'ta paylaş
  • 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

 
GN⁺ 2025-08-29
Hacker News görüşleri
  • GPS belirsizliği genelde yalnızca açık gökyüzü altında uzun süreli konumlama gibi belirli koşullarda dairesel olarak yaklaşık modellenebilir; gerçekte genel hata modeli çok daha karmaşıktır ve çeşitli hata ölçüm biçimleri vardır. Bu nokta, konumu tek bir nokta olarak ele almayı zorlaştıran birçok durumda önem kazanır. Örneğin otonom araçlarda, konum kestirimi belirsizliğinin dairesel olmayan çok yollu yayılım etkileri tarafından belirlendiği durumlarla sık karşılaşılır. Bu tür zorluklar üzerine derinlemesine düşününce sonunda particle filter gibi teknikleri yeniden icat etme noktasına varılır
    • Araç GPS’i genelde birden fazla sensör ve ek varsayımla desteklenir; özellikle hız göstergesi, pusula ve aracın harita üzerindeki yollardan birinde bulunacağı bilgisi önemli rol oynar. Ayrıca son kapanış ile yeniden açılış arasında konum değişmediği varsayımı, hızlı konum tespitini mümkün kılar
    • Lidar noktaları aslında basit noktalar değil, en olası konum merkez alınarak oluşan elipsoitler şeklinde var olur
  • University of Cambridge’de, Uncertain<T>(James Bornholt) ve ilgili araştırmalardan esinlenerek bir işlemci mikro mimarisi tasarlandı. Parametrik dağılımların (Gaussian, Rayleigh vb.) yanı sıra keyfi örnek kümeleri de register/belleğe yüklenip, program değerlerinin parametrik olmayan dağılımlar olarak aritmetik işlemler boyunca yayılması sağlandı. Bu teknoloji temelinde Signaloid adlı bir spin-off şirketi pazara giriyor; ben de bunu durum kestirimi (ör. particle filter) için uygulayan araştırmalar yürütüyorum makale bağlantısı
  • Programlamada bir değişkenin matematiksel bir değişkenin “tanımını” taşıyabileceği fikri kavranınca, modern yapay zekanın temelindeki şaşırtıcı imkânlar açığa çıkar. Tanıdık y = m * x + b denklemine 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
    • Bu gerçekten çok ilginç geliyor. Makine öğrenmesi ya da matematik bilgisi fazla olmayan biri olarak benim de kolayca anlayabileceğim şekilde açıklayabilir misiniz diye merak ediyorum
    • PL (programlama dilleri) içinde bu fikri dil düzeyinde gerçekten destekleyen örnekler olup olmadığını merak ediyorum
    • Bu yorum sanki değişkenleri, fonksiyonları ve lineer sistemleri birbirine karıştırıyor; bunları özellikle birleştirmeye gerek yok gibi görünüyor
  • Bu yaklaşımın birden fazla değişken arasındaki covariance’ı da işleyip işleyemeyeceğini merak ediyorum. Örneğin ölçülen nesnenin konumu da hatalı olabilir ve bunun benim konum hatamla korelasyonu olabilir (özellikle GPS aynı anda ölçüldüyse). Tür sistemi yalnızca tek değişkenli modeller içeriyorsa kullanışlı olabilir, ama covariance da ele alınabiliyorsa çok daha güçlü ve doğru kullanılabilir diye düşünüyorum
    • Sampling tabanlı yaklaşım kullanılırsa covariance modellemesi otomatik olarak dâhil edilmiş olur. Belirli bir değerlendirme sürecinde birden fazla kez kullanılan leaf değerleri yalnızca bir kez örneklemek yeterlidir; bunun gerçekten bu implementasyonda böyle olduğunu aşağıdaki koddan görebilirsiniz Uncertain.swift kodu
    • Programın gerçek kullanım sırasında covariance’ı “öğrenip” öğrenemeyeceğini uzun zamandır merak ediyordum. Değişkenleri bağımsız modelleyince zamanla gerçeklikten sapacakmış gibi geliyor. Üstelik büyük ölçekli programlarda tüm değişken çiftleri arasındaki korelasyonu elle hesaba katmak fiilen imkânsız. Belki bunu otomatik öğrenen bir yöntem tasarlamak gerekir
    • Covariance takibi gerekiyorsa python’daki gvar kütüphanesine de bakmayı öneririm
    • Kuantum mekaniğini düzgün modellemek istiyorsanız, birbirine dolanık her değişken kümesine karmaşık sayı biçiminde bir dalga fonksiyonu iliştirmeniz gerekir
  • Makine mühendisliği çizimleri gibi alanlarda imalat çalışanlarıyla iletişim kurmak için “tolerans” kavramı kullanılır; örn. 10cm +8mm/-3mm gibi, izin verilen aralık yukarı ve aşağı yönde açıkça belirtilir. GPS tabanlı “neredeyse vardık mı?” gibi sorularda da hata yönlülüğünü anlamanın ve belirsizliğin “yönüne” göre daha iyi/kötü durumları ayırmanın önemli olacağı düşünülebilir
    • Bu gösterimin talihsiz yanı, bazı durumlarda “asla maksimum/minimum aralığın dışına çıkmaz” anlamına gelmesi, bazı durumlarda ise “yalnızca %10 olasılıkla aralığın dışına çıkar” diye yorumlanabilmesidir
    • İş planlamasında sık kullanılan üç noktalı tahmin yöntemi de (iyimser, gerçekçi, kötümser) benzer. Çok basit bir olasılık dağılımı bile, belirsizliğin işin içine girdiği her alanda olasılık dağılımı temelli bakışın çok daha fazla açıklık sağladığını gösterir
  • Bu fikir geçmişte “interval arithmetic” adıyla birçok kez uygulanmıştı. Boost ve flint gibi projelerde de destekleniyor Boost Interval flint(arb). Defalarca yeniden keşfedilmiş olmasına rağmen neden gerçekten ana akım olmadığını merak ediyorum; bunu sahada kullanıp da pek iyi bulmayarak vazgeçen varsa deneyimini duymak isterim
    • Yazıda Uncertain<T>’nin GPS belirsizliği için Rayleigh dağılımı kullandığı anlatılıyor. Rayleigh dağılımı uniform dağılım değildir; gerçek dünyadaki hata dağılımını daha iyi modeller. Örneğin Boost kütüphanesinde (-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 olur
    • Fizikte error propagation erken dönemde öğretilir. Hataların Gaussian dağılıma sahip olduğu varsayılırsa çok zarif hesaplanabilir; fakat gerçekte ölçümlerin çoğu Gaussian değildir ve olasılıksal olmayan (sistematik) hatalar sorun çıkarır. Bunları düzgün ele almak zor olduğu için otomatik hata yayılımı çoğu zaman pek işe yaramaz; çoğu durumda elle analiz gerekir
    • Bu yazının neden bu kadar ilgi gördüğünü pek anlamıyorum; bu proje yalnızca interval arithmetic değil, çeşitli belirsizlik dağılımlarını destekliyor
    • Boolean gibi basit türlerde çıkarım kolaydır ve kısıtlar nettir. Buna karşılık fiziksel belirsizlik karmaşıktır; modelin etki alanına göre değişmesi gerekir. Bir kez karmaşık belirsizlikleri ele almaya karar verdiğinizde, sadece şık biçimde paketlenmiş bir kütüphane yerine amaca özel uzman modeller kullanmak daha uygundur
    • Interval arithmetic’te işlem hızı basit sayısal hesaplamalara göre yalnızca sabit katsayı kadar daha yavaştır, yani büyük bir fark yoktur, ve her işlem için kendine özgü en hassas interval sonucu vardır. Ancak kesinlik her zaman garanti edilmez. Yazıdaki gibi sampling yapan işlem grafikleri daha yavaştır ama gerçek hata modeline daha doğru yaklaşabilir; doğruluğu tüketen soyut bir alan gerektirmemesi gibi bir avantajı vardır
  • Benim yapmak istediğim veri tipi, bir değerin verilen bir olasılık dağılımı (veya olasılık yoğunluk fonksiyonu) içinde ne ölçüde bilindiğini ifade etmekti. Ayrıca her dönüşüm adımında buna karşılık gelen miktarda ek belirsizlik de eklenirdi. Gözlem sayısı arttıkça (ya da koşullu sınıflandırma değiştikçe) bu olasılık dağılımları kümesinin sürekli rafine edildiği bir akış hayal ediyordum. Nihai hedef, böyle dağılım tabanlı rastgele sonuç durumlarını simüle edebilmekti
  • Bu fikir eski Functional Pearl “Probability Functional Programming” ile de yakından ilişkili PDF bağlantısı. Gerçekten harika. Ben Haskell’e giriş dersimin ilk oturumuna Monty Hall problemini bir probability monad ile göstererek başlıyorum ve iki stratejinin kazanma olasılıklarını tam sayı kesirleriyle açık açık hesaplıyorum
  • Belki de Uncertain varsayılan tür olmalı ve yalnızca gerçekten kesin olan durumlarda ayrıca certain T diye belirtilmeli
    • Fiziksel ölçümlerle sınırlıysa evet; ama para gibi şeylerde kuruş düzeyine kadar kesinlik gerekir. Bu arada böyle bir yaklaşım bazı modern Fortran kütüphanelerinde de uygulanmış durumda
    • Optional türünün tamamlayıcısı olarak işlev görebilir
  • Bunun asimptotik olarak programlamadaki fuzzy logic sürümü olup olmadığını merak ediyorum Fuzzy Logic Vikipedi