김현우
  • Unity ML-Agents: 게임 AI에 생명을 불어넣기
    2025년 10월 25일 20시 38분 11초에 업로드 된 글입니다.
    작성자: kugorang
    728x90
    728x90

    들어가며

    기억하자. 관찰-행동-보상!

    이 글에서는 Unity ML-Agents Toolkit에 대해 깊이 있게 다뤄본다. 최근 회사 업무에서 리플레이 파일의 데이터를 바탕으로 인간스러운 봇을 만들기 위해 어떤 방법을 사용할까 하다, Unity에서 제공되는 ML-Agents를 사용해보면 어떨까하는 의견이 나와 정리하게 되었다. 이 툴킷은 단순히 게임을 만드는 도구가 아니라, 우리가 만든 가상 세계를 인공지능이 학습할 수 있는 환경으로 바꿔주는 강력한 도구이다.

     

    우리가 흔히 게임 엔진이라고 하면, 캐릭터를 만들고, 배경을 꾸미고, 물리 효과를 적용하는 그래픽 중심의 도구라고 생각하기 쉽다. 그런데 Unity ML-Agents는 그 위에 한 단계 더 나아가, 게임 속 캐릭터들이 단순히 미리 짜여진 규칙대로 움직이는 것이 아니라, 스스로 학습하고 진화하는 존재가 될 수 있도록 만들어준다.

     

    ML-Agents가 왜 필요한지, 기존 게임 AI와 어떤 차이가 있는지부터 시작해 핵심 개념과 구조, 그리고 실제 활용 사례까지 차근차근 살펴보자.

     

    왜 '규칙 기반 AI'로는 부족할까? (기존 AI의 한계)

    우리가 흔히 게임에서 만나는 NPC(비플레이어 캐릭터)들은 대부분 개발자가 직접 짠 규칙에 따라 움직인다. 예를 들어, ‘플레이어가 가까이 오면 공격한다’, ‘체력이 30% 이하이면 도망간다’ 같은 단순한 조건문이다. 이런 규칙 기반(Rule-Based) AI는 구현하기 쉽고, 단순한 상황에서는 충분히 잘 작동한다.

     

    하지만 게임이나 시뮬레이션이 점점 더 복잡해지면서 문제가 발생한다. 현실적인 전투 상황, 수많은 변수가 얽힌 스포츠 경기, 혹은 자율주행 시뮬레이션 같은 환경에서는 단순한 규칙만으로는 자연스럽고 지능적인 행동을 구현하기 어렵다.

     

    예를 들어, 전쟁 게임 속에서 아군이 여러 명 동시에 부상당했다고 가정해보자. 규칙 기반 NPC는 단순히 ‘가장 가까운 부상병에게 이동한다’라는 규칙을 따를 수 있다. 하지만 실제로는 상황이 훨씬 복잡하다.

     

    • 누가 더 심각하게 다쳤는가?
    • 적의 공격이 어디서 오는가?
    • 지금 치료하러 가는 것이 안전한가?

     

    이런 수많은 경우의 수를 사람이 일일이 코드로 짜는 것은 사실상 불가능하다.

     

    또한, 규칙 기반 AI는 예측 불가능한 상황에 매우 취약하다. 개발자가 미처 고려하지 못한 상황이 발생하면, NPC는 어색하게 행동하거나 멍하니 서 있을 수 있다. 장애물이 예상치 못한 위치에 생기면 NPC가 길을 찾지 못하고 계속 벽에 부딪히는 모습이 그 예이다.

     

    마지막으로, 규칙 기반 AI는 자연스러운 행동을 만들어내기 어렵다. 인간 플레이어는 상황에 따라 유연하게 판단하지만, 규칙 기반 NPC는 항상 같은 조건에서 같은 행동만 반복한다. 그래서 플레이어 입장에서는 금방 패턴을 파악하고, NPC가 ‘기계적으로 움직인다’는 느낌을 받게 된다.

    728x90

    스스로 학습하는 AI의 등장: ML-Agents

    이런 한계를 극복하기 위해 등장한 것이 바로 학습형 AI이다. 학습형 AI는 NPC가 스스로 환경을 관찰하고, 행동을 선택하며, 보상을 통해 점점 더 똑똑해지는 방식으로 동작한다. 즉, 사람이 모든 규칙을 짜주는 것이 아니라, NPC가 직접 경험을 통해 ‘어떤 행동이 좋은 행동인지’를 배워나가는 것이다.

     

    Unity ML-Agents는 바로 이런 학습형 AI를 손쉽게 구현할 수 있도록 도와주는 툴킷이다.

     

    특별 사례: 전쟁 게임 속 '메딕(Medic)' NPC

    ML-Agents의 필요성을 가장 잘 보여주는 대표적인 사례는 전쟁 게임 속 메딕(의무병) NPC이다. 메딕의 역할은 부상당한 아군을 찾아내고, 위험을 무릅쓰고 치료하는 것이다.

     

    겉으로 보기에는 단순해 보이지만, 메딕이 고려해야 할 상황은 매우 복잡하다.

     

    1. 위험 감지: 적의 총알이 날아오는 상황에서 무작정 달려가면 본인도 사망할 수 있다. 스스로 안전한 위치를 찾아야 한다.
    2. 우선순위 결정: 여러 아군이 동시에 부상당했을 때, 가장 가까운 아군을 살릴지, 가장 심각하게 다친 아군을 살릴지 판단해야 한다.
    3. 전략적 판단: 단순히 치료만 하는 것이 아니라, 팀 전체가 빠르게 접근할 수 있는 위치를 잡는 판단도 필요하다.

     

    이 모든 상황을 코드로 짜는 것은 불가능에 가깝다. 하지만 ML-Agents를 활용하면, 메딕은 환경을 관찰하고, 행동을 선택하며, 보상을 통해 점점 더 똑똑해진다.

     

    • 아군을 치료하면 보상 (+)
    • 아군이 사망하면 패널티 (-)
    • 메딕 자신이 사망하면 큰 패널티 (--)

     

    이런 보상 체계를 설계하면, 메딕은 수많은 시뮬레이션을 거치면서 ‘어떤 행동이 좋은 행동인지’를 스스로 학습하게 된다. 결국, 메딕 NPC는 상황에 맞게 유연하게 판단하고 행동하는 지능형 캐릭터로 진화하게 된다.

     

    ML-Agents, 어디에 사용할 수 있을까? (주요 활용 분야)

    ML-Agents는 단순히 게임을 넘어 연구, 산업, 교육 등 다양한 분야에서 활용될 수 있는 범용 AI 학습 플랫폼이다.

     

    게임 개발

    가장 대표적인 분야이다. 기존의 예측 가능한 NPC가 아닌, 플레이어의 행동에 유연하게 반응하고 예상치 못한 전략을 펼치는 NPC를 만들 수 있다. 이는 게임의 몰입감을 훨씬 높여준다.

     

    로보틱스

    로봇이 물체를 집거나 장애물을 피하는 행동을 실제 환경에서 실험하는 것은 비용과 위험이 크다. ML-Agents를 활용하면 가상 환경에서 수천, 수만 번의 시뮬레이션을 통해 로봇이 안전하게 스스로 학습할 수 있다.

     

    자율주행 시뮬레이션

    자율주행차를 실제 도로에서 학습시키는 것은 위험하고 제약이 많다. Unity로 가상의 도로 환경을 만들고, 다양한 날씨, 도로 상황, 돌발 변수를 시뮬레이션하며 차량이 스스로 주행을 학습하도록 할 수 있다.

     

    멀티에이전트 시뮬레이션

    여러 개체가 동시에 존재하며 서로 협력하거나 경쟁하는 상황을 모델링할 수 있다. 여러 드론이 협력해 구조 활동을 하거나, 스포츠 경기, 혹은 생태계의 포식자와 피식자 관계를 연구하는 데에도 활용된다.

     

    ML-Agents의 핵심 원리: 4가지 개념

    ML-Agents의 학습 과정은 기본적으로 세 가지 요소, 관찰(Observation), 행동(Action), 보상(Reward)으로 설명할 수 있다. 그리고 이 모든 것을 연결하는 정책(Policy)이 있다.

     

    에이전트는 세상을 바라보고(관찰), 그에 맞는 선택을 하고(행동), 그 결과에 따라 칭찬이나 벌을 받는다(보상). 이 구조가 반복되면서 에이전트는 점점 더 똑똑해진다.

     

    관찰 (Observation): 에이전트의 눈

    관찰은 에이전트가 환경에서 인식할 수 있는 모든 정보, 즉 에이전트가 세상을 바라보는 ‘눈’이다.

     

    • 수치형 관찰 (Numeric): 위치 좌표, 속도, 체력 수치 등 숫자로 표현되는 값.
    • 시각적 관찰 (Visual): 에이전트의 카메라 시점에서 보이는 이미지. (예: 자율주행차의 전방 카메라)

     

    우리가 어떤 관찰을 제공하느냐에 따라 에이전트가 학습할 수 있는 범위와 성능이 크게 달라진다.

     

    행동 (Action): 에이전트의 손발

    행동은 에이전트가 관찰한 정보를 바탕으로 실제로 취할 수 있는 선택, 즉 ‘손발’이다.

     

    • 이산적 행동 (Discrete): '위, 아래, 왼쪽, 오른쪽'처럼 선택지가 정해져 있는 경우.
    • 연속적 행동 (Continuous): '핸들을 30도 꺾는다', '가속 페달을 70% 밟는다'처럼 연속적인 값을 조절하는 경우.

     

    행동을 어떻게 정의하느냐에 따라 에이전트가 학습할 수 있는 능력의 한계가 결정된다.

     

    보상 (Reward): 학습의 나침반

    보상은 에이전트가 얼마나 잘하고 있는지를 알려주는 신호, 즉 ‘칭찬’ 혹은 ‘벌’이다.

     

    에이전트는 결국 보상을 최대화하는 방향으로 학습하게 된다. 따라서 보상 설계는 학습의 성패를 좌우하는 가장 중요한 과정이다. 보상을 잘못 설계하면 (예: 메딕에게 '아군 사망' 패널티를 주지 않으면) 에이전트가 엉뚱한 행동(아군을 살리지 않고 치료 횟수만 늘리는)을 학습할 수 있다.

     

    정책 (Policy): 에이전트의 뇌

    정책은 관찰을 행동으로 연결하는 규칙, 즉 에이전트의 두뇌이다. "이런 관찰이 들어오면, 저런 행동을 한다"를 결정하는 함수이다.

     

    ML-Agents를 사용하는 이유는 바로 이 정책을 자동으로 학습시켜서, 사람이 일일이 규칙을 짜지 않아도 되는 환경을 만드는 데 있다. 모든 학습 과정은 이 정책을 최적화하는 데 집중된다.

    728x90

    ML-Agents는 어떻게 구성되어 있을까? (주요 구성 요소)

    ML-Agents는 하나의 프로그램이 아니라, 여러 도구와 라이브러리가 연결되어 작동하는 구조이다.

     

    Unity SDK (무대와 배우)

    Unity 엔진 안에서 에이전트를 만들고, 환경을 정의하며, 관찰/행동/보상을 설정하는 핵심 도구이다. 학습을 위한 '무대와 배우'를 준비하는 단계이다. Unity의 강력한 시각화 덕분에 학습 과정을 눈으로 직접 확인할 수 있다.

     

    Python API (연결 다리)

    Unity는 환경을 만들지만, 실제 학습 알고리즘은 대부분 Python으로 구현되어 있다. Python API는 Unity 환경과 Python 학습 알고리즘이 서로 데이터를 주고받을 수 있게 하는 '다리' 역할을 한다.

     

    Trainers (학습 알고리즘)

    실제로 에이전트를 학습시키는 알고리즘 모음이다. PPO, SAC 같은 강화학습 알고리즘이나, 사람의 시범을 따라 배우는 모방 학습 알고리즘이 여기에 포함된다.

     

    Wrappers (호환성)

    Unity 환경을 OpenAI Gym 같은 다른 표준 강화학습 프레임워크와 호환되도록 감싸주는 '변환기'이다. 덕분에 연구자들은 기존에 쓰던 도구와 코드를 그대로 활용할 수 있다.

     

    Behavior (행동 설계도)

    '이 에이전트는 어떤 관찰을 받고, 어떤 행동을 하며, 어떤 보상을 받는지'를 하나의 묶음으로 정리한 '행동 단위'이다. 하나의 환경에 메딕 Behavior, 공격병 Behavior 등 여러 개의 Behavior를 정의할 수 있다.

     

    AI를 훈련시키는 3가지 방법 (학습 모드)

    ML-Agents는 크게 세 가지 학습 모드를 지원한다.

     

    휴리스틱 (Heuristic) 모드

    학습이 아니라, 사람이 직접 짠 규칙이나 키보드 입력으로 에이전트를 '수동 제어'하는 방식이다. 환경이 제대로 설정되었는지, 관찰과 행동이 잘 연결되는지 등을 테스트하고 검증하기 위해 사용된다.

     

    강화학습 (Reinforcement Learning) 모드

    ML-Agents의 핵심 학습 방식이다. 에이전트가 시행착오(Trial and Error)를 겪으면서 보상을 최대화하는 방향으로 정책을 스스로 학습한다. 시간은 오래 걸리지만, 사람이 생각하지 못한 최적의 행동을 찾아낼 수 있다.

     

    모방 학습 (Imitation Learning) 모드

    사람이 직접 시범을 보여주고, 에이전트가 그 행동을 따라 하면서 학습하는 방식이다. 강화학습보다 훨씬 빠르게 원하는 행동을 가르칠 수 있지만, 사람의 시범이 완벽하지 않으면 그 한계까지 그대로 배운다는 단점이 있다. (보통 강화학습과 결합하여 사용한다)

     

    학습은 어떻게 진행될까? (훈련 vs 추론)

    학습 과정은 크게 두 단계로 나뉜다.

     

    훈련 단계 (Training Phase): 연습 경기

    에이전트가 환경 속에서 수없이 많은 시행착오를 겪으며 정책을 학습하는 과정이다. 처음에는 무작위로 행동하지만, 보상을 받으며 점점 더 나은 행동을 선택하도록 정책이 개선된다.

     

    추론 단계 (Inference Phase): 실전 경기

    학습이 끝난 후, 에이전트가 실제 환경에서 학습된 정책을 적용하는 과정이다. 이때는 더 이상 시행착오를 겪지 않고, 학습된 정책을 바탕으로 관찰에 대한 최적의 행동을 즉시 수행한다.

     

    마치며

    Unity ML-Agents는 단순히 게임 속 NPC를 똑똑하게 만드는 도구를 넘어, 강화학습과 시뮬레이션을 결합한 강력한 플랫폼이다.

     

    • 핵심: 관찰, 행동, 보상의 순환을 통해 정책을 학습한다.
    • 구성: Unity SDK로 환경을 만들고, Python API로 연결하며, Trainers로 학습시킨다.
    • 학습: 휴리스틱(테스트), 강화학습(시행착오), 모방 학습(모방) 모드를 지원한다.
    • 활용: 게임 AI는 물론, 로보틱스, 자율주행, 군사/교통/산업 시뮬레이션 등 현실 문제 해결에 사용된다.

     

    ML-Agents의 가장 큰 의의는 Unity라는 친숙한 엔진을 통해 누구나 비교적 쉽게 강화학습을 실험할 수 있도록 문턱을 낮췄다는 점이다. 연구실에만 머물던 강화학습을 실제 게임, 로봇, 시뮬레이션에 적용할 수 있도록 연결해주는 중요한 다리 역할을 하고 있다.

     

    앞으로 멀티에이전트 학습, 협력적 AI 연구 등이 더욱 활발해지면서 ML-Agents의 활용 가능성은 더욱 커질 것이다. 이 글을 통해 ML-Agents의 기본 구조와 가능성을 이해하는 데 도움이 되었기를 바란다.

    728x90
    728x90
    댓글