Proximal Policy Optimization


Share this article

Proximal Policy Optimization (PPO) เป็น algorithm หนึ่งของ reinforcement learning ที่ใช้ policy gradient method คิดค้นโดยทีมนักวิจัยจาก OpenAI ก่อนจะพูดถึง PPO ขออธิบายพื้นฐาน reinforcement learning สักเล็กน้อย

Reinforcement learning

Reinforcement Learning เป็นความรู้แขนงหนึ่งของ machine learning ที่มีวัตถุประสงค์เพื่อฝึกให้ agent เรียนรู้พฤติกรรม (policy) ที่เหมาะสมในสภาพแวดล้อมที่ตัวเองอยู่ (environment) โดยพฤติกรรมหมายถึงการที่ agent เลือกว่าจะกระทำสิ่งใด (action) ในแต่ละ state ถ้าการกระทำนั้นดี ก็จะได้รางวัล (reward) สูง แต่ถ้าการกระทำนั่นแย่ ก็จะได้รางวัลต่ำ reinforcement learning เรียนรู้โดยการลองผิดลองถูกเพื่อเก็บข้อมูล reward ที่ได้ และนำไปฝึก agent โดยมีเป้าหมายเพื่อปรับพฤติกรรมเพื่อให้ได้ reward สะสมให้มากที่สุด

ขอแนะนำตัวแปรบางตัวก่อน เพื่อไม่ให้สับสนเมื่อลงรายละเอียด

Return

Reward สะสมที่พูดถึงเรียกว่า return

ตัวอย่างเช่น ถ้าเราสนใจ reward แค่ 3 timesteps ข้างหน้า return ก็คือ

แต่ return ที่นิยมใช้กันคือ infinite-horizon discounted return เป็นการรวม reward ทั้งหมดที่เกิดขึ้นในอนาคต

โดยมีตัว discount factor (γ) ที่มีค่าในช่วง 0 ถึง 1  เพื่อจำกัดไม่ให้ผลรวมมีค่าเป็นอนันต์และเพื่อให้น้ำหนักกับ reward ที่เกิดขึ้นในเวลาอันใกล้มากกว่า

Value function

agent จะมีค่า value function ที่ตัว agent เองไว้ใช้ประเมินว่า state ต่างๆดีหรือแย่แค่ไหน โดยจะมี 2 แบบคือ

value function:

action-value function:

(แบบที่สองต่างจากแบบที่หนึ่งตรงที่เรากำหนด action เริ่มต้นแรก)

ทั้งสองแบบล้วนเป็นการประมาณค่า expected value ของ return โดยอิงจาก policy (π) ณ ปัจจุบัน

Actor-Critic Methods

วิธีหนึ่งที่นิยมใช้สำหรับ policy gradient คือ actor-critic ซึ่งก็ตามชื่อเลยคือจะประกอบด้วย actor และ critic โดย actor จะเป็นตัวที่เลือก action ที่จะกระทำ ส่วน critic เป็นตัวประเมินว่าแต่ละ state ดีหรือแย่แค่ไหน หลังจากเก็บข้อมูลเสร็จแล้ว(โดยการปล่อยให้ agent รันใน environment) critic จะไปบอก actor ว่าควรปรับเปลี่ยน policy อย่างไร

Actor:

  • มี neutral network ของตัวเองเรียกว่า policy network โดยจะ output ค่า policy เพื่อตัดสินใจเลือก action
  • จะถูกใช้งานเฉพาะช่วง execution phase (ตอนรันใน environment)

Critic:

  • มี neutral network ของตัวเองเรียกว่า value network โดยจะ output ค่าประมาณของค่า V(s) หรือ Q(s,a) สำหรับ state ใดๆ
  • จะถูกใช้งานใน training phase เพื่อคำนวนค่า values, returns, advantages ของแต่ละ timestep ที่เก็บข้อมูลใน execution phase

สำหรับ value network นั้นมี loss function ที่เข้าใจได้ง่ายก็คือ critic loss = (return – value)^2  โดย value คือค่าประมาณโดย value network ส่วน return คือค่าที่ได้จากการ execute จริงๆ (ซึ่งก็คำนวนได้หลายวิธี) แต่สำหรับ policy network แล้ว loss function ก็คือ policy gradient โดยจะมีความแตกต่างตาม algorithm ที่ใช้

Policy gradient method

แนวคิดหลักของ policy gradient คือการใช้ gradient ascent เพื่อไปเปลี่ยน policy ให้เพิ่มโอกาสที่จะทำ action ที่ได้ reward สูง และลดโอกาสที่จะทำ action ที่ได้ reward ต่ำ หากมองสูตรแล้วสับสน วิธีเข้าใจให้ง่ายคือให้มองว่ามี 2 ส่วนคือ 1) ความน่าจะเป็นที่จะเลือก action นั้นๆ ซึ่งในรูปคือ logπ(a|s) และ 2) ส่วนที่บอกว่า action นั้นดีแค่ไหน ซึ่งก็คือ  ซึ่งสามารถเป็นได้ 6 แบบในรูปเช่น  Q(s,a) หรือ A(s,a)

READ  Transfer learning in Natural Language Processing (NLP)

Trust Region Policy Optimization

Policy gradient รูปทั่วไปข้างต้น มีข้อเสียที่ถ้าไปเปลี่ยน policy มากเกินไปในแต่ละรอบ อาจจะทำให้ performance พังได้ทันที เป็นผลให้ไม่เสถียร TRPO แก้ปัญหานี้ด้วยการเพิ่ม constraint ด้วยค่า KL divergence ซึ่งจะเป็นค่าที่เปรียบเทียบ probability distribution ระหว่างค่าเก่าและใหม่ ทำให้การอัพเดตแต่ละครั้ง policy จะไม่ถูกเปลี่ยนมากเกินไป

สำหรับ TRPO ฟังก์ชันของ policy gradient ที่จะ optimize คือ

โดยที่

  • π(a|s) คือ probability ที่จะเลือก action  เมื่ออยู่ใน state  โดยอิงจาก policy ใหม่
  • π_old(a|s) คือ probability ที่จะเลือก action  เมื่ออยู่ใน state  โดยอิงจาก policy เก่า
  • A คือค่า advantage ที่บอกว่า action  ที่เลือกมานี้ดีกว่าหรือแย่กว่า action อื่นๆ มากแค่ไหน
  • KL คือ Kullback–Leibler divergence (หรือ relative entropy) ที่มาจำกัดไม่ให้  ค่า π ต่างจาก π_old  มากเกินไป

Proximal Policy Optimization (PPO)

PPO เหมือนกับ TRPO ตรงที่มี constraint มาจำกัดไม่ให้การอัพเดต parameters แต่ละครั้งนั้นเปลี่ยนมากเกินไป แต่ TRPO นั้นใช้วิธีการคำนวนที่ค่อนข้างจะซับซ้อนที่จัดว่าเป็น second-order method จึงใช้เวลานาน ในทางกลับกัน PPO ใช้วิธีที่ไม่ซับซ้อนและสามารถเข้าใจได้ง่ายกว่า

ทั้ง TRPO และ PPO ใช้ importance sampling โดยการเปลี่ยนจาก logπ(a|s) ไปเป็นอัตราส่วนระหว่างโอกาสที่จะทำ action ของค่าใหม่และค่าเก่า r_t

PPO เปลี่ยนจากการใช้ KL divergence เป็น constraint ด้วยการใช้ clipping แทน

ฟังก์ชั่น clip(r_t(θ), 1-ε, 1+ε) เป็นการจำกัดค่า r ให้อยู่ระหว่าง 1 – ε และ 1 + ε เช่นถ้า ε=0.2 แล้ว r_t(θ) จะมีค่าอยู่ได้ในช่วง [0,8,1.2]  หมายความว่าต่อให้ π_θ(a_t|s_t) จะสูงกว่า π_θ_old(a_t|s_t) เท่าไร ค่าสูงสุดที่เป็นไปได้ของr_t(θ) ก็คือ 1.2 การทำแบบนี้จึงเป็นการลดแรงจูงใจที่ค่าใหม่จะขยับออกไปจากเดิมมากเกินไป

รูปด้านบนแสดงถึงผลของการ clipping ในสมการ L^CLIP (θ)

ในกรณีที่ advantage เป็นบวก A > 0:r_t(θ)   จะถูก clip ที่1 + ε เพื่อไม่ให้ parameters ปรับไปทางบวกไวเกินไป

ในกรณีที่ advantage เป็นลบ A < 0:r_t(θ)  จะถูก clip ที่1 – ε เพื่อไม่ให้ parameters ลดพฤติกรรมที่เกิดผลเสียเร็วเกินไป

PPO ได้รับความนิยมเป็นอย่างมากเนื่องจากมีประสิทธิภาพเทียบเท่าหรืออาจจะเหนือกว่า algorithm ที่เป็น state-of-the-art อื่นๆ ณ เวลานั้น และในขณะเดียวกัน PPO นั้นไม่ซับซ้อนในการคำนวน จึงสามารถนำไปใช้ได้ง่าย ด้วยเหตุนี้ PPO จึงเป็น algorithm หลักของ OpenAI มาช่วงเวลาหนึ่ง

OpenAI Five ซึ่งก็คือ AI ที่สร้างโดยทีม OpenAI เพื่อเล่นเกม Dota 2 ก็ฝึกโดยใช้ PPO เช่นกัน โดย AI นี้สามารถเล่นเกม Dota 2 ในระดับที่สามารถสู้กับมนุษย์ที่เป็นทีมมืออาชีพระดับโลกได้

Reference

https://spinningup.openai.com/en/latest/

https://lilianweng.github.io/lil-log/2018/04/08/policy-gradient-algorithms

https://arxiv.org/pdf/1502.05477.pdf

https://arxiv.org/pdf/1707.06347.pdf


ลงทะเบียนรับข่าวสาร

ไม่พลาดทุกการอัพเดทจาก Big Data Experience Center

Big Data Experience Center (BX)

ชั้น 14 อาคาร Knowledge Exchange Center (KX)
110/1 ถนนกรุงธนบุรี, แขวงบางลำภูล่าง เขตคลองสาน กรุงเทพฯ 10600
อีเมล์: [email protected]
Tel: 097-941-9889

ABOUT

SERVICES