GPT fine-tuning - 4. training and fine-tuning

Dongyoung Kim·2023년 3월 1일
3

GPT

목록 보기
5/12
post-thumbnail

🐰 Dongyoung:
gpt 학습에 대해 알려줘

🦄 ChatGPT:
GPT (Generative Pre-trained Transformer)은 대규모 텍스트 데이터에서 사전 학습(pre-training)된 언어 모델입니다. GPT의 학습 과정은 크게 사전 학습(pre-training)과 미세 조정(fine-tuning)으로 나눌 수 있습니다.

사전 학습(pre-training) 단계에서는 큰 양의 비정형 텍스트 데이터(예: 뉴스 기사, 소설 등)를 사용하여 모델을 학습합니다. 이 학습 과정에서 모델은 다음 단어를 예측하는 것을 목표로 하며, 입력 시퀀스에 대한 이해와 다음 단어 예측 능력을 향상시키는 데 초점을 둡니다.

GPT의 학습 과정은 크게 세 단계로 나눌 수 있습니다. 첫 번째로, 입력 텍스트 데이터는 토큰화(tokenization) 과정을 거쳐 단어나 기호 등의 작은 단위로 쪼개집니다. 이렇게 토큰화된 데이터는 임베딩(embedding) 과정을 거쳐 고차원 벡터로 변환됩니다. 이 과정에서 각 토큰은 벡터 공간 상에서의 위치를 지정하며, 문맥과 관련된 정보를 담습니다.

두 번째로, 입력 데이터와 해당 토큰들의 임베딩은 트랜스포머(transformer)라는 아키텍처를 사용하여 처리됩니다. 트랜스포머는 입력 시퀀스와 출력 시퀀스 간의 양방향 상호작용(bidirectional interaction)을 가능하게 하는 어텐션(attention) 메커니즘을 사용합니다. 이를 통해 모델은 문맥과 관련된 토큰을 더 잘 파악할 수 있게 됩니다.

마지막으로, 트랜스포머에서 생성된 출력 시퀀스는 다시 디코딩(decoding) 과정을 거쳐 다음 단어를 예측하는 데 사용됩니다. 이 과정에서 모델은 현재까지의 입력 시퀀스와 관련된 정보를 바탕으로 다음 단어를 예측하며, 이를 반복하면서 문장 전체를 생성합니다.

미세 조정(fine-tuning) 단계에서는, 사전 학습된 모델을 특정 태스크에 맞게 미세 조정합니다. 예를 들어, 특정 문제 해결을 위한 분류 모델로 사용할 수 있습니다. 이러한 미세 조정 단계에서는 적은한 양의 레이블된 데이터(예: 분류 문제에서의 레이블링된 데이터)를 사용하여 모델을 조정합니다. 이 단계에서는 모델의 파라미터를 미세하게 조정하여 특정 태스크에 대한 최적의 결과를 얻을 수 있습니다.

GPT의 학습은 대규모 데이터셋에서 수행되기 때문에, 매우 긴 학습 시간이 소요됩니다. 예를 들어, GPT-3 모델은 약 45 테라바이트의 텍스트 데이터를 사용하여 학습되었으며, 이는 수백 대의 그래픽 처리 장치(GPU)에서 수 개월 이상의 시간이 소요되었습니다.

하지만 이러한 대규모 모델은 매우 정확하고 강력한 자연어 이해 능력을 갖추게 되며, 다양한 태스크에서 우수한 성능을 발휘할 수 있습니다.

gpt 의 학습과 미세조정에 대해 이해하려면, 우선 gpt 에 대해 이해해볼 필요가 있겠습니다.

GPT는 trainsformers 의 decoder 를 사용한 autoregressive model 로서, 그 학습은 unsupervised learning, 즉 비지도 학습을 통해 수행됩니다. Transformer decoder 는 입력된 정보로 부터 sequence 를 생성(generative)하는 모델이고, 여기서 autoregressive 는 sequence 를 생성함에 있어 이전의 정보를 모두 검토하는 방법론입니다. 비지도학습은 주어진 언어 데이터 (sequence) 에 대해 다음 sequence 등을 예측하는 방식으로 진행되며 이는 별도의 레이블 없이 언어를 모델링 할 수 있는 방법중 히나 입니다. 그리고 이 과정을 우린 "pretraining" 이라고 부르며, 이렇게 pretrained 된 transformer decoder 를 Generative Pre-trained Transformer (GPT) 라고 부릅니다.

history of GPT models

GPT 는 GPT-1, GPT-2, GPT-3 로 발전해왔으며, GPT-3 의 fine-tuned 형태인 GPT-3.5 및 ChatGPT 의 형태로 공개되었습니다.
GPT 모델들은 그 구조에 있어 약간씩은 다르나 Transformer decoder 의 구조에서의 크게 벗어나지 않으며, 모델의 규모, 학습데이터의 규모가 크게 늘어났습니다.

구분GPT-1GPT-2GPT-3ChatGPTGPT-3.5GPT-4 (미정)
모델 크기11M1.5B175B(GPT-3.5?)(6.7B?)(1T? )
모델 구조Transformer decoder 12 layersTransformer decoder 49 layersTransformer decoderTransformer decoderTransformer decoderTransformer decoder
학습데이터 크기40GB1.5TB45TB---
학습 방법unsupervised learning & fine tuningunsupervised learning with task tokens----
데이터 인코딩character encodingBytepair encodingBytepair encoding---

사실 이보다 중요한것은, 학습 및 추론 방식에 있어 GPT-1, GPT-2, GPT-3 간 차이점이 있으며 이는 그 사용법을 매우 다르게 만들었습니다.

GPT-1 은 그 학습에 있어 다음 토큰을 유추하는 unsupervised training task 에 매우 집중되어 있으며, NLP task 를 수행하기 위해서는 별도의 fine-tuning 작업을 수행해야만 합니다. 예를들어 "회사밥이 맛이 없어" 라는 문장의 감정 분석 하고자 하면, "회사밥이 맛이없어->부정적" 과 같은 데이터를 준비하고 감정 분석을 위한 supervised fine-tuning 을 해야만 합니다.

GPT-2 는 pre-train 과정에서 task token 이 사용되었고, 이를 통해 unsupervised multitask learning 을 달성하였습니다. 데이터에 task 를 힘께 넣어 pretrain 을 한것으로, "회사밥이 맛이 없어 <감정분석> 부정적" 과 같은 데이터를 넣은것 입니다. 이를통해 GPT-2 는 별도의 fine tuning 없이도 NLP task 를 수행할 수 있고, prompt engineering 의 초석을 만들었습니다. 참고로 GPT-2 는 학습된 task 만 수행 가능하며 이를 "zero-shot in-context learning" 라고 합니다.

GPT-3 는 GPT-2 와 동일한 방식으로 모델을 매우 크게 만들었고, 학습데이터도 크고 다양하게 하여 few-shot in-context learning 을 가능하게 만들었습니다. 여기서 few-shot 은 GPT-2 의 zero-shot 에서 발전된 형태로, 추가적인 pre-training 이나 fine-tuning 없이도 원하는 테스크를 그 패턴을 통해 수행가능합니다. 예를 들면 GPT-3 에게 다음과 같은 예시를 주면 다음은 "감정분석"의 예로 '맛있는걸 먹으니 행복하다->긍정적', '회사오니 우울하다->부정적', '과일이 썩어 맛이 없다->부정적' 등이 있어. '회사밥이 맛이 없다' 를 감정분석 해보면? 다음과 같이->부정적 라고 답할수 있습니다. GPT-3논문을 보면 이러한 few-shot learning 의 성능이 transformer encoder 기반의 fine-tuning 된 모델들의 성능보다 비슷하거나 더 좋다라고 보고하고 있습니다. 이러한 few-shot learning 은 prompt engineering 으로 발전하였습니다.

fine-tuning

GPT-3 의 경우 few-shot in-context learning 이 가능하며, 즉 prompt engineering 을 통해 필요한 task 를 수행할 수 있습니다. 그럼에도 fine-tuning 을 하는 것은 GPT-3 를 GPT-2 와 같이 zero-shot learning 을 수행하도록 함에 있습니다. fine-tuning 의 첫번째 방법은 GPT-1에서 제안된 전체 모델에 대한 학습이 있으며 이는 전체 모델에 대한 가중치 업데이트를 전제합니다. 이는 GPT-3 와 같은 거대 모델에 대해 일반적으로 사용할 수 있는 방법은 아니므로 논외로 하겠습니다. pretrained 된 모델에 대한 가중치를 업데이트 하지 않는 선에서, 별도의 어답터 모델을 추가하여 학습 가능한 방법으로 prompt-tuning 및 low-rank adaption 가 있습니다.

prompt-tuning (p-tuning)

p-tuning 은 input embeding 전에 prompt encoder (BiLSTM + 2 Dense layer 구성) 를 앞에두고, pretrained model 은 inference 만 수행하면서 그 결과를 prompt encoder 로 back propacation 시켜 zero-shot 수행하도록 합니다. GPT-3 에 있어서 이 방법론은 prompt engineering 등으로 찾아내어야 했던 토큰 조합을, prompt encoder 를 통해 우리가 원하는 방향대로 만들어줄수 있는 일종에 mapping function 이라 보면 되겠습니다. P-tuning 논문에서는 이를 discrete prompt search 를 continous search space 로 바꿔준다고 이야기 하고 있습니다. (Liu, X., Zheng, Y., Du, Z., Ding, M., Qian, Y., Yang, Z., & Tang, J. (2021). GPT Understands, Too. https://doi.org/10.48550/arxiv.2103.10385) 본 논문은 GPT-2 수준에서 테스트 되었으며 웬만한 NLP Task 에 모두 적용 가능함을 보였습니다.

low-rank adaption (LoRA)

딥러링에서 Rank 는 입력된 데이터가 가질수 있는 선형적인 독립적인 패턴 혹은 특성의 수를 의미합니다. Rank 가 높을수록 그 데이터 및 모델의 복잡도가 높다고 볼 수 있지만, 일반적으로 높은 Rank 는 Overfitting 을 의미하며, 일반적으로 파라메터가 큰 모델이라도 그 rank 는 낮을것으로 추측합니다 (low intrinsic rank). 즉 GPT-3 와 같은 큰 모델의 각 레이어도 그 rank 가 낮으므로 훨씬 작은 dense layer 로 projection 할 수 있다고 가정하고 rank decomposition matrix 를 넣은 LoRA 가 Microsoft 로부터 제안되었습니다 (Low Rank Adaption). (Hu, E. J., Shen, Y., Wallis, P., Allen-Zhu, Z., Li, Y., Wang, S., Wang, L., & Chen, W. (2021). LoRA: Low-Rank Adaptation of Large Language Models. https://doi.org/10.48550/arxiv.2106.09685)

이는 아래와 같이 GPT-3와 같은 거대모델의 모든 파라메터 Φ\Phi update 하는 대신

기존의 pretrain parameter 에서 task specific 하게 조정될 low rank parameter, Φ0+ΔΦ(Θ)\Phi_0+\Delta \Phi (\Theta) 만 update 하는 방법입니다.

이를 통해 메모리는 1/3, 파라메터의 수는 10,000 배 정도 줄이고, fine-tunning 을 통한 성능은, 모델 전체를 fine tunning 하는것보다 성능이 더 좋다고 이야기합니다.

gpt-3 fine tuning on openai

openai 에서의 fine tuning 이 p-tuning 인지, lora 인지, 또는 다른것인지에 밝혀진 내용은 없습니다 (https://platform.openai.com/docs/guides/fine-tuning/fine-tuning). 다만 그 학습 환경 그 구성상 LoRA 일 것이라고 추측은 하고 있습니다.

data, in-context learning

fine tuning 의 경우 LoRA 와 같은 approach 라면 원하는대로 fine tuning 이 가능할 것 같습니다. 그렇다면 어떤 data 를 준비해야 fine tuning 이 잘 될수 있을지? 에 대해서도 고민이 됩니다.

또한 gpt-3.5 가 출시한 상황에서 in-context learning 을 잘만 활용한다면 굳이 fine-tuning 없이도 원하는것을 이룰 수 있을것 같습니다. 다음은 in-context learning 과, data 의 준비 및 Chain of thought 등에 대한 주제들에 대해 다루어보려 합니다.

profile
AI professional for science and industry

2개의 댓글

comment-user-thumbnail
2023년 3월 3일

좋은 글 잘 읽었습니다! LoRA의 경우 위에 말씀하신것 처럼 학습시에는 fully finetuning 에 비해 적은 메모리(1/3)를 사용하고 학습대상 파라메터가 10,000배 정도 적어지는 효과가 있지만 학습 후 최종 모델 자체의 사이즈는 오히려 증가(백본모델 + LoRA weight) 하겠네요. 백본 모델을 재활용하고 LoRA weight만 교체하는 식으로 활용할 수 있는 이점이 커서 이미지생성 모델에서도 많이들 사용되네요. 이미 커뮤니티에서 인기있는 Stable Diffusion Web UI에서도 LoRA weight를 학습하고, 저장하고, 불러오는 기능이 들어갔더라고요.
https://huggingface.co/blog/lora
https://github.com/AUTOMATIC1111/stable-diffusion-webui

1개의 답글