0Pricing
Learn AI with Python · บทเรียน

การปรับให้เหมาะสมของนโยบายแบบใกล้เคียง (PPO)

ฟังก์ชันวัตถุประสงค์ตัวแทนแบบตัดค่า การประมาณความได้เปรียบด้วย GAE และ PPO ด้วย stable-baselines3

การปรับให้เหมาะสมของนโยบายแบบใกล้เคียง (PPO) เป็นบทเรียน Learn AI with Python ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn AI with Python และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดจึงต้องใช้ PPO

PPO เป็นอัลกอริทึม RL มาตรฐานในปัจจุบัน: มีเสถียรภาพ ใช้ตัวอย่างข้อมูลได้อย่างมีประสิทธิภาพ และปรับแต่งได้ง่าย อัลกอริทึมนี้แก้ปัญหาหลักของการไต่ระดับนโยบาย นั่นคือการอัปเดตที่ใหญ่เกินไปจนทำลายนโยบาย ด้วยการ จำกัดปริมาณการเปลี่ยนแปลงของนโยบาย ในการอัปเดตแต่ละครั้ง

อันตรายจากการอัปเดตขนาดใหญ่

การอัปเดตนโยบายที่ใหญ่เกินไปเพียงครั้งเดียวอาจทำให้ประสิทธิภาพพังลง และเนื่องจาก RL เป็นแบบตามนโยบายปัจจุบัน การกู้คืนจึงทำได้ยาก PPO ทำให้การอัปเดตแต่ละครั้ง อยู่ใกล้เคียง (ใกล้กับนโยบายปัจจุบัน) เพื่อความปลอดภัย

อัตราส่วนความน่าจะเป็น

PPO ติดตาม อัตราส่วน ของความน่าจะเป็นของการกระทำใหม่เทียบกับเก่า: ratio = pi_new(a|s) / pi_old(a|s) อัตราส่วนที่ใกล้ 1 หมายถึงนโยบายเปลี่ยนแปลงเพียงเล็กน้อย ส่วนค่าที่ห่างจาก 1 หมายถึงการเปลี่ยนแปลงครั้งใหญ่

ratio = torch.exp(new_log_prob - old_log_prob)

วัตถุประสงค์ตัวแทนแบบจำกัดค่า

จุดเด่นของ PPO คือ วัตถุประสงค์ตัวแทนแบบจำกัดค่า โดยคูณอัตราส่วนด้วยค่าความได้เปรียบ แต่ จำกัดค่า อัตราส่วนให้อยู่ในช่วง [1-eps, 1+eps] เพื่อขจัดแรงจูงใจที่จะเปลี่ยนนโยบายมากเกินไป

clipped = torch.clamp(ratio, 1 - eps, 1 + eps)
objective = torch.min(ratio * adv, clipped * adv)
loss = -objective.mean()

ค่าเอปไซลอนเกณฑ์การจำกัดค่า

eps (โดยทั่วไปคือ 0.2) คือ ค่าเกณฑ์การจำกัดค่า ซึ่งจำกัดระยะที่อัตราส่วนจะเคลื่อนออกจาก 1 ดังนั้นแม้ค่าความได้เปรียบจะสูง การอัปเดตนโยบายก็ยังถูกจำกัดและมีเสถียรภาพ

eps = 0.2  # allow at most +/-20% change in probability

เหตุใด min() และการจำกัดค่าจึงได้ผล

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

การประมาณค่าความได้เปรียบแบบทั่วไป

PPO ประเมินค่าความได้เปรียบด้วย GAE ซึ่งผสานผลตอบแทนหลายขั้นโดยใช้พารามิเตอร์ gamma และ lambda GAE สร้างสมดุลระหว่างอคติกับความแปรปรวน เพื่อให้ได้ค่าประมาณความได้เปรียบที่ราบรื่นและเชื่อถือได้

def gae(rewards, values, gamma=0.99, lam=0.95):
    adv, gae_acc = [], 0
    for t in reversed(range(len(rewards))):
        delta = rewards[t] + gamma * values[t+1] - values[t]
        gae_acc = delta + gamma * lam * gae_acc
        adv.insert(0, gae_acc)
    return adv

หลายรอบต่อหนึ่งชุดข้อมูล

ต่างจาก REINFORCE ตรงที่ PPO นำชุดข้อมูลที่เก็บมาใช้ซ้ำใน รอบการปรับเหมาะหลายรอบ การจำกัดค่าทำให้การใช้ซ้ำนี้ปลอดภัย และช่วยเพิ่มประสิทธิภาพการใช้ตัวอย่างข้อมูลอย่างมาก

for _ in range(n_epochs):
    # recompute ratio and clipped loss on the same batch
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

PPO ด้วย Stable-Baselines3

ในทางปฏิบัติ คุณแทบไม่จำเป็นต้องเขียน PPO เอง Stable-Baselines3 มีการใช้งานที่ผ่านการทดสอบแล้ว ให้สร้างออบเจ็กต์ด้วยประเภทนโยบาย สภาพแวดล้อม และระดับรายละเอียดการแสดงผล จากนั้นเรียกใช้ learn

from stable_baselines3 import PPO

model = PPO("MlpPolicy", env, verbose=1)
model.learn(total_timesteps=100_000)

การใช้ตัวแทนที่ฝึกแล้ว

หลังการฝึก ใช้ predict เพื่อรับการกระทำสำหรับข้อสังเกตใหม่ กำหนด deterministic=True ระหว่างการประเมิน เพื่อเลือกการกระทำที่มีความน่าจะเป็นสูงสุดแทนการสุ่มตัวอย่าง

obs, _ = env.reset()
action, _ = model.predict(obs, deterministic=True)
model.save("ppo_agent")

เหตุใด PPO จึงครองความนิยม

PPO ผสานการอัปเดตแบบจำกัดค่าที่มีเสถียรภาพ ค่าความได้เปรียบจาก GAE และการใช้ข้อมูลซ้ำเข้าไว้ในอัลกอริทึมทั่วไปที่แข็งแกร่ง ใช้ได้กับงานหลากหลายโดยแทบไม่ต้องปรับแต่ง จึงเป็นกำลังสำคัญตั้งแต่งานหุ่นยนต์ไปจนถึง RLHF

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจเกี่ยวกับ PPO

ทบทวน: PPO

คุณได้เรียนรู้ วัตถุประสงค์ตัวแทนแบบจำกัดค่า ของ PPO ซึ่งใช้อัตราส่วน ความน่าจะเป็น และค่าเกณฑ์การจำกัดค่า eps เพื่อจำกัดขอบเขตการอัปเดต ใช้ GAE สำหรับประเมินค่าความได้เปรียบ และใช้ข้อมูลซ้ำในหลายรอบ คุณเรียกใช้ได้อย่างง่ายดายด้วย PPO("MlpPolicy", env, verbose=1) ใน Stable-Baselines3

คำถามที่พบบ่อย

บทเรียน “การปรับให้เหมาะสมของนโยบายแบบใกล้เคียง (PPO)” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การปรับให้เหมาะสมของนโยบายแบบใกล้เคียง (PPO)” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn AI with Python ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การปรับให้เหมาะสมของนโยบายแบบใกล้เคียง (PPO)”

ฟังก์ชันวัตถุประสงค์ตัวแทนแบบตัดค่า การประมาณความได้เปรียบด้วย GAE และ PPO ด้วย stable-baselines3 คุณปฏิบัติ Learn AI with Python ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn AI with Python หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn AI with Python บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “การปรับให้เหมาะสมของนโยบายแบบใกล้เคียง (PPO)” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Learn AI with Python นี้ได้ไหม

ได้ บทเรียน Learn AI with Python ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. วิธีไล่ระดับนโยบาย: REINFORCE
  2. วิธี Actor-Critic (A2C)
  3. การปรับให้เหมาะสมของนโยบายแบบใกล้เคียง (PPO)
  4. สภาพแวดล้อม Gymnasium แบบกำหนดเอง
← กลับไปที่ Learn AI with Python