4 คะแนน โดย GN⁺ 2024-02-13 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Kalman Filter เป็นอัลกอริทึมที่สร้าง ค่าประมาณสถานะที่แม่นยำยิ่งขึ้น แบบเรียลไทม์จากค่าที่วัดได้ซึ่งมีสัญญาณรบกวนหรือไม่แม่นยำ และถูกใช้ในการพยากรณ์และการควบคุมที่อาศัยเซ็นเซอร์
  • ไม่ได้มีหน้าที่เพียงทำให้ค่าที่วัดได้เรียบขึ้นเท่านั้น แต่ยังสามารถประมาณ ตัวแปรสถานะอย่างตำแหน่งและความเร็ว ที่สังเกตได้ยากโดยตรง
  • ตัวอย่างการติดตามด้วยเรดาร์แสดงลำดับการรับค่าตำแหน่ง 2D และ covariance เป็นอินพุต แล้วประมาณ ตำแหน่งและความเร็ว ของวัตถุเป็นเวกเตอร์สถานะขนาด 4×1
  • หลังจากกำหนดค่าเริ่มต้นของสถานะด้วยค่าที่วัดได้สองครั้งแรกแล้ว จะทำซ้ำขั้นตอนการพยากรณ์ การคำนวณ Kalman Gain และการอัปเดตสถานะกับ covariance ของข้อผิดพลาดต่อไป
  • ประวัติที่ฟิลเตอร์เก็บรักษาไว้มีเพียงค่าประมาณสถานะปัจจุบันค่าเดียว จึงนำไปใช้งานได้ง่ายแม้บน อุปกรณ์ที่มีข้อจำกัดด้านหน่วยความจำ

ภาพรวมของ Kalman Filter

  • Kalman Filter สามารถมองได้เหมือน กล่องดำ ที่มีอินพุตและเอาต์พุต
    • อินพุตคือค่าที่วัดได้ซึ่งมีสัญญาณรบกวนหรือบางครั้งก็ไม่แม่นยำ
    • เอาต์พุตคือค่าประมาณที่มีสัญญาณรบกวนน้อยลงและแม่นยำขึ้น
  • ค่าประมาณอาจเป็น พารามิเตอร์สถานะของระบบ ที่ไม่ได้ถูกวัดหรือสังเกตโดยตรง
  • ใช้สำหรับประมาณทั้งพารามิเตอร์ที่สังเกตได้และสังเกตไม่ได้ แบบเรียลไทม์ ด้วยความแม่นยำสูง
  • ค่าประมาณที่มีความแม่นยำสูงนำไปใช้กับการพยากรณ์และการตัดสินใจที่ละเอียดแม่นยำ
  • จึงถูกใช้งานบ่อยใน หุ่นยนต์ และระบบเรียลไทม์ที่ต้องการข้อมูลที่เชื่อถือได้

ปัญหาที่ Kalman Filter แก้ได้

  • ใช้ค่าที่วัดได้ซึ่งไม่แม่นยำหรือมีสัญญาณรบกวน เพื่อประมาณสถานะของตัวแปร หรือประมาณตัวแปรอื่นที่สังเกตโดยตรงได้ยาก ให้มีความแม่นยำสูงขึ้น
  • ตัวอย่างการใช้งานที่พบได้บ่อยมีดังนี้
    • การติดตามวัตถุ: ใช้ตำแหน่งที่วัดได้เพื่อประมาณตำแหน่งและความเร็วของวัตถุให้แม่นยำขึ้น
    • การประมาณน้ำหนักจากเครื่องชั่งดิจิทัล: ใช้แรงกดบนพื้นผิวเพื่อประมาณน้ำหนักของวัตถุ
    • การนำวิถี การนำทาง และการควบคุม: ใช้เซ็นเซอร์ IMU เพื่อประมาณตำแหน่ง ความเร็ว และความเร่ง แล้วนำไปใช้ควบคุมการเคลื่อนไหวถัดไป
  • จุดแข็งของ Kalman Filter ไม่ได้อยู่ที่การทำให้ค่าที่วัดได้เรียบขึ้นเท่านั้น แต่คือความสามารถในการประมาณ พารามิเตอร์ของระบบที่วัดได้ยาก
  • ในระบบเรียลไทม์ ค่าประมาณที่แม่นยำขึ้นจะนำไปสู่การควบคุมและการทำงานที่ดีกว่า

อินพุตและเอาต์พุตของตัวอย่างการติดตามด้วยเรดาร์

  • ตัวอย่างนี้กล่าวถึงสถานการณ์ การติดตามด้วยเรดาร์ เพื่อเฝ้าติดตามเครื่องบินและวัตถุรอบสนามบิน
  • สถานะแทร็กที่ได้จะถูกนำไปแสดงให้ผู้ปฏิบัติงานควบคุมการจราจรทางอากาศที่เฝ้าระวังน่านฟ้าเห็น
  • เรดาร์ส่งออก ค่าการวัดตำแหน่ง x, y ในระบบพิกัดคาร์ทีเซียน 2D
    • ค่าที่วัดได้แสดงเป็นคอลัมน์เวกเตอร์ขนาด 2×1 z
    • เมทริกซ์ความแปรปรวน-โคเวเรียนซ์ ของค่าที่วัดได้แสดงด้วย R
    • เวลาที่ประทับกับการวัดแสดงด้วย t
    • ตัวห้อย m หมายถึงพารามิเตอร์การวัด และ k หมายถึงลำดับของการวัด
  • Kalman Filter ใช้ค่าที่วัดได้จากเรดาร์เพื่อประมาณ ตำแหน่งและความเร็ว ของวัตถุ

ขั้นที่ 1: กำหนดค่าเริ่มต้นของสถานะระบบ

  • วิธีการกำหนดค่าเริ่มต้น ของ Kalman Filter แตกต่างกันไปตามแอปพลิเคชัน
  • ในตัวอย่างการติดตามด้วยเรดาร์นี้ ใช้ค่าที่วัดได้ครั้งแรกเพื่อกำหนดค่าเริ่มต้นของสถานะระบบ
  • แม้อินพุตการวัดจะมีเพียงข้อมูลตำแหน่ง แต่สถานะระบบที่เป็นเอาต์พุตประกอบด้วย ตำแหน่งและความเร็ว ของวัตถุ
  • เมื่อได้รับค่าที่วัดได้ครั้งแรก ข้อมูลที่ทราบได้มีเพียงตำแหน่ง ณ เวลานั้น
    • หลังการประมาณครั้งแรก ค่าประมาณสถานะระบบจะถูกตั้งเป็นตำแหน่งจากอินพุต
    • covariance ของข้อผิดพลาดของสถานะระบบจะถูกตั้งจากความแม่นยำของตำแหน่งในค่าที่วัดได้ครั้งแรก

ขั้นที่ 2: กำหนดสถานะระบบใหม่อีกครั้ง

  • เนื่องจากการประมาณความเร็วต้องใช้ค่าการวัดตำแหน่งครั้งที่สอง จึงต้อง กำหนดค่าประมาณสถานะระบบใหม่อีกครั้ง
  • ความเร็วคำนวณจากการประมาณเชิงเส้น
    • ความเร็ว = ระยะทางที่เคลื่อนที่ / เวลาที่ใช้ในการเคลื่อนที่
  • ค่าประมาณสถานะระบบที่อัปเดตแล้วประกอบด้วยตำแหน่งจากการวัดครั้งที่สองและความเร็วที่คำนวณได้
  • covariance ของข้อผิดพลาดของสถานะระบบที่อัปเดตแล้วจะรวมความแม่นยำของตำแหน่งจากการวัดครั้งที่สองและความแม่นยำโดยประมาณของความเร็ว
  • ค่าประมาณความแม่นยำของความเร็วสามารถปรับ จูน ได้หลังจากปล่อยให้ข้อมูลไหลผ่านฟิลเตอร์
    • ในตัวอย่างนี้ตั้งค่าเทอมความแปรปรวนของความเร็วเป็น 10⁴
    • ค่านี้แสดงถึงความไม่แน่นอนสูงของค่าความเร็วในสถานะ
    • หน่วยของความเร็วในตัวอย่างคือ m/s

การประมวลผลแบบวนซ้ำหลังการกำหนดค่าเริ่มต้น

  • สองขั้นตอนแรกคือกระบวนการกำหนดค่าเริ่มต้นและกำหนดใหม่ให้กับค่าประมาณของระบบด้วยค่าการวัดไม่กี่ครั้ง
  • วิธีการกำหนดค่าเริ่มต้นอาจแตกต่างกันไปตามแอปพลิเคชัน
  • เป้าหมายคือการมี ค่าประมาณสถานะระบบ ที่สามารถอัปเดตด้วยสมการ Kalman Filter ได้เมื่อมีค่าการวัดในลำดับถัดไป
  • หลังจากนั้น ขั้นตอนต่อไปคือสะท้อนค่าการวัดใหม่เข้าสู่ฟิลเตอร์และอัปเดตค่าประมาณสถานะ

ขั้นที่ 3: พยากรณ์ค่าประมาณสถานะระบบ

  • เมื่อค่าการวัดครั้งที่สามเข้ามา จะมีการส่งต่อค่าประมาณสถานะระบบไปข้างหน้าเพื่อให้ จัดแนวตามเวลา กับค่าการวัด
  • การจัดแนวนี้จำเป็นสำหรับการรวมค่าการวัดกับค่าประมาณสถานะเข้าด้วยกัน
  • การพยากรณ์ใช้ แบบจำลองระบบ
  • ในตัวอย่างนี้ ใช้แบบจำลองการเคลื่อนที่เชิงเส้นด้วยความเร็วคงที่เพื่อประมาณการเปลี่ยนแปลงตำแหน่งของวัตถุในช่วงเวลา
    • แบบจำลองความเร็วคงที่สมมติว่าความเร่งเป็น 0
  • เมทริกซ์การเปลี่ยนสถานะแสดงสมการการเคลื่อนที่นี้
    • เมทริกซ์นี้ใช้สำหรับส่งต่อค่าประมาณสถานะและเมทริกซ์ covariance ของข้อผิดพลาดของสถานะอย่างเหมาะสม
  • เมื่อส่งต่อค่าประมาณสถานะไปยังเวลาในอนาคต จะเกิดความไม่แน่นอนของสถานะ ณ เวลานั้น จึงทำให้ covariance ของข้อผิดพลาดเพิ่มขึ้น

เมทริกซ์ Q และเมทริกซ์ H

  • เมทริกซ์ Q แสดง process noise ของแบบจำลองระบบ
    • แบบจำลองระบบเป็นเพียงค่าประมาณ
    • ความแม่นยำของแบบจำลองจะแปรผันไปตลอดช่วงชีวิตของสถานะระบบ
    • เมทริกซ์ Q แสดงความไม่แน่นอนนี้ และจะถูกบวกเพิ่มเข้าไปใน noise ของสถานะเดิม
    • ในตัวอย่างนี้ การเร่งและการชะลอจริงมีส่วนทำให้เกิดข้อผิดพลาดนี้
  • เมทริกซ์ H คือเมทริกซ์สถานะ-การวัด ซึ่งใช้แปลงค่าประมาณสถานะระบบจาก state space ไปยัง measurement space
    • ในบางแอปพลิเคชัน เป็นเมทริกซ์ที่ประกอบด้วย 0 และ 1
    • ในแอปพลิเคชันที่ใช้ Extended Kalman Filter จะถูกเติมด้วยสมการเชิงอนุพันธ์
    • คำอธิบายที่เกี่ยวข้องต่อเนื่องไปยังบทความ Extended Kalman Filters
  • เมทริกซ์ H ในตัวอย่างนี้เป็นเมทริกซ์อย่างง่ายที่ลดค่าประมาณสถานะและ covariance ของข้อผิดพลาดให้สามารถเปรียบเทียบได้เฉพาะ ค่าตำแหน่ง ไม่ใช่ทั้งตำแหน่งและความเร็วทั้งหมด

ขั้นที่ 4: คำนวณ Kalman Gain

  • Kalman Filter จะคำนวณ Kalman Gain สำหรับค่าการวัดใหม่ทุกครั้ง
  • Kalman Gain เป็นตัวกำหนดว่าค่าการวัดอินพุตจะมีอิทธิพลต่อค่าประมาณสถานะระบบมากเพียงใด
  • หากสัญญาณรบกวนของค่าการวัดสูงมาก Kalman Gain จะเชื่อค่าประมาณสถานะปัจจุบันมากกว่าข้อมูลใหม่ที่แม้จะใหม่แต่ไม่แม่นยำ
  • วิธีที่ถ่วงน้ำหนักระหว่างค่าประมาณปัจจุบันกับข้อมูลการวัดใหม่อย่างเหมาะสมเพื่อสร้าง ค่าประมาณที่เหมาะที่สุด คือแก่นหลักของอัลกอริทึม Kalman Filter

ขั้นที่ 5: อัปเดตสถานะและ covariance ของข้อผิดพลาด

  • Kalman Filter ใช้ Kalman Gain เพื่อประมาณสถานะระบบและเมทริกซ์ covariance ของข้อผิดพลาด ณ เวลาของค่าการวัดอินพุต
  • Kalman Gain ถูกใช้เพื่อให้ค่าน้ำหนักที่เหมาะสมกับค่าการวัดในการคำนวณสองส่วน
    • การคำนวณ ค่าประมาณสถานะระบบ ใหม่
    • การคำนวณ covariance ของข้อผิดพลาด ของสถานะระบบ
  • ค่าประมาณสถานะที่คำนวณได้คือประวัติสถานะเพียงอย่างเดียวที่ Kalman Filter เก็บไว้
  • ด้วยคุณสมบัตินี้ Kalman Filter จึงสามารถนำไปใช้ได้แม้บนอุปกรณ์ที่มี ข้อจำกัดด้านหน่วยความจำต่ำ

สรุป

  • Kalman Filter เป็น กระบวนการทั่วไป สำหรับการประมาณสถานะที่เหมาะที่สุด
  • ถูกใช้ในแอปพลิเคชันหลากหลายที่ต้องการค่าประมาณที่แม่นยำ
  • เมื่อแบ่งเป็นขั้นตอนย่อย ๆ จะทำให้เห็นว่า Kalman Filter ทำงานในโครงสร้างที่เข้าใจง่ายขึ้นและไม่น่าหนักใจนัก

1 ความคิดเห็น

 
GN⁺ 2024-02-13
ความคิดเห็นจาก Hacker News
  • พูดถึง Kalman filter แล้วจะขาดลิงก์สื่อการเรียนชั้นยอดนี้ไปไม่ได้ เขียนเป็นชุด Jupyter notebook: https://github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Pyt...
    หนังสือเล่มนี้มอง alpha-beta filter ว่าเป็นเหมือนน้องเล็กของ Kalman filter แบบเต็มรูปแบบ แต่พอช่วงหลังผมต้องอ่านเรื่องนี้เยอะเพราะงานต้องใช้ของคล้ายกัน ก็เริ่มตระหนักว่า alpha-beta filter และตระกูล Kalman เน้นการพยากรณ์อนาคตระยะใกล้มาก ขณะที่สิ่งที่ผมต้องการจริง ๆ คือการทำ smoothing กับข้อมูลในอดีต
    เลยเริ่มอ่านเรื่อง double exponential smoothing และมันก็ดูเหมาะกับ use case มาก แต่พอขุดลึกลงไปก็พบว่าสุดท้ายมันคือ alpha-beta filter ที่แค่เปลี่ยนชื่อตัวแปรเท่านั้น
    รู้สึกว่าคณิตศาสตร์แขนงนี้ทั้งหมดตั้งอยู่บนทฤษฎีพื้นฐานร่วมกันไม่กี่อย่าง แต่พอแต่ละสาขาไปถึงระบบเดียวกันด้วยแนวทางต่างกัน ชื่อกับสัญลักษณ์เลยต่างกันจนความเหมือนถูกซ่อนไว้ เหมือนว่าที่ใจกลางของเรื่องอย่าง power series, ค่าคงที่ธรรมชาติ, gradient descent, filter, feedback system, general systems theory น่าจะมีแกนของสัญชาตญาณเล็ก ๆ ร่วมกันอยู่ และถ้าจับแกนนั้นได้ คณิตศาสตร์หลายอย่างก็น่าจะเชื่อมต่อกันได้อย่างสวยงาม

    • การโกรธที่นักคณิตศาสตร์ใช้ ชื่อตัวแปรตัวเดียว มักเป็นการพลาดประเด็นสำคัญ ชื่อสั้น ๆ ช่วยให้โฟกัสกับโครงสร้างของสมการและความสัมพันธ์ และทำให้จับแพตเทิร์นได้ง่ายขึ้นแบบ “เดี๋ยวก่อน นี่โครงสร้างเดียวกับ X ที่ฉันรู้จักนี่ แค่ชื่อไม่เหมือนกัน”
      ไม่ได้ทำไปเพื่อประหยัดกระดาษหรือเขียนให้ง่ายขึ้น การพิมพ์อักษรกรีกพร้อม superscript/subscript ใน LaTeX บนคีย์บอร์ดอังกฤษไม่ได้ง่ายกว่าการพิมพ์คำยาว ๆ เลย สิ่งที่ทำคือพยายามส่งข้อมูลบางอย่างให้ผู้อ่านในแบบที่สื่อด้วยวิธีอื่นได้ยาก
      ส kýญลักษณ์ทางคณิตศาสตร์ดูเหมือนตัวอักษร แต่โดยเนื้อแท้แล้วมันเป็น ส kýญลักษณ์เชิงภาพ อยู่มาก และคำยาว ๆ จะไปบังภาพนั้น
    • สิ่งที่คุณกำลังมองหาน่าจะใกล้กับทฤษฎี linear หรือ nonlinear dynamical systems มากกว่า แต่น่าเสียดายที่มันไม่ใช่แกนสัญชาตญาณเดียวที่มีสัญกรณ์สอดคล้องกันรองรับ กลับเป็นหลายมุมมองที่ไม่สอดคล้องกันแทน
      ถ้าได้เรียนวิชา control และ signal/systems อย่างจริงจัง คุณจะซึมซับสัญชาตญาณแบบนั้นไปเอง และค่อย ๆ เรียนรู้ทั้งคณิตศาสตร์และคำศัพท์โดยไม่ยึดติดกับธรรมเนียมการเขียนแบบใดแบบหนึ่งมากเกินไป สัญชาตญาณที่แท้จริงคือ “ทุกอย่างคือ filter” และที่เหลือคือการวิเคราะห์และสังเคราะห์ไอเดียนั้น
    • น่าจะลองอ่าน Probabilistic Robotics ของ Dieter Fox, Sebastian Thrun และ Wolfram Burgard เป็นหนังสือที่เรียบเรียงหัวข้อเกี่ยวกับ Kalman หลายเรื่องไว้ในกรอบแบบ Bayesian พร้อมสัญกรณ์ที่สอดคล้องกัน
      ตอนนี้ AI/ML โตขึ้นมาก ไอเดียจากทฤษฎีการควบคุมแบบดั้งเดิมก็เริ่มถูกรวมเข้ากับ reinforcement learning มากขึ้นด้วย
    • ถ้า Q และ R เป็นค่าคงที่ อย่างที่มักจะเป็น ค่า gain ก็มักจะลู่เข้าอย่างรวดเร็ว ทำให้ Kalman filter กลายเป็น exponential filter ที่มีขั้นตอน prediction เพิ่มเข้ามา คนจำนวนมากเข้าใจแบบนี้ได้ง่ายกว่ามาก และยังสอดคล้องกับวิธีใช้งานจริงด้วย
      เพราะโดยทั่วไป Q และ R มักถูกปรับด้วยมือจน “ดูโอเค” แล้วก็แทบไม่เปลี่ยนอีก นอกจากนี้แทนที่จะต้องจูนค่าหลายตัวใน Q และ R คุณก็แค่จูนค่า gain ตัวเดียวด้วยมือได้
    • ผมเคยมีความคิดคล้ายกันมาก่อน เคล็ดลับคือ filter จำนวนมากสุดท้ายแล้วลดรูปมาเป็น alpha/beta ได้ และอาจมอง Kalman filter ว่าเป็นวิธีสร้างค่าคงที่เหล่านั้นเมื่อเรารู้ linear model และความแปรปรวนของ measurement noise ดีพอ
      ถ้า noise ของค่าที่วัดได้คงที่ตลอด มันก็จะลู่เข้าเป็นค่าคงที่ตามเวลา และจะมีประโยชน์เป็นพิเศษก็ต่อเมื่อเรารู้ความแม่นยำของการวัดได้ดี แต่ค่าดังกล่าวเปลี่ยนไปมาก
  • เมื่อไม่นานมานี้ผมได้รับหน้าที่ implement Kalman filter และพบว่าหาแหล่งอธิบายดี ๆ ในภาษาที่นักพัฒนาอย่างผมเข้าใจได้ยากมากจริง ๆ หลังจากใช้เวลาศึกษาราวหนึ่งเดือน ผมก็เขียนบทความไว้สองชิ้น ซึ่งอาจช่วยใครบางคนได้: https://www.splinter.com.au/2023/12/14/the-kalman-filter-for..., https://www.splinter.com.au/2023/12/15/the-kalman-filter-wit...
    ในฐานะนักพัฒนา มันค่อนข้างน่าขันที่ผมเพิ่งจะเข้าใจคณิตศาสตร์หลังจากลองลงมือ implement เองแล้ว ดูเหมือนมันเป็นวิธีเรียนรู้แบบค่อย ๆ สร้างบนสิ่งที่รู้อยู่แล้ว ไม่แน่ใจว่ามีคำเรียกแนวทางแบบนี้หรือเปล่า

  • ฉันคิดมาตลอดว่าคณิตศาสตร์จะเรียนง่ายขึ้นมากถ้าใช้ ชื่อตัวแปรที่อธิบายความหมายได้ชัดเจน อย่างน้อยถ้าเป็นสื่อเชิงโต้ตอบอย่างเว็บ ก็ยังใส่ tooltip ขั้นต่ำได้ ตอนเรียนคณิตศาสตร์ เวลาราว 90% หมดไปกับการไล่หาว่าสัญลักษณ์แต่ละตัวหมายถึงอะไร
    อีกอย่างตรงนี้ที่บอกว่าตัวห้อย “แสดงลำดับของการวัด” ก็ทำให้งงว่าหมายถึงลำดับแบบไหน น่าจะหมายถึงดัชนีมากกว่า ฉันเองก็ไม่ได้จับ Kalman filter มานานแล้ว

    • สิ่งที่คนมักลืมกันคือ สัญกรณ์ทางคณิตศาสตร์ ถูกออกแบบมาเพื่อให้ตามการจัดรูปพีชคณิตได้ง่าย จุดประสงค์ไม่ใช่ให้แค่เห็นสัญกรณ์แล้วความหมายต้องชัดในตัวเอง ส่วนแนวคิดที่ว่าสมการอย่าง E=mc^2 ควรมีความหมายในตัวมันเองนั้น ส่วนใหญ่มักเป็นมุมมองของนักฟิสิกส์
      ยิ่งคณิตศาสตร์มีความเป็นนามธรรมมากขึ้น ขอบเขตของตัวแปรส่วนใหญ่ก็จะยิ่งสั้นลง ปกติตัวแปรจะถูกนิยามก่อนใช้งานไม่นาน และขอบเขตก็มักไม่เกินบทพิสูจน์หรือการอนุมานนั้น ๆ
      แต่ตัวเลือกบางอย่างในบทความนี้ก็แปลกจริง ๆ เช่น ใช้ P เป็นทั้งตัวแปรและดัชนีพร้อมกัน ทั้งที่ precision matrix เป็นเมทริกซ์ผกผันอย่างแท้จริงของ covariance matrix แต่กลับใช้ P กับ covariance matrix
    • ฉันเกลียดเรื่องแบบนี้ที่สุดเวลาอ่านงานวิจัย ผู้เขียนพยายามให้ดูเป็นนามธรรมและเป็นวิชาการ แต่สุดท้ายกลับคลุมเครือจนน่าอึดอัด ถ้าจะให้ประโยคสื่อความได้จริง ต้องใส่ ประธานและสิ่งที่กล่าวถึง ลงไป
      ความกำกวมแบบนี้แหละคือส่วนที่น่าหงุดหงิดที่สุดของงานวิจัย ต้องทำให้ชัดเจนเสมอ ควรใช้คำอธิบายแบบสัมบูรณ์ ไม่ใช่แบบสัมพัทธ์ อย่าเขียนว่า “ดูด้านขวา” เพราะฉันอาจกำลังดูด้านซ้ายก็ได้
      ถ้าเขียนว่า “หลังจากหมุนปริซึมแล้ว กรวยแสง...” ก็ยังขาดข้อมูลว่าหมุนไปทางไหน ซ้ายหรือขวา แนวนอนหรือขึ้นลง เร็วหรือช้า คนเขียนเห็นองค์ประกอบสำคัญพวกนี้ครบอยู่ในหัว แต่ผู้อ่านอ่านใจไม่ได้
    • เห็นด้วยเต็มที่ ฉันก็รู้สึกคล้ายกันว่า หนังสือคณิตศาสตร์ที่ดีที่สุดซึ่งยังไม่มีใครเขียน น่าจะเป็นหนังสือที่จัดระเบียบ สัญกรณ์และความหมายของตัวแปร ไว้อย่างดี และคัดสรรทฤษฎีบทจากหลายสาขามาเรียบเรียงให้ชัดเจน
    • ลำดับที่พูดถึงตรงนี้คือ ดัชนีตามเวลา ที่ใช้จับคู่กับค่า เช่น x_3 คือสถานะในช่วงเวลาอันดับที่สาม
      ตัวห้อย “p” น่าจะหมายถึง prediction หรือการพยากรณ์ ดังนั้น x_p ของเวลา 3 คือสถานะที่คาดไว้สำหรับเวลา 4 แต่เมื่อถึงเวลา 4 จริง ก็จะนำค่าการวัดใหม่มาคิดรวมเพื่อคำนวณ x_4
      พูดให้ชัดคือ x_4 นี้ไม่เหมือนกับ x_p ที่คำนวณไว้ตอนเวลา 3 เพราะการพยากรณ์ย่อมคลาดเคลื่อนอยู่เสมอ
    • ผมมองว่าชื่อตัวแปรก็ถูกเลือกให้สื่อความหมายอยู่แล้ว ไม่มีใครตั้งใจเลือกให้ทึบหรือไล่ตามยากขึ้นโดยเจตนา
      ปัญหาคือคนที่เพิ่งเริ่มยังไม่คุ้นกับแนวคิดหรือ สัญกรณ์มาตรฐาน ของแต่ละโจทย์แต่ละสาขา ความเจ็บปวดเวลาเริ่มเรียนเรื่องใหม่จึงยังคงอยู่
  • Kalman filter อาจเป็นหนึ่งในกรณีประหลาดที่ เวอร์ชันแบบย่อ ในคณิตศาสตร์ถูกย่อมากเกินไปจนแทบไม่เห็นหน้าตาเดิม
    สิ่งที่มันทำจริง ๆ คือรับค่าการวัดเข้ามาหนึ่งค่า จำลองสถานะอนาคตที่เป็นไปได้ จากนั้นรวมข้อมูลนี้เข้ากับค่าการวัดถัดไป แล้วทำซ้ำไปเรื่อย ๆ
    ตัวอย่างเช่น ถ่ายภาพลูกเทนนิสหลายภาพ ประเมินตำแหน่งและความเร็วจากภาพแรก จากนั้นจำลองว่ามันน่าจะไปทางไหน แล้วเทียบกับภาพถัดไปเพื่อดูว่าการประมาณแบบไหนใกล้ความจริงกว่า หรือถ้าเป็นตัวอย่างแบบดั้งเดิมกว่านั้น ก็อาจนึกถึงการวัดมุมเงยของดวงอาทิตย์เพื่อสร้างเส้นตำแหน่งที่เป็นไปได้บนแผนที่ แล้วนำไปเทียบกับจุดที่เดิมเราคิดว่าตัวเองอยู่
    แน่นอนว่าการคำนวณแบบเป๊ะ ๆ แทบเป็นไปไม่ได้ในทางปฏิบัติ จึงต้องลดรูปด้วยการสุ่มตัวอย่าง แต่ถึงอย่างนั้นก็ยังยากอยู่ดี เลยสมมติว่าการแจกแจงใกล้เคียง การแจกแจงแบบเกาส์ ในระดับหนึ่ง จากนั้นลดรูปต่อโดยสมมติว่าการเปลี่ยนแปลงของระบบเป็นการแปลงเชิงเส้น จึงได้เป็น Kalman filter แบบที่พูดถึงกันตรงนี้
    ถ้าแค่มอง linear algebra แล้วเข้าใจได้เลยว่าเกิดอะไรขึ้นจริง ๆ ก็น่าจะน่าทึ่งมาก

    • คำอธิบาย Kalman filter มักเริ่มต้นแบบแปลก ๆ ว่า “ง่ายมาก!” กันบ่อย และต้นฉบับนี้ก็มาแนวเดียวกัน
      แต่คำอธิบายนี้แหละที่ทำให้ฉันได้ สัญชาตญาณ เป็นครั้งแรกว่าจริง ๆ แล้วมันกำลังเกิดอะไรขึ้น สำหรับคนสายคอมพิวเตอร์อย่างฉัน แม้แต่ชื่อนี้เองก็ชวนให้เข้าใจผิดพอสมควร เพราะมันไม่ใช่ filter แบบที่พูดถึงใน stream processing หรือ SQL
    • อธิบายให้ง่ายกว่านี้ได้อีก จริง ๆ แล้ว linear algebra กลับง่ายกว่าเสียอีก
      Kalman filter พยายามประมาณค่า อินพุตแฝง ที่ทำให้เกิดค่าการวัดที่เห็นอยู่ เพื่อทำเช่นนั้นจึงตั้งโจทย์ หาค่า x ที่ทำให้ [ค่าที่วัดจริง - ค่าที่คาดว่าจะวัดได้(x)]^2/s^2 ต่ำสุด โดย s คือซิกมาของสัญญาณรบกวน
      สิ่งนี้มาจากปัญหาการประมาณสถานะที่ ทำให้ likelihood ของการเห็นค่าที่วัดจริงสูงสุดสำหรับ x เพราะในฟังก์ชัน likelihood พจน์สำคัญมีเพียง -([x-expected(x)]/s)^2 เท่านั้น แค่ดูเลขชี้กำลังของการแจกแจงปกติ หรือจริง ๆ แล้วของการแจกแจงแบบเอ็กซ์โพเนนเชียลแทบทุกชนิดก็ได้
      เนื่องจาก ค่าที่วัดจริง เป็นค่าคงที่ ถ้าฟังก์ชัน ค่าที่คาดว่าจะวัดได้ เป็นเชิงเส้น ก็แก้ได้ตรง ๆ ด้วย convex optimization หาอนุพันธ์แล้วตั้งให้เท่ากับ 0 ก็จะได้ขั้นตอนอัปเดตของ Kalman filter ออกมา
      ถ้าฟังก์ชันไม่เป็นเชิงเส้น ก็เท่ากับทำ Newton-Raphson หนึ่งก้าว โดย linearize สมการก่อน ทำการหาค่าต่ำสุด แล้วคืนคำตอบของ “การทำให้เป็นเชิงเส้นแบบปลอม ๆ” นั้นออกมา ทั้งหมดนี้เป็นแคลคูลัสและ linear algebra ระดับปริญญาตรี เพียงแต่ไม่ค่อยมีใครบอกกันแบบนี้
      แต่คำอธิบายนี้ก็ผิดอย่างสิ้นเชิงได้เหมือนกัน มันเป็นแฮ็กจากยุค 1960 ที่พยายาม maximize likelihood function ด้วยการทำให้เป็นเชิงเส้นแบบเวียนกลับทีละขั้นตอน วิศวกรหลายรุ่นเชื่อว่ามันเป็นวิธีที่เหมาะที่สุดเพราะอ่าน Cramér-Rao bound ผิด แต่ความจริงไม่ใช่
      ทุกวันนี้เรามีพลังประมวลผลมากขึ้นราว 10,000 เท่า และจะได้ผลดีกว่าหากตั้งสมการไม่เชิงเส้นแล้วแก้ด้วย Newton-Raphson หลายก้าว หรือเก็บประวัติการวัดที่ยาวขึ้นแล้วแก้ทั้งชุดนั้นด้วย Newton-Raphson หลายก้าว หรือใช้การแทนแบบ Gaussian mixture เพื่อรองรับ measurement function ที่มีหลายยอด
      เรื่องพวกนี้ถูกพูดถึงอย่างดีในงานวิจัยด้าน state estimation ตั้งแต่ทศวรรษ 1980 จนถึงปัจจุบัน แต่ตำราเรียนจำนวนมากก็ยังเหมือนถูกสลักค้างไว้ในปี 1972
      Cramér-Rao bound จะนิยามได้ก็ต่อเมื่อ likelihood function ของการวัดทั้งหมดสามารถถูก linearize ได้ที่สถานะจริงเท่านั้น ซึ่งทำได้เพียงในเชิงลู่เข้าเมื่อพิจารณาเป็นชุดที่เก็บค่าการวัดทั้งหมดไว้ และเป็นไปไม่ได้ก่อนเวลาที่ไม่สิ้นสุด รวมถึงเป็นไปไม่ได้สำหรับ recursive filter ด้วย
  • ในบรรดาคำอธิบายเก่า ๆ บทความนี้ดีมาก: https://www.bzarg.com/p/how-a-kalman-filter-works-in-picture..., https://news.ycombinator.com/item?id=13449229

  • ถ้าจำเป็นต้องใช้ Kalman filter จริง ๆ ก็น่าจะอ่านและทำความเข้าใจบทความนี้ หรือเอกสารใน Wikipedia หรือแม้แต่ซอร์สโค้ดสำหรับการติดตั้ง(https://github.com/LdDl/kalman-rs/blob/master/src/kalman/kal...)ได้
    แต่จากประสบการณ์ของผม คนแทบจะทั้งหมดบนโลกนี้เรียนรู้ได้ดีที่สุดจากตัวอย่างในฐานะ ผู้เรียนรู้ด้วยภาพ ดังนั้นจึงน่าแปลกใจที่บทช่วยสอนตรงกลางหน้าไม่ใส่ตัวเลขตัวอย่างลงในสูตร อาจเป็นไปได้ว่าผมมองข้ามไป แต่แม้แต่ภาพประกอบก็เริ่มหลังจากมีข้อความว่า “Kalman filter คืออะไร” อยู่เต็มหนึ่งหน้า และภาพนั้นเองก็ยังเป็นสูตรเพิ่มอีก

    • อีกมุมหนึ่งมีการบอกว่า ธรรมเนียมการตั้งชื่อตัวแปรเป็นอุปสรรคต่อการเรียนรู้และทำความเข้าใจหัวข้อทางคณิตศาสตร์ ซึ่งผมก็เห็นด้วยกับมุมมองนั้นเช่นกัน แต่ผมเห็นด้วยกับปัญหาที่พูดถึงตรงนี้มากกว่า
      เรื่องแบบนี้เกิดขึ้นบ่อยมากจนแทบน่าตกใจ และในรูปแบบที่เบากว่านี้ ปัญหาเดียวกันก็พบได้ในไลบรารีซอฟต์แวร์ที่ไม่ใส่ ตัวอย่างโค้ด มาด้วย
  • สิ่งที่ทำให้ผมเข้าใจได้คือ เมื่อรวมการแจกแจงของค่าที่วัดได้ซึ่งไม่แน่นอนสองชุดเข้าด้วยกัน หรือก็คือการแจกแจงที่มีความแปรปรวนสูง เราจะได้ค่าที่วัดได้ที่แน่นอนขึ้น หรือก็คือการแจกแจงที่แคบลง
    ถ้านำค่าที่วัดได้ที่แน่นอนขึ้นนี้ไปรวมกับค่าที่วัดได้ถัดไปอีก แล้วทำซ้ำไปเรื่อย ๆ นั่นก็คือ Kalman filter

  • ในบรรดาวิดีโอชุดที่อธิบาย KF อันนี้ดีมากจริง ๆ ผมเข้าใจได้ดีกว่าสื่ออ้างอิงของบทความต้นฉบับเสียอีก: https://www.youtube.com/watch?v=CaCcOwJPytQ

  • คุณพ่อผู้ล่วงลับของผมใช้ฟิลเตอร์นี้บ่อยมากตลอดอาชีพของท่าน ตั้งแต่ช่วงที่มันเพิ่งถูกคิดค้นขึ้นมา ท่านทำงานเกี่ยวกับเรดาร์และระบบนำวิถีมิสไซล์

  • ลองหลับตาแล้วเดินไปมาสักครู่ ลองนึกภาพว่าตัวเองอยู่ตรงไหน แล้วพอลืมตาขึ้นมา ตำแหน่งจริงต่างจากตำแหน่งที่คิดไว้ไหม?
    ขั้นตอนสุดท้ายนั้น หรือก็คือการใช้การสังเกตเพื่ออัปเดต ความเชื่อเกี่ยวกับตัวแปรสถานะ คือสิ่งที่ Kalman filter ทำ