LLM/사전학습+미세조정+강화학습

4-3. Reject Sampling, DPO, (f. 강화학습 없이 코드 가독성 높이기)

Human-analog 2024. 12. 18. 07:03

 

4.3 강화 학습이 꼭 필요할까?

  강화 학습강력한 학습 방법이지만, 모든 경우에 꼭 필요한 것은 아니에요. 모델의 성능을 개선하기 위한 다양한 접근 방법이 있으며, 때로는 강화 학습 없이도 효율적인 해결책이 있을 수 있죠. 이번 글에서는 강화 학습 없이도 성능을 향상시킬 수 있는 몇 가지 대안을 살펴볼 거예요.

 


4.3.1 기각 샘플링: 단순히 가장 점수가 높은 데이터를 사용한다면?

  기각 샘플링(Reject Sampling)은 높은 점수를 가진 데이터만을 사용하는 방식이에요. 강화 학습처럼 복잡한 학습 과정을 거치지 않고, 단순히 점수가 높은 데이터를 선택해 모델을 학습시키는 것이죠. 이 방법은 계산적으로 간단하고, 모델이 명확한 기준에 따라 학습할 수 있게 도와줘요.

 

  • 요약:
    기각 샘플링은 점수가 높은 데이터를 사용해 간단하게 모델을 학습시키는 방식이에요.
  • 용어설명:
    • 기각 샘플링(Reject Sampling): 점수가 높은 데이터만을 선택해 모델을 학습시키는 방식.

4.3.2 DPO: 선호 데이터셋을 직접 학습하기

  Direct Preference Optimization (DPO)는 선호 데이터셋을 직접 학습하는 방식이에요. PPO 같은 복잡한 강화 학습 과정을 거치지 않고, 데이터에서 직접적인 선호도를 학습해 모델의 성능을 개선할 수 있죠. DPO높은 보상 값을 가진 데이터셋에서 학습하는 대신, 선호도를 기반으로 데이터를 선택해 학습하는 방식이에요.

 

  • 요약:
    DPO는 복잡한 강화 학습 없이도 선호 데이터셋에서 직접 학습해 모델 성능을 개선하는 방식이에요.
  • 용어설명:
    • DPO (Direct Preference Optimization): 선호도에 기반한 데이터를 학습해 모델을 최적화하는 방식.

4.3.3 DPO를 사용해 학습한 모델들

  DPO 방식으로 학습한 모델들은 특정 기준에 따라 데이터를 필터링하면서도, 복잡한 강화 학습 과정 없이 성능을 향상시킬 수 있어요. 이러한 방식은 특히 명확한 기준이 있는 상황에서 효과적이에요. DPO는 모델이 효율적으로 학습하고, 더 나은 결과를 도출하는 데 큰 도움이 될 수 있죠.

  • 요약:
    DPO로 학습한 모델은 복잡한 학습 과정 없이도 선호도 기반으로 성능을 크게 향상시킬 수 있어요.

실습 13: DPO를 사용해 모델 학습하기

  이번 실습에서는 DPO 방식을 사용해 간단한 선호 데이터셋을 기반으로 모델을 학습해 볼 거예요. 선호하는 코드비선호하는 코드를 나눠, 가독성 점수를 기준으로 학습하는 과정을 코드로 보여줄게요.

 

import torch

# 선호 데이터셋 예시
preferred_codes = ["def foo(): return 42", "def foo():\n    return 42"]
non_preferred_codes = ["def foo():return42"]

# 가독성 점수 계산 함수 (임의의 점수 부여)
def calculate_readability_score(code):
    return len(code.split())  # 단순히 단어 수로 가독성 점수 측정

# DPO 방식으로 학습
def train_dpo_model(model, preferred_codes, non_preferred_codes):
    for code in preferred_codes:
        score = calculate_readability_score(code)
        print(f"Preferred code score: {score}")
    
    for code in non_preferred_codes:
        score = calculate_readability_score(code)
        print(f"Non-preferred code score: {score}")

# 학습 시작
train_dpo_model(None, preferred_codes, non_preferred_codes)

 

  이 코드는 DPO 방식으로 선호 데이터셋을 학습하는 간단한 예시예요. 코드의 가독성 점수를 계산하고, 더 높은 가독성을 가진 코드에서 학습할 수 있도록 도와줘요. 선호 데이터셋을 직접 사용해 모델을 간단하게 최적화하는 방법을 보여줍니다.

  • 요약:
    DPO를 사용해 선호 데이터를 학습하고, 가독성 점수를 기준으로 모델을 최적화하는 과정입니다.

정리

  1. 기각 샘플링점수가 높은 데이터를 사용해 간단하게 모델을 학습시키는 방법이에요.
  2. DPO강화 학습 없이도 선호 데이터를 직접 학습해 모델 성능을 개선하는 방식이에요.
  3. DPO로 학습한 모델복잡한 학습 과정 없이효율적으로 학습할 수 있어요.
  4. 코드 실습을 통해 DPO 방식으로 선호 데이터를 학습하고, 모델을 최적화하는 방법을 배울 수 있어요.