EP.1 — Reinforcement Learning เบื้องต้น

ทำความรู้จักกับ reinforcement learning

Thammasorn Harnpadungkij
ASquareLab
4 min readNov 13, 2018

--

Outline

  • ชุดของบทความนี้เหมาะสำหรับใคร ?
  • Reinforcement Learning คืออะไร ?
  • ส่วนประกอบของ Reinforcement Learning
  • Disclaimer
  • แหล่งที่มา

บทความนี้เหมาะสำหรับ

บุคคลทั่วไปที่ต้องการศึกษาหาความรู้เพิ่มเติมเกี่ยวกับ machine learning อีกด้านหนึ่งที่ชื่อว่า reinforcement learning ผมแนะนำว่าผู้อ่านควรจะมีความรู้ด้านคณิตศาสตร์ในระดับปานกลาง อย่างน้อยมีความรู้ด้านสถิติ และแคลคูลัสบ้าง เช่นรู้ว่าค่า mean คือค่าเฉลี่ย หรือการ diff คือการหาความชัน ส่วนความรู้ด้านการเขียนโปรแกรมยังไม่จำเป็นมากในการทำความเข้าใจ แต่ถ้าเขียนโปรแกรมเป็นโดยเฉพาะภาษา python จะเป็นประโยชน์ในการเรียนรู้มากขึ้น เนื่องจากในแต่ละเรื่องนั้น จะมีการยกตัวอย่างการนำไปประยุกต์ใช้ในแต่ละด้าน โดยในบางส่วนอาจจะมีแจก source code ภาษา python เพื่อให้ได้ทดลอง run หรือทดลองปรับแก้กันเพื่อทำความเข้าใจมากขึ้น

ชุดของบทความนี้จะเริ่มตั้งแต่ reinforcement learning ตั้งแต่พื้นฐานที่สุดไล่ไปตั้งแต่ฝึกให้คอมพิวเตอร์ตัดสินใจภายใต้สถานการณ์เดียวซ้ำ ๆ ไปจนถึงฝึกให้คอมพิวเตอร์สามารถตัดสินใจภายใต้สถานการณ์ที่มีจำนวนไม่จำกัด (infinite) โดยที่ผมมีความตั้งใจจะให้รายละเอียดมากที่สุดเท่าที่จะเป็นไปได้เพื่อให้ผู้ที่เข้ามาอ่านสามารถทำความเข้าใจได้โดยง่าย และวางแผนไว้ว่าจะเขียนให้ได้หนึ่งเรื่องต่อสัปดาห์

หากผู้อ่านมีข้อสงสัยใด ๆ สามารถ comment ถามได้ด้านล่าง หรือสามารถส่ง message ถามได้ที่เพจ ผมจะพยายามตอบอย่างสุดความสามารถครับ ^^

Reinforcement Learning คืออะไร ?

Reinforcement Learning เป็นด้านหนึ่งของ machine learning หรือ artificial intelligence(AI)ที่ใช้สำหรับพัฒนา robot (หรือ agent)ให้สามารถตัดสินใจภายใต้แต่ละสถานการณ์เพื่อนำมาซึ่งผลลัพธ์ที่ดีที่สุด โดยที่ robot นั้นจะไม่ได้ถูกบอกให้รู้ถึงกฎเกณฑ์ในการเลือกกระทำสิ่งใดภายใต้สถานการณ์ใดโดยตรง แต่ robot จะพยายามพัฒนาระบบความคิดการตัดสินใจเองจากการทดลองผิดลองถูกและเรียนรู้ไปเรื่อย ๆ
(คำจำกัดความแบบง่าย ๆ โดยผมเอง ซึ่งอาจจะไม่ตรงนัก)

ตัวอย่างเช่น ถ้าเราต้องการจะสร้าง robot ที่สามารถซื้อขายหุ้นให้ได้กำไรได้มากที่สุด robot จะต้องตัดสินใจที่จะซื้อ, ขาย หรือจะอยู่เฉย ๆ ภายใต้สถานการณ์ที่อาจจะเป็นราคาหุ้นย้อนหลัง 30 วัน, จำนวนหุ้นในพอร์ต, จำนวนเงินคงเหลือในพอร์ต ฯลฯ ซึ่งในปัจจุบันอาจจะมีการพัฒนาระบบเพื่อซื้อขายหุ้นอัตโนมัติขึ้นมาที่มีกฎเกณฑ์การตัดสินใจที่แน่นอนอยู่แล้ว เช่น ถ้าราคาวันนี้มากกว่าค่าเฉลี่ยย้อนหลัง 5 วันให้ซื้อ ถ้าราคาวันนี้น้อยว่าค่าเฉลี่ยย้อนหลัง 5 วันให้ขาย ฯลฯ แต่ robot ที่พัฒนาใต้แนวคิด reinforcement learning จะแตกต่างกันออกไป

reinforcement learning นั้นตั้งอยู่ภายใต้แนวคิดที่ว่า robot จะเลือกกระทำสิ่งที่ทำให้ได้ผลลัพธ์มากที่สุด ถ้าเราเปรียบเทียบกับการเล่นหุ้น

  • สมมติว่าวันนี้ในพอร์ตหุ้นมีหุ้น CPALL ในราคา 62 บาท (ซื้อมา 59 บาท) ซึ่งในวันนี้ราคานั้นลดต่ำกว่าค่าเฉลี่ยย้อนหลัง 5 วันไปแล้ว
  • robot ของเราจะต้องตัดสินใจว่าจะขายหรือจะถือต่อ
  • ถ้า robot ตัดสินใจจะขายเลย จะได้กำไรแน่ ๆ แล้ว 3 บาทต่อหุ้นหนึ่งตัว แต่ถ้ายังถือหุ้นตัวนั้นต่อไปราคาอาจจะขึ้นทำให้ได้กำไรมากกว่าที่ได้อยู่ก็ได้ เพราะฉะนั้นสิ่งที่ robot ตัวนี้ทำคือมันจะไม่ได้มองแค่สถานการณ์ในปัจจุบัน แต่คาดการณ์ไปถึงความน่าจะเป็นของสถานการณ์ต่อ ๆ ไปเพื่อเลือกการกระทำที่ดีที่สุด เช่น ถ้า robot คิดแล้วว่าในอนาคตราคาอาจจะกลับขึ้นมาอีกในเวลาอันใกล้ robot ก็จะไม่ขาย

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

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

การนำ reinforcement learning ไปเล่น Dota ในโปรเจคที่ชื่อว่า OpenAI Five ของบริษัท OpenAI

ในปัจจุบัน reinforcement learning ถูกนำไปประยุกต์ใช้ในหลายด้านด้วยกัน เช่น Google นำไปพัฒนา AlphaGo ที่สามารถเล่นเกมโกะให้ชนะผู้เล่นระดับโลกหลายต่อหลายคนได้ หรือจะเป็น OpenAI ของ Elon Musk ก็นำไปพัฒนา OpenAI Five ให้สามารถเล่นเกม DotA2 กับผู้เล่นมืออาชีพได้อย่างสูสี นอกจากงานวิจัยด้านเกมเพื่อโชว์ความสามารถของ reinforcement learning แล้ว ยังมีคนนำไปประยุกต์เพื่อใช้ในด้านการเงิน เช่น นำไปพัฒนาระบบการจัดการ portfolio ให้ตัดสินใจเลือกอัตราส่วนของสินทรัพย์ high risk high return กับ low risk low return ใน portfolio ให้สามารถทำกำไร ภายใต้ความเสี่ยงที่ต่ำ (ตัวอย่าง arXiv:1706.10059) นอกจากที่กล่าวมายังมีด้านอื่น ๆ อีกหลายด้านให้ตามกันต่อไป

ส่วนประกอบของ Reinforcement Learning

แผนภาพแสดงส่วนประกอบและความสัมพันธ์กันของ reinforcement learning (รูปจากหนังสือ Reinforcement Learning: An Introduction, Sutton and Barto)
  • Agent

Agent หรือ robot คือระบบที่เราสร้างขึ้นมาเพื่อให้สามารถตัดสินใจภายใต้สถานการณ์ที่แตกต่างกัน เพื่อให้ได้รับ reward ที่มากที่สุดได้ ถ้ามองง่าย ๆ ก็คือ agent คือหุ่นยนต์ตัวนึงที่เราต้องการให้มันฝึกที่จะทำงานอะไรที่เราต้องการได้ ถ้าเปรียบเทียบเป็นเกมก็คือผู้เล่นเกม (ไม่ใช่ตัวละครในเกมนะ อย่าสับสน)

  • Action (a)

Action คือสิ่งที่ agent สามารถทำได้ พูดแล้วอาจจะงง ถ้าเราเปรียบเทียบเป็นเกมแล้ว action คือปุ่มกดของเกม เช่น agent สำหรับเล่นเกม pong จะมีaction จะประกอบด้วย “เลื่อนขึ้น” , “เลื่อนลง” , “ไม่กดอะไรเลย” ซึ่งในแต่ละปัญหานั้นจะมี set ของ action ที่แตกต่างกันไป

  • Environment & State (s)

State คือสิ่งที่ agent รับรู้ เพื่อใช้ในการพิจารณาว่าควรจะทำสิ่งใด ถ้าปัญหาแตกต่างกันก็อาจจะทำให้มีรูปแบบของ state แตกต่างกัน เช่น ถ้าเราต้องการสร้าง agent ที่สามารถเล่นเกม pong ได้ state อาจจะเป็น frame หน้าจอของเกม ที่แสดงถึงตำแหน่งตัวละคร ตำแหน่งลูกบอล ฯลฯ หรือถ้าเราต้องการสร้าง agent ที่สามารถเล่นหุ้นได้ state อาจจะเป็นราคาหุ้นแต่ละตัวย้อนหลัง 10 วัน ถ้าเราต้องการสร้าง agent ที่เล่นหมากรุกได้ state อาจจะเป็นตำแหน่งของหมากรุกแต่ละตัวบนกระดาน

รูปตัวอย่างแสดงความสัมพันธ์ของ state ยกตัวอย่างจากรูปเช่น จาก State 0 (S0) นั้น ถ้าเราทำ action 0 (a0) จะมีโอกาสที่เราจะอยู่ state เดิม 50% และมีโอกาส 50% ที่จะเปลี่ยนไปเป็น state 2 (S2)

สำหรับผู้ที่มีพื้นฐานความรู้ machine learning มาแล้วอาจจะมองได้ว่า state คือ feature ใน supervised-learning แต่สิ่งที่ทำให้ state มีความแตกต่างกับ feature ก็คือ state แต่ละ state มีความสัมพันธ์กันทางความน่าจะเป็น เช่น จาก state นี้ ถ้าเราทำ action ใด ๆ จะมี probability ที่จะเปลี่ยนไป state ถัดไปเท่าใด หรือถ้าเรามองเป็นเกมหมากรุก จะเป็นว่าถ้าเราเดินหมากตัวนี้แล้ว โอกาสที่คู่ต่อสู้จะเดินหมากตัวไหนไปตรงไหนเป็นเท่าไหร่

  • Reward (R หรือ r)

Reward คือสิ่งที่ agent ต้องการที่จะ maximize หรือทำให้ได้รับมากที่สุด พูดให้ชัดก็คือ reward คือ goal ของปัญหา ถ้าเปรียบเทียบเป็นเกม reward คือคะแนนในเกม เช่น ถ้าเราสร้าง agent สำหรับเล่นเกม pong แล้ว agent จะได้รับ reward +1 ถ้าสามารถตีลูกข้ามผู้ต่อสู้ได้ หรือจะได้รับ reward -1 ถ้าไม่สามารถรับลูกที่ตีจากคู่ต่อสู้ได้

เปรียบเทียบเกม pong กับ reinforcement learning (ที่จริงเปรียบเทียบไม่ตรงนัก หากจะนำไปพัฒนาเป็น robot เล่นเกม pong จริง ๆ เช่น state ที่จริงแล้วจะเป็นการนำภาพสองเฟรมมาลบกัน เพื่อเห็นทิศทางของลูกบอล แต่เปรียบเทียบเช่นนี้เพื่อทำให้ง่ายแก่ผู้เริ่มต้น)
  • Policy (π)

Policy คือระบบการตัดสินใจของ agent ซึ่งจริง ๆ ก็คือตรรกะหรือกฎในการเลือก action เช่น “เราจะเลือก action ที่มีค่า expected reward มากที่สุด” แบบนี้คือ 1 policy , “เราจะเลือกแบบสุ่ม” อันนี้ก็คือ 1 policy หรือถ้าพูดให้ดูเป็นทางคณิตศาสตร์มากขึ้น policy คือ function ที่มี state เป็น input และมี output ออกมาเป็น action ที่เราต้องทำใน state นั้น ๆ ซึ่ง policy function นั้นจะถูกแทนด้วย π

Policy Function จะเห็นได้ว่ารับ input เข้าไปเป็น state และจะให้ action ออกมา
  • Value Function

Value Function คือมูลค่าของ action หรือ state กล่าวคือถ้า action หรือ state ใด มีมูลค่าสูงแสดงว่าหากเราทำ action หรือ state นั้น แล้วเราจะมีโอกาสที่จะได้ reward ที่สูงตามมา การคำนวณ value function นั้นจะกล่าวโดยละเอียดต่อไป

เพื่อทำให้เข้าใจ value function มากขึ้น เราจะลองยกตัวอย่างจากเกม pong ให้ดูกัน

เปรียบเทียบเฟรมหน้าจอสองหน้าจอ หรือสอง state

ถ้าเราเปรียบเทียบสอง state ในรูปด้านบน state ด้านซ้ายจะมี value ที่น้อยกว่าด้านขวา เนื่องจากเรากำลังจะรับลูกบอลที่อีกฝั่งตีมาไม่ได้ ซึ่งถ้ารับไม่ได้ reward จะถูกลด ไป 1

เปรียบเทียบ value ของ action up และ down

จากรูปด้านซ้าย ถ้าเราเปรียบเทียบระหว่าง value ของ action up และ down ถ้าเราคิดด้วยสัญชาตญาณ จะพบว่า value ของ action up จะมีค่ามากกว่า value ของ action down เพราะว่าการกด up จะทำให้เราสามารถเลื่อนไปรับลูกได้ ทำให้ไม่เสีย reward แต่หากกด down จะทำให้เราไปคนละทางกับลูก รับลูกไม่ได้ reward จะติดลบ

เห็นได้ว่า value function เป็นตัวช่วยแนะนำให้รู้ว่าในแต่ละ state เราควรจะทำ action ใด ซึ่ง value function นี้จะถูกใช้ใน policy เพื่อตัดสินใจเลือก action ต่อไป ซึ่งปัญหาหลักของ reinforcement learning ก็คือการพยายามประมาณค่า value function ให้ใกล้เคียงกับความเป็นจริงที่สุด เช่นเกม pong ในรูปด้านบนนั้น เราจะทำอย่างไรให้ value ของ action up มากกว่า value ของ action down ให้ได้

บทถัดไป

ในเรื่องถัดไป เราจะกล่าวถึงปัญหาที่เป็นปัญหาพื้นฐานที่สุดของ reinforcement learning ที่มีชื่อว่า k-armed bandit ซึ่งเราจะเริ่มจากการที่ปัญหานั้นมีเพียงแค่ state เดียว และ value function นั้นไม่เปลี่ยนแปลงตามเวลา หรือปัญหานั้นเป็น stationary นั่นเอง

Disclaimer

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

แหล่งที่มา

เนื้อหาบทความนี้ส่วนใหญ่ สรุปมาจากหนังสือซึ่งถือได้ว่าเป็นคัมภีร์ไบเบิ้ลในด้านนี้เลยก็ว่าได้ หนังสือเล่มนั้นมีชื่อว่า An Introduction to Reinforcement Learning (2nd edition) โดยปรมาจารย์ด้านนี้สองท่านได้แก่ Richard S. Sutton และ Andrew G. Barto สามารถไปค้นคว้าเพื่อรายละเอียดเพิ่มเติมกันได้ครับ

บทถัดไป

https://medium.com/asquarelab/ep-2-k-armed-bandit-part-1-31f04f0fd892

--

--

Thammasorn Harnpadungkij
ASquareLab

Master’s Student in Computer Engineering Department, KMUTT