구글이 개발한 기계학습 소프트웨어 라이브러리인 텐서플로(TensorFlow)를 이용해 닌텐도64 마리오카트 완전 자율주행을 해낸 인물이 등장했다.
마리오카트 전자동 주행을 한 건 보안 연구자인 스택스매싱(Stacksmashing). 2017년 등장한 텐서플로를 이용해 AI가 마리오카트64를 플레이할 수 있도록 학습시키는 프로젝트에 감명을 받았지만 이 프로젝트는 실기가 아닌 에뮬레이터를 사용하고 있었기 때문에 그는 실제로 닌텐도64를 이용한 전자동 주행을 실시할 수 있도록 소프트웨어 개조를 시도했다.
이런 아이디어는 닌텐도64로부터 출력된 영상을 PC에 받아 기계학습을 실시해 PC 출력 결과를 컨트롤러 입력으로 닌텐도64에 되돌리는 것이다. 닌텐도64 AV 출력은 어댑터를 이용해 HDMI로 변환했으며 PC 컨트롤러 신호 출력은 라즈베리파이 피코를 이용해 변환했다.
그는 마리오카트64 제어를 위한 기계학습 모델과 툴 세트인 텐서카트(TensorKart)를 차용해 플레이스테이션4 컨트롤러를 이용해 마리오카트64에서 출력되는 영상 프레임과 컨트롤러 입력 신호 관련 학습을 AI로 실시했다. 이 때 지연을 줄이거나 컨트롤러 입력 임계값 변경 등 조정을 가했다.
프레임 1만개를 이용해 트레이닝을 실시했지만 첫 모델에선 캐릭터가 모래에 돌진하거나 벽에 부딪히는 문제가 있었다고 한다. 여기에서 파라미터를 계속 조정한 결과 루이지 서킷을 3차례 라운드에서 문제없이 주행할 수 있게 됐다고 한다. 트레이닝을 하면서 느낀 흥미로운 점으로 AI는 맵으로부터 학습하는 것처럼 보였다는 걸 들었다. AI는 맵 표시를 켜면 맵에서 학습하고 맵 표시를 끄면 캐릭터로부터 학습한다. 더구나 맵이나 타임 표시 등 불필요한 정보를 모두 배제하면 AI 퍼포먼스가 대폭 향상됐다고 한다.
훈련 데이터 학습 횟수를 가리키는 수를 늘리면 성능이 향상된다. 150으로 올리면 3라운드를 문제없이 달렸다는 것. 퍼포먼스는 일광성이 있었고 라운드 2와 라운드 3 주파시간차는 불과 0.01초였다.
루이지 서킷 훈련을 마친 뒤 그는 새로운 코스로 카라카라 사막을 추가해 학습을 실시했다. 그 결과 이 코스에선 불과 2라운드 분량 학습으로 주파에 성공했다는 것. 다른 코스에서도 주파할 수는 있지만 성능은 그다지 좋지 않아 더 많은 훈련이 필요하다고 생각한다고 밝혔다. 그가 개량을 더한 모델인 텐서카트리얼HW(TensorKartRealHW)는 깃허브에 공개되어 있다. 관련 내용은 이곳에서 확인할 수 있다.