GPT 학습에 있어 pre-train, fine-tuning, in-context learning 을 설명

GPT는 "Generative Pre-trained Transformer"의 약자로, 사전 훈련과 세부 훈련 단계로 나누어진 언어 모델입니다. GPT 모델을 학습시키기 위해 세 가지 주요 단계인 사전 훈련(pre-training), 세부 훈련(fine-tuning), 그리고 문맥 학습(in-context learning)을 거칩니다.

  1. 사전 훈련(Pre-training): 사전 훈련은 대규모의 비정제 텍스트 데이터를 사용하여 모델을 초기화하는 단계입니다. GPT는 웹에서 큰 양의 텍스트 데이터를 수집하고, 문장 단위로 분리한 뒤, 이를 사용하여 모델을 사전 훈련합니다. 이렇게 사전 훈련된 모델은 다양한 언어적 패턴과 일반적인 지식을 학습합니다.
  2. 세부 훈련(Fine-tuning): 사전 훈련된 모델을 세부 훈련하는 단계입니다. 이 단계에서는 특정한 작업을 수행하기 위해 모델을 특정 데이터셋에 맞게 조정합니다. 예를 들어, 기계 번역, 질의응답, 감성 분석 등과 같은 과제에 GPT 모델을 사용하기 위해 해당 작업에 관련된 데이터를 사용하여 모델을 세부 훈련합니다. 세부 훈련은 미세한 가중치 조정을 통해 모델을 작업에 맞게 특화시키는 역할을 합니다.
  3. 문맥 학습(In-context Learning): 문맥 학습은 GPT 모델을 실시간으로 특정 사용자나 상황에 맞게 학습시키는 과정입니다. 이 과정에서는 사용자가 모델에 문맥 정보를 제공하고, 모델은 이를 이용하여 특정 문제에 대한 답변을 생성하거나 작업을 수행할 수 있도록 합니다. 문맥 학습은 새로운 데이터나 사용자 입력에 따라 모델을 계속해서 업데이트하여 성능을 개선하는 데 도움을 줍니다.

이러한 세 단계를 통해 GPT 모델은 사전 훈련된 일반적인 언어 이해 능력을 보유하며, 세부 훈련 및 문맥 학습을 통해 특정 작업에 대해 특화된 능력을 발휘할 수 있게 됩니다.

 

 

gpt 에 대해 같이 공부하며 일을 진행하고 있는 팀원들과 회의를 하면서, gpt 관련 용어에 대해 서로 조금씩 다르게 생각하고 있다는 점을 알게 되었습니다. 그도 그럴것이, 저를 포함한 저희 팀 일부는 이전에 vision model 을 주로 하고 있었고, 일부는 encoder 기반 language model 을 하고 있었는데, 각 modality 별로 같은 단어지만 전혀 다른 의미를 가지는 경우가 꽤 있다는걸 알게 되었습니다. 게다 당장에 모든 단어들이 learning, training, tuning 같은 이름을 쓰고 있어 뭐가 배우는거고 안배우는지 햇갈리는것 같습니다.

이에 이번 포스트에서는 현재 시점에서 학습에 사용되는 용어에 대해 조금 정리하고 넘어가려 합니다 (저희 팀에서 동의한 수준에서요).

glossary

gpt 학습과 관련된 용어를 정리함에 있어 저는 크게 3가지 학습 방법을 기준으로 나누어보았습니다. 모델에 대한 사전학습에 해당하는 pre-train, 사전학습된 모델을 시작으로 의도대로 훈련하는 fine-tuning, 그리고 prompt 에서 상황을 인식키는 in-context learning 세가지 기준으로 설명해보겠습니다.

*위 그림 및 단어 구분에 대한 것은 제가 이해한 내용을 바탕으로 임의로 나눈것으로 그 시대?와 관점?에 따라 달라질 수 있습니다.

pre-training

GPT 에서 pre-train 은 최초의 initialized 된 모델에 text 데이터로부터 입력된 토큰의 다음 토큰을 예측하는 방식으로 학습되는 unsupervised learning 을 하는 행위를 주로 이야기 합니다. 이때 다음토큰을 예측하는 방식이기에 unsupervised 보다는 self-supervised learning 이라고 이야기하는게 좀더 정확하겠습니다. pre-train에서는 전체 모델의 weight 에 대해 major update 를 수행합니다.

이러한 self-supervised learning 은 기본적으로 GPT 와 같은 생성모델에 parametric memory 를 심는 과정이 되겠습니다. 일부 방법론에 대해서는 pre-train level 에서LoRA 같은 adapter 를 함꼐 쓰는 방식도 있습니다 (https://velog.io/@dongyoungkim/GPT-fine-tuning-4.-fine-tuning).

fine-tuning

fine-tuning 은 좀더 복잡해집니다. GPT-1, GPT-2, GPT-3 까지 pre-train 을 통해 그 성능을 확보했다면 GPT-3 에서 InstructGPT, 그리고 chatGPT 까지는 fine-tuning 기법을 통해 그 성능을 확보합니다. 참고로 GPT-3(2020) 에서 chatGPT(2022) 까지 2년이란 시간이 걸렸고, 주요한 변화는 fine-tuning 수행이라고 보고 있습니다.

instruction fine-tuning 은 pre-train 된 gpt model에 prompt 와 completion 쌍의 데이터로 supervised leaning 을 수행합니다. 이를통해 gpt 가 좀더 사람이 원하는 대답의 형태로 말할수 있도록 전체 weight 를 업데이트 합니다. 좀 더 잘 대답하게 하기 위해 completion 에 step-by-step 의 reasoning 을 더한 chain of thought (CoT) 등의 데이터들도 소개되면서 gpt 에게 기대할수 있는 대답의 성능이 사람의 입장에서 확연히 올라가게 됩니다. 이 방법은 domain-specific 하게 zero-shot leaning, 즉 prompt 에 context 를 주지 않더라도 parametric memory 에 의거한 domain response 를 만들수 있는 방법이기도 합니다.

instruction fine-tuning 이후에 gpt 가 말하는 내용에 있어 그럴듯한 거짓말을 하는 등의 hallucination 문제가 발생하였고, 이를 보정해주기위해 reinforcement learning with human feedback (RLHF) 가 등장합니다. 이는 대답의 질에 대해 평가할수 있는 강화학습 에이전트를 사람이 가르치고, 이를 기반으로 gpt 가 올바른 대답을 할 수 있도록 유도한 학습으로, 전체 weight 에 대한 업데이트가 이루어졌습니다. openai 의 여러 블로그 글을 보면 이 RLHF 가 chatGPT 를 만드는데 큰 역활을 하였다고 설명하고 있습니다 (https://openai.com/research/instruction-following, https://openai.com/blog/chatgpt).

Adaptor (p-tuning, LoRA) 는 이전 포스트에도 소개드렸습니다 (https://velog.io/@dongyoungkim/GPT-fine-tuning-4.-fine-tuning). 다만 이러한 방법론들이 gpt 의 fine-tuning 을 위해 개발된것은 아니고, 초거대 모델들의 활용을 위해 adoption 된 방법론이라고 이해하는게 맞겠습니다. 두 방법 모두 gpt 에 대한 base model update 는 하지 않고, 일부 추가적인 레이어에 대한 학습만을 진행하므로 앞서 소개한 instruction fine-tuning  RLHF 만큼의 드라마틱한 학습효과를 기대하긴 어렵습니다만, 여전히 적은 파라메터의 사용으로 zero-shot 을 유도할수 있는 방법론으로 openai, azure, naver 와 같은 초거대모델 플랫폼을 운용하는 회사 입장에서는 매력적인 방법입니다.

in-context learning

in-context learning 은 명시적 learning (model update) 이 존재 하지 않습니다. 다만 prompt라는 행위를 통한 learning 이 발생할수 있고 이와 관련해서는 제 포스트에서 두차례에 걸처 설명하였고 참고 부탁드립니다.

zero-shot learning & few-shot learning

pre-train, fine-tuning, in-context learning 은 그 순서대로 각각 이전의 학습이 잘 되었을때 다음의 것도 잘 될것이라는 가정을 가지고 있습니다. 이를 역으로 말해보면 앞의 학습들이 잘 안되었을때 좋은 성능을 내기위해서는 뒤의 학습이 더 열심히 해야하는 구조이겠습니다. 특히 in-context learning 은 모델의 업데이트가 없고, 사용자의 prompt 에 따라 모델의 성능이 발현되다보니 결국 좋은 모델은 prompt 가 짧아지고, 나쁜 모델은 prompt 가 길어저야 하는 상황이 발생합니다.

이는 zero-shot learning  few-shot learning 의 차이를 설명하기도 합니다. 좋은모델, i.e. chatGPT, 의 경우 내가 하고자 하는 바를 이야기해면 웬만하면 다 알아듣습니다. 번역해줘, 요약해줘 와 같은 기본적인(?) nlp task 에서부터, user 에게 input 을 받고 이를 sqlite 에 저장하는 python streamlit 프로그램을 만들어줘 와 같은 복잡한 요구도 설명없이 잘 합니다. 즉 zero-shot learning 이 됩니다.

pre-train, fine-tuning 이 더 필요한 모델일수록 in-context learning 의 효과가 더 필요합니다. 즉 few-shot learning 이 되어야 합니다. 물론 few-shot learning 이 되려면 어느수준의 pre-train, fine-tuning 은 필요합니다 (https://velog.io/@dongyoungkim/GPT-fine-tuning-5.-in-context-learning).

parametric memory & non-parametric memory

parametric memory  non-parametric memory 또한 이전에 포스트에서 정리해두었습니다 (https://velog.io/@dongyoungkim/OpenAI-GPT-fine-tuning-3.-memory)

parametric memory 는 pre-train 과 fine-tuning 의 weight update 과정에서 학습되는 내용을 이야기하며, inference 를 통해 그 기억을 회상합니다.

non-parametric memory 는 in-context learning 의 산물로, gpt 가 parametric memory 를 이용해 prompt 에 적힌 내용을 해석해서 참조함으로 발생할 수 있는 non-parametric 적 reference 의 발현이라 하겠습니다. 즉 zero-shot learning 의 상황에서는 parametric memory 의 의존성이 크고, in-context learning, 즉 few-shot learning 에서는 parametric memory 와 non-parametric memory 둘다 사용될 수 있겠습니다.

단어에 대해 정리하다보니, gpt 에 대해 공부해야 할 것들이 훨씬 늘어난 느낌입니다. 수박 겉핥기 수준이라도 gpt 에 대해 이해는 하고 사용해야 할것 같아 계속 정리해볼 생각입니다.

 

 

 

댓글

Designed by JB FACTORY