🧠 Unity ML-Agents란?
Unity ML-Agents는 게임 엔진 Unity를 기반으로 한 강화학습 플랫폼입니다. 이 툴킷을 통해 게임 캐릭터(NPC)를 학습하는 에이전트로 만들 수 있고, 실제 시뮬레이션 기반 환경에서 다양한 인공지능 학습 실험을 할 수 있습니다.
강화학습을 Unity에서 실습해보고 싶다면? ML-Agents는 최적의 선택입니다.
- 오픈소스, 활발한 커뮤니티
- Unity 씬 기반 학습 환경 구성
- Python API 기반 강화학습 훈련
- Gym/PettingZoo 호환 래퍼 제공
ML-Agents는 게임 AI, 로봇 시뮬레이션, 디지털 트윈 개발 등 다양한 영역에서 활용됩니다.
🤖 에이전트(Agent)란 무엇인가?
에이전트는 ML-Agents에서 학습의 주체가 되는 Unity 오브젝트입니다. 유니티 ML-Agents 프레임워크 내에서 에이전트는 자신의 환경을 관찰하고, 이러한 관찰을 바탕으로 결정을 내리며, 그 환경 내에서 행동을 실행할 수 있는 자율적인 액터로 정의됩니다. 다음과 같은 순환 구조를 가지고 있습니다.
관찰 → 의사결정 → 행동 → 보상
에이전트는 유니티 씬 내의 모든 캐릭터, 객체 또는 엔티티를 나타낼 수 있는 유니티 게임 오브젝트에 연결된 컴포넌트 형태로 구현됩니다. 이러한 에이전트 컴포넌트는 환경에 대한 관찰을 생성하고, 훈련된 모델에 의해 지시된 행동을 수행하며, 해당 행동의 효과에 대한 피드백으로 보상(긍정적 또는 부정적)을 할당하는 중요한 역할을 담당합니다. 환경 내의 각 개별 에이전트는 관찰 공간(인식할 수 있는 데이터 포인트의 수)과 행동 공간(수행할 수 있는 행동의 범위)의 특성과 같은 에이전트의 특정 속성을 정의하는 Behavior와 논리적으로 연결됩니다. 에이전트의 행동은 기본적인 관찰-의사결정-행동-보상 주기에 의해 관리됩니다. 이 반복적인 프로세스는 에이전트가 환경 내에서 학습하고 적응하는 방식의 핵심을 형성합니다.
✅ 기본 구성
- Unity GameObject에 Agent 컴포넌트를 추가
- Behavior Parameters로 관찰/행동/보상 공간 구성
- Sensor로 환경 감지
- Policy(신경망 모델)로 행동 결정
에이전트는 OnActionReceived(), CollectObservations(), OnEpisodeBegin() 등을 오버라이드하여 동작하게 됩니다.
예시: 로봇 청소기
- 관찰: 먼지 위치, 벽과의 거리
- 행동: 전진, 회전, 청소 시작
- 보상: 먼지 제거 → +1 / 벽 충돌 → -1
👀 센서(Sensor)의 역할과 종류
센서는 에이전트가 환경을 인식하는 감각입니다. ML-Agents 프레임워크 내에서 에이전트는 다양한 ISensor 구현을 활용하여 환경에 대한 정보를 수집합니다. 이러한 센서는 에이전트의 지각 장치 역할을 합니다. 센서 없이는 관찰이 불가능하며, 따라서 학습도 불가능합니다.
VectorSensor: 광범위한 정량적 정보를 입력할 수 있도록 임의의 수치 데이터를 관찰
CameraSensor: 카메라가 보는 시각적 관찰을 캡처하여 CNN(Convolutional Neural Network)을 사용하여 이미지 데이터를 처리
RayPerceptionSensor: 레이캐스트를 활용하여 주변 환경을 탐색하고 객체의 거리와 식별 정보를 수집
GridSensor: 광범위한 정량적 정보를 입력할 수 있도록 임의의 수치 데이터를 관찰
AudioSensor: 사운드 입력 처리
BufferSensor: 가변적인 수의 엔티티를 관찰
RenderTextureSensor: 렌더링된 텍스처를 관찰
에이전트가 사용하는 특정 센서의 선택은 에이전트가 환경으로부터 인식할 수 있는 정보의 유형과 품질에 직접적이고 상당한 영향을 미칩니다. 이는 결국 에이전트가 작업을 효과적으로 학습하고 실행하는 능력에 근본적으로 영향을 미칩니다. 센서는 에이전트와 환경을 연결하는 핵심 요소입니다. 다양한 사용 가능한 센서 유형과 각 센서의 강점 및 한계에 대한 포괄적인 이해는 효과적인 학습 환경을 설계하고 에이전트에서 원하는 지능형 행동을 달성하는 데 가장 중요합니다.
1. VectorSensor (자세히 알아보기)
- 정량적 데이터 수집 (좌표, 속도, 상태값 등)
- CollectObservations() 내부에서 AddObservation() 사용
- Tip: 관찰 순서/크기 불변 유지 필수!
sensor.AddObservation(transform.position);
sensor.AddObservation(currentBattery / maxBattery);
2. CameraSensor (자세히 알아보기)
- 에이전트가 시각적으로 환경을 인식
- CNN 기반 이미지 입력 처리
- Grayscale, 해상도, 압축 설정 가능
예: 더러운 영역을 시각적으로 인식하고 이동하는 로봇
3. RayPerceptionSensor (자세히 알아보기)
- 레이캐스트 기반 근거리 탐지
- 장애물, 아이템, 벽 탐지에 유용
- Ray 수, 시야각, 감지 태그 등 설정 가능
예: 벽과 가구를 피하면서 청소하는 로봇
4. GridSensor(자세히 알아보기)
- 공간을 격자(Grid)로 나눠서 인식
- 미로, 방 구조 인식, 탐색 최적화에 유용
예: 방을 격자 맵으로 변환해 영역별 청소 여부 판단
5. 기타 센서
BufferSensor | 유동적 객체 목록 추적 (ex. 움직이는 장애물들) |
AudioSensor | 소리 기반 입력 처리 (실험적 기능) |
RenderTextureSensor | 사용자 정의 텍스처 기반 관찰 (세분화 맵 등 활용) |
🔁 행동(Action)과 결정 구조
BehaviorType의 세 가지 모드
Default | 학습 or 추론 자동 전환 |
InferenceOnly | 학습 완료된 모델만 사용 |
HeuristicOnly | 사람이 지정한 규칙 사용 (디버깅, 테스트용) |
public override void Heuristic(in ActionBuffers actionsOut)
{
var ca = actionsOut.ContinuousActions;
ca[0] = Input.GetAxis("Horizontal");
ca[1] = Input.GetAxis("Vertical");
}
⏱️ 결정 타이밍과 에피소드 관리
결정 트리거 방법
- Agent.RequestDecision() : 수동 호출
- DecisionRequester : 자동 주기적 호출
에피소드 관리 함수
- OnEpisodeBegin() : 초기화 및 리셋
- EndEpisode() : 수동 종료
- Max Step 설정 도달 시 자동 종료
public override void OnEpisodeBegin()
{
transform.position = startPos;
RandomizeDustSpots();
}
🔧 Unity 수명주기와 통합
Agent는 MonoBehaviour를 상속하므로 기존 Unity 게임 오브젝트와 완벽하게 통합됩니다.
- FixedUpdate()에서 행동 적용
- OnEnable()/OnDisable() 재정의 시 base 메서드 호출 필수
- SetModel()로 런타임 중 정책 변경 가능
✅ 정리 요약
- Unity ML-Agents는 강화학습 환경을 손쉽게 Unity로 구축할 수 있게 해줍니다.
- 에이전트는 관찰-결정-행동-보상 주기로 동작합니다.
- 센서는 에이전트 학습 성능의 핵심이며, 적절한 선택이 중요합니다.
- 다양한 센서를 조합하여 실제 환경에 가까운 시뮬레이션을 만들 수 있습니다.
'Unity' 카테고리의 다른 글
[ML-Agents] Camera Sensor – 에이전트의 '눈'을 만들어주는 센서 (0) | 2025.05.14 |
---|---|
[ML-Agents] VectorSensor - 숫자로 보는 세상 (0) | 2025.05.14 |
[Unity] Unity와 Visual Studio Code 연동 가이드 (0) | 2025.03.07 |
[Unity] Mixamo를 활용하여 캐릭터를 가져왔는데 머터리얼이 깨질 때 (0) | 2025.02.26 |
[Unity] Mixamo를 활용한 캐릭터 생성하기(.fbx) (0) | 2025.02.26 |