학습 데이터와 모델 파라미터 사이즈가 커질수록 성능이 점점 향상되는 것을 확인하였음
보통 범용 웹 데이터로 사전학습을 수행하고 Downstream Task에 맞춰서 Finetuning해왔음
위와 같은 방법은 특정 Task에 대한 성능 향상을 보장했음.
모든 파라미터를 학습하는 경우 성능 향상이 가장 높은 것으로는 확인 되었으나, 매우 큰 비용이 소모되고, 성능 측면에서 사실 모델이 추가적으로 학습하는 과정에서 기존 학습 정보를 잊어버리게 되는 현상 또한 발견됨
즉 모든 파라미터를 새로운 데이터에 대해 학습하는 것이 항상 정답이 될 수 없음.
그래서 등장한 것이 ICL
in-context-learning을 통해 별도의 학습 없이 입력을 통해 원하는 출력을 얻을 수 있게 됨.

PEFT: Parameter-Efficient Fine-Tuning

Adapter
Prefix Tuning
embedding으로 간주될 수 있음.예시
from transformers import GPT2Tokenizer, GPT2LMHeadModel import torch.nn as nn import torch # 기본 모델 및 토크나이저 tokenizer = GPT2Tokenizer.from_pretrained("gpt2") model = GPT2LMHeadModel.from_pretrained("gpt2") # Prompt 벡터 초기화 (학습 가능하도록 설정) prompt_length = 5 # Prompt 길이 hidden_size = model.config.n_embd prompt_embedding = nn.Parameter(torch.randn(prompt_length, hidden_size)) # Forward 함수에 Prompt 추가 def forward_with_prompt(input_ids): # 기존 입력 임베딩 input_embeddings = model.transformer.wte(input_ids) # Prompt 벡터 추가 prompt_embeddings = prompt_embedding.unsqueeze(0).expand(input_embeddings.size(0), -1, -1) inputs_with_prompt = torch.cat([prompt_embeddings, input_embeddings], dim=1) # 모델 Forward outputs = model(inputs_embeds=inputs_with_prompt) return outputs # 입력 예시 text = "The capital of France is" input_ids = tokenizer(text, return_tensors="pt").input_ids outputs = forward_with_prompt(input_ids) print(outputs)
Inference speed를 유지하며 모델의 아키텍쳐를 변형하지 않고도 활용할 수 있다는 점에서 활용도가 높음