Study/자연언어처리 NLP

Large Language Model의 근간 이론

김 도경 2025. 2. 4. 11:14
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 적용