Software Engineer

Categories

Jericho - 2019

Jericho

마이크로소프트에서 2019년에 연구한 Jericho 프로젝트의 논문을 보고 개인적으로 요약, 느낀점을 서술한 내용입니다. 잘못된 내용이 있다면 알려주시면 수정하겠습니다.

Jericho는 DRL(Deep Reinforcement Learning, 강화학습) NLP(Natural Language Processing, 자연어 처리)를 이용하여 고전 텍스트게임을 플레이 시켜, 얼마나 현재 게임의 플레이를 자연스럽게 진행하면서 자연어를 잘 생성하는지 연구한 프로젝트라고 이해하면 될것같습니다.

우선 제가 로컬에서 테스트를 진행한 게임은 Zork 1이라는 고전 게임을 토대로 Jericho를 직접 테스트해보았습니다.

우선 고전 텍스트게임은 가볍게 설명하자면 플레이어가 문장을 적으면, 해당 문장이 현재 게임의 플레이에 진행을 하는 플레이어 텍스트 인풋을 파서가 noun(명사), verb(동사), prep(전치사), adj(형용사) 등, 각 단어별 타입매칭을 통해서 행동(Action)으로 인식하는 구조로 되어있습니다.

Zork 1은 간단하게 이런식으로 동작합니다.

West of House
You are standing in an open field west of a white house, with a boarded front door.
There is a small mailbox here.

> open mailbox

Opening the small mailbox reveals a leaflet.

> read leaflet

(Taken)
"WELCOME TO ZORK!

ZORK is a game of adventure, danger, and low cunning. In it you will explorer some of the most amazing territory ever seen by mortals. No computer should be without one!"

게임내에서 인지할수있는 단어가 700개가 있고, 4개의 단어를 이용해 문장을 조합할 수 있다고 가정한다면 $700^4=240,000,000,000$ - 즉 2400억개의 조합이 가능하다는것을 알 수 있습니다.

하지만 이는 너무 많은 행동(Action)의 공간입니다.

TDQN

텍스트 어드벤처게임을 진행하기 위한 Agent를 위한 첫번째 솔루션은 TDQN(Template-based Deep Q Network)입니다.

간단하게 요약하자면 주로 쓰이는 행동을 템플릿화하여 사용하는겁니다.

  • Take A in B
  • Put A in B

위와 같이 행동 템플릿을 미리 정의하고, A와 B의 단어만 사용한다고 가정했을때 템플릿을 200개를 정의했을경우 $700^2*200=98,000,000$ - 9800만개의 조합으로 약 2500배가량 행동공간을 절약했습니다. TDQN은 단순히 행동공간만을 줄인것은 아니고, 템플릿 기반으로 축소된 행동공간속에서 강화학습을 진행한 Agent 모델입니다.

DRRN

두번째 솔루션은 DRRN(Deep Reinforcement Relevance Network)입니다.

텍스트 어드벤처게임은 크게보면 parser-based game으로 볼수있는데, 모델자체를 choice-based game으로 학습시켜 각 단계별로 유효한 행동목록을 제공하여 에이전트가 그 후보중에서 선택하는 방식입니다.

특정상태에서의 특정 행동에 대한 Q값을 추론하는 방식이며 $A_{\text{valid}}(S)$ - 현재 State에서의 유요한 Action을 구하여 동작합니다. Action과 State를 임베딩한 데이터를 벡터공간에 저장하고, 강화학습을 통하여 Q값을 추론합니다.


결과를 보기전에 위의 솔루션에서 제공되지않은 솔루션인 RAND와 NAIL은, RAND는 이름 그대로 무작위 에이전트이며, NAIL은 수동으로 생성된 휴리스틱 집합을 사용하여 객체의 위치를 지도로 구축하고, 어떤 행동이 유효하거나 무효한지 추론하는 에이전트입니다. 간단히 말하면 그냥 휴리스틱 모델입니다.

결과

Game T V RAND NAIL TDQN DRRN
905 82 296 0 0 0 0
acorncourt 151 343 0 0 .05 .33
anchor 260 2257 0 0 0 0
advent 189 786 .1 .1 .1 .1
adventureland 156 398 0 0 0 .21
afflicted 146 762 0 0 .02 .03
awaken 159 505 0 0 0 0
balances 156 452 0 .2 .09 .2
deephome 173 760 0 .04 0 0
detective 197 344 .32 .38 .47 .55
dragon 177 1049 0 .02 -.21 -.14
enchanter 290 722 0 0 .02 .05
gold 200 728 0 .03 .04 0
inhumane 141 409 0 0 0 0
jewel 161 657 0 .02 0 .02
karn 178 615 0 .01 0 .01
library 173 510 0 .03 .21 .57
ludicorp 187 503 .09 .06 .04 .09
moonlit 166 669 0 0 0 0
omniquest 207 460 0 .11 .34 .1
pentari 155 472 0 0 .25 .39
reverb 183 526 0 0 .01 .16
snacktime 201 468 0 0 .19 0
sorcerer 288 1013 .01 .01 .01 .05
spellbrkr 333 844 .04 .07 .03 .06
spirit 169 1112 .01 0 0 0
temple 175 622 0 .21 .23 .21
tryst205 197 871 0 .01 0 .03
yomomma 141 619 0 0 0 .01
zenon 149 401 0 0 0 0
zork1 237 697 0 .03 .03 .09
zork3 214 564 .03 .26 0 .07
ztuu 186 607 0 0 .05 .22

1이 100%를 기준으로 게임을 전부 완벽하게 플레이한 기준인 결과표입니다. 보면 DRRN이 높은 수치를 보이는 반면에, 특정 게임들은 RAND가 높게 나오거나, NAIL, TDQN이 더 우세하게 나오는 케이스도 있습니다.


재이 연구의 결과에서 제가 배운 교훈은 크게 두가지로 느껴졌습니다.

1. 행동 공간(Action Space)을 최대한 축소하는게 좋다

특히, 요즘 AI들은 발산(Diffusion)하는 특성상 특정 결과를 환각(Hallucination)을 피하기 위해서도 최대한 행동공간을 축소하는게 좋다는걸 알 수 있습니다. 위 연구에서는 단순히 행동 템플릿을 이용하여 문장을 만들기위한 단어의 조합을 줄였지만, 이미지 생성은 어떻게보면 위의 텍스트 조합보다 더더욱 어려운 다차원공간 벡터에서의 발산을 최대한 발산하지 않도록 공간을 축소하여 원하는 결과물을 얻기위해 prompt를 많이 부여하고, 각종 LoRA, Checkpoint를 이용하여 결과물의 공간 축소처럼 느껴졌습니다.

2. DRN은 인간지능(Human Intelligence)를 꽤 잘 모방한다

DRN자체가 인간지능을 꽤 잘 모방한다는점도 굉장히 인상깊었습니다. 인간지능의 모방중 큰 축을 세가지로 생각하고있는데, 언어 이해(Langauge Understanding), Inference(추론), Planning(계획 수립) 입니다.


마치며

굉장히 재밌는 사실중 하나는, 첫번째로 이 연구는 2019년에 마이크로소프트에서 진행한 연구입니다. ChatGPT 3.5가 출시된 날짜는 2022년 11월 30일이고, 그때를 기점으로 AI붐이 일어났다고 봐도 무방합니다. 즉 이 연구는 우선 ChatGPT가 출시되기전에 연구된 결과입니다.

두번째로 재미있는 사실은 올해, 이제 한달하고도 조금 지난 시간이지만 Deepseek을 이 연구와 겹쳐보면 굉장히 재밌습니다. 첫번째로 행동공간의 축소는 Deepseek은 MoE 구조를 사용한것으로 알고있습니다. - (이는 제가 Deepseek 공개당시 이것저것 찾아본 지식을 토대로 설명하고있기에 잘못된 내용이 있다면 알려주시면 수정하겠습니다.) MoE 방식은 입력을 받으면, 현재 질문에 필요한 전문가(Expert)들만 활성화하는 방식으로 동작합니다. 즉 불필요한 전문가를 활성화하지 않습니다.

Deepseek의 MoE는 질문을 받으면, 해당 질문에 필요한 임베딩된 데이터들을 불러오는 방식을 이용하여 모델의 크기를 최적화하였습니다. (이외에 floating의 단위 변경도 있습니다. - 사실 MoE방식이 필요할때 해당 임베딩된 데이터를 불러오는 방식인건지는 정확하게는 알지 못합니다만 이론적으로 제일 이해하기 쉬운 방향이라고 생각합니다.)

그리고 Deepseek이 선두로 시작한 LLM의 ‘추론’ 방식의 도입입니다. LLM 질의응답 프로세스에 추론방식을 추가하여 좋은 답변을 할 경우 추가적인 점수를 부여하고, 더 좋은 결과를 내기위한 과정속에서 DRN을 도입했다는겁니다. 이 프로세스는 강화학습을 쓰지않고도 Supervisor라고 불리우는 중간과정은 굉장히 많은 사람들이 시도해보았지만 크게 효율적인 결과를 얻지는 못했습니다.

2019년에 진행된 연구이지만 현재 LLM에도 굉장히 여러가지 관점속에서 많은 인사이트를 주는 신선한 주제였습니다.

당분간 ai-dev 카테고리에서는 AI Agent와 관련된 논문 위주로 보고 느낀점을 서술하며 요약할 예정입니다.