핵심 요약

  • 안드레이 카파시는 약 100만 자의 ‘Tiny Shakespeare’로 다음 문자를 예측하는 트랜스포머 언어 모델을 만든다. 실제 ChatGPT를 재현하는 실험은 아니다.
  • 모델의 핵심인 자기 주의는 앞선 문자 가운데 현재 예측에 필요한 정보에 서로 다른 가중치를 주어 모은다.
  • 여러 주의 헤드와 반복되는 트랜스포머 블록을 적용하고 모델 규모를 키우자, 실험의 검증 손실은 초기의 약 2.5에서 1.48까지 낮아졌다.
  • 생성된 글은 셰익스피어 작품의 형식을 닮았지만 내용을 읽으면 의미가 통하지 않는다. 질문에 답하는 챗봇을 만들려면 사전 학습 뒤 별도의 조정 단계가 필요하다.

다음 문자를 맞히는 작은 실험

카파시가 구현한 언어 모델은 앞에 나온 텍스트를 보고 다음 요소를 예측한다. ChatGPT가 단어보다 작은 조각인 토큰 단위로 텍스트를 생성하는 것과 달리, 이 실험은 이해하기 쉬운 문자 단위를 택했다. 입력 자료에 등장하는 문자 65개에 각각 정수를 부여하고, 약 100만 자의 텍스트를 정수의 긴 배열로 바꿨다. 문자 단위 방식은 변환 규칙이 단순한 대신 처리할 시퀀스가 길어진다.

자료의 앞쪽 90%는 학습에, 마지막 10%는 검증에 쓴다. 검증 자료를 따로 두면 모델이 학습 문장을 외우는 데 그치는지 살펴볼 수 있다. 전체 텍스트를 한 번에 넣지 않고 짧은 구간을 무작위로 뽑아 학습한다. 길이가 아홉 문자인 구간에서는 앞의 한 문자로 다음 문자를 맞히는 경우부터 앞의 여덟 문자로 아홉 번째를 맞히는 경우까지, 여러 예측 문제를 동시에 얻는다.

출발점은 현재 문자 하나만 보고 다음 문자를 예측하는 단순한 모델이다. 학습하면서 손실은 약 2.5까지 떨어졌지만, 앞선 문맥을 활용하지 못하므로 생성문에는 한계가 있었다.

자기 주의는 앞선 정보에 가중치를 준다

문맥을 쓰려면 각 위치의 문자가 앞에 나온 문자들의 정보를 받아야 한다. 가장 단순한 방법은 이전 정보의 평균을 내는 것이지만, 모든 위치를 똑같이 취급하면 어떤 정보가 더 필요한지 구분할 수 없다.

자기 주의에서는 각 위치가 찾고 싶은 정보를 나타내는 쿼리, 자신이 가진 정보를 나타내는 키, 전달할 정보를 담은 값을 만든다. 쿼리와 키의 연관성으로 가중치를 구한 뒤 값들을 가중 합산한다. 이 실험은 다음 문자를 예측하므로 뒤에 나올 문자를 미리 볼 수 없도록 삼각형 형태의 마스크를 씌운다. 위치 정보도 별도로 더해 각 문자가 시퀀스의 어디에 있는지 모델이 알게 한다.

주의를 한 갈래만 적용한 뒤 검증 손실은 약 2.4가 됐다. 여러 주의 갈래를 병렬로 두는 다중 헤드 주의를 적용하자 약 2.28로 낮아졌다. 서로 다른 갈래가 앞선 텍스트에서 서로 다른 정보를 모을 수 있게 한 구성이다. 이어 각 위치가 모은 정보를 개별적으로 처리하는 피드포워드 층을 추가했을 때 손실은 약 2.24였다.

블록을 쌓고 규모를 키운 결과

트랜스포머는 정보를 모으는 주의 층과 이를 처리하는 층을 한 블록으로 묶어 반복한다. 카파시는 블록을 깊게 쌓을 때 학습이 어려워지는 문제를 다루기 위해 이전 입력을 다음 단계에 더하는 잔차 연결과, 각 위치의 특성을 정규화하는 층 정규화를 적용했다. 이 과정에서 검증 손실은 약 2.08, 이후 약 2.06으로 낮아졌다.

마지막 실험에서는 한 번에 처리하는 독립 시퀀스를 64개로, 예측에 쓰는 최대 문맥을 256자로 늘렸다. 특성 차원은 384, 주의 헤드는 6개, 블록은 6개로 설정하고 학습 중 일부 계산을 무작위로 끄는 드롭아웃을 적용했다. 카파시가 제시한 최종 검증 손실은 1.48이다. 그는 A100 GPU에서 이 학습에 약 15분이 걸렸다고 설명하며, CPU에서는 같은 설정을 그대로 실행하지 않겠다고 말했다. 출력은 등장인물의 대사처럼 보이는 형식을 더 잘 따랐지만, 내용은 여전히 무의미했다.

번역용 트랜스포머와 GPT의 차이

원래의 트랜스포머 논문은 기계번역을 다뤘다. 번역 모델에서는 인코더가 입력 문장을 읽고, 디코더가 그 정보를 참고해 출력 문장을 순서대로 만든다. 두 부분을 연결하는 것이 교차 주의다. 반면 카파시의 실험은 주어진 텍스트의 연속을 생성하므로 인코더나 교차 주의를 구현하지 않았다. 앞선 문자만 볼 수 있게 한 디코더 전용 트랜스포머를 사용했다.

사전 학습만으로는 챗봇이 되지 않는다

카파시는 이 작은 실험을 대형 모델의 사전 학습과 연결한다. 그의 모델은 약 1,000만 개의 매개변수를 가졌고, 셰익스피어 자료는 이 실험에서는 약 100만 개의 문자 토큰에 해당한다. 그는 이를 OpenAI의 하위 단어 토큰 방식으로 환산하면 약 30만 토큰일 것으로 추정했다. 강연에서 비교한 GPT-3의 가장 큰 모델은 매개변수 1,750억 개를 사용했고, 학습량은 3,000억 토큰이었다.

사전 학습은 다음 토큰을 예측하도록 모델을 훈련한다. 따라서 그 결과물은 질문에 알맞게 답하는 도우미라기보다 이어질 문서를 생성하는 모델에 가깝다. 카파시는 ChatGPT 같은 응답 방식을 위해 질문과 답변 형식의 자료로 추가 학습하고, 여러 답변에 대한 사람의 선호 순위를 이용해 보상 모델을 만든 다음, 그 평가를 바탕으로 응답 방식을 더 조정하는 단계를 설명한다. 이 강연의 구현과 카파시가 소개한 nanoGPT 저장소는 주로 사전 학습에 초점을 맞춘다.

작은 셰익스피어 모델은 GPT의 구성 요소와 다음 토큰 예측 과정을 보여준다. 동시에 그럴듯한 문장 형식을 만드는 것과 의미 있는 답변을 제공하는 것 사이에 별도의 학습 단계가 있음을 드러낸다.