Kalman Filtresi Eğitimi
(kalmanfilter.net)- Kalman filtresi, gürültü içeren sensör ölçümleri ile kusurlu dinamik modeli birlikte kullanarak mevcut durumu ve bir sonraki durumun belirsizliğini de tahmin eden bir algoritmadır
- Eğitim, uçak radar takibi örneğinde uzaklık (r) ve hız (v) değerlerini durum vektörü olarak alıp, tahmin ile ölçümü birleştirme sürecini sayısal olarak adım adım izler
- İlk ölçüm değerleri (10,000m), (200m/s) ve örnekleme aralığı (5s) kullanıldığında, sabit hız modelinde bir sonraki konum (11,000m) olarak tahmin edilir; ölçüm gürültüsü (R) ve süreç gürültüsü (Q) kovaryansa yansıtılır
- İkinci ölçüm (11,020m), (202m/s) daha belirsizdir, ancak Kalman kazancı (K) tahmin ile ölçümü ağırlıklı olarak birleştirerek güncellenmiş durumu (11,009.37m), (201.43m/s) olarak hesaplar
- Başlatmanın ardından tahmin-güncelleme döngüsü tekrarlanır; gerçek uygulamalarda Joseph formu gibi kararlı kovaryans güncelleme denklemleri ve aykırı ölçüm işleme de dikkate alınmalıdır
Kalman filtresinin çözdüğü tahmin problemi
- Kalman filtresi, belirsizliğin olduğu ortamlarda bir sistemin durumunu tahmin eden ve öngören bir algoritmadır
- Ölçüm gürültüsü içeren sensör verileri
- Bilinmeyen dış etkenler
- Dinamik model ile gerçek hareket arasındaki fark
- Nesne takibi, navigasyon, robotik, kontrol, finansal piyasa analizi ve hava tahmini gibi alanlarda kullanılır
- Bilgisayar faresinin iz tahminine uygulanırsa gürültüyü azaltıp el titremesini telafi ederek daha kararlı bir hareket yolu oluşturabilir
- Eğitim, karmaşık matematiksel açıklamalardan çok sayısal örnekler ve sezgisel açıklamalarla Kalman filtresini anlamaya odaklanır
- Yanlış tasarlanmış bir durumda Kalman filtresinin nesneyi düzgün takip edemediği örnekler ve bunun nasıl düzeltilebileceği de yer alır
Öğrenme yolu
- Bu proje, Kalman filtresini üç farklı derinlikte öğrenebilecek şekilde yapılandırılmıştır
- Tek sayfalık genel bakış: Temel fikirleri ve gerekli denklemleri türetim yapmadan açıklar; temel istatistik ve lineer cebir bilgisi varsayar
- Ücretsiz örnek tabanlı web eğitimi: Sayısal örneklerle sezgi oluşturur ve Kalman filtresi denklemlerinin türetimine kadar adım adım ilerler; ön bilgi gerekmediğini belirtir
- Kalman Filter from the Ground Up: 14 adet tam çözümlü sayısal örnek, performans grafikleri ve tabloları, Extended Kalman Filter, Unscented Kalman Filter, sensör füzyonu ve uygulama yönergeleri içerir
Radar takibi örneğiyle tahmin gereksinimi
- Bir uçağı takip eden radarda uçak sistem, tahmin edilmesi gereken konum ise sistem durumudur
- Radar dar bir huzmeyi uçağın yönüne çevirdiğinden, bir sonraki huzmenin nereye gönderileceğine karar vermek için gelecekteki konumun tahmin edilmesi gerekir
- Tahmin başarısız olursa huzme yanlış yöne bakabilir ve takip kaybedilebilir
- Sistemin zamana göre hareketini gösteren bir dinamik model gerekir
- Basitleştirilmiş 1 boyutlu örnekte uçağın radara doğru ya da radardan uzaklaşarak doğrusal hareket ettiği varsayılır
- Radar, darbe gönderme-alma süresinden uzaklığı (r) hesaplar
- Doppler etkisiyle hız (v) de ölçülebilir
- (t_0) anında uzaklık (10,000m), hız (200m/s) çok doğru ölçülmüşse, örnekleme aralığı (\Delta t=5s) ise ve hızın sabit olduğu varsayılırsa bir sonraki konum (11,000m) olur
- (\Delta r = v \cdot \Delta t)
- (r_{t_1}=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 derecede hassas değildir; aynı anda birden fazla radar ölçüm yapsa bile birbirinden biraz farklı değerler üretebilir
- Bu değişim ölçüm gürültüsü olarak ifade edilir
- Yalnızca durum tahminini değil, bu tahminin ne kadar güvenilir olduğunu da hesaplamak gerekir
- Dinamik model de kusursuz değildir
- Uçağın sabit hızla hareket ettiği varsayılsa bile rüzgar gibi dış etkenler nedeniyle gerçek hareket farklı olabilir
- Bu tür öngörülemeyen etkiler süreç gürültüsüdür
- Kalman filtresi, mevcut durum tahminini, gelecekteki durum tahminini ve bunların her birine ilişkin belirsizliği birlikte sağlar
- Sistem ve gürültünün model varsayımlarına uyduğu koşullarda durum tahmini belirsizliğini en aza indiren optimal bir algoritmadır
Durum vektörü ve başlatma
- Örnekteki sistem durumu, uçağın uzaklığı (r) ve hızı (v) bileşenlerinden oluşur
[ \boldsymbol{x}= \begin{bmatrix} r\ v \end{bmatrix} ]
- İlk ölçüm değeri (t_0) anında şöyledir
[ \boldsymbol{z}_0= \begin{bmatrix} 10{,}000\ 200 \end{bmatrix} ]
- Ölçüm değerleri belirsizlik içerdiğinden, her ölçüme varyans biçiminde bir ölçüm belirsizliği eşlik eder
- Uzaklık ölçümü standart sapması: (4m)
- Hız ölçümü standart sapması: (0.5m/s)
- Varyans, standart sapmanın karesidir
[ \boldsymbol{R}_0= \begin{bmatrix} 16 & 0\ 0 & 0.25 \end{bmatrix} ]
- Bu örnekte uzaklık ve hız ölçüm hatalarının birbiriyle ilişkili olmadığı varsayıldığından, kovaryans matrisinin diyagonal dışı elemanları 0 alınır
- Başlatma adımında ölçüm değeri ile sistem durumu aynı fiziksel nicelikleri, yani (r) ve (v)'yi temsil ettiğinden ilk ölçüm ilk durum tahmini olarak kullanılabilir
[ \hat{\boldsymbol{x}}_{0,0}= \boldsymbol{z}_0= \begin{bmatrix} 10{,}000\ 200 \end{bmatrix} ]
- Bu yaklaşım yalnızca başlatma adımında kullanılabilir
Tahmin adımı: durum ve kovaryansın yayılımı
- Tahmin, mevcut durum ile durum geçiş matrisi (\boldsymbol{F}) kullanılarak bir sonraki andaki durumu hesaplar
- Sabit hız modelinde şu denklemler kullanılır
[ v_1=v_0=v ]
[ r_1=r_0+v_0\Delta t ]
- Matris biçimindeki durum 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şkeni
- (\boldsymbol{G}): giriş geçiş matrisi
- Bu basit örnekte giriş olmadığından (\boldsymbol{u}_n=0)
- (\Delta t=5s) olduğunda durum geçiş matrisi aşağıdaki gibidir ve tahmin sonucu (11,000m), (200m/s) olur
[ \boldsymbol{F}= \begin{bmatrix} 1 & 5\ 0 & 1 \end{bmatrix} ]
[ \hat{\boldsymbol{x}}_{1,0}
\begin{bmatrix} 11{,}000\ 200 \end{bmatrix} ]
- Kovaryans tahmini yalnızca (\boldsymbol{F}\boldsymbol{P}) ile değil, (\boldsymbol{F}\boldsymbol{P}\boldsymbol{F}^T) ile yapılır
[ \boldsymbol{P}_{n+1,n}
\boldsymbol{F} \boldsymbol{P}_{n,n} \boldsymbol{F}^T + \boldsymbol{Q} ]
- Süreç gürültüsü hariç tutulduğunda tahmin kovaryansı şöyledir
[ \boldsymbol{P}_{1,0}
\begin{bmatrix} 22.25 & 1.25\ 1.25 & 0.25 \end{bmatrix} ]
- Hız varyansı, sabit hız modeli nedeniyle (0.25) olarak kalır
- Uzaklık varyansı, hız belirsizliği zamanla uzaklık belirsizliğini büyüttüğü için (16)'dan (22.25)'e çıkar
Süreç gürültüsünün hesaba katılması
- Gerçek uçak hızı, rüzgar gibi öngörülemeyen dış etkenlerden etkilenebileceği için süreç gürültüsü (\boldsymbol{Q}) kovaryans tahminine eklenir
- Ö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) olur
- (\Delta t=5s) iken süreç gürültüsü matrisi şöyledir
[ \boldsymbol{Q}
\begin{bmatrix} 6.25 & 2.5\ 2.5 & 1 \end{bmatrix} ]
- Süreç gürültüsü eklendiğinde tahmin kovaryansı aşağıdaki gibi olur
[ \boldsymbol{P}_{1,0}
\begin{bmatrix} 28.5 & 3.75\ 3.75 & 1.25 \end{bmatrix} ]
Güncelleme adımı: tahmin ile ölçümün ağırlıklı birleşimi
- (t_1) anındaki ikinci ölçüm değeri şöyledir
[ \boldsymbol{z}_1= \begin{bmatrix} 11{,}020\ 202 \end{bmatrix} ]
- Bu ölçümde güçlü bir gürültü sıçraması nedeniyle sinyal-gürültü oranının düşük olduğu ve ilk ölçüme göre belirsizliğin daha yüksek olduğu varsayılır
- Uzaklık standart sapması: (6m)
- Hız standart sapması: (1.5m/s)
[ \boldsymbol{R}_1= \begin{bmatrix} 36 & 0\ 0 & 2.25 \end{bmatrix} ]
- Tahmin kovaryansı (\boldsymbol{P}_{1,0})'ın diyagonal elemanları, ölçüm kovaryansı (\boldsymbol{R}_1)'inkilerden küçüktür; yani tahmin tarafının belirsizliği daha düşüktür
- Kalman filtresi yalnızca tahmini ya da yalnızca ölçümü kullanmaz; belirsizliği daha düşük olana daha büyük ağırlık vererek ikisini birleştirir
- 1 boyutlu biçimdeki ağırlıklı ortalama şöyledir
[ \hat{x}_{1,1}
K_1 z_1 + (1-K_1)\hat{x}_{1,0} ]
- (\boldsymbol{K}), Kalman kazancıdır ve güncellenmiş tahminin belirsizliğini en aza indirecek şekilde ölçüm ile tahminin ağırlıklarını belirler
İnovasyon, gözlem matrisi ve Kalman kazancı
- Durum güncelleme denklemi, tahmin değerine bir düzeltme terimi eklenmiş biçimde de yazılabilir
[ \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}), inovasyon (innovation) ya da artık (residual) olarak adlandırılır ve yeni ölçümün getirdiği bilgiyi temsil eder
- (\boldsymbol{H}), gözlem matrisi ya da ölçüm matrisi olup durum değişkenlerini gerçekten ölçülen fiziksel niceliklere eşler
- Bu örnekte hem durum hem ölçüm uzaklık ve hız olduğundan (\boldsymbol{H}=\boldsymbol{I})
- Genel durumda, örneğin dijital termometrede olduğu gibi ölçüm ile durum farklı fiziksel alanlarda olabilir
- Çok değişkenli Kalman kazancı şöyledir
[ \boldsymbol{K}_n
\boldsymbol{P}{n,n-1} \boldsymbol{H}^T ( \boldsymbol{H} \boldsymbol{P}{n,n-1} \boldsymbol{H}^T + \boldsymbol{R}_n )^{-1} ]
- Örnekte hesaplanan Kalman kazancı aşağıdaki gibidir
[ \boldsymbol{K}_1= \begin{bmatrix} 0.4048 & 0.6377\ 0.0399 & 0.3144 \end{bmatrix} ]
- Matris tersini hesaplamak için MATLAB'da
inv(A)veya Python'danumpy.linalg.inv(A)kullanılabilir; ancak gerçek uygulamalarda açıkça ters almak yerineA\bya danumpy.linalg.solve(A, b)gibi lineer sistemi doğrudan çözmek genellikle daha iyidir
Güncelleme sonucu ve kovaryansın azalması
- Bu örnekte inovasyon şu şekildedir
[ \boldsymbol{z}1-\hat{\boldsymbol{x}}{1,0}
\begin{bmatrix} 20\ 2 \end{bmatrix} ]
- Kalman kazancıyla düzeltme terimi hesaplanırsa sonuç şöyledir
[ \boldsymbol{K}_1 \begin{bmatrix} 20\ 2 \end{bmatrix}
\begin{bmatrix} 9.37\ 1.43 \end{bmatrix} ]
- Güncellenmiş durum tahmini şöyledir
[ \hat{\boldsymbol{x}}_{1,1}
\begin{bmatrix} 11{,}009.37\ 201.43 \end{bmatrix} ]
- Çok değişkenli kovaryans güncellemesinde sayısal olarak daha kararlı olan Joseph formu yaygın biçimde 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 ]
- Basitleştirilmiş kovaryans güncelleme denklemi de literatürde sık 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, ancak bilgisayar uygulamalarında Joseph formu genel olarak daha sayısal kararlılık sağlar
- Örnekte basitleştirilmiş denklemle hesaplanan güncellenmiş kovaryans şöyledir
[ \boldsymbol{P}_{1,1}
\begin{bmatrix} 14.57 & 1.43\ 1.43 & 0.71 \end{bmatrix} ]
- Güncellenmiş kovaryansın diyagonal elemanları, tahmin kovaryansı ((28.5, 1.25)) ile ölçüm kovaryansı ((36, 2.25)) değerlerinden daha düşüktür
- Yeni bilgi, belirsizliği yüksek olsa bile tahmin belirsizliğini azaltır; teorik olarak yeni ölçüm göz ardı edilmemelidir
- Gerçek uygulamalarda güvenilir olmayan ölçümlerin reddedilmesi gerekebilir; aykırı değer işleme yöntemleri kitabın Outlier Treatment bölümünde ele alınır
Sonraki tahmin ve tekrar eden döngü
- Iteration 1'in tahmin adımı, başlangıç noktası güncellenmiş (\hat{\boldsymbol{x}}{1,1}) ve (\boldsymbol{P}{1,1}) olacak şekilde Iteration 0 ile aynıdır
- Durum tahmini sonucu şöyledir
[ \hat{\boldsymbol{x}}_{2,1}
\boldsymbol{F} \hat{\boldsymbol{x}}_{1,1}
\begin{bmatrix} 12{,}016.5\ 201.43 \end{bmatrix} ]
- Kovaryans tahmini sonucu şöyledir
[ \boldsymbol{P}_{2,1}
\begin{bmatrix} 52.86 & 7.47\ 7.47 & 1.71 \end{bmatrix} ]
- Yeni ölçüm olmadan zaman geçtikçe belirsizlik doğal olarak artar; bu yüzden tahmin adımında varyans yeniden büyür
- Hız belirsizliği, uzaklık belirsizliğini ek olarak artırır
- Bu nedenle uzaklık varyansı, hız varyansından daha hızlı büyür
- Örnek, Kalman filtresinin üç adımını gösterir
- Başlatma: başlangıçta bir kez yapılır
- Tahmin: dinamik modelle bir sonraki durum ve belirsizlik yayılır
- Güncelleme: yeni ölçüm ile tahmin Kalman kazancı kullanılarak birleştirilir
- Başlatmadan sonra Kalman filtresi sürekli tahmin-güncelleme döngüsü ile çalışır
1 yorum
Hacker News yorumları
Kalman filtresini tek başına öğrenmenin sırayı tersine çevirmek olduğunu, bu yüzden çevresindeki teorinin sağladığı büyük aydınlanmayı kaçırmanın kolay olduğunu hep söylerim
Doğru anlamak için sırasıyla en küçük kareler yöntemine (doğrusal regresyon), özyinelemeli en küçük kareler yöntemine ve bilgi filtresine (KF’nin başka bir formülasyonu) bakmak iyi olur
O zaman KF’nin, güncelleme adımının verimliliğini önceleyecek şekilde yeniden formüle edilmiş özyinelemeli en küçük kareler yönteminden ibaret olduğunu görürsünüz
Bu PDF kısa bir genel bakış sunuyor: http://ais.informatik.uni-freiburg.de/teaching/ws13/mapping/...
Yine de entelektüel merakım var; bu merakı koruyarak adım adım anlayışa ilerleyecek bir yola ihtiyacım var
The Six (Not So) Easy Pieces’ı yeniden okusam da anlamıyorum ama yine de değerli; Arnold’un kedisiyle oynarken de, sıkı bir bilimsel süreç olmadan, çıplak bir primat merakıyla normalde bağlam denen kapının ardında duran kavramı deneyimleyebiliyorsunuz
http://gerdbreitenbach.de/arnold_cat/cat.html
Tek boyutta, doğrusal tahmin X'1 = X0*a + b ile önsel dağılım elde edilir; mean(X'1) = mean(X0)*a + b, var(X'1) = var(X0)*a^2 olur; a ve b varsayılan dinamikleri temsil eder
Gauss’un sonsal dağılımı, önsel dağılım ile gözlemin hassasiyet ağırlıklı ortalaması olduğundan X1 = (1 - K)X'1 + YK ve K = (1/var(X'1))/(1/var(X'1) + 1/var(Y)) olur; Y ise Gauss gözlemidir
Bunu tekrarlarsanız Kalman filtresi elde edilir; çok boyutlu Gauss’un doğrusallığını biliyorsanız çok boyuta genellemek de sezgiseldir
Ancak çok boyutlu Gauss’un doğrusallığı ve Gauss sonsal dağılımının kendisi kolay konular olmayabilir
Bu konu ne zaman açılsa bu kaynak da beraberinde gelir; tersi de geçerli: https://github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Pyt...
Jupyter notebook kullanması da çok iyi
Olasılık dağılımları için bir sembolik hesaplama aracı hâlâ yok gibi görünüyor
Örneğin iki çok değişkenli Gauss olasılık yoğunluk fonksiyonunu çarpıp kovaryans matrisini elde eden ya da Kalman filtresinin tüm bileşenlerini (tahmin modeli ve gözlem süreci) tanımladığınızda gereken formülleri sympy’nin lambdify’ı gibi çıkaran bir araçtan söz ediyorum
Yine de Sympy’nin Kalman filtresi için gereken koşullu dağılımları, yani Bayesçi sonsal dağılımı işleyip işleyemediğini bilmiyorum
Her hâlükârda Sympy ile Kalman filtresiyle oynamak istiyorsanız ortalama ve varyansı ya da kovaryans matrisini doğrudan ele almak daha iyi
Referans: https://reference.wolfram.com/language/howto/WorkWithStatist...
Ayrıca: https://reference.wolfram.com/language/ref/MultinormalDistri...
https://www.squiggle-language.com/docs
Q ve R sabitse, ki genelde öyledir, kazanç hızla yakınsar ve Kalman filtresi tahmin adımı eklenmiş üstel filtreye neredeyse eşdeğer hâle gelir
Birçok kişi için bu açıklama çok daha anlaşılır ve gerçek kullanım biçimiyle de iyi örtüşür
Çünkü genellikle Q ve R elle ayarlanıp “iyi görününceye” kadar uydurulur ve sonra bir daha değiştirilmez
Üstelik Q ve R gibi birden fazla değeri ayarlamak yerine yalnızca tek bir kazancı elle ayarlamak yeterli olur
Sonuç makul görünene kadar sadece ayarlıyor muyuz? Öyleyse tamamen aşırı uyum olmayan durumlarda bile nasıl doğru çalıştığını anlamıyorum
Örneğin videoda bir kuşu takip ediyorsanız bir Q seçebilirsiniz; ama gürültü istatistikleri günün saatine göre değişebilir. Böyle bir durumda ne yapmalı?
İlgili yazı: Kalman filter from the ground up - https://news.ycombinator.com/item?id=37879715 - Ekim 2023, 150 yorum
Yukarıdaki başlığa koymak için en iyi yılın hangisi olduğunu da merak ediyorum
Kalman filtresi, daha genel bir konu olan David G. Luenberger’in Optimization by Vector Space Methods, John Wiley and Sons, Inc., New York, 1969 eserinde yer alıyor
Birden aklıma şu geldi. Yalnızca görgü tanığı ifadelerine dayanan olaylar da bir şekilde vektör olarak kodlanıp Kalman filtresi ile ele alınarak gözlemlerin kanıt değeri güçlendirilebilir mi?
Yalanları ve yanlışlıkları hep “hata” olarak ele almak gibi
Phoenix lights veya genel olarak UFO’lar, hayaletler, ölüme yakın deneyimler; daha gündelik olarak da tecavüz iddiaları gibi şeyleri düşünüyorum
En iyi kaynak neredeyse her zaman şudur: https://github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Pyt...
Python kullanmayanlar için bile harika; konunun genelini gerçekten iyi tarıyor
Bu konuyu öğrenirken papyonlu Michael van Biezem’in Kalman filtresi derslerini izleyen başka biri var mı?
https://www.youtube.com/watch?v=CaCcOwJPytQ&list=PLX2gX-ftPV...
Gerçekten bilmeniz gereken tek cümle şu: “Bu filtre adını Rudolf E. Kálmán’dan (19 Mayıs 1930-2 Temmuz 2016) almıştır. 1960’ta Kálmán, ayrık veri doğrusal filtreleme problemine özyinelemeli bir çözüm açıklayan ünlü makalesini yayımladı”