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

วิธีไล่ระดับนโยบาย: REINFORCE

ทฤษฎีบทไล่ระดับนโยบาย อัลกอริทึม REINFORCE การลบค่าฐาน และการลดความแปรปรวน

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

RL แบบอิงคุณค่าเทียบกับแบบอิง Policy

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

นโยบาย Policy pi(a|s)

นโยบายที่มีพารามิเตอร์ pi(a|s, theta) จะแปลงสถานะให้เป็นการแจกแจงความน่าจะเป็นเหนือการกระทำ โดยมี theta เป็นพารามิเตอร์ ซึ่งเป็นเครือข่ายประสาทเทียม การฝึกจะปรับ theta เพื่อส่งเสริมการกระทำที่ได้รับรางวัลมากกว่า

class Policy(nn.Module):
    def __init__(self, obs_dim, n_actions):
        super().__init__()
        self.net = nn.Sequential(
            nn.Linear(obs_dim, 128), nn.ReLU(),
            nn.Linear(128, n_actions)
        )
    def forward(self, s):
        return torch.softmax(self.net(s), dim=-1)

การสุ่มตัวอย่างการกระทำ

เนื่องจากนโยบายเป็นการแจกแจง คุณจึง sample การกระทำแทนการเลือกค่าที่มากที่สุด การสุ่มตัวอย่างช่วยให้เกิดการสำรวจและทำให้นโยบายเป็นแบบสุ่ม

probs = policy(state)
dist = torch.distributions.Categorical(probs)
action = dist.sample()
log_prob = dist.log_prob(action)

การดำเนินวิถีการทำงาน

ตอนหนึ่งของการทำงาน (วิถีการดำเนินงาน) คือชุดลำดับของสถานะ การกระทำ และรางวัลตั้งแต่เริ่มต้นจนจบ คุณจะรวบรวมวิถีการดำเนินงานได้ครบถ้วนด้วยการกระทำในสภาพแวดล้อมจนกว่าสภาพแวดล้อมจะสิ้นสุด

states, actions, rewards, log_probs = [], [], [], []
state, _ = env.reset()
done = False
while not done:
    probs = policy(torch.tensor(state).float())
    dist = torch.distributions.Categorical(probs)
    a = dist.sample()
    state, r, term, trunc, _ = env.step(a.item())
    rewards.append(r); log_probs.append(dist.log_prob(a))
    done = term or trunc

ผลตอบแทนลดค่า G_t

ผลตอบแทน G_t คือรางวัลทั้งหมดในอนาคตนับจากเวลา t โดยลดค่าด้วย gamma เพื่อให้รางวัลที่อยู่ใกล้กว่ามีน้ำหนักมากกว่า ค่านี้บอกเราว่าการกระทำตั้งแต่ step t เป็นต้นไปให้ผลดีเพียงใด

def returns(rewards, gamma=0.99):
    G, out = 0, []
    for r in reversed(rewards):
        G = r + gamma * G
        out.insert(0, G)
    return torch.tensor(out)

วัตถุประสงค์ของ REINFORCE

REINFORCE ดำเนินการไต่ระดับเกรเดียนต์แบบ เพิ่มค่า บนผลตอบแทนคาดหมาย กล่าวโดยสัญชาตญาณคือ เพิ่มความน่าจะเป็นของการกระทำที่นำไปสู่ผลตอบแทนสูง และลดความน่าจะเป็นของการกระทำที่นำไปสู่ผลตอบแทนต่ำ การกระทำแต่ละรายการจะถ่วงน้ำหนักด้วย G_t

การไต่ระดับของนโยบาย

ฟังก์ชันการสูญเสียคือ -sum(log_prob * G_t) เครื่องหมายลบจะเปลี่ยนการไต่ระดับแบบเพิ่มค่าให้เป็นการไต่ระดับแบบลดค่า เพื่อให้ตัวปรับเหมาะเพิ่มผลตอบแทนสูงสุด การกระทำที่มีผลตอบแทนสูงจะทำให้ค่าลอการิทึมของความน่าจะเป็นถูกผลักให้สูงขึ้น

G = returns(rewards)
loss = -torch.sum(torch.stack(log_probs) * G)

การอัปเดตนโยบาย

ทำการแพร่ย้อนกลับแล้วเรียกใช้ step ตามปกติ การอัปเดตหนึ่งครั้งใช้เส้นทางการดำเนินการทั้งหมด จากนั้นจึงทิ้งข้อมูลนั้นไป (REINFORCE เป็นแบบตามนโยบายปัจจุบัน: ใช้เฉพาะข้อมูลจากนโยบายปัจจุบันเท่านั้น)

optimizer.zero_grad()
loss.backward()
optimizer.step()

ปัญหาความแปรปรวนสูง

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

ค่าฐานสำหรับลดความแปรปรวน

การลบ ค่าฐาน (เช่น ผลตอบแทนเฉลี่ย) ออกจาก G_t ช่วยลดความแปรปรวนโดยไม่ทำให้เกรเดียนต์มีอคติ เราให้รางวัลการกระทำที่ ดีกว่าที่คาดหมาย ไม่ใช่เพียงเพราะมีผลตอบแทนเป็นบวก

baseline = G.mean()
advantage = G - baseline
loss = -torch.sum(torch.stack(log_probs) * advantage)

เหตุใด REINFORCE จึงสำคัญ

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

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

ทดสอบความเข้าใจเกี่ยวกับการไต่ระดับของนโยบาย

ทบทวน: REINFORCE

คุณได้เรียนรู้การกำหนดพารามิเตอร์ให้กับ นโยบาย pi(a|s,theta) การสร้างเส้นทางการดำเนินการ การคำนวณผลตอบแทนแบบลดค่า G_t และการไต่ระดับแบบเพิ่มค่าด้วยฟังก์ชันการสูญเสีย -sum(log_prob * G_t) คุณได้เห็นความแปรปรวนสูงของ REINFORCE และวิธีที่ ค่าฐาน ช่วยลดความแปรปรวนดังกล่าว

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

บทเรียน “วิธีไล่ระดับนโยบาย: REINFORCE” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “วิธีไล่ระดับนโยบาย: REINFORCE”

ทฤษฎีบทไล่ระดับนโยบาย อัลกอริทึม REINFORCE การลบค่าฐาน และการลดความแปรปรวน คุณปฏิบัติ Learn AI with Python ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

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

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

บทเรียน “วิธีไล่ระดับนโยบาย: REINFORCE” ใช้เวลานานแค่ไหน

บทเรียน 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