# 카르파티가 문자 예측 모델에 적용한 WaveNet의 계층적 구조

> 2022-11-21 · Andrej Karpathy · 큐레이션 김태우
> https://challengekim.com/insights/카르파티가-문자-예측-모델에-적용한-wavenet의-계층적-구조
> 원문: https://www.youtube.com/watch?v=t3YJ5hKiMQ0

## 핵심 요약

- 안드레이 카르파티는 다음 문자를 예측하는 makemore 모델에서 앞선 문자를 한꺼번에 합치는 대신, 인접한 문자부터 단계적으로 결합하는 구조를 구현했다.
- 입력 문맥을 3자에서 8자로 늘리자 기존의 단일 은닉층 모델도 검증 손실이 약 2.10에서 2.02로 낮아졌다.
- 매개변수를 약 2만 2천 개로 맞춘 비교에서는 계층형 모델의 검증 손실이 2.029로, 기존 구조의 2.027과 거의 같았다.
- 3차원 입력을 잘못 처리하던 배치 정규화를 고친 뒤 검증 손실은 2.022가 됐다. 카르파티는 이 작은 차이가 통계적으로 유의한지는 불분명하다고 밝혔다.
- 모델을 약 7만 6천 개 매개변수로 키운 실험에서는 검증 손실 1.993을 얻었지만, 체계적인 실험 환경 없이 설정을 탐색한 결과라는 한계를 덧붙였다.

## 한꺼번에 합치던 문자를 단계적으로 결합하다

기존 makemore는 앞선 문자 3개를 입력받아 다음 문자 하나를 예측했다. 각 문자를 학습 가능한 숫자 벡터인 **임베딩**으로 바꾼 뒤, 벡터를 한 줄로 이어 하나의 은닉층에 넣는 방식이었다. 카르파티는 더 긴 문맥을 같은 방식으로 즉시 압축하면 정보를 지나치게 빨리 합치게 된다고 봤다.

이번 구현은 앞선 문자 8개로 아홉 번째 문자를 예측한다. 먼저 인접한 문자 두 개씩을 결합해 네 묶음을 만들고, 이를 다시 두 묶음으로 합친 뒤 마지막에 하나로 모은다. 카르파티는 이 점진적 결합 방식이 WaveNet의 계층적 구조와 닮았다고 설명했다. 원래 WaveNet이 다루는 대상은 문자 대신 오디오 시퀀스다.

## 입력 길이만 늘려도 개선된 기준선

계층형 구조를 적용하기 전에 카르파티는 기존 모델의 입력 문맥만 3자에서 8자로 늘려 봤다. 첫 선형층이 커지면서 매개변수가 약 1만 개 늘었고, 검증 손실은 약 2.10에서 2.02로 낮아졌다. 생성된 이름도 주관적으로 더 그럴듯해졌다고 평가했다. 다만 이 실험은 설정을 충분히 조정한 비교가 아니라 계층형 모델을 살펴보기 위한 대략적인 기준선이었다.

계층형 모델에서는 인접한 두 임베딩을 마지막 차원에서 결합하되, 나머지 묶음은 병렬로 처리했다. 이를 위해 텐서의 모양을 바꾸는 `FlattenConsecutive` 층을 만들었다. 예컨대 8개 문자의 10차원 임베딩을 한꺼번에 80차원으로 펼치는 대신, 두 문자씩 묶은 20차원 벡터 네 개로 다뤘다.

## 같은 매개변수 수에서는 차이가 거의 없었다

카르파티는 계층형 모델의 은닉 단위를 조정해 매개변수를 기존 비교 모델과 같은 약 2만 2천 개로 맞췄다. 검증 손실은 계층형이 2.029, 기존 구조가 2.027이었다. 이 실험만으로는 계층형 구조가 매개변수를 더 효율적으로 쓴다고 볼 근거가 없었다. 카르파티 역시 층마다 매개변수를 어떻게 배분할지 충분히 탐색하지 않았다고 밝혔다.

이후 구현을 점검하면서 **배치 정규화** 오류를 찾았다. 배치 정규화는 중간 계산값의 평균과 분산을 이용하는 층이다. 입력이 `32×4×68`일 때 기존 코드는 첫 번째 차원만 평균 내어 네 위치마다 별도의 통계를 유지했다. 의도한 계산은 배치의 32개 사례와 각 사례의 네 위치를 함께 묶어, 68개 채널별 통계를 구하는 것이었다. 코드는 오류 없이 실행됐지만 계산은 의도와 달랐다.

두 차원을 함께 평균 내도록 수정하고 재학습하자 검증 손실은 2.029에서 2.022로 낮아졌다. 카르파티는 통계에 사용되는 값이 채널당 32개에서 `32×4`개로 늘어 추정이 안정될 수 있다고 설명하면서도, 관측된 개선의 통계적 유의성은 확인하지 않았다.

## 구현한 범위와 남은 실험

임베딩 차원과 은닉 단위를 늘려 매개변수를 약 7만 6천 개로 만든 뒤에는 검증 손실 1.993을 기록했다. 학습 시간은 더 길어졌다. 카르파티는 학습률과 층별 크기 등을 체계적으로 시험할 실험 환경이 없어, 이 수치를 구조 자체의 우수성을 보여 주는 결과로 강조하지 않았다.

이번에 구현한 것은 WaveNet과 닮은 **점진적 결합 구조**다. WaveNet의 팽창 인과 합성곱이나 게이트 층, 잔차 연결, 스킵 연결까지 구현한 것은 아니다. 카르파티는 합성곱을 쓰면 같은 계산 구조를 입력 시퀀스의 여러 위치에 효율적으로 적용하고, 위치 사이에서 중간 계산 결과를 재사용할 수 있다고 설명했다.

결국 이번 실험은 더 긴 문맥의 효과, 계층형 결합의 구현 방식, 그리고 실행은 되지만 결과를 바꾸는 배치 정규화 오류를 함께 보여 준다. 계층형 구조의 이점은 동일한 조건에서 설정을 더 탐색해야 판단할 수 있다.

---

원문을 바탕으로 AI 가 한국어로 요약·재구성한 글입니다. 인용·수치는 원문 링크에서 확인해 주세요. [원문 링크](https://www.youtube.com/watch?v=t3YJ5hKiMQ0)
