AI VIDEO BRIEFING

안드레이 카파시 makemore 강의 정리 — 바이그램 문자 언어모델을 카운트와 경사하강 두 방법으로 만들기

안드레이 카파시가 이름 3만 2천 개로 문자 단위 바이그램 언어모델을 밑바닥부터 만든다. 빈도를 세어 표를 만드는 방법과 신경망을 경사하강으로 학습시키는 방법이 왜 똑같은 결과에 도달하는지, 그리고 트랜스포머로 이어지는 뼈대가 무엇인지 짚어본다.

카파시의 언어모델 첫걸음: 이름 3만 개로 만든 '가장 단순한 언어모델'과, 세는 방법과 학습하는 방법이 같은 답에 닿는 이유 영상 대표 이미지

핵심 메시지

  • 정부 웹사이트에서 모은 이름 3만 2천 개를 재료로, 앞 글자 하나만 보고 다음 글자를 맞히는 가장 단순한 문자 단위 언어모델을 만든다.
  • 빈도를 세어 표를 만드는 방법과, 신경망 가중치를 경사하강으로 학습시키는 방법이 결국 동일한 모델과 동일한 손실값에 도달한다.
  • 모델 품질은 '평균 음의 로그 가능도'라는 하나의 숫자로 요약되며, 이 값이 낮을수록 좋고 최저값은 0이다.
  • 학습 데이터에 한 번도 없는 글자 조합은 확률이 0이 되어 손실이 무한대가 되는데, 가짜 카운트를 더하는 '스무딩'이 이를 막는다. 신경망 쪽에서는 정규화 항이 정확히 같은 역할을 한다.
  • 표 방식은 앞 글자를 여러 개 보려 하면 조합 폭발로 무너지지만, 신경망 방식은 그대로 확장돼 최종적으로 트랜스포머까지 이어진다.

쉽게 이해하기

안드레이 카파시가 'makemore'라는 이름의 실습 시리즈 첫 편에서, 데이터를 넣으면 그와 비슷한 것을 더 만들어내는 모델을 밑바닥부터 만든다. 재료는 정부 웹사이트에서 모은 이름 3만 2천 개다. 가장 짧은 이름은 두 글자, 가장 긴 이름은 열다섯 글자다. 목표는 이름처럼 들리지만 실제로는 존재하지 않는 새 이름을 생성하는 것이다.

핵심 관점은 이름 하나가 여러 개의 학습 예시를 품고 있다는 점이다. 'Isabella'라는 이름은 I가 첫 글자로 잘 온다는 정보, S는 I 다음에 잘 온다는 정보, 그리고 마지막 a 다음에는 이름이 끝난다는 정보까지 담고 있다. 첫 편에서는 바로 앞 글자 하나만 보고 다음 글자를 맞히는 '바이그램' 모델을 다룬다. 정보를 대부분 버리는 약한 모델이지만 출발점으로 삼기 좋다는 설명이다.

먼저 세는 방법이다. 알파벳 26자에 시작과 끝을 겸하는 특수 토큰 하나를 더해 27×27 행렬을 만들고, 어떤 글자 뒤에 어떤 글자가 몇 번 왔는지 채운다. 각 행을 합으로 나눠 확률 분포로 바꾸면 모델이 완성된다. 여기서 샘플링해 이름을 뽑아보면 결과는 형편없지만, 모든 글자가 똑같이 나올 확률인 완전 무작위 모델과 비교하면 분명히 무언가를 배웠음을 알 수 있다.

품질을 숫자 하나로 요약하기 위해 가능도를 쓴다. 모델이 학습 데이터의 각 글자 조합에 매긴 확률을 모두 곱한 값인데, 너무 작아지므로 로그를 취해 더하는 방식으로 바꾼다. 손실 함수는 낮을수록 좋아야 하므로 부호를 뒤집고 개수로 나눈 '평균 음의 로그 가능도'를 쓴다. 이 데이터셋에서 값은 약 2.45다.

이어 같은 문제를 신경망으로 다시 푼다. 글자 인덱스를 원-핫 벡터로 바꿔 27×27 가중치 행렬에 곱하고, 그 출력을 '로그 카운트'로 해석해 지수를 취한 뒤 정규화한다. 이 두 단계를 합친 것이 소프트맥스다. 22만 8천 개 조합 전체로 경사하강을 돌리면 손실은 다시 2.45 언저리로 내려간다. 카파시는 원-핫 벡터에 행렬을 곱하는 일이 사실은 그 행렬의 해당 행을 꺼내는 것과 같으며, 결국 두 방법이 같은 표에 도달한다고 정리한다.

주요 인사이트

  • '세기'와 '학습하기'가 같은 답에 닿는다는 점이 이 강의의 핵심이다. 바이그램처럼 단순한 문제에서는 직접 세는 편이 빠르지만, 경사하강 방식은 훨씬 유연해 모델을 복잡하게 키울 수 있다는 것이 요지다.
  • 스무딩과 정규화가 같은 일을 한다는 설명이 흥미롭다. 표 방식에서 가짜 카운트를 더하면 분포가 균등해지고, 신경망에서 가중치를 0쪽으로 미는 정규화 항을 넣어도 확률이 균등해진다. 정규화 강도를 키우는 것은 가짜 카운트를 더 얹는 것과 같다.
  • 카파시가 시간을 들여 경고한 것은 파이토치 브로드캐스팅이다. 합을 구할 때 keepdim 옵션을 빼면 27×1 열 벡터가 1×27 행 벡터로 조용히 바뀌어, 행이 아니라 열 방향으로 정규화되는 버그가 생긴다. 에러 없이 잘못된 결과만 나오는 종류의 함정이다.
  • 표 방식의 한계는 확장성에서 드러난다. 앞 글자 하나만 볼 때는 표로 충분하지만 앞 열 글자를 보려 하면 가능한 조합이 폭발해 표에 담을 수 없다. 신경망이 필요한 이유가 성능이 아니라 확장성에 있다는 지적이다.
  • 신경망을 복잡하게 만들어도 바뀌는 것은 로짓을 계산하는 앞부분뿐이라는 정리도 유용하다. 소프트맥스, 음의 로그 가능도 손실, 경사 기반 최적화라는 뼈대는 트랜스포머까지 그대로 유지된다.

자주 묻는 질문

바이그램 모델은 무엇인가?

바로 앞 글자 하나만 보고 다음 글자를 예측하는 모델이다. 그 이전에 무슨 글자가 있었는지는 전혀 기억하지 않는다. 강의에서는 이 때문에 생성된 이름이 엉망이라고 설명한다. 모델 입장에서는 지금 보는 글자가 첫 글자인지 다섯 번째 글자인지조차 알지 못하기 때문이다.

손실값 2.45는 무슨 의미인가?

학습 데이터의 실제 다음 글자에 모델이 매긴 확률의 로그를 평균 낸 뒤 부호를 뒤집은 값이다. 낮을수록 좋고 최저는 0이며, 0은 모델이 모든 다음 글자를 확률 1로 맞힌다는 뜻이다. 강의에서는 글자가 27개라 완전 무작위면 각 확률이 약 4%가 되므로, 그보다 높은 확률이 나오면 무언가를 배운 것이라고 설명한다.

왜 확률이 아니라 로그를 다루나?

모델 품질을 재는 가능도는 모든 확률의 곱인데, 0과 1 사이 숫자를 수만 번 곱하면 값이 지나치게 작아져 다루기 어렵다. 로그를 취하면 곱셈이 덧셈으로 바뀌어 계산이 편해진다. 로그는 단조 변환이므로 가능도를 최대화하는 문제와 로그 가능도를 최대화하는 문제는 동일하다.

왜 신경망 출력을 바로 확률로 쓰지 않나?

신경망에서 나온 값은 음수와 양수가 뒤섞여 있어 확률로 쓸 수 없다. 확률은 모두 양수이고 합이 1이어야 하기 때문이다. 그래서 출력을 '로그 카운트'로 해석해 지수를 취하면 항상 양수가 되고, 이를 합으로 나누면 확률이 된다. 이 과정 전체가 소프트맥스이며 모든 단계가 미분 가능해 역전파를 할 수 있다.

원문과 출처

이 글은 원본 영상의 자막을 바탕으로 한국어 독자를 위해 요약했습니다. 전체 맥락과 최신 정보는 원문에서 확인하세요.

YouTube 원본 영상 보기 ↗

관련 AI 소식