https://arxiv.org/pdf/2102.09690
Abstract:
- 이 논문은 GPT-3와 같은 대규모 언어 모델이 주어진 자연어 프롬프트에 기반하여 몇 개의 학습 예시만을 보고 다양한 작업을 수행할 수 있는 “few-shot learning”에서의 성능 변동 문제를 해결하는 방법을 다룸.
- GPT-3는 소수의 학습 예시가 포함된 프롬프트만으로도 다양한 작업을 수행할 수 있음. 하지만 프롬프트의 형식, 예시의 선택, 예시의 순서 등에 따라 성능이 크게 변할 수 있다.
- 이러한 불안정성의 원인 중 하나는 언어 모델이 특정 답을 예측하는 경향, 즉 편향을 가지고 있기 때문임. 예를 들어, 프롬프트 마지막에 있는 답이나 사전 훈련 데이터에서 자주 등장하는 답을 예측하는 가능성이 큼.
- 이를 완화하기 위해 연구자들은 이러한 편향을 보정(Calibrate) 하는 방법을 여기서 소개함:
- a) 이를 위해 모델이 어떤 편향을 가지고 있는지 먼저 확인한다:
- 예시로 YES/NO 로 묻는 질문에 YES 라고 대답하는 응답 비율이 높은 편향을 가지고 있다고 가정해보자. 이건 사전 학습에서 YES 가 NO 보다 많이 나왔기 때문에 이런 편향을 가질 수 있음.
- YES/NO 를 대답하는 질문 프롬프트에 질문 대신에 "N/A" 와 같은 아무런 의미 없는 테스트 입력을 제공해서 모델의 예측을 확인해보는거임.
- 이런 질문에도 YES 라고 대답한다면 YES 라는 편향을 가지고 있는 걸 알 수 있음.
- b) 이렇게 편향을 확인한 후에는 이를 보정하기 위해 보정 파라미터를 추가로 학습시킴.
- 보정 파라미터를 학습시키는 목적은 편향을 없도록 하기 위함임.
- 그리고 보정 파라미터를 학습시키는 건 전체 모델의 파라미터를 다시 학습시키는 걸 의미하진 않음. 모델은 그대로 두고 추가적으로 별도의 보정 파라미터를 적용해서 모델 출력을 조정한느 것.
- 출력 단계에서 추가적인 레이어가 하나 더 추가되는 걸 말함.
- a) 이를 위해 모델이 어떤 편향을 가지고 있는지 먼저 확인한다:
- 이런 이 문맥 보정(contextual calibration) 절차는 GPT-3 및 GPT-2 의 Few-shot 정확도를 크게 향상시켰다고 함.
Introduction:
- Few-shot learning이란 소수의 예시만 가지고 새로운 작업을 학습하는 능력을 말함.
- GPT-3는 사전 학습된 모델을 추가로 fine-tuning하지 않고도 소수의 예시를 기반으로 다양한 작업을 수행할 수 있다는 장점이 있음.
- GPT-3의 few-shot learning 성능은 매우 불안정할 수 있음. 프롬프트의 형식, 예시의 선택, 예시의 순서(순열) 가 결과에 큰 영향을 미침. 예를 들어, 감정 분석 작업에서 프롬프트에 나오는 예시들의 순서만 바꿔도 정확도가 54%에서 93%로 변화할 수 있다고 함.
- 이는 GPT-3 사용자가 수작업으로 프롬프트를 디자인할 때 일관된 정확도를 기대하기 어려움을 의미함.
- 연구진은 이러한 불안정성의 원인을 분석하면서, GPT-3가 몇 가지 편향(bias) 에 취약하다는 것을 발견함:
- 다수 라벨 편향(majority label bias): 프롬프트에 많이 등장하는 답변을 예측하려는 경향
- 최신 편향(recency bias): 프롬프트의 마지막에 등장하는 예시의 답변을 더 자주 예측하려는 경향
- 예를 들어, 프롬프트가 마지막에 “Negative”로 끝난다면, 테스트 입력에 대해서도 “Negative”로 예측할 가능성이 있음.
- 자주 등장하는 토큰 편향(common token bias): 사전 훈련 데이터에서 자주 등장하는 답변을 선호하는 경향
- 예를 들어, “United States”는 많이 등장하므로 선호되지만, “Saint Lucia”와 같은 답변은 드물게 등장하므로 선호되지 않는다는 문제임.
- 모델이 가진 여러 편향(majority label bias, recency bias, common token bias) 때문에, 모델이 예측하는 출력 분포가 왜곡된다고 함. 즉 특정 답변으로 기울어진 예측을 하게 됨:
- 예를 들어, 프롬프트에 “Amazing.” 대신 의미 없는 텍스트(예: “N/A”)를 넣었을 때 모델이 62% 확률로 “Positive”를 예측한다면, 이 모델은 “Positive”에 편향되어 있다는 것을 의미함.
- 보정(calibration) 방법:
- 이러한 편향을 해결하기 위해서 모델이 편향된 출력 분포를 보정(calibration) 하는 방법을 소개함.
- 테스트 입력을 제공할 때 내용이 없는 입력(N/A 같은 것) 을 사용하여 모델이 어떤 답변을 예측하는지 살펴봄.
- 이때 각 답변에 대한 확률 분포를 측정합니다. 위 예시에서는 “Positive”가 62%로 편향되어 있었음.
- 그 후, 보정 파라미터를 적용해, 이러한 편향이 발생하지 않도록 모든 답변에 대해 동일한 확률을 부여함. 즉, N/A에 대해 각 답변의 확률이 균일하게(예: 50% Positive, 50% Negative) 되도록 보정하는 것
- 이 문맥 보정(contextual calibration) 기법을 다양한 작업에서 테스트했으며, GPT-3와 GPT-2에서 최대 30%의 성능 향상을 달성했다고 함.
- 프롬프트 형식이나 예시의 선택이 바뀌더라도 성능이 일관되게 나왔고, 이는 프롬프트 엔지니어링의 필요성을 줄여줌.
- 이 보정 기법은 추가적인 학습 데이터 없이도 적용할 수 있다고 함. 즉, 모델을 재학습시키지 않고도 성능을 향상시키는 간단한 방법이라고 함. (대규모 LLM 을 사용하고 있다면 어려운 방법 같은데)
What Causes the High Variance?:
- 모델이 가진 편향에 대해 알아보자:
- Majority Label Bias (다수 라벨 편향):
- 다수 라벨 편향은 프롬프트에서 더 자주 등장하는 클래스(라벨)에 모델이 편향되는 경향임.
- 예를 들어, 감정 분석 작업에서 긍정적인 예시가 부정적인 예시보다 많다면, GPT-3는 긍정적인 감정을 더 자주 예측하는 경향이 있음.
- SST-2와 같은 균형 잡힌 데이터셋에서는 이러한 편향이 정확도에 부정적인 영향을 미침.
- 예시가 한 쪽으로 치우쳐 있으면, 모델이 그 라벨을 반복해서 예측하는 경향이 생기고, 이는 정확도의 하락을 초래할 수 있을 것.
- Recency Bias (최신 편향):
- 최신 편향은 모델이 프롬프트에서 뒤에 나오는 예시에 더 많은 영향을 받는 경향이 있음.
- 예를 들어, 프롬프트에서 마지막에 등장하는 두 개의 부정적인 예시가 있으면, 모델은 부정적인 클래스를 더 자주 예측하게 됨.
- 이 편향은 다수 라벨 편향보다 강하게 작용할 수 있습니다. 예를 들어, “P P P N” 과 같은 학습 예시에서 부정적인 예시는 하나뿐이지만, 모델은 90%의 확률로 부정적인 답을 예측하게 됨.
- 이 편향은 생성 작업에도 영향을 미쳐, 프롬프트 끝에 가까운 학습 예시일수록 더 자주 예측됨. 예를 들어, 학습 예시의 순서가 1번째, 2번째, 3번째, 4번째일 때, 각각 8.5%, 8.3%, 14.3%, 16.1% 더 많이 예측하게 된다.
- Common Token Bias (자주 등장하는 토큰 편향):
- 자주 등장하는 토큰 편향은 모델이 사전 훈련 데이터에서 자주 등장하는 단어에 편향된다는 거임.
- 예를 들어, LAMA 사실 검색 작업에서 모델은 “America” 와 같은 자주 등장하는 개체를 예측하는 경향이 있는데, 실제 정답은 드문 개체일 수 있음.
- 텍스트 분류 작업에서도 발생합니다. 각 클래스에 대응하는 레이블 이름이 사전 훈련 데이터에서 얼마나 자주 등장했는지에 따라 모델이 편향될 수 있다.
- 예를 들어, DBPedia 14개 주제 분류 작업에서 GPT-3는 “book” 클래스(레이블)를 “artist” 클래스보다 11배 더 자주 예측했음.
- 레이블 빈도와 예측 빈도 사이에는 0.67의 상관관계가 있음을 발견함.
Contextual Calibration:
- 문맥 보정(Contextual Calibration) 이라는 방법을 통해 GPT-3의 편향된 출력 확률을 조정하는 방법에 대해 배워보자.
- 보정 기법: Affine Transformation
- 보정(calibration) 은 모델이 내놓는 확률 분포에 affine 변환을 적용하는 방식으로 이루어짐. 이를 통해 모델의 예측을 수정한다.
- affine 변환을 적용한다는 것은, 모델이 출력한 원래의 확률 분포에 대해 가중치(W) 와 편향(b) 을 추가로 적용하여 새로운 확률 분포를 계산하는 과정을 말함.
- Affine 변환은 수학에서 선형 변환(linear transformation) 에 평행 이동을 추가한 변환임.
- 수식적으로는 다음과 같다:
q = softmax(Wˆp + b)
- ˆp: 모델이 원래 예측한 확률 분포
- W: 가중치 행렬. 모델이 예측한 확률 분포에 선형 변환을 적용. 이를 통해 특정 클래스나 토큰의 확률이 조정됨.
- b: 편향 벡터. 확률 분포에 더해지는 값으로, 출력이 더 원하는 방향으로 이동할 수 있도록 도와줌.
- softmax: 확률로 변환하는 함수. 이 함수는 수치들이 합이 1이 되도록 조정하여 새로운 확률 분포를 만든다.
- 추가 데이터 없이 보정 파라미터 학습하기:
- few-shot 상황에서는 추가적인 학습 데이터 없이 보정 파라미터인 W와 b를 학습해야 한다는 문제가 있음.
- 이를 해결하기 위해, 연구자들은 “N/A”와 같은 내용이 없는 입력을 사용하여 모델의 편향을 추정하는 방법을 제안한다. 이 입력을 통해, 모델이 특정 답을 더 자주 예측하는 경향을 파악하는 것.
- 예를 들어 “N/A” 라는 입력을 주면 모델은 50% 확률로 “Positive”와 “Negative”를 예측해야 하지만, 실제로는 61.8%가 “Positive” 로 나오는 편향이 생길 것.
- N/A 로 주는 예시는 다음과 같다 (감정 분석 예시):
- Input: Subpar acting. Sentiment: Negative
- Input: Beautiful film. Sentiment: Positive
- Input: N/A Sentiment:
- 보정 절차는 다음과 같다:
- a) 내용이 없는 입력에 대한 확률 분포 ˆpcf를 계산
- 이 확률 분포를 통해 모델이 내재적으로 가지고 있는 편향을 파악
- b) W = diag(ˆpcf)^-1로 설정하고, b는 0으로 설정
- 모델이 너무 자주 예측하는 답변(예: 긍정적 70%) 에 대한 확률을 낮추고, 덜 예측하는 답변(예: 부정적 30%) 의 확률을 높여주는 역할을 함.
- b는 추가적인 편향 이동을 조정하는 값인데, 이 과정에서는 b를 0으로 설정하여 따로 조정하지 않겠다는 뜻임.
- c) 이를 통해 Wˆp + b를 계산하여 최종 예측을 보정하고, 그중 확률이 가장 높은 값을 선택 (argmax)
- W와 b를 이용해 모델이 내놓은 원래의 예측 값(ˆp)을 조정
- 모든 보정이 끝나면, 이제 가장 높은 확률을 가진 답변을 선택. 이 과정에서 argmax라는 수학적 용어를 쓰지만, 쉽게 말하면, 조정된 확률 분포 중에서 가장 높은 값을 선택하는 거임.
- a) 내용이 없는 입력에 대한 확률 분포 ˆpcf를 계산
- 구현 세부 사항:
- 이 문맥 보정 과정은 계산 비용이 거의 들지 않으며, 몇 줄의 코드로 쉽게 구현할 수 있다고 함.
- 이를 위해 먼저 내용이 없는 입력을 통해 ˆpcf를 계산하고, 이 값을 기반으로 출력 확률을 조정하는 과정을 거칠거임.
- 내용 없는 입력으로는 “N/A”, 빈 문자열, 의미 없는 토큰 등을 사용할 수 있음.
Results for Contextual Calibration:
- 평균 및 최악의 경우 정확도 개선:
- 문맥 보정은 GPT-3의 평균 정확도와 최악의 경우 정확도를 크게 향상시켰다고 함. 최대 30% 향상
- GPT-3 2.7B 모델은 크기가 훨씬 큰 GPT-3 175B 모델을 능가할 수 있었다고도 한다.
- 보정은 분류 및 생성 작업 모두에서 긍정적인 효과를 보였다고 함.
- 학습 예시 간의 변동성 감소:
- 다양한 작업에서 문맥 보정을 비교한 결과, 정확도의 표준 편차(변동성) 가 크게 줄어드는 것을 보여줄 수 있었다고 함.
- 0-shot에서 1-shot로 전환 시 성능 저하 감소:
- 0-shot에서 1-shot로 전환할 때, 몇몇 작업에서 정확도가 떨어지는 문제가 있었다고 함.
- 이는 다수 라벨 편향(majority label bias) 때문이라고 설명되었는데 그 예시에 지나치게 의존하는 경향 때문임.
- 문맥 보정을 적용한 후, 네 가지 작업 중 세 가지에서 이러한 정확도 저하가 제거되었다고 한다.
- 소수의 학습 예시가 있을 때 발생하는 편향 문제를 해결하는 데 효과적임을 보여줌.
- GPT-2에서도 효과적
- GPT-3뿐만 아니라, GPT-2 1.5B 모델에서도 문맥 보정이 효과적이었음.
문맥 보정 방법을 OpenAI GPT 에서도 적용할 수 있을까?
- 가능하다. OpenAI GPT-4 API에 접근해서 편향 확률 분포를 얻어오면 됨. OpenAI 에서는 토큰의 로그 확률 분포도 얻어올 수 있음. 이걸로 편향 확률 분포를 계산하면 된다.
- 그리고 OpenAI API의 logit_bias 파라미터를 이용해서 보정을 하는 방법도 있을거임. 이 파라미터는 모델의 출력 확률(로짓) 에 직접적인 영향을 미쳐, 특정 토큰에 대한 확률을 증가시키거나 감소시키는 방식으로 작동함. 보정을 적용하는 원리와 유사하게 해볼 수 있을거임.
감정 분류와 같은 작업 말고 텍스트 생성에서는 어떻게 편향을 알아내고 적용할 수 있을까?
- "N/A” 같은 입력을 주었을 때, 모델이 특정 토픽이나 단어를 반복해서 생성하는지 확인하는 방법으로 편향을 알아낼 수 있을거임.
- 아니면 모델에게 "Write about space exploration.“이라는 프롬프트를 여러 번 요청한 후 어떤 단어가 주로 발생하는지 알아보거나.
- 이렇게 알아보는 건 비용이 많이 들 수 있음. 특히 모델이 생성하는 토큰이 많고, 그 중에서 어떤 토큰이 편향을 가질 수 있는지를 모두 확인하는 것은 복잡하고 시간이 많이 걸릴 수 있으니.
- 그레서 텍스트 생성 작업에서는 전반적인 확률 분포 조정를 조정하는 방법을 쓰긴함. temperature 나 topK, topP 를 써서.
- 근데 이것도 다양한 답변을 얻을 수 있다는거지, 편향을 해결해서 논리적인 답변을 얻는 건 아니긴 함.
'Generative AI > Prompt Engineering' 카테고리의 다른 글
Reordering Examples Helps during Priming-based Few-Shot Learning (0) | 2024.10.02 |
---|---|
Explanation Selection Using Unlabeled Data for Chain-of-Thought Prompting (0) | 2024.10.02 |
A Survey on In-context Learning (1) | 2024.09.30 |
Fantastically Ordered Prompts and Where to Find Them:Overcoming Few-Shot Prompt Order Sensitivity (0) | 2024.09.30 |
What Makes Good In-Context Examples for GPT-3? (0) | 2024.09.30 |