Kalman Filtresini Temelden Öğrenmek
(kalmanfilter.net)- Kalman Filter, ölçüm gürültüsü ve bilinmeyen dış etkenler bulunan sistemlerde mevcut durumu tahmin edip geleceği öngören bir algoritmadır; izleme, seyrüsefer, robotik ve kontrol gibi alanlarda kullanılır
- 1 boyutlu radar örneği, bir uçağın uzaklığını (r) ve hızını (v) ölçer; durum vektörü (\boldsymbol{x}=[r, v]^T) ve kovaryans matrisleri (\boldsymbol{P}, \boldsymbol{R}, \boldsymbol{Q}) ile durum ve belirsizliği birlikte ele alır
- İlk ölçüm değeri uzaklık için 10.000 m, hız için 200 m/s’dir; 5 saniyelik örnekleme aralığı ve sabit hız modeli uygulanırsa bir sonraki konum tahmini 11.000 m olur
- Tahmin adımı, durum geçiş matrisi (\boldsymbol{F}) ile durumu ilerletir; (\boldsymbol{F}\boldsymbol{P}\boldsymbol{F}^T+\boldsymbol{Q}) ile kovaryansı hesaplayarak hız belirsizliğinin ve süreç gürültüsünün konum belirsizliğini artırma etkisini yansıtır
- Güncelleme adımı, yeni ölçüme olduğu gibi güvenmek ya da onu tamamen atmak yerine Kalman Gain ile tahmin ve ölçümü ağırlıklı olarak birleştirerek tahmin belirsizliğini düşürür; ardından filtre tahmin ve güncellemeyi tekrarlar
Kalman Filter’ın ele aldığı problem
- Kalman Filter, belirsizlik içeren sistemlerde durum kestirimi ve gelecek tahmini yapan bir algoritmadır
- Ölçüm gürültüsü bulunan veya bilinmeyen dış etkenlerin sistemi etkilediği durumları ele alır
- Nesne izleme, seyrüsefer, robotik ve kontrol alanlarında temel bir araç olarak kullanılır
- Bilgisayar faresi yörüngesi kestiriminde el titremesini ve gürültüyü azaltarak daha kararlı bir hareket yolu oluşturabilir
- Finans piyasası analizinde gürültü karışmış piyasa verilerinden hisse fiyatı trendini algılamada, meteorolojide ise hava durumu tahmininde uygulanır
- Bu eğitim, karmaşık matematiği başa koymak yerine sayısal örneklerle sezgi oluşturma yaklaşımını izler
- Kötü tasarlanmış bir Kalman Filter’ın bir nesneyi düzgün izleyemediği örneği de içerir
- Kavramları ve matematiği anlayıp doğrudan tasarlayıp uygulayabilecek düzeye ulaşmayı hedefler
Öğrenme yolu
- Sunulan öğrenme yolu üç aşamaya ayrılır
- Tek sayfalık genel bakış: Temel kavramları ve gerekli denklemleri türetme olmadan açıklar; temel istatistik ve lineer cebir bilgisi varsayar
- Ücretsiz örnek tabanlı web eğitimi: tutorial sayısal örneklerle sezgi oluşturur ve Kalman Filter denklemlerinin türetilmesini adım adım ele alır
- Kitap: Kalman Filter from the Ground Up 14 tam çözümlü sayısal örnek, performans grafikleri ve tabloları, Extended Kalman Filter ve Unscented Kalman Filter, sensör füzyonu ve uygulama yönergelerini içerir
Radar takibinde tahmin neden gereklidir
- Bir radarın uçağı takip edebilmesi için dar ışını hedef yönüne tekrar tekrar doğrultması gerekir; bu yüzden bir sonraki ışın gönderildiğinde uçağın gelecekteki konumunu tahmin etmek zorundadır
- Tahmin başarısız olursa ışın yanlış yöne bakar ve takip kaybedilebilir
- Uçağın zaman içinde nasıl hareket ettiğini gösteren dinamik model gerekir
- Basitleştirilmiş 1 boyutlu örnekte yalnızca uçağın radara doğru yaklaşması veya radardan uzaklaşması şeklindeki doğrusal hareket ele alınır
- Durum, radardan uzaklık (r) olarak tanımlanır
- Radar, darbe gönderme-alma süresi ve ışık hızını kullanarak uzaklığı (r) hesaplar
- Doppler etkisi kullanılarak hız (v) de ölçülebilir
- (t_0) anında uzaklığın 10.000 m, hızın 200 m/s olarak çok yüksek doğruluk ve kesinlikle ölçüldüğünü varsayalım
- Örnekleme aralığı (\Delta t=5s)
- Sabit hız modelinde kat edilen mesafe (\Delta r=v\cdot\Delta t)
- Tahmini konum (10,000+200\cdot5=11,000m)
Ölçüm gürültüsü ve süreç gürültüsü
- Gerçek radar ölçümleri kusursuz değildir; birden fazla radar aynı anda aynı uçağı ölçse bile biraz farklı sonuçlar üretir
- Bu değişimler ölçüm gürültüsü nedeniyle oluşur
- Yalnızca tahmin değerini değil, bu tahminin ne kadar güvenilir olduğunu da birlikte hesaplamak gerekir
- Dinamik model de gerçek hareketi tam olarak açıklayamaz
- Uçağın sabit hızla hareket ettiği varsayılsa bile rüzgâr gibi dış etkenler gerçek hareketi değiştirebilir
- Bu tür öngörülemez etkiler süreç gürültüsü olarak ele alınır
- Kalman Filter, mevcut durum kestirimi, gelecek durum tahmini ve bunların her birinin belirsizliğini birlikte sağlar
- Durum kestirim belirsizliğini en aza indiren optimal algoritma olarak tanıtılır
Radar örneğinde durum gösterimi ve başlatma
- Örnekteki sistem durumu, uçağın uzaklığını (r) ve hızını (v) içeren bir vektördür
[ \boldsymbol{x}=\left[\begin{matrix}r\v\\end{matrix}\right] ]
- Vektörler küçük kalın harflerle, matrisler büyük kalın harflerle gösterilir
- Kalman Filter ilk ölçümle başlatılır
- (t_0) anındaki ölçümler uzaklık için 10.000 m, hız için 200 m/s’dir
- Ölçüm vektörü şöyledir
[ \boldsymbol{z}_0=\left[\begin{matrix}10{,}000\200\\end{matrix}\right] ]
- Ölçüm değerleri gerçek sistem durumu değil, gürültü karışmış rastgele değişkenlerdir
- Uzaklık ölçümünün standart sapması (4m)
- Hız ölçümünün standart sapması (0.5m/s)
- Varyans, standart sapmanın karesi olduğundan ölçüm kovaryans matrisi (\boldsymbol{R}_0) şöyledir
[ \boldsymbol{R}_0=\left[\begin{matrix}16&0\0&0.25\\end{matrix}\right] ]
- Bu örnekte uzaklık ve hız ölçüm hatalarının birbiriyle ilişkili olmadığı varsayılarak kovaryans matrisinin köşegen dışı elemanları 0 bırakılır
- Başlatma anında yalnızca tek bir ölçüm bulunduğundan, ölçüm değeri ilk durum kestirimi olarak kullanılabilir
[ \boldsymbol{\hat{x}}_{0,0}=\boldsymbol{z}_0=\left[\begin{matrix}10{,}000\200\\end{matrix}\right] ]
- Bu yöntem yalnızca başlatma aşamasında mümkündür
Tahmin adımı: durum ve kovaryansın ilerletilmesi
- Bir sonraki durumu tahmin etmek için sabit hızlı dinamik model kullanılır
[ v_1=v_0=v ]
[ r_1=r_0+v_0\Delta t ]
- Matris biçiminde durum tahmini şöyledir
[ {\hat{\boldsymbol{x}}}{1,0}=\boldsymbol{F}{\hat{\boldsymbol{x}}}{0,0} ]
- (\boldsymbol{F}), durum geçiş matrisidir; (\Delta t=5s) olduğunda tahmin sonucu şöyledir
[ {\hat{\boldsymbol{x}}}_{1,0}
\left[\begin{matrix}1&5\0&1\\end{matrix}\right] \left[\begin{matrix}10,000\200\\end{matrix}\right]
\left[\begin{matrix}11,000\200\\end{matrix}\right] ]
- Genel durum ekstrapolasyonu, yani tahmin denklemi şöyledir
[ {\hat{\boldsymbol{x}}}{n+1,n}=\boldsymbol{F}{\hat{\boldsymbol{x}}}{n,n}+\boldsymbol{G}\boldsymbol{u}_n ]
- (\boldsymbol{u}_n) giriş değişkenidir
- (\boldsymbol{G}) giriş geçiş matrisidir
- Örnekte giriş olmadığından (\boldsymbol{u}_n=0)
- Kovaryans basitçe (\boldsymbol{F}\boldsymbol{P}) ile hesaplanmaz
- Çünkü kovaryans, varyans ve kovaryansın kare terimlerini içerir
- Süreç gürültüsü olmadığında kovaryans ekstrapolasyon denklemi şöyledir
[ \boldsymbol{P}{n+1,n}=\boldsymbol{F}\boldsymbol{P}{n,n}\boldsymbol{F}^T ]
- Örnekte ilk kovaryans (\boldsymbol{P}_{0,0}) ilerletildiğinde şu sonuç elde edilir
[ \boldsymbol{P}_{1,0}
\left[\begin{matrix}22.25&1.25\1.25&0.25\\end{matrix}\right] ]
- Hız varyansı (0.25m^2/s^2) olarak kalır
- Uzaklık varyansı (16m^2)’den (22.25m^2)’ye yükselir
- Hız belirsizliği zamanla uzaklık belirsizliğine dönüşür
Süreç gürültüsünü yansıtma
- Yalnızca sabit hız varsayımı, uçağın gerçek hareketini tamamen açıklamakta zorlanır
- Rüzgâr gibi bilinmeyen dış etkenler hızı etkileyebilir
- Bu tür öngörülemez etkiler süreç gürültüsü (\boldsymbol{Q}) ile ifade edilir
- Süreç gürültüsünü içeren kovaryans tahmin denklemi şöyledir
[ \boldsymbol{P}{n+1,n}=\boldsymbol{F}\boldsymbol{P}{n,n}\boldsymbol{F}^T+\boldsymbol{Q} ]
- Örnekte rastgele ivmenin standart sapmasının (\sigma_a=0.2m/s^2) olduğu varsayılır
- Varyans (\sigma_a^2=0.04m^2/s^4)
- (\Delta t=5s) olduğunda süreç gürültüsü matrisi şöyledir
[ \boldsymbol{Q}
\left[\begin{matrix}6.25&2.5\2.5&1\\end{matrix}\right] ]
- Süreç gürültüsü eklenmiş tahmin kovaryansı şöyledir
[ \boldsymbol{P}_{1,0}
\left[\begin{matrix}28.5&3.75\3.75&1.25\\end{matrix}\right] ]
Güncelleme adımı: ölçüm ve tahminin birleştirilmesi
- (t_1) anındaki ikinci ölçüm değeri şöyledir
[ \boldsymbol{z}_1= \left[\begin{matrix}11{,}020\202\\end{matrix}\right] ]
- Bu ölçüm, güçlü bir gürültü sıçraması nedeniyle ilk ölçüme göre daha düşük sinyal-gürültü oranına ve daha yüksek belirsizliğe sahiptir
- Uzaklık ölçümünün standart sapması (6m)
- Hız ölçümünün standart sapması (1.5m/s)
- Ölçüm kovaryans matrisi şöyledir
[ \boldsymbol{R}_1= \left[\begin{matrix}36&0\0&2.25\\end{matrix}\right] ]
- (t_1) anında önceki adımda hesaplanan tahmini durum ve yeni ölçüm değeri birlikte kullanılabilir
- Tahmin kovaryansı (\boldsymbol{P}_{1,0}) için köşegen elemanlar (28.5), (1.25)
- Ölçüm kovaryansı (\boldsymbol{R}_1) için köşegen elemanlar (36), (2.25)
- Bu durumda tahmin belirsizliği ölçüm belirsizliğinden küçüktür
- Kalman Filter ne yeni ölçümü olduğu gibi kullanır ne de yalnızca tahmini korur
- Tahmin ve ölçümü ağırlıklı ortalama olarak birleştirir
- Belirsizliği daha düşük olan tarafa daha büyük ağırlık verir
- 1 boyutlu biçimde birleştirme şöyledir
[ \hat{x}{1,1}=K_1z_1+(1-K_1)\hat{x}{1,0} ]
- (K_1), Kalman Gain’dir ve ölçüme ile tahmine ne kadar ağırlık verileceğini belirler
- Model varsayımı doğru olduğu sürece güncellenmiş kestirimin belirsizliğini en aza indirir
Durum güncellemesi ve innovation
- Matris biçimindeki durum güncelleme denklemi şöyledir
[ \hat{\boldsymbol{x}}_{1,1}
\hat{\boldsymbol{x}}_{1,0} + \boldsymbol{K}_1(\boldsymbol{z}1-\hat{\boldsymbol{x}}{1,0}) ]
- Genel olarak ölçüm değeri ile sistem durumu aynı fiziksel büyüklüğü temsil etmeyebilir
- Dijital termometre elektrik sinyalini ölçer, ancak sistem durumu sıcaklık olabilir
- Bu durumda tahmini durumu ölçüm alanına dönüştüren gözlem matrisi (\boldsymbol{H}) gerekir
- Genel durum güncelleme denklemi şöyledir
[ \hat{\boldsymbol{x}}_{1,1}
\hat{\boldsymbol{x}}_{1,0} + \boldsymbol{K}_1(\boldsymbol{z}1-\boldsymbol{H}\hat{\boldsymbol{x}}{1,0}) ]
- (\boldsymbol{z}1-\boldsymbol{H}\hat{\boldsymbol{x}}{1,0}), innovation veya residual olarak adlandırılır ve yeni bilgiyi temsil eder
- Örnekte durum ve ölçümün ikisi de uzaklık ve hız olduğundan (\boldsymbol{H}) birim matristir
Kalman Gain hesaplama
- 1 boyutlu Kalman Gain şöyledir
[ K_n=\frac{p_{n,n-1}}{p_{n,n-1}+r_n} ]
- (p_{n,n-1}) tahmini durum varyansıdır
- (r_n) ölçüm varyansıdır
- Çok değişkenli Kalman Filter’da Kalman Gain bir matris olur ve şöyle ifade edilir
[ \boldsymbol{K}n= \boldsymbol{P}{n,n-1}\boldsymbol{H}^T \left( \boldsymbol{H}\boldsymbol{P}_{n,n-1}\boldsymbol{H}^T+\boldsymbol{R}_n \right)^{-1} ]
- Örnekte hesaplanan (t_1) Kalman Gain’i şöyledir
[ \boldsymbol{K}_1= \left[\begin{matrix}0.4048&0.6377\0.0399&0.3144\\end{matrix}\right] ]
- Matris tersi MATLAB’da
inv(A)veya Python’danumpy.linalg.inv(A)ile hesaplanabilir- Gerçek uygulamalarda açıkça ters matris hesaplamak yerine MATLAB’da
A\bveya Python’danumpy.linalg.solve(A, b)gibi lineer sistemi doğrudan çözme yöntemi genellikle daha iyidir
- Gerçek uygulamalarda açıkça ters matris hesaplamak yerine MATLAB’da
Güncelleme sonucu ve kovaryans azalması
- Örnekte innovation şöyledir
[ \boldsymbol{z}1-\hat{\boldsymbol{x}}{1,0}
\left[\begin{matrix}20\2\\end{matrix}\right] ]
- Kalman Gain uygulanmış düzeltme miktarı şöyledir
[ \boldsymbol{K}_1 \left[\begin{matrix}20\2\\end{matrix}\right]
\left[\begin{matrix}9.37\1.43\\end{matrix}\right] ]
- Güncellenmiş durum kestirimi şöyledir
[ \hat{\boldsymbol{x}}_{1,1}
\left[\begin{matrix}11{,}009.37\201.43\\end{matrix}\right] ]
- Çok değişkenli kovaryans güncellemesinde Joseph form yaygın olarak kullanılır
[ \boldsymbol{P}_{n,n}
(\boldsymbol{I}-\boldsymbol{K}n\boldsymbol{H}) \boldsymbol{P}{n,n-1} (\boldsymbol{I}-\boldsymbol{K}_n\boldsymbol{H})^T + \boldsymbol{K}_n\boldsymbol{R}_n\boldsymbol{K}_n^T ]
- Literatürde basitleştirilmiş biçim de sıkça görülür
[ \boldsymbol{P}_{n,n}
(\boldsymbol{I}-\boldsymbol{K}n\boldsymbol{H}) \boldsymbol{P}{n,n-1} ]
- Kesin aritmetikte iki biçim aynı sonucu verir
- Bilgisayar uygulamalarında Joseph form genellikle sayısal olarak daha kararlıdır
- Örnekte basitleştirilmiş kovaryans güncellemesi kullanılarak şu sonuç elde edilir
[ \boldsymbol{P}_{1,1}
\left[\begin{matrix}14.57&1.43\1.43&0.71\\end{matrix}\right] ]
- Güncellenmiş kestirimin belirsizliği, tahmin belirsizliğinden ve ölçüm belirsizliğinden düşüktür
- Tahmin kovaryansının köşegen elemanları (28.5), (1.25)
- Ölçüm kovaryansının köşegen elemanları (36), (2.25)
- Güncelleme kovaryansının köşegen elemanları (14.57), (0.71)
- Teorik olarak yeni bilgi, belirsizliği yüksek olsa bile kestirim belirsizliğini azaltır
- Gerçek sistemlerde güvenilmesi zor ölçümlerin reddedilmesi gereken durumlar olabilir
Sonraki tahmin ve tekrar döngüsü
- Iteration 1’in tahmin adımı, Iteration 0 ile aynı şekilde yürütülür
- Ancak başlangıç noktası güncellenmiş (\hat{\boldsymbol{x}}{1,1}) ve (\boldsymbol{P}{1,1})’dir
- Durum tahmini şöyledir
[ \hat{\boldsymbol{x}}_{2,1}
\boldsymbol{F}\hat{\boldsymbol{x}}_{1,1}
\left[\begin{matrix}12,016.5\201.43\\end{matrix}\right] ]
- Kovaryans tahmini şöyledir
[ \boldsymbol{P}_{2,1}
\boldsymbol{F}\boldsymbol{P}_{1,1}\boldsymbol{F}^\top+\boldsymbol{Q}
\left[\begin{matrix}52.86&7.47\7.47&1.71\\end{matrix}\right] ]
- Yeni ölçüm olmadan zaman geçtikçe iki varyans da yeniden artar
- Hız belirsizliği uzaklık belirsizliğini daha da büyüttüğü için uzaklık varyansı daha hızlı artar
- Kalman Filter, başlangıçta bir kez başlatıldıktan sonra sürekli olarak tahmin ve güncellemeyi tekrarlayan bir yapıda çalışır
- Tahmin, durum geçiş modeliyle mevcut kestirimi ve kovaryansı bir sonraki zamana ilerletir
- Güncelleme, yeni ölçüm ile tahmini Kalman Gain kullanarak birleştirir ve mevcut durumu ile belirsizliği yeniler
1 yorum
Hacker News yorumları
“Yeni başlayanlar için eğitim” gördüğümde her seferinde umutlanıyorum ama çoğunlukla hayal kırıklığına uğruyorum; bu da istisna olmadı.
Başlarda iyi gidiyor, sonra mutlaka bir kavramı ya da kritik terimi yeterince açıklamadan geçiyor. Burada “rastgele değişkenler olasılık yoğunluk fonksiyonuyla açıklanır; olasılık yoğunluk fonksiyonu da momentlerle karakterize edilir. Bir olasılık değerinin momenti, rastgele değişkenin kuvvetlerinin beklenen değeridir” kısmında takıldım.
Bunun olasılık değerinin üssünün beklenen değeri mi, olasılık değerinin bir kuvvetinin beklenen değeri mi olduğunu; ayrıca neden olasılık değerinin kendisi değil de kuvvet almanın özel olduğunu da bilmiyorum. Yazarların düşünce akışının ortasında birden basitçe açıklamaktan vazgeçtiği ya da baştan temel kavramları doğru dürüst anlamadıkları için başkasına açıklayamadıkları hissine kapılmak sinir bozucu. Udemy gibi eğitmene soru sorabilsen iyi olurdu; ama kitap yazarından yanıt almanın bir yolu yok.
Yazar bir şeyi bir kez bile yeterince açıklayamazsa bütün yapı çöker; bir geri bildirim döngüsü varsa bu çok yardımcı olur. Yoksa sonunda sorumluluğu kendiniz alıp bilmediğiniz kelime ve ifadeleri araştırmanız gerekir. “Rastgele değişken” ya da “olasılık yoğunluk fonksiyonu” gibi tam anlamadığınız ifadeleri bulun; Wikipedia, ChatGPT, ders kitapları, videolar vb. ile tamamlayın. Bu süreç özyinelemelidir; yine bilmediğiniz kavramlar çıkar, ama aşağı inmeye devam edersiniz. Bir eğitmenin değeri de bu derinlik öncelikli aramayı iyi yönlendirebilmesindedir. Yeni bir alanda arka plan bilgisini tamamlamak çoğu zaman ana metni okumaktan daha uzun sürer; benzer bir sonraki konuda daha hızlı olabilirsiniz.
Lisans ve yüksek lisans boyunca böylesine temel bir kavramı içselleştirememiş olmam neredeyse tuhaf geliyor.
Bu yüzden kişinin bildiğini varsaydığı şeyleri unutuyor. 3blue1brown videolarında da benzer bir sorun hissediyorum. Videolar güzel, ama anlayış oluşmuyor; zaten bilenler tanıdık bir kavramın temiz bir biçimde ifade edilmesini görüp başını sallıyor, fakat benim gibiler için önkoşullar fazla görünüyor.
Kalman filtresini anlamak için önce olasılığın temellerini ve Gauss dağılımının önemini bilmek gerekir. Matematiksel türetme, ilgili olasılık dağılımlarının hepsinin Gauss dağılımı olduğunu varsayar; Gauss dağılımı da 1. ve 2. momentleri bildiğinizde tekil olarak belirlenir. Sonuçta momentleri tanıtmaktan kaçamazsınız; ardından da oldukça çetin matematik gelir. Kalman filtresi kolay bir konu değildir; Rudolf Kalman bir röportajında, kendi filtresi olmasaydı ABD’nin Ay’a inişinin mümkün olmayacağını söylemişti.
Basit tek değişkenli bir örnekten başlayıp onu değiştirerek ve genelleştirerek ilerlemek mümkün; bunu Kalman filtresini öğretmek için hep iyi bir yöntem olarak düşünmüşümdür.
Birkaç yıl önce Kalman’ın kısa bir ders serisini dinlemiştim; gözlem verileriyle doğrudan çalışmanın erdemini çok güçlü biçimde vurguluyordu.
Önce bir model varsayıp onu veriye uydurmaya çalışmanın önyargı doğurduğunu düşünüyordu; bu ilkeye iyi bir örnek olarak Newton’ın Principia’sını göstermişti. Anlattığına göre Newton, Kepler yasalarını açıklayacak bir model arayıp durmamış; ağırlıklı olarak geometrik akıl yürütmeler kullanarak Kepler yasalarından ters kare kütleçekim yasasını türetmişti. Çok iyi bir konuşmacıydı, güçlü görüşleri vardı; elbette Kalman filtresinin fikrini de açıkladı, ama kendi işimde doğrudan kullanacağım bir şey olmadığı için ayrıntıları çoktan unuttum.
Gerçekten çok karmaşık ve iyi bilinen sistemler devreye almış bilim insanları ve mühendislerle çalıştım; bu kişiler popüler algoritmalara genelde şüpheyle yaklaşır ve çoğunlukla ilk ilkelerden başlar. Vakaların %90’ında basit, hatta hareket modeli bile olmayan sıradan bir doğrusal Kalman filtresi yeterliydi.
Geçenlerde bir arkadaşım yan proje için Kalman filtresi uygulaması istedi; çeşitli kaynakları ve bu web sitesini okudum ama hâlâ nasıl uygulayacağımı bilmiyorum.
Hepsi “baykuşun geri kalanını çizin” tarzında görünüyor. Bir programcı anlatıyormuş gibi, örneğin sigma gösterimi yerine dizi üzerinde döngülerle açıklayan bir kaynak olsa iyi olurdu. Benim anladığım kadarıyla Kalman filtresi konum, hız ve belki ivmenin hareketli ortalaması gibi görünüyor; sensörün söylediği değer yerine “gerçek değeri” kestirmek için bu üç değeri kullanıyor gibi.
Ancak önce dinamikleri açıklayan matematiği yazmanız gerekir. Kalman filtresi, belirli bir sistem dinamiğine Bayes teoremini uygulamaya daha yakındır; bir ölçüm aldığınızda mevcut durum kestirimini nasıl güncelleyeceğinizi ve o ölçümden sonra bir sonraki ölçüme kadar sistem dinamiklerinin belirsizliği nasıl etkileyeceğini tekrar tekrar uygular. İzlenen şeyin zaman içinde nasıl değiştiğini söyleyen bir dinamik modeline önce ihtiyaç vardır. Bu yoksa uygulamanın kafa karıştırıcı olması kaçınılmazdır. Önce Bayes filtreleri ya da parçacık filtreleri hakkında okumak, matrisler olmadan da kavramı oturtmaya yardımcı olur. Matematik bilmeden yazılım geliştirici olunabileceği sözü beni hep bunaltır; web sayfası yapmak için bu doğru olabilir ama ne kadar çok matematik bilirseniz modelleyip çözebileceğiniz problem aralığı o kadar genişler.
Önemli olan, ilgili duruma dayanarak kestirim yapmak ve bir ölçüm aldıktan sonra iki bilgiyi kullanarak bir sonraki durumu yinelemeli biçimde ayarlamaktır. Formülü anlarsanız kodlamanın kendisi epey kolaydır. Bu kaynak yardımcı olabilir: http://bilgin.esme.org/BitsAndBytes/KalmanFilterforDummies
Dış kontrol ve süreç gürültüsü eklenebilir; iç durum ise değerlerden oluşan bir vektörle ifade edilir. Ayrıca iç durumun gözleme nasıl dönüştürüldüğüne dair lineer bir model ve gözlem gürültüsü de gerekir.
x model durumu, F lineer durum geçiş modeli
x(t+1) = F x(t), Q süreç gürültüsünün kovaryans matrisi; dolayısıyla gerçektex(t+1) = F x(t) + N(0,Q). H lineer gözlem modeli, R gözlem gürültüsünün kovaryans matrisi, u ve B ise isteğe bağlı dış kontrol vektörü ve onun etki biçimidir.N(0,Q), ortalaması 0, kovaryansı Q olan normal dağılımdır.Örneğin hareket eden bir cisimde model durumu konum x ve hız v olabilir. Radar vb. ile genelde yalnızca konum gözlenir, mevcut hız gözlenemez; bu yüzden gözlem modeli yalnızca konumu çıkaran bir biçimde olur. Kalman filtresine geçmeden önce böyle bir “baykuş”un hazır olması gerekir ve sürecin ne olduğuna göre bunu sizin belirlemeniz gerekir. Kalman filtresi, durum geçiş modeli ve gözlemlerin ikisi de gürültü içerdiğinde her zamandaki gerçek durum vektörünü en iyi biçimde kestirmenin yolunu söyler. Birçok öğretici, seçilen süreç modeline ait kısımlarla Kalman filtresine ait kısımları karıştırarak anlattığı için kafa karıştırır; 1 boyutlu sabit model gibi çok küçük örneklerde ise dinamik model denklemlerin içinde kaybolduğu için kafa karışıklığı daha da artar.
İlk birkaç bölümde Kalman filtresini ve bilgi filtresini iyi ele alıyor.
Sensör ölçümlerinde gürültü olduğunu bildiğinizde, gerçek değere daha yakın bir kestirim elde etmek için birkaç örneğin ortalamasını alma yaklaşımıdır; sensör gürültüsünün düzeyini biliyorsanız kaç örneğin ortalamasını alacağınız konusunda da bir fikir edinirsiniz. Burada tüm algılanan değerlerin veya çıkarımların, ortalama ve varyansla parametreleştirilmiş Gauss dağılımı olarak kestirildiğini düşünebilirsiniz.
İvme, hız ve konum içeren fiziksel bir sistemde, t zamanında konum p ve hız v ise t+dt’deki konum kabaca
p+(v*dt)olur. İvme kestirimiyle hız da güncellenebilir; kontrol edilen bir sistemse komut verilen kuvvetle ivme modeli de güncellenebilir. Ancak başlangıç kestiriminde belirsizlik olduğundan, yalnızca bu süreç modelini ileri doğru işletmeye devam ederseniz belirsizlik sürekli büyür ve sonunda işe yaramaz hale gelir.Kalman filtresi, sensör bilgisini ve süreç modelini birleştirerek, yalnızca birini kullanmaya kıyasla ilgilendiğiniz niceliği daha iyi kestirmeyi amaçlayan bir tekniktir. Her zaman adımında önceki durum kestirimine dayanarak süreç modeliyle durumu tahmin eder, ardından mevcut sensör ölçümüyle ortalamayı ve belirsizliği günceller. Temel Kalman filtresinde süreç modelinin lineer olduğu ve tüm kestirimlerin basit Gauss dağılımları olduğu varsayılır; model ile sensörden hangisine ne kadar güvenileceği ise Kalman kazancı denen çarpan katsayısıyla belirlenir.
Kalman filtresi hakkında bir başka adım adım video öğretici oynatma listesi: https://www.youtube.com/watch?v=CaCcOwJPytQ&list=PLX2gX-ftPV...
Sezgiyi oturttuktan sonra Kalman filtresi gerçekten ilginç hale geliyor; parçacık filtreleri de ele alması ve görselleştirmesi keyifli.
Bu kitap bende var ve gerçek problemlerde epey başarılı biçimde kullandım.
Birkaç kez yeniden okuduğum halde takip etmesi tuhaf gelen bazı yerleri var, ama genel olarak oldukça iyi.
Bununla ilgili bir başka iyi yazı: Is the Kalman filter a low-pass filter? Sometimes!
https://jbconsulting.substack.com/p/is-the-kalman-filter-jus...
Gerçek zamanlı olarak yüz çevresini kırpan bir videoda sanal kamera hareketindeki titremeyi azaltmak için kullandım. Algılanan yüz konumu akışını Kalman filtresi işleyicisine gönderip kararlı bir kamera konumu akışı geri alma biçimindeydi.
Hesaplama kaynakları sınırlıyken Kalman filtresi harika, ama kişisel olarak parçacık filtresi gibi daha yeni ve gelişmiş modelleri tercih ediyorum
Parçacık filtresinin avantajı, doğrusal olmayan fizik ve Gauss dışı dağılımların olduğu karmaşık durumları ele alabilmesi. Örneğin araç GPS’i, yakın dönemdeki dönüş geçmişine dayanarak yol haritasını kullanıp imkânsız konumları eleyebilir. Gauss filtresi bunu yapamaz; birkaç bloğu kaplayan bulanık bir yığın üretmekle kalır
Ayrıca çevrimdışı işleme için parçacık filtresi dışında önerebileceğiniz daha yeni veya gelişmiş modeller var mı, onu da merak ediyorum
2007’de bir reklam teknolojisi şirketindeydim; CEO ve araştırma ekibi, Google ve MSN ağlarındaki reklam kampanyalarını optimize etmek için Kalman filtresine takmıştı
Hatırladığım kadarıyla bir ölçüde işe yarıyordu, ama şimdi patent başvurusunu bulamıyorum; Zeta ve Walmart o teknolojiyi satın almıştı
Kalman filtresi açıklama yazıları neredeyse her zaman “Sezgisel bir örnek olarak termostatı düşünelim. Anladınız mı? Güzel! Şimdi daha da sezgisel hâle getirmek için ileri düzey lineer cebire bakalım” gibi başlıyor
Doğrudan matematiğe atlamayan bir Kalman filtresi açıklaması görüp görmediğinizi merak ediyorum
Gözlerinizi kapatıp bir duvara doğru yürürseniz, zaman geçtikçe kendi konumunuzdan eminliğiniz azalır; parmağınız duvara değdiği anda ise konumunuzdan eminliğiniz aniden artar. İlk kısım tahmin adımı, ikinci kısım ölçüm güncellemesidir. Lineer cebir, Gauss gürültüsü olan doğrusal dinamik sistemlerde bu ağırlıkları hesaplamanın yolundan ibarettir
Kalman filtresi normal dağılım gibi istatistiksel varsayımlar yaptığı için en azından istatistik ile ortalama-kovaryans matrislerini bilmeniz gerekir. Bu kadarıyla https://sites.ualberta.ca/~dwiens/stat679/meinhold&singpurwa... bağlantısındaki 4. bölüme kadar takip edebilirsiniz. 4. bölümden sonrası gerçek uygulama için gereken matematiksel hesapları zorlayan kısım; anlayışa pek fazla ek katkı sağlamaz
Her şeyi önce tek boyutta ele alıp sonra çok boyutlu problemlere genişletmesi, kavramı oturtmaya kesinlikle yardımcı oluyor. Ders oynatma listesi şurada gibi görünüyor: https://youtube.com/playlist?list=PLAwxTw4SYaPkCSYXw6-a_aAoX...
Kalman filtresi kısmı “Tracking Intro - Artificial Intelligence for Robotics” videosunda başlıyor. Ücretsiz ders de burada gibi, ancak erişmek için giriş yapmak gerekiyor: https://www.udacity.com/course/intro-to-artificial-intellige...
Kalman’ı iyi bilmediğim için bu web sitesindeki giriş yazılarını okudum, ama pek yerine oturmadı
Örnek grafikleri düşününce, çok daha kolay anlaşılır bir üstel hareketli ortalamaya benziyordu. Google’da karşılaştırma arayınca Stats Stack Exchange’de “rastgele yürüyüş + gürültü” için EMA’nın Kalman kadar iyi olduğu söyleniyordu; Brown University’den Joseph J. LaViola’nın 2003 tarihli makalesi de çift üstel düzeltme algoritmasının Kalman ve genişletilmiş Kalman ile aynı kalitede olup 135 kat daha hızlı ve daha basit olduğunu gösteriyor gibiydi.
Çift üstel düzeltme Kalman’dan çok daha kolay anlaşılır olduğundan, LaViola makalesinin doğru olduğunu varsayarsam Kalman’ı anlamak için daha fazla çaba harcamayı düşünmüyorum