Lecture 12 — Bayes Filter

Chương C** · xương sống xác suất: hai phương trình = một vòng lặp

Lecture 12 — Bayes Filter

Chương C · xương sống xác suất: hai phương trình = một vòng lặp


Khung 6 câu hỏi

# Câu hỏi Trả lời ngắn
1 Tại sao cần? Cần ngôn ngữ xác suất chính xác cho predict–update (vượt set-membership Lec 11).
2 So với cái khác? Vs KF/PF: chúng là xấp xỉ của Bayes filter. Vs RL full-state: đây đặt nền POMDP/belief.
3 Giải quyết gì & thế nào? Predict tích phân motion model; update nhân likelihood + chuẩn hóa \(\eta\).
4 Kết quả ra sao? \(bel(x_t)\) — đầu vào estimator / recurrent policy.
5 Nên dùng khi nào? Mọi bài estimation; thiết kế sensor/motion model; học trước KF.
6 Không nên khi nào? Đừng quên chuẩn hóa \(\eta\); đừng dùng likelihood cực nhọn với cảm biến outlier.

🖼️ Hình nhanh: hai phương trình Bayes = vòng lặp kín
┌──────────────────────────────┐ │ │ bel(x_{t-1}) ─► PREDICT ─► bel̄(x_t) ─► UPDATE ─► bel(x_t) ∫ p(x|x',u)·bel η·p(z|x)·bel̄ motion model sensor model │ │ └────────── t ← t+1 ───────────┘

🇻🇳 Chuyện thật (sân B): Bay trong phố đặc như người hỏi đường: odometry đoán “vừa đi khoảng 20 m về đông” (predict), rồi GPS/lidar/camera chỉnh lại cho khớp đo (update).
Không nhảy cóc sang một kết luận duy nhất — mỗi vòng nhân likelihood với prior rồi chuẩn hóa \(\eta\).
Multipath làm GPS “nói dối nhẹ”: sensor model kém nhọn thì posterior không được tự tin giả.
Chốt: Bayes filter = vòng predict–update; posterior ∝ \(p(z\mid x)\cdot\overline{bel}(x)\). ../00C.

Hình minh họa (seminar-ready)

Hình gốc hoặc minh họa cho ebook — không cắt từ slide Princeton. Dùng Present: bật Slide · F toàn màn.

Hai nhịp Bayes: predict rồi update.
Hai nhịp Bayes: predict rồi update.HiếuTC · gốc

0. Mục tiêu học

  1. Viết và giải thích được hai phương trình Bayes filter.
  2. Phân biệt motion modelsensor model.
  3. Hiểu vai trò hằng số chuẩn hóa \(\eta\).
  4. Nhớ câu: mọi KF/EKF/PF chỉ là cách xấp xỉ hai phép toán này.

1. Trực giác

Bayes nói: niềm tin mới tỷ lệ với (độ khớp của phép đo) nhân với (niềm tin trước đó).

Ví dụ tìm remote: bạn nghĩ “hay để ở sofa”. Nhìn sofa không thấy → giảm tin sofa,
tăng tin bàn/kệ. Mỗi quan sát chỉnh lại phân phối — không nhảy cóc sang một kết luận duy nhất.

Với UAV: “GPS nói gần tòa A” × “odometry bảo vừa bay 20 m về đông” → posterior pose.
Gió / multipath chỉnh lại mức tin của từng nguồn qua model \(Q,R\) (Lec 13).


2. Cốt lõi + sơ đồ

2.1. Hai phương trình

Predict (Chapman–Kolmogorov):
\[ \overline{bel}(x_t) = \int p(x_t \mid x_{t-1}, u_t)\, bel(x_{t-1})\, dx_{t-1} \]

Update (Bayes):
\[ bel(x_t) = \eta\, p(z_t \mid x_t)\, \overline{bel}(x_t) \]

Ký hiệu Tên Vai trò
\(p(x_t\mid x_{t-1},u_t)\) Motion model State tiến hóa thế nào khi có \(u_t\) (+ nhiễu)
\(p(z_t\mid x_t)\) Sensor model / likelihood Nếu state là \(x_t\) thì xác suất thấy \(z_t\)
\(\eta\) Chuẩn hóa Để \(bel\) tổng/tích phân = 1
\(\overline{bel}\) Prior tại \(t\) Sau predict, trước đo

2.2. Đọc công thức như pipeline

bel(x_{t-1})
    │  nhân motion model p(x_t | x_{t-1}, u_t), rồi tích phân
    ▼
bel̄(x_t)          ← prior belief tại t   (còn gọi bel⁻)
    │  nhân likelihood p(z_t | x_t), rồi × η
    ▼
bel(x_t)           ← posterior belief tại t

2.3. Điểm then chốt

Kalman, EKF, UKF, Particle Filter… chỉ là các cách xấp xỉ hai tích phân/phép nhân trên khi không gian liên tục và mô hình phức tạp.

         Bayes filter (đúng, thường không tính nổi)
                    │
        ┌───────────┼───────────┐
        ▼           ▼           ▼
       KF/EKF      UKF          PF
     (1 Gauss)  (sigma pts)  (đám hạt)

3. Demo — Bayes rời rạc 3 ô

"""
3 ô A,B,C. Prior đều.
Motion nghiêng sang phải + đo kiểu 'gần tường' (A,C khớp mạnh).
"""
import numpy as np

bel = np.array([1 / 3, 1 / 3, 1 / 3])
print("Prior     ", np.round(bel, 3))

# T[i,j] = P(đến i | từ j); đơn giản hóa biên
T = np.array([[0.2, 0.0, 0.0],
              [0.8, 0.2, 0.0],
              [0.0, 0.8, 1.0]])
bel_bar = T @ bel                       # PREDICT
print("Predict   ", np.round(bel_bar, 3))

lik = np.array([0.9, 0.1, 0.9])          # A,C ~ tường; B kém khớp
bel = lik * bel_bar                     # UPDATE (chưa chuẩn hóa)
bel = bel / bel.sum()                   # η
print("Posterior ", np.round(bel, 3))

# Thêm 2 chu kỳ cùng motion + cùng kiểu đo
for k in range(2):
    bel_bar = T @ bel
    bel = lik * bel_bar
    bel /= bel.sum()
    print(f"Sau vòng {k+2}", np.round(bel, 3))

🧪 Kỳ vọng demo: sau 1 chu kỳ tin dồn về A/C (khớp tường) theo hướng chuyển động phải; các vòng sau khối tin tiếp tục dịch/hội tụ — cảm giác “filter đang chắc dần”. Nếu quên bel /= bel.sum() thì không còn xác suất.

Hình phân phối (đọc output):

  ô:     A      B      C
  prior  ███    ███    ███
  post   ████   ░      █████   (minh họa — xem số in)

4. Gắn RL–UAV / đa mục tiêu

  • Belief là sufficient statistic cho POMDP trong nhiều trường hợp.
  • Recurrent policy / belief-state RL: mạng học xấp xỉ \(bel\), rồi quyết định.
  • Reward phụ thuộc state thật nhưng policy chỉ thấy \(z\) → bạn tối ưu bài khác full-state RL — nói rõ trong paper.
  • Motion model dưới gió: đừng dùng \(p(x'|x,u)\) quá lạc quan (như không gió).
  • Sensor model GPS urban: likelihood không nên cực nhọn — multipath = outlier.
  • Cost/reward đa mục tiêu nên có thể phụ thuộc độ chắc belief (ví dụ phạt khi \(H(bel)\) cao gần vật cản).

5. Ưu / nhược

✅ Nên ❌ Không ≈ Gần đúng
Khung chung mọi filter Quên \(\eta\) rồi gọi là “xác suất” Histogram tin thô chưa chuẩn hóa (debug)
Tách rõ motion vs sensor model Nhầm \(p(z\|x)\) với \(p(x\|z)\) Likelihood heuristic có chuẩn hóa
Likelihood trung thực với GPS/camera Likelihood cực nhọn + outlier Huber / clutter model

Nghĩa với năng lượng / gió / GPS urban: gió vào motion model; multipath vào sensor model — Bayes chỉ “đúng” khi hai model không tự lừa.


6. Lỗi thường gặp

⚠️ Lỗi hay gặp: Quên chuẩn hóa \(\eta\).
⚠️ Sensor model quá lạc quan → filter tự tin sai.
⚠️ Nhầm \(p(z\|x)\) với \(p(x\|z)\).
⚠️ Nghĩ “chạy KF là khác Bayes” — KF là trường hợp đặc biệt / xấp xỉ.


7. Checklist

  1. Viết lại 2 phương trình Bayes filter không nhìn tài liệu.
  2. Motion model khác sensor model ở chỗ nào?
  3. Vì sao nói “mọi filter chỉ là xấp xỉ Bayes filter”?
  4. Trong stack UAV của bạn, \(u\) và \(z\) cụ thể là gì mỗi chu kỳ?

Nhớ một câu: Predict = tích phân motion; update = likelihood × prior rồi chuẩn hóa — mọi estimator chỉ xấp xỉ hai dòng này.

🔗 Sang bài sau mang theo: Cần xấp xỉ thực dụng: một chuông Gauss (KF) hoặc đám hạt (PF).

  ★ Hình nhớ mãi:
  bel ─u─► bel̄ ─z,η─► bel ─► (lặp)

Trước: Lec11 · Sau: Lec13