GPT fine-tuning - 6. prompt

Dongyoung Kim·2023년 3월 7일
1

GPT

목록 보기
7/12
post-thumbnail

🐰 Dongyoung:
GPT-3 에서 prompt 를 few-shot learning 관점에서 설명해줘

🦄 ChatGPT:
GPT-3는 few-shot learning을 통해 새로운 작업을 수행하는 데도 강점을 가지고 있습니다. Few-shot learning은 제한된 양의 학습 데이터에서 작업을 수행하는 데 필요한 지식을 모델이 습득할 수 있도록 돕는 방법입니다.

GPT-3에서 prompt는 few-shot learning을 사용하여 새로운 작업에 대한 지식을 모델에 입력하는 데 사용됩니다. Prompt는 일반적으로 훈련 데이터 세트와 관련된 텍스트를 포함하며, 이를 통해 모델은 작업을 수행하는 데 필요한 지식을 습득할 수 있습니다.

예를 들어, GPT-3가 "번역"이라는 새로운 작업을 수행해야 할 경우, "번역"이라는 키워드와 함께 몇 개의 예시 문장을 prompt로 제공할 수 있습니다. 이러한 prompt를 통해 모델은 작업에 필요한 언어 모델링 및 문장 번역 지식을 습득할 수 있습니다.

GPT-3는 매우 큰 양의 데이터를 사용하여 학습되었으며, 이를 통해 prompt와 같은 few-shot learning 기술을 사용하여 새로운 작업에 대한 지식을 습득하고 높은 정확도로 작업을 수행할 수 있습니다.

GPT 의 in-context learning 은 HMM 모델로서 모델의 weight update 가 없음에도 그 inference 과정 자체를 하나의 학습 과정으로 볼 수 있었습니다. 즉 prompt 행위 자체가 어쩌면 GPT 모델에 대한 optimizaiton 을 수행하는 과정이라고도 생각할 수 있겠습니다. 그럼 어떻게 prompting 해야 in-context learning 에 성공할수 있을까? 라는 의문이 듭니다. 이에 prompt engineering 이라는 새로운 단어가 등장하고, 이에 대한 강의 가이드, 논문들이 많이 나오고 있습니다 (https://github.com/dair-ai/Prompt-Engineering-Guide).

prompting and in-context learnig

앞선 포스트에서 in-context learning 은 많은 예시로서 더욱 강화될 수 있다는 점을 HMM 모델 관점에서 설명하였고, 다량의 예시는 bayesian signaling 으로서 작용될 수 있다는점을 보여주었습니다. signaling 을 많이 줄수 있는 prompting 을 할 수 있다면 in-context learning 을 더 효과적으로 수행할 수 있을 것으로 보이고, 이에대해 What Makes In-Context Learning Work? 논문에서 설명하고 있습니다. (Min, S., Lyu, X., Holtzman, A., Artetxe, M., Lewis, M., Hajishirzi, H., & Zettlemoyer, L. (2022). Rethinking the Role of Demonstrations: What Makes In-Context Learning Work? https://doi.org/10.48550/arxiv.2202.12837)

prompt architecture

위 논문에서 in-context learning 을 위한 prompt 의 구조는 여러 예제들 (demonstrations) 와 하나의 테스트 예시(text example) 를 가집니다. 이때 예제는 다음의 구조로 설계합니다.

  • 입력값 (distrobution of inputs)
  • 결과값 (label space)
  • 입력 및 결과 간의 양식 (format)
  • 입력과 결과 (input-label mapping)

위 프롬프트 구조 하에 본 논문에서 제안하는 프롬프트 잘 쓰는 법은 다음과 같습니다

  1. 포멧을 일관성 있게 가져갑니다.
  2. 많은 예시는 많은 bayesian signaling 을 유도 합니다. 즉 예시를 많이 써야 합니다. (아마도 8개 이상?)
  3. 예시 작성에 있어 쌩뚱맞은 예시는 지양합니다. 일관성 있는 주제의 예시가 좋습니다. 일관성이 없는 예시는 in-context learning 에 노이즈로 작용될수 있습니다.
  4. 예시 작성에 있어 그 결과 값 또한 일관성을 가져야 합니다. 결과 값의 일관성은 in-context learing 의 결과에 크게 도움이 됩니다 (역으로 일관성이 없어지면 성능이 매우 떨어집니다).
  5. 예시 작성에 있어서 그 포멧만 일관성이 있다면 그 내용의 사실유무는 결과와 크게 관계 없습니다. 즉 틀린 내용을 적더라도 크게 문제되지 않습니다.

즉 성공적인 in-context learning 을 위해서는 일관성 있는 많은 예시를 주고 질문을 해야하며, 그 예시의 정확성 및 정합성은 따지지 않고 많은 예시를 작성해야한다고 볼 수 있습니다. 이를 해석해보면 in-context learning 은 그 task 에 대한 형식 및 방법 (앞선 mixture of hmm 모델에서 feature 에 대입되는 내용) 이 중요하고, 그 사실 여하는 gpt 가 가지는 parametric memory 에 의존하기에 딱히 중요하지는 않다 정도 일지도 모르겠습니다. 본 논문에서는 이에 대해 직접적으로 증명은 불가하고, 다만 경험적으로 (empirical) 증명을 하고 있습니다.

gold labels vs random labels vs flipped labels

예시 작성에 있어서 그 포멧만 일관성이 있다면 그 내용의 사실유무는 결과와 크게 관계가 없다고 하였습니다. 아래는 이에 대한 경험적 결과로, 다음의 여러 모델에 대해 테스트되었습니다. 모델별로 그 차이가 있기는 하지만 zero-shot (no demos) 에 대비하여 demo 가 있을경우 그 성능이 향상되며, 입력에 대한 결과 레이블이 정확할때 (gold) 가장 좋은 성능을 가지지만 random 이라고 해서 크게 성능이 떨어지지는 않는 신기한 결과를 보여주고 있습니다. 단 성능 향상에 있어 그 전제 조건은 해당 모델이 여러 언어 테스크에 대한 hmm 의 집합이 될 수 있어야 한다는것 (meta-trained or multitask instruction trained or 초거대) 입니다.

modelsresults

다만 random label 실험은 오해의 소지가 있는듯 합니다. gold label 이 아닌, 인위적으로 만든 flipped label 의 경우 in-context 의 인위적인 내용을 학습할 수 있다는 보고도 있습니다 (https://arxiv.org/abs/2303.03846). 이러한 리포트들에 대해 개인적으로 해석해보자면 random 은 틀린 내용, 즉 task 입장에서 match 되는 내용이 없기에 무시된것으로 보이고, flipped label 은 그 규칙이 hmm 에 대입될수 있어서 in-context learning 이 되어진것이 아닌가 싶습니다.

number of examples

몇개의 예시를 줘야 할까? 에 대한 것은 앞에 제시한것처럼 다다 익선이고, 그 task 에 따라 달라지게 되겠지만, 아래는 예시의 갯수 (kk) 별 그 성능 차이를 보여줍니다. gold / random 으로 비교된것은 예시에 대한 정답 가/부 로 정답이 아니더라도 classifcation 및 multi-choise task 에 있어 예시의 수가 8개 이상 넘어가면 in-context learning 이 잘 작동함을 보여줍니다.

prompt distribution

in-context learning 의 prompt 도 bayesian inference 과정에서 사용되는 학습 데이터이기에 그 prompt 의 data distribution 이 중요합니다. 여기에서 신경써야할 data distribution 은 예시의 input 에 대한 일관성 있는 주제 뿐만 아니라 output 에 대한 일관성 있는 대답, 예를 들면 yes, no 라면 그 두개만, multiple choice 라면 multiple choice 범위 내에서만 등, 을 유지해야만 한다는것입니다. 아래 figure 는 input 및 output 의 data distribution 이 off 되었을대 in-context learning 에 실패하는것을 보여줍니다.

inputoutput

prompt format

prompt format 을 잘 지키는것도 중요합니다. 아래 실험결과를 보면 데이터가 말이 안되도 그 포멧과 input 데이터 분포만 맞춰도 성능이 잘나올수 있다는걸 보여주고 있습니다.

examples

위 내용을 바탕으로 in-context learning 테스트를 수행해보고자 합니다. 아래 예시는 in-context learning 을 이런식으로 쓰면 되겠다 정도의 예시로 실전 사용에는 더 많은 테스트가 필요할것 같습니다.

다음은 R: <내용> 바탕으로 Q: <질문> 에 대해 A: 네. \n/아니오. \n 로 대답하는 task 입니다.

R: 잔액증명서를 당일자로 발행한 경우에는 증명서발급 당일은 입출금거래를 하실 수 없습니다. Q:잔액증명서 발급 후 입출금거래가 가능한가요? A: 아니요. \n
R: 미성년자 신규 개설시 반드시 법정대리인에 의해서만 신규 가능 합니다. 은행예금의 경우 미성년자 본인이 내점하여 실명증표를 제시하면 신규개설이 가능하나, 증권계좌의 경우 증권사의 내규에 의거 반드시 법정대리인에 의한 경우에만 신규개설 할 수 있습니다. Q: kb증권통장은 미성년자는 가입할 수 있나요? A: 네. \n
R: 예금 신규는 서명으로 가능합니다. 다만, 아래예금에 대해서는 서명에 의한 거래가 불가능합니다.서명거래제외예금 : 예금주 본인 이외의 거래, 당좌.가계당좌예금,법인 및 단체명의예금, 공동명의예금. Q: 예금을 신규하려고 합니다. 도장이 없는데 서명으로도 가능한가요? A: 네. \n
R: 비과세가계신탁의 만기가 도래한 경우「만기후 분할인출제도」를 이용할 수 있습니다. 즉, 자금필요에 따라 필요한 금액만큼 일부인출 할 수 있습니다. Q: 비과세가계신탁에 가입하였습니다. 만기경과후 분할해지가 가능한가요? A: 네. \n
R: 국민은행 모든지점에서 웨스턴 유니온 송금이 가능합니다. Q: 국민은행 모든 지점에서 웨스턴 유니온 송금이 가능하나요? A: 네. \n
R: 예금잔액증명서의 발급은 예금주 본인에 의한 발급신청이 원칙입니다. Q: 본인이 아닌데, 예금 잔액증명서 발급 가능한가요? A:

위 내용을 바탕으로 다음 모델에서 테스트 해본 결과 입니다.

hyperclova

Hyperclova는 네이버 블로그의 글이 많이 학습되어 그런지, zero-shot 의 질문에는 다량의 블로그 스타일 할루시네이션이 발생합니다. In-context learning 은 아래와 같이 잘 작동하네요.

hyperclova

deepL + bloomz

bloomz 는 한글이 되지 않기에 deepL 의 번역을 붙여 보았습니다. 둘다 잘 작동합니다. 1.7B 는 마침표를 놓치긴 했습니다.

bloomz (176B)
bloomz (1.7B)

gpt-3 (curie/ada)

gpt 는 curie, ada 모두 잘 되고 한글 영문 잘됩니다.

gpt-3 curie
gpt-3 ada 한글

chatGPT

ChatGPT는 yes/no 가 아닌 시스템의 parametric memory 기반으로 덧붙여 답하는데, chatGPT 가 사실 맞습니다 (제가 예시를 줄이면서 지운 사실입니다). 즉 chatgpt의 output은 주어진 prompt에 대한 온전한 모델의 것은 아닌것 같습니다. 앞에 in-context learning 을 위한 추가적인 프롬프트가 더 붙고, 앞뒤로 chat 을 위한 별도의 시스템이 존재하는듯 보입니다. 다만, 그런것으로 인해 보여주는 parametric 정보가 실제 상황과 잘 align 되는걸 보면, 이 모델의 학습 상태가 엄청나다고밖엔 할수 없겠습니다.

chatGPT

prompt engineering

위 내용은 in-context learning 을 bayesian inference 라고 가정하고, 이에 있어 특정 프롬프트 디자인 내에 여러 효과성에 대해 경험적인 증명을 한 것입니다. 다양한 테스트를 통해 검증하였지만 일반화하기에는 여전히 하나의 케이스 스터디라는 점은 유의해서 생각해봐야겠습니다.

이 외에도 프롬프트 작성에 대한 여러가지 방법론은 prompt engineering 이라는 이름으로 소개되고 있습니다 (https://github.com/dair-ai/Prompt-Engineering-Guide). 이런 접근법이 옳고 그르다는 점을 떠나서, 좋은 결과를 내기위한 효과적인 방법을을 소개하는것이고, 이는 사람이 모델에 최적화 되는 과정처럼 보이기도 합니다.

앞으로의 post 에서는 chat 및 search application 을 만드는 관점에서 fine tuning (parametric memory), in-context learning (non-parametric memory), prompt engineering 의 조합 및 그 시스템을 설계하는 과정을 적어보려 합니다.

Referneces

profile
AI professional for science and industry

0개의 댓글