https://arxiv.org/abs/2407.10930


Abstract:

  • 논문에서는 LM Program 파이프라인의 성능을 향상 시키는 방법으로 파인튜닝 + Prompt 최적화를 번갈아 하는 기법을 제안함.
    • 기존에는 파인튜닝만 하거나, 프롬프트 최적화만 하거나 그랬음.
    • 근데 파인튜닝된 모델은 같은 프롬프트였더라도 다른 성능을 낼것이고, 프롬프트 최적화를 하면 파인튜닝에 사용할 데이터 셋도 더 잘만들거임.
    • 즉 이 둘은 시너지가 있는 기법이라서 하나만 쓰기 보다는 번갈아 쓰는 기법을 제안한 것. 이걸 BetterTogether 전략 이라고 부른다.
    • 이런 BetterTogether 전략은 LM Program 으로 구성된 파이프라인에서 하나의 최적화된 LM 모듈이 다른 LM 모듈의 최적화를 하는데에도 사용될 수 있음. 모듈 A 파인튜닝 -> 모델 A 의 결과로 모델 B 의 프롬프트 최적화 or 파인튜닝
    • 이런 방식의 아이디어를 Self-Teaching(부트스트랩) 아이디어 라고 함. 파이프라인에서는 중간 출력에 대한 라벨이 부족함. 이런 상황에서 LM이 스스로 만든 출력을 학습 신호로 이용하는 것.
  • 프롬프트만 최적화했을 때와 가중치만 최적화했을 때에 비해, 두 가지를 함께 최적화하는 방법은 5–78%(HotPotQA), 2.5–10%(GSM8K), 3.5–88%(Iris) 더 높은 성능 개선을 보였다고 함.

 

 

BetterTogether: Alternating Weight and Prompt Optimization Steps for LM Programs:

  • “파인튜닝 보다 먼저 프롬프트 최적화를” 수행하는 전략:
    • 모델이 더 정확한 출력을 생성하도록 유도함으로써, 파인튜닝을 위한 학습 데이터셋(즉, 모델이 예측한 중간 출력 등)을 보다 질 좋게 만들 수 있다는 의미
  • "파인튜닝을 프롬프트 최적화 이후" 수행하는 전략:
    • 이미 가중치가 업데이트된 모델의 출력 특성에 맞춰서, 모델이 원하는 대로 (혹은 우리가 원하는 대로) 출력을 내도록 세밀하게 조정할 수 있다는 뜻
    • 파인튜닝으로 모델의 내부 표현이 변했더라도, 추가적인 프롬프트 수정으로 출력 스타일이나 추론 프로세스를 맞춤형으로 개선해 최종 출력을 더 높은 품질을 만들 수 있음.
  • Algorithm 1:
    • (1) 프롬프트를 먼저 최적화해 학습 및 추론 과정이 최대한 효율적으로 이뤄지도록 하고,
    • (2) 모델 가중치를 파인튜닝하여 모델 자체를 업그레이드하며,
    • (3) 새로워진 모델 상태에 맞춰 다시 프롬프트를 최적화하는 교대적 접근을 제안

  • 부트스트랩(bootstrap) 방식: 파인튜닝과 프롬프트 최적화에 사용하는
    • 실제 모듈형 파이프라인(\Phi)에는 모듈별 정답 라벨이 부족함.
    • 이 문제를 해결하기 위한 부트스트랩 기법(Khattab et al. (2024)의 Bootstrap-* 알고리즘) 은 (xi, mi)라는 입력과 정답(혹은 평가 지표)이 주어졌을 때 최종 출력이 올바른 경우에 해당하는 중간 산출물들을 수집해서 이것들을 활용하는 알고리즘임.
    • 이 데이터가 파인튜닝과 프롬프트 최적화에 쓰임.
    • 이건 인간이 일일이 중간 단계 정답을 라벨링하지 않아도 된다는 장점이 있지만 “최종적으로 맞힌” 경우에만 중간 데이터를 수집하므로, 편향이나 “운이 좋았던 경로”를 학습할 위험도 있을 수 있음.
  • Algorithm 2:
    • BOOTSTRAPFEWSHOTRS 함수가 프롬프트 최적화(OPTIMIZEPROMPTS)에 쓰이고,
    • BOOTSTRAPFINETUNE 함수가 가중치 파인튜닝(FINETUNEWEIGHTS)에 쓰이게 됨.
    • BOOTSTRAPFEWSHOTRS (프롬프트 최적화): 먼저 데이터 셋을 훈련/평가로 구분하고, 부트스트랩 기반의 알고리즘을 써서 중간 산출물의 데이터를 모우고, 필터링해서, 최적의 에시를 찾는 방법으로 프롬프트를 최적화함.
    • BOOTSTRAPFINETUNE (가중치 파인튜닝): 프롬프트 최적화 방법과 같이 데이터를 수집하고, 이렇게 수집한 데이터로파인튜닝을 함.

  • 즉 “프롬프트 → 가중치 → 다시 프롬프트” 순서로 쵲거화를 제안함: (1) 프롬프트 최적화를 먼저 수행해서 학습 데이터(혹은 중간 산출물)가 좀 더 깨끗해진 상태에서, (2) 파인튜닝으로 모델 내부 파라미터를 조정한 다음, (3) 최종적으로 바뀐 모델 상태에 맞춰 프롬프트를 재최적화하는 것

 

 

Main Results:

+ Recent posts