สามารถดู วัสดุเสริม ได้ที่นี่ https://github.com/sacktock/AMBS/blob/main/supplementary-material.pdf นอกจากนี้ โปรดเยี่ยมชมเอกสารของเราได้ที่นี่:
AMBS เข้ากันได้กับ Safety Gym แล้ว
พื้นที่เก็บข้อมูล GitHub สำหรับ "การป้องกันตามแบบจำลองโดยประมาณสำหรับการเรียนรู้การเสริมแรงอย่างปลอดภัย" และ "การใช้ประโยชน์จากการป้องกันตามแบบจำลองโดยประมาณเพื่อการรับประกันความปลอดภัยที่น่าจะเป็นในสภาพแวดล้อมต่อเนื่อง"
ด้วยการใช้ประโยชน์จากโมเดลโลกสำหรับการป้องกันแบบมองไปข้างหน้า เราจึงใช้อัลกอริธึมวัตถุประสงค์ทั่วไปสำหรับการตรวจสอบความปลอดภัยของนโยบาย RL ที่เรียนรู้ โดยเฉพาะอย่างยิ่ง เราใช้ DreamerV3 เพื่อจำลองอนาคตที่เป็นไปได้ (ร่องรอย) ในพื้นที่แฝงของโมเดลไดนามิกที่เรียนรู้ เราจะตรวจสอบร่องรอยเหล่านี้แต่ละรายการและประเมินความน่าจะเป็นที่จะกระทำการละเมิดความปลอดภัยในอนาคตอันใกล้นี้ หากความน่าจะเป็นนี้ไม่เพียงพอ เราจะแทนที่นโยบายที่เรียนรู้ด้วยนโยบายที่ปลอดภัยที่ได้รับการฝึกอบรมเพื่อลดการละเมิดข้อจำกัด
ในการทดลองของเราที่มีรายละเอียดใน "การป้องกันตามแบบจำลองโดยประมาณสำหรับการเรียนรู้การเสริมแรงอย่างปลอดภัย" เอเจนต์ทั้งหมดถูกใช้งานด้วย JAX แม้ว่าการขึ้นต่อกันส่วนใหญ่จะทับซ้อนกัน แต่ก็อาจแตกต่างกันเล็กน้อย ขึ้นอยู่กับว่าคุณใช้งานเอเจนต์ที่ใช้ DreamerV3 หรือเอเจนต์ที่ใช้โดปามีน
เราขอแนะนำให้สร้างสภาพแวดล้อม conda แยกกันสำหรับเอเจนต์ที่ใช้ DreamerV3 และเอเจนต์ที่ใช้โดปามีน
conda create -n jax --clone base
conda create -n jax_dopamine --clone base
เราอ้างถึงพื้นที่เก็บข้อมูล DreamerV3 สำหรับรายการการขึ้นต่อกันที่เกี่ยวข้องกับเอเจนต์ที่ใช้ DreamerV3 และเราอ้างถึง google/dopamine สำหรับรายการการขึ้นต่อกันที่เกี่ยวข้องกับตัวแทนที่ใช้โดปามีน
conda activate jax
pip install //DreamerV3 dependencies
conda activate jax_dopamine
pip install //dopamine dependencies
หรือใช้ไฟล์ข้อกำหนดของเรา แม้ว่าเราจะเน้นว่าการติดตั้ง JAX เฉพาะที่จำเป็นนั้นขึ้นอยู่กับฮาร์ดแวร์
conda activate jax
pip install -r requirements_jax.txt
conda activate jax_dopamine
pip install -r requirements_jax_dopamine.txt
สำหรับตัวแทนที่ใช้ DreamerV3 ให้นำทางไปยังไดเร็กทอรีย่อยที่เกี่ยวข้องและรัน train.py
คำสั่งต่อไปนี้จะรัน DreamerV3 พร้อม AMBS บน Seaquest สำหรับ 40M เฟรม ธง --env.atari.labels
ใช้เพื่อระบุป้ายกำกับความปลอดภัย death
, early-surface
, out-of-oxygen
และตัวเลือก xlarge
จะกำหนดขนาดของโมเดล ( xlarge
เป็นค่าเริ่มต้นสำหรับเกมอาตาริ)
cd dreamerV3-shield
python train.py --logdir ./logdir/seaquest/shield --configs atari xlarge --task atari_seaquest --env.atari.labels death early-surface out-of-oxygen --run.steps 10000000
เมล็ดสุ่มสามารถตั้งค่าได้ด้วยแฟล็ก --seed
(ค่าเริ่มต้น 0)
สำหรับสารที่ใช้โดปามีน ให้ไปที่ไดเร็กทอรีย่อยโดปามีนและเรียกใช้สารที่ต้องการ
cd dopamine
python -um dopamine.discrete_domains.train --base_dir ./logdir/seaquest/rainbow --gin_files ./dopamine/jax/agents/full_rainbow/configs/full_rainbow_seaquest.gin
เมล็ดสุ่มสามารถตั้งค่าได้โดยการแก้ไขไฟล์ .gin ที่เกี่ยวข้อง (เช่น JaxFullRainbowAgent.seed=0)
สำหรับการวางแผนการวิ่งเราใช้เทนเซอร์บอร์ด ไปที่ไดเรกทอรีย่อยที่เกี่ยวข้องและเริ่มเทนเซอร์บอร์ด
cd dreamerV3-shield
tensorboard --logdir ./logdir/seaquest
Safety Gym สร้างขึ้นบน MuJoCo สำหรับรายละเอียดการติดตั้ง MuJoCo เราแนะนำให้คุณที่นี่ ข้อกำหนดเพิ่มเติมสำหรับ Safety Gym มีดังต่อไปนี้:
gym>=0.15.3
joblib>=0.14.0
mujoco_py>=2.0.2.7
numpy>=1.17.4
xmltodict>=0.12.0
หากคุณได้ปฏิบัติตามคำแนะนำในการตั้งค่าและการติดตั้งก่อนหน้านี้ อาจเป็นไปตามการขึ้นต่อกันเหล่านี้แล้ว
เพื่อให้ AMBS ทำงานใน Safety Gym เราจำเป็นต้องลงโทษนโยบายงาน (ที่ไม่มีการป้องกัน) เรามีเทคนิคการลงโทษสามแบบต่อไปนี้ที่ช่วยให้ AMBS ผสานเข้ากับนโยบายที่ให้รางวัลสูงสุดและตอบสนองข้อจำกัดด้านความปลอดภัยของสภาพแวดล้อม Safety Gym:
python train.py ./logdir/safetygym/PointGoal1/shield_penl --configs safetygym_vision large --task safetygym_Safexp-PointGoal1-v0 --penalty_coeff 1.0 --normalise_ret False --penl_critic_type vfunction --run.steps 500000
python train.py --logdir ./logdir/safetygym/PointGoal1/shield_plpg --configs safetygym_vision large --task safetygym_Safexp-PointGoal1-v0 --penalty_coeff 0.8 --plpg True --normalise_ret False --penl_critic_type vfunction --run.steps 500000
python train.py --logdir ./logdir/safetygym/PointGoal1/shield_copt --configs safetygym_vision large --task safetygym_Safexp-PointGoal1-v0 --penalty_coeff 1.0 --copt True --normalise_ret False --penl_critic_type vfunction --run.steps 500000
บทความวิจัยของเราที่สรุปเทคนิคเหล่านี้มีอยู่ที่นี่: http://arxiv.org/abs/2402.00816
เราอ้างถึงพื้นที่เก็บข้อมูลต่อไปนี้ซึ่งใช้พัฒนาโค้ดของเรา: