In-Context Learning
- Fine Tuning
- 대규모 코퍼스로 사전학습 후, 적은 규모의 specific한 데이터셋에 대해 fine tuning하는 과정
=> 일반화된 task가 아닌, 일부 task에 대해서 능력을 집중적으로 향상 - In-Context Learning
- 원하는 task에 대한 간단한 설명을 함께 Input
=> 학습 과정에서 다양한 스킬과 패턴인식 능력을 키워, Inference 단계에서 원하는 task에 빠르게 적응할 수 있도록 함 - N-Shot Learning
- 모델에 주어지는 예시의 수가 증가할수록 성능이 증가
- In-Context Prompt는 중요 - Zero-Shot Learning
- 예시를 전혀 보지 않고 모델 업데이트 없이 새로운 태스크를 수행
- Unsupervised multitask learners
- 독해, 번역, 요약, Q&A 등에 대해 zero-shot 능력이 꽤 있음!
=> Zero-shot인데도 특정 태스크는 기존의 SOTA* 모델들을 짓눌러버림 - One-Shot Learning
- 단 한 개의 예시와, task에 대한 자연어 지시문이 제공
- 이 방법이 사람이 소통하는 방법과 가장 흡사한 방법 - Few-Shot Learning
- 모델은 추론 시 단 몇 개의 예시만을 참고해서 정답을 생성
- 문맥과 원하는 답의 예시들이 주어짐. 이후 마지막으로 단 한 개의 문맥이 주어지면, 모델은 답을 생성해야 함
- Task-specific한 데이터에 대한 필요를 크게 줄여줌(즉, 몇 개 없어도 됨)
=> 새로운 task에 효율적으로 빠르게 적응
build ChatGPT
- ChatGPT
- 무의식적인 데이터 생성이 아닌, 모델에게 피드백을 주기 위한 데이터 생성
- 사람의 지시를 반영하는 “Instruction Tuning”과 피드백을 반영하는 “Reinforcement Learning”으로 구성
- 5일만에 사용자수 100만명 돌파
- 생산성 향상 - Multi-Tasking
- ChatGPT는 chatbot에서 요구한 태스크를 하나의 모델로 수행 가능이 외에도 훨씬 많은 태스크를 수행 가능
- 하나의 모델이지만, 하나의 서비스로도 볼 수 있음 ( LLM as a Service)
- 멀티태스킹, 학습 뿐만 아니라 추론 시에도 엄청난 Infra관련 투자/경험/기술이 필요 - 어떤 태스크까지도 ChatGPT가 잘할까?
- ChatGPT API를 활용한 수많은 서비스들이 많이 나올 것이라 기대
=> ChatGPT의 역량 분석 필요 (Prompt Discovering) - ChatGPT란?
- GPT-3.5를 파인튜닝한 모델
- InstructGPT의 "sibling model"로, 학습 방식이 유사
- Demonstration data: 데이터를 대화형으로 바꿈
- 보상 모델(Reward model, RM): 유저의 선호도에 대한 모델
- 보상 모델을 활용해 ChatGPT를 강화학습(Reinforcement learning, RL)으로 업데이트
ChatGPT의 학습방법
- Instruction Tuning- 일반적인 언어모델은 다음 토큰을 예측하거나, 일부 태스크를 수행하는 것에 초점을 맞추어 학습 => 사람의 지시에 따르지 못함
- Instruction Tuning은 사람의 명령(Instruction)을 따르도록, 요구를 수행하도록 모델을 Fine Tuning하는 방식
- 명령에 대한 파인튜닝과 강화학습을 하면 사용자의 의도를 더 잘 파악하고 답변한다는 것에 착안한 InstructGPT(2022년 1월)의 실험 방식을 가미 - Step 1. SFT(Supervised Fine Tuning)
- 예제 데이터 수집 후 supervised policy를 학습 => SFT 모델 확보
: GPT가 주어진 지시문대로 행동하도록 가르치기 위해, 해당 데이터셋을 만들어 fine tuning
- 이를 위해 지시 프롬프트와 그에 대한 결과물로 이루어진 데이터셋을 정의 (demonstration dataset, 13K prompts)
- 프롬프트 데이터셋으로부터 지시 prompt를 샘플링 (예) 8살 아이에게 달착륙을 설명해보시오
- 라벨러는 프롬프트에 적합한 행동을 예시로 라벨링 (예) 몇몇 사람들이 달에 갔답니다 ~~
- 이 데이터셋을 GPT-3에 대해 Fine-tuning => SFT (supervised fine-tuning) 모델
- 지시문을 따르는 점에 있어 이 모델은 이미 GPT-3보다 성능이 우수했지만, 완벽하게 원하는 방식으로 작동하지는 않음 - Step 2. 결과물에 대한 사람의 선호도 데이터를 학습
- Reward Model 학습 : SFT로 생성된 결과물에 대해 사람의 선호도를 반영할 수 있는 Reward Model 학습
- Comparison dataset은 33K 개의 프롬프트로 이루어져 있으며 이를 Reward Model 학습에 적합하게 구성
- Comparison dataset은 프롬프트와 그에 따른 결과물들 (4-9개), 그리고 그 결과에 대한 선호도 순위로 구성됨
- 즉, 프롬프트가 주어질 때 Reward Model은 결과물들에 대해 사람의 선호도를 예측하는 방법을 학습 - Step 3. RLHF
- 강화학습을 사용해 Reward Model에 대해 policy를 최적화
: Step1의 SFT 모델을 Step2의 보상모델을 사용해 강화학습을 통해 추가 fine-tuning
- Proximal policy optimization algorithm(PPO)
- Reward Model을 보상함수로 사용하여 정책을 최적화 (InstructGPT가 사람의 피드백을 얻는 방법) - PPO를 통해 Reward Model의 Policy를 반영
- PPO를 통한 fine-tuning과정
1) GPT는 프롬프트를 보고, 그에 대한 결과 문장들을 생성
2) 생성된 문장들을 Reward Model이 평가하여 reward(보상)를 계산
3) 보상 값이 GPT에게 주어지고 모델은 보상을 최대화하는 방향, 즉 사람이 원하는 문장을 생성하는 방향으로 정책을 업데이트
=> 사람의 지시에 따르면서, 유용하고 안전한 문장을 생성하도록 최적화 - ChatGPT
- 먼저 지시문에 따라 결과를 완성하는 초기 모델, SFT 모델을 완성한 후
- 사람의 feedback을 모사하는 보상 모델(Reward model)을 확보하여
- 이를 통해 SFT 모델이 사람이 더 선호하는 결과를 추론하도록 강화학습을 진행한 것!
ChatGPT 활용법
- 세상에 있는 책은 다 읽었으며 50개+ 언어 구사자 그런데 가물가물
- Persona Injection
- ChatGPT의 올바른 사용법: 프롬프트 구성
- 짧고. 간결하고. 확실하게
- 출력물도 형태 지정
- 길어지면 구역 지정
- 복잡하면 구역 지정
- 예시 들기
- 3Cs Framework
Parameter Efficient Fine Tuning
- PEFT 이전
- 모델이 점점 커짐에 따라 시판 그래픽카드로 모델 전체를 fine tuning하는 것은 불가능
- 또한 fine tuning된 모델은 이전의 사전학습된 모델과 똑같은 크기. 파인튜닝된 모델을 저장하고 사용하는 것 또한 (시간, 경제적으로) 비용이 많이 드는 일
=> PEFT(parameter-efficient fine tuning)은 이 두 가지의 문제를 해결하고자 등장 - Parameter Efficient Fine Tuning (PEFT)
- 사전 훈련된 언어 모델을 특정 작업이나 상황에 적용할 때, 가중치의 일부만 업데이트하는 파인 튜닝 방법
- 일부만 fine tuning하므로 연산량이 대폭 감소
- Fine tuning 할 때 발생하는 문제점 중 하나인 catastrophic forgetting 완화
- PEFT는 또한 적은 데이터에서 fine tuning 할 때나 도메인 밖의 데이터를 일반화할 때 더욱 좋은 성능
=> 적은 수의 파라미터를 학습하는 것만으로 모델 전체를 fine tuning 하는 것과 유사한 효과 - Prompt
- 일반적인 정의 : 프롬프트라는 것은 언어모델에 전달하는 질문이나 요청을 사용자가 응답을 유도한다는 의미
- Template을 사람이 문자 그대로 해석할 수 있는지에 따라 구분
: Discrete Prompts(= Hard Prompt) : Continuous Prompts(= Soft Prompt)
- 이러한 프롬프트(prompt)를 사용해 PLMs를 조정하는 방법 => Prompt Learning - Prefix-Tuning
- 연속적인 태스크 특화 벡터(continuous task-specific vector = prefix) 를 활용해 언어모델을 최적화하는 방법
- LM 고정하고 각 layer의 input 앞에 task-specific vectors를 붙여 tuning함
- 각 Task에 대하여 parameter를 tuning 시켜 task 마다 적합한 task-specific vectors를 도출
=> 하나의 언어모델로 여러 개의 태스크를 처리할 수 있음 (prefix를 학습)
- Table-to-text, summarization 등의 task에 대해 평가
- Prefix-Tuning 모델이 Fine-tuning, Adapter를 적용한 조건 보다 더 적은 파라미터를 학습하면서 더 높거나 유사한 성능을 달성 - Prefix-Tuning vs Fine-Tuning
- Prefix-tuning은 각 Task에 대한 task-specific vectors(Prefix)를 계산하는 parameter만을 fine-tuning
=> 전체 모델을 fine-tuning 및 저장하는 방식에 비해 overhead 감소 - Prompt Tuning
- 전체 파라미터를 튜닝하는 대신, 입력 프롬프트 임베딩만 학습하는 방법
=> 즉 모델에 입력되는 프롬프트에 해당하는 weight만을 학습
- PLMs를 freeze하고 입력 텍스트에 추가되는 downstream task당 k개의 토큰만을 학습함
- T5에 적용 시 GPT3 의 few-shot prompt design 보다 우수함
- Prompt Tuning 사용시, Domain Adaptation에 용이 => 서로 다른 데이터로 학습, 평가 시에도 성능이 보존 - P-Tuning
- PLMs의 전체 weight를 fine-tuning하지 않고, continuous prompt embeddings만 tuning하는 방법
- LM의 입력부에 Prompt Encoder(Bi-LSTM)를 두어 나온 출력 값을 Prompt의 Token Embedding으로 사용
- Task와 관련된 anchor tokens을 추가하여 성능 개선(anchor token값은 고정)
- 언어모델의 구조와 상관없이 적용가능
- NLU Task에서 GPT style model로 BERT style model보다 더 낫거나 비슷한 성능
- P-tuning 방식을 적용하여 SuperGLUE 벤치마크 측정 결과: AE, AR 방식 모두 모든 세팅(fully-supervised & few-shot setting)에서 기존 fine-tuning 방식 대비 성능 개선. 특히 AR 방식의 성능 개선 폭이 더 크게 나타남
- Manual Prompt(MP), Fine-tuning(FT), MP+FT, P-tuning의 성능을 비교해보면 Fine tuning보다 같거나 더 좋은 결과 - LoRA (Low Rank Adaptation)
- Pre-trained weigh를 고정한 상태로 유지하며, dense layer 변화에 대한 rank decomposition metrices를 최적화
- Low rank feed-forward adapter layer를 기존 output과 더하는 방식
- Adapter Layer만을 학습 • 기존 파라미터에 더해지는 형태이므로 추론시간이 늘어나지는 않음
- GPT-3의 경우 175B의 파라미터 가운데 0.01%의 파라미터 개수만 이용할 정도로 높은 효율성
- 작은 rank 값을 설정해도 성능이 유지
- Huggingface에서 제공하는 peft 라이브러리를 통해 쉽게 사용 가능 - Quantization
- Training Time 을 줄이는게 아닌, Inference Time 을 줄이는 것이 주 목적
- 모델의 파라미터를 lower bit로 표현함으로써 계산과 메모리 access 속도를 높이는 경량화 기법
- 보통 32비트 부동소수점 연산을 8비트 정수로 변환하는 방식 사용 : Pytorch, Tensorflow의 default data type = fp3 - 신경망에 적용
- 신경망의 가중치와 활성화 함수 출력을 더 작은 비트 수로 표현하도록 변환
- 신경망의 파라미터 값은 평균이 0인 정규분포를 따르는 것이 알려져 있음
- block 안에서, [-1, 1]이 되도록 정규화 (최대 절댓값이 1이 되도록)
- 이후 제시된 분위수에 맞게 양자화 - QLoRA (Quantized Low Rank Adapters)
- Q + LoRA : 4-bit Quantized language model into LoRA => 기존 사전학습 모델의 weight 는 양자화로 저장하고, LoRA에 의해 더해지는 weight는 그대로 16-bit finetuning을 유지
- 사전학습 모델을 4-bit로 quantize하는 high-precision 방법 => QLoRA를 사용하면 16-bit fine-tuning 성능을 유지하면서 단일 48GB GPU에서 650억 매개 변수 모델을 fine tuning 가능
- 두 벤치마크 모두에서 16, 8, 4비트의 어댑터가 16비트 full-finetuning 베이스라인 성능을 거의 재현
- Huggingface에서 제공하는 transforemers 라이브러리로 로드가능
- peft 라이브러리와 연계를 통해 QLoRA 적용 가능 - IA3 (Infused Adapter by Inhibiting and Amplifying Inner Activations)
- Self-Attention, Cross-Attention에서의 Key, Value 값을 rescale해주는 벡터와 position-wise feed-forward network의 값에 rescale을 해주는 벡터를 추가해서 모델을 튜닝하는 기법
<=> LoRA의 경우에는 hidden state에 새로운 값을 더해주는 기법
- 기존에 공개된 LoRA보다 적은 파라미터를 사용하면서 높은 성능
- LoRA 보다 파라미터 업데이트 수도 적으며, GPT-3를 in-context learning 했을 때 보다도 성능이 좋음 - LLaMA Adapter
- LLaMA 모델을 instruction 모델로 효율적으로 미세 조정하기 위한 방법
- 학습 가능한 프롬프트 토큰을 상위 Transformer 레이어의 입력 텍스트 토큰 앞에 추가해 학습
- 1.2M의 적은 피라미터 수로 각 어댑터를 유연하게 삽입하여 다양한 지식을 부여
- Multi-modal conditioning
- Visual encoder(e.g. CLIP)를 통해 각 scale의 feature를 추출하고 학습 가능 projection 적용
'Study > 자연언어처리 NLP' 카테고리의 다른 글
LLM 기반 Model-Centric NLP 연구 (0) | 2025.02.04 |
---|---|
LLM 기반 Data-Centric NLP 연구 (2) | 2025.02.04 |
Large Language Model (1) | 2025.02.04 |
사전학습 기반 언어모델의 한계점 및 방향성 (2) | 2025.02.03 |
의미기반 언어 지식 표현 체계 (0) | 2025.02.03 |