AI Sparkup

최신 AI 쉽게 깊게 따라잡기⚡

파일을 작게 만드는 도구가 어떻게 셰익스피어를 쓸까

파일을 작게 줄이는 일과 다음 문장을 예측하는 일은 전혀 다른 작업처럼 보입니다. 하나는 압축 프로그램이 하는 일이고, 다른 하나는 거대 언어모델이 하는 일이니까요. 그런데 한 개발자가 운영체제에 기본으로 깔린 gzip에 셰익스피어 텍스트를 넣어주고 다음 글자를 생성해봤더니, 완벽하진 않아도 셰익스피어풍 문장이 나왔습니다. 압축 프로그램이 작가 노릇을 한 셈입니다.

AI 생성 이미지

이게 우연이 아니라는 걸 보여준 연구가 있습니다. 구글 딥마인드 연구진이 발표한 “Language Modeling Is Compression”입니다. 이 논문은 압축과 예측이 수학적으로 같은 일이라는 걸 실증하면서, 거대 언어모델을 압축기로 다시 보는 관점을 제시합니다.

출처: Language Modeling Is Compression – arXiv (Grégoire Delétang 외, Google DeepMind / Meta AI)

왜 압축과 예측이 같은 일일까

압축 프로그램이 하는 일을 떠올려보면 단순합니다. 자주 나올 것 같은 데이터에는 적은 비트를 쓰고, 예상 밖의 데이터에는 많은 비트를 씁니다. 알파벳 A가 백만 번 반복된 파일은 한 문장으로 설명할 수 있지만, 완전히 무작위인 백만 바이트는 줄일 구조가 없어 거의 압축되지 않습니다.

여기에 정보이론의 핵심 공식이 숨어 있습니다. 어떤 기호를 표현하는 데 필요한 비트 수는 그 기호가 나올 확률에 마이너스 로그를 취한 값입니다. 확률이 높을수록 비트는 적게 듭니다. 그러니까 어떤 압축기든, 누가 일부러 만들지 않았더라도 그 안에는 확률 모델이 숨어 있다는 뜻입니다. 압축을 잘한다는 것은 결국 다음에 뭐가 올지 잘 맞힌다는 것과 같은 말입니다.

도식: 예상되는 텍스트는 적은 비트로, 예상 밖 텍스트는 많은 비트로 인코딩된다

연구팀은 이 동치성을 실제로 검증했습니다. 매개변수 700억 개짜리 모델 Chinchilla 70B는 텍스트로만 학습됐는데도, ImageNet 이미지 패치를 원본의 43.4%로 압축했습니다. 이미지 전용 압축 포맷인 PNG가 같은 데이터를 58.5%까지만 줄이는 것과 비교하면 더 나은 성능입니다. 음성 데이터인 LibriSpeech 샘플에서도 마찬가지로, FLAC(30.3%)보다 작은 16.4%까지 압축했습니다. 텍스트만 봤던 모델이 이미지와 소리까지 더 잘 압축한다는 건, 언어모델이 사실 범용 예측기에 가깝다는 뜻입니다. 무엇을 예측하든 그 능력이 통한다는 의미니까요.

그럼 제일 단순한 압축기는 어떨까

거대 언어모델 같은 복잡한 시스템이 예측기 노릇을 한다는 건 그렇다 쳐도, gzip처럼 결정론적인 알고리즘에도 똑같은 원리가 적용될까요. 개발자 Nathan Barry가 직접 실험해본 결과는 그렇다는 쪽이었습니다.

gzip은 DEFLATE라는 알고리즘을 씁니다. 최근 32킬로바이트 정도의 텍스트를 “창”처럼 들고 있다가, 새로 들어오는 내용이 그 창 안의 패턴과 일치하면 데이터를 통째로 다시 쓰는 대신 짧은 참조로 대체합니다. 어떤 문장이 이미 본 패턴과 비슷하면 거의 공짜로 인코딩되고, 전혀 새로운 내용이면 비싸게 인코딩되는 셈입니다. 이게 바로 위에서 말한 예측 원리 그 자체입니다.

여기서 점수를 매기는 방법이 나옵니다. 어떤 문장 뒤에 이어질 후보 문장이 얼마나 “그럴듯한지”는, 그 둘을 합쳐서 gzip으로 압축했을 때 결과가 얼마나 작아지는지로 잴 수 있습니다. 압축된 길이가 짧을수록 더 예측 가능한 후보라는 뜻입니다. 셰익스피어 텍스트를 미리 gzip의 창에 넣어두면, 셰익스피어와 비슷한 문장은 작게 압축되고 전혀 다른 문장은 크게 압축됩니다.

다만 단순히 다음 한 글자씩 골라서는 잘 작동하지 않았습니다. gzip이 내놓는 압축 길이는 정수 단위라서, 한 글자를 추가해도 압축 길이가 거의 안 바뀌는 경우가 많아 미세한 차이를 구분하기 어려웠던 겁니다. 그래서 한 글자가 아니라 한 구간을 통째로 미리 살펴본 다음 가장 잘 압축되는 구간을 고르는 방식을 썼습니다. 다음과 같은 흐름입니다.

  1. 사용자가 준 문장을 그대로 이어 쓸 시작점으로 삼는다
  2. gzip에게 미리 넣어둔 참고 텍스트와 지금까지 나온 문장의 최근 부분을 함께 보여준다
  3. 가능한 다음 글자 후보들을 여러 개 만들어보고, 각각을 압축했을 때 길이를 비교해 가장 작게 압축되는 후보들만 추려낸다
  4. 그중 가장 압축이 잘되는 구간을 최종으로 선택해 이어붙이고, 다시 2번으로 돌아간다

흥미로운 건 gzip에게 보여주는 “최근 부분”을 일부러 제한했다는 점입니다. 이전에 쓴 내용을 전부 보여주면, gzip 입장에서는 가까운 곳에 있는 패턴을 더 싸게 참조할 수 있어서 방금 자기가 쓴 문장을 그대로 반복해서 베끼는 게 가장 싼 선택이 되어버립니다. 일부러 시야를 좁혀줘야 같은 말을 반복하지 않고 새로운 문장을 이어 쓸 수 있었던 셈입니다.

압축이라는 렌즈로 보면 달라지는 것들

이 동치성이 흥미로운 이유는 단순히 “재밌는 트릭”이 아니라는 데 있습니다. 논문은 압축이라는 관점으로 보면 언어모델의 스케일링 법칙이나 토큰화 방식, 인-컨텍스트 학습 같은 현상을 새롭게 이해할 수 있다고 말합니다. 모델이 커질수록 압축률이 좋아진다는 건, 사실 모델이 데이터에 대해 점점 더 정확한 확률 모델을 갖게 된다는 뜻과 같습니다.

또한 어떤 신경망도, 학습된 파라미터도 없는 gzip조차 이 원리를 따른다는 사실은, 예측 능력이 거대 모델만의 특별한 성질이 아니라 압축이라는 행위 자체에 본질적으로 내재해 있다는 걸 보여줍니다. gzip이 만들어낸 문장은 완벽한 셰익스피어 문체가 아니었습니다. 하지만 인물 이름이 대문자로 시작하고, 대화가 콜론 다음에 줄을 바꿔 이어진다는 형식적 구조까지는 따라가고 있었습니다. 신경망 하나 없이도 텍스트의 패턴을 붙잡아낸 셈입니다.

참고자료: Can gzip be a language model? – Nathan Barry


AI Sparkup 구독하기

최신 게시물 요약과 더 심층적인 정보를 이메일로 받아 보세요! (무료)

Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다