[NLP] GPT 기초 정리

2024. 6. 6. 02:40Developers 공간 [Basic]/Vision & Audio

728x90
반응형

GPT(Generative pre-trained transformers)OpenAI에서 개발된 LLM(Large Language Model)입니다.

 

정확하게는 PLM(Pre-trained LM, PTM)이라고 할 수 있는데, 최근 잘알려진 모델로는 GPT-4, LLaMA2, PaLM2 등이 있습니다.

[다양한 PLM]

 

이 중 GPT-Based의 모델들의 특징은 Decoder 기반으로 설계되었다는 것이고, 이들은 생성 task에 매우 강해 다른 NLP 데이터를 만드는 데에도 쓰이기도 합니다.  

 

또한 이들이 사용하는 데이터는 주로 인터넷에서 크롤링 되었기 때문에, 결과물에 적절하지 않은 언어도 포함되기도 합니다.

이들은 아래와 같은 NLP의 다양한 분야에서 뛰어난 성능을 보여줍니다.

  • 텍스트 생성(Text Generation)
  • 질의응답(Question Answering)
  • 요약(Summarization)
  • 번역(Machine Translation)
  • 자연어 추론(Textual Entailment, Natural Language Inference) : 주어진 문장을 기반으로 다른 문장의 사실을 보장하는지 혹은 함의 하는지를 판단하는 것
  • Commonsense Reasoning : 일상적 상황에서의 상식적인 것을 추론하는 능력

이번 글에서는 간단하게 GPTChatGPT 관련된 정보들을 정리해보고자 합니다.

 

전반적으로 모델자체의 아키텍처 상의 개선이나 특별한 기술보다는, 데이터의 확장속도 개선에 초점이 맞춰져 있습니다.

<구성>
1. GPT Models 
    a. GPT1
    b. GPT2
    c. GPT3
    d. GPT3.5
    e. GPT4
    f. GPT4o(GPT-4omni)
2. Improvements
    a. In-Context Learning
    b. RLHF
3. Services

글효과 분류1 : 코드

글효과 분류2 : 폴더/파일

글효과 분류3 : 용어설명

글효과 분류4 : 글 내 참조

글효과 분류5 : 글 내 참조2

글효과 분류6 : 글 내 참조3


1. GPT Models

전체적으로 GPT기반 모델들을 한눈에 볼수 있는 정보만 정리해보면 아래 표와 같습니다. 아래 "?"는 2024년 6월 6일 기준 공개되지 않은 데이터를 의미합니다.

  a. GPT1 b. GPT2 c. GPT3 d. GPT3.5 e. GPT4 f. GPT4o
출시 2018.06 2019.08 2020.05 2022.03 2023.03 2024.05
파라미터 개수** 117M 1.5B 175B 175B 1.7T ?
데이터 양 4.5GB 40GB 570GB ? ? ?
데이터 종류 BookCorpus WebText CommonCrawl
WebText2
BooksCorpora
Wikipedia
? ? ?
입력 Text Text, Image Text, Image, Audio
출력 Text Text Text, Image Audio
입출력 특징 X Voice Mode가능
(Separate Model)
Single Model

** Thousand(0x3) < Million(0x6) < Billion(0x9) < Trillion(0x12) < Quadrillion(0x15)

 

그럼 이제 각각의 모델의 특징에 대해 순서대로 살펴보겠습니다.


a. GPT1

 

최초의 GPT는 논문과 함께 등장했습니다. 

 

기존의 supervised 학습의 경우 task를 위한 dataset이 필요하며 Labeling이 필요합니다. 하지만 이에 반대로, unsupervised 학습의 경우 성능을 대량 데이터로 학습할 수 있는 장점이 있습니다.

 

따라서 GPT는 un-labeled text에 대해 아래와 같은 pre-training을 진행합니다.

 

이 때, word-level의 정보로 학습을 한다면, 모델이 이해하는 단위가 단어이기 때문에 target task를 위해 어떤 objective를 가지고 학습할지가 애매한 단점이 있습니다.

 

따라서 더 higher한 level의 의미론적인 representation을 학습해 pre-trained LM을 만듭니다. 즉, 언어에 대한 이해를 높이는 LM(Language Model)이 아닌, 다양한 task를 위한 NLP(Natural Language Processing)가 가능한 LM을 만드는 것이 목표입니다.

 

먼저 구조는 아래와 같은 Transformer Decoder layer를 12개 활용해 만들어냅니다. 이 때 내부에는 multi-headed self-attention을 활용해 input context token을 처리합니다.

[Transformer 구조의 Decoder]

위 Transfomer block전 후의 과정을 아래와 같습니다.

** $W_e$ : token embedding matrix

** $W_p$ : position embedding matrix

** $U$ : "앞선 context window=k 내에" 포함된 k개의 token으로 만든 context vector (총 n개의 token으로 이루어진 unsupervised corpus 중)

** i : i번째 토큰

$$\begin{matrix}
h_0&=&UW_e+W_p&\\ 
h_l&=&TransformerBlock(h_{l-1})&\forall l\ \in [1,L])\\ 
P(u)&=&softmax(h_LW^T_e)
\end{matrix}$$

 

학습은 아래와 같이 두 단계로 진행하며, unsupervised pre-trainingsupervised fine-tuning을 합쳐 진행하기 때문에 semi-supervised 접근이라고 볼 수 있습니다.

  1. 큰 text corpus에 대해 unsupervised pre-training을 통해 대략적인 언어 이해도를 높입니다.
  2. target task에 맞게 supervised finetuning을 진행합니다.
    이때, 아래 그림과 같이 structured input 포맷을 맞춰 기존 LM의 지식을 최대한 활용할 수 있도록 했습니다.
    ** 또한 이때 기존의 target task objective 외에 보조적인 LM loss를 활용해 semi-supervised 가능성을 줍니다.

[structured traversal-styl의 input transformation]

 

 

결과적으로 GPT1 pre-trained 모델에 있어서 LSTM보다 Transformer가 zero-shot에서 더 좋은 성능을 보이는 것을 보임으로써, 앞으로 나올 GPT의 기본적인 구조를 구축했습니다.

 

또한 layer 개수가 많을 수록(모델의 크기가 클수록) 그리고 데이터가 많을 수록 pre-trained Model의 성능이 좋아진다는 것을 보였습니다.


b. GPT2

앞서와 같은 task-specific fine-tuning의 경우, 데이터를 준비하기 어렵고 generalization이 떨어진다는 단점이 있습니다.

 

따라서 GPT2는 Zero-shot Learning을 위해 데이터와 모델의 크기를 늘리고, task에 따른 fine-tuning 없이 SOTA 성능을 달성했습니다.

 

먼저, 구조는 GPT1과 같지만 normalization layer를 수정했으며, 데이터는 Reddit Web page에서 curation & filtering 을 통해 스크랩해 얻었습니다.

 

다음으로 학습은 ICL(In-Context Learning)컨셉으로 학습을 진행합니다.

 

ICL학습(네트워크 학습이 아님)은 meta-learning의 일종으로, 모델의 넓은 패턴 인지 능력을 학습한 다음에 inference time에 빠르게 원하는 task에 adapt시키는 방법을 의미합니다.

** meta learning : 배우는 방법을 배우는 것으로, 다양한 스킬과 패턴인식 능력을 배워 inference 단계에서 원하는 task에 빠르게 적응하도록 학습하는 방법

 

즉, 아래 그림의 inner loop와 같이 sequence마다 어떤 task를 명시하는지 반복해 해당 task를 명시해주는 방법입니다.

[In-Context Learning을 학습하는 과정]

 

이미 그림에서 보셨겠지만 task conditioning은 sequence내에 input task 관련된 context를 넣어 task를 이해할 수 있도록 했습니다.

  • ex) (translate to french, english text, french text) : traslation 학습시

  • ex) (answer the question, document, question, answer) : reading comprehension 학습시

추가적으로 Input Representation으로는 GPT1과 같이 BPE를 사용했지만 기존의 단점을 보완하며 활용했습니다. 

** BPE(Byte Pair Encoding) : word와 character의 중간 표현으로, 가장 많이 등장한 글자의 쌍을 하나의 글자로 병합하는 방식

 

결과적으로 GPT2는 task에 대한 fine-tuning 없이 학습을 진행하기 시작한 것이 핵심입니다.


c. GPT3

앞서 제안했던 pre-trained 모델은 아직 fine-tuning에 비해 inferior한 결과였습니다.

 

따라서 GPT3는 In-context learning을 위해 스케일을 늘려 아주 큰 모델을 활용했습니다. 결과적으로 overfitting을 줄였으며, 생성에서 두각을 보이게 되었습니다.

 

GPT2와 구조는 같고 scale을 늘린 것이 특징인 만큼 논문에서는 다양한 분석을 위주로 해놓았습니다.

 

다양한 task에 대해 결과를 내놓았는데, 이때 task당 아래와 같은 다양한 condition에서 각각 평가를 진행했습니다.

  • few-shot(FS) :  prompt에 예시를 몇개 주고, 결과 값 얻는 방법 (in-context learning)
  • one-shot(1S) : prompt에 예시를 한개 주고, 결과 값 얻는 방법
  • zero-shot(0S) : task 만 주어지고, 결과 값 얻는 방법

[각각의 tas에 대해 진행하는 다양한 방법]


d. GPT3.5

 

기존 GPT3 모델과 뒤에서 나올 InstructGPT, GPT3.5, ChatGPT들은 모두 GPT-3모델 군이라고 부르기도 하는데, 등장 순서나 과정에 대해 헷갈리시는 분이 많습니다.

 

GPT3 이후 나온 모델의 순서나 의의를 정리한 그림은 아래와 같습니다.

[https://matt-rickard.com/gpt-lineage]

  • 1-1. Code-davinci-001, Code-cushman-001 (12B) : programming을 위한 모델
  • 1-2. Instruct-davinci-beta(175B), Text-davinci-001(InstructGPT) : instruction-tuning
  • 2. Code-davinchi-002 : (programming + instruction tuning)→ beta testing에 활용되었습니다.
  • 3. Text-davinchi-003(OpenAI’22.11) : RLHFChatGPT

즉, GPT3.5ChatGPT의 모델로 사용되었으며, 위에서 가장 중요한 기술은 instruction-tuningRLHF일 것입니다.

 

GPT3.5에서의 특징 세가지를 위 두 기술을 포함해 살펴보겠습니다.

 


 

<1. Instruction Tuning>

** [FLAN] Finetuned Language Models Are Zero-Shot Learners (arxiv’21) - Google

 

"지시문-답변" 형태의 instruction dataset을 구성한 뒤 fine-tuning하는 방법입니다.

  • ex) (기존) 지시를 간접적으로 예시 등을 통해 모델에게 전달합니다.
  • ex) (변경) “지구에 대한 짧은 이야기를 써 봐”와 같이 직접적인 instruction을 제공합니다.

[기존 GPT-3와 IntructGPT의 답변 비교]

 

위와 같은 방법으로 학습을 한다면 다양한 task를 위한 demonstrations를 얻는 것이 어려우며, 인간의 “선호”와 무관한 결과를 내는 문제가 있습니다. 이를 위해 아래의 RLHF 학습 방법이 등장하게 되었습니다.


 

<2. RLHF(Reinforcement Learning from Human Feedback)>

** Training language models to follow instructions with human feedback (NIPS’22)

 

RLHF는 결국에 학습에 Reinforcement Learning을 사용하겠다는 것으로, 학습단계는 아래와 같이 3단계로 나뉩니다.

  • Step1. instruction dataset을 통해 fine-tuning → SFT 모델
  • Step2. comparison dataset을 통해 Reward 모델
    ** Comparison dataset (Preference dataset) : instruction dataset의 선호도 순위로 구성된 것
  • Step3. Reward 모델을 사용해 SFT모델을 강화학습하며, 이 때 사용하는 알고리즘을 PPO(Proximal policy optimization algorithm)라고 부릅니다.

[RLHF의 과정]

 


 

<3. Multi-turn >

 

Multi-turn은 이전 대화를 기억해 전체 context를 고려해 응답하는 방법입니다.

 

또한, 이는 미리 사전에 여러번의 예시와 role을 설정해서 특정한 용도에서 사용할 수 있도록 프롬프트를 조작하는 방법으로도 사용할 수 있습니다.

 

prompt를 주는 과정을 아래 코드를 참조하시면 알 수 있습니다.

def prompt(context, question):
    return openai.chat.completions.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "assistant", "content": "안녕하세요 저는 도서관리 시스템입니다. 책 내용을 알려주시면 해당 책에서 답변을 느리겠습니다."},
            {'role': 'user', 'content': f'내가 책 내용을 알려줄게 책 내용은 이렇게 이루어져 있어 Context: {context}'},
            {"role": "assistant", "content": "책 내용을 모두 확인하였습니다."},
            {"role": "user", "content": question}
        ],
    )

e. GPT4

위에서 전체적으로 정리한 것을 보면 GPT4에서는 Image가 새로운 입력으로 들어가며 multi-modal LLM(LMM)이 등장했습니다.

 

또한 Sequence Length가 3000개에서 25000가 되어 더 긴 prompt를 제공할 수 있습니다.

 

GPT4는 ChatGPT에 반영되어(23.02), premium 버전의 ChatGPT인 ChatGPT+가 등장했습니다.


하지만 역시나 여전히 Hallucination 문제가 있다고 합니다.
** Hallucination : 오류가 있는 데이터를 학습해 틀린 답변을 맞는 것처럼 제안하는 현상


f. GPT4o(GPT-4omni)

GPT4o에서는 입출력에 오디오와 이미지가 추가 되며, 새로운 기능을 할 수 있게 되었습으며, 영어 이외의 성능이 대폭 상승했습니다.

 

기존에 Voice Mode라고 해서, 오디오를 입력으로 줄 수는 있었으나 이 때는 분리된 별도의 모델을 통해 진행되었던 것이었고, GPT4o에서는 end-to-end의 single 모델을 통해 입출력이 가능해졌습니다.

 

따라서 2.8초(GPT-3.5), 5.4초(GPT-4)였던 응답시간이 0.32초로 줄어들게 되었습니다.


2. Improvements

위와 같이 GPT 모델의 역사에 대해 살펴보았는데, 중간에 나온 각각의 기술들을 개선하기 위해서 다양한 기법들이 또 등장했습니다.

 

이번 챕터에서는 ICL(In-Context Learning)RLHF를 개선하기 위해 등장한 기술에 대해 간단히 살펴보겠습니다.


a. In-Context Learning

 

In-context Learning에는 사람이 작성한 prompt와 context window를 통해 task를 학습해야하므로, 아래와 같은 다양한 문제가 존재했습니다.

  • context window가 고정된 길이를 가지므로, prompt가 긴 데이터셋을 학습할 수 없습니다.→ Prompt Tuning의 등장
  • prompt를 어떻게 작성했느냐에 따라 성능이 많이 달라집니다.→ Prompt Tuning의 등장
  • 여러 step을 거쳐야 풀수있는 문제들은 prompt만으로 배우기 어렵습니다. → CoT의 등장

따라서 위와 같은 ICL의 문제점을 해결하기 위한 아래와 같은 Prompt TuningCoT Prompting을 소개하겠습니다.

 


<대안1. Prompt Tuning>

 

Prompt와 관련된 부분을 수정해 더 정확하고, 관련성 높은 답변을 유도하는 과정입니다.

** Prompt Tuning은 구현을 위해 아래 등장할 PEFT(Parameter Efficient Fine Tuning)를 활용하기도 합니다.

 

a. Prefix-Tuning

Prefix-Tuning: Optimizing Continuous Prompts for Generation (arxiv’21)

 

사람이 직접 명령어를 주는 방법을 사용하면 사람에 따라 결과가다르게 나올 수 있다는 단점이 있습니다.

 

따라서 Prefix-tuning에서는 기존 LLM의 파라미터를 freeze하고, prefix라는 continuous task-specific vector를 앞에 붙여 학습합니다.

 

이 후에 context window상에서 뒤에 나올 토큰들은, 이 prefix를 참조하면 적절히 context를 파악할 수 있다고 합니다.

[Prefix Tuning 방법]

 

b. P-Tuning

GPT Understands, Too (OpenAI’23)

 

기존에 사람이 주는 prompt를 보완하기 위해 automatic prompting에 대한 연구가 이루어졌다고 합니다.

** automatic prompting : 자연어 토큰으로 이루어진 discrete prompt를 task에 맞게 찾아주는 역할

** discrete prompt(hard prompt) : 사람이 이해 가능한 자연어로 만들어진 별개의 prompt입니다. 이 prompt는 이와 반대로 학습가능한 벡터는 soft prompt라고 불립니다.

 

이에 P-tuning은 더 나아가 discrete prompt를 넣어준 경우, 이 discrete prompt를 학습가능한 continuous prompt embedding과 concat해 LLM의 input으로 활용하는 방법을 제안합니다.

 

이 continuous prompt embedding는 LSTM이나 MLP로 구성된 Prompt Encoder를 활용해 만들어지며, 이를 통해 작은 문제점들을 해결할 수 있다고 합니다.

[P-Tuning 방법]

c. etc
WARP, Soft words, Few-shot sequence learning with Transformers(arxiv’20), Adapters

 


 

<대안2. Chain-of-Thought(CoT) Prompting>

Chain-of-Thought Prompting Elicits Reasoning in Large Language Models (NIPS’22)

Scaling Instruction-Finetuned Language Models (JMLR’24)

 

GPT의 등장으로 Prompt를 잘 구성하기 위한 다양한 Prompt EngineeringPEFT 기법들이 등장했습니다.

** PEFT(Parameter Efficient Fine Tuning) : 기존 LLM은 freeze하고 추가적인 파라미터를 학습해 task에 맞게 fine tuning

[다양한 Prompt Engineering 기법]

 

잘 알려진 RAG와 이번에 설명할 CoTPrompt Engineering의 대표적인 방법입니다.

** RAG(Retrieval Augmented Generation) : "외부지식을 가지고 있는 검색"을 활용해, 질문에 대해 embedding을 얻어내고, 이 embedding을 답변에 활용하는 방식입니다.

[다양한 RAG방법]

더보기

---------------------------------------------------------

 <RAG의 과정을 설명하는 좋은 그림>

 

아래 글에 RAG의 과정을 설명하는 좋은 그림이 있어 인용했습니다.

 

즉, 아래 글에서는 ‘내 질문에 대한 적절한 정보를 외부 데이터로부터 검색하여 대답에 활용하는 것'이 핵심이라고 이야기해주고 있습니다.

[https://ffighting.net/deep-learning-paper-review/language-model/prompt-engineering-peft-rag/]

---------------------------------------------------------

 

앞서 언급한 바와 기존의 ICL은 산수추론 & 상식추론 & 기호추론과 같이 여러 step을 거쳐야 풀수있는 문제들은 단순한 prompt만으로 배우기 어렵습니다.

 

따라서 해결방식을 step-by-step reasoning으로 대답하도록 하는 것이 CoT입니다.

 

즉, 아래 왼쪽과 같이 단순히 정답을 몇개 외우게 해서 결과를 얻을 수 없는 경우, 아래 오른쪽과 같이 그 과정 자체를 few shot sample로 제공하는 것입니다. (학습이 아닙니다)

[기존 Prompting과 CoT Prompting]

 

위와 같은 방법을 활용하면 Zero-shot에서는 reasoning의 과정을 제공할 방법이 없습니다.

 

이런 경우를 해결하기 위해 "Reasoning Extraction" 과정과 "Answer Extraction" 과정 2-step으로 진행해 본인의 결과를 활용하는 Zero-shot CoT 방법도 있습니다.
** Large Language Models are Zero-Shot Reasoners (NIPS’22)


b. RLHF

 

RLHF의 경우는 위에서 살펴본 바와 같이 구현이 복잡하고 학습이 불안정하며 학습 단계가 많다는 문제가 있습니다. 

 

<a. Rejection Sampling (Best of N)>

STATISTICAL REJECTION SAMPLING IMPROVES PREFERENCE OPTIMIZATION (arxiv’23)

 

생성한 답변에 대해 Reward모델이 점수를 계산하고, 답변 후보중 가장 높은 점수의 답변으로 supervised fine-tuning을 진행하는 방법입니다.

 

간단하지만 안정적인 학습을 위해 유용하게 활용된다고 합니다.

 

<b. RRHF>

RRHF: Rank Responses to Align Language Models with Human Feedback without tears (arxiv’23)

 

k개의 답변후보 샘플을 성능이 좋은 LLM으로 생성해낸 뒤, 이들을 학습할 모델에 넣어 문장이 나올 확률을 얻어냅니다.

 

그 다음 RLHF의 과정에서 Reward모델로 score를 측정한 뒤, score가 높은 것들은 이 확률이 높도록 하고, score가 낮은 것들을 이 확률이 낮아지도록 학습합니다.

 

<c. DPO Tuning>

Direct Preference Optimization: Your Language Model is Secretly a Reward Model (NIPS’24)

 

Reward모델을 따로 학습해 활용하지 않고, Reward모델의 데이터셋을 직접 사용해 positive 답변에 대한 확률이 높고 negative 답변에 대한 확률은 낮아지도록 학습합니다.

 

Reward모델이 따로 없기 때문에 학습 단계가 줄어든다는 장점이 있습니다.

 

하지만 이와 같이 preference alignment으로 학습시 SFT를 학습 할 때, instruction tuning memory의 두 배가 필요하기는 합니다.

[전체적인 과정에 대한 예시]

 


3. Services

마지막으로 위와 같이 만들어진 모델들을 사용한 서비스에 대해 간단히 아는 것들을 간단히 정리해보았습니다.

 

아래 설명된 것 외에도, Character.ai, Perplexity AI, Poe, DialoGPT, YouChat 등의 다양한 플랫폼이 있습니다.

Company Service Model
이름 오픈소스 유무
OpenAI ChatGPT GPT X
Anthropic Claude Claude X
Mistral AI Mistral Chat Mistral, Mixtral O
Meta LLaMA LLaMA O
Google Bard (LLM) PALM X
Gemini (LMM) Gemini X
Microsoft Bing Chat
Copiolot
GPT X
xAI(Twitter) Grok AI Grok O
Naver Clova X Hyper Clova X X

 

보통 ChatGPT를 제일 많이 알고 있기 때문에 Chatbot이 가장 많이 알려져 있지만, DeepL과 같은 번역 등의 task를 하는 다양한 AI 서비스가 등장하고 있습니다.

 

또한 ChatGPT를 특정 목적에 맞게 커스터마이징한 챗봇인 GPTs와 같이 customized Chatbot도 등장하고 있습니다.


https://velog.io/@mmodestaa/GPT-3-등장과-그-후-Prompting-and-Promt-Tuning-Prefix-Tuning-P-Tuning

https://tech.scatterlab.co.kr/luda-rlhf/

RAG : https://www.purestorage.com/kr/knowledge/what-is-retrieval-augmented-generation.html

https://wikidocs.net/217883

https://ffighting.net/deep-learning-paper-review/language-model/prompt-engineering-peft-rag/

 

 

728x90
반응형