AI FUD

เมื่อเดือนก่อนได้มีโอกาสไปแบ่งปันเรื่องพื้นฐานเกี่ยวกับ Generative AI ให้กับลุกค้าและเพื่อน ๆ ที่ทำงานให้กับลูกค้า ซึ่งนอกงานจะเป็นการทำผลงานในหน้าที่การงานแล้วเรามองว่ามันเป็นการแบ่งปันความเห็นส่วนตัวของเราที่มีต่อ กระแสของ AI ที่มาแรงมาก ๆ โดยเรามองว่าหลาย ๆ คนอาจจะให้ความสำคัญกับ AI มากจนเกินไป เช่น

  • บ้างก็ว่ามันจะมาแทน developer จนตกงานผ่านการสร้าง fear, anxiety, and depression
  • บ้างก็ว่าบริษัทต้องสร้างภาพให้นักลงทุนเชื่อว่า AI จะทำให้บริษัทเติบโต
  • บ้างก็ว่าเราไม่ต้องสนใจคุณภาพกันแล้ว เพราะหากเจอปัญหา AI ก็สามารถแก้ให้ได้โดยที่คนไม่ต้องเข้าใจรายละเอียดทั้งหมด

ซึ่งการให้ความสำคัญเหล่านี้ไม่ผิด แต่การให้มากเกินไปทำให้เรามองข้ามเรื่องพื้นฐานเกิดเป็นปัญหาตามมา เช่น

  • บริษัทไล่ developer ออกก่อนหน้านี้ เวลาผ่านไปมีความพยายามจ้าง developer กลับมา หมายความว่ายังไง
  • นักลงทุนเชื่อว่า user ชอบ product ที่มี AI แต่ระยะยาวแล้ว user ไม่ค่อยได้ประโยชน์จาก AI เท่าไร
  • AI ทำให้ coding เร็วขึ้นจริงมาก แต่การส่งมอบ software ยังคงช้าอยู่
  • เอา AI technique และ practice ต่าง ๆ มาใช้ แต่ระบบยังเจอ bug อยู่ ก็ยังต้องเข้าไปแก้ไขอยู่ เพราะอะไรกันนะ

การเข้าใจพื้นฐานของ Generative AI ว่ามันมาจากอะไร มันทำงานยังไง มันสร้างคำตอบมาให้เราได้ยังไง ทำให้เราเข้าใจขีดจำกัดของมันและวิธีอยู่ร่วมกับมันโดยไม่เป็นภาระในระยะยาวทีหลัง

AI และ Machine Learning

หากเราพูดถึง Artificial Intelligence (AI) มักจะย่อมาจาก Generative AI แท้จริงแล้วสองสิ่งนี้มันไม่เหมือนกัน โดย

AI คือ “ความสามารถ” ของระบบที่สามารถทำงานที่ต้องการความฉลาดคล้ายกับของคน เช่น การเรียนรู้ การแก้ปัญหา การตัดสินใจ เป็นต้น ซึ่งเกิดจากการนำ “ศาสตร์” ​ด้าน computer science, engineering, math มาสร้าง environment ที่ทำให้ระบบเรียนรู้เพื่อเพิ่ม “โอกาส” ให้ทำงานได้บรรลุตามเป้าหมาย

จะเห็นว่า AI สามารถทำงานได้แต่ก็มี “โอกาส” ที่จะบรรลุตามเป้าหมายหรือไม่ก็ได้ (non-deterministic) ขึ้นอยู่กับโอกาสและ environment* แปลว่า AI สามารถทำงาน “ผิดพลาด” ได้ต่อให้คำสั่งในแต่ละรอบจะเหมือนกันก็ตาม

*Technically แล้วเราสามารถทำให้ AI ทำงานแบบ deterministic ได้ผ่านการควบคุม environment, inputs และ algorithm ที่ใช้ เช่น ป้อน inputs เข้าไปใน machine learning model ใน inference mode แบบเดียวกันกับที่ใช้ตอน training mode เป็นต้น

Machine learning คืออะไร

ในส่วนของศาสตร์ที่ใช้นั้น หนึ่งในแขนงที่ได้รับความนิยมซึ่งเป็นพื้นฐานของ Generative AI คือ machine learning ซึ่งจะใช้ algorithm ที่คนเขียนเพื่อให้ระบบเรียนรู้จากข้อมูล ซึ่งมันจะต่างกับ programming แบบเดิมที่ระบบจะประมวลผลและทำงานได้ตรงตามเป้าหมายที่เราวางไว้ได้อย่างแน่นอน (deterministic) ขึ้นอยู่กับว่ามันไปตกในกรณีไหนและ inputs เป็นแบบไหนก็เท่านั้น

Machine learning ประกอบไปด้วย

  1. Inputs ซึ่งจะเป็นตัวหนังสือ ตัวเลข รูปภาพก็ได้
  2. Model ก็คือ algorithm ที่มาพร้อมกับ parameters ที่สามารถเปลี่ยนผลลัพธ์จากการเรียนรู้ได้
  3. Training ก็คือ process ในการนำ model มาประมวลผลจาก inputs เพื่อทำให้ระบบเรียนรู้และจับ pattern
  4. Inference ก็ตือ process หลังจาก training ในการนำ model มาประมวลผลจาก inputs เพื่อให้ระบบทำงานตามเป้าหมายที่กำหนดไว้

Machine learning สามารถแบ่งได้หลายแบบ หนึ่งในนั้นคือแบ่งตามเป้าหมายของระบบซึ่งมีกัน 2 เป้าหมาย ก็คือ เน้นการทำนายผลหรือจัดกลุ่ม กับอีกแบบคือเน้นจับ pattern จากข้อมูลที่ดูไม่เกี่ยวข้องกันตั้งแรก

ยกตัวอย่าง

ทายคำถัดไปจากประโยค “A hungry cat is eating …”

ในการ training คน (ในบริบทนี้ก็จะเป็น data scientist หรือ machine learning researcher) ก็จะเตรียม inputs ในรูปแบบของตัวหนังสือจากแหล่งต่าง ๆ จากนั้นก็นำ model มาประมวลผลจาก inputs ใน algorithm จากนั้น model ก็จะทำการทายคำถัดไป แล้วคนก็จะทำการตรวจสอบผลลัพธ์ว่าถูกต้องตามที่คาดหวังไว้ไหม ถ้าไม่ก็จะทำการปรับ tune model และหรือ parameters แล้วก็ทำการ train ต่อวนไปจนได้ผลลัพธ์ที่ต้องการ สุดท้ายก็นำ model มาใช้จริงใน inference mode เพื่อทายคำจากประโยคอะไรก็ได้นั่นเอง

Generative AI

กลับมาที่ Generative AI จะเห็นว่ามันเป็นส่วนนึงของ AI โดยงานที่ทำก็คือการ “generate” content ใหม่ขึ้นมาโดยมีเป้าหมายคือ content ที่ออกมาจะต้องตรงกับความต้องการของ user

ซึ่ง algorithm ภายใต้ model ก็คือ neural network ซึ่งจัดโครงสร้างให้ model เกิดการเรียนรู้จากหลาย ๆ layer มารวมกัน เปรียบเสมือนระบบประสาทของคน (neuron) ที่เชื่อมกันโดยนำสิ่งที่เกี่ยวข้่องกันในหลาย ๆ บริบทมาเชื่อมต่อกันเกิดเป็นบริบทและความเข้าใจที่มากขึ้น โดยเราจะเรียกกระบวนการนี้ว่า deep learning เป็นส่วนนึงของ machine learning อีกที

ยกตัวอย่างเดิม

ทายคำถัดไปจากประโยค “A hungry cat is eating …”

ในการ training คนก็จะเตรียม inputs ในรูปแบบของตัวหนังสือจากแหล่งต่าง ๆ จากนั้นก็นำ model มาประมวลผลจาก inputs ใน neural network ซึ่งภายในแต่ละ layer ก็จะจับ pattern และหรือความเกี่ยวข้องต่าง ๆ เช่น layer แรก ๆ อาจจะจับ pattern ของโครงสร้างประโยค grammar อีก layer นึงอาจจะดูว่าเป็นประโยคคำถามหรือบอกเล่า อีก layer นึงอาจจะดูความเกี่ยวข้อง animal + eat -> food ซึ่ง output ของ model ก็จะออกมาเป็นคำที่ทายออกมาพร้อมกับ score ในรูปแบบของความน่าจะเป็นว่าคำไหนดูเป็นไปได้ ตรงกับบริบทและตรงตามความต้องการมากที่สุด

Large Language Model (LLM)

LLM ก็คือ machine learning model ที่สามารถนำ inputs จากข้อมูลตัวหนังสือจำนวนมากมาทำงานที่เกี่ยวข้องกับตัวหนังสือ เช่น การสรุป การแปลภาษา การตั้งคำถาม รวมไปถึงการเขียน code เป็นต้น โดยผลลัพธ์จะอยู่ในรูปแบบตัวหนังสือที่คนเข้าใจได้ ซึ่งรูปแบบของ LLM ที่ได้รับความนิยมมากที่สุดคือ Generative Pre-trained Transformer (GPT) แต่ละ LLM ก็จะมีความสามารถที่ต่างกันตามเป้าหมายที่ต้องการ แปลว่าการ training ก็จะต่างกันไปด้วย เช่น model ที่เก่งการแต่งนิยายมากก็จะต่างจาก model ที่เก่งการ coding มาก ๆ

เบื้องหลังที่ทำให้ LLM มีความสามารถเหล่านั้นคือคณิตศาสตร์จากหลากหลายแขนง เช่น

  • Vector และ matrix สำหรับเก็บความหมาย ความสัมพันธ์และบริบทของคำที่เกี่ยวข้องกันในหลายมิติ
  • Calculus สำหรับปรับปรุง model ให้ error น้อยลงผ่าน backpropagation และ gradient descent
  • Probability สำหรับทายคำถัดไปเป็นลำดับ ๆ

ก่อนที่ตัวหนังสือจะเข้ามาอยู่ใน vector จะต้องผ่านการทำ tokenization ซึ่งตัวหนังสือจะถูกตัดออกเป็นตัวหนังสือแยกกันเล็ก ๆ โดยวิธีการแบ่งก็แล้วแต่ model ที่ใช้ จากนั้นก็นำ token ที่ได้มาเข้า vector เราจะเรียกว่า embeddings ซึ่งในตอนเริ่ม training phase ครั้งแรก token ก็จะมีค่า vector แบบสุ่ม ๆ กัน พอ train ไปหลาย ๆ รอบเรื่อย ๆ ค่า vector ก็จะเปลี่ยนไปจากการนำ weight/parameters ของ neural network ในรูปแบบของ matrix มาคูณเข้าไป (multiplication) ทำให้คำที่เกี่ยวข้องกันในบริบทใกล้ ๆ กันก็จะมาอยู่ใน vector ระนาบใกล้ ๆ กัน ซึ่งจะมีผลต่อ probability ที่ model จะหยิบคำถัดไปมาตอบ

การที่เราเข้าใจพื้นฐาน LLM ทำให้เราไม่สามารถสรุปได้ว่า LLM มัน “เข้าใจ” เหมือนกับวิธีที่คนเข้าใจ จนกว่าเราจะพบว่า neuron ในสมองมันทำงานร่วมกันยังไงแบบละเอียด และด้วยความที่มันเป็น probability ก็แสดงว่ามันมี “ความน่าจะเป็น” ที่ผลลัพธ์จะออกมาผิด เราควรจะ validate output ที่ออกมาจาก LLM นอกจากนั้นแล้วคุณภาพของ LLM มันก็ขึ้นอยู่กับ inputs ที่ใส่เข้ามาและวิธีการ train ด้วย ถ้าเอาขยะเข้า ผลออกมาก็มีโอกาสเป็นขยะสูง

Generative Pre-trained Transformer (GPT)

GPT คือ LLM architecture ที่ได้รับความนิยมมากที่สุดซึ่งจะเน้นไปที่การ generate content ใหม่ ๆ จาก model ที่ได้ผ่านการ train มาแล้ว โดยวิธีการทำงานของ transformer architecture คร่าว ๆ คือมี 2 ขั้นตอนใหญ่ ๆ

  1. Attention: Token แต่ละตัวที่จะเทียบเคียง token ทั้งหมดที่อยู่ในกรอบเดียวกัน (window) เพื่อเข้าใจบริบทของข้อความทั้งหมด แต่ละ token ก็จะมี context ที่เกี่ยวข้องกัน เช่น animal + eat -> food
  2. Feed-forward (MLP): นำ context ทั้งหมดมาประมวลผลเพื่อประเมินว่าข้อความถัดไปที่จะ generate คืออะไรให้มันสอดคล้องกับ context มากที่สุด

โดย process นี้ก็จะวนไปเรื่อย ๆ token ที่เกิดจากข้อความถัดไปก็จะเข้า attention และ MLP ไปด้วย เกิดเป็นข้อความใหม่ ๆ ยิ่งเข้าไปหลายรอบมากเท่่าไร ระบบก็จะมี context ที่สมบูรณ์มากขึ้นเท่านั้นภายใน window ที่กำหนด

ข้อจำกัดของ transformer

  1. Attention is limited: การที่ token แต่ละตัวที่จะเทียบเคียง token ทั้งหมด N ตัว หมายความว่าจะต้องมีการประมวลผล N x N ครั้ง หมายความยิ่งเรามี token เยอะ context เราก็จะเยอะ ส่งผลให้ระบบต้องการ resource ทั้ง CPU และ memory มากขึ้น แต่ว่า resource (hardware) มันมีจำกัด ทำให้ model ต้องตั้งกรอบ (context window) ขึ้นมาจำกัดว่าให้ประมวลผลเท่าไรถึงจะ balance ระหว่างการทำงานที่บรรลุเป้าหมายและ resource ที่ต้องใช้ และ response time ที่ user พอรับได้ ซึ่งหาก context ของเรามันเยอะเกิน window สิ่งที่ transformer ทำคือมันจะตัด (truncate) token/context ออก ทำให้เจอปัญหา อย่าง context rot (LLM ทำงานได้แย่ลงเมื่อจำนวน token เยอะขึ้น) ได้ผลลัพธ์แบบหลง ๆ ลืม ๆ ข้อความบางส่วนไป หรือ coding ออกมาไม่ถูก เพราะจำ context ของทุก file ที่ไปอ่านมาไม่ได้
  2. LLMs are forward-only generators, not editors: จากการทำงานของ MLP มันจะไม่กลับไปแก้ไขข้อความที่เคย generate มาแล้ว ในทางกลับกัน มันจะพยายามทำงานให้บรรลุเป้าหมายโดยจะพยายาม generate ข้อความถัดไปให้ได้ แปลว่ามันจะไม่กลับไปทบทวนว่าทั้งหมดที่ generate มามันถูกต้องหรือเปล่า ต่างจากคนที่สมองคนจะสามารถคิดไตร่ตรองได้ว่าทั้งหมดที่ผ่านมาผิด สั่งให้หยุดการกระทำและย้อนกลับไปแก้ไขได้
  3. LLMs can’t learn automatically all the time: Technically แล้ว LLM สามารถเรียนรู้และเก่งขึ้นได้หลังจากเข้าสู่ inference mode แล้ว แต่ในทางปฏิบัติแล้วมันก็สามารถเรียนรู้ออกทะเลไปไกลได้มาก ๆ เช่นกัน วิธีแก้ก็คือเอา data scientist/ML researcher มาคอยดูและหยุดเมื่อผลของ model เริ่มออกทะเล ต่อมาก็คือ context ทั้งหมดที่เกิดจากการ train ใน model นึงจะไม่สามารถ port เข้าไปที่ model ใหม่ ๆ ได้ เพราะ inputs ที่ใช้ในการ train model เดิมไม่เหมือนกับ model ใหม่นั่นเอง ส่งผลให้ user จะเจอปัญหาว่าประสิทธิภาพของการทำงานลดลงหลังจากเปลี่ยน model ใหม่ในช่วงแรก คุณอาจจะบอกว่างั้นก็ไม่ต้องเปลี่ยน model แต่นั่นก็หมายความว่าคุณก็จะเสียโอกาสใช้ความสามารถหรือข้อมูลใหม่ ๆ ที่ model ใหม่ train มา นั่นเป็นเหตุผลว่าทำไมบริษัทใหญ่ ๆ ถึงไม่เน้นทำ model ที่เจาะจงสำหรับองค์กร หรือย่อยลงไปในระดับ code repository เพราะผลที่ตามมามันไม่คุ้มกับต้นทุนด้านคนและ technical

Generative AI technique/practices

จากข้อจำกัดของ transformer ทำให้เกิด technique และ practice ต่าง ๆ เช่น

สุดท้ายแล้วกลับมาดูที่ภาพใหญ่ทั้งหมดหลังจากใช้ Generative AI

GenAI อาจจะไม่ได้ทำให้การส่งมอบเร็วขึ้น จริงอยู่ที่การ coding, refactoring หรือการทำ prototype มันเร็วขึ้นมาก ๆ แต่การส่งมอบ software มันมีมากกว่านั้น ทั้งในด้านคน การสื่อสาร ทักษะ ด้าน process และด้าน technical อย่าง architecture และ environment ทั้งหมดล้วนแล้วแต่มีผลต่อความเร็วและการส่งมอบ software

หากเราไม่ได้คำนึงถึงภาพรวม หลังจากที่นำ Generative AI เข้ามา เราก็จะเห็นปัญหาของระบบมากขึ้นกว่าเดิม เช่น

  • หลังจากเขียน code เสร็จก็ให้คนบางกลุ่มมา code review -> เขียน code เร็วขึ้น ต้อง review เยอะขึ้น -> กลายเป็นว่ารอ review นานกว่าเดิม
  • หลังจากทำชิ้นงานเสร็จก็ให้คนบางกลุ่มมาทดสอบ -> ทำเสร็จเร็วขึ้นต้องทดสอบเยอะขึ้นภายในเวลาเท่าเดิม -> กลายเป็นว่ารอทดสอบนานกว่าเดิม
  • ก่อนจะพัฒนาก็มีการเก็บและวิเคราะห์ requirement จาก business -> requirement มาไม่ครบไม่ดีแต่พัฒนาชิ้นงานเสร็จไปไกลแล้ว -> กลับมา rework ใหม่ของใหม่ออกช้ากว่าเดิม

Generative AI ไม่ได้ช่วยให้่ปัญหาทั้งหมดของการส่งมอบหายไป มันแค่ย้ายคอขวดจากการเขียน code ไปที่ส่วนอื่นเท่านั้น ไมไ่ด้หมายความว่า Generative AI ไม่ดี แต่ควรจะเผื่อการปรับปรุงและพัฒนาส่วนอื่น ๆ ในภาพรวมให้ดีขึ้นด้่วย ซึ่งวิธีปรับปรุงก็คือ

  • ด้านคน: เสริมทักษะและความเข้าใจในการใช้ Generative AI พร้อมทั้งข้อจำกัดของมัน รวมไปถึง engineering practice ที่เราใช้กันอยู่มาแต่เดิมเนี่ยแหละ อย่าง TDD, CI/CD, pair development เป็นต้น ของพวกนี้่มันมีอยู่แล้ว มันแค่สำคัญมากขึ้นกว่าเดิม
  • ด้าน process: ลงทุนกับการทำ automation โดยเฉพาะ testing, release process, และลด waste ที่เกิดจากการพัฒนา software
  • ด้าน tech: ปรับปรุง architecture, observability ของระบบให้ดีขึ้น

สุดท้ายแล้วการนำ Generative AI มาใช้เป็นสิ่งที่ดี สิ่งสำคัญคือก่อนนำมันมาใช้ให้คำนึงถึงข้อจำกัดของมัน ภาพรวมของการส่งมอบ software และสุดท้าย value ที่ user จะได้จริง ๆ

Visualisation ช่วยเข้าใจพื้นฐาน Generative AI มากขึ้น