- GPT는 대규모 데이터로 사전 학습된 트랜스포머가 다음 텍스트 조각의 확률분포를 예측하고, 이를 반복 샘플링해 문장을 생성하는 방식임
- 같은 구조는 텍스트 생성뿐 아니라 음성 인식, 합성 음성, 이미지 생성, 번역에도 쓰이며, 여기서는 ChatGPT류 도구의 기반인 다음 토큰 예측에 초점을 둠
- 입력 텍스트는 토큰으로 쪼개져 임베딩 벡터가 되고, 어텐션 블록과 다층 퍼셉트론 블록을 지나며 주변 문맥을 흡수함
- GPT-3는 1,750억 개 매개변수를 약 28,000개 행렬에 담고 있으며, 임베딩과 언임베딩만 각각 약 6.17억 개 가중치를 차지함
- 최종 벡터는 언임베딩 행렬과 softmax를 거쳐 다음 토큰 확률분포가 되며, temperature는 예측 가능성과 다양성 사이의 균형을 조절함
GPT와 트랜스포머의 기본 역할
- GPT의 세 단어는 각각 Generative, Pretrained, Transformer를 뜻함
- Generative는 새 텍스트를 생성한다는 뜻임
- Pretrained는 방대한 데이터로 학습된 뒤 추가 학습으로 특정 작업에 맞게 조정될 수 있다는 뜻임
- Transformer는 현재 AI 붐의 핵심 발명으로 다뤄지는 신경망 구조임
- 트랜스포머는 여러 형태의 모델에 쓰임
- 오디오를 입력받아 전사문을 생성하는 모델
- 텍스트에서 합성 음성을 만드는 모델
- DALL-E, Midjourney처럼 텍스트 설명에서 이미지를 생성하는 도구
- 2017년 Google이 처음 소개한 원래 트랜스포머의 용도였던 기계번역
- 여기서 다루는 변형은 ChatGPT 같은 도구의 기반인 다음 텍스트 예측 모델임
- 텍스트, 경우에 따라 주변 이미지나 소리까지 입력받고 다음에 올 내용을 예측함
- 출력은 다음에 올 수 있는 여러 텍스트 조각에 대한 확률분포임
다음 토큰 예측이 생성으로 바뀌는 방식
- 다음 단어 예측과 텍스트 생성은 겉보기에는 다른 목표처럼 보이지만, 예측 모델을 반복 실행하면 긴 텍스트를 만들 수 있음
- 초기 텍스트를 입력함
- 모델이 다음 조각의 확률분포를 만듦
- 그 분포에서 무작위로 샘플을 뽑아 텍스트에 붙임
- 새 텍스트 전체를 다시 입력해 같은 과정을 반복함
- GPT-2를 노트북에서 같은 방식으로 실행하면 이야기가 잘 이어지지 않는 사례가 나옴
- 같은 기본 구조를 더 크게 만든 GPT-3 API로 바꾸면 더 그럴듯한 이야기를 생성할 수 있음
- ChatGPT와 다른 대형 언어 모델이 한 단어씩 답변을 만드는 과정도 본질적으로 반복 예측과 샘플링임
- 챗봇으로 만들기 위한 간단한 출발점은 대화 상황을 텍스트로 구성하는 방식임
- 유용한 AI assistant와 사용자가 상호작용한다는 설정을 담은 system prompt를 둠
- 사용자의 질문을 첫 대화 조각으로 넣음
- 모델이 그런 assistant가 이어서 할 말을 예측하게 함
- 이 방식이 잘 작동하려면 추가 학습 단계가 필요함
트랜스포머 내부의 데이터 흐름
- 입력은 작은 조각인 토큰으로 나뉨
- 텍스트에서는 단어, 단어 일부, 흔한 문자 조합이 토큰이 될 수 있음
- 이미지나 소리가 포함되면 이미지 패치나 소리 조각도 토큰이 될 수 있음
- 각 토큰은 숫자 목록인 벡터와 연결됨
- 이 벡터는 해당 조각의 의미를 어떤 방식으로든 인코딩함
- 고차원 공간의 좌표로 보면 의미가 비슷한 단어는 서로 가까운 벡터에 놓이는 경향이 있음
- 벡터 시퀀스는 먼저 어텐션 블록을 통과함
- 어텐션 블록은 벡터들이 서로 정보를 주고받아 값을 갱신하게 함
- “a machine learning model”의 model과 “a fashion model”의 model처럼 문맥에 따라 달라지는 의미를 처리함
- 어떤 단어가 다른 단어의 의미 갱신에 얼마나 관련되는지와 그 갱신 방식을 맡음
- 이후 벡터는 다층 퍼셉트론 또는 feed-forward layer로 불리는 블록을 통과함
- 이 단계에서는 벡터끼리 서로 말하지 않고 같은 연산을 병렬로 거침
- 각 벡터에 긴 질문 목록을 던지고 답에 따라 갱신하는 방식에 비유됨
- 전체 네트워크는 어텐션 블록과 다층 퍼셉트론 블록을 반복함
- 중간에는 정규화 단계도 있지만 고수준 개요에서는 생략됨
- 마지막에는 문장의 핵심 의미가 시퀀스의 마지막 벡터에 담기기를 기대함
- 그 마지막 벡터를 이용해 가능한 다음 토큰 전체에 대한 확률분포를 만듦
딥러닝 형식과 GPT-3의 매개변수 규모
- 딥러닝은 데이터를 사용해 모델의 동작을 정하는 머신러닝 접근법임
- 이미지에서 라벨을 만들거나, 텍스트 뒤의 다음 단어를 예측하는 작업처럼 직관과 패턴 인식이 필요한 문제에 쓰임
- 초기 AI처럼 절차를 코드로 명시하기보다, 조정 가능한 매개변수를 가진 유연한 구조를 만들고 예시 데이터로 값을 조정함
- 선형회귀는 가장 단순한 머신러닝 예시임
- 집 면적과 가격처럼 입력과 출력이 각각 하나의 숫자인 경우를 다룸
- 기울기와 y절편이라는 두 연속 매개변수로 최적의 직선을 찾음
- GPT-3는 두 개가 아니라 1,750억 개 매개변수를 가짐
- 이런 거대한 모델은 학습 데이터에 과적합하거나 학습이 불가능해질 수 있음
- 딥러닝 모델은 최근 수십 년 동안 잘 확장되는 것으로 입증된 모델 계열로 다뤄짐
- 이 계열을 묶는 공통 학습 알고리듬은 역전파임
- 역전파가 큰 규모에서 잘 작동하려면 모델이 특정 형식을 따라야 함
- 입력은 실수 배열로 표현되어야 함
- 배열은 여러 층을 지나며 계속 다른 실수 배열로 변환됨
- 텍스트 모델의 최종 층은 가능한 다음 토큰 전체의 확률분포를 나타내는 숫자 목록임
- 딥러닝의 매개변수는 보통 가중치라고 불림
- 가중치가 데이터와 상호작용하는 방식은 가중합임
- 비선형 함수도 중간에 들어가지만 매개변수에 의존하지 않음
- 실제 표현은 가중합을 노출하기보다 행렬-벡터 곱셈으로 묶는 경우가 많음
- GPT-3의 1,750억 개 가중치는 약 28,000개 행렬에 정리되어 있음
- 이 행렬들은 8개 범주로 나뉨
- 모델의 가중치는 학습 중 얻어진 “두뇌”이고, 한 번 실행할 때 처리되는 데이터는 입력 텍스트 같은 특정 사례를 인코딩함
임베딩, 문맥 크기, 출력 확률분포
- 첫 단계는 입력 텍스트를 토큰으로 나누고 각 토큰을 벡터로 바꾸는 과정임
- 실제 토큰은 단어 일부나 구두점일 수 있지만 설명에서는 이해를 위해 단어처럼 다룸
- 모델은 가능한 토큰 목록인 vocabulary를 미리 가짐
- 임베딩 행렬은 각 토큰을 어떤 벡터로 바꿀지 정함
- W_E로 표기됨
- 값은 무작위로 시작하지만 데이터 기반 학습으로 정해짐
- GPT-3의 vocabulary 크기는 50,257이고 임베딩 차원은 12,288임
- 둘을 곱하면 임베딩 행렬은 약 6.17억 개 가중치를 가짐
- 단어 임베딩은 고차원 공간의 점으로 생각할 수 있음
- 의미가 비슷한 단어는 가까운 위치에 놓이는 경향이 있음
- 학습이 진행되면 공간의 방향이 의미를 갖는 방식으로 임베딩이 자리 잡는 경향이 있음
- woman - man과 king - queen의 관계, Italy - Germany + Hitler가 Mussolini에 가까워지는 예시가 나옴
- queen 예시에서는 실제 queen 임베딩이 단순한 여성형 king보다 더 멀리 있을 수 있다는 주의점도 함께 다룸
- 점곱은 두 벡터가 얼마나 정렬되어 있는지 측정하는 방식임
- 같은 방향이면 양수, 수직이면 0, 반대 방향이면 음수가 됨
- cats - cat이 복수성을 나타내는 방향일 수 있다는 가설을 점곱으로 시험함
- 복수 명사의 값이 단수 명사보다 더 높게 나오는 경향이 있음
- one, two, three 같은 단어와의 점곱도 증가하는 값이 나오는 사례가 있음
- 트랜스포머의 벡터는 단어 하나만 나타내는 데 그치지 않고 문맥을 흡수할 수 있어야 함
- 처음 생성된 벡터는 임베딩 행렬에서 가져온 단일 토큰의 의미만 가짐
- 네트워크를 통과하면서 주변 단어와 멀리 떨어진 문맥까지 반영한 더 구체적인 의미를 담는 것이 목표임
- GPT-3의 context size는 2048로, 한 번에 2048개 벡터를 처리하도록 학습됨
- 이 문맥 크기는 다음 단어를 예측할 때 모델이 반영할 수 있는 텍스트 길이를 제한함
- 초기 ChatGPT 같은 챗봇이 긴 대화에서 맥락을 잃는 느낌을 주는 이유와 연결됨
- 마지막 단계는 다음 토큰 확률분포를 만드는 과정임
- 최종 문맥의 마지막 벡터를 언임베딩 행렬 W_U에 곱해 vocabulary 크기의 숫자 목록을 만듦
- 이 원시 출력의 각 성분은 다음 단어 예측의 logit으로 불림
- W_U는 vocabulary의 각 토큰에 해당하는 행을 갖고, 각 행의 길이는 임베딩 차원과 같음
- GPT-3 기준 W_U도 약 6.17억 개 매개변수를 추가함
- 임베딩과 언임베딩을 합치면 누적 매개변수는 10억 개를 조금 넘음
- softmax는 임의의 숫자 목록을 유효한 확률분포로 바꿈
- 각 값은 0과 1 사이가 되어야 하고 전체 합은 1이어야 함
- 입력 숫자마다 e의 거듭제곱을 취해 양수로 만들고, 전체 합으로 나눠 정규화함
- 큰 입력값은 1에 가까운 큰 확률을 얻고 작은 값은 0에 가까워짐
- 최댓값만 고르는 것보다 부드러워서, 비슷하게 큰 값들도 의미 있는 확률을 받을 수 있음
- temperature는 softmax 분포의 날카로움을 조절함
- T가 크면 낮은 값에도 더 많은 가중치가 가서 분포가 더 균일해짐
- T가 작으면 큰 값이 더 강하게 지배함
- T=0은 모든 가중치가 최댓값에 몰리는 극단임
- temperature 0에서는 항상 가장 예측 가능한 단어를 고르며, 예시에서는 Goldilocks류의 진부한 이야기가 생성됨
- 더 높은 temperature는 덜 가능성 높은 단어를 선택할 기회를 주지만, 예시에서는 이야기가 더 독창적으로 시작한 뒤 빠르게 무의미해짐
- API는 temperature를 2보다 크게 설정하지 못하게 하며, 이는 수학적 이유가 아니라 도구가 너무 무의미한 결과를 생성하는 것을 막기 위한 임의 제한임