오늘 읽을 것은 강화학습과 LLM을 결합한 논문이다. 둘의 비중을 따지자면 강화학습쪽이 더 큰 것 같다고 생각이 들지만 그래도 둘 다 활용하여 유명한 게임인 마인크래프트에서 효과를 낸 논문이다. 실제 프로토타입도 깃허브에 있으니까 나중에 한 번 봐야겠다.
배경으로는 큰 내용이 나와있지 않기 때문에 간단하게 정리하였다.
MINEDOJO에서는 인터넷의 여러가지 데이터를 활용하고 GPT와 같은 LLM을 통해 자연어로 명령을 주는 방식으로 Agent를 학습하고자 한다.
실제 마인크래프트에서 좋은 효과를 보기 위해 아래와 같은 데이터들을 이용했다.
유튜브
유튜브에서 수집된 마인크래프트의 영상을 이용한다. 영상과 함께 자막을 학습하면서 MINECLIP을 통해 영상과 자막(언어)와의 관계를 파악한다. 예를 들어 나무를 캐는 모습과 함께 "나무를 캔다"라는 관계를 학습한다.
레딧
레딧에서 나온 여러가지 질문들을 추가로 학습한다. 예를 들어서 나무를 캐기위해선 어떻게 해야하나요? 라는 질문에 달린 답변들을 통해 나무를 캔다는 행동을 연결한다.
마인크래프트 위키
위키도 위와 비슷한 방법으로 연결한다. 위키에는 사진이 나와있기 때문에 그 사진과 설명을 연결지어 관계를 학습한다.
GPT
gpt는 Agent의 행동을 도와주는 역할을 한다. Agent에게 행동을 시킬 때 예를 들어서 집을 짓는다라는 행동이 있으면 gpt를 통해 그 작업을 1. 나무를 캔다, 2. 나무를 다른 물체로 변환한다, 3. 건설한다 의 방식으로 나누어서 자연어로 제공하는 역할을 한다.
MINECLIP이라는 알고리즘의 자세한 동작방식은 나와있지 않다. 그래도 원리를 설명하자면 MINECLIP은 이런 데이터들을 받아서 어떠한 장면과 어떠한 언어를 연결을 짓는 용도로 사용이 된다.
Agent의 작업은 여러가지 튜플들로 나누어서 구성된다.
우선 프로그래밍된 작업을 부터 보자.
G (Goal):
작업 목표를 영어로 설명한 내용이다.
예: “금 곡괭이를 제작하기 위해 재료를 찾고 제작하라.”
작업 목표는 에이전트가 수행해야 할 구체적인 목표를 나타낸다.
G' (Guidance):
에이전트에게 작업을 수행하는 데 도움을 주는 자연어로 된 가이드.
OpenAI의 GPT-3-davinci API를 활용하여 일부 작업에 대해 상세한 가이드를 자동으로 생성한다.
I (Initial Conditions):
에이전트와 환경의 초기 상태를 정의한다.
예: 초기 인벤토리, 생성된 지형, 날씨 조건 등.
f_S (Success Criterion):
작업이 성공했는지 여부를 판단하는 결정론적 함수.
예: 작업 목표가 “다이아몬드 획득”이라면, 에이전트의 인벤토리에 다이아몬드가 있으면 성공으로 처리된다.
f_R (Reward Function):
보상 함수, 에이전트의 행동에 대한 점진적인 보상을 제공한다.
하지만, 복잡한 보상 함수를 설계하는 데 높은 비용이 들기 때문에 MINEDOJO에서는 일부 작업에만 제공된다.
창의적인 작업은 아래와 같은 요소를 가진다.
G (Goal): 작업 목표.
예: “좀비가 있는 유령의 집을 짓기” 또는 “돼지를 타고 경주하기.”
G' (Guidance): 작업 수행에 대한 지침.
I (Initial Conditions): 초기 상태. 예: 환경, 인벤토리 등.
그러나 창의적인 작업은 프로그래밍된 작업과 다르게 평가하기가 어렵다. 그렇기에 위에서 데이터를 가지고 학습한 MINECLIP을 이용한다. MINECLIP을 통해 Agent가 받은 명령과 Agent의 행동의 유사도를 검사하여 평가를 진행한다.
학습 알고리즘으로는 PPO를 사용했다. 아무래도 PPO가 학습이 안정적으로 된다는 장점때문에 많이 사용이 되는 것 같다.
그리고 위에서 말한 MINECLIP을 사용한다. Agent는 GPT를 통해 자연어를 받고 행동을 진행한다. 그리고 Agent가 한 행동을 16 프레임으로 저장하여 MINECLIP에 GPT의 자연어와 Agent의 행동을 넣어 유사도를 판별한다.
예를 들어서 나무를 캐라고 명령이 들어왔다고 하면, 유튜브나 레딧이나 위키에서 나온 나무를 캐는 장면이 MINECLIP에 있을 것이다. 그러면 그 장면과 Agent가 명령을 듣고 한 행동의 유사도가 나오는 방식이다.
Agent는 이러한 보상을 받아서 학습을 진행하게 된다. 높은 유사도를 받았을 경우 맞는 행동을 했고 낮은 유사도를 받았을 경우 틀린 행동을 했다고 볼 수 있다. Agent는 이렇게 학습을 진행하다가 높은 보상을 받은 행동 경로는 Self-Imitation Learning을 통해 재사용, 학습 효율성을 향상시킨다.
아래의 모델들과 비교하여 테스트를 진행했다.
Ours (Attn):
MINECLIP 보상 모델을 사용해 학습된 에이전트.
Ours (Avg):
MINECLIP의 평균 풀링(average-pooling) 변형을 사용한 방법.
Manual Reward:
시뮬레이터의 실제 상태를 사용하여 수작업으로 작성된 밀집 보상
창의적인 작업에서는 사용 불가.
Sparse-only:
작업 성공 여부만을 기반으로 한 단일 희소 보상.
창의적인 작업에서는 사용 불가.
CLIP OpenAI:
MINEDOJO 비디오에 대해 파인튜닝되지 않은 OpenAI의 사전 학습된 CLIP 모델.
각 작업은 3개의 그룹으로 나누어서 Animal-zoo라는 4가지의 프로그래밍 작업, Mob-Combat이라는 4가지의 프로그래밍 작업, 그리고 창의적인 작업 4개로 나누어서 진행했다.
그리고 싱글태스크와 멀티태스크로 나눠서 학습을 진행한다.
싱글태스크에서는 하나의 작업만 학습을 진행한다. 예를 들어 우유를 얻으라는 명령이 들어오면 그것만 계속 학습한다.
그러나 멀티태스크에서는 여러가지 작업을 동시에 학습을 진행한다.
우선 모델들과 비교해서 학습한 결과에서는 훈련 데이터를 이용한 MINECLIP이 대부분 제일 좋은 성공률을 보였고 테스트 데이터를 이용한 MINECLIP 역시 좀비 전투를 제외하면 나머지보다 좋은 성능을 보였다. 특히 소 사냥 같은 명령에서는 71퍼센트의 성공률을 보였다.
그리고 싱글태스크와 멀티 태스크의 비교에서는 12가지 중에 6가지에서 싱글태스크의 성능이 더 높게 나타났다. 아무래도 하나만 학습하다보니 더 특화되서 나온 결과가 아닐까 싶다. 특히 우유를 얻는 작업에서는 91.5퍼센트의 성공률을 보였다.
멀티 태스크의 경우에는 작업끼리 연관이 있는 경우, 멀티를 통한 이득이 생겨 더 좋은 성능을 보이는 것도 있었다. 그러나 몇몇 작업에서(위에서 오른 것들) 성능 저하를 보였다.
많이 하는 마인크래프트에서 학습이 이뤄졌다는 것이 좀 신기하다. 물론 아직까지는 큰 작업들은 아니지만 그래도 이정도면 점점 발전해나갈 수 있을 것 같다는 생각이 든다. 한 가지 아쉬운건 학습 진행하는 수식같은거를 좀 더 넣어줬으면 어땠을까 하는 생각이 있다.