도입
•
In-context Learning 능력을 활용하여 LLM을 다양한 태스크에 손쉽게 활용할 수 있음
•
그렇지만 모델의 생성 결과가 입력 프롬프트에 따라 매우 민감하며, 따라서 일반적으로 원하는 결과를 얻기 위하여 trial-and-error 방식으로 사람이 수동으로 제작하는 것이 일반적
•
만약 LLM의 생성 결과를 토대로 해당 결과가 나올 수 있도록 입력 프롬프트를 복원 수 있다면 프롬프트 생성 과정이 훨씬 효율적일 것으로 예상
•
이 아티클에서는 모델 Checkpoint에 대한 접근이 불가능한 경우에도 Output 텍스트와 토큰별 확률 값만을 활용하여 입력 프롬프트를 복원할 수 있는 방법을 소개함
•
개요
•
한줄요약 : 모델의 생성 결과 텍스트와 각 토큰별 확률 값을 잘 활용해서 원본 입력 프롬프트를 복원하는 문제에 적용했더니 뛰어난 성능을 보인다는 내용
•
입력 프롬프트에 있던 토큰이나 표현은 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을 점차 각 개인에게 맞게 커스터마이징 할 수 있는 가능성을 보여주었다고 판단됨