1차 공개 · 8월 22일에 1차 강의가 모두 공개됩니다.
TECH 으로 돌아가기
TECH HACKER NEWS 오늘 6분 읽기 23 READS

아이폰에서 실시간으로 피아노를 이어 치는 125M 트랜스포머

아이폰에서 실시간으로 피아노를 이어 치는 125M 트랜스포머
SOURCE IMAGE · HACKER NEWS

개인 개발자가 아이폰에서 실시간으로 돌아가는 피아노 자동완성 모델을 만들었다. 깃허브 코파일럿이 코드를 이어 쓰듯, MIDI 건반으로 몇 소절을 연주하면 이어질 선율을 인공지능이 채워 넣는 방식이다. 개발자는 1억 2,500만(125M) 파라미터 규모의 트랜스포머를 학습시켜 아이폰 15에서 초당 약 108개 음표를 생성하는 수준에 도달했다고 밝혔다. 사람이 실시간으로 연주하는 데 필요한 속도를 충분히 웃도는 값이다. 결과물은 'RollTab'이라는 무료 앱으로 공개됐으며, MIDI 키보드와 아이폰 또는 아이패드가 있으면 쓸 수 있다.

표현 방식이 성능을 갈랐다

이 프로젝트의 핵심 교훈은 모델 크기보다 데이터를 어떻게 표현하느냐가 결정적이었다는 점이다. MIDI는 소리 자체가 아니라 '언제 어떤 건반을 얼마의 세기로 눌렀고 뗐는가' 같은 이벤트의 나열이다. 가장 단순한 방법은 모든 이벤트를 토큰으로 만드는 것이지만, 128개의 음높이와 128개의 세기를 조합하면 어휘 수가 폭발하고 희귀한 조합이 많아 학습이 어려워진다. 개발자는 처음에 건반을 누르고 떼는(note-on/note-off) 방식을 시도했지만, 작은 모델일수록 '떼기'를 빠뜨려 음이 끊기지 않고 계속 울리는 현상이 나타났다. 음 길이를 명시하고 시간을 밀어주는 방식은 음악적으로 나았지만, 음표 하나에 트랜스포머 연산이 네 번씩 들어 실시간에는 너무 느렸다.

최종적으로 선택한 표현은 음표 하나를 한 번의 연산으로 처리하는 구조였다. 별도의 시간 이동 이벤트 없이, 각 음표가 '직전 음표가 시작된 시점으로부터의 간격(delta_onset)'을 함께 담는다. 화음은 이 간격이 0인 음표 여러 개를 음높이 순으로 정렬해 표현한다. 내부적으로 음표는 음높이, 간격, 길이, 세기 등 다섯 개의 범주형 필드로 나뉘고 각 필드는 별도의 임베딩을 가지며, 이들을 더해 하나의 음표 토큰을 만든다. 필드 사이에는 작은 중첩 디코더를 두어 나중 필드가 앞선 예측을 참고하도록 했지만, 비싼 트랜스포머 본체는 필드마다가 아니라 음표당 한 번만 돌아간다. 이 설계가 초당 108음표라는 속도의 바탕이 됐다.

데이터 청소가 규모보다 중요했다

지속 페달 처리도 실용적으로 단순화했다. 페달 이벤트를 따로 모델링하는 대신, 전처리 단계에서 페달로 늘어난 실제 울림 시간을 음표 길이에 반영해 버렸다. 페달의 명시적 제스처는 잃지만, 모델은 음높이·시작·길이·세기만 예측하면 된다. 학습 데이터는 주로 저작권이 만료된 고전 음악을 모은 수십만 개의 MIDI 파일로, 약 3억 개의 음표 이벤트에 해당한다. 흥미롭게도 데이터를 약 5배로 늘리자 오히려 모델이 나빠졌다. 무작정 양을 늘리는 것보다 청소 스크립트로 품질을 걸러내는 편이 훨씬 효과적이었다는 것이다.

학습은 다섯 개 출력 헤드에 대한 교차 엔트로피로 시작했지만, 음악 이어쓰기에는 정답이 하나만 있는 게 아니라는 근본적 한계가 있었다. 보류해 둔 곡은 '정답' 음표 하나만 제공하지만 음악적으로 어울리는 이어짐은 여럿이기 때문이다. 개발자는 필드 간 스케줄드 샘플링을 도입해, 학습 중 일부는 정답 음높이 대신 모델이 실제로 예측한 음높이를 다음 필드에 넘겼다. 비율을 초반 0%에서 최대 50%까지 끌어올린 이 기법은 검증 손실은 높였지만 실제 이어쓰기 품질은 개선했다.

DPO가 만든 결정적 차이

평가 역시 쉽지 않았다. 초기에는 직접 듣고 비교했는데, 4개 음표만 주면 문맥이 부족해 가장 어려웠고 16~32개를 주면 훨씬 안정적이었다. 자동 지표들은 명백한 실패는 잡았지만 최적 모델을 고르기엔 부족했다. 개발자는 결국 제미나이 3.5 플래시로 두 결과를 짝지어 비교하게 했다. 절대 점수는 들쭉날쭉했지만 'A와 B 중 무엇이 나은가'라는 질문에, 위치 편향을 줄이려 A와 B를 서로 바꿔 다시 물으니 일관성이 올라갔다. 이렇게 모은 선호 데이터로 DPO 사후 학습을 진행했다.

DPO는 사전학습 이후 가장 큰 차이를 만들었다. 이따금 좋은 이어쓰기를 내놓던 모델을 훨씬 안정적으로 바꿔, 짝비교에서 69% 이상이 기존 모델보다 선호됐다. 다만 강도 조절이 중요해 β값 0.01과 0.03은 개선을 가져왔지만 0.10은 지나쳐 오히려 나빠졌다. 평가자가 일관되게 동의한 선호 쌍만 남긴 '컨센서스' 데이터가 최상의 결과를 냈다. 앱은 코어ML로 내보내 INT8로 양자화했고, 512음표까지만 학습했지만 문맥이 한계에 다다르면 최근 384음표만 남겨 재구성하는 방식으로 긴 연주를 지원한다. 개발자는 여전히 가끔 같은 패턴을 맴돌고 짧은 프롬프트에 약하다는 점을 인정하며 이를 '피아노판 GPT-2'라 부른다. 완성이라기보다, 건반 앞에 앉아 몇 음을 던지고 무엇이 돌아올지 지켜보는 재미에 도달한 단계라는 것이다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://simedw.com/2026/08/20/midi-autocomplete/
SHARE
NEXT · CHOOSE

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

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

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