การผจญภัย 25 ปีของผมในโลก AI และ ML
(austinhenley.com)- เดิมทีไม่ได้ตั้งใจจะทำงานสาย AI/ML เลย
- แค่ใช้เครื่องมือที่จำเป็นต่องานไปเรื่อย ๆ ก็เลยได้ใช้ AI และ ML อย่างเป็นธรรมชาติ และสุดท้ายก็เข้ามาอยู่ในวงการนี้ (รองศาสตราจารย์ที่ CMU)
- ต้อนรับปีใหม่ด้วยการย้อนกลับไปดูโปรเจ็กต์ AI/ML สำคัญ ๆ ที่เคยมีส่วนร่วมตั้งแต่ปี 2000
if กับตัวเลขสุ่ม: ประสบการณ์เขียนโปรแกรมยุคแรก
- เริ่มจากวิดีโอเกม:
- ได้แรงบันดาลใจจากทามาก็อตจิ จึงลองพัฒนาเกมสัตว์เลี้ยงเสมือนด้วย VB6
- ใช้ตัวจับเวลาและเงื่อนไขเพื่อสร้างตรรกะง่าย ๆ:
- ค่าความหิวเพิ่มขึ้นทุก 10 วินาที
- ถ้าความหิวเกินระดับที่กำหนด สุขภาพจะลดลงทุก 3 วินาที
- ถ้าสุขภาพเหลือ 0 สัตว์เลี้ยงจะล้มลง
- ผลลัพธ์: เกมน่าเบื่อและไม่สนุก
- พัฒนาเกมช่วงมัธยมปลาย:
- พัฒนาเกมยิงยานอวกาศ 2D:
- ผู้เล่นต้องป้องกันคลื่นศัตรู (waves) และเก็บ power-up
- รูปแบบการปรากฏของศัตรูถูกเขียนด้วยประโยค
ifยาว ๆ โดยอาศัยตัวเลขสุ่มและสถิติการเล่นเกม (เวลาเล่น จำนวนครั้งที่ยิง HP เป็นต้น) - ผลลัพธ์:
- เกมเริ่มให้ความรู้สึกมีพลวัตและคาดเดาได้ยากขึ้นเล็กน้อย
- แต่ก็ยังไม่ดึงความสนใจได้นาน ผู้เล่นส่วนใหญ่เลิกเล่นอย่างรวดเร็ว
- พัฒนาเกมยิงยานอวกาศ 2D:
- สำรวจแนวคิด AI:
- ช่วงกลางทศวรรษ 2000 ซื้อหนังสือ Programming Game AI by Example เพื่อเรียนรู้วิธีนำ AI มาใช้ในเกม
- ตอนแรกยังนำไปใช้ไม่ได้ แต่ภายหลังก็ช่วยโปรเจ็กต์ต่าง ๆ ได้มาก
- ประสบการณ์ในช่วงนี้กลายเป็นพื้นฐานสำหรับการทดลองกลไกเกมที่ซับซ้อนและน่าสนใจยิ่งขึ้น
state machine และ higher-order function: การพัฒนาเกมช่วงมหาวิทยาลัย
- วิวัฒนาการของเกม:
- ตอนอยู่มหาวิทยาลัยได้ยกระดับการพัฒนาเกมขึ้นไปอีกขั้น และสร้างเกมที่มีคนเล่นหลายล้านคน
- บางเกมทำรายได้ได้จริง
- เมื่อทักษะการเขียนโปรแกรมเริ่มสุกงอม ก็สามารถนำสิ่งที่เรียนจากหนังสือมาใช้จริงได้
- การประยุกต์ใช้เทคนิค:
- Finite State Machine:
- ใช้สร้างรูปแบบพฤติกรรมของศัตรู
- Factory Pattern:
- ใช้สร้างและจัดการอ็อบเจ็กต์
- Higher-order Functions:
- ออกแบบให้สามารถผสมพฤติกรรมของศัตรูและอาวุธเข้าด้วยกันได้
- ตัวอย่าง:
- อาวุธส่ายไปทางซ้ายขวาด้วยแอมพลิจูด 25 องศา และยิงกระสุนเป็นทรงกรวยแคบ
- กระสุนจะเล็งนำเป้าหมายใกล้เคียงเล็กน้อย และมีโอกาส 1% ที่จะ ricochet (เด้งสะท้อน)
- Finite State Machine:
- ความมีชีวิตชีวาของเกม:
- ค่อย ๆ เติมองค์ประกอบแบบไดนามิกตามสถานะของเกมและอินพุตจากผู้เล่น
- ใช้ความสุ่มและความสามารถในการประกอบรวมเพื่อเพิ่มความหลากหลาย
- แนวทางนี้ไม่ได้ใช้แค่กับพฤติกรรมศัตรู แต่ถูกนำไปวางซ้อนเป็นเลเยอร์ทั่วทั้งเกม ไม่ว่าจะเป็นสไปรต์ particle effect เอฟเฟกต์เสียง กระสุน และแอนิเมชัน
- ผลลัพธ์:
- เกมมีชีวิตชีวาและสนุกขึ้นมาก
- แต่ก็ได้ตระหนักว่านี่ไม่ใช่ AI เป็นเพียงการผสมกันอย่างดีของ
ifกับการเรียกฟังก์ชัน
- แม้เกมจะให้ความรู้สึกเหมือน "มีชีวิต" ได้ แต่ในขั้นนี้ก็ยังเป็นเพียงตรรกะและฟังก์ชันที่ออกแบบด้วยมืออยู่ดี
ตรรกะอันดับหนึ่ง การแทนความรู้ Support Vector Machine และโครงข่ายประสาท: ประสบการณ์ช่วงต้นบัณฑิตศึกษา
- เริ่มเรียนปริญญาโท:
- หลังเรียนจบก็สมัครเข้าเรียนปริญญาโทแบบเฉียดเส้นตาย
- วิชาที่เลือกได้มีจำกัด จึงลงเรียน AI และ neural network
- รู้สึกผิดหวังกับวิชาที่เลือกแทนวิชาคอมไพเลอร์ที่อยากเรียนแต่แรก:
- เน้นทฤษฎีเชิงนามธรรมมาก โดยแทบไม่มีภาคปฏิบัติหรือการลงมือสร้างจริง
- ใช้เวลาถกเถียงกันมากกับเรื่องนิยามต่าง ๆ
- วิชา AI:
- ใช้ตำรา Artificial Intelligence: A Modern Approach (Third Edition)
- เรียนแนวคิดอย่างการวางแผน เอเจนต์ ตรรกะอันดับหนึ่ง และการแทนความรู้
- ได้คลังคำศัพท์ใหม่สำหรับการคิดปัญหา แต่ยังยากที่จะนำไปใช้จริง
- วิชา neural network:
- เรียนทฤษฎีอย่าง perceptron, Support Vector Machine (SVM), feedforward network, Hopfield model และ backpropagation
- ขาดคำแนะนำที่ชัดเจนสำหรับการลงมือทำจริง:
- คำตอบของอาจารย์ที่ว่า "ลองไปหาแพ็กเกจ MATLAB ดู" ทำให้รู้สึกท้อ
- พัฒนาโปรแกรมวิดีโอแชตแบนด์วิดท์ต่ำ:
- ใช้ OpenCV ตรวจจับใบหน้าและแยกบริเวณต่าง ๆ:
- จำแนกสถานะของมุมปาก ตำแหน่งคิ้วซ้าย และการลืมตาของตาขวา เป็นต้น
- รวบรวมภาพใบหน้าที่ติดป้ายกำกับแล้วหลายร้อยภาพจากฐานข้อมูล
- ส่งสถานะไบนารีที่จำแนกได้ผ่าน socket แล้วเรนเดอร์อวตารด้วย OpenGL
- ผลลัพธ์:
- ระบบไวต่อการเปลี่ยนแปลงของแสง ปรับพารามิเตอร์ยาก และใช้เวลาฝึกนาน
- OpenCV ใช้งานค่อนข้างยาก และการแก้โปรแกรมก็ยุ่งยาก
- ใช้ OpenCV ตรวจจับใบหน้าและแยกบริเวณต่าง ๆ:
- สิ่งที่ได้:
- เรียนรู้อะไรมากมายจากการลองผิดลองถูกหลายครั้ง
- เดือนมกราคม 2013 ได้อัปโหลดวิดีโอเดโมแรก ๆ และแชร์ออกไป:
- วิดีโอเดโม แม้จะดูสมัครเล่น แต่ก็มียอดดูเกิน 1,000 ครั้ง
- ช่วงเวลานี้เป็นกระบวนการเติบโตสำคัญในการเรียนรู้วิธีนำทฤษฎีมาสร้างของจริงและแก้ปัญหาในทางปฏิบัติ
decision tree, clustering และอัลกอริทึมแนะนำ: ประสบการณ์ในระดับปริญญาเอก
- เป้าหมายงานวิจัย:
- พยายามวิเคราะห์ข้อมูลล็อกจากตัวแก้ไขโค้ดเพื่อแก้ปัญหาต่อไปนี้:
- ระบุว่านักพัฒนาติดขัดหรือหลงทางอยู่ในโค้ดหรือไม่
- ทำนายว่าไฟล์ถัดไปที่นักพัฒนาจะเปิดสำรวจคือไฟล์ใด
- แนะนำโค้ดที่น่าจะเกี่ยวข้องได้อย่างแม่นยำ
- พยายามวิเคราะห์ข้อมูลล็อกจากตัวแก้ไขโค้ดเพื่อแก้ปัญหาต่อไปนี้:
- วิธีการเชิงสถิติที่ใช้:
- อัลกอริทึม C4.5: สร้าง decision tree
- K-means และ DBSCAN: clustering เหตุการณ์
- Apriori และ collaborative filtering: ค้นหาความสัมพันธ์ระหว่างเหตุการณ์
- ผลลัพธ์:
- แม้เป็นวิธีที่เรียบง่าย แต่ให้ประสิทธิภาพที่ทรงพลังอย่างน่าประหลาดใจ
- ในหลายกรณี วิธีเหล่านี้เพียงพอและได้ผลดีกว่าโครงข่ายประสาทที่ซับซ้อน
- ผลงาน:
- ตีพิมพ์งานวิจัย ผ่านประสบการณ์ฝึกงานหลายครั้ง และสร้างเครื่องมือสำหรับนักพัฒนา
- สำเร็จการศึกษาปริญญาเอก
- แหล่งข้อมูลที่เกี่ยวข้อง:
- บทความวิจัย: การวิเคราะห์ข้อมูลเกี่ยวกับวิธีที่นักพัฒนาค้นหาข้อมูล
Foraging and Navigations, Fundamentally: Developers Predictions of Value and Cost (PDF)) - รายงานฝึกงานที่ Microsoft: ประสบการณ์สร้างบอตรีวิวโค้ด
When users never use the features they asked for
- บทความวิจัย: การวิเคราะห์ข้อมูลเกี่ยวกับวิธีที่นักพัฒนาค้นหาข้อมูล
- ในช่วงปริญญาเอก เขาใช้เทคนิคเชิงสถิติเพื่อแก้ปัญหาจริง และสร้างผลงานที่มีความหมายทั้งในแวดวงวิชาการและภาคปฏิบัติ
ส่วนติดต่อผู้ใช้อัจฉริยะ: จุดเริ่มต้นงานวิจัยในฐานะอาจารย์
- กำหนดทิศทางงานวิจัยใหม่:
- ในปี 2018 ในฐานะอาจารย์สาย tenure-track ได้เลือก เครื่องมือสำหรับนักพัฒนาอัจฉริยะ (Intelligent Developer Tools) เป็นหัวข้องานวิจัย
- ตอนแรกแนวคิดยังคลุมเครือ แต่เริ่มจากโปรเจ็กต์ที่ใช้โมเดลทำนายเพื่อระบุและแก้ความเข้าใจผิดของโปรแกรมเมอร์ล่วงหน้า
- ข้อเสนองานวิจัยฉบับแรก:
- เป้าหมายของโครงการ:
- ใช้เทคนิควิเคราะห์โปรแกรมและโมเดลทำนายเพื่อระบุความเข้าใจผิดที่โปรแกรมเมอร์มือใหม่มีต่อการทำงานของโปรแกรม
- แก้ความเข้าใจผิดและอธิบายตรรกะโดยไม่รบกวนผู้ใช้
- สร้างโค้ดทดสอบเพื่อจับการเปลี่ยนแปลงพฤติกรรมของโปรแกรมที่ไม่ได้ตั้งใจ และป้องกันความเข้าใจผิดในอนาคต
- สรุป:
- บล็อกโพสต์ที่เกี่ยวข้อง: An inquisitive code editor: Overcome bugs before you know you have them.
- เป้าหมายของโครงการ:
- โปรเจ็กต์ที่สอง:
- วิจัยการทำนายความต้องการข้อมูลของโปรแกรมเมอร์ และสร้างส่วนติดต่อผู้ใช้แบบเรียลไทม์ตามนั้น
- ตัวอย่าง:
- สำหรับโปรแกรมเมอร์ที่กำลังสำรวจประวัติ Git ระบบจะแสดงชุด commit ที่แนะนำในรูปแบบภาพ
- การรวมงานวิจัยเข้าด้วยกัน:
- เสนอวิสัยทัศน์ขนาดใหญ่ชื่อ "Inquisitive Programming Environments as Learning Environments for Novices and Experts"
- ข้อมูลที่เกี่ยวข้อง:
- ผลลัพธ์และข้อจำกัด:
- โครงการเริ่มต้นได้สำเร็จพร้อมได้รับทุนสนับสนุน แต่เขาลาออกจากตำแหน่งอาจารย์ก่อนที่งานวิจัยจะเดินหน้าอย่างเต็มตัว
- ช่วงนี้ถือเป็นจุดเปลี่ยนสำคัญในการทำให้งานวิจัยด้านส่วนติดต่อผู้ใช้อัจฉริยะเป็นรูปธรรม และออกแบบวิสัยทัศน์ขนาดใหญ่ขึ้นมา
program synthesis และโมเดลภาษาขนาดใหญ่ (LLMs): ประสบการณ์ที่ Microsoft
- เข้าร่วม Microsoft:
- เดือนมกราคม 2022 เข้าร่วมทีม program synthesis ของ Microsoft
- ในปีเดียวกัน ChatGPT เปิดตัว ทำให้ AI เริ่มถูกนำไปใช้ในทุกวงการ และกลายเป็นช่วงเวลาที่เหมาะอย่างยิ่งในการทุ่มเทกับงานด้าน AI
- แนวทางที่ระมัดระวังต่อการใช้ AI:
- แม้อยู่ในทีม AI แต่ก็มีจุดยืนคัดค้านการใช้ AI หากไม่มีเหตุผลที่หนักแน่นพอ:
- ตั้งคำถามว่ามีเป้าหมายชัดเจนในการแก้ปัญหาของผู้ใช้หรือไม่
- ตรวจสอบว่าสามารถแทนที่ด้วยประโยค
ifง่าย ๆ ได้หรือเปล่า - พิจารณาว่าส่วนติดต่อแบบภาษาธรรมชาติเป็นตัวเลือกที่เหมาะสมจริงหรือไม่
- ความเห็นที่เกี่ยวข้อง:
- แม้อยู่ในทีม AI แต่ก็มีจุดยืนคัดค้านการใช้ AI หากไม่มีเหตุผลที่หนักแน่นพอ:
- โปรเจ็กต์สำคัญ
-
- งานวิจัยที่ใช้ค่าน้ำหนัก attention ของ LLM:
- ศึกษาว่าสามารถทำนายได้หรือไม่ว่านักพัฒนาจะให้ความสนใจกับจุดใดระหว่างการสำรวจโค้ด
- Follow-up Attention: An Empirical Study of Developer and Neural Model Code Exploration (pdf).
-
- AI tutor สำหรับ data science:
- บล็อกโพสต์ที่เป็นแรงจูงใจ:
- ปรับปรุงประสบการณ์ผู้ใช้ของ IntelliCode:
- สำรวจส่วนติดต่อผู้ใช้สำหรับข้อเสนอการแก้ไขโค้ดหลายบรรทัด
- Exploring 50 user interfaces for AI code.
- เครื่องมือบน LLM สำหรับนักวิทยาศาสตร์ข้อมูล:
- บล็อกโพสต์ที่เป็นแรงจูงใจ:
- เครื่องมือหลัก:
- เครื่องมือบน LLM สำหรับนักศึกษา:
- งานวิจัยการสร้าง copilot สำหรับองค์กร:
- บล็อกโพสต์: The pain points of building a copilot.
-
- งานปัจจุบันและอนาคต
- พัฒนาเครื่องมือ AI แบบอิสระ:
- หลังออกจาก Microsoft ก็ทุ่มเทให้กับโปรเจ็กต์ AI ส่วนตัว
- เครื่องมือสำคัญ:
- Mirror: เครื่องมือที่ขับเคลื่อนด้วย AI
- Promptclipper: เครื่องมือจัดการพรอมป์ต์
- พัฒนาเครื่องมือ AI แบบอิสระ:
- เขาพัฒนาโซลูชันนวัตกรรมผ่านโปรเจ็กต์ที่หลากหลายซึ่งอิงกับ AI และ LLM และยังคงทำวิจัยและพัฒนาเครื่องมือ AI อย่างต่อเนื่องในปัจจุบัน
ปิดท้าย
- เป็น 25 ปีที่สนุกมาก
- แล้วจากนี้จะทำอะไรต่อ? ก็จะสอน เรียนรู้ และสร้างสิ่งใหม่ต่อไป
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ifไม่กี่บรรทัดก็พอแล้ว ต้องมั่นใจด้วยว่าภาษาธรรมชาติเป็นอินเทอร์เฟซที่เหมาะสมจริง ๆ