บทช่วยสอน Kalman Filter
(kalmanfilter.net)- Kalman Filter คืออัลกอริทึมที่ใช้ทั้งค่าที่วัดได้จากเซนเซอร์ซึ่งมีสัญญาณรบกวน และโมเดลเชิงพลวัตที่ไม่สมบูรณ์ เพื่อประมาณสถานะปัจจุบันและสถานะถัดไป รวมถึง ความไม่แน่นอน ของสถานะเหล่านั้น
- บทช่วยสอนนี้ใช้ตัวอย่างการติดตามเครื่องบินด้วยเรดาร์ โดยกำหนดระยะทาง (r) และความเร็ว (v) เป็นเวกเตอร์สถานะ แล้วไล่ดูเชิงตัวเลขว่าค่าพยากรณ์กับค่าที่วัดได้ถูกนำมารวมกันอย่างไร
- เมื่อใช้ค่าที่วัดได้เริ่มต้น (10,000m), (200m/s) และช่วงเวลาสุ่มตัวอย่าง (5s) โมเดลความเร็วคงที่จะพยากรณ์ตำแหน่งถัดไปเป็น (11,000m) โดยสัญญาณรบกวนจากการวัด (R) และ สัญญาณรบกวนของกระบวนการ (Q) จะถูกสะท้อนในโควาเรียนซ์
- ค่าที่วัดได้ครั้งที่สอง (11,020m), (202m/s) มีความไม่แน่นอนมากกว่า แต่ Kalman Gain (K) จะถ่วงน้ำหนักรวมค่าพยากรณ์กับค่าที่วัดได้ แล้วคำนวณสถานะที่อัปเดตเป็น (11,009.37m), (201.43m/s)
- หลังการเริ่มต้น ระบบจะทำซ้ำ ลูปพยากรณ์-อัปเดต และในการใช้งานจริงควรพิจารณาสมการอัปเดตโควาเรียนซ์ที่เสถียร เช่น Joseph form รวมถึงการจัดการค่าที่วัดได้ผิดปกติด้วย
ปัญหาการประมาณค่าที่ Kalman Filter แก้ไข
- Kalman Filter คืออัลกอริทึมสำหรับประมาณและพยากรณ์สถานะของระบบในสภาพแวดล้อมที่มีความไม่แน่นอน
- ข้อมูลเซนเซอร์ที่มีสัญญาณรบกวนจากการวัด
- ปัจจัยภายนอกที่ไม่ทราบค่า
- ความแตกต่างระหว่างโมเดลเชิงพลวัตกับการเคลื่อนที่จริง
- ใช้ในงานติดตามวัตถุ, นำทาง, หุ่นยนต์, การควบคุม, วิเคราะห์ตลาดการเงิน, พยากรณ์อากาศ เป็นต้น
- หากนำไปใช้กับการประมาณเส้นทางของเมาส์คอมพิวเตอร์ จะช่วยลดสัญญาณรบกวนและชดเชยอาการมือสั่น ทำให้ได้เส้นทางการเคลื่อนที่ที่เสถียรมากขึ้น
- บทช่วยสอนนี้ออกแบบให้เข้าใจ Kalman Filter ผ่าน ตัวอย่างเชิงตัวเลข และคำอธิบายเชิงสัญชาตญาณ มากกว่าคำอธิบายคณิตศาสตร์ที่ซับซ้อน
- รวมถึงตัวอย่างสถานการณ์ที่ออกแบบไม่ดีจน Kalman Filter ติดตามวัตถุได้ไม่ถูกต้อง และวิธีแก้ไขด้วย
เส้นทางการเรียนรู้
- โปรเจกต์นี้จัดไว้ให้เรียนรู้ Kalman Filter ได้ 3 ระดับความลึก
- ภาพรวมหน้าเดียว: อธิบายแนวคิดหลักและสมการจำเป็นโดยไม่ไล่พิสูจน์ โดยสมมติว่าผู้อ่านมีความรู้พื้นฐานด้านสถิติและพีชคณิตเชิงเส้น
- บทช่วยสอนบนเว็บฟรีที่อิงตัวอย่าง: สร้างสัญชาตญาณจากตัวอย่างเชิงตัวเลข และค่อย ๆ ครอบคลุมถึงการไล่สมการ Kalman Filter พร้อมระบุว่าไม่จำเป็นต้องมีความรู้ล่วงหน้า
- Kalman Filter from the Ground Up: รวมตัวอย่างเชิงตัวเลขพร้อมเฉลยครบ 14 ตัวอย่าง, กราฟและตารางประสิทธิภาพ, Extended Kalman Filter, Unscented Kalman Filter, การหลอมรวมเซนเซอร์ และแนวทางการนำไปใช้งาน
ความต้องการด้านการพยากรณ์จากตัวอย่างการติดตามด้วยเรดาร์
- ในเรดาร์ที่ติดตามเครื่องบิน เครื่องบินคือ ระบบ และตำแหน่งที่ต้องประมาณคือ สถานะของระบบ
- เรดาร์จะบังคับลำแสงแคบไปยังทิศทางของเครื่องบิน ดังนั้นเพื่อกำหนดว่าจะส่งลำแสงถัดไปไปที่ใด จึงต้องพยากรณ์ตำแหน่งในอนาคต
- หากพยากรณ์ล้มเหลว ลำแสงอาจชี้ผิดทิศและสูญเสียการติดตามได้
- จำเป็นต้องมี โมเดลเชิงพลวัต ที่แสดงการเคลื่อนที่ของระบบตามเวลา
- ในตัวอย่าง 1 มิติที่ทำให้ง่ายขึ้น สมมติว่าเครื่องบินเคลื่อนที่เป็นเส้นตรงเข้าหาหรือออกห่างจากเรดาร์
- เรดาร์คำนวณระยะทาง (r) จากเวลารับส่งพัลส์
- และสามารถวัดความเร็ว (v) ได้ด้วยเอฟเฟกต์ดอปเพลอร์
- หากที่เวลา (t_0) วัดระยะทาง (10,000m) และความเร็ว (200m/s) ได้อย่างแม่นยำมาก ช่วงเวลาสุ่มตัวอย่างคือ (\Delta t=5s) และสมมติว่าความเร็วคงที่ ตำแหน่งถัดไปจะเป็น (11,000m)
- (\Delta r = v \cdot \Delta t)
- (r_{t_1}=10,000+200\cdot5=11,000m)
สัญญาณรบกวนจากการวัดและสัญญาณรบกวนของกระบวนการ
- การวัดด้วยเรดาร์จริงไม่ได้แม่นยำสมบูรณ์ แม้เรดาร์หลายตัววัดในเวลาเดียวกัน ก็อาจให้ค่าต่างกันเล็กน้อย
- ความแปรผันนี้แสดงเป็น สัญญาณรบกวนจากการวัด
- ต้องคำนวณไม่เพียงค่าประมาณสถานะ แต่ยังรวมถึงว่าค่าประมาณนั้นน่าเชื่อถือเพียงใด
- โมเดลเชิงพลวัตก็ไม่สมบูรณ์เช่นกัน
- แม้สมมติว่าเครื่องบินเคลื่อนที่ด้วยความเร็วคงที่ ปัจจัยภายนอกอย่างลมก็อาจทำให้การเคลื่อนที่จริงต่างออกไป
- อิทธิพลที่คาดเดาไม่ได้เหล่านี้คือ สัญญาณรบกวนของกระบวนการ
- Kalman Filter ให้ทั้งค่าประมาณสถานะปัจจุบัน, การพยากรณ์สถานะในอนาคต และ ความไม่แน่นอน ของแต่ละค่าไปพร้อมกัน
- ภายใต้เงื่อนไขที่ระบบและสัญญาณรบกวนเป็นไปตามสมมติฐานของโมเดล มันเป็นอัลกอริทึมที่เหมาะที่สุดในการลดความไม่แน่นอนของการประมาณสถานะ
เวกเตอร์สถานะและการเริ่มต้น
- สถานะของระบบในตัวอย่างประกอบด้วยระยะทาง (r) และความเร็ว (v) ของเครื่องบิน
[ \boldsymbol{x}= \begin{bmatrix} r\ v \end{bmatrix} ]
- ค่าที่วัดได้ครั้งแรกที่ (t_0) เป็นดังนี้
[ \boldsymbol{z}_0= \begin{bmatrix} 10{,}000\ 200 \end{bmatrix} ]
- เนื่องจากค่าที่วัดได้มีความไม่แน่นอน การวัดแต่ละครั้งจึงมี ความไม่แน่นอนของการวัด ในรูปความแปรปรวนกำกับอยู่
- ส่วนเบี่ยงเบนมาตรฐานของการวัดระยะทาง: (4m)
- ส่วนเบี่ยงเบนมาตรฐานของการวัดความเร็ว: (0.5m/s)
- ความแปรปรวนคือกำลังสองของส่วนเบี่ยงเบนมาตรฐาน
[ \boldsymbol{R}_0= \begin{bmatrix} 16 & 0\ 0 & 0.25 \end{bmatrix} ]
- ในตัวอย่างนี้ สมมติว่าข้อผิดพลาดในการวัดระยะทางและความเร็วไม่เกี่ยวข้องกัน จึงกำหนดให้องค์ประกอบนอกแนวทแยงของเมทริกซ์โควาเรียนซ์เป็น 0
- ในขั้นตอนเริ่มต้น เนื่องจากค่าที่วัดได้และสถานะของระบบแสดงปริมาณทางกายภาพเดียวกันคือ (r), (v) จึงสามารถใช้ค่าที่วัดได้ครั้งแรกเป็นค่าประมาณสถานะเริ่มต้นได้
[ \hat{\boldsymbol{x}}_{0,0}= \boldsymbol{z}_0= \begin{bmatrix} 10{,}000\ 200 \end{bmatrix} ]
- วิธีนี้ใช้ได้ เฉพาะในขั้นตอนเริ่มต้นเท่านั้น
ขั้นตอนพยากรณ์: การส่งต่อสถานะและโควาเรียนซ์
- การพยากรณ์ใช้สถานะปัจจุบันและ เมทริกซ์การเปลี่ยนสถานะ (\boldsymbol{F}) เพื่อคำนวณสถานะในเวลาถัดไป
- ในโมเดลความเร็วคงที่ ใช้สมการต่อไปนี้
[ v_1=v_0=v ]
[ r_1=r_0+v_0\Delta t ]
- สมการพยากรณ์สถานะในรูปเมทริกซ์เป็นดังนี้
[ \hat{\boldsymbol{x}}_{n+1,n}
\boldsymbol{F} \hat{\boldsymbol{x}}_{n,n} + \boldsymbol{G}\boldsymbol{u}_n ]
- (\boldsymbol{u}_n): ตัวแปรอินพุต
- (\boldsymbol{G}): เมทริกซ์การเปลี่ยนอินพุต
- ในตัวอย่างง่ายนี้ไม่มีอินพุต ดังนั้น (\boldsymbol{u}_n=0)
- เมื่อ (\Delta t=5s) เมทริกซ์การเปลี่ยนสถานะเป็นดังนี้ และผลพยากรณ์คือ (11,000m), (200m/s)
[ \boldsymbol{F}= \begin{bmatrix} 1 & 5\ 0 & 1 \end{bmatrix} ]
[ \hat{\boldsymbol{x}}_{1,0}
\begin{bmatrix} 11{,}000\ 200 \end{bmatrix} ]
- การพยากรณ์โควาเรียนซ์ไม่ได้ใช้เพียง (\boldsymbol{F}\boldsymbol{P}) แต่ใช้ (\boldsymbol{F}\boldsymbol{P}\boldsymbol{F}^T)
[ \boldsymbol{P}_{n+1,n}
\boldsymbol{F} \boldsymbol{P}_{n,n} \boldsymbol{F}^T + \boldsymbol{Q} ]
- หากไม่รวมสัญญาณรบกวนของกระบวนการ โควาเรียนซ์ที่พยากรณ์ได้เป็นดังนี้
[ \boldsymbol{P}_{1,0}
\begin{bmatrix} 22.25 & 1.25\ 1.25 & 0.25 \end{bmatrix} ]
- ความแปรปรวนของความเร็วคงอยู่ที่ (0.25) เพราะใช้โมเดลความเร็วคงที่
- ความแปรปรวนของระยะทางเพิ่มจาก (16) เป็น (22.25) เพราะความไม่แน่นอนของความเร็วทำให้ความไม่แน่นอนของระยะทางเพิ่มขึ้นตามเวลา
การสะท้อนสัญญาณรบกวนของกระบวนการ
- เนื่องจากความเร็วจริงของเครื่องบินอาจได้รับอิทธิพลจากปัจจัยภายนอกที่คาดเดาไม่ได้ เช่น ลม จึงเพิ่ม สัญญาณรบกวนของกระบวนการ (\boldsymbol{Q}) เข้าไปในการพยากรณ์โควาเรียนซ์
- ในตัวอย่างนี้ สมมติว่าส่วนเบี่ยงเบนมาตรฐานของความเร่งแบบสุ่มคือ (\sigma_a=0.2m/s^2)
- ความแปรปรวนคือ (\sigma_a^2=0.04m^2/s^4)
- เมื่อ (\Delta t=5s) เมทริกซ์สัญญาณรบกวนของกระบวนการเป็นดังนี้
[ \boldsymbol{Q}
\begin{bmatrix} 6.25 & 2.5\ 2.5 & 1 \end{bmatrix} ]
- โควาเรียนซ์ที่พยากรณ์ได้หลังเพิ่มสัญญาณรบกวนของกระบวนการเป็นดังนี้
[ \boldsymbol{P}_{1,0}
\begin{bmatrix} 28.5 & 3.75\ 3.75 & 1.25 \end{bmatrix} ]
ขั้นตอนอัปเดต: การรวมค่าพยากรณ์กับค่าที่วัดได้แบบถ่วงน้ำหนัก
- ที่ (t_1) ค่าที่วัดได้ครั้งที่สองเป็นดังนี้
[ \boldsymbol{z}_1= \begin{bmatrix} 11{,}020\ 202 \end{bmatrix} ]
- สมมติว่าการวัดนี้มีสัดส่วนสัญญาณต่อสัญญาณรบกวนต่ำลงจากสัญญาณรบกวนที่พุ่งสูง จึงมีความไม่แน่นอนมากกว่าการวัดครั้งแรก
- ส่วนเบี่ยงเบนมาตรฐานของระยะทาง: (6m)
- ส่วนเบี่ยงเบนมาตรฐานของความเร็ว: (1.5m/s)
[ \boldsymbol{R}_1= \begin{bmatrix} 36 & 0\ 0 & 2.25 \end{bmatrix} ]
- องค์ประกอบแนวทแยงของโควาเรียนซ์ที่พยากรณ์ (\boldsymbol{P}_{1,0}) มีค่าน้อยกว่าโควาเรียนซ์ของการวัด (\boldsymbol{R}_1) ดังนั้นฝั่งพยากรณ์จึงมีความไม่แน่นอนต่ำกว่า
- Kalman Filter ไม่ได้ใช้เพียงค่าพยากรณ์หรือค่าที่วัดได้อย่างใดอย่างหนึ่ง แต่จะรวมกันโดยให้น้ำหนักมากกว่ากับ ฝั่งที่มีความไม่แน่นอนต่ำกว่า
- ค่าเฉลี่ยถ่วงน้ำหนักในรูป 1 มิติเป็นดังนี้
[ \hat{x}_{1,1}
K_1 z_1 + (1-K_1)\hat{x}_{1,0} ]
- (\boldsymbol{K}) คือ Kalman Gain ซึ่งกำหนดน้ำหนักของการวัดและการพยากรณ์เพื่อทำให้ความไม่แน่นอนของค่าประมาณที่อัปเดตแล้วต่ำที่สุด
Innovation, เมทริกซ์สังเกตการณ์ และ Kalman Gain
- สมการอัปเดตสถานะสามารถเขียนในรูปที่เพิ่มพจน์แก้ไขเข้าไปในค่าพยากรณ์ได้
[ \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 หรือ residual ซึ่งแสดงข้อมูลที่การวัดใหม่ให้มา
- (\boldsymbol{H}) คือ เมทริกซ์สังเกตการณ์ หรือเมทริกซ์การวัด ซึ่งแมปตัวแปรสถานะไปเป็นปริมาณทางกายภาพที่วัดได้จริง
- ในตัวอย่างนี้ ทั้งสถานะและการวัดเป็นระยะทางและความเร็ว ดังนั้น (\boldsymbol{H}=\boldsymbol{I})
- โดยทั่วไป ค่าที่วัดได้กับสถานะอาจอยู่คนละโดเมนทางกายภาพกัน เช่น เทอร์โมมิเตอร์ดิจิทัล
- Kalman Gain แบบหลายตัวแปรเป็นดังนี้
[ \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} ]
- Kalman Gain ที่คำนวณได้ในตัวอย่างเป็นดังนี้
[ \boldsymbol{K}_1= \begin{bmatrix} 0.4048 & 0.6377\ 0.0399 & 0.3144 \end{bmatrix} ]
- การคำนวณเมทริกซ์ผกผันทำได้ด้วย
inv(A)ใน MATLAB หรือnumpy.linalg.inv(A)ใน Python แต่ในการใช้งานจริง โดยทั่วไปวิธีแก้ระบบเชิงเส้นโดยตรง เช่นA\bหรือnumpy.linalg.solve(A, b)จะดีกว่าการใช้เมทริกซ์ผกผันแบบชัดเจน
ผลลัพธ์การอัปเดตและการลดลงของโควาเรียนซ์
- innovation ในตัวอย่างนี้เป็นดังนี้
[ \boldsymbol{z}1-\hat{\boldsymbol{x}}{1,0}
\begin{bmatrix} 20\ 2 \end{bmatrix} ]
- เมื่อคำนวณพจน์แก้ไขด้วย Kalman Gain ได้ดังนี้
[ \boldsymbol{K}_1 \begin{bmatrix} 20\ 2 \end{bmatrix}
\begin{bmatrix} 9.37\ 1.43 \end{bmatrix} ]
- ค่าประมาณสถานะที่อัปเดตแล้วเป็นดังนี้
[ \hat{\boldsymbol{x}}_{1,1}
\begin{bmatrix} 11{,}009.37\ 201.43 \end{bmatrix} ]
- ในการอัปเดตโควาเรียนซ์แบบหลายตัวแปร มักใช้ Joseph form ซึ่งเสถียรเชิงตัวเลข
[ \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 ]
- สมการอัปเดตโควาเรียนซ์แบบทำให้ง่ายก็พบได้บ่อยในเอกสารเช่นกัน
[ \boldsymbol{P}_{n,n}
(\boldsymbol{I}-\boldsymbol{K}n\boldsymbol{H}) \boldsymbol{P}{n,n-1} ]
- ในการคำนวณแบบแม่นยำ ทั้งสองรูปให้ผลลัพธ์เดียวกัน แต่ในการใช้งานบนคอมพิวเตอร์ Joseph form โดยทั่วไปมีเสถียรภาพเชิงตัวเลขมากกว่า
- โควาเรียนซ์ที่อัปเดตแล้วในตัวอย่าง ซึ่งคำนวณด้วยสมการแบบทำให้ง่าย เป็นดังนี้
[ \boldsymbol{P}_{1,1}
\begin{bmatrix} 14.57 & 1.43\ 1.43 & 0.71 \end{bmatrix} ]
- องค์ประกอบแนวทแยงของโควาเรียนซ์ที่อัปเดตแล้วต่ำกว่าโควาเรียนซ์ที่พยากรณ์ ((28.5, 1.25)) และโควาเรียนซ์ของการวัด ((36, 2.25))
- ข้อมูลใหม่ช่วยลดความไม่แน่นอนของการประมาณ แม้ข้อมูลนั้นเองจะมีความไม่แน่นอนสูง และในทางทฤษฎีไม่ควรละเลยการวัดใหม่
- ในการใช้งานจริง อาจมีกรณีที่ต้องปฏิเสธค่าที่วัดได้ซึ่งไม่น่าเชื่อถือ และวิธีจัดการค่าผิดปกติครอบคลุมอยู่ในบท Outlier Treatment ของหนังสือ
การพยากรณ์ถัดไปและลูปที่ทำซ้ำ
- ขั้นตอนพยากรณ์ของ Iteration 1 เหมือนกับ Iteration 0 แต่จุดเริ่มต้นเปลี่ยนเป็น (\hat{\boldsymbol{x}}{1,1}) และ (\boldsymbol{P}{1,1}) ที่อัปเดตแล้ว
- ผลลัพธ์การพยากรณ์สถานะเป็นดังนี้
[ \hat{\boldsymbol{x}}_{2,1}
\boldsymbol{F} \hat{\boldsymbol{x}}_{1,1}
\begin{bmatrix} 12{,}016.5\ 201.43 \end{bmatrix} ]
- ผลลัพธ์การพยากรณ์โควาเรียนซ์เป็นดังนี้
[ \boldsymbol{P}_{2,1}
\begin{bmatrix} 52.86 & 7.47\ 7.47 & 1.71 \end{bmatrix} ]
- เมื่อเวลาผ่านไปโดยไม่มีการวัดใหม่ ความไม่แน่นอนจะเพิ่มขึ้นตามธรรมชาติ ดังนั้นความแปรปรวนจึงเพิ่มขึ้นอีกในขั้นตอนพยากรณ์
- ความไม่แน่นอนของความเร็วทำให้ความไม่แน่นอนของระยะทางเพิ่มมากขึ้น
- ดังนั้นความแปรปรวนของระยะทางจึงเพิ่มเร็วกว่าความแปรปรวนของความเร็ว
- ตัวอย่างนี้แสดง 3 ขั้นตอนของ Kalman Filter
- การเริ่มต้น: ทำครั้งเดียวตอนเริ่ม
- การพยากรณ์: ส่งต่อสถานะถัดไปและความไม่แน่นอนด้วยโมเดลเชิงพลวัต
- การอัปเดต: รวมการวัดใหม่กับค่าพยากรณ์ด้วย Kalman Gain
- หลังการเริ่มต้น Kalman Filter จะทำงานต่อเนื่องในรูป ลูปพยากรณ์-อัปเดต
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ผมมักพูดเสมอว่า ถ้าเรียน Kalman filter แบบแยกเดี่ยว ๆ ลำดับจะกลับหัวกลับหาง และมักพลาดความเข้าใจครั้งใหญ่ที่ทฤษฎีรอบ ๆ ช่วยเปิดให้เห็น
ถ้าอยากเข้าใจให้ถูก ควรไล่ดู least squares (linear regression), recursive least squares และ information filter (อีก formalization หนึ่งของ KF) ตามลำดับ
แล้วจะเห็นว่า KF ก็เป็นเพียง recursive least squares ที่ถูก reformulate เพื่อให้ประสิทธิภาพของขั้นตอนการอัปเดตมาก่อน
PDF นี้ให้ภาพรวมแบบกระชับ: http://ais.informatik.uni-freiburg.de/teaching/ws13/mapping/...
ถึงอย่างนั้นก็ยังมีความใคร่รู้ทางปัญญาอยู่ จึงต้องการเส้นทางที่ช่วยรักษาความอยากรู้อยากเห็นไว้ พร้อมค่อย ๆ เดินหน้าไปสู่ความเข้าใจ
ต่อให้อ่าน The Six (Not So) Easy Pieces ซ้ำก็ยังไม่เข้าใจ แต่ก็ยังมีคุณค่าอยู่ และการลองเล่นกับแมวของ Arnold ก็ทำให้ได้สัมผัสแนวคิดที่เดิมอยู่หลังประตูชื่อ “บริบท” ด้วยความอยากรู้อยากเห็นแบบลิงไร้เครื่องมือ โดยไม่ต้องมีขั้นตอนทางวิทยาศาสตร์ที่เคร่งครัด
http://gerdbreitenbach.de/arnold_cat/cat.html
ในมิติเดียว จากการพยากรณ์เชิงเส้น X'1 = X0*a + b จะได้ prior distribution โดย mean(X'1) = mean(X0)*a + b, var(X'1) = var(X0)*a^2 และ a กับ b แทน dynamics ที่สมมติไว้
posterior distribution ของ Gaussian คือค่าเฉลี่ยถ่วงน้ำหนักด้วย precision ระหว่าง prior distribution กับค่าที่สังเกตได้ ดังนั้น X1 = (1 - K)X'1 + YK และ K = (1/var(X'1))/(1/var(X'1) + 1/var(Y)) โดย Y คือค่าการสังเกตแบบ Gaussian
ทำซ้ำแบบนี้ก็จะกลายเป็น Kalman filter และถ้าเข้าใจความเป็นเชิงเส้นของ Gaussian หลายมิติ การ generalize ไปหลายมิติก็จะเป็นไปอย่างเป็นสัญชาตญาณ
แต่ความเป็นเชิงเส้นของ Gaussian หลายมิติและ posterior distribution ของ Gaussian เองอาจไม่ใช่เรื่องง่าย
ทุกครั้งที่หัวข้อนี้โผล่มา แหล่งข้อมูลนี้ก็มักจะถูกยกมาคู่กัน และกลับกันก็เหมือนกัน: https://github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Pyt...
การใช้ Jupyter Notebook ก็ยอดเยี่ยมมาก
ดูเหมือนว่ายังไม่มี เครื่องมือคำนวณเชิงสัญลักษณ์ สำหรับ probability distribution
เช่น เครื่องมือที่คูณ probability density function ของ multivariate Gaussian สองตัวแล้วได้ covariance matrix หรือเมื่อกำหนดองค์ประกอบทั้งหมดของ Kalman filter (โมเดลพยากรณ์และกระบวนการสังเกต) แล้วดึงสูตรที่จำเป็นออกมาได้แบบ lambdify ของ sympy
แต่ไม่แน่ใจว่า Sympy จัดการ conditional distribution ที่ Kalman filter ต้องใช้ หรือก็คือ Bayesian posterior distribution ได้หรือไม่
ไม่ว่าอย่างไร ถ้าอยากลองเล่น Kalman filter ด้วย Sympy การจัดการค่า mean และ variance หรือ covariance matrix โดยตรงน่าจะดีกว่า
ดู: https://reference.wolfram.com/language/howto/WorkWithStatist...
และ: https://reference.wolfram.com/language/ref/MultinormalDistri...
https://www.squiggle-language.com/docs
ถ้า Q และ R เป็นค่าคงที่ ซึ่งโดยปกติก็เป็นแบบนั้น gain จะลู่เข้าอย่างรวดเร็ว ทำให้ Kalman filter แทบจะเหมือน exponential filter ที่มีขั้นตอนพยากรณ์ต่อท้าย
สำหรับหลายคน คำอธิบายนี้เข้าใจง่ายกว่ามาก และก็เข้ากับวิธีใช้งานจริงด้วย
เพราะปกติเราจะปรับ Q และ R ด้วยมือจน “ดูโอเค” แล้วก็ไม่เปลี่ยนอีก
อีกอย่าง แทนที่จะต้องปรับหลายค่าอย่าง Q และ R ก็ปรับด้วยมือแค่ gain ค่าเดียวพอ
แค่ปรับไปเรื่อย ๆ จนผลลัพธ์ดูสมเหตุสมผลงั้นหรือ? ถ้าอย่างนั้นผมไม่เข้าใจว่ามันทำงานได้ถูกต้องอย่างไร แม้ในกรณีที่ไม่ได้ overfit อย่างสมบูรณ์
เช่น ถ้ากำลังติดตามนกในวิดีโอ เราอาจเลือก Q บางค่าได้ แต่สถิติของ noise อาจเปลี่ยนไปตามช่วงเวลา แบบนั้นควรทำอย่างไร?
บทความที่เกี่ยวข้อง: Kalman filter from the ground up - https://news.ycombinator.com/item?id=37879715 - ตุลาคม 2023, 150 ความคิดเห็น
ผมก็สงสัยเหมือนกันว่าปีไหนเหมาะที่สุดที่จะใส่ไว้ในชื่อนั้น
Kalman filter อยู่ในหัวข้อที่กว้างกว่าในหนังสือ Optimization by Vector Space Methods ของ David G. Luenberger, John Wiley and Sons, Inc., New York, 1969
จู่ ๆ ก็คิดขึ้นมาว่า เหตุการณ์ที่มีแต่คำให้การของพยาน สามารถ encode เป็นเวกเตอร์ด้วยวิธีใดวิธีหนึ่ง แล้วจัดการด้วย Kalman filter เพื่อเพิ่มค่าน้ำหนักเชิงหลักฐานของการสังเกตได้ไหม?
เป็นวิธีที่ถือว่าทั้งการโกหกและความไม่แม่นยำเป็น “error”
ผมนึกถึง Phoenix lights หรือ UFO โดยรวม ผี ประสบการณ์เฉียดตาย และในเรื่องที่พบได้บ่อยกว่านั้น เช่น ข้อกล่าวหาเรื่องข่มขืน
แหล่งข้อมูลที่ดีที่สุดแทบจะเป็นอันนี้เสมอ: https://github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Pyt...
ยอดเยี่ยมแม้สำหรับคนที่ไม่ได้ใช้ Python และกวาดภาพรวมได้ดีจริง ๆ
มีใครอีกไหมที่ตอนเรียนหัวข้อนี้ได้ดูคลาส Kalman filter ของ Michael van Biezem คนที่ผูกโบว์ไท?
https://www.youtube.com/watch?v=CaCcOwJPytQ&list=PLX2gX-ftPV...
ประโยคเดียวที่ควรรู้จริง ๆ คือ: “filter นี้ตั้งชื่อตาม Rudolf E. Kálmán (19 พฤษภาคม 1930–2 กรกฎาคม 2016) ในปี 1960 Kálmán ตีพิมพ์เปเปอร์ชื่อดังที่อธิบายคำตอบแบบ recursive สำหรับปัญหา linear filtering ของข้อมูลแบบไม่ต่อเนื่อง”