[개인 공부] RL-Tycoon-Agent "강화학습" 개인 공부 기록(2)

2026. 3. 8. 13:44·4. [팀] 프로젝트 및 공모전/4-3 RL-Tycoon-Agent

학습 결과 요약

모드 최고 보상 평균 보상 조기종료 시점 비고
60일 26,968.0 18,586 ± 6,649 미종료 (43/150) 계속 개선 중
30일 12,051.1 7,334 ± 5,277 13.64M 스텝 patience 150 도달

1. Reward Shaping (보상 설계)

개념

에이전트가 최종 목표(매출 극대화)까지 도달하기 어려울 때, 중간 단계마다 보상/패널티를 부여하여 학습 방향을 유도하는 기법입니다.

적용 내용

행동별 보상 (모든 알고리즘 통일):
  주문 접수 (take_order):        +6.0
  주방 제출 (submit_kitchen):    +5.0
  음식 픽업 (pickup_food):       +5.0
  음식 서빙 (serve_food):        +5.0
  음료 픽업 (pickup_drink):      +5.0
  음료 서빙 (serve_drink):       +5.0
  업그레이드 구매 (buy_upgrade):  +5.0
  대기 손님 착석 (waiting_seated): +3.0
  고아 아이템 폐기 (trash_orphan): +1.0

  손님 이탈 (lost_customer):     -15.0
  대기 손님 이탈 (waiting_left):  -8.0
  쓰레기통 사용 (trash):         -4.0
  잘못된 테이블 (wrong_table):    -1.5
  유휴 패널티 (idle_penalty):    -1.3
  손님 대기중 (customer_waiting): -0.3
  이동 차단 (blocked_move):      -0.2

핵심 원칙

원칙 설명 예시
보상 균형 긍정 보상과 부정 보상의 크기가 적절해야 함 서빙 +5 vs 이탈 -15 (이탈 1번이면 서빙 3번으로도 못 메움)
행동 유도 원하는 행동 순서대로 보상 체인 구성 주문→주방→픽업→서빙: 각 +5~6
고아 아이템 손님이 떠난 후 들고 있는 음식 처리에 보상 trash_orphan: +1.0 (빨리 버리면 다음 손님 대응 가능)
알고리즘 통일 모든 알고리즘(PPO/DQN/SAC/A3C/MARL/ModelBased)의 보상 값 동기화 동일한 게임 환경이므로 보상 체계도 동일해야 공정 비교 가능

왜 통일했는가?

  • 이전에는 PPO만 보상을 조정하여 알고리즘 간 성능 비교가 불가능했습니다.
  • 개선 후 12개 config 파일(6알고리즘 × 2모드) 모두 동일한 보상을 적용했습니다.
  • 동일 MDP(마르코프 결정 과정)에서는 보상 함수가 같아야 알고리즘 성능을 공정하게 비교할 수 있습니다.

2. 조기 종료 (Early Stopping / Patience)

개념

학습이 더 이상 개선되지 않을 때 자동으로 중단하는 메커니즘입니다. Patience(인내심)는 연속으로 몇 회 미개선 시 종료할 것인가를 결정합니다.

변경 사항: 50에서 150으로 증가

  • 이전: patience=50 (약 250K 스텝 후 성급히 종료)
  • 이후: patience=150 (약 750K 스텝 동안 추가 기회 부여)

왜 중요한가?

  • 강화학습은 지도학습보다 분산(variance)이 크기 때문에 일시적인 성능 하락이 자주 발생합니다.
  • patience가 너무 짧으면 국소 최적점(local optimum)에서 빠져나올 기회를 주지 못합니다.
  • 반대로 너무 길면 의미 없는 학습에 GPU 시간을 낭비하게 됩니다.

현재 결과

  • 30일 모드: 150/150 도달하여 12,051.1에서 종료되었습니다. 충분히 탐색했으나 더 이상 개선이 불가능한 상태입니다.
  • 60일 모드: 43/150으로 아직 개선 여지가 존재하며 26,968.0까지 도달했습니다.

3. Learning Rate Schedule (학습률 스케줄)

개념

학습률(lr)을 고정하지 않고 학습이 진행됨에 따라 점진적으로 감소시키는 기법입니다.

적용: Linear Decay (선형 감소)

초기 학습률은 3e-4 (0.0003)로 시작하며, 총 스텝(total_timesteps)에 도달할 때 0으로 수렴하도록 설정했습니다.

현재 관측된 학습률:

  • 60일 모드: 0.000116 (12.2M / 10M 스텝, 약 61% 감소)
  • 30일 모드: 0.0000955 (13.6M / 10M 스텝, 약 68% 감소)

왜 필요한가?

  • 학습 초반: 큰 학습률을 통해 빠르게 좋은 영역을 탐색(exploration)합니다.
  • 학습 후반: 작은 학습률을 통해 세밀하게 정책을 미세조정(exploitation)합니다.
  • 고정 학습률의 문제점: 후반부에 학습률이 너무 크면 이미 찾은 좋은 정책에서 벗어날 위험이 있습니다. 확률적 경사 하강법(SGD)의 특성상 학습률이 크면 최적점 주변에서 진동(oscillation)이 발생합니다.

수식

$$lr(t) = lr_0 \times \left(1 - \frac{t}{T}\right)$$
  • $lr_0$: 초기 학습률 (3e-4)
  • $t$: 현재 스텝
  • $T$: 총 스텝 수 (10M)

4. 엔트로피 계수 (Entropy Coefficient)

개념

정책의 무작위성(확률 분산)을 유지하도록 하는 정규화 항입니다. 이 값이 높을수록 에이전트가 다양한 행동을 시도하게 됩니다.

 

변경 사항: 0.01에서 0.05로 증가

  • 이전 문제: 에이전트가 앞뒤로만 이동하는 정책 붕괴(policy collapse) 현상이 발생했습니다.
  • 엔트로피가 너무 낮으면 에이전트가 한두 가지 행동만 반복하는 국소 최적점에 빠지기 쉽습니다.
  • 값을 0.05로 올려 탐색(exploration) 과정을 강화했습니다.

PPO 손실 함수

$$L = L_{policy} - c_1 \cdot L_{value} + c_2 \cdot H(\pi)$$
  • $L_{policy}$: 정책 그래디언트 손실 (clipped)
  • $L_{value}$: 가치 함수 손실 ($c_1$ = vf_coef = 0.5)
  • $H(\pi)$: 정책 엔트로피 ($c_2$ = ent_coef = 0.05)

현재 관측된 엔트로피

  • entropy_loss: -1.57 (60일), -1.47~-1.57 (30일)
  • 7개 이산 행동의 최대 엔트로피는 ln(7)로 약 1.946입니다.
  • 현재 약 80% 수준을 유지하고 있어 충분히 다양한 행동을 탐색 중인 것으로 확인됩니다.

5. 네트워크 아키텍처

변경 사항: [256, 256]에서 [512, 256]으로 확장

관측 (116 floats)
       ↓
   FC(512) + tanh
       ↓
   FC(256) + tanh
       ↓
  ┌────┴────┐
Policy    Value
(7 actions) (scalar)

 

  • 관측 공간이 14개 테이블 데이터를 포함해 116차원으로 확장되었습니다.
  • 작은 네트워크는 이 복잡한 상태 공간을 표현하기에 표현력(capacity)이 부족합니다.
  • 첫 번째 레이어를 512로 키워 입력 특성의 조합을 더 풍부하게 학습할 수 있도록 개선했습니다.

주의할 점

  • 네트워크가 너무 크면 파라미터 과다로 인한 과적합(overfitting) 위험이 있으며 학습 속도(FPS)가 저하될 수 있습니다.
  • 현재 FPS는 740에서 1161 사이를 기록하며 충분히 빠른 속도를 유지하고 있습니다.

6. 환경 버그 수정이 학습에 미치는 영향

원칙

"보상 함수가 올바르더라도, 환경 자체에 버그가 있으면 에이전트는 잘못된 행동을 학습한다."

수정한 환경 버그들

버그 영향 수정 내용
음식/음료 서빙 실패 서빙 시도 → 실패 → 아이템 소실 → 보상 없음 → 에이전트가 서빙 회피 학습 서빙 실패 시 쓰레기통으로 이동하도록 수정하고 반환 값을 체크함
직원 끼임 (주방 확장) 직원이 벽에 끼어 이동 불가 → 작업 불이행 → 게임 성능 저하 히트박스 1px 마진 적용, 타일 중심 스냅, 3회 실패 시 태스크 포기 로직 추가
평점 2.6 상한 고객 만족도 최대 0.38 한계 → 평점 3.0 이상 불가 → 에이전트가 서비스 품질 개선 포기 만족도 최대치를 1.0으로 수정
2개 운반 특성 오류 2개 동시 운반 시 에이전트 혼란 (어느 테이블에 서빙할지 판단 불가) 해당 특성 삭제 및 carry_capacity를 1로 고정

 

  • 환경 디버깅은 하이퍼파라미터 튜닝보다 중요합니다.
  • 환경 버그로 인해 보상 신호가 잘못 전달되면 아무리 좋은 알고리즘을 사용해도 의미가 없습니다. 환경이 곧 학습 데이터임을 명심해야 합니다.

7. PPO 핵심 개념 요약

PPO (Proximal Policy Optimization)

핵심 아이디어: 정책을 업데이트할 때, 이전 정책에서 너무 멀리 벗어나지 않도록 변화폭을 제한합니다.

 

 

강화학습 알고리즘 정리: https://pak1010pak.tistory.com/151

 

[개인 공부] 강화 학습 "알고리즘"에 대한 공부(DQN, DDPG, PPO, GA, A3C / A2C, SAC, MARL, Model-Based RL)

안녕하세요!요즘 강화학습에 대해서 개인 프로젝트와 팀 토이 프로젝트를 진행중 입니다. 바이브 코딩이나 기타 AI한테 물어보면 요즘 유명한 PPO 알고리즘에 대해서만 다룹니다. 아무리 좋다고

pak1010pak.tistory.com

 

Clipping 수식

$$L^{CLIP} = \min\left(r_t(\theta) \hat{A}_t, \; \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) \hat{A}_t\right)$$
  • $r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}$: 정책 비율
  • $\hat{A}_t$: GAE로 추정한 어드밴티지
  • $\epsilon$: clip_range (0.2로 설정하여 정책 변화를 ±20%로 제한)

현재 관측 지표 해석

지표 값 의미
clip_fraction 0.05~0.06 5~6%의 샘플만 클리핑됨 (안정적 업데이트)
approx_kl 0.007 정책 변화량이 작음 (0.03 이상이면 경고, 현재 안정적)
explained_variance 0.80~0.96 가치 함수가 리턴의 80~96% 설명 (양호)
entropy_loss -1.57 탐색 수준 적절
value_loss 94~1100 60일이 30일보다 높음 (보상 스케일이 크기 때문이며 정상적인 현상)

8. 30일 vs 60일 학습 비교

항목 30일 모드 60일 모드
에피소드 길이 9,000 스텝 18,001 스텝
최고 보상 12,051 26,968
FPS 1,161 740
조기종료 발생 (13.6M) 미발생 (계속 학습중)
value_loss 94 1,100
수렴 난이도 상대적 쉬움 더 어려움 (긴 에피소드)

왜 60일이 더 어려운가?

  • Credit Assignment 문제: 에피소드가 길어질수록 어떤 행동이 최종 보상에 기여했는지 원인을 파악하기 어렵습니다.
  • 감가율(γ=0.99): 100스텝 뒤의 보상 가치는 $0.99^{100} \approx 0.366$ 으로 약 63% 감소합니다.
  • 관측 수가 2배로 늘어나 동일한 경험 횟수로는 다양성이 부족해지며, 결과적으로 더 많은 총 스텝(total_timesteps)이 요구됩니다.

9. 향후 개선 방향

목표

  • Curriculum Learning:
    • 쉬운 환경(테이블 4개)에서 학습을 시작하여 점진적으로 난이도와 복잡도 증가
  • Self-Play (MARL):
    • 에이전트 간 자기 대결을 통한 더 강력한 전략 발견
  • Reward Normalization:
    • 보상 스케일을 자동으로 정규화하여 value_loss 안정화 유도

장기 목표

  • Population-Based Training (PBT):
    • 여러 에이전트를 병렬 학습시키며 최적의 하이퍼파라미터 자동 탐색
  • Attention 메커니즘:
    • 14개 테이블 중 어느 곳에 주목해야 할지 스스로 학습하는 구조 도입
  • Hierarchical RL:
    • 고수준(어떤 테이블을 목표로 할지)과 저수준(어떻게 이동할지)의 정책 분리 설계

용어 사전

용어 설명
MDP Markov Decision Process. 상태, 행동, 보상, 전이 확률로 정의된 수학적 의사결정 프레임워크
Policy (π) 특정 상태에서 어떤 행동을 취할지 결정하는 확률 매핑 함수 (에이전트의 전략)
Value Function (V) 특정 상태에서 앞으로 기대할 수 있는 미래 누적 보상의 합
Advantage (A) Q(s,a) - V(s). 특정 행동이 평균적인 기대치보다 얼마나 더 나은지를 나타내는 지표
GAE Generalized Advantage Estimation. 분산과 편향의 균형을 맞춘 어드밴티지 추정 기법
Entropy 정책의 무작위성. 값이 높으면 다양한 시도(탐색적)를 하고, 낮으면 결정적인 행동을 취함
Clip Range PPO에서 정책이 한 번에 업데이트되는 폭의 제한값 (0.2는 ±20%를 의미)
On-Policy 현재 실행 중인 정책으로 수집한 데이터만 학습에 사용하는 방식 (PPO, A3C 등)
Off-Policy 과거에 다른 정책으로 수집한 데이터도 학습에 재사용할 수 있는 방식 (DQN, SAC 등)
Patience 조기종료를 결정하기까지 허용하는 연속적인 성능 미개선 횟수
Reward Shaping 최종 보상 외에 중간 단계의 보상을 인위적으로 설계하여 원하는 방향으로 학습을 유도하는 기법

'4. [팀] 프로젝트 및 공모전 > 4-3 RL-Tycoon-Agent' 카테고리의 다른 글

[강화 학습] RL-Tycoon-Agent 프로젝트 정리  (0) 2026.03.22
[개인 공부] RL-Tycoon-Agent "강화학습" 개인 공부 기록(1)  (0) 2026.03.06
'4. [팀] 프로젝트 및 공모전/4-3 RL-Tycoon-Agent' 카테고리의 다른 글
  • [강화 학습] RL-Tycoon-Agent 프로젝트 정리
  • [개인 공부] RL-Tycoon-Agent "강화학습" 개인 공부 기록(1)
고니3000원
고니3000원
공부 내용 정리, 자기발전 블로그 입니다. 기존 네이버 블로그에서 티스토리로 이전했습니다. https://blog.naver.com/pak1010pak
  • 고니3000원
    곤이의 공부 블로그
    고니3000원
  • 전체
    오늘
    어제
    • 분류 전체보기 (179) N
      • 1. AI 논문 + 모델 분석 (21) N
        • AI 논문 분석 (13)
        • AI 모델 분석 (8) N
      • 2. 자료구조와 알고리즘 (16)
        • 2-1 자료구조와 알고리즘 (13)
        • 2-2 강화학습 알고리즘 (3)
      • 3. 자습 & 메모(실전, 실습, 프로젝트) (25)
        • 3-1 문제 해석 (4)
        • 3-2 메모(실전, 프로젝트) (14)
        • 3-3 배포 실전 공부 (7)
      • 4. [팀] 프로젝트 및 공모전 (14)
        • 4-1 팀 프로젝트(메모, 공부) (1)
        • 4-2 Meat-A-Eye (6)
        • 4-3 RL-Tycoon-Agent (3)
        • 4-4 구조물 안정성 물리 추론 AI 경진대회(D.. (4)
      • 5. [개인] 프로젝트 및 공모전 (0)
        • 4-1 귀멸의칼날디펜스(자바스크립트 활용) (5)
        • 4-2 바탕화면 AI 펫 프로그램 (4)
        • 4-3 개인 프로젝트(기타) (3)
      • 개념 정리 step1 (32)
        • Python 기초 (7)
        • DBMS (1)
        • HTML | CSS (3)
        • Git | GitHub (1)
        • JavaScript (5)
        • Node.js (5)
        • React (1)
        • 데이터 분석 (6)
        • Python Engineering (3)
      • 개념 정리 step2 (57)
        • Machine | Deep Learning (15)
        • 멀티모달(Multi-modal) (23)
        • 강화 학습 (10)
        • AI Agent (9)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 네이버 곤이의 블로그(Naver->Tistory)
    • Github
  • 공지사항

  • 인기 글

  • 태그

    bottleneck
    프로젝트
    ViT
    Vision
    학습
    Attention Is All You Need
    transformer
    Python
    파인튜닝
    github
    강화학습
    paddleocr
    논문 리뷰
    자료구조
    모델 분석
    자바스크립트
    파이썬
    Ai
    pandas
    공모전
    귀칼
    구현
    데이터분석
    html
    알고리즘
    EfficientNet
    Grad-CAM
    OCR
    javascript
    OCR학습
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
고니3000원
[개인 공부] RL-Tycoon-Agent "강화학습" 개인 공부 기록(2)
상단으로

티스토리툴바