Status: Pemeliharaan (mengharapkan perbaikan bug dan pembaruan kecil)
OpenAI Baselines adalah serangkaian implementasi algoritma pembelajaran penguatan berkualitas tinggi.
Algoritme ini akan memudahkan komunitas riset untuk mereplikasi, menyempurnakan, dan mengidentifikasi ide-ide baru, dan akan menciptakan dasar yang baik untuk membangun penelitian. Implementasi DQN kami dan variannya kira-kira setara dengan skor di makalah yang diterbitkan. Kami berharap pendekatan ini dapat digunakan sebagai dasar untuk menambahkan ide-ide baru, dan sebagai alat untuk membandingkan pendekatan baru dengan pendekatan yang sudah ada.
Garis dasar memerlukan python3 (>=3.5) dengan header pengembangan. Anda juga memerlukan paket sistem CMake, OpenMPI, dan zlib. Itu dapat diinstal sebagai berikut
sudo apt-get update && sudo apt-get install cmake libopenmpi-dev python3-dev zlib1g-dev
Instalasi paket sistem di Mac memerlukan Homebrew. Dengan Homebrew terinstal, jalankan perintah berikut:
brew install cmake openmpi
Dari perspektif kewarasan paket python secara umum, sebaiknya gunakan lingkungan virtual (virtualenvs) untuk memastikan paket dari proyek yang berbeda tidak saling mengganggu. Anda dapat menginstal virtualenv (yang merupakan paket pip) melalui
pip install virtualenv
Virtualenvs pada dasarnya adalah folder yang memiliki salinan python yang dapat dieksekusi dan semua paket python. Untuk membuat virtualenv bernama venv dengan python3, seseorang dijalankan
virtualenv /path/to/venv --python=python3
Untuk mengaktifkan virtualenv:
. /path/to/venv/bin/activate
Tutorial lebih menyeluruh tentang virtualenvs dan opsi dapat ditemukan di sini
Cabang master mendukung Tensorflow dari versi 1.4 hingga 1.14. Untuk dukungan Tensorflow 2.0, silakan gunakan cabang tf2.
Kloning repo dan cd ke dalamnya:
git clone https://github.com/openai/baselines.git
cd baselines
Jika Anda belum menginstal TensorFlow, instal varian TensorFlow favorit Anda. Dalam kebanyakan kasus, Anda dapat menggunakannya
pip install tensorflow-gpu==1.14 # if you have a CUDA-compatible gpu and proper drivers
atau
pip install tensorflow==1.14
untuk menginstal Tensorflow 1.14, yang merupakan versi terbaru Tensorflow yang didukung oleh cabang master. Lihat panduan instalasi TensorFlow untuk detail selengkapnya.
Instal paket baseline
pip install -e .
Beberapa contoh dasar menggunakan simulator fisika MuJoCo (multi-jointdynamics in contact), yang merupakan hak milik dan memerlukan biner dan lisensi (lisensi sementara 30 hari dapat diperoleh dari www.mujoco.org). Petunjuk tentang pengaturan MuJoCo dapat ditemukan di sini
Semua pengujian unit di garis dasar dapat dijalankan menggunakan pytest runner:
pip install pytest
pytest
Sebagian besar algoritma dalam repo baseline digunakan sebagai berikut:
python -m baselines.run --alg= < name of the algorithm > --env= < environment_id > [additional arguments]
Misalnya, untuk melatih jaringan yang terhubung penuh untuk mengendalikan humanoid MuJoCo menggunakan PPO2 untuk jangka waktu 20 juta
python -m baselines.run --alg=ppo2 --env=Humanoid-v2 --network=mlp --num_timesteps=2e7
Perhatikan bahwa untuk lingkungan mujoco, jaringan yang terhubung sepenuhnya adalah default, jadi kita dapat menghilangkan --network=mlp
Hyperparameter untuk jaringan dan algoritme pembelajaran dapat dikontrol melalui baris perintah, misalnya:
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
akan menetapkan koefisien entropi ke 0,1, dan membangun jaringan yang terhubung penuh dengan 3 lapisan dengan masing-masing 32 unit tersembunyi, dan membuat jaringan terpisah untuk estimasi fungsi nilai (sehingga parameternya tidak dibagikan dengan jaringan kebijakan, tetapi strukturnya sama )
Lihat docstrings di common/models.py untuk deskripsi parameter jaringan untuk setiap jenis model, dan docstring untuk baselines/ppo2/ppo2.py/learn() untuk deskripsi hyperparameter ppo2.
DQN dengan Atari pada saat ini merupakan tolok ukur klasik. Untuk menjalankan implementasi dasar DQN di Atari Pong:
python -m baselines.run --alg=deepq --env=PongNoFrameskip-v4 --num_timesteps=1e6
API serialisasi algoritme belum disatukan dengan benar; namun, ada metode sederhana untuk menyimpan/memulihkan model yang dilatih. Opsi baris perintah --save_path
dan --load_path
memuat status tensorflow dari jalur tertentu sebelum pelatihan, dan menyimpannya masing-masing setelah pelatihan. Bayangkan Anda ingin melatih ppo2 di Atari Pong, menyimpan modelnya, lalu memvisualisasikan apa yang telah dipelajarinya.
python -m baselines.run --alg=ppo2 --env=PongNoFrameskip-v4 --num_timesteps=2e7 --save_path= ~ /models/pong_20M_ppo2
Ini akan menghasilkan imbalan rata-rata per episode sekitar 20. Untuk memuat dan memvisualisasikan model, kita akan melakukan hal berikut - memuat model, melatihnya selama 0 langkah, lalu memvisualisasikannya:
python -m baselines.run --alg=ppo2 --env=PongNoFrameskip-v4 --num_timesteps=0 --load_path= ~ /models/pong_20M_ppo2 --play
CATATAN: Lingkungan Mujoco memerlukan normalisasi agar berfungsi dengan baik, jadi kami membungkusnya dengan pembungkus VecNormalize. Saat ini, untuk memastikan model disimpan dengan normalisasi (sehingga model yang dilatih dapat dipulihkan dan dijalankan tanpa pelatihan lebih lanjut) koefisien normalisasi disimpan sebagai variabel tensorflow. Hal ini dapat sedikit menurunkan performa, jadi jika Anda memerlukan langkah-langkah throughput tinggi dengan Mujoco dan tidak perlu menyimpan/memulihkan model, mungkin masuk akal untuk menggunakan normalisasi numpy. Untuk melakukannya, setel 'use_tf=False` di baselines/run.py.
Secara default, semua data ringkasan, termasuk kemajuan, keluaran standar, disimpan ke direktori unik di folder temp, ditentukan oleh panggilan ke tempfile.gettempdir() Python. Direktori dapat diubah dengan opsi baris perintah --log_path
.
python -m baselines.run --alg=ppo2 --env=PongNoFrameskip-v4 --num_timesteps=2e7 --save_path= ~ /models/pong_20M_ppo2 --log_path= ~ /logs/Pong/
CATATAN: Perlu diketahui bahwa logger akan menimpa file dengan nama yang sama di direktori yang sudah ada, oleh karena itu disarankan agar nama folder diberi stempel waktu unik untuk mencegah log tertimpa.
Cara lain untuk mengubah direktori temp adalah melalui penggunaan variabel lingkungan $OPENAI_LOGDIR
.
Untuk contoh cara memuat dan menampilkan data pelatihan, lihat di sini.
Hasil benchmark pada Mujoco (1 juta langkah waktu) dan Atari (10 juta langkah waktu) masing-masing tersedia di sini untuk Mujoco dan di sini untuk Atari. Perhatikan bahwa hasil ini mungkin tidak ada pada versi kode terbaru, hash penerapan tertentu yang hasilnya diperoleh ditentukan pada halaman tolok ukur.
Untuk mengutip repositori ini dalam publikasi:
@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}},
}