ในฐานะของคนที่เกิดในช่วงรอยต่อระหว่างยุคอินเทอร์เน็ตดั้งเดิมและเทคโนโลยีสมัยใหม่กับเน็ตไฟเบอร์ความเร็วสูงของ Gen Z ก็คงไม่ใช่เรื่องแปลกอะไรที่ช่วงหนึ่งผมจะมีโอกาสได้เล่นอยู่กับวัตถุสำหรับเก็บข้อมูลชนิดหนึ่งที่แบกโลกเอาไว้ได้ไม่ต่างจากที่คนยุคก่อนหน้ามีเทปและฟลอปปีดิสก์ใช้กันอยู่นานหลายปี
วัตถุที่ว่านั้นคือ ออปติคัลดิสก์ ตั้งแต่ Compact Disk (CD), Digital Video Disc / Digital Versatile Disc (DVD) และ Blu-ray Disc (BD) ที่มาในช่วงปิดเกมพอดี (ช่วง ค.ศ. 2010) ไม่กี่ปีก่อนที่โลกจะเข้าสู่ยุคออนไลน์อย่างเต็มรูปแบบหลังจากนั้น ทำให้ระบบเก็บข้อมูลเหล่านี้จำต้องค่อยๆ เลือนหายไปอย่างหลีกเลี่ยงไม่ได้
ทีนี้ปัญหาอย่างหนึ่งที่คนใช้ดิสก์หรืออุปกรณ์ในกลุ่มฟอร์แมตนี้มักจะเจอและฝังใจกันมากแบบข้ามกาลเวลาคือ ความบอบบางของแผ่นดิสก์ที่หากไม่ดูแลให้ดีก็จะประสบพบเจอกับ ‘รอย’ ที่สามารถเล่นงานข้อมูลอันมีค่าของเราได้ภายในพริบตา ยังไม่นับ Physical damage อีกร้อยแปดพันเก้าที่สามารถทำลายล้างแผ่นดิสก์ของเราได้แบบไม่เหลือซาก ด้วยความที่ฟอร์แมตชนิดนี้ไม่ได้ถูกป้องกันเอาไว้ในซองบรรจุตลอดเวลา รวมไปถึงการบันทึกข้อมูลนั้นก็เป็นการบันทึกลงไปในวัสดุที่เป็นแผ่น จึงมีโอกาสที่จะเสื่อมไปได้ตามกาลเวลา หากคุณภาพของวัสดุนั้นไม่ดีหรือถูกใช้งานหนักจนเกินไป
ถึงแม้ภาพลักษณ์บางส่วนจะถูกยึดติดกับความบอบบางในสายตาของผู้บริโภค อุปกรณ์เก็บข้อมูลประเภทออปติคัลดิสก์กลับขึ้นชื่อว่ามีความทนทานสูงเมื่อเทียบกับการเก็บข้อมูลในรูปแบบอื่นๆ และถ้าหากใช้วัสดุคุณภาพสูงมากๆ ในการขึ้นรูปแผ่น ก็สามารถเก็บข้อมูลได้นานเป็นศตวรรษเลยด้วยซ้ำ และที่เราเห็นกันก็คือ การที่หลายครั้งแผ่นมีรอยขนแมวหรือรอยขีดข่วนเต็มไปหมด แต่กลับเปิดติดและอ่านข้อมูลได้เหมือนไม่มีอะไรเกิดขึ้น
ไม่ใช่แค่กับออปติคัลดิสก์ ข้อมูลแทบทุกอย่างในโลกดิจิทัลที่ประกอบขึ้นมาด้วยบิท 0 และ 1 ล้วนมีความอ่อนไหวต่อการถูกรบกวน แก้ไข หรือทำลายทั้งนั้น แต่ทำไมโลกของเราจึงวิวัฒนาการมาได้จนถึงยุคอินเทอร์เน็ตโดยที่เหมือนมีใครคอยช่วยแก้จุดผิดพลาดในข้อมูลให้เราอยู่ตลอดเวลา
ทำไมคอมพิวเตอร์ถึงรู้ว่าข้อมูลตรงไหนของเรานั้นถูกต้อง ทั้งที่ไม่เคยเห็นข้อมูลชุดนั้นมาก่อน แถมในบางกรณียังแก้จุดผิดให้เราได้อีก จนเราแทบไม่รู้ตัวเลยด้วยซ้ำว่าคอมพิวเตอร์ได้ประมวลผลสิ่งเหล่านี้ไปแล้วในเวลาเพียงไม่ถึงเสี้ยววินาที
สิ่งที่เป็นเสมือนกระดูกสันหลังของโลกดิจิทัลนี้คือ ECC หรือ Error Correcting Code ที่ช่วยให้มนุษยชาติไม่ต้องมานั่งเทียบโค้ดเป็นล้านๆ ตัวด้วยตากันทุกวัน และ ECC นี่เองที่ถูกพัฒนามาพร้อมๆ กันกับวงการคอมพิวเตอร์ โดย ECC ที่โด่งดังที่สุดนั้นก็เห็นจะไม่พ้นโค้ดที่ชื่อว่า ‘Reed-Solomon’ ซึ่งเราจะมาดูกันว่าเบื้องหลังของเครื่องมืออันแสนล้ำค่าชิ้นนี้ สามารถปฏิวัติวงการวิทยาศาสตร์และเทคโนโลยีจนกระทั่งเปลี่ยนโลกทั้งใบมาได้อย่างไร
ERROR นั้นมาจากไหน
ระบบคอมพิวเตอร์นั้นเก็บข้อมูลผ่านระบบเลขฐานสอง ซึ่งประกอบไปด้วยสองสถานะที่แตกต่างกันอย่างชัดเจนคือเลข 0 และเลข 1 เท่านั้น เพื่อนำมาสร้างเป็น ‘บิต’ หน่วยข้อมูลที่เล็กที่สุดในโลกคอมพิวเตอร์ โดยการควบคุมสถานะของตัวเลขสองตัวนี้ก็มักจะทำด้วยการใช้กระแสไฟฟ้าผ่านวงจรการประมวลผลต่างๆ ตั้งแต่หลอดสุญญากาศจนกระทั่งไมโครชิพ ในปัจจุบัน
เลข 0 และ 1 อาจดูเป็นสิ่งที่ควบคุมได้ง่าย เพียงแค่เปิดหรือปิดกระแสไฟฟ้าในวงจร เราก็สามารถสร้างข้อมูลจากเลขฐานสองได้อย่างรวดเร็ว แต่ปัญหาคือความซับซ้อนของระบบคอมพิวเตอร์ที่สามารถทำให้ค่าเหล่านี้ ‘ผิด’ ไปจากที่มันควรจะเป็นได้เช่นกัน
สาเหตุทางกายภาพอย่างกระแสไฟฟ้าที่ลัดวงจร ระบบแผงวงจรที่ไม่มีคุณภาพ หัวอ่านข้อมูลที่เสียหาย หรือข้อผิดพลาดเชิงโครงสร้าง ฯลฯ ก็เป็นสาเหตุหนึ่งที่ข้อมูลเกิดอาการ Error ได้ รวมถึงระบบการประมวลผลเชิงโปรแกรมทั้งหลายที่ในบางครั้งก็มีการบีบอัดข้อมูลหรือเปลี่ยนแปลงตัวเลขบิตเหล่านี้ไปได้ ส่งผลให้ข้อมูลเสียหายไปในระยะยาว การโปรแกรมที่ผิดไปจนเกิด Bug หรือเล่นงานระบบจนล่ม เอาเป็นว่าถ้าจะลิสต์ให้ครบ Error สามารถเกิดได้จากอีกหลากหลายความเป็นไปได้ ทั้งจากตัวเครื่องจักรและมนุษย์ด้วยกัน ดังนั้น Error ในโลกคอมพิวเตอร์จึงไม่ใช่เรื่องแปลก และเป็นสิ่งที่มีโอกาสเกิดขึ้นอย่างหลีกเลี่ยงไม่ได้ด้วย การที่เราจะค้นหาวิธีแก้ไขข้อผิดพลาดเหล่านี้จึงพัฒนาควบคู่กับการประดิษฐ์คิดค้นคอมพิวเตอร์ เพื่อที่จะทำอย่างไรก็ได้ให้ข้อผิดพลาดหรือ Error เหล่านี้เกิดขึ้นน้อยที่สุด หรือถ้าจะให้ดีกว่านั้นก็คือการยับยั้ง Error ก่อนที่จะมันจะเกิดขึ้นเลยด้วยซ้ำ
แล้วเราจะสู้กับ Error ได้อย่างไร
คำตอบแบบกำปั้นทุบดินก็คงไม่พ้นตรวจหาจุด Error ให้เจอแล้วแก้มัน เหมือนกับการที่สมองอันชาญฉลาดของมนุษย์นั้นสามารถจับผิดภาพ หรือแยกแยะสิ่งที่ถูกต้องออกมา ไปจนถึงแก้ไขสมการยากๆ ได้อย่างสบายๆ แต่ถ้าต้องทำสิ่งเหล่านี้กับชุดตัวเลข 0 และ 1 ที่มีความยาวมหาศาลในช่วงเวลาไม่กี่วินาทีพร้อมๆ กันกว่าล้านชุด ก็ไม่มีทางที่มนุษย์จะทำได้เลยแม้แต่น้อย แม้จะมีการเฉลยชุดข้อมูลที่ถูกมาให้เทียบเคียงก็ตาม
ถึงแม้ว่าคอมพิวเตอร์รุ่นแรกที่มีขนาดใหญ่เท่าห้องอย่าง ENIAC จะมีการตรวจสอบโดยมนุษย์เมื่อมีข้อผิดพลาดเกิดขึ้นในชุดข้อมูล แต่กับคอมพิวเตอร์สมัยใหม่ การจะทำแบบนี้ไปตลอดกับทุกสิ่งทุกอย่างที่ถูกเคลื่อนย้ายไปในระบบคอมพิวเตอร์ย่อมไม่ใช่เรื่องที่ใกล้เคียงความจริงดังที่ผมได้กล่าวไปแล้ว
เราจึงพยายามให้คอมพิวเตอร์ทำการตรวจสอบข้อมูลทุกอย่างด้วยตัวเองแทน กระบวนการนี้เป็นไปได้ภายใต้หลักการทางคณิตศาสตร์พื้นฐาน เช่นการเทียบจำนวนบิตกับข้อมูลต้นฉบับ หรือเอาคุณลักษณะทางการคำนวณมาใช้ในการไล่หาบิตที่ผิดปกติเพื่อตรวจหาจุดที่เกิดการ Error (ยกตัวอย่างเช่น หลักการ Parity Check) เราเรียกกระบวนการนี้คร่าวๆ ว่า EDC หรือ Error Detection Code ซึ่งสามารถตรวจจับได้แค่จุดผิดพลาดธรรมดาๆ ไม่สามารถแก้ไขการทำงานได้ สรุปคือ Error ก็ยังคงอยู่ ไม่ได้หายไปไหนอยู่ดี
ทีนี้เราจะมีวิธีที่เปรียบเสมือนเวทมนตร์ในการที่จะหาจุด Error และแก้มันให้ถูกต้องได้ไหม คำตอบคือมี และเราก็ใช้มันกันอยู่แทบจะตลอดเวลาในชีวิตประจำวันอยู่แล้ว กระบวนการที่ว่าก็คืออัลกอริทึมหรือกระบวนการ ECC: Error Correction Code ที่ไม่ใช่แค่หาจุด Error จนเจอ แต่ยังสามารถแก้สิ่งที่ผิดให้ถูกได้ ภายใต้ขอบเขตของกฎทางคณิตศาสตร์
ก่อกำเนิดเป็น ECC
ตำนานของ ECC เริ่มต้นขึ้นในช่วงปี 1940 โดย ริชาร์ด แฮมมิง (Richard Hamming) ซึ่งในขณะนั้นทำงานให้กับ Bell Telephone Laboratories อันโด่งดัง ยุคนั้นคอมพิวเตอร์ที่ใช้งานกันส่วนใหญ่ ถึงแม้จะเป็นโมเดลที่ดีที่สุด ก็ยังนับว่าเป็นเจเนอเรชันแรกๆ อยู่ การทำงานหรือให้ชุดคำสั่งจึงต้องทำผ่านบัตรเจาะรู (Punching card) โดยรุ่นที่แฮมมิงใช้ก็คือรุ่น Bell Model V ซึ่งทำงานด้วยหลักการ electromechanical ด้วยรีเลย์ เมื่อเครื่องเจอ Error ก็จะแสดงไฟสัญญาณแจ้งนักวิทยาศาสตร์หรือเจ้าหน้าที่เข้ามาปรับระบบให้ถูกต้อง แต่ถ้าไม่มีใครอยู่ คอมพิวเตอร์ก็จะประมวลผลโปรแกรมต่อไปทันที นี่เป็นอะไรที่แฮมมิงเบื่อหน่ายมาก เพราะเขาทำงานกับคอมพิวเตอร์มูลค่ามหาศาลนี้ในช่วงที่ไม่มีคนคอยช่วยดูระบบ ทำให้ต้องมานั่งรีสตาร์ททุกอย่างใหม่หมดถ้าเกิด Error (การรีสตาร์ทคอมพิวเตอร์ในยุคนั้นนี่เรียกว่า ‘หายนะ’ เลยนะครับ ไม่ใช่แค่กดปุ่มเปิดปิดแล้วจะใช้งานได้ทันที)
แฮมมิงถึงกับพูดกับตัวเองว่าทำไมคอมพิวเตอร์ที่ขึ้นชื่อว่าฉลาดถึงไม่สามารถแก้ไขจุด Error ที่ตรวจเจอได้ และเพื่อให้ชีวิตของเขา (และพวกเราทุกคนนั้นง่ายขึ้น) ‘Hamming Code’ จึงได้ถูกคิดค้นขึ้นในปี 1950 นับว่าเป็นบิดาของ ECC ทั้งหมดเลยก็ว่าได้
Hamming Code ทำงานโดยจัดข้อมูลแต่ละบิตเป็นกลุ่มจำกัด เช่น ก้อนละ 16 บิต แล้วจึงทำการตรวจสอบแต่ละตำแหน่งของบิตเพื่อเทียบกับผลลัพธ์โดยดำเนินการไปในรูปของ linear error-correcting code เช่นจำนวนบิต 1 ต้องรวมกันเป็นเลขคี่ผ่านการเช็ค Parity Bit เป็นต้น หากมีจุดผิด ตัวโค้ดจะทำการหาตำแหน่งและแก้บิตนั้นให้ถูกต้องในที่สุด (สำหรับการทำงานเบื้องต้นของ Hamming Code ผมแนะนำให้ชมวิดีโออธิบายของ 3Blue1Brown ที่อธิบายเอาไว้ได้อย่างดีเยี่ยม)
หลังจากการคิดค้น Hamming Code ทำให้งานวิจัยเกี่ยวกับ ECC ก็เกิดขึ้นตามมาเรื่อยๆ ไม่ว่าจะเป็นงานวิจัยของ Shannon และในที่สุดก็มาถึงคิวของกลุ่ม Reed-Solomon ซึ่งถูกคิดค้นขึ้นมาโดย เออร์วิง รีด (Irving S. Reed) และกุสตาฟ โซโลมอน (Gustave Solomon) ในปี 1960 ระหว่างที่พวกเขาทำงานกันอยู่ที่ MIT Lincoln Laboratory โดยเป็นการพัฒนามาจาก BCH code อีกทีหนึ่ง และถึงแม้จะทำงานในรูปของ Linear block code แต่กลับถูกพัฒนาให้ประมวลผลในรูป Polynomial code หรือพหุนามได้ด้วย เป็นการเพิ่มประสิทธิภาพและความสามารถในการแก้จุด Error ได้อย่างไม่เคยเป็นมาก่อน(โครงการ MESSE ที่จัดทำโดย SPACETH ก็ใช้อัลกอริทึมตัวนี้ในการเข้าและถอดรหัสข้อมูลด้วยเหมือนกัน)
หลังจาก Reed-Solomon ก็มี ECC ที่ทำงานได้เร็วขึ้นอีกถูกคิดค้นขึ้นตามมา เช่น Turbocode ที่ทำงานในรูปของ Forward Error Correction (FEC) ทำให้มีประสิทธิภาพสูงแบบสุดๆ เจ้า ECC ตัวนี้จึงถูกใช้กับการส่งข้อมูลในระบบ 3G/4G และ Deep Space Communication หรือการสื่อสารในห้วงอวกาศลึกกับยานสำรวจที่มุ่งหน้าออกจากระบบสุริยะเป็นต้นครับ
การใช้งานของ ECC ในปัจจุบัน
นอกจากสิ่งที่ผมได้เล่าไปแล้ว ECC ได้ถูกผนวกกลายเป็นส่วนหนึ่งของระบบประมวลผลเชิงดิจิทัลไปเป็นที่เรียบร้อย หากแยกออกจากกันก็นับว่าน่าจะเป็นหายนะเลยทีเดียว ทุกที่ที่มีชิปหรือ Microprocessor อยู่ หรือระบบจัดเก็บข้อมูลในรูปแบบใดรูปแบบหนึ่ง ย่อมมีสิทธิ์ที่ ECC จะเป็นชุดคำสั่งที่ถูกคำนวณเข้าไปเป็นพื้นฐานหลัก ตั้งแต่ตู้เย็นอัจฉริยะไปจนถึงรถยนต์ไร้คนขับ เครื่องบินไปจนถึงฟาร์มฐานข้อมูลขนาดยักษ์ สมาร์ตโฟนไปจนถึงระบบกริ่งประตูและกริด IoT ในบ้านของคุณเอง ล้วนมีสิทธิ์ที่จะทำงานได้อย่างถูกต้องผ่าน ECC ไม่ทางใดก็ทางหนึ่ง
ปัจจุบันเราได้เริ่มนำ AI และระบบ Machine Learning มาช่วยในการแก้ไขจุดผิดพลาดในลักษณะที่ใกล้เคียงกับมนุษย์ นี่อาจเป็นจุดเปลี่ยนสำคัญของวงการเลยก็ว่าได้ ถึงแม้ว่าตัว ECC ก็ยังคงเป็นรากฐานที่ทำให้ AI ของเราทำงานได้ถูกต้องอยู่ดี
ท้ายที่สุดแล้ว การใช้งาน ประยุกต์ และพัฒนาความสามารถของ ECC ก็ยังคงดำเนินต่อไปเพื่อตอบโจทย์กับปริมาณการส่งถ่ายข้อมูลอันมหาศาลของมนุษยชาติ และเพื่อค้นหาระบบที่กระทบต่อ Transfer Rate น้อยที่สุดให้ได้ สิ่งหนึ่งที่ผมสนใจสุดๆ คือ เมื่อมนุษย์ได้บุกเบิกอาณานิคมในห้วงอวกาศเข้าแล้วจริงๆ เราคงต้องพึ่งพาระบบสื่อสารและการประมวลผลที่เร็วที่สุด เพื่อที่จะได้ทำให้การสื่อสารนั้นดีเลย์น้อยที่สุด (เท่าที่ทำได้จากความเร็วแสงของคลื่นแม่เหล็กไฟฟ้า) จะว่าไปแล้ว ในยุคที่ข้อมูลสำคัญดั่งพระเจ้า ความผิดพลาดจึงไม่ใช่ข้อยกเว้น
ต้องขอบอกเลยว่าตอนนี้วงการคอมพิวเตอร์ได้พัฒนาไปไกลกว่าที่เราคิดแล้วจริงๆ จากการเข้ามาของ Quantum Computer ที่มีการทำงานในรูปแบบที่ตรงกันข้ามกันอย่างสุดขั้วจากระบบคอมพิวเตอร์ที่เราคุ้นเคยกัน ทำให้ ECC ปกติใช้งานไม่ได้เลย เพราะแค่ระบบพื้นฐานของเทคโนโลยี Quantum ที่เป็น Qubit ก็ทำงานต่างจากบิตปกติที่มีแค่สองสถานะตั้งแต่เริ่มแล้ว โดย Qubit นั้นเป็นได้ทั้งสองสถานะในเวลาเดียวกันผ่านหลักการที่เราเรียกกันว่า Quantum Entanglement การจะใช้ข้อได้เปรียบของระบบฐานสองที่คาดเดาได้จึงสามารถโยนทิ้งออกนอกหน้าต่างไปได้เลย
ทีนี้เพื่อให้การพัฒนา Quantum Computer สามารถไปต่อได้ จึงต้องมีการคิดค้น QEC: Quantum Error Correction ขึ้นมาเพื่อทำการแก้ปัญหาค่าความคลาดเคลื่อนและ Noise ต่างๆ ในข้อมูลเชิง Quantum
QEC ยังคงอยู่ในสถานะวิจัยและทดลองไม่ต่างจากระบบ Quantum Computer เลย ซึ่งถ้าสำเร็จ มนุษยชาติก็จะได้เครื่องมือประมวลผลที่ทรงพลังอันเทียบได้กับตอนที่เราค้นพบการใช้งาน ‘ไฟ’ เลยทีเดียว ดังนั้น การวิจัยและพัฒนาในสาขานี้จึงเป็นอะไรที่น่าจับตา เพราะการแก้ไขข้อผิดพลาดนี่เอง ที่ทำให้มนุษย์เราเดินหน้าต่อไปในเอกภพและกฎเกณฑ์ของธรรมชาติที่ไม่แน่นอนนี้ได้อย่างมั่นคง
อ้างอิง
https://www.youtube.com/watch?v=X8jsijhllIA
https://www.youtube.com/watch?v=b3NxrZOu_CE
https://downloads.bbc.co.uk/rd/pubs/whp/whp-pdf-files/WHP031.pdf
https://en.wikipedia.org/wiki/Error_correction_code
https://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction
https://en.wikipedia.org/wiki/Quantum_error_correction#The_Shor_code
Tags: Scientifica, ECC