TECH 으로 돌아가기
TECH HACKER NEWS 6분 읽기 21 READS

DOOM 맵이 신경망을 실행하다: 둠포머가 보여준 '정확성'의 의미

DOOM 맵이 신경망을 실행하다: 둠포머가 보여준 '정확성'의 의미
SOURCE IMAGE · HACKER NEWS

1993년에 나온 FPS 게임 DOOM이 지금도 화제가 되는 이유 중 하나는 토스터, 임신 테스트기, 심지어 또 다른 DOOM 안에서까지 구동된다는 '어디서든 돌아간다(It runs DOOM)' 밈 때문이다. 그런데 이번에 공개된 '둠포머(Doomformer)'는 방향을 뒤집었다. DOOM을 어딘가에서 실행하는 것이 아니라, 정수 신경망을 DOOM 맵 안에서 '실행'한다. 개발자 motto가 만든 이 프로젝트는 정수로 양자화된 신경망을 ZDoom 맵으로 컴파일하고, 이를 머신러닝 연구에 쓰이는 DOOM 환경 ViZDoom에서 돌린다.

핵심 트릭은 '부두 인형(voodoo doll)'이다. DOOM은 플레이어 시작 지점을 여러 개 두면 플레이어의 복제본을 생성하는데, 이 복제본들이 맵 안을 이동하며 연산을 수행한다. 계산 결과값은 섹터의 조명 밝기와 바닥·천장 평면 높이에 저장된다. MNIST 손글씨 숫자 인식의 경우 784개 픽셀을 64개 은닉 유닛으로 보내고, 45번의 쌍별 점수 비교를 거쳐 10개의 승리 횟수를 세는데, 이 모든 과정을 한 맵 안의 부두 인형 1,355개가 담당한다. 아홉 번의 비교에서 모두 이긴 숫자의 인형만 특정 선을 넘어가고, 그 순간 레벨 스크립트가 화면에 정답 숫자를 띄운다.

'EXACT'가 뜻하는 것과 뜻하지 않는 것

이 프로젝트에서 가장 곱씹을 만한 지점은 '정확성(EXACT)'의 정의다. 둠포머는 게임이 돌아가는 동안 노출된 모든 값을 파이썬이 다시 읽어들여, 동일한 신경망을 NumPy 정수 연산으로 구현한 기준값과 비교한다. 허용 오차는 0이다. 단 하나의 값이라도 1만큼 어긋나면 그 실행은 실패로 처리된다. MNIST에서는 노출된 248개 값 전부를 대조한다. 다만 저자는 EXACT가 'DOOM이 정수 신경망과 똑같이 계산했다'는 뜻일 뿐, '그 숫자 판별이 맞았다'는 뜻은 아니라고 분명히 못 박는다. 정수망 자체의 정확도는 전체 1만 개 테스트에서 97.16%(원본 부동소수점 모델은 97.58%)이고, DOOM이 읽은 결과는 그 정수망과 완벽히 일치할 뿐이다.

이 구분은 실무자에게 의미가 크다. 검증이란 '시스템이 명세대로 동작하는가'와 '명세가 옳은가'라는 두 층위로 나뉘는데, 둠포머는 전자를 극단적으로 밀어붙인 사례다. 실제로 저자는 무작위 신경망 수만 개를 돌려 약 200만 개 값을 대조하는 퍼징을 수행했고, 범위 경계값을 넣는 테스트까지 포함해 단 한 건의 불일치도 없었다고 보고한다. 심어둔 컴파일러 버그는 퍼저가 잡아냈고, 반대로 퍼징과 독립 실행 과정에서 맵 자체의 결함 네 건(스케줄링 버그 둘, 평면 한계 둘)도 드러났다.

게임 엔진의 '날카로운 모서리'

성능은 이 접근의 명백한 한계다. 작은 MLP 기준으로 NumPy보다 엔진 시간으로 약 2만 3천 배, 호출 전체를 재면 약 6만 5천 배 느리다. 손글씨 숫자 하나를 읽는 데 기본 스케줄에서는 실시간 DOOM 기준 163초가 걸리고, 최적화 옵션(--opt 3)을 켜면 8초로 줄어든다. 실용 도구가 아니라 원리 증명(proof of concept)이라는 점이 분명하다.

더 흥미로운 교훈은 엔진의 '날카로운 모서리'를 다루는 방식이다. ZDoom 2.8.1의 평면 이동기는 하나의 평면이 아직 움직이는 동안 들어온 두 번째 요청을 무시하고, 텔레포트 선은 같은 틱에 인형이 앞서 넘은 선들을 취소하며, BSP 노드에서 32,767유닛 넘게 떨어진 오브젝트는 엉뚱한 섹터로 분류될 수 있다. 그래서 컴파일러는 모든 맵을 3만 2천 유닛 안에 가둔다. 실제 소프트웨어처럼 특정 플랫폼·버전에서만 나타나는 미묘한 동작을 측정하고 우회해야 한다는 점에서, 이는 비표준 실행 환경을 다루는 모든 엔지니어링의 축소판이다.

맵 안에서 계산기를 만든 시도는 이전에도 있었다. 2006년의 counter.wad는 부두 인형과 컨베이어 벨트로 만든 4비트 카운터였고, conway.wad는 생명 게임을, 대니 스펜서의 'DOOM 계산기'는 덧셈 기계를 구현했다. 둠포머가 더한 것은 정수 신경망을 ZDoom 맵으로 바꾸는 컴파일러, 정확성을 깨뜨리는 엔진 동작들을 측정한 목록, 그리고 오차 0 기준의 NumPy 대조 검증 체계다. 기술적 실용성보다는, 결정론적 시스템이라면 무엇이든 범용 계산기가 될 수 있다는 사실과 '동작의 일치'와 '결과의 정당성'을 분리해 검증하는 방법론을 구체적으로 보여준 데 그 가치가 있다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://github.com/mottopanikeiku/doomformer
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기 →
처리 중...