Wednesday, December 7, 2016

Bayes Theorem กับการไขรหัสลับ Enigma ในช่วงสงครามโลกครั้งที่สอง

The Imitation Game (2014)
The Imitation Game (2014)
เมื่อวานแอดเพิ่งได้ดูหนังเรื่อง The Imitation Game (2014) นำแสดงโดยดาราคุณภาพอย่าง Benedict Cumberbatch ที่รับบทเป็น Alan Turing นักคณิตศาสตร์อัจฉริยะชาวอังกฤษ ที่มีส่วนร่วมสำคัญในการไขรหัสลับ Enigma ของฮิตเลอร์ และช่วยให้ฝั่งสัมพันธมิตรชนะสงครามโลกครั้งที่สอง ในช่วงระหว่างปี 1939 - 1945

แต่ว่า ... เป็นที่น่าเสียดายที่คนทั่วไปรู้จักชื่อของ Alan Turing น้อยมาก ทั้งๆที่สิ่งประดิษฐ์ของอลันตอนทำงานให้หน่วยราชการลับของรัฐบาลอังกฤษ (MI6) เป็นรากฐานสำคัญของสองสิ่งที่นักวิทยาศาสตร์ใช้อยู่ในปัจจุบัน ได้แก่
  1. Bayes Theorem ที่อธิบายเรื่องความน่าจะเป็นที่อัพเดทตัวเองได้ตามข้อมูลใหม่ที่มีมากขึ้น
  2. Turing Machine ที่สามารถ simulate computer algorithms ทั้งหลายได้ไม่ว่าโมเดลนั้นจะซับซ้อนเพียงไหนก็ตาม 
จริงๆแล้ว Turing ไม่ได้เป็นคนคิด Bayes Theorem ขึ้นมาหรอก แต่ว่าเป็นคนที่ทำให้มันเป็นที่รู้จักไปทั่วโลกต่างหาก! ผู้ที่ค้นพบทฤษฎีนี้คนแรกคือ Thomas Bayes นักสถิติชาวอังกฤษ (1702-1762) โดยสร้างหลักการขึ้นมาจากความอยากจะทำนายความน่าจะเป็นของเหตุการณ์ที่จะเกิดขึ้นในอนาคตที่เค้าไม่รู้อะไรเลย นอกจากความน่าจะเป็นของเหตุการณ์นั้นที่เคยเกิดขึ้นมาแล้วในอดีต

แปลภาษาคนคือ Bayes อยากจะหา p (future | past) ถ้าเราเรียนรู้จากอดีต เราก็สามารถทำนายอนาคตได้ดีขึ้นนั่นเอง พอมาถึงปี 1740 Bayes ได้คิดค้นสมการขึ้นมาเพื่อที่จะอธิบายทฤษฎี โดยมีสูตรง่ายๆว่า
An initial belief + New evidence = A new updated belief
ความเชื่อเดิม + หลักฐานใหม่ = ความเชื่อใหม่ที่ได้รับการอัพเดท
แต่ Bayes ยังไม่ได้แก้สมการให้สำเร็จดี ก็ตายซะก่อนในปี 1762 เย้ย! 

ช่วงเวลาใกล้ๆกันในประเทศฝรั่งเศส Pierre-Simon Laplace ปี 1774 ก็เริ่มศึกษาเรื่องเดียวกัน (ตัวเค้าไม่รู้ว่า Bayes มีคิดคร่าวๆไว้ก่อนแล้ว) โดย Laplace ใช้เวลาตั้ง 40 ปีในการคิดสูตร Bayes Theorem ที่เราใช้กันอยู่ในปัจจุบันนี้ คือแบบ Laplace เป็นคนคิดสูตรสำเร็จ แต่ด้วยเหตุผลบางประการชื่อ Bayes ถูกนำมาใช้ตั้งชื่อทฤษฎีนี้แทน

และรูปด้านล่างคือสูตร Bayes ที่ใช้กันอย่างแพร่หลายในปัจจุบัน ไม่ว่าจะเป็น algorithm ของ Google search, รถยนต์ขับอัตโนมัติของ Elon Musk, recommender system ของ Netflix/ Amazon, การซื้อขายหุ้น, ไปหาหมอตรวจโรค, รวมถึงความน่าจะเป็นของเหตุการณ์ต่างๆในชีวิตประจำวันของเรา

ความเข้าใจใน Bayes Theorem จะช่วยให้คุณตัดสินใจเรื่องต่างๆในชีวิตได้ดีขึ้นนั่นเอง 😮 ไม่เชื่อ? ไปดูตัวอย่างด้านล่างเลยฮะ สูตรของ Bayes คือเข้าใจง่ายมากๆ P(A | B) = P(B | A) P(A) / P(B) สมการนี้แก้มือเองได้เลย

Bayes Theorem
Bayes Theorem
  • P(A) = ความน่าจะเป็นของเหตุการณ์ A
  • P(B) = ความน่าจะเป็นของเหตุการณ์ B
  • P(A|B) = ความน่าจะเป็นของเหตุการณ์ A ถ้าเหตุการณ์ B เป็นจริง
  • P(B|A) = ความน่าจะเป็นของเหตุการณ์ B ถ้าเหตุการณ์ A เป็นจริง

ตัวอย่างแรก

สมมติเรากำลังจะไปขอไลน์ผู้หญิงคนนึงที่เราชอบ ความน่าจะเป็นที่ผู้หญิงคนนั้นจะให้เราแอดไลน์เป็นเท่าไร ถ้าเค้ายิ้มให้เราตอนเราเดินเข้าไปจีบ? โดยขั้นตอนแรกต้องรู้ก่อนว่า P(A) และ P(B) ที่เราต้องการหาคืออะไร?

P(A|B) = P(B|A) P(A) / P(B)
P(แอดไลน์สำเร็จ | ผู้หญิงยิ้ม) = P(ผู้หญิงยิ้ม | แอดไลน์สำเร็จ) * P(แอดไลน์สำเร็จ) / P(ผู้หญิงยิ้ม)

จากประสบการณ์ที่ผ่านมาของเรา เข้าไปขอไลน์ผู้หญิงมาแล้ว 20 คน ได้ไลน์มา 5 คน คิดเป็น 5/20 = 0.25 อันนี้คือ P(A) และใน 5 คนที่เราขอไลน์มาได้ 3/5 คน ยิ้มให้เราด้วย คิดเป็น 0.60 อันนี้คือ P(B|A) และจากการสังเกตการณ์ของเรา ผู้หญิงไทยส่วนใหญ่ ยิ้มง่าย เป็นคนกันเอง 8/10 คน คิดเป็น 0.80 อันนี้คือ P(B)

ขั้นตอนถัดไป ก็แค่แทนค่าเข้าใปในสมการของเราได้เลยฮะ
P(A|B) = P(B|A) P(A) / P(B)
P(A|B) = (0.60 * 0.25) / 0.80
P(A|B) = 0.1875

สรุปว่าถ้าผู้หญิงยิ้มให้เราตอนเราเดินเข้าไปจีบ จะมีโอกาสได้แอดไลน์ P(A|B) = 0.1875 หรือคิดเป็นประมาณ 19% of success แฮร่!!

ตัวอย่างที่สอง

สมมติเราไปหาหมอตรวจโรค x ความน่าจะเป็นที่เราจะเป็นโรค x ถ้าเราตรวจเจอผล positive จะเป็นเท่าไร?

P(A|B) = P(B|A) P(A) / P(B)
P(เป็นโรค x จริงๆ | positive) = P(positive | เป็นโรค x จริงๆ) * P(เป็นโรค x จริงๆ) / P(positive)

จากสถิติประเทศไทย พบว่าคนไทยเป็นโรค x ประมาณ 6/100 คน คิดเป็น 0.06 อันนี้คือ P(A) และถ้าเกิดว่าเป็นโรค x จริงๆ ตอนไปตรวจโรคกับคุณหมอ จะมีโอกาสเจอผล positive สูงถึงร้อยละ 99 หรือ 0.99 อันนี้คือ P(B|A) หรือที่วงการแพทย์เรียกว่าค่า test sensitivity และตัวสุดท้ายคือความน่าจะเป็นที่จะตรวจเจอผล positive ในคนไทยทั่วไปพบว่าใน 100 คนที่ไปตรวจหาโรค x จะเจอผล positive ประมาณ 20 คน (i.e. เจอผล positive ไม่ว่าจะเป็นหรือไม่เป็นโรค x ก็ตาม) คิดเป็น 20/100 เท่ากับ 0.20 อันนี้คือ P(B)

ขั้นตอนถัดไป ก็แค่แทนค่าเข้าใปในสมการของเรา เหมือนตัวอย่างแรกเลย
P(A|B) = P(B|A) P(A) / P(B)
P(A|B) = (0.99 * 0.06) / 0.20
P(A|B) = 0.297

สรุปว่าถ้าเราตรวจเจอผล positive ความน่าจะเป็นที่เราจะเป็นโรค x ยังมีแค่ P(A|B) = 0.297 หรือประมาณ 30% เท่านั้นเอง

Alan Turing และเพื่อนๆที่ช่วยกันถอดรหัส Enigma
Scene ถอดรหัส Enigma ใน The Imitation Game
กลับมาที่ The Imitation Game รหัสลับ Enigma ที่เยอรมันใช้สื่อสารระหว่างกองทัพตอนสงครามโลกครั้งที่ 2 ไม่มีประเทศไหนคิดว่าจะถอดรหัสได้เลย Turing จึงเสนอว่าถ้าให้คนคิดคงใช้เวลาไปอีก 20 ล้านปี เพราะความเป็นไปได้ในการถอดรหัสมีมากถึง "159 ล้านล้านล้านวิธี" แต่ถ้าใช้เครื่องจักร (หรือคอมพิวเตอร์ในปัจจุบัน) ปัญหานี้น่าจะมีทางออก 😤 ปล. เครื่องจักรนั้น Turing เรียกว่า ACE หรือ Automatic Computing Engine

โดยเครื่องจักรที่ Turing สร้างขึ้นมาใช้ Bayes Theorem เป็นพื้นฐานในการคำนวณ โดยตอนหกโมงเช้าทุกวันจะดักจับรหัสที่เยอรมันส่งออกมา และใช้ข้อมูลใหม่ที่ได้มาอัพเดทความน่าจะเป็นในการถอดรหัส Enigma ให้มีความแม่นยำมากขึ้นนั่นเอง Turing และเพื่อนๆถอดรหัสสำเร็จในปี 1943 สงครามจบในปี 1945

Turing ที่เป็นวีรบุรุษสงคราม (แต่ไม่มีใครรู้ เพราะทำงานแบบลับๆให้รัฐบาล) ถูกจับในปี 1952 เนื่องจากตัวเค้าเป็น homosexual ซึ่งเป็นเรื่องผิดกฎหมายร้ายแรงในประเทศอังกฤษ ณ เวลานั้น Turing ยอมรับผิดและถูกจับทำหมันด้วยการฉีดฮอร์โมน แต่ตัวเองก็ยังทำงานอยู่ที่บ้านพักเพื่อพัฒนาคอมพิวเตอร์ต่อไป จนถึงวันที่ 7 มิถุนายน 1954 ที่เค้าตัดสินใจหยุดลมหัวใจตัวเองด้วยสารไซยาไนด์ เสียชีวิตตอนอายุเพียง 41 ปี 😢 

เดือนสิงหาคม ปี 2014 Queen Elizabeth II ของประเทศอังกฤษประกาศพระราชทานอภัยโทษแก่ Turing อย่างเป็นทางการ โดยยกย่องความสำเร็จของ Turing ในช่วงสงครามโลกครั้งที่สอง ว่ากันว่าการถอดรหัสลับ Enigma ได้สำเร็จ ช่วยร่นระยะเวลาของสงครามโลกครั้งที่สองให้จบเร็วขึ้นถึง 2 ปี และช่วยป้องกันไม่ให้เกิดการสูญเสียในชีวิตผู้คนถึง 14 ล้านคนทั่วโลก ...

The Imitation Game (2014) เป็นอีกหนึ่งเรื่องที่ดูจบแล้ว ต้องนั่งเขียน blog ถึงตีสามเลยเนี่ย 555+ หวังว่าจะเป็นประโยชน์กับเพื่อนๆที่อ่านทุกคนนะครับ

อ้างอิง

2 comments: