ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • GPT(Generative Pre-Training Transformer)
    AI 2026. 3. 10. 15:20

    자연어 처리(NLP)의 패러다임을 바꾼 GPT(Generative Pre-trained Transformer)에 대해 아주 자세히 파헤쳐 보겠습니다. GPT가 단순히 '글을 잘 쓰는 AI'를 넘어 어떤 기술적 배경을 가지고 있는지 정리해 보았습니다.

     

     

    GPT의 근본: Transformer Decoder

    GPT는 이름에서 알 수 있듯이 트랜스포머의 디코더(Decoder) 구조만을 쌓아 만든 네트워크입니다.

    • 구조적 특징: 트랜스포머의 디코더 블록을 아주 깊게 쌓아 올린 형태입니다.
    • 구성 요소: 각 디코더 블록은 Masked Multi-Head Attention, Multi-Head Attention(인코더-디코더 어텐션이나 GPT에서는 인코더가 없으므로 변형됨), Feed Forward Neural Network(FFNN)로 구성됩니다.
    • 한 줄 요약: "디코더 블록을 많이, 그리고 깊게 쌓고 엄청난 데이터를 학습시킨 결과물이 바로 GPT다!"

     🔄 원본 트랜스포머 vs GPT: 무엇이 달라졌나?

    트랜스포머가 GPT로 진화하며 변경된 11가지 핵심 구조적 차이점입니다. 이 변화들이 모여 지금의 강력한 GPT를 만들었습니다.

    1. 포지셔널 인코딩 → 임베딩: 고정된 사인/코사인 함수 대신, 모델이 위치 정보도 스스로 학습하는 **학습 가능한 임베딩(Learned Positional Embedding)**을 사용합니다.
    2. 인코더 삭제: 번역을 위한 양방향 구조에서 벗어나, 오직 디코더 블록만으로 구성된 단방향 모델이 되었습니다.
    3. 크로스 어텐션 제거: 인코더가 사라졌으므로, 인코더 정보를 참조하던 '크로스 어텐션' 층을 삭제하고 마스크드 셀프 어텐션에 집중합니다.
    4. 범용 리니어 층 추가: 특정 작업에 국한되지 않고 챗봇, 감성 분석 등 다양한 문제를 풀 수 있도록 교체 가능한 리니어 헤드(Task-specific Linear Head) 구조를 도입했습니다.
    5. 투입구의 단일화: 질문과 답변을 따로 넣지 않고, [질문] + [구분자] + [답변] 형태의 단일 시퀀스로 통째로 입력합니다.
    6. 완전한 인과적 마스킹(Causal Masking): 첫 번째 층부터 마지막까지 미래의 단어를 절대 볼 수 없도록 엄격한 단방향(왼쪽→오른쪽) 구조를 유지합니다.
    7. 활성화 함수 변경: ReLU 대신 0 근처에서 더 부드러운 곡선을 그리는 GELU를 사용하여 문맥 파악 능력을 높였습니다.
    8. 보조 목적 함수($L_1$) 결합: 미세 조정 중에도 사전 학습의 '언어 모델링' 감각을 잊지 않도록 설계를 최적화했습니다.
    9. 디코더 다중 적층: 인코더를 버린 대신 디코더를 **12층(Base 기준)**으로 깊게 쌓아 계층적 학습 능력을 극대화했습니다.
    10. 가중치 공유(Weight Tying): 입력 임베딩과 마지막 출력 리니어 층의 가중치를 공유하여 효율성을 높이고 단어 의미 연결을 강화했습니다.
    11. 입력 구조의 템플릿화: 모델 본체는 그대로 두고 입력 데이터의 배열(Template)만 바꾸어 모든 문제를 푸는 유연성을 확립했습니다.

    Pre-training: 비지도 학습을 통한 언어 모델링

    GPT의 첫 번째 핵심은 Pre-training(사전 학습)입니다. 이 단계에서는 별도의 정답 라벨 없이 비지도 학습(Unsupervised Learning)을 진행합니다.

     

    Embedding & BPE (Byte-pair Encoding)

    GPT는 텍스트의 Embedding으로 BPE(Byte-pair Encoding) 를 사용하고 있습니다.

    • BPE란? 모든 단어를 문자(바이트) 집합으로 취급하여, 자주 등장하는 문자 쌍을 합치는 Subword Tokenization 기법입니다.
    • 장점: 처음 보는 단어(Out-of-Vocabulary, OOV)라도 문자 조합으로 표현할 수 있어 미등록 단어 문제를 효과적으로 해결합니다. 여기에 위치 정보를 알려주는 Position Encoding이 더해집니다.

    Masked Multi-Head Attention

    GPT는 자기회귀적(Autoregressive)인 특성을 가집니다.

    • Next Token Prediction: 훈련 단계에서 모델에게 문장을 하나씩 보여주며 "그다음 단어가 뭘까?"를 예측하게 합니다.
    • Masking의 필요성: 트랜스포머는 입력을 병렬로 처리하기 때문에, 학습 시 현재 토큰 이후의 미래 토큰을 미리 보지 못하도록 가리는(Masking) 장치가 필수적입니다.
    • 특징: 이 구조 덕분에 GPT는 문장 생성에 매우 특화되어 있습니다. OpenAI가 악용을 우려해 소스코드를 즉시 공개하지 않았을 정도로 자연스러운 문장 생성력을 자랑합니다.

     

     

    Fine-tuning: Downstream Task를 위한 지도 학습

    사전 학습이 끝나면, 특정 목적(분류, 추론 등)에 맞게 Fine-tuning을 진행합니다. 여기서 GPT-1의 진가가 드러납니다. 모델 구조는 그대로 둔 채 입력값의 포맷만 바꿔서(Input Transformation) 모든 문제를 풀어버립니다.

     

    📂 태스크별 입력 변환 (Input Transformation)

    GPT는 특수 토큰([Start], [Delim], [Extract])을 사용하여 데이터를 재구성합니다.

    태스크 (Task) 입력 구조 (Input Format) 설명
    Classification Start + Text + Extract 텍스트의 감정이나 카테고리 분류
    Entailment Start + 전제 + Delim + 가설 + Extract 두 문장의 논리적 관계(함의) 파악
    Similarity Start + 문장A + Delim + 문장B + Extract 두 문장의 의미적 유사도 측정
    Multiple Choice Start + 지문 + Delim + 보기 + Extract 객관식 정답 찾기

    이렇게 입력된 데이터는 디코더를 거쳐 마지막 [Extract] 토큰 위치에서 최종 결과물을 뱉어냅니다.

     

    모델이 한 개인데 어떻게 classification, entailment 등등 다양한 문제를 풀 수 있을까요?

    input을 변형시켜서 입니다. GPT는 언어 모델이기 때문에 pretrain시에는 문장(단어의 시퀀스들)을 그대로 input을 줍니다.

    finetuning 시에도 똑같이 단어의 시퀀스들을 주면 되는데요 이때, input을 아주 조금만 변형시켜 주면 됩니다.

    예를 들어 classification task를 풀기 위해 finetuning을 하게 된다면 <start> <input text> <extract> <class> 이렇게 구성된 데이터셋을 학습시키면 되는 것이죠. GPT는 이 데이터셋에 맞추어서 weight들을 조정하게 될 것입니다.

    finetuning이 끝나고 테스트 시에는 <start> <input text> <extract>을 input으로 주면 해당 시퀀스에 뒤이어 나올 토큰 즉 <class>를 생성하게 되는 것이죠.

     

     

     

    두 개의 Objective: "본업을 잊지 않는 치밀함"

    GPT-1 파인튜닝의 가장 독특한 특징은 두 가지 문제(Task)를 동시에 푼다는 점입니다. 이를 Auxiliary Objective(보조 목적 함수)라고 합니다.

    • 주요 목적 (Main Task): 실제 풀어야 할 문제 (예: Text Classification)
    • 보조 목적 (Auxiliary Task): 사전 학습 때 했던 Text Prediction(LM)

    왜 이렇게 하나요?

    연구 결과, 파인튜닝 시 주요 Task만 학습시키는 것보다 언어 모델링(Text Prediction)을 보조적으로 함께 학습시킬 때 모델의 정확도와 일반화 성능이 훨씬 더 올라갔기 때문입니다. 즉, 시험 문제를 풀면서도 "다음 단어가 뭘까?"를 계속 고민하는 습관이 모델의 언어 지능을 유지해 주는 비결입니다.

     


    [심화] GPT-1의 핵심 알고리즘: $L_1, L_2, L_3$ 수식 정리

    GPT-1의 학습 과정은 크게 사전 학습(Unsupervised)과 미세 조정(Supervised)으로 나뉘며, 이때 사용되는 세 가지 손실 함수($L$)가 모델의 성능을 결정합니다.

    1. $L_1$ : 비지도 사전 학습 (Unsupervised Pre-training)

    가장 먼저 진행되는 단계로, 방대한 데이터($\mathcal{U}$)를 통해 언어의 기본 구조를 배웁니다.

    $$L_1(\mathcal{U}) = \sum_{i} \log P(u_i | u_{i-k}, \dots, u_{i-1}; \Theta)$$
    • 의미: 현재 단어 $u_i$를 맞히기 위해 이전의 $k$개 단어($u_{i-k}, \dots, u_{i-1}$)를 보고 확률($P$)을 최대화합니다.
    • $\Theta$: 딥러닝에서 모델의 파라메터를 의미한다.
    • 역할: 다음 토큰을 예측(Text Prediction)하며 모델의 기초 지능을 쌓는 '독학' 과정입니다.

    그런데 이 수식의 이름을  $L_1$(Loss 혹은 Likelihood)이라고 붙인 이유는 이 수식을 대하는 우리의 태도 때문입니다.

    1. 데이터($u$)는 이미 정해진 책(인터넷 글)에서 가져온 고정값입니다.
    2. 우리가 실제로 하는 일은 이 확률값을 높이기 위해 모델의 가중치($\Theta$)를 요리조리 바꾸는 것입니다.
    3. 즉, 수식의 표기는 확률($P$)이지만, 함수로서 다루는 방식은 우도($L$)이기 때문에 관례적으로 $L$이라는 기호를 쓰는 것입니다.

     

    • 세타($\Theta$)를 업데이트하기 때문에 우도($L$)입니다
      우리가 인터넷에서 긁어온 수조 개의 문장(데이터 $u$)은 이미 인쇄된 글자처럼 딱딱하게 굳어있는 고정값입니다. 우리가 바꿀 수 있는 건 오직 모델 내부의 수많은 노브, 즉 **파라미터($\Theta$)**뿐이죠.
      • 확률적 관점: "이 모델($\Theta$)이 '사과'라고 말할 확률($P$)이 얼마지?" (모델이 주인공)
      • 우도적 관점: "데이터에 '사과'라고 써있네! 모델의 $\Theta$를 어떻게 돌려야 이 '사과'가 나올 가능성(Likelihood)이 최대가 될까?" ($\Theta$가 주인공)

    💡 왜 $\log$$\sum$이 붙어 있나요?

    이 수식 전체($L_1$)는 로그 우도(Log-likelihood)의 합입니다.

    1. $\log$를 쓰는 이유: 확률값은 보통 0.1, 0.01처럼 아주 작은 소수입니다. 이 작은 값들을 계속 곱하면 컴퓨터가 계산하기 너무 힘들어져서(언더플로우), 로그를 취해 덧셈으로 바꿔 계산을 편하고 정확하게 만듭니다.
    2. $\sum$(시그마)를 쓰는 이유: 텍스트 데이터 전체에 들어있는 모든 단어에 대해 이 확률을 계산해서 총점을 내기 위해서입니다.

    2. $L_2$ : 지도 미세 조정 (Supervised Fine-tuning)

    사전 학습된 모델을 특정 문제($\mathcal{C}$)에 적용하는 단계입니다. 라벨링 된 데이터($x, y$)를 사용합니다.

    $$L_2(\mathcal{C}) = \sum_{(x,y)} \log P(y | x^1, \dots, x^m)$$
    • 의미: 입력된 문장 시퀀스($x^1, \dots, x^m$)가 주어졌을 때, 정답 라벨 $y$가 나올 확률을 최대화합니다.
    • 역할: 분류(Classification)나 함의(Entailment) 등 실전 시험 문제를 푸는 과정입니다.

    3. $L_3$ : 최종 최적화 목적 함수 (Combined Objective)

    GPT-1 논문의 핵심 아이디어로, 파인튜닝 시 $L_1$$L_2$를 결합하여 학습합니다.

    $$L_3(\mathcal{C}) = L_2(\mathcal{C}) + \lambda * L_1(\mathcal{C})$$
    • 의미: 실전 문제의 오차($L_2$)에 사전 학습 때의 본업인 언어 모델링 오차($L_1$)를 더해줍니다.
    • $\lambda$ (람다): 보조 과제($L_1$)를 얼마나 중요하게 반영할지 결정하는 가중치입니다.
    • 결과: 이렇게 두 목적을 합친 $L_3$ 를 최적화함으로써, 모델은 시험 문제를 풀면서도 언어에 대한 일반적인 감각을 잃지 않게 됩니다.

    "결국 $L_3$ 수식은 GPT-1이 '전공 시험($L_2$)'을 보면서도 '기초 국어 공부($L_1$)'를 병행한다는 것을 수학적으로 보여줍니다.

    논문 저자들은 이 보조적인 학습($L_1$)이 포함되었을 때 모델의 일반화 성능이 좋아지고 학습 속도가 빨라진다는 것을 증명했습니다. 이것이 바로 GPT-1이 다른 모델보다 똑똑하게 문맥을 짚어낼 수 있는 비결입니다."

     


    GPT의 진화와 그 이후

    • GPT-2: 모델 구조는 동일하지만 파라미터를 10배 키우고 더 정제된 대규모 데이터를 사용했습니다.
    • GPT-3: 1,750억 개의 파라미터로 압도적인 성능을 보여주며 코딩, 번역 등 범용 AI의 시대를 열었습니다.
    • GPT-Neo: EleutherAI에서 공개한 오픈소스 모델로, GPT-3에 대항하는 거대 언어 모델의 대중화를 이끌고 있습니다.

     

Designed by Tistory.