สวัสดี! ชื่อของฉันคือ Eric Yu และฉันเขียนที่เก็บนี้เพื่อช่วยผู้เริ่มต้นเริ่มต้นในการเขียนการเพิ่มประสิทธิภาพนโยบายใกล้เคียง (PPO) ตั้งแต่เริ่มต้นโดยใช้ Pytorch เป้าหมายของฉันคือการจัดหารหัสสำหรับ PPO ที่กระดูกเปลือย (กลอุบายเล็ก ๆ น้อย ๆ/ไม่มีแฟนซี) และเอกสารที่ดีมาก/สไตล์และมีโครงสร้าง โดยเฉพาะอย่างยิ่งฉันกำหนดเป้าหมายผู้คนที่เบื่อกับการอ่านการใช้งาน PPO ที่ไม่มีที่สิ้นสุดและไม่รู้เลยว่าเกิดอะไรขึ้น
หากคุณไม่ได้มาจากสื่อโปรดอ่านซีรี่ส์ของฉันก่อน
ฉันเขียนรหัสนี้ด้วยสมมติฐานที่ว่าคุณมีประสบการณ์เกี่ยวกับ Python และการเสริมแรงการเรียนรู้ (RL) รวมถึงวิธีการที่นโยบายการไล่ระดับสี (PG) และการทำงาน PPO (สำหรับ PPO ควรคุ้นเคยกับระดับทฤษฎีหลังจากทั้งหมดรหัสนี้ควรช่วยคุณในการฝึก PPO) หากไม่คุ้นเคยกับ RL, PG หรือ PPO ให้ไปที่สามลิงก์ด้านล่างตามลำดับ:
หากไม่คุ้นเคยกับ RL ให้อ่าน OpenAI บทนำสู่ RL (ทั้ง 3 ส่วน)
หากไม่คุ้นเคยกับ PG อ่านคำอธิบายที่เข้าใจง่ายเกี่ยวกับการไล่ระดับสีนโยบาย
หากไม่คุ้นเคยกับทฤษฎี PPO ให้อ่าน PPO Stack Overflow Post
หากไม่คุ้นเคยกับทั้ง 3 ให้ผ่านลิงก์เหล่านั้นด้านบนตามลำดับจากบนลงล่าง
โปรดทราบว่าการใช้งาน PPO นี้จะถือว่าเป็นการสังเกตอย่างต่อเนื่องและพื้นที่การกระทำ แต่คุณสามารถเปลี่ยนไปได้อย่างไม่ต่อเนื่อง ฉันทำตาม pseudocode ที่ให้ไว้ในการปั่นของ Openai สำหรับ PPO: https://spinningup.openai.com/en/latest/algorithms/ppo.html; หมายเลขบรรทัด Pseudocode ถูกระบุเป็น "ALG STEP #" ใน PPO.PY
หวังว่าสิ่งนี้จะเป็นประโยชน์เพราะฉันหวังว่าฉันจะมีทรัพยากรเช่นนี้เมื่อฉันเริ่มต้นการเดินทางสู่การเรียนรู้การเสริมแรง
ขอขอบคุณเป็นพิเศษกับ Zhirui Xia ที่ทำส่วนที่ 4 ของบทช่วยสอนนี้
ก่อนอื่นฉันขอแนะนำให้สร้างสภาพแวดล้อมเสมือนจริงของ Python:
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
เพื่อฝึกจากศูนย์:
python main.py
เพื่อทดสอบรูปแบบ:
python main.py --mode test --actor_model ppo_actor.pth
เพื่อฝึกกับโมเดลนักแสดง/นักวิจารณ์ที่มีอยู่:
python main.py --actor_model ppo_actor.pth --critic_model ppo_critic.pth
หมายเหตุ: หากต้องการเปลี่ยนพารามิเตอร์ hyperparameters สภาพแวดล้อม ฯลฯ ทำใน main.py; ฉันไม่ได้มีพวกเขาเป็นอาร์กิวเมนต์บรรทัดคำสั่งเพราะฉันไม่ชอบว่ามันทำให้คำสั่งนานแค่ไหน
Main.py เป็นงานของเรา มันจะแยกวิเคราะห์อาร์กิวเมนต์โดยใช้ arguments.py จากนั้นเริ่มต้นสภาพแวดล้อมและโมเดล PPO ของเรา ขึ้นอยู่กับโหมดที่คุณระบุ (ฝึกอบรมตามค่าเริ่มต้น) มันจะฝึกอบรมหรือทดสอบโมเดลของเรา ในการฝึกอบรมแบบจำลองของเราสิ่งที่เราต้องทำคือเรียกใช้ฟังก์ชั่น learn ! สิ่งนี้ได้รับการออกแบบด้วยวิธีที่คุณฝึก PPO2 โดยคำนึงถึงความมั่นคง
arguments.py เป็นสิ่งที่หลักจะเรียกเพื่อแยกวิเคราะห์อาร์กิวเมนต์จากบรรทัดคำสั่ง
PPO.PY มีโมเดล PPO ของเรา เวทมนตร์การเรียนรู้ทั้งหมดเกิดขึ้นในไฟล์นี้ โปรดอ่านซีรี่ส์ขนาดกลางของฉันเพื่อดูว่ามันทำงานอย่างไร อีกวิธีหนึ่งที่ฉันแนะนำคือการใช้สิ่งที่เรียกว่า pdb หรือ Python Debugger และก้าวผ่านรหัสของฉันเริ่มต้นจากเมื่อฉันโทร learn ใน Main.py
Network.py มีเครือข่ายนิวรัลตัวอย่างฟีดไปข้างหน้าเราสามารถใช้เพื่อกำหนดเครือข่ายนักแสดงและนักวิจารณ์ของเราใน PPO
eval_policy.py มีรหัสเพื่อประเมินนโยบาย มันเป็นโมดูลที่แยกจากกันอย่างสมบูรณ์จากรหัสอื่น
ไดเรกทอรี graph_code มีรหัสเพื่อรวบรวมข้อมูลและสร้างกราฟโดยอัตโนมัติ ใช้เวลาประมาณ 10 ชั่วโมงในคอมพิวเตอร์ที่เหมาะสมในการสร้างข้อมูลทั้งหมดในบทความสื่อของฉัน ข้อมูลทั้งหมดจากบทความสื่อควรอยู่ใน graph_code/graph_data ด้วยในกรณีที่คุณสนใจ หากคุณต้องการคุณสามารถสร้างกราฟที่ฉันใช้กับข้อมูลใหม่ สำหรับรายละเอียดเพิ่มเติมอ่าน readme ใน graph_code
นี่คือบทช่วยสอน PDB ที่ยอดเยี่ยมในการเริ่มต้น: https://www.youtube.com/watch?v=VQJCX3P89YK&AB_CHANNEL=TutorialEdge
หรือถ้าคุณเป็นผู้เชี่ยวชาญกับ Debuggers นี่คือเอกสาร: https://docs.python.org/3/library/pdb.html
นี่คือรายการสภาพแวดล้อมที่คุณสามารถลองได้ โปรดทราบว่าในการใช้งาน PPO นี้คุณสามารถใช้กล่องที่มี Box สำหรับการสังเกตและพื้นที่แอ็คชั่นเท่านั้น
พารามิเตอร์สามารถพบได้ที่นี่
โปรดดูบทความสื่อของฉัน
หากคุณมีคำถามใด ๆ หรือต้องการติดต่อฉันคุณสามารถหาฉันได้ที่นี่:
อีเมล: [email protected]
LinkedIn: https://www.linkedin.com/in/eric-yu-engineer/