교차 엔트로피란 무엇인가? | 압축은 지능이다 파트 2
요약
본 영상은 'Language Trees and Zipping' 논문을 통해 파일 압축 기술이 언어 간 구조적 관계를 파악하는 데 사용될 수 있음을 설명합니다. 특히, 두 텍스트의 공동 압축 크기 차이를 이용해 언어 계통수를 복구하고 문서 출처를 식별하는 원리를 제시하며, 이 핵심 개념이 교차 엔트로피(cross-entropy)와 연결됨을 보여줍니다.
핵심 포인트
- 압축 기술만으로도 언어 간 구조적 관계 파악 가능
- 공동 압축 기반의 거리가 언어 계통수 복구에 충분함
- 핵심 지표인 교차 엔트로피가 ML/AI 훈련 방식과 연결됨
- LLM 훈련을 다음 토큰 예측이 아닌 '압축' 관점에서 재구성할 수 있음
비디오: 교차 엔트로피란 무엇인가? | 압축은 지능이다 파트 2
채널: 3Blue1Brown
길이: 33분 51초
출처: 자막 (수동, 영어)
스크립트:
2002년에 발표된 'Language Trees and Zipping'이라는 흥미로운 논문이 있습니다. 이 논문은 매우 일반적인 파일 압축만을 사용하여 언어들 사이의 구조를 찾아낼 수 있음을 보여줍니다. 예를 들어, 제가 여러분에게 여러 다른 언어로 된 텍스트 문서들을 한 무더기 준다고 가정해 봅시다. 그리고 목표는 그것들을 언어별로 자동으로 클러스터링하는 것입니다. 사실, 여기서 더 높은 목표를 설정할 수도 있습니다. 만약 또한 어떤 언어들이 서로 얼마나 밀접하게 관련되어 있는지 복구하여, 그들 사이의 공유 계통수(shared lineage)를 재발견할 수 있게 하고 싶다고 가정해 봅시다. 그리고 여러분이 할 수 있는 것은 각 텍스트를 처리하는 함수를 작성하는 것뿐입니다.
여기에는 언어학적 사전 지식이 없습니다. 명심하세요, 이것은 거의 25년 전의 일이라 현대적인 언어 모델 같은 것은 사용할 수 없었습니다. 놀라운 점은 저자들이 단지 gzip을 사용함으로써 이를 수행할 수 있음을 보여주었다는 것입니다. 기본적으로 여러분이 컴퓨터에서 파일을 조금 더 작게 만들기 위해 사용하는 것과 동일한 연산입니다. 기본적인 아이디어는 이렇습니다. 문서 A와 B가 있다고 할 때, B의 작은 조각(snippet)을 A의 끝에 붙인 다음, 그 결과를 압축합니다. 그리고 이 파일 크기를 A만 단독으로 압축했을 때 얻는 크기와 비교해 봅니다.
이 차이를 생각하는 한 가지 방법은, 압축기가 주로 A에 최적화되어 있을 때 B의 작은 조각이 얼마나 잘 압축되는지를 알려준다는 것입니다. 만약 B의 언어 패턴이 A와 유사하다면 그 결과는 작을 것으로 예상되지만, B가 A와 더 다르다면 더 클 것입니다. 저자들은 이 일반적인 아이디어를 사용하여 두 문서가 얼마나 떨어져 있는지를 정의하는 특정 지표를 만들었고, 이는 오직 함께 압축되는 정도에만 기반합니다. 그리고 명백하게도, 이 공동 압축 기반의 거리는 언어 계통수를 복구하기에 충분했습니다.
그리고 여기서 그치지 않습니다. 같은 트릭은 누가 주어진 문서를 작성했는지 식별하는 것과 같은 다른 자연어 처리 작업에도 사용될 수 있습니다. 제가 이 논문에서 좋아하는 점은 압축 뒤에 숨겨진 이론과 공학이 기계 학습(ML) 및 인공지능(AI)의 영역으로 보이는 작업에 놀라울 정도로 유용할 수 있다는 순수한 예시라는 것입니다. 이 예시의 근간을 이루는 특정 개념은 교차 엔트로피(cross-entropy)라고 알려진 것입니다. 흥미로운 점은 교차 엔트로피가 현대 언어 모델이 훈련되는 방식의 매우 핵심적인 부분이라는 것이며, 이는 해당 훈련과 압축 사이에 예상치 못한 연결고리를 살짝 보여줍니다.
제가 이 영상으로 하고 싶은 것은 기본 원리로 돌아가는 강의를 제공하는 것입니다. 전반부에서는 교차 엔트로피가 무엇인지, 그것이 어떻게 자연스럽게 압축 연구에서 발생하는지, 그리고 그것을 어떻게 시각화할 수 있는지에 대해 시간을 할애할 것입니다. 그 후에는 언어 모델의 사전 훈련(pre-training)과 증류(distilling)의 기본 원리를 다룰 것입니다. 흥미로운 점은 두 번째 전반부에서는 교차 엔트로피가 처음에 발생하는 방식이 완전히 달라 보인다는 것입니다. 압축과는 관련이 없어 보입니다.
하지만 같은 공식이 서로 다른 두 가지 맥락에서 나타날 때마다, 그것은 수학이 당신에게 윙크하며 연결고리를 암시하는 방식과 같습니다. 그래서 마지막에는 교차 엔트로피가 실제로 어디서 오는지에 대한 이해와 사전 훈련에 대한 이해를 결합하여, 대규모 언어 모델(LLM)을 훈련시키는 방식을 다음 토큰 예측이 아니라 압축의 관점에서 재구성하도록 보여주고 싶습니다. 메시지를 비트 시퀀스로 인코딩하는 맥락에서 교차 엔트로피를 동기 부여하는 것이 가장 쉽습니다.
이것은 우리가 파트 1에서 논의를 시작했던 주제입니다. 그곳에서는 메시지를 텍스트의 문자 같은 기호들의 시퀀스로 취급한다는 틀을 사용했습니다. 그리고 만약 새로운 각 기호를 어떤 확률 분포에서 샘플링되는 것처럼 취급한다면, 그 확률들은 압축에 대한 근본적인 한계에 대해 무언가를 알려줍니다. 이제 자연어의 경우는 믿을 수 없을 만큼 복잡해서, 그러한 분포들을 설명하기가 매우 어려울 것이므로, 우리는 아주 단순화된 장난감 예제(toy example)에 논의를 많이 집중했습니다.
그리고 저는 여기서 그 흐름을 이어가고 싶습니다. 왜냐하면 이 예제가 교차 엔트로피(cross-entropy)를 동기 부여하는 데 도움이 되기 때문입니다. 설정은 우리가 멀리 떨어진 로봇에게 네 가지 가능한 명령어 시퀀스를 전송한다는 것이었습니다. 위로 이동(Move up), 아래로 이동(down), 왼쪽으로 이동(left), 또는 오른쪽으로 이동(right)이며, 우리가 보내는 각 기호는 '위' 명령을 보낼 확률이 50%, '아래'를 보낼 확률이 4분의 1, 그리고 나머지 기호인 '왼쪽'과 '오른쪽' 각각을 보낼 확률이 8분의 1을 주는 분포에서 샘플링됩니다. 마치 우리가 로봇에게 특정한 편향된 랜덤 워크(biased random walk)를 수행하도록 원하는 것 같습니다.
파트 1에서 우리가 도출한 결론 중 하나는 여기서 가장 좋은 인코딩 방식이 '위'라는 기호를 단 하나의 비트로, '아래'라는 기호를 두 개의 비트로, 그리고 '왼쪽'과 '오른쪽' 각각을 세 개의 비트로 변환한다는 것이었습니다. 이 장난감 예제의 전체 요점은 이것이 훨씬 더 일반적인 사실의 구체적인 설명이라는 것입니다. 즉, 최적 코드(optimal code)에 대해 주어진 기호에 할당되는 비트 수는 그 기호가 나타날 확률의 음의 로그 2를 닮았다는 것입니다. 이 음의 로그 표현식은 적응하는 데 시간이 좀 걸립니다.
제가 역사적으로 우리가 이 확률의 $ ext{log}_2$로 부를 수 있는 방식으로 전개되었으면 좋겠다고 언급했습니다. 왜냐하면 이것은 본질적으로 어떤 양에 도달하기 위해 무언가를 몇 번 절반으로 쪼개야 하는지를 묻고 있기 때문입니다. Claude Shannon은 이 표현을 사건의 정보량(information content)이라고 정의했습니다. 물론 보통 숫자들은 그렇게 깔끔하지 않기 때문에, 이 정보값은 일반적으로 정수가 아니며, 이는 최적의 코드가 특정 비트 문자열과 기호를 연결하는 것처럼 단순할 수 없다는 것을 의미합니다.
이것을 생각하는 더 일반적인 방법은 전체 메시지를 인코딩하려면, 전체 메시지의 정보량은 모든 개별 기호들의 정보량의 합처럼 보이며, 메시지의 최적 인코딩에 필요한 비트 수는 대략 그 전체 정보량이라는 것입니다. 따라서 분수 형태의 정보는 여기서 매우 실제적인 의미를 가집니다. 이제 파트 2로 넘어가서, 여러분의 우주 기관이 계획을 변경하기로 결정했다고 상상해 봅시다. 이는 효과적으로 상황을 회전시켜 전반적으로 더 오른쪽으로 이동하는 것을 장려하며, 이제부터 기호 '위(up)'와 '아래(down)'는 각각 $rac{1}{8}$의 확률로, 기호 '왼쪽(left)'은 $rac{1}{4}$의 확률로, 그리고 '오른쪽(right)'은 절반의 시간 동안 샘플링된다고 가정합니다.
만약 여러분의 모든 인코딩 및 디코딩 시스템이 이전 인코딩 방식, 즉 이전 분포에 최적화되어 하드 코딩되어 있다고 가정해 봅시다. 이것은 명백히 비효율적이겠지만, 얼마나 비효율적인지 정확하게 계산하는 것은 어렵지 않습니다. 이제 '위'를 위한 단일 비트 지시는 $rac{1}{8}$의 시간 동안만 발생하고, '아래'를 위한 두 비트는 역시 $rac{1}{8}$의 시간 동안만 발생하며, 나머지 두 지시어는 각각 세 개의 비트를 필요로 하는데, 이것들이 합쳐져서 75%의 시간 동안 발생합니다. 이를 가중치 합으로 더하면, 메시지당 평균 $2.625$비트가 나옵니다.
이 숫자는 원래 분포(original distribution) 대비 새로운 분포(new one)의 교차 엔트로피(cross entropy)를 나타낸다고 말할 수 있습니다. 만약 특정 컨텍스트를 중심으로 압축 방식(compression scheme)을 최적화했다면, 다른 컨텍스트에서는 어떻게 작동할까요? 지금까지 제가 설명한 것만으로도, 아까 말씀드렸던 zipping과 언어 트리 예시를 떠올리면서 이미 머릿속에 몇 가지 생각이 떠오르실 수도 있습니다. 구체적으로 설명하기 전에, 이 개념을 일반화하고 몇 가지 공식으로 정리하는 데 시간을 할애할 가치가 있습니다. 새로운 분포의 모든 확률에는 알파벳 P를 붙이고, 원래 분포의 모든 확률에는 알파벳 Q를 붙이겠습니다.
그리고 네 개의 로봇 명령어에만 국한하지 않고, 어떤 기호들의 순서(sequence of symbols)처럼 보이는 메시지라는 일반적인 경우를 고려해 봅시다. 이 기호들은 네 개의 로봇 명령어가 될 수도 있고, 영어 텍스트의 문자일 수도 있으며, 여러분이 상상하는 무엇이든 될 수 있습니다. 첫 번째 분포 Q에 최적화된 인코딩은 각 기호에 $ ext{neg log}_2(Q_i)$ 비트를 할당합니다. 따라서 명령어당 평균 사용되는 비트는 다음과 같은 가중치 합(weighted sum)처럼 보입니다. 기본적으로, 각 기호를 순회하면서 그것이 나타나는 비율, 즉 확률($P$)을 정보량(information content), $ ext{neg log}_2(P)$와 곱한 값을 취합니다.
이 합계는 지난 시간에 다뤘던 또 다른 핵심 용어인 Q의 엔트로피(entropy of Q)였으며, 우리는 이것을 이 다이어그램의 영역으로 시각화했습니다. 각 막대는 가중치 합의 한 부분을 나타냅니다. 그 너비는 $Q$이고 높이는 $ ext{neg log}_2(Q)$입니다. 하지만 실제에서 발생하는 분포가 다른 무언가인 P이고, 우리가 계속해서 Q에 최적화된 인코딩을 사용한다면, 명령어당 평균 사용되는 비트 수는 여전히 가중치 합처럼 보일 것이지만, 이제 가중치는 이 새로운 확률들 $P$가 됩니다. 따라서 이 일반적인 표현식은 정의상 분포 Q를 분포 P에 대한 교차 엔트로피(cross entropy)입니다.
실제 현장에서 보게 될 구체적인 표기법은 다소 복잡하며, 많은 다른 관례가 존재합니다. 저희에게는 이 합계 자체에만 집중하여 이해할 것이며, 이 다이어그램으로 시각화됩니다. 여기서 각 막대의 너비는 $P_i$이고 높이는 $Q_i$의 음의 로그 2 값입니다. 새로운 공식이 있을 때마다 매우 간단한 예시를 통해 직관을 형성하는 데 도움이 됩니다. 따라서 이 경우, 많은 가능한 이벤트가 있는 분포 대신 두 개의 이벤트만 있는 분포를 고려해 봅시다.
그리고 $Q$는 각 이벤트에 50%의 확률을 할당하는 균등 분포라고 가정하고, $P$는 한쪽에 90%, 다른 쪽에 10%를 할당하여 더 치우친(skewed) 분포라고 합시다. 이것은 $Q$의 관점에서 볼 때, 각 이벤트가 1비트의 정보를 가진다는 것을 의미하며, 이 분포를 따르는 심볼에 대한 최적 코드는 각 심볼에 단지 1비트만 사용하면 되므로, $Q$의 총 엔트로피는 1비트입니다. 교차 엔트로피는 어떨까요? 만약 이 코드가 새로운 심볼 분포가 적용될 때 사용된다면, 그 경우 심볼당 평균 비트 수는 얼마일까요?
음, 실제로 이 예시에서는 각 심볼이 동일한 양의 정보(1비트)를 가지기 때문에 가중 합계에서 가중치들은 실제로는 아무런 차이를 만들지 않으므로, 교차 엔트로피 역시 1비트입니다. 하지만 이제 이것을 뒤집어 생각해 봅시다. 만약 $Q$가 90-10으로 매우 치우친 분포였고, $P$가 50-50의 균등 분포였다고 가정해 봅시다. 그러면 $Q$의 관점에서 볼 때, 그 훨씬 더 가능성이 높은 이벤트는 정보량이 매우 적고, 다른 하나는 정보량이 많습니다. 따라서 $Q$의 입장에서 보면, 이 분포를 따르는 심볼에 대한 완벽한 코드는 모든 메시지에 걸쳐 평균적으로 1비트보다 훨씬 적은 비트를 사용해야 하며, 그 하나의 공통 심볼을 위해 평균적으로 여러 비트를 사용하는 것을 상쇄합니다.
계산해 보면, Q의 전체 엔트로피는 이제 1비트보다 작아집니다. 하지만 교차 엔트로피(cross entropy)는 어떨까요? 이 치우친 분포에 최적화된 코드가 두 사건이 동등하게 발생할 가능성이 있는 새로운 현실에 직면한다면, 불리함을 정말로 볼 수 있고, 그 가중 합은 약 1.74비트입니다. 그러니 한 발짝 물러서서 여기서 순서가 얼마나 중요한지 주목해 보세요. P와 Q의 역할을 바꾸자 이 교차 엔트로피 값도 변했고, 이는 당연합니다. 공식에서 P와 Q의 역할은 상당히 다릅니다.
여기서 잠시 이야기하자면, 단지 두 가지 가능한 결과에 대한 간단한 분포만 보여주더라도 더 재미있는 것을 할 수 있습니다. 이 분포 Q가 오직 하나의 자유 변수, 작은 $q_1$에 의존하고, 보완적인 값은 1 - $q_1$로 고정되어야 한다는 점을 주목하세요. P도 마찬가지입니다. 정말 단 하나의 매개변수, 작은 $p_1$에만 의존합니다. 우리가 재미있는 것을 할 수 있는 이유는 자유 매개변수가 적기 때문에 그래프를 그려서 더 많은 직관을 구축할 수 있고, 이는 제가 여기서 한 가지 중요한 속성을 강조할 수 있게 해줍니다.
P를 고정해 두고 이 교차 엔트로피 표현식을 Q의 함수로 플롯한다고 상상해 보세요. 주목하게 될 것은 이 그래프가 매우 명확한 최솟값에 도달한다는 것이고, 더 구체적으로는 그 최솟값을 달성하는 값이 P와 Q가 동일할 때라는 것입니다. 그리고 우리가 이를 동기화시킨 방식에 기초하여, 이것이 충분히 말이 되기를 바랍니다. 항상 교차 엔트로피가 무엇을 묻고 있는지 기억하세요. 한 가지 설정(Q)에 최적화된 코드가 다른 설정(P)에서 얼마나 잘 작동하는지? 그 압축 효율성은 두 설정이 일치할 때 명백하게 가장 좋을 것입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 YouTube 3Blue1Brown (수학/ML)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기