728x90
이 글은 Advantage Actor Critic (A2C) using Robotics Simulations with Panda-Gym 🤖을 수행하고 정리한 글입니다.
A2C 알고리즘이란?
Advantage Actor Critic(A2C)는 강화학습에서 널리 사용되는 알고리즘 중 하나로
정책 기반(Policy-base)과 가치 기반(Value-base) 학습의 장점을 결합한 하이브리드 방식입니다.
1️⃣ Actor Network (정책 네트워크):
- 역할: 환경에서 최적의 행동(Policy)을 결정합니다.
- 출력: 현재 상태에서 어떤 행동을 취할지 결정하는 확률 분포를 출력합니다.
- 학습: Critic Network로부터 받은 Advantage 값을 기반으로 Policy Gradient 방법을 통해 정책을 업데이트하여 장기 보상을 최대화합니다.
2️⃣ Critic Network (평가 네트워크)
- 역할: 상태의 가치를 평가합니다.
- 출력: 현재 상태에서 기대할 수 있는 미래의 보상의 크기를 추정한 상태의 가치를 출력합니다.
- 학습: 실제 보상과 예측 가치의 차이인 TD 오류를 최소화하도록 Gradient Descent 방법을 통해 학습합니다.
1. 사전 준비
📦 필수 라이브러리 설치
다음 명령어를 실행하여 필수 라이브러리를 설치합니다
!pip install stable-baselines3[extra]
!pip install gymnasium
!pip install huggingface_sb3
!pip install huggingface_hub
!pip install panda_gym
💡 설치 팁
Python 3.8 이상을 권장합니다.
설치 중 문제가 발생하면 --upgrade 옵션을 추가해 pip과 라이브러리를 최신 상태로 업데이트하세요.
🔍 알아두면 좋은 점
stable-baselines3[extra]는 OpenAI Gym, Atari 환경, PyBullet 등과 호환되도록 확장 패키지를 포함합니다.
panda-gym은 로봇 시뮬레이션 환경을 제공하며 PyBullet 물리 엔진을 기반으로 합니다.
🔑 Hugging Face Hub 로그인
Hugging Face Hub에 모델을 업로드하려면 먼저 계정에 로그인합니다. 아래 코드를 실행하고 API 토큰을 입력하세요.
from huggingface_hub import notebook_login
notebook_login()
💡 API 토큰은 Hugging Face Token 설정 페이지에서 발급받을 수 있습니다.
🔍 알아두면 좋은 점
Hugging Face Hub는 모델 저장소로 사용되며 평가 및 시각화 결과를 커뮤니티와 공유할 수 있습니다.
API 토큰은 "Read/Write" 권한이 있어야 업로드가 가능합니다.
2. GPU 설정 및 가상 디스플레이 생성
⚡ GPU 설정
Google Colab에서는 Runtime > Change Runtime Type 메뉴를 통해 GPU를 활성화해야 훈련 속도가 크게 향상됩니다.
💡 GPU는 CUDA를 활용해 복잡한 행렬 연산을 병렬 처리하는데, 강화학습에서 대량의 시뮬레이션 데이터를 처리하는데 필수적입니다.
🖥️ 가상 디스플레이 설치
강화학습 훈련 도중 시뮬레이션 동영상을 생성하려면 가상 화면이 필요합니다.
!apt install python-opengl ffmpeg xvfb
!pip install pyvirtualdisplay
from pyvirtualdisplay import Display
# 가상 디스플레이 생성
virtual_display = Display(visible=0, size=(1400, 900))
virtual_display.start()
🔍 알아두면 좋은 점
python-opengl은 3D 렌더링 라이브러리로 시뮬레이션 환경을 시각화합니다.
xvfb는 가상 화면을 생성해 Colab과 같은 GUI가 업는 환경에서도 그래픽을 처리할 수 있습니다.
3. Panda-Gym 환경 초기화
🤖 PandaReachDense-v3 환경
PandaReachDense-v3 는 로봇 팔(End-Effector)이 목표 위치(녹색 공)에 도달하도록 훈련하는 Panda-Gym 환경입니다. Dense Reward 방식을 사용해 에이전트가 목표에 가까워질수록 점진적으로 보상을 제공합니다.
import gymnasium as gym
import panda_gym
env_id = "PandaReachDense-v3"
env = gym.make(env_id)
print("Observation Space:", env.observation_space)
print("Action Space:", env.action_space)
💡 알아두면 좋은 점
관찰 공간(Observation Space)은 딕셔너리 형태로 구성되며 목표 위치와 로봇 팔의 현재 위치 및 속도, 목표와의 거리를 포함합니다.
행동 공간(Action Space)은 로봇 팔의 엔드 이펙터(End-Effector)를 이동시키는 x, y, z 좌표입니다.
4. 정규화 및 벡터화
입력값과 보상을 정규화하면 학습 속도와 언정성이 크게 향상됩니다.
from stable_baselines3.common.vec_env import VecNormalize
from stable_baselines3.common.env_util import make_vec_env
env = make_vec_env(env_id, n_envs=4)
env = VecNormalize(env, norm_obs=True, norm_reward=True, clip_obs=10.)
💡 알아두면 좋은 점
VecNormalize는 관찰값(Observation)과 보상값(Reward)을 평균 0, 표준편차 1로 정규화합니다.
정규화된 데이터를 사용하면 정책 네트워크가 다양한 값 범위에서 더 잘 작동합니다.
5. A2C 모델 생성
🧠 A2C의 특징
Adavantage Actor Critic(A2C)는 Actor-Critic 방식으로 작동하며 안정성과 효율성이 뛰어납니다.
from stable_baselines3 import A2C
model = A2C(policy="MultiInputPolicy", env=env, verbose=1)
💡 알아두면 좋은 점:
MultiInputPolicy는 딕셔너리 형태의 관찰값을 처리하는 데 사용됩니다.
verbose=1 은 학습 로그를 출력하며 훈련 중 학습 진행 상태를 확인할 수 있습니다.
6. 모델 훈련
100만 타임스텝 동안 모델을 훈련합니다. 이 작업은 약 25 ~ 40분이 소요됩니다.
model.learn(1_000_000)
# 모델과 정규화 데이터 저장
model.save("a2c-PandaReachDense-v3")
env.save("vec_normalize.pkl")
💡 알아두면 좋은 점
훈련 중간에 저장하면 학습을 중단해도 진행 상태를 복구할 수 있습니다.
정규화 데이터(vec_normalize.pkl)는 평가 시에도 동일한 설정을 유지하도록 로드해야 합니다.
7. 모델 평가
훈련된 모델을 테스트하여 평균 보상을 확인합니다.
from stable_baselines3.common.evaluation import evaluate_policy
eval_env = DummyVecEnv([lambda: gym.make(env_id)])
eval_env = VecNormalize.load("vec_normalize.pkl", eval_env)
eval_env.training = False
eval_env.norm_reward = False
model = A2C.load("a2c-PandaReachDense-v3")
mean_reward, std_reward = evaluate_policy(model, eval_env)
print(f"Mean reward = {mean_reward:.2f} +/- {std_reward:.2f}")
💡 알아두며 좋은 점
평가 환경에서는 training =False로 설정해 모델이 학습되지 않도록 해야 합니다.
평균 보상이 높고 표준편차가 낮을수록 에이전트의 성능이 안정적임을 나타냅니다.
8. Hugging Face Hub에 업로드
훈련된 모델과 평가 결과를 Hugging Face Hub에 업로드합니다.
from huggingface_sb3 import package_to_hub
package_to_hub(
model=model,
model_name="a2c-PandaReachDense-v3",
model_architecture="A2C",
env_id="PandaReachDense-v3",
eval_env=eval_env,
repo_id="your-username/a2c-PandaReachDense-v3",
commit_message="Initial commit"
)
💡 알아두면 좋은 점
package_to_hub는 평가 결과와 동영상 리플레이를 포함한 모델 카드를 자동 생성합니다.
업로드된 모델은 Hugging Face Hub에서 쉽게 공유 및 평가할 수 있습니다.
728x90
'강화학습' 카테고리의 다른 글
[Deep RL Course] 강화학습 프레임워크 (0) | 2024.12.24 |
---|---|
[Deep RL Course] 강화 학습(Reinforcement Learning)이란? (0) | 2024.12.23 |
[Panda-gym] Panda-gym 가이드 (3) (0) | 2024.12.04 |
[Panda-gym] Panda-gym 가이드 (2) (0) | 2024.12.03 |
[Panda-gym] Panda-gym 가이드 (1) (0) | 2024.11.17 |