home

Prompt Recovery for LLM

Author
박우명 / CDO & Head of Research
Category
Paper Review
Tags
LLM
Prompting
Published
2024/07/11
5 more properties

도입

In-context Learning 능력을 활용하여 LLM을 다양한 태스크에 손쉽게 활용할 수 있음
그렇지만 모델의 생성 결과가 입력 프롬프트에 따라 매우 민감하며, 따라서 일반적으로 원하는 결과를 얻기 위하여 trial-and-error 방식으로 사람이 수동으로 제작하는 것이 일반적
만약 LLM의 생성 결과를 토대로 해당 결과가 나올 수 있도록 입력 프롬프트를 복원 수 있다면 프롬프트 생성 과정이 훨씬 효율적일 것으로 예상
이 아티클에서는 모델 Checkpoint에 대한 접근이 불가능한 경우에도 Output 텍스트와 토큰별 확률 값만을 활용하여 입력 프롬프트를 복원할 수 있는 방법을 소개함
리뷰 논문 : https://arxiv.org/abs/2405.20657 (Zhejiang University)

개요

한줄요약 : 모델의 생성 결과 텍스트와 각 토큰별 확률 값을 잘 활용해서 원본 입력 프롬프트를 복원하는 문제에 적용했더니 뛰어난 성능을 보인다는 내용
입력 프롬프트에 있던 토큰이나 표현은 LLM이 보다 높은 확신을 가지고 생성한다는 사실을 관찰
위 관찰 내용을 바탕으로 Draft Reconstruction, Hint Refinement, Noise Reduction의 3단계를 거쳐서 프롬프트를 복원하는 방법론 제안
대상 LLM 및 task에 상관 없이 일관되게 성능 향상 효과가 있다고 주장

Related Works

LLM으로 하여금 원하는 결과를 얻어내도록 하는 방법론 이라는 측면에서 Jailbreaking과 약간 비슷한 목적을 가지고 있음
크게 나누면 LLM의 Checkpoint를 활용할 수 있는지 아닌지 2가지로 구분 (white-box vs black-box)

Anthropic’s Metaprompt

예술적인 Prompting과 뛰어난 LLM의 능력을 바탕으로 태스크에 대한 간단한 설명만 주어졌을 떄 적절한 Instruction을 생성
실행 예시
Metaprompt는 엄밀히 말하면 원하는 결과를 얻기 위한 프롬프트를 생성하는 방법론은 아니며 DORY의 목적과는 차이가 존재함
그렇지만 최근 화제가 되는 방법이면서 큰 틀에서 LLM이 원하는 결과를 생성하기 위한 효과적인 프롬프트를 자동 생성한다는 측면에서 관련이 있음

White-box Model Case

사용할 수 있는 입력 (Embedding Vector, Output Probability, Logits 등)을 바탕으로 복원하고자 하는 텍스트를 생성하는 별도의 모델을 제작하여 생성하는 방식
예시1) Generative Embedding Inversion Attack(GEIA)
Embedding Vector를 입력으로 원본 텍스트를 생성하는 Decoder 모델을 학습. 논문에서는 GPT-2 사용
어떤 종류의 Embedding Model 이든 상관없이 적용 가능
Embedding Vector를 Decoder의 Hidden Dimension에 맞게 변환해서 첫 입력으로 넣음 넣음. 그 이후로는 일반적인 Auto Regressive(AR) 모델과 동일
Embedding Inversion 문제에서 기존에는 주로 Classification 문제를 다루었는데 Generative 방법을 제안한 초기 논문
예시2) LM Inversion
토큰 확률 분포는 입력 프롬프트가 주어졌을 때의 조건부 확률임. 따라서 이 확률 분포 내에 입력 프롬프트에 대한 정보가 어떤 형태으로든 들어가 있음
전체 토큰에 대한 확률 분포를 입력으로 하여 원래의 프롬프트를 생성하게 하는 모델을 만듬
토큰 개수를 Dimension 만큼 잘라서 Sequence로 만듬. 뒤쪽은 Zero-padding.
예를 들어 |V|=32000, d=768 인 경우 입력 sequence는 42가 됨
T5 모델에 이 Sequence를 입력하여 원본 프롬프트를 생성하도록 튜닝함.
프롬프트 생성 모델
T5-base (222M) 백본
학습 데이터 : Instructions-2M 데이터셋
대상 LLM : LLaMa2-7b-base, LLaMa2-7b-chat

Black-box Model Case

거의 대부분이 세심하게 프롬프트를 작성하여 원하는 결과를 얻을 때까지 해킹을 시도하는 일종의 Jailbreaking 방법들임
예시) Jailbreaking in 20 Queries
Attacker와 Target 역할을 하는 두 개의 LLM이 존재
제안 방법
Attacker 모델에서는 Target 모델을 Jailbreaking하기 위한 프롬프트를 생성
생성한 프롬프트를 Target 모델의 입력으로 넣고 결과를 생성
생성 결과를 역시 LLM을 이용하여 성공적으로 Jailbreaking이 되었는지 평가. 이 때 성공적으로 Jailbreak 되었다 판단하면 종료. 그렇지 않으면 다음 단계를 실행
평가 결과와 함께 이전 히스트리를 모두 Attacker 모델에 넣고 새로운 프롬프트를 생성. 이 때 평가 결과를 보고 어떻게 개선을 해야 하는지 명시적으로 생성하고 그것을 기반으로 새로운 프롬프트를 생성하도록 함. 즉 일종의 CoT기법을 적용
위 과정을 반복

Method

이 논문에서 제안하는 방법은 API를 통하여 출력 텍스트와 토큰별 확률만 활용할 수 있는 Block-box Model Case에 해당함
Output 확률과 프롬프트 Recovery의 관계 분석
Output Probability 기반으로 'Predictive Entropy' 정의
Uncertainty(Length-normalized PE가 높을수록)와 Recovery Performance 사이에 역의 상관관계를 보임
또한, 프롬프트에 등장했던 토큰이 상대적으로 Uncertainty가 낮은 것을 확인할 수 있음
이 Uncertainty 값을 활용하여 프롬프트를 복원하는 방법을 제안
제안 방법 : Deliberative Prompt Recovery for LLM (DORY)
Draft Reconstruction : 출력 결과 텍스트를 기반으로 Few-shot Prompting을 하여 입력 프롬프트의 초안을 작성
Hint Extraction
Uncertainty가 일정 수준 이하인 토큰들을 힌트로 추출(H)
이때 전체 Output 텍스트 대상으로 하는 경우 불필요한 토큰도 선택되는 경우가 많음.
따라서 우선 LLM을 통하여 Output 중에서 중요 내용이 담긴 문장들을 선택하게 함 → 해당 문장들 내의 토큰만을 대상으로 힌트를 추출
Noise Reduction
첫 단계에서 생성한 프롬프트 초안을 LLM에 넣고 답변을 생성 (Draft Output)
Draft Output으로부터 특정 Uncertainty 이하의 토큰을 선택(H_draft)
여기서 선택된 토큰 중 2번 단계에서 추출한 힌트를 제외한 토큰을 'Noise'로 정의 (H_draft \ H).
LLM을 활용하여 Prompt 초안과 2단계에서 추출한 힌트 정보, 3단계에서 추출한 Noise 정보를 종합하여 최종 Prompt 생성
원래의 Output을 토대로 추출한 Hint는 아닌데 Draft Output에서 추출한 Hint에 존재한다는 것은 Draft 프롬프트의 어딘가에 잘못된 정보가 들어가서 해당 Hint가 추출되었을 가능성이 존재하므로 Noise 처리함
이 논문에서는 위 과정을 1번만 수행. 여러 차례 loop를 돌리면서 단계적으로 업데이트하는 방법도 쉽게 생각해볼 수 있었을텐데 효과가 없었던 것인지 궁금함.

Results

직접 비교 대상 baseline은 Few-shot Prompting을 통한 프롬프트 Recovery
Jailbreak : 전문가가 다양한 종류의 Jailbreaking 프롬프트를 입력하여 Zero-shot 성능을 측정한 결과
사용한 프롬프트 예시 및 GPT-3.5-turbo 에서의 성능
Few-shot Prompting : 5개의 예제를 넣어서 프롬프트를 생성. 본 논문의 제안 방법 중 Draft Reconstruction만 존재하는 형태임
Inversion Model : 위 Related Works에서 소개한 LM Inversion 모델을 사용
3종류의 모델, 3가지 Task에서 비교 대상 방법 대비 전반적으로 큰 폭의 개선이 존재
특히 힌트를 넣어주는 것이 결정적인 영향을 미쳤으며, Noise를 넣어서 추가 개선이 존재

논의

LLM을 통하여 원하는 결과를 얻기 위한 프롬프트를 만드는 것은 현재까지도 사람의 직관과 경험을 통한 노하우가 중요한 영역임
따라서 각 태스크에 맞게 원하는 결과를 얻기 위하여 trial-and-error 방식을 통해 일일이 프롬프트를 생성해야 하는 부담이 존재하는데, 이는 매우 비효율적이며 Scalable하지 않음
반면 LLM이 뛰어난 언어 이해, 추론 및 생성 능력을 보유하고 있다는 점을 잘 활용하면 적절한 프롬프트 생성을 자동화하는 곳에 적용할 수 있음을 의미하며, 이 논문은 그러한 다양한 시도 중 하나임
프롬프트 생성을 완전 자동화하지는 못하더라도 프롬프트 Engineering 과정에서 참고할 수 있는 예시를 제안받아 수정하는 방식으로 활용 가능할 듯함
더하여 LLM의 생성 결과를 원하는 형태로 제어하기 위하여 프롬프트를 직접 생성하여 제어하는 지금의 방식에서 벗어나 대화 등과 같이 사람에게 보다 직관적인 방식으로 가르치면서 LLM을 점차 각 개인에게 맞게 커스터마이징 할 수 있는 가능성을 보여주었다고 판단됨