제 Game Boy Color는 85초가 걸리며, CPU가 곱셈을 할 수 없기 때문에 모든 곱셈을 조회 테이블(lookup table)로 속여야 합니다. 하지만 작동합니다! 이것은 PC에 연결하지 않고 스트리밍 없이, 핸드헬드 자체의 8 MHz CPU에서 실행되는 실제 신경망입니다. A 버튼을 누르자마자 순수한 노이즈 상태에서 시작하여 낙서가 나옵니다. 저는 880,000개의 낙서로 학습시켰고, 실제로 GB ROM에 들어간 가중치(weights)는 단지 1.08M개뿐입니다. 게임보이에서 확산 모델을 실행한 사람을 찾지 못해서, 제가 최초라고 부릅니다. 만약 더 이른 사례를 알고 계신다면 보여주세요. 보고 싶습니다! 수치는 다음과 같습니다: MLP 디노이저(denoiser), 784 → 512 → 512 → 784, 매개변수(parameters) 1.08M. Google의 Quick, Draw!에서 학습: 8개 클래스, 클래스당 11만 개의 그림, 28x28 Int8 가중치, 4비트 활성화(activations), 16비트 합계(sums). 분류기 없는 안내(Classifier-free guidance)는 가중치에 증류되어 있어 단계당 단 한 번의 순전파(forward pass)로 처리됩니다. 이미지당 약 880만 개의 곱셈-덧셈(multiply-adds)이 필요하며, ROM 용량은 2MB이고 그 대부분이 가중치입니다. 재미있었던 부분은 이것을 맞추는 것이었습니다. WRAM의 24 KB 제품 테이블은 모든 곱셈을 두 번의 조회로 변환시키며, 이는 곱셈-덧셈당 18 클럭 사이클(machine cycles)에 불과합니다. 레이어 1이 16비트를 초과하여 가중치가 약간의 정밀도 손실을 입었습니다. 학습 과정은 ROM의 정확한 정수 수학(integer math)을 수행하며, 에뮬레이터는 16단계마다 ROM을 Python 버전과 비교합니다. 모든 8개 카테고리에서 비트 단위로 일치합니다. 제 17년 된 플래시 카트는 정말 골칫거리였고 지우려고 할 때 종종 '죽기도' 했습니다. 오래된 하드웨어는 겸손하게 만듭니다 :P. 괜찮은가요? 에이, 그냥 게임보이지 않습니까. 사과가 가끔 열려 있고 물고기가 가끔 부서지지만, 1998년의 핸드헬드에서 노이즈로부터 그림을 그려내고 있으니, 저는 이걸로 하겠습니다. 음악은 AI가 아니며 제가 직접 만든 것입니다. 진짜 인간입니다. 시도해 보거나 기여하고 싶다면: ROM을 시도하거나 코드를 읽어보세요: https://mowelan.github.io/gb-diffusion/ /u/ready-eddy 님이 제출하셨습니다. [링크] [댓글]