원문 캡처 · nicobrenner.github.io
원문 캡처 · nicobrenner.github.io

lgit는 파일을 신경망에 학습시킨 뒤 체크아웃할 때 그 기억에서 복원하는 실험용 버전 관리 도구다. 코드를 완벽하게 보존하는 대신 복원 과정에서 생기는 오류를 살펴보는 프로젝트로, 기존 Git을 대체하려는 제품은 아니다.

제작자 니코 브레너(Nico Brenner)는 파일 내용을 다층 퍼셉트론(MLP)에 학습시키고, 체크아웃 때 추론으로 파일을 재구성하도록 만들었다. 파일 이름과 위치 정보는 별도로 저장해 그대로 보존하지만, 파일의 바이트 내용은 신경망이 기억한다. 직접 써보려면 GitHub 저장소를 참고할 수 있다.

작은 예제에서는 62바이트 파일을 0.1초 동안 학습해 100% 정확도로 복원했다. 반면 제작자가 의도적으로 용량이 작은 신경망을 사용해 2,574바이트 게임 코드를 학습시켰을 때 기본 모델의 정확도는 95.8%였다. 별도의 오류 수정 모델이 틀린 108바이트 가운데 98개를 고쳐 최종 정확도를 99.6%로 높였고, 새로운 오류는 만들지 않았다. 이 수정 모델은 80% 넘게 확신하는 경우에만 고친다.

lgit는 커밋할 데이터 크기에 따라 신경망 크기를 자동으로 정할 수도 있다. 같은 게임 파일을 자동 설정으로 학습한 예에서는 은닉 유닛 64개, 층 3개를 사용해 1.1초 만에 100% 정확도를 기록했다. 다만 저장 모델은 원본 데이터보다 항상 컸다. 62바이트를 완벽하게 기억하는 데 약 53KB의 가중치가 필요해 데이터 크기의 약 850배였으며, 같은 파일은 gzip으로 원래 크기의 약 40%까지 압축할 수 있다고 설명한다.

제작자는 이 프로젝트를 신경망을 저장 매체로 쓸 때 생기는 일을 살펴보는 재미와 실험이라고 소개한다. 따라서 중요한 파일을 안전하게 보관하는 용도보다는, 신경망의 패턴 인식이 코드 복원 과정에서 어떤 오류를 내는지 체험하는 데 적합하다.