สถานะ: การบำรุงรักษา (คาดว่าจะมีการแก้ไขข้อบกพร่องและการอัปเดตเล็กน้อย)
OpenAI Baselines คือชุดการใช้งานอัลกอริธึมการเรียนรู้แบบเสริมกำลังคุณภาพสูง
อัลกอริธึมเหล่านี้จะช่วยให้ชุมชนการวิจัยสามารถทำซ้ำ ปรับแต่ง และระบุแนวคิดใหม่ๆ ได้ง่ายขึ้น และจะสร้างพื้นฐานที่ดีเพื่อสร้างงานวิจัยเพิ่มเติม การใช้งาน DQN ของเราและรูปแบบต่างๆ นั้นใกล้เคียงกับคะแนนในเอกสารที่ตีพิมพ์โดยประมาณแล้ว เราคาดหวังว่าสิ่งเหล่านี้จะถูกใช้เป็นฐานในการเพิ่มแนวคิดใหม่ๆ และเป็นเครื่องมือในการเปรียบเทียบแนวทางใหม่กับแนวทางที่มีอยู่
เส้นพื้นฐานต้องการ python3 (>=3.5) พร้อมส่วนหัวของการพัฒนา คุณจะต้องมีแพ็คเกจระบบ CMake, OpenMPI และ zlib สามารถติดตั้งได้ดังต่อไปนี้
sudo apt-get update && sudo apt-get install cmake libopenmpi-dev python3-dev zlib1g-dev
การติดตั้งแพ็คเกจระบบบน Mac ต้องใช้ Homebrew เมื่อติดตั้ง Homebrew แล้ว ให้รันสิ่งต่อไปนี้:
brew install cmake openmpi
จากมุมมองของความสมบูรณ์ของแพ็คเกจ Python ทั่วไป เป็นความคิดที่ดีที่จะใช้สภาพแวดล้อมเสมือน (virtualenvs) เพื่อให้แน่ใจว่าแพ็คเกจจากโปรเจ็กต์ที่แตกต่างกันจะไม่รบกวนซึ่งกันและกัน คุณสามารถติดตั้ง virtualenv (ซึ่งเป็นแพ็คเกจ pip) ผ่านทาง
pip install virtualenv
Virtualenvs เป็นโฟลเดอร์ที่มีสำเนาของ python executable และแพ็คเกจ python ทั้งหมด หากต้องการสร้าง virtualenv ชื่อ venv ด้วย python3 จะมีการรันหนึ่งครั้ง
virtualenv /path/to/venv --python=python3
หากต้องการเปิดใช้งาน virtualenv:
. /path/to/venv/bin/activate
สามารถดูบทแนะนำโดยละเอียดเพิ่มเติมเกี่ยวกับ virtualenvs และตัวเลือกต่างๆ ได้ที่นี่
สาขาหลักรองรับ Tensorflow ตั้งแต่เวอร์ชัน 1.4 ถึง 1.14 สำหรับการรองรับ Tensorflow 2.0 โปรดใช้สาขา tf2
โคลน repo และ cd ลงไป:
git clone https://github.com/openai/baselines.git
cd baselines
หากคุณยังไม่ได้ติดตั้ง TensorFlow ให้ติดตั้ง TensorFlow รสชาติที่คุณชื่นชอบ ในกรณีส่วนใหญ่คุณอาจใช้
pip install tensorflow-gpu==1.14 # if you have a CUDA-compatible gpu and proper drivers
หรือ
pip install tensorflow==1.14
เพื่อติดตั้ง Tensorflow 1.14 ซึ่งเป็นเวอร์ชันล่าสุดของ Tensorflow ที่สาขาหลักรองรับ โปรดดูคู่มือการติดตั้ง TensorFlow สำหรับรายละเอียดเพิ่มเติม
ติดตั้งแพ็คเกจพื้นฐาน
pip install -e .
ตัวอย่างพื้นฐานบางส่วนใช้เครื่องจำลองฟิสิกส์ MuJoCo (multi-joint dynamics in contact) ซึ่งเป็นกรรมสิทธิ์และต้องใช้ไบนารีและใบอนุญาต (สามารถรับใบอนุญาตชั่วคราว 30 วันได้จาก www.mujoco.org) คำแนะนำในการตั้งค่า MuJoCo สามารถพบได้ที่นี่
การทดสอบหน่วยทั้งหมดในเส้นพื้นฐานสามารถรันได้โดยใช้ pytest runner:
pip install pytest
pytest
อัลกอริธึมส่วนใหญ่ใน repo พื้นฐานถูกใช้ดังนี้:
python -m baselines.run --alg= < name of the algorithm > --env= < environment_id > [additional arguments]
ตัวอย่างเช่น เพื่อฝึกเครือข่ายที่เชื่อมต่อเต็มรูปแบบซึ่งควบคุม MuJoCo ฮิวแมนนอยด์โดยใช้ PPO2 เป็นเวลา 20 ล้านครั้ง
python -m baselines.run --alg=ppo2 --env=Humanoid-v2 --network=mlp --num_timesteps=2e7
โปรดทราบว่าสำหรับสภาพแวดล้อม mujoco เครือข่ายที่เชื่อมต่อโดยสมบูรณ์เป็นค่าเริ่มต้น ดังนั้นเราจึงสามารถละเว้น --network=mlp
ได้ ไฮเปอร์พารามิเตอร์สำหรับทั้งเครือข่ายและอัลกอริธึมการเรียนรู้สามารถควบคุมได้ผ่านทางบรรทัดคำสั่ง เช่น:
python -m baselines.run --alg=ppo2 --env=Humanoid-v2 --network=mlp --num_timesteps=2e7 --ent_coef=0.1 --num_hidden=32 --num_layers=3 --value_network=copy
จะตั้งค่าสัมประสิทธิ์เอนโทรปีเป็น 0.1 และสร้างเครือข่ายที่เชื่อมต่อกันเต็มรูปแบบ 3 ชั้น แต่ละชั้นมี 32 หน่วยที่ซ่อนอยู่ และสร้างเครือข่ายแยกต่างหากสำหรับการประมาณค่าฟังก์ชัน (เพื่อไม่ให้แชร์พารามิเตอร์กับเครือข่ายนโยบาย แต่มีโครงสร้างเหมือนกัน )
ดู docstrings ใน common/models.py สำหรับคำอธิบายของพารามิเตอร์เครือข่ายสำหรับโมเดลแต่ละประเภท และ docstring สำหรับ baselines/ppo2/ppo2.py/learn() สำหรับคำอธิบายของ ppo2 ไฮเปอร์พารามิเตอร์
DQN กับ Atari ณ จุดนี้ถือเป็นเกณฑ์มาตรฐานคลาสสิก หากต้องการรันการใช้งานพื้นฐาน DQN บน Atari Pong:
python -m baselines.run --alg=deepq --env=PongNoFrameskip-v4 --num_timesteps=1e6
API การทำให้ซีเรียลไลซ์อัลกอริทึมยังไม่รวมเป็นหนึ่งอย่างถูกต้อง อย่างไรก็ตาม มีวิธีง่ายๆ ในการบันทึก/กู้คืนโมเดลที่ได้รับการฝึกแล้ว --save_path
และ --load_path
ตัวเลือกบรรทัดคำสั่งจะโหลดสถานะ tensorflow จากเส้นทางที่กำหนดก่อนการฝึก และบันทึกหลังจากการฝึกตามลำดับ ลองจินตนาการว่าคุณต้องการฝึก ppo2 บน Atari Pong บันทึกโมเดล จากนั้นลองนึกภาพสิ่งที่ได้เรียนรู้ในภายหลัง
python -m baselines.run --alg=ppo2 --env=PongNoFrameskip-v4 --num_timesteps=2e7 --save_path= ~ /models/pong_20M_ppo2
ซึ่งควรจะได้รางวัลเฉลี่ยต่อตอนประมาณ 20 ครั้ง หากต้องการโหลดและแสดงภาพโมเดล เราจะดำเนินการดังต่อไปนี้ - โหลดโมเดล ฝึก 0 ขั้นตอน จากนั้นจึงแสดงภาพ:
python -m baselines.run --alg=ppo2 --env=PongNoFrameskip-v4 --num_timesteps=0 --load_path= ~ /models/pong_20M_ppo2 --play
หมายเหตุ: สภาพแวดล้อม Mujoco ต้องการการทำให้เป็นมาตรฐานเพื่อให้ทำงานได้อย่างถูกต้อง ดังนั้นเราจึงห่อมันด้วยเครื่องห่อ VecNormalize ในปัจจุบัน เพื่อให้แน่ใจว่าโมเดลได้รับการบันทึกด้วยการทำให้เป็นมาตรฐาน (เพื่อให้สามารถกู้คืนและเรียกใช้โมเดลที่ได้รับการฝึกอบรมได้โดยไม่ต้องมีการฝึกอบรมเพิ่มเติม) ค่าสัมประสิทธิ์การทำให้เป็นมาตรฐานจะถูกบันทึกเป็นตัวแปรเทนเซอร์โฟลว์ สิ่งนี้สามารถลดประสิทธิภาพลงได้บ้าง ดังนั้น หากคุณต้องการขั้นตอนที่มีปริมาณงานสูงกับ Mujoco และไม่จำเป็นต้องบันทึก/กู้คืนโมเดล การใช้การทำให้เป็นมาตรฐานแบบตัวเลขแทนอาจสมเหตุสมผล หากต้องการทำเช่นนั้น ให้ตั้งค่า 'use_tf=False` ใน baselines/run.py
ตามค่าเริ่มต้น ข้อมูลสรุปทั้งหมด รวมถึงความคืบหน้า เอาต์พุตมาตรฐาน จะถูกบันทึกลงในไดเร็กทอรีที่ไม่ซ้ำกันในโฟลเดอร์ temp ซึ่งระบุโดยการเรียกไปยัง tempfile.gettempdir() ของ Python ไดเร็กทอรีสามารถเปลี่ยนแปลงได้ด้วยตัวเลือกบรรทัดคำสั่ง --log_path
python -m baselines.run --alg=ppo2 --env=PongNoFrameskip-v4 --num_timesteps=2e7 --save_path= ~ /models/pong_20M_ppo2 --log_path= ~ /logs/Pong/
หมายเหตุ: โปรดทราบว่าตัวบันทึกจะเขียนทับไฟล์ที่มีชื่อเดียวกันในไดเร็กทอรีที่มีอยู่ ดังนั้นจึงขอแนะนำให้ตั้งชื่อโฟลเดอร์ด้วยการประทับเวลาที่ไม่ซ้ำกันเพื่อป้องกันการเขียนทับบันทึก
อีกวิธีหนึ่งที่สามารถเปลี่ยนไดเร็กทอรีชั่วคราวได้คือการใช้ตัวแปรสภาพแวดล้อม $OPENAI_LOGDIR
ดูตัวอย่างวิธีการโหลดและแสดงข้อมูลการฝึกได้ที่นี่
ผลลัพธ์ของการวัดประสิทธิภาพบน Mujoco (1M ไทม์สเต็ป) และ Atari (10M ไทม์สเต็ป) มีให้ที่นี่สำหรับ Mujoco และที่นี่สำหรับ Atari ตามลำดับ โปรดทราบว่าผลลัพธ์เหล่านี้อาจไม่ได้อยู่ในโค้ดเวอร์ชันล่าสุด โดยมีการระบุแฮชเฉพาะที่ได้รับผลลัพธ์ในหน้าการวัดประสิทธิภาพ
หากต้องการอ้างอิงพื้นที่เก็บข้อมูลนี้ในสิ่งพิมพ์:
@misc{baselines,
author = {Dhariwal, Prafulla and Hesse, Christopher and Klimov, Oleg and Nichol, Alex and Plappert, Matthias and Radford, Alec and Schulman, John and Sidor, Szymon and Wu, Yuhuai and Zhokhov, Peter},
title = {OpenAI Baselines},
year = {2017},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/openai/baselines}},
}