Prompt Engineering
Prompt Engineering이란?
위키피디아에 따른 정의는 다음과 같습니다.
Prompt engineering is the process of structuring an instruction that can be interpreted and understood by a
generative artificial intelligence (AI) model.
즉, 생성형 인공지능이 해석하고 이해할 수 있도록, 특정한 지침을 구조화하여 제공하는 과정을 의미합니다.
모두들 ChatGPT를 한 번씩은 사용해보았을 것이라고 생각합니다. 또는 오픈 소스 LLM을 인퍼런스해본 경험이 있으신 분들도 계시겠죠. 이러한 LLM을 사용하다 보면, 비슷한 의미를 지니고 있더라도 그 입력의 형태에 따라 전혀 다른 출력이 나올 수 있음을 손쉽게 알 수 있습니다.
다음의 두 예시를 봅시다.
• Tell me who invented the email.
• Tell me about the person invented the email.
저희는 LLM이 아닌 인간이기 때문에, 두 가지 문장이 의미적으로 유사하다, 내지는 거의 동일하다는 것을 알 수 있습니다.
그러나 ChatGPT에게 입력하면 아래와 같은 결과를 얻을 수 있습니다.
즉, 프롬프트의 미묘한 의미와 형식의 차이에 따라 LLM의 답변이 달라집니다.
이를 역으로 생각해보면, LLM이 유난히 답을 잘 해주는 프롬프트를 찾아낼 수 있지 않을까요?
이러한 아이디어에서 출발한 것이 프롬프트 엔지니어링 기법입니다.
기존의 AI 기술 발전은 ‘현재 가지고 있는 데이터로부터 모델의 능력을 얼만큼 잘 일반화할 수 있는가’에 집중하였습니다.
따라서 데이터의 실제 분포를 모르는 우리가 할 수 있는 최선의 방법은 데이터를 최대한 많이 모으는 것이었고, 모델은 gradient descent 알고리즘을 통해 모델의 일반적 분포를 유추하는 방향으로 학습하고, 새롭게 마주하는 데이터에 대해 정답을 예측하였습니다.
그런데 거대 언어모델은 상상할 수 없을 만큼 많은 데이터로 학습된 모델입니다. 따라서 일반화된 능력을 이미 가지고 있다고 간주할 수 있습니다. 오히려 이제는 사람이 모델을 어떻게 이용하는지에 따라 모델이 가진 잠재적 능력을 활용할 수 있는지 여부가 정해집니다.
이전에는 AI 모델의 한계를 파악하고 이를 해소하고자 하는 연구가 주를 이루었다면, LLM의 등장으로 오히려 우리 인간이 어떤 노력을 해야하는지(어떤 프롬프트를 주어야 하는지)에 관한 연구가 등장한 것이 흥미롭습니다.
그만큼 AI의 성능이 많이 발달한 것이겠죠.
Prompt Engineering의 종류
프롬프트 엔지니어링 기법의 종류는 셀 수 없이 많으며, 지금도 계속하여 새로운 기법들이 등장하고 있습니다.
다음주에 다루게 될 RAG(Retrieval Augmented Generation)도 일종의 프롬프팅 기법이라고 생각할 수 있습니다.
이렇게 많은 기법들 중에서 Few-shot prompting과 Chain-of-Thought prompting 내용을 자세히 다루어보겠습니다.
Few-shot prompting
GPT-3가 처음으로 발표된 논문의 제목에는 ‘GPT-3’라는 단어가 들어가지 않습니다.
해당 논문의 제목은 ‘Language Models are Few-Shot Learners’입니다. 이로부터 말미암아 언어 모델이 few-shot learning을 할 수 있게 된 것이 얼마나 놀라운 발견인지 알 수 있습니다.
사실 Few-shot prompting의 개념은 이해하기 어렵지 않으며, 이러한 기법이 등장하게 된 이유도 우리의 직관에 잘 부합합니다.
Few-shot이란 말 그대로 적은 수의 데이터를 예시로 제공하는 것을 의미합니다. 그러니 Few-shot prompting은 프롬프트를 입력할 때 관련된 몇 가지 예시를 같이 넣어주는 기법입니다.
이러한 아이디어가 등장하게 된 이유는 간단합니다. 사람도 몇 가지 예시를 보면 더 잘 대답할 수 있으니, AI모델도 그렇지 않을까 하는 가설에서 출발했을 것입니다.
아이디어 자체는 간단하기 때문에, 우리는 아이디어에 집중하기보다는 이러한 아이디어가 ‘LLM’에서 왜 훌륭한 성능을 보였는지 생각해보아야 합니다.
원리가 완전히 파악되지 않았으며 이에 관련된 연구는 현재도 진행중이지만, GPT-3 논문에서 제시한 결론 중 하나는 ‘모델 사이즈를 충분히 크게 만들었더니 Few-shot learning 이 가능해졌다’라는 것입니다.
Chain-of-Thought prompting(이하 CoT)
‘Let’s think step by step’이라는 문장이 세계적으로 유명해지게 된 계기가 아닌가 싶습니다.
아래가 CoT기법을 처음으로 제시한 논문에서 제공한 그림입니다.
(논문 ‘Chain-of-Thought Prompting Elicits Reasoning in Large Language Models’)
그 당시 LLM은 논리적 추론에 상당히 약했습니다. 고등학교, 중학교 수학은 차치하더라도 덧셈조차 제대로 하지 못하는 수준이었죠.
어찌 보면 당연합니다. LLM은 다음에 나올 확률이 높은 단어를 출력할 수 있도록 학습된 레이어들의 조합일 뿐, 특정한 근거를 들어 본인의 답을 설명할 수 없기 때문이에요. 구조적 한계로 봐야 합니다.
CoT 논문의 Figure를 보면 알 수 있듯이, CoT 또한 일종의 Few-shot prompting 기법이라고 볼 수 있습니다.
Few-shot에 사용할 Q&A 페어를 논리적 추론 과정의 내용을 담은 텍스트로 주는 것일 뿐입니다.
Few-shot prompting의 한가지 강력한 능력은 생성하는 답안의 출력 형태를 강제할 수 있다는 점입니다. 즉 few-shot prompting 시 모델은 예제로 제공한 Q&A 페어의 형태와 상당히 비슷한 텍스트를 출력하게 됩니다.
따라서 Q&A 페어 예시에 논리적인 추론과정을 하는 형태의 텍스트를 넣어둔다면, 모델이 생성하는 텍스트 또한 논리적 추론과정을 하는 방향으로 강제되겠죠.
이렇게 함으로써 제로샷에 비해 더 좋은 성능을 보였다는 것이 CoT논문의 전부입니다.
그런데, 여기서 한 술 더 떠 예제 또한 제공하지 않는 CoT 기법이 등장하였습니다.
( 논문 ‘Large Language Models are Zero-Shot Reasoners**’)**
프롬프트에 ‘Let’s think step by step’이라는 문장을 넣어줌으로써 기존 CoT와 비슷한 성능을 보일 수 있다는 논문입니다.
퓨샷을 주지 않아도 되기 때문에 사용자 입장에서는 훨씬 사용하기가 간편하겠죠.
또한 눈여겨볼 만한 점은 ‘Chain-of-Thought Prompting Elicits Reasoning in Large Language Models’ 논문에서도 모델의 사이즈가 클 때에만 CoT가 정상적으로 작동한다는 사실을 발견했다는 점입니다.
따라서 Prompt engineering 기법을 적용하기 위해서는 상당히 큰 모델이 잘 학습 되었다는 가정이 필요할 것입니다.
In-Context Learning (이하 ICL)
ICL이란?
ICL의 정의는 아래와 같습니다.
In-context learning (ICL) is a technique where task demonstrations are integrated into the prompt in a natural language format. This approach allows pre-trained LLMs to address new tasks without fine-tuning the model.
즉, 자연어 포맷으로 프롬프팅을 함으로써 task를 지정해주는 방법론입니다.
사실 프롬프트 엔지니어링 기법과 거의 구분되지 않고 쓰이는 개념입니다. 프롬프트 엔지니어링을 통해서 ICL이 가능해지는 것이니까요.
개인적으로는
- 프롬프트 엔지니어링 = 사람이 프롬프트를 작성할 때 사용하는 기법
- ICL = 모델이 demonstration을 이용해 task를 specify하는 행위
라고 생각하고 있습니다. 주체가 다른 것이죠.
ICL의 의의는 단일 모델로 여러가지 태스크를 수행할 수 있게 된 데에 있습니다.
자연어 처리에는 여러가지 태스크가 있습니다. 예를 들면 번역, 키워드 추출, 요약, 감정 분석을 비롯한 classification 문제 등이 존재합니다.
지금까지는 각각의 태스크를 위한 모델이 하나씩 필요하였습니다.
BERT와 같은 대규모 모델에 맨 뒷단 레이어만 바꾸어 가며 downstream task에 fine-tuning을 하는 방법론도 존재했지만, 어쨌든 모델의 구조와 파라미터가 제각기 달라지기 때문에 서로 다른 모델이라고 볼 수 있습니다.
그러나 LLM은 완전히 동일한 파라미터를 공유하고, 텍스트를 생성하는 문제를 풂으로써 사실상 NLP의 모든 태스크를 수행할 수 있게 되었습니다. 이러한 의미에서 In-Context Learning의 의미가 아주 크다고 볼 수 있습니다.
기존에는 새로운 태스크를 지정해주기 위해서 해당하는 태스크에 대한 fine-tuning이 필수적이었는데, fine-tuning이 없는 방법이라는 점에서 상당히 혁신적인 방법입니다.
In-Context Learning의 능력과 한계
앞서 언급한 GPT-3 논문에서의 그림이 In-Context Learning을 가장 잘 설명할 수 있는 그림입니다.
In-Context Learning이라 함은, ‘문맥에 따른 학습’ 정도로 이해할 수 있겠죠.
어떻게 보면 사람도 문맥에 따라 한 단어의 의미를 상당히 다르게 받아들입니다.
예를 들면 ‘그래프’라는 단어를 보고는 많은 의미를 떠올릴 수 있습니다.
경제학이라는 문맥 상에서 그래프라는 단어를 마주하게 된다면 수요 공급 곡선의 그래프를 떠올리게 될 것이고, 수학이라는 문맥이 있다면 노드와 엣지로 구성된 데이터 구조를 떠올리게 되겠죠.
아래는 퓨샷 프롬프팅을 통해 덧셈을 진행한 예제입니다. 당연하게도 대답을 잘 해줍니다.
아래는 일종의 넌센스 퀴즈로, 더해지는 숫자에 고리(closed loop)가 몇 개인지를 찾는 문제입니다.
만약 아무런 문맥 없이 86 + 0을 물어보았다면, 당연히 86이라고 대답하지 않았을까요? 사용자의 입력에 있는 컨텍스트에 맞추어 답을 생성해내는 과정을 ICL이라고 부릅니다.
이쯤에서 떠올릴 수 있는 것이 ‘프롬프트로 엄청나게 많은 양의 정보를 주입한 뒤에 질문을 하면 모든 것을 사실대로 대답해줄 수 있지 않을까?’ 라는 것입니다. 단순히 텍스트를 더 입력해줌으로써 새로운 태스크를 하게 만들 수 있다면, 한 번 입력에서 텍스트를 정말 많이 주면 모든 일을 해낼 수 있지 않을까요?
예를 들면, 사내 문서를 가지고 질의응답을 하고자 할 때 사내 문서의 내용을 모두 가지고와서 프롬프트에 집어넣은 뒤, 맨 뒤에 질문만 넣으면 되지 않을까요? 사실 이 아이디어에서 출발한 것이 RAG(Retrieval Augmented Generation)개념입니다.
RAG는 간단히 말해 사용자의 입력에 대해 이와 유사한 정보를 검색(Retrieval)하고, 검색한 정보와 사용자의 입력을 합쳐(Augmentd) LLM에게 전달하여 답을 생성하는(Generatione) 방식이라고 할 수 있습니다.
만약 매번 모든 문서를 전부 입력할 수 있다면, RAG에서 Retrieval 과정이 필요가 없지 않을까요?
아쉽게도 이러한 아이디어가 잘 작동할 확률은 낮습니다. 구조적으로도, 모델의 성능적 측면에서도 문제가 존재하기 때문입니다.
우선 구조적 문제는 LLM에 입력할 수 있는 token의 최대 개수가 한정되어 있다는 점입니다. 트랜스포머를 공부했을 당시를 떠올려보면 트랜스포머는 RNN과 달리 순서적인 정보를 전달하기 어렵기 때문에 ‘Positional Embedding’을 추가하였습니다.
따라서 Positional Embedding이 할당할 수 있는 최대 길이를 넘어설 순 없다는 것이 구조적 한계입니다.
둘째로 지적되는 것은 모델의 성능적 측면입니다. ‘Lost in the Middle’논문에서는 긴 컨텍스트를 입력으로 주는 경우, 컨텍스트의 맨 앞과 맨 뒷부분에 더 많이 집중하여 답변을 생성해낸다는 것을 발견하였습니다.
제 나름대로 원인을 추측하자면 우리가 국어시간에 두괄식, 미괄식, 양괄식 정도는 배우지만 중괄식은 배우지 않잖아요? 그만큼 문장의 맨앞/맨뒤에 핵심적인 정보를 넣어놓는 것이 보편적이라고 볼 수 있습니다.
따라서 수집된 데이터들도 이러한 특성을 따르는 경우가 많았을 것이고, 어텐션 레이어에서는 내용적 측면에서의 어텐션뿐만이 아닌 공간적 측면에서의 어텐션이 개입되어 맨앞과 맨뒤에 집중을 하는 것이 bias처럼 깔려버린 것이 아닐까 생각합니다. 구체적으로는, 결국 어텐션 스코어는 임베딩 된 토큰 간의 내적값으로 계산되니 맨앞과 맨뒤쪽에 오는 임베딩은 무조건 내적 값이 높게 나오도록 바이어스가 생기는 현상이 있지 않을까 추측해봅니다.
어쨌든 논문에서 주장하는 바는 long context를 주입하는 경우 중간에 위치하는 정보를 까먹는다는 점입니다.
이로부터 ICL이 모든 지식을 새로 주입할 수 있는 만능열쇠가 아님을 알 수 있습니다.
ICL의 원리
ICL이 일어나는 원리는 간단합니다. LLM은 기존 입력을 바탕으로 다음 토큰의 확률을 예측하는 모델입니다. 따라서 수식으로 표현해보면 다음과 같습니다.
$x = \text{생성할 토큰}, y = \text{사용자의 입력}, C = 문맥 정보$
그냥 zero-shot으로 입력을 하게 된다면, 모델이 예측하는 확률은 $\mathcal{P}_\theta(x | y)$일 것입니다.
그러나 Context를 주는 경우, 모델이 예측하는 확률은 $\mathcal{P}_\theta(x|y,C)$가 됩니다.
즉 조건부 확률에서의 condition을 제어함으로써 그 다음 나타날 토큰의 확률 분포를 바꾸게 되는 것입니다.
이렇게 단순히 생각해볼 수도 있지만, ICL 상황에서 context를 새로 주는 과정이 fine-tuning 과정과 상당히 유사함을 수식적으로 보인 논문도 존재합니다.(Why Can GPT Learn In-Context)
물론 수식에서 근사를 많이 거쳤기 때문에 완벽한 수식적 증명은 아니라고 할 수 있으나 ICL에 대해 새로운 관점을 제시했다는 점에서 흥미로운 논문이라고 생각해요.
수식이 궁금하신 분은 2024.10.08 - [AI/In-Context Learning] - Why Can GPT Learn In-Context?(22.12) 논문 리뷰 - ICL의 원리 <- 이 포스트를 보시길 추천드립니다.
이렇듯 ICL의 원리를 파악하고자 하는 연구는 지금도 지속되고 있습니다.
원리를 파악한다는 것은 그것이 왜 동작하는지를 알게 되는 것이고, 왜 동작하는지를 알 수만 있다면 ICL이 잘 동작할 수 있는 방안을 찾을 수 있게 될 것입니다.
지금처럼 무작정 프롬프트를 바꾸어가면서 언제 좋은 답변이 나오는지를 연구하는 것이 아니라 어떤 프롬프트가 좋은 프롬프트인지 수식적으로/체계적으로 접근할 수 있게 될 것이기 때문에 이러한 연구가 계속되고 있다고 생각합니다.
Multimodal ICL
Vision Language Model을 비롯한 Large Multimodal Model이 등장하면서, 멀티모달을 이용한 In-context learning또한 등장하고 있는 추세입니다.
위의 그림은 멀티모달을 이용해서 Few-shot learning을 처음으로 시도한 논문입니다. 그당시에는 VLM이 없었기 때문에 Vision Encoder와 Text Embedder를 각각 두고, 인코딩 된 값을 LLM에 넣어 텍스트를 생성하는 형태였습니다. 세번째 그림에서 알 수 있듯, 사과에게 dax라는 가칭을 부여하고, 오렌지에는 blicket이라는 가칭을 부여한 뒤 사과 사진을 입력했을 때 dax라고 잘 대답할 수 있는가 하는 주제를 가지고 실험하였습니다.
많은 분들이 알고계실 Flamingo 모델도 사실은 multimodal ICL의 범주에 포함된다고 볼 수 있습니다.
이제는 텍스트 생성 뿐만이 아니라, Segmentation이나 Object Detection에서 In-context learning을 이용하여 Few-shot learning을 시도하는 논문들도 등장하고 있는 추세입니다.
(SegGPT, PerSAM, MQ-Det …)
Reference
GPT-3 paper
https://arxiv.org/abs/2005.14165
Prompt Engineering Survey
https://arxiv.org/abs/2402.07927
CoT paper
https://arxiv.org/abs/2201.11903
https://arxiv.org/abs/2205.11916
ICL 원리 관련
https://arxiv.org/abs/2404.15736
https://arxiv.org/abs/2212.10559
https://arxiv.org/abs/2307.03172
Multimodal ICL 관련
https://arxiv.org/abs/2106.13884
'AI > 이론' 카테고리의 다른 글
Wasserstein Distance의 직관적 이해 (0) | 2024.10.24 |
---|---|
IoU (Intersection over Union) 이란? (0) | 2024.07.23 |