프롬프트 자동화 관련 자료를 찾아보고 싶었는데 그러다 active prompting이라는 키워드를 보고 읽어보기로 했습니다. (그러나 읽어본 결과 찾는 분야랑은 좀 다름..)
CoT promptingChain of Thought은 어떤 문제를 해결할 때 그 과정에서의 중간 단계(사고 과정)를 명시적으로 표현하도록 유도하는 방법. 이를 통해 모델은 문제를 해결하는 과정을 단계별로 설명하면서 더 복잡한 추론을 수행할 수 있게 됨. (zero-shot의 경우 주로 프롬프트에 "step by step" 등의 키워드를 넣음.)
→ 그러나 기존의 CoT는 사람이 사전에 준비한 예시를 사용하기 때문에, 최적화된 예시를 찾기 힘들다. → 이를 찾아주는 것이 저자가 제안한 Active prompt
Active Learning모델이 학습에 사용할 데이터를 선택하는 과정에서 불확실성이 가장 큰 데이터를 선택해 annotation을 달도록 하는 방법으로, 효율적인 성능 개선이 가능.
이 불확실성을 평가하기 위해서는 다양한 metric을 사용할 수 있는데, 주로 Disagreement(여러 번 시도하여 나온 값들의 불일치성), Entropy(예측된 결과 확률 분포의 불확실성), Variance(예측 결과의 분산) 등을 사용.
→ 저자가 제안한 active prompt의 핵심은 few-shot 질문을 위의 active learning 처럼 알고리즘을 통해 선택하도록 하는 것.
Active-Prompt라는 방법을 소개하여 CoT 추론을 개선하고자 함. 사람이 찾을 필요 없이 모델이 불확실한 질문을 반환하기 때문에 최소화된 노력으로 모델의 성능을 쉽게 향상시킬 수 있음!
전체적인 파이프라인은 위와 같음.
모델이 unlabeled question들에 대해 일정 횟수 반복하여 대답하게 함
→ uncertainty u 계산(fig에서는 disagreement 사용) → ranking 매겨 most uncertain question pool 생성 → 모델이 뽑은 질문들에 대해 annotation(CoT 과정 포함)을 프롬프트에 추가 → inference
다시말해, 잘 모르는 개념들에 대해 답지를 확인하는 오답노트 방식!
Uncertainty Estimation저자들은 disagreement를 주요 metric으로 사용했으나, entropy, variance, self-confidence 또한 estimation 방식으로 제안.
+) 다만, LLM(여기서는 GPT-3 기준으로 실험)의 경우 over-confidence 한 경향이 있어 스스로에게 얼마나 확신하는지를 물어볼 경우(self-confidence) 제대로된 estimation이 불가해 제외함.
1) Disagreement
unique한 아이템의 개수를 답변의 수로 나눈다. -> 답변이 계속 달라질수록 uncertainty 증가
2) Entropy
모델이 질문 q에 대해 가능한 답변 a의 확률을 예측하여 로그 함수로 가중 합산 -> 한 답변으로 확률분포 몰릴수록 uncertainty 감소
3) Variance
각 질문에 대한 답변의 분산 확인(간단한 정규화 후) -> 클수록 uncertainty 증가
저자는 CodeX의 code-davinci-002(2021)를 주 베이스라인 모델로 사용. uncertainty는 각 질문 당 10회를 기준으로 estimation.inference 단계에서는 temperature=0.7로 설정 후 각 질문에 대해 40회씩 답변을 받음.
uncertainty는 disagreement, entropy 두 가지 방식을 따로 사용. Auto-CoT, CoT, self consistency, random-CoT(무작위 annotation)와 비교했을 때 estimation 방식에 따른 차이는 있지만 다른 기존 프롬프트에 비하면 개선된 성능을 볼 수 있음.
+) 간단한 산술 문제(GSM8K, ASDIV, SVAMP, AQuA, SingleEQ) 벤치마크 중 ASDiv, SVAMP, SingleEq는 훈련 데이터가 없기 때문에 GSM8K에서 프롬프트를 transfer하여 사용.
그 밖에 상식, 기호 추론 벤치마크 중 Letter(4) 데이터셋은 훈련 데이터와 다른 테스트 데이터를 다뤘음(OOD)에도 좋은 성능을 보임.
Ablation study
'active-prompt는 few-shot 예시에 의존하지 않는다'selection 과정에서 처음부터 예시를 제공하지 않고, zero-shot 방식으로 스스로 추론 과정 생성하게 한 뒤 비교했을 때 성능이 뒤지지 않음
+) 그러나 질문 선택 이후에는 어차피 사람의 수동 annotation이 많던 적던 필요할텐데... 뭔가 큰 의미가 있는지는 잘 모르겠음
'active-prompt가 random-CoT보다 월등히 좋다.'질문을 무작위 선택하는 것보다 제시된 방법대로 모델이 계산하여 선택하도록 하는 게 성능 개선에 중요한 기여를 하는 것으로 보여짐.
'누가 CoT와 정답에 대한 주석을 다는지에 따라 차이 발생.' → 질문 선택에 대한 해결책이 될 수는 있으나, 프롬프트 최적화 설계는 아님
'Disagreement 혹은 entropy를 사용하는 게 낫다'
'k=10 에서 성능이 최적화된다.'uncertainty estimation의 첫 단계에서 입력 질문에 대한 k개의 답을 생성할 때, 이 k 값을 바꿔가며 prediction pool을 구성한 결과 커질수록 성능이 계속 증가하고, k=10에서 성능이 수렴하는 경향을 보임.
Transferabilityactive-prompt가 선택한 예시 질문이 모델 간 전이 가능한지 실험.code-davinci-002 모델로 예시를 선택하고, 이를 text-davinci-002와 text-davinci-003 모델에서 추론 수행.
→ uncertainty가 모델에 종속적인지, 특정 task에 종속적인지를 확인.
그 결과, 선택된 질문들은 task-specific하며, 모델 간 전이가 가능함을 증명.
GPT-3.5(큰 모델)와 Llama2-70b(작은/약한 모델) 모델 간의 transfer 실험을 진행. 이 때, 1) GPT-3.5로 예시를 선택 하는 방법과 2) Llama2로 예시를 선택하는 방법 두 가지 경우로 나누어 봄.
→ transfer가 가능하며, 큰 모델에서 작은 모델로 transfer하는 경우 더 나은 성능을 보임.
1) 효과적인 annotation을 하기 위해 uncertainty estimation 도입한 active prompt 제안
→ 사람의 노력을 줄이면서 프롬프트 성능 개선
2) 실험을 통해 네 가지 uncertainty metrics 중 disagreement, entropy를 적용하는 게 가장 좋음을 증명
3) 10가지 CoT, 정답 예시를 제공하는 게 가장 적절함
4) 얻어낸 '주요 질문'은 모델에 종속되지 않고 task-specific 하므로 transfer 하여 더 범용적으로 활용 가능
사실 제목을 보고 생각했던 프롬프트 구조의 최적화 방식, 혹은 완전 자동화 방식은 아니었지만 쉬운 방법론이라 가볍게 읽기 좋았다!