Search

Prompt

대분류
인공지능/데이터
소분류
LLM 정리 노트
Prompt Engineering
유형
Prompt
LLM
부유형
Introduction Prompt
최종 편집 일시
2024/12/13 07:38
생성 일시
2024/10/24 00:24
14 more properties

Prompt란?

ChatGPT를 사용해 과제나 리포트 작성을 할 때, 원하는 방향으로 답변이 나오도록 여러가지 입력을 준 경험이 한 번씩 있다면, "프롬프트(Prompt)를 잘 줘야 ChatGPT가 대답을 잘해줘"라는 말을 들은 경험도 있을 것이다.
즉, 프롬프트(Prompt)란 ChatGPT 모델이 사용자가 원하는 답변을 내뱉기 위해 주는 적절한 입력값이다.
이러한 프롬프트(Prompt)를 사용해서 모델의 추론/학습에 관여하는 프롬프트 엔지니어링(Prompt Engineering)프롬프트 튜닝(Prompt Tuning) 등이 활발히 연구되고 있다.

프롬프트 생성 방법

프롬프트 생성방법에 따라 크게 Manual-Search Prompt 또는 Auto-Search Prompt로 나눌 수 있다.

Manual-Search Prompt

초기에는 주로 메뉴얼한 방식으로 각 테스크마다 적절한 프롬프트를 찾아주었는데, 대표적인 예로는 PET(Schick and Schutze., EACL'20)에서 사용한 Verbalizer를 들 수 있다.
감성분석(Sentiment Classification) 테스크를 BERT, RoBERTa와 같은 Masked Language Model(MLM) 기반의 사전학습 모델에서 수행한다고 할 때, 기존에는 "Best pizza ever!"만을 가지고 긍정적인 감정임을 학습해야 했다.
그러나, 해당 논문에서는 기존 입력과 함께 "It was [MASK]"라는 탬플릿을 모델에게 주어 [MASK]에 등장해야 하는 단어가 긍정 단어인 great로 예측될 확률을 높이며 학습하게 하였다.

Auto-Search Prompt

Manual-Search Prompt의 경우 직관적이고, 모델 학습에 효과적이지만 적절한 프롬프트를 찾기까지에 시간이 많이들고, 프롬프트를 생성할 사람에 따라 편차가 크다는 문제점이 있다.
이에 자동적으로 프롬프트를 찾는 방법인 Auto-Search Prompt가 연구되기 시작했다.
대표적인 논문으로 AutoPrompt(Shin et al., EMNLP'20)가 있다.
감정 분석 테스크를 MLM 기반의 모델에서 수행한다고 할 때, PET 논문에서는 직접 사람이 테스크마다 프롬프트를 정의했지만, AutoPrompt에서는 정답 레이블의 확률이 가장 높아지는 토큰을 찾아 이를 프롬프트로 정의한다.
기존에는 하나의 정답지만 학습했다면 지금은 여러 개의 정답지를 학습시키는 것이다.

프롬프트의 형태에 따른 학습 방법

Hard Prompt vs. Soft Prompt

프롬프트는 크게 Hard Prompt와 Soft Prompt로 나눌 수 있다.
Hard Prompt
자연어 형태의 이산적인(Discrete) 값을 가진다.
언어모델은 이산적인 값이 아닌 연속적인 값으로 학습되기 때문에 Hard Prompt는 최적화되지 않은 단점이 있다.
Soft Prompt
Soft Prompt는 실수(혹은 실수 값으로 구성된 벡터)로 이루어진 연속적인(Continuous) 값을 가진다.
input 앞에 튜닝이 가능한 임베딩 조각(tunable piece of embedding)이 붙게 된다.
이 임베딩 조각은 실수(Real Number)로 이루어진 연속적인(Continuous) 값으로 학습되고, 기존의 Hear Prompt 학습에 비해 더 효과적인 학습이 가능하다.
왼쪽에 있는 그림은 Hard Prompting을 나타낸다.
설명
Hard Prompting에서는 고정된 텍스트 템플릿을 사용하여 입력 문장에 추가적인 정보를 제공하는 방식이다.
예시에서는 "It is [MASK]"라는 템플릿을 사용하여 입력 문장에 빈칸을 만들고, 모델이 해당 빈칸에 들어갈 적절한 단어(레이블에 해당하는 단어)를 예측하도록 한다.
구체적인 예시
Input: "I will definitely watch it again."
Prompting: "It is [MASK]"
여기서 [MASK]는 모델이 추측해야 할 부분이며, 이 예제에서는 긍정적인 감정(예: "great")으로 채워질 것이다.
모델이 예측한 값이 [MASK]에 들어갈 단어가 되며, 그 단어를 통해 문장의 감정을 예측한다.
오른쪽의 그림은 Soft Prompting을 나타낸다.
설명
Soft Prompting은 고정된 텍스트 템플릿 대신, 학습 가능한 임베딩을 입력에 추가하는 방식이다.
모델이 학습 과정에서 이 추가적인 임베딩을 조정하면서 더 나은 성능을 낼 수 있도록 한다.
입력 문장은 그대로 두되, 앞에 학습 가능한 임베딩 벡터가 붙는다.
구체적인 예시
Input: "I will definitely watch it again."
Prompting: 입력 문장 앞에 학습 가능한 임베딩 벡터가 추가된다.
이 벡터는 모델이 학습 과정에서 최적화할 수 있으며, 고정된 템플릿을 사용하는 대신 더 유연한 방식으로 모델을 훈련시킨다.

Sfot Prompt + Frozen Pre-trained Model

대표적인 연구로는 Prompt Tuning과 Prefix Tuning이 있다.
두 논문 모두 Soft Prompt를 이용해 기존의 파인튜닝 대비 효과적인 학습이 가능하다는 점을 주요 포인트로 하고 있다.
Prompt Tuning(그림 A)
사전학습모델(Pre-trained Model)을 이용하여 A, B, C 테스크를 수행한다고 할 때, 기존의 Model Tuning 방법과 제안 방법인 Prompt Tuning을 비교해서 보여주고 있다.
Model Tuning (모델 튜닝)
설명
모델 튜닝은 각 작업(Task)에 대해 모델을 따로 미세 조정하는 방법이다.
예를 들어, Task A, Task B, Task C와 같은 서로 다른 작업마다 해당 작업에 맞게 각각 모델을 튜닝한다.
특징
사전 학습된 모델(Pre-trained Model, 11B 파라미터)을 기반으로 각 작업에 맞게 전체 모델을 미세 조정한다.
각 작업마다 새로운 모델을 생성해야 하기 때문에 모델 크기가 크며, 작업이 많아질수록 모델 저장 공간과 시간이 많이 필요하다.
Prompt Tuning (프롬프트 튜닝)
설명
프롬프트 튜닝은 동일한 사전 학습된 모델을 사용하되, 작업마다 작은 프롬프트 벡터를 학습시키는 방식이다.
즉, 사전 학습된 큰 모델을 그대로 두고, 프롬프트만 조정하여 여러 작업을 해결한다.
특징
사전 학습된 모델(11B 파라미터)은 고정되어 있으며, 작업마다 프롬프트(20K 파라미터)를 조정한다.
작업별로 프롬프트만 학습하므로 훨씬 적은 파라미터를 다룬다.
이는 메모리 효율이 높으며, 여러 작업을 동시에 처리할 수 있는 장점이 있다.
Prefix Tuning(그림 B)
다양한 테스크를 수행한다고 할 때 기존 Fine-tuning 방법은 각 테스크마다 모델 전체 파라미터를 업데이트 해야한다는 문제점을 이야기하고 있다.
Fine-tuning (파인 튜닝)
설명
Fine-tuning은 사전 학습된 모델의 모든 파라미터를 작업에 맞춰 조정하는 방법이다.
예를 들어, 번역, 요약, 테이블-텍스트 변환 같은 다양한 작업을 수행하기 위해 모델의 파라미터를 조정한다.
특징
각 작업마다 전체 모델을 조정하므로 파라미터 수가 크다.
모델을 특정 작업에 맞게 완전히 맞춤화할 수 있지만, 작업이 달라질 때마다 모델 전체를 미세 조정해야 하기 때문에 연산 비용이 크다.
각 작업에 대해 개별적으로 모델을 저장해야 하므로 메모리 소모가 많다.
Prefix-tuning (프리픽스 튜닝)
설명
Prefix-tuning은 사전 학습된 모델의 파라미터를 변경하지 않고, 입력 앞에 학습 가능한 프리픽스(prefix)를 추가하여 모델을 조정하는 방법이다.
이 프리픽스는 입력과 함께 모델로 전달되며, 이를 통해 특정 작업에 맞게 출력을 조정한다.
특징
모델의 나머지 부분은 고정되어 있으며, 프리픽스(작업에 맞춘 벡터)만 학습된다.
사전 학습된 모델을 그대로 유지하면서도 작업마다 다른 프리픽스를 사용하여 다양한 작업을 처리할 수 있다.
메모리 사용량과 연산 비용이 절감된다.
두 논문에서는 학습 가능한 Soft Prompt를 이용하여 테스크마다 개별로 모델 전체 파라미터를 업데이트 할 필요없이 프롬프트만 업데이트하여 효율적인 학습을 가능하게 했다.
모델에 들어가는 입력 데이터(input data)를 사람이 읽을 수 있는 설명(human readable instructions)으로 잘 작성된 텍스트와 연결하여 수정하게 되는데, 이때 만들어지는 텍스트를 프롬프트(prompt)라고 한다.
프롬프트는 task-specific하게 훈련되지 않아도 사전학습 언어모델(PLM, Pre-trained Language Model)이 새로운 테스크(e.g. 질의응답, 기계번역 등)에 대해서 잘 수행되도록 한다.
즉, 단지 자연어로 모델이 어떤 일을 수행해야 할지 알려주는 것만으로도 별도의 추가훈련 없이 새로운 테스크를 좋은 성능으로 수행할 수 있다.
Prompt-based learning 목적 : 프롬프트의 도움을 받아 사전학습된 지식을 최대한 활용하자

Prompt-based Learning Method

Step 1: Prompt Addition (프롬프트 추가)

설명
먼저 기존의 입력값(x)가 prompt function을 통과하게 되면, 사전에 정의해둔 패턴 형식인 prompt x'로 바뀌게 된다.
이때 사전에 정의해둔 형태를 prompt template이라고 하게 된다.
해당 template은 언어모델이 특정 테스크를 풀 수 있도록 기존의 입력값 형태를 바꿔주는 것
예로 언어모델이 MLM(Masked Language Model) 기반이라면 입력값이 적절한 변형과 <MASK> 토큰을 넣어주게 된다.
입력 값
예시로 "이용 가능한 데이터 수가 증가함에 따라 IT 산업도 함께 성장하고 있습니다. 최근 한국 10대 IT 기업은 데이터에 따른 기술 확보 및 확장에 힘쓰고 있습니다."라는 문장이 주어짐.
프롬프트 함수 fprompt(x)f_{prompt}(x)
입력 문장 x에 특정 프롬프트를 추가하는 단계
이 프롬프트는 모델이 답을 찾기 쉽게 힌트를 제공하는 역할을 한다.
예시 프롬프트: "이 기사는 [z]에 관한 내용입니다: [x]"
여기서 [z]는 모델이 예측해야 할 답변 자리이고, [x]는 주어진 입력 문장이 그대로 들어간다.
출력값 : 생성된 프롬프트
최종적으로 생성된 문장은 다음과 같다:
"이 기사는 [z]에 관한 내용입니다: 이용 가능한 데이터 수가 증가함에 따라..."

Step 2: Answer Search (답변 검색)

prompt function을 통과한 값 x'은 언어모델을 통해 prediction되며 결과는 언어모델의 vocab에 존재하는 단어인 z로 나오게 된다.
Answers zz
모델은 여러 가지 가능한 답변 후보(예: "경제", "복지", "기술", "여행", "문화" 등) 중에서 가장 적절한 답을 선택하게 된다.
Language Model (언어 모델)
사전 학습된 언어 모델이 입력된 프롬프트에 맞는 답을 확률적으로 계산한다. 모델은 주어진 문맥을 바탕으로 가장 적절한 답을 찾는다.
이 모델은 확률 P(zθ)P(z∣θ)에 따라 답변 후보 중에서 가장 적합한 답변을 예측한다.
Most Likely Answer (최적 답변)
모델이 가장 높은 확률로 예측한 답변은 "기술"이다.
여기서 "기술"이라는 답은 주어진 입력 문장의 주제와 관련된 정보로 판단된다.

Step 3: Answer Mapping (답변 매핑)

해당 값 z를 테스크의 레이블링 값으로 변환해주는 과정을 거쳐 최종 아웃풋인 y를 얻게 된다.
Class Label y
답변 후보가 주제별로 분류되며, 예를 들어 "비즈니스", "스포츠", "과학", "글로벌"과 같은 분류 레이블이 있다.
Answer Mapper (답변 매퍼)
모델이 예측한 답변 "기술"을 특정 카테고리로 매핑한다.
예를 들어 "기술"이라는 답변이 "과학"이라는 클래스로 매핑된다.
최종 출력
모델이 최종적으로 출력한 값은 "과학"이다. 이는 입력 문장이 "과학"과 관련된 내용이라고 판단한 결과이다.

Prompt Based Learning의 필요성

1.
기존의 접근 방식: Pre-train과 Fine-tune
a.
Pre-train (사전 학습)
언어 모델을 대량의 텍스트 데이터로 미리 학습시키는 단계
예: GPT-3, BERT 등이 있다.
b.
Fine-tune (파인튜닝)
사전 학습된 모델을 특정 작업(예: 감정 분석, 번역 등)에 맞추기 위해 추가로 학습시키는 단계
문제점:
레이블링된 데이터 필요: 파인튜닝을 위해서는 정답이 표시된(레이블링된) 데이터가 필요
비용과 시간: 데이터를 직접 수집하고 라벨링하는 데 많은 시간과 비용이 든다.
데이터의 한계: 무료로 사용할 수 있는 레이블링된 데이터는 한정적이다.
2.
Prompt-Based Learning의 등장
Prompt-Based Learning은 모델을 추가로 학습(fine-tuning)시키지 않고, 입력 문장을 적절히 설계(prompt)를 통해 원하는 작업을 수행하도록 하는 방법
장점
파인튜닝의 한계 극복: 추가 학습 없이도 모델을 다양한 작업에 활용할 수 있다.
비용 절감: 레이블링된 데이터가 필요 없거나 매우 적기 때문에 비용과 시간을 절약할 수 있다.
유연성: 다양한 작업에 쉽게 적용할 수 있다.
3.
Zero-shot과 Few-shot Learning
Zero-shot Learning (제로샷 학습)
모델이 새로운 작업을 수행할 때, 전혀 추가 학습 데이터 없이도 결과를 도출하는 방법
Few-shot Learning (퓨샷 학습)
모델이 새로운 작업을 수행할 때, 아주 적은 양의 학습 데이터(예: 몇 개의 예시)만으로도 좋은 성능을 내는 방법
장점
추가 데이터 불필요: 많은 레이블링된 데이터가 필요 없거나 전혀 필요하지 않다.
다양한 작업 수행 가능: 하나의 모델로 여러 가지 작업을 수행할 수 있다.
OpenAI가 발표한 GPT-3는 어마어마한 규모와 더불어 뛰어난 성능을 자랑함
in-context learning과 prompting이라는 새로운 패러다임을 제시

Traditional | Fine-tuning

파인튜닝 : 원하는 태스크에 특화된 지도학습 데이터셋을 학습시킴으로써 사전학습된 모델(Large Pretrained Language Model)의 가중치(weight)을 업데이트하는 방법
가중치를 업데이트한다는 것 = 원하는 태스크에 맞는 언어적 특징을 학습한다는 것을 의미
태스크 예시: 감정분석, 기계번역, 요약, 질의응답 등
지도학습이기 때문에 정답이 라벨링이 된 굉장히 많은 수의 데이터들이 사용됨
굉장히 좋은 성능을 보여주지만, 여러 가지 한계가 존재
매 태스크마다 새로운 큰 규모의 데이터셋이 필요
일반화가 잘 되지 않는(poor generalization) 문제가 발생할 수 있음
언어에 대한 일반적인 지식을 학습한 pretrained model의 파라미터를 원하는 태스크에 맞춰 조정하는 과정에서 일반화 성능이 감소할 수 있음

In-context Learning

인컨텍스트 러닝 : 언어모델의 인풋 앞에 자연어 태스크에 대한 설명과 몇 가지 예시를 더해 모델에 넣으면, 언어모델이 태스크에 맞는 아웃풋을 생성하는 새로운 학습방법
자연어 이해 및 생성에 있어서 언어모델의 예측을 도울 수 있도록 인풋 컨텍스트에 특별한 템플릿을 사용하는 것을 의미
가중치(weight)의 업데이트가 일어나지 않음
대량의 데이터셋이 필요하지 않음

Few-shot(2개 이상)

언어모델이 추론(inference)을 할 때, 태스크에 대한 몇 개의 demonstration(예시)이 주어짐
장점
태스크에 특화된 데이터의 필요성을 감소시킴
파인튜닝의 문제점으로 꼽히는 (narrow distribution의 학습으로 인한) 일반화 성능 감소의 가능성을 낮춰줌
사전학습된 모델에 내재되어 있는 태스크들 사이의 넓은 분포를 학습하고(=일반화 성능을 놓치지 않으며), 새로운 태스크에 빠르게 적응
단점
SOTA(state-of-the-art) 파인튜닝에 비해 성능이 다소 떨어짐
여전히 태스크 특화 데이터가 일부 필요

One-shot(1개)

Few-shot과 유사하지만 오직 하나의 demonstration(예시)만 허용
사람이 자연어 테스크를 수행하는 방식과 유사
예) 우리는 "이 영화 완전 노잼"이라는 문장을 bad로 분류하라는 하나의 예시만 보더라도, 다른 여러 영화 리뷰에 대해서 "good" 혹은 "bad"로 분류할 수 있음

Zero-shot(0개)

demonstration(예시)이 없고, 태스크를 설명하는 자연어 설명(instruction)만 주어짐
굉장히 편리하지만 가장 어려우며, 1S과 마찬가지로 사람이 하는 방식과 굉장히 유사
예) 우리는 "I am a boy"라는 문장을 한국어로 번역하라 라는 instruction만 보고서도 "나는 소년이다"라는 문장을 만들어냄

Prefix-Tuning

Prefix Tuning은 이전의 연구에서 더 나아가, 인풋의 앞에 prefix, 즉 일련의 연속적인 태스크 특화 벡터(a sequence of continuous task-specific vectors)를 붙이는 방식
prefix 뒤에 이어지는 토큰들은 앞에 나온 prefix를 일련의 가상의 토큰인 것처럼 attend
prefix는 prompt와는 다르게 실제 토큰(=자연어 단어)과 대응되지 않는 free parameter
prefix tuning의 가장 큰 장점은 NLG(자연어 생성) 태스크에서 LM(언어모델)의 파라미터 변경 없이도 모델이 적절한 컨텍스트를 취하도록 할 수 있다는 점

P-Tuning

파란색으로 표시된 Britain이 context, 빨간색으로 표시된 [MASK]가 target, 나머지 노란색 부분이 prompt token
P-tuning에서는 pseudo prompt와 prompt encoder가 미분가능한 방법으로 최적화
이러한 연속적인 토큰에 "수도(capital)"와 같은 태스크와 관련된 앵커 토큰(task-related anchor token)을 추가하면 성능이 더욱 향상

P-tuning v2

Prefix tuning은 원래 NLG를 위해 제안되었으나, 이 논문의 저자들은 이 구조가 NLU에도 효과적이라는 사실을 발견
P-tuning에서 연속적인 프롬프트는 트랜스포머의 첫 번째 레이어에 인풋 임베딩에 삽입
P-tuning v2에서는 prefix tuning처럼 multi-layer prompt(deep prompt tuning), 즉 여러 레이어에 프롬프트를 붙이는 방법을 사용
각기 다른 레이어에 위치한 프롬프트는 인풋 시퀀스에 prefix 토큰으로 더해지고, 다른 interlayer들과는 독립적
이를 통해 더 많은 수의 태스크 특화 파라미터를 튜닝, 더 깊은 레이어에 더해진 프롬프트를 통해 결과 예측에 더 직접적이고 주요한 영향

Model Tuning

기존 모델 튜닝 방식은 각각의 task에 맞게 pre-trained 된 모델들을 모두 fine-tuning하는 방식이었음.

Prompt Tuning

input text 의 앞부분에 추가된 additional k 토큰들만 downstream 태스크에서 학습함.
각 태스크마다 prompt 들을 저장하여 인퍼런스에서 mixed-task로 사용.
GPT3 의 prompt와 달리 기존 트랜스포머 모델 파라미터는 froze 해놓고, prompt 파라미터 update 할 수 있음.
프롬프트 엔지니어링의 주요 목표는 사용자의 의도와 원하는 결과를 전달하는 프롬프트를 만들어 모델의 성능, 정확성, 유용성을 극대화하는 것이다.
프롬프트 엔지니어링이 필요한 이유는 현재 LLM의 동작 방식의 한계와 인간과 컴퓨터의 상호 작용을 위해 자연어를 사용하고 있기 때문이다.

Prompt Engineering vs Prompt Tuning

프롬프트 엔지니어링과 프롬프트 튜닝은 AI 성능과 출력을 최적화하기 위한 보완적 접근 방식으로 두 방식 모두 사용자와 AI 간 상호 작용을 개선하는데 중점을 두고 있다.
프롬프트 튜닝과 프롬프트 엔지니어링의 주요 차이점은 프롬프트 튜닝이 더 자동화된다는 것이다.
프롬프트 튜닝을 사용하면 사용자가 프롬프트를 제공하기만 하면 LLM이 나머지 작업을 수행한다.
프롬프트 엔지니어링을 사용하면 사용자가 직접 프롬프트를 설계해야 하므로 더 많은 시간이 소요될 수 있다.

프롬프트 엔지니어링과 프롬프트 튜닝의 장단점

프롬프트 엔지니어링
장점: 프롬프트 엔지니어링은 출력을 더 많이 제어할 수 있기 때문에 프롬프트 튜닝보다 좀더 효과적이다.
단점: 프롬프트 엔지니어링은 사람의 입력이 더 많이 필요하기 때문에 프롬프트 튜닝보다 더 많은 시간이 소요된다.
프롬프트 튜닝
장점: 프롬프트 튜닝은 더 자동화되어 있기 때문에 프롬프트 엔지니어링보다 빠르고 쉽다.
단점: 프롬프트 튜닝은 출력에 대한 많은 제어를 허용하지 않기 때문에 프롬프트 엔지니어링보다 덜 효과적이다.