Reinforcement Learning

และตัวอย่างพื้น ๆ


อันว่าโลกแห่ง Machine Learning (ML) นั้นก็กว้างนัก หากนับ ๆ ลูก ๆ ของมันก็คงไม่น้อยกว่า

  1. Supervised Learning ที่พยายามหาวิธีการ map จาก “จุด” หนึ่ง ๆ ไปยัง “ป้าย” (label) ที่เหมาะสม
  2. Unsupervised Learning ที่พยายามจัดกลุ่ม “จุด” (ที่ไม่มีป้าย) ต่าง ๆ ให้เป็นกลุ่มตามจำนวนที่เราต้องการ และในรูปแบบที่คิดว่า “งดงามที่สุด” (ทำไมมีแต่คำกำกวม ๕๕๕)
  3. Semi-supervised Learning ความลงตัวของโลกทั้งสองด้านบน การเอาจุดที่ไม่ได้ติดป้าย ประกอบกับจุดที่ติดป้ายจำนวนหนึ่ง และพยายามติดป้ายให้กับจุดที่เหลือทั้งหมด

(อ่านเพิ่มเติม Machine Learning เรียนอะไร, รู้ไปทำไม @iboss)

ทั้งสามด้านบนนั้นมีเนื้อหาที่ “เข้ากันได้ดี” อย่างน้อยก็เป็นไปในทางเดียวกัน หากแต่ยังมีอีกหนึ่งที่เราท่านอาจไม่ได้ยินนักว่าเป็น Machine Learning หรือแม้แต่คอร์ส Machine Learning ของ Andrew Ng ใน Coursera ก็ไม่ได้กล่าวไว้ นั่นก็คือ Reinforcement Learning

Reinforcement Learning ในมุมมองหนึ่งก็เหมือนการสอนสุนัขให้ทำตามสิ่งที่เราต้องการ ในมุมมองหนึ่งก็เหมือนการ trial-and-error คือ ลองผิดลองถูก และหากจะจำกัดความ Reinforcement Learning ไว้ดังนั้น ก็คงไม่ผิดจากความจริงมากนัก เพราะวิธีการฝึกฝน Machine ด้วยการนี้คือการ ให้รางวัล และการลงโทษ

การนิยามการแก้ปัญหาด้วยวิธี Reinforcement Learning ก็มีสิ่งที่ต้องกำหนด (เอาไว้ก่อน) ดังต่อไปนี้

  1. สถานะ (S) เช่น หากเป็นบอทสำหรับเล่นเกม เอ็กซ์โอ ก็คือภาพกระดานที่กำลังเล่นอยู่ในปัจจุบัน
  2. การกระทำ (A) ซึ่งอาจจะไม่เหมือนกันสำหรับแต่ละสถานะ เช่น ตอนต้นเกมของเอ็กซ์โอผู้เล่นย่อมมีทางเลือกในการเล่นมากกว่าตอนท้ายเกม
  3. รางวัล (R) ขึ้นอยู่กับแต่ละสถานะ หรือขึ้นอยู่กับการกระทำ หรือทั้งคู่ก็ได้ โดยทั่วไปสำหรับการเล่นเกมแล้วก็คือผลลัพธ์ของการเล่น เช่น ชนะอาจจะเป็นเลขบวก (+) แพ้อาจจะเป็นเลขลบ (-) หากเสมอก็อาจะเป็นศูนย์ (0) รางวัลประเภทนี้เรียกว่า รางวัลที่ไม่ได้รับทันที เนื่องจากต้องเล่นให้จบเกมเสียก่อน รางวัลยังมีอีกประเภทคือ รางวัลที่ได้รับในทันที เช่นสำหรับโปรแกรมควบคุมหุ่นยนต์ให้เดินได้เร็ว ๆ รางวัลอาจจะเป็นความเร็วของหุ่นบนต์ถ้าเดินได้เร็วก็จะได้รับรางวัลเยอะ ๆ ทันที

แล้วเป้าหมายของการกระทำคือ นโยบาย (Policy) ที่ดีที่สุดที่ นั่นคือได้รางวัลรวมที่คาดหวัง (Maximum Sum of Expected Rewards) เยอะที่สุด


ขอเร่ิมด้วยตัวอย่างการใช้ Reinforcement Learning แก้ปัญหาต่าง ๆ

วีดีโอด้านบน (ต้นฉบับจากนี่) คือการฝึกสุนัขหุ่นยนต์ให้เดินได้เร็วที่สุด โดยเนื่องจากการเดินต้องอาศัยการหมุนของข้อต่อหลายตัว ซึ่งยากยิ่งในการโปรแกรมด้วยมือคน (ลองนึกถึงโปรแกรมหุ่นยนต์ไต่เส้น แค่นั้นยังต้องปรับกันแทบสิ้นชีวา) หุ่นยนต์ตัวนี้ถูกตั้งโปรแกรมการเดินแบบง่าย ๆ เอาไว้ (แน่นอนว่าเดินช้า) แต่ว่าผู้ทดลองให้หุ่นยนต์เรียนรู้วิธีการเดินให้เร็วด้วย Reinforcement Learning หลังจากการทดลองเดินไปเดินมา 1,000 รอบ หุ่นยนต์ก็เดินได้สวยงามและรวดเร็วขึ้นและดูเป็นธรรมชาติอย่างมาก

หากจะออกแบบระบบ Reinforcement Learning ดังที่ได้เสนออาจจะต้องมีข้อกำหนดังนี้คือ

  1. สถานะ เป็นองศาของแต่ละข้อต่อ (ขาหน้า ขาหลัง)
  2. การกระทำ ก็คือการเลื่อนข้อต่อแต่ละข้อไป X องศา (หมุนมอเตอร์)
  3. รางวัล คือ ความเร็วในการเดิน

แล้วเร่ิมต้นการฝึกด้วยระบบที่มีวิธีการเดินโง่ ๆ อยู่แล้ว สุดท้าย Reinforcement Learning ก็จะหาวิธีการเดิน หรือ นโยบายการหมุนข้อต่อ (Policy) ที่ทำให้ได้ รวงวัลรวมคาดหวังสูงสุด


อีกตัวอย่างหนึ่งต้นฉบับจากที่เดียวกัน เป็นตัวอย่างการใช้ Reinforcement Learning ในการ ฝึกให้หุ่นยนต์คลาน (Crawler) ซึ่งไม่รู้ด้วยซ้ำว่าต้องเคลื่อนข้อต่ออย่างไรให้สามารถคลานไปข้างหน้าได้

ซึ่งการตั้งค่าระบบก็จะคล้าย ๆ กับตัวอย่างด้านบน ดังภาพต่อไปนี้

สิ่งที่น่าสนใจอีกอย่างนึงคือ โปรแกรมที่ว่าเรียนรู้ในการคลานได้นั้น ไม่ใช่โปรแกรม “จำเพาะ” เพราะในทางทฤษฎีโปรแกรมนี้สามารถใช้กับอะไรก็ได้ที่มีสถานะ มีการกระทำ มีรางวัล และต้องการนโยบายที่ดีที่สุด เพราะว่าตัวโปรแกรมเองไม่รู้ด้วยซ้ำว่ามันทำอะไร มันรู้แค่ว่ามีสถานะ มีการกระทำ มีรางวัลก็แค่หาวิธีเปลี่ยนสถานะให้ได้รางวัลเยอะ ๆ แค่นั้น

แพ้จะฟังดูดีมากแต่ก็เป็นจริงเพียงทางทฤษฎีเท่านั้น เนื่องจากในทางปฏิบัติปัญหาที่น่าสนใจมักจะมีจำนวนสถานะและการกระทำจำนวนมากจะต้องหาวิธีลดสิ่งเหล่านี้ลง ซึ่งการลดหรือการพยายามเพิ่มประสิทธิภาพนี้มีความจำเพาะของแต่ละปัญหาอยู่


จะค้นหา หรือจะกอบโกย ? (Exploration vs. Exploitation)

จากวิดีโอที่สองจะเห็นว่าในช่วงครึ่งแรกของวิดีโอหุ่นยนต์คลานนั้นแทบจะคลานเชิงสุ่ม กล่าวคือไม่เอาไหนนั่นเอง แต่พอท้าย ๆ ของวิดีโอโดยเฉพาะหลังจากที่ผู้เสนอคลิ๊กปลุ่มอัศจรรย์นั่นหลาย ๆ ครั้งก็จะเห็นว่าหุ่นยนต์เดินได้เป็นธรรมชาติขึ้นอย่างมาก

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

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


Keywords

  • MDP — Markov Decision Process
  • Temporal Difference
  • Q-Learning
  • Epsilon greedy
  • Exploration function