Raspberry Pi Pico 2 W에서 게임을 돌리는 초소형 월드 모델

A tiny world model running games on a Raspberry Pi Pico 2 W

github.com/SheepSeb ▲ 268 댓글 18 airinei

요약

Raspberry Pi Pico 2 W 한 대에서 작은 신경망 둘이 게임 화면을 만들고 직접 플레이합니다.

개발자 SheepSeb이 공개한 tinyworldformer 프로젝트입니다. 같은 가중치를 반복해 쓰는 루프형 트랜스포머가 마이크로컨트롤러에 들어갈 만큼 작아질 수 있는지 확인하려고 시작했습니다.

왜 중요한가

  • 칩에 실제 게임 코드를 넣지 않아도 월드 모델(다음 화면을 예측하는 신경망)만으로 게임이 돌아갑니다.
  • 에이전트가 메모리 520KB짜리 칩 위에서 신경망이 만든 게임을 하며 직접 학습할 수 있습니다.
  • 모델의 오류를 악용하는 고질적 문제가 초소형 모델에서도 그대로 나타났습니다.

핵심 내용

  • 월드 모델은 화면과 행동으로 다음 화면과 보상을 예측하고, 액터는 그 화면만 보고 행동을 고릅니다.
  • Breakout, Doom-lite, Flappy Bird, Pong, Pac-Man lite를 지원하며 월드 모델 파라미터는 2만 6천~13만 1천 개입니다.
  • 다음 화면이 완전히 맞은 비율은 Flappy Bird 100%, Breakout 99.99%, Pac-Man lite 86.4%, Doom-lite 83.6%입니다.
  • 생성된 게임에서만 학습한 에이전트는 그 안에서 210점을 얻었지만, 실제 게임에서는 28점에 그쳤습니다.
  • 펌웨어는 RAM을 227~460KB 쓰며, 작성자는 칩에서 프레임 속도를 아직 재지 않았다고 밝혔습니다.

HN 반응

  • 모델이 하나인지 묻는 질문에 작성자는 게임마다 별도 신경망이라고 답했고, 일부 이용자는 새 게임까지 상상하는 단일 모델을 기대했습니다.
  • 전통적인 게임이나 절차적 생성에 접목하자는 기대가 나왔지만, 작성자는 오픈월드에서는 모델의 헛것을 막기 어렵다고 봤습니다.

댓글

18개 표시 · 전체 18개
  1. boustrophedon HN

    README에서 제가 놓쳤을 수도 있는데, 학습은 어떤 하드웨어에서 하셨나요? 정말 멋지네요.

  2. sheepseb HN

    월드 모델 학습에는 RTX 4060을 썼고, 게임을 플레이하는 에이전트는 stream-ac를 써서 Pico에서 직접 돌렸습니다.

  3. dannyw HN

    정말 멋지네요! 단순한 게임에서는 필요 없는데 미니 둠에서는 루프 트랜스포머(looped transformer)가 꼭 필요했다는 점이 흥미롭습니다.

  4. andai HN

    정말 멋지네요. 신경망이 이렇게 결정론적일 수 있는 줄은 몰랐는데, 아주 흥미롭네요. 과적합과 비슷한 효과인가요? 그리고 모든 게임에 같은 모델을 쓰는 거 맞죠?

  5. svantana HN

    모든 게임에 같은 모델을 쓰는 거 맞죠

    확실하지는 않은데, 게임마다 파라미터 수와 MAC 수가 다른 걸 보면 서로 다른 모델인 것 같아요. 학습 세트에 있는 게임들 사이사이에 새로운 게임까지 꿈꿔 낼 수 있는, 하나의 월드 모델이었다면 훨씬 더 인상적이었을 거예요.

  6. sheepseb HN

    게임마다 독립된 신경망을 씁니다. 다만 학습 데이터와 검증 데이터는 겹치지 않아요. 하나의 모델로 합치는 건 쉬울 것 같습니다.

  7. xpct HN

    액터도 월드 모델의 실수까지 학습하나요? 그렇다면 환각을 일부러 일으켜서 더 쉬운 상태로 넘어가는 법을 익히게 될 텐데요.

  8. sheepseb HN

    네, 환각이 좀 있었습니다. 예를 들어 벽돌깨기에서는 모서리를 치면 예상보다 많은 블록이 부서졌고, doom-lite에서는 아주 멀리서 쏴도 처치가 됐습니다. 입력 프레임에 노이즈를 섞고 타깃은 깨끗하게 두는 것으로 해결했습니다.

  9. noduerme HN

    질문 받으신 분은 아니지만... 싱글턴(Singleton) 해킹은 영리했습니다. 대부분의 게임 코드가 처리해야 하는 특수 사례를 그대로 따라 한다는 점에서, 게임 디자인을 다시 방정식 안으로 불러들이는 면이 있네요. 문서에서 상태(state)를 언급하셨는데, 그 부분이 궁금했습니다. 읽어 보니 두 에이전트 모두 직전 프레임에서 팩맨의 입이 어디에 있는지를 보고 팩맨의 방향을 파악하는 것 같더군요. 그리고 그림 하나를 보면, 둠에서 내가 어디에 있고 어느 쪽을 보고 있는지를 에이전트가 모서리에 있는 지도를 읽고 마법처럼 알아내는 것 같기도 합니다. 맞나요? 그렇다면 퐁이나 벽돌깨기에서는 공의 방향과 속도를 무엇으로 알아내는지 묻고 싶습니다. 다른 칸에 남은 옅은 잔상 같은 걸까요?

  10. sheepseb HN

    아니요, 잔상은 아닙니다. 저는 진행 방향을 토큰으로 씁니다. 둠에서는 미니맵에 플레이어 토큰과 바라보는 방향(현재 3D 화면)이 들어 있어요. 프레임만 쓰는 것도 해 봤는데, 벽 무늬만으로는 학습이 더 어려웠습니다. 그러니 에이전트가 위치를 마법처럼 알아내는 게 아니라 지도를 쓰는 겁니다. 팩맨은 입 모양을 기준으로 하고, "계속 직진" 또는 북/동/남/서 방향을 나타내는 토큰이 있습니다. 벽돌깨기에서는 대각선마다 하나씩 공 토큰 4개를 쓰고, 공은 그 대각선 방향으로 한 스텝에 한 칸씩 움직입니다. 퐁에서는 공 토큰이 6개인데, [위, 수평, 아래]와 [왼쪽, 오른쪽]을 조합한 것입니다(예: 오른쪽 위, 수평 아래).

  11. skrellm HN

    저는 이런 멋진 프로젝트들(가능한 한 작게, 로컬에서 돌아가는 LLM)이 장기적으로 AI의 진짜 미래라고 진심으로 믿어요.

  12. Coill HN

    최적화할 여지는 여전히 엄청나게 많아요. 앞으로는 폰에서 돌아가는 로컬 지능이 나오겠죠.

  13. mervikhaums HN

    정말 흥미롭네요! 이걸 전통적인 게임 같은 데 넣으려면 얼마나 어려울까요?

  14. sheepseb HN

    게임에 어떤 식으로 넣느냐에 달려 있다고 생각합니다. 오픈 월드 같은 거라면 환각을 막기가 꽤 어려울 것 같고, 그 외에는 시간과 노력만 충분하면 가능하다고 봅니다.

  15. nater5000 HN

    솔직히 놀랍네요. 이게 Raspberry Pi Pico 2 W에서 돌아간다는 얘기는 아예 안 하는 편이 낫겠다는 생각까지 들 정도예요. 월드 모델 자체의 대단한 능력이 가려지거든요(물론 Pico 2에서 실제로 돌아간다는 사실이 전체를 훨씬 더 인상적으로 만들긴 하죠).

    이 로직을 더 크고 "전통적인" 게임에 의미 있게 접목할 좋은 방법이 분명 있을 거예요. 실제 절차적 생성에서 흔히 나타나는 문제 몇 가지를 해결할 수 있는 절차적 생성 방식처럼 보이거든요.

  16. cchance HN

    Pi에서 돌아간다면... WebGPU에서도 돌아갈까요?

  17. sheepseb HN

    핵심부는 no_std 환경의 Rust로 되어 있고, Pico에서는 OS 없이 embassy-rs를 씁니다. 코어는 WebAssembly로도 빌드할 수 있지만 WebGPU는 쓰지 않습니다.

  18. jbarberu HN

    어려울 겁니다. Raspberry Pi Pico 2 W는 컴퓨터가 아니라 마이크로컨트롤러예요. 베어메탈이나 RTOS 위에서 돌아갑니다.

Hacker News에서 보기 ↗