
문맥 내 학습
언어모델은 주어진 입력에서 패턴을 파악해 알맞은 응답을 만드는 능력이 있음
샷 프롬프트(Shot Prompting)
제로샷 (Zero-Shot)
특정 예시 없이 질문을 바로 제시하는 방식
모델의 일반적인 지식을 기반으로 응답을 생성
Q: 서울의 인구는 몇 명인가요?
A: 서울의 인구는 약 1000만 명입니다.
원샷 (One-Shot)
하나의 예시를 제공하여 모델이 응답 패턴을 파악하게함
Q: 서울의 인구는 몇 명인가요?
A: 서울의 인구는 약 1000만 명입니다.
Q: 부산의 인구는 몇 명인가요?
A: 부산의 인구는 약 350만 명입니다.
퓨샷 (Few-Shot)
여러 개의 예시를 제공하여 더 정확한 패턴 파악하게함
Q: 서울의 인구는 몇 명인가요?
A: 서울의 인구는 약 1000만 명입니다.
Q: 부산의 인구는 몇 명인가요?
A: 부산의 인구는 약 350만 명입니다.
Q: 인천의 인구는 몇 명인가요?
A: 인천의 인구는 약 300만 명입니다.
템플릿화 (Templating)
일정한 형식의 프롬프트를 만들어 모델이 그 형식에 맞춰 응답하도록 유도
[도시 인구 조사]
도시 이름: 서울
인구: 약 1000만 명
도시 이름: 부산
인구: 약 350만 명
도시 이름: 인천
인구: 약 300만 명
도시 이름: 대구
인구: 약 100만 명
역할 부여 (Role Assignment)
모델에게 특정 역할을 부여해 더 자연스럽고 일관된 응답을 생성
당신은 한국의 인구 통계 전문가입니다. 각 도시의 인구에 대해 답변해주세요.
Q: 서울의 인구는 몇 명인가요?
A: 서울의 인구는 약 1000만 명입니다.
제약 조건 설정 (Constraint Setting)
모델이 준수해야 할 규칙이나 제약을 명시
간단하고 정확한 답변을 제공해주세요.
Q: 서울의 인구는 몇 명인가요?
A: 약 1000만 명
few shot 프롬프팅의 구성요소
프롬프트 (지시)
모델에게 특정 작업이나 질문을 명확하게 제시
이는 모델이 어떤 정보를 제공해야 하는지 이해할 수 있도록 도움
Q: 서울의 인구는 몇 명인가요?
예시(Examples)
모델이 작업을 이해하고 패턴을 학습할 수 있도록 여러 개의 예시를 제공
예시는 질문과 그에 대한 답변으로 구성
Q: 서울의 인구는 몇 명인가요?
A: 서울의 인구는 약 1000만 명입니다.
Q: 부산의 인구는 몇 명인가요?
A: 부산의 인구는 약 350만 명입니다.
새로운 질문(New Prompt)
모델이 예시에서 학습한 패턴을 적용해 응답할 새로운 질문을 제시
Q: 인천의 인구는 몇 명인가요?
컨텍스트(Context)
예시와 새로운 질문 사이의 문맥을 제공
이는 모델이 응답을 생성할 때 참고할 수 있는 추가 정보를 포함할 수 있음
다음은 한국 주요 도시의 인구에 대한 정보입니다.
응답 형식(Response Format)
예시에서 일관된 응답 형식을 사용하여 모델이 동일한 형식을 따르도록 유도
이는 일관성을 유지하고 정확한 답변을 얻는 데 중요
Q: 서울의 인구는 몇 명인가요?
A: 서울의 인구는 약 1000만 명입니다.
Q: 부산의 인구는 몇 명인가요?
A: 부산의 인구는 약 350만 명입니다.
예시를 포함한 전체 구성
다음은 한국 주요 도시의 인구에 대한 정보입니다.
Q: 서울의 인구는 몇 명인가요?
A: 서울의 인구는 약 1000만 명입니다.
Q: 부산의 인구는 몇 명인가요?
A: 부산의 인구는 약 350만 명입니다.
Q: 대구의 인구는 몇 명인가요?
A: 대구의 인구는 약 250만 명입니다.
Q: 인천의 인구는 몇 명인가요?
A:
- 말로 표현하기 어려운 지시사항을 언어모델이 자동으로 감지하여 따름
- 예시를 잘 선택하면 성능이 크게 향상
- 입력의 길이가 크게 증가함
- 잘못된 패턴을 이용하거나 예시를 과하게 따라하여 성능이 하락할 수 있음
- 선택된 예시에 매우 민감
Few-Shot 프롬프팅을 사용할 때 주의해야 할 점:
- 다양한 주제의 예시를 포함하여 모델이 다양한 맥락에서 패턴을 학습할 수 있도록 해야함
- 예시의 응답 형식을 일관되게 유지하여 모델이 동일한 형식을 따르도록 유도해야함
- 예시의 수를 적절히 조절하여 모델이 과도하게 특정 패턴에 치우치지 않도록 해야함
- 예시를 통해 모델이 학습할 수 있는 명확하고 구체적인 정보를 제공해야함
- 목표에서 벗어난 질문, 답변이 난해할 질문, 추가 정보가 필요한 질문 등 엣지 케이스에 대한 대처를 충분히 하여 할루시네이션(비슷한 맥락의 가짜 정)을 방지해야함
예시의 갯수는 많을수록 좋음
하지만 예시가 길어지면 비용 또한 증가하므로, 허용 가능한 비용의 범위에서 최대의/효과적인 예시를 사용해야함
언어모델의 약점: 복잡한 추론에 대한 한계
계획이나 다단계 추론을 요하는 복잡한 문제에 대해 낮은 성능을 나타냄
숫자, 심볼에 대한 이해가 부족함
복잡한 추론: 신뢰할 수 잇는 합리적 의사결정에 필수
COT(Change Of Thought) 기법
언어 모델이 복잡한 문제를 단계별로 풀어나가는 방식
각 단계를 명시적으로 표현하여 추론 과정을 더 투명하게 만들고, 정답을 도출하는 데 도움을 주는 기법
문제 해결 과정에서 논리적 단계를 따르도록 유도
COT 의 개념
Chain of Thought 추론의 기본 아이디어는 모델이 문제를 해결하기 위해 거쳐야 하는 중간 단계를 명확히 제시하는 것
단순히 입력에 대한 출력만을 생성하는 것이 아니라, 문제를 단계별로 분석하고 각 단계에서 논리적 추론을 수행
COT 의 장점
- 추론 과정의 투명성 증가: 각 단계의 논리적 진행을 명시함으로써 모델의 추론 과정을 이해하기 쉬워짐
- 복잡한 문제 해결 능력 향상: 문제를 작은 단계로 나누어 해결함으로써 더 복잡한 문제도 처리할 수 있음
- 에러 디버깅 용이: 각 단계별로 진행 상황을 확인할 수 있어, 어디서 오류가 발생했는지 쉽게 파악할 수 있음
예시
COT를 사용하여 철수가 몇 개의 테니스 공을 가지고 있는지 계산하는 예시
Q: 철수가 6개의 테니스공을 가지고 있고, 2개의 테니스 공 세트를 샀고,
각각의 테니스 공 세트에는 3개의 테니스 공이 있다면,
철수는 지금 몇 개의 테니스 공을 가지고 있는지?
1. 철수가 원래 가지고 있는 테니스 공의 개수를 확인합니다.
- 철수는 6개의 테니스 공을 가지고 있습니다.
2. 철수가 구매한 테니스 공 세트의 개수를 확인합니다.
- 철수는 2개의 테니스 공 세트를 샀습니다.
3. 각각의 테니스 공 세트에 포함된 테니스 공의 개수를 확인합니다.
- 각각의 테니스 공 세트에는 3개의 테니스 공이 있습니다.
4. 구매한 테니스 공 세트에서 추가된 테니스 공의 총 개수를 계산합니다.
- 2세트 × 3개/세트 = 6개
5. 철수가 원래 가지고 있던 테니스 공의 개수에 추가된 개수를 더합니다.
- 6개 + 6개 = 12개
A: 철수는 지금 총 12개의 테니스 공을 가지고 있습니다.
복잡한 문제에서의 COT
관계에 기반한 추론 문제에서 COT 사용
Q: 철수 +- 영희 이고, 영희 +- 바둑 이면, 철수 +- 바둑?
1. 철수와 영희의 관계를 방정식으로 나타냅니다.
- 철수 = 영희 ± n
2. 영희와 바둑의 관계를 방정식으로 나타냅니다.
- 영희 = 바둑 ± m
3. 철수를 바둑의 값과 관계짓기 위해 두 방정식을 조합합니다.
- 철수 = (바둑 ± m) ± n
4. 두 개의 ±를 결합하여 하나의 ±로 나타냅니다.
- 철수 = 바둑 ± (m ± n)
A: 철수는 바둑 ± k이고, 여기서 k는 m ± n의 결과입니다.
워킹 메모리 : 인간의 인지과정에서 정보를 단기적으로 저장하고 조작하는 능력
언어 모델과 워킹 메모리
언어 모델, 특히 GPT와 같은 대형 언어 모델은 인간의 워킹 메모리와 비슷한 방식으로 작동하지는 않지만, 비슷한 기능을 수행할 수 있는 구조를 가지고 있음.
- 컨텍스트 윈도우(Context Window)
- 언어 모델은 입력 텍스트의 일정한 길이 내에서만 정보를 처리
- 이 윈도우는 워킹 메모리의 일시적 저장 기능과 유사합니다.윈도우 크기(컨텍스트 길이)가 제한되어 있어, 긴 문맥을 처리하는 데 한계가 있음
- 단계적 처리(Step-by-Step Processing)
- Chain of Thought 기법을 통해 언어 모델이 단계별로 문제를 해결할 수 있음
- 이는 워킹 메모리의 중앙 집행기 역할과 유사함
- 단계별로 정보를 처리하고, 각 단계에서 나온 결과를 다음 단계의 입력으로 사용하는 방식
- 추론 및 문제 해결(Reasoning and Problem-Solving)
- 언어 모델은 입력된 정보를 기반으로 추론하고 문제를 해결할 수 있음
- 이는 워킹 메모리의 다양한 요소(중앙 집행기, 에피소드 버퍼 등)가 협력하는 방식과 유사합니다.
워킹 메모리와 언어 모델의 한계 및 개선 방안
- 맥락 유지의 한계
- 언어 모델의 컨텍스트 윈도우가 제한되어 있어, 긴 문맥이나 복잡한 정보를 처리하는 데 어려움이 있음
- 이를 개선하기 위해 모델의 컨텍스트 윈도우 크기를 늘리거나, 외부 메모리 시스템과 결합하는 연구가 진행되고 있음
- 장기 기억과의 통합 부족
- 현재의 언어 모델은 주로 단기적인 정보를 처리하며, 장기적인 기억과의 통합이 부족함
- 이를 해결하기 위해, 장기 기억 네트워크를 추가하거나, 모델이 학습한 정보를 효율적으로 참조하는 방법을 개발하는 연구가 필요
- 연산 자원의 한계
- 언어 모델이 복잡한 문제를 해결할 때, 필요한 연산 자원이 많아지고 모델의 효율성을 떨어뜨림
- 모델의 효율성을 높이기 위해, 다양한 최적화 기술과 더 나은 알고리즘이 필요함
트리거 프롬프트("차근차근 생각해봅시다") 로 중간과정을 자세히 서술하도록 유도

Input-Output 프롬프팅
특정 입력에 대해 기대하는 출력을 명확히 정의하여 모델이 올바른 응답을 생성하도록 유도하는 방식
모델이 특정 패턴이나 형식을 따르도록 훈련된 경우 유용
예시
구성 요소
- 명확한 입력: 질문이나 명령 등의 형태로, 모델에게 제공되는 정보
- 기대 출력: 모델이 생성해야 하는 응답의 형태
Self-Consistency with Chain of Thought (CoT)
모델이 여러 개의 독립적인 Chain of Thought를 생성하여 그 중에서 가장 일관된 답변을 선택하는 방법
복잡한 문제를 해결할 때 다양한 경로를 탐색하고, 가장 신뢰할 수 있는 경로를 선택하게 함
예시
**문제:** 철수가 6개의 테니스 공을 가지고 있고, 2개의 테니스 공 세트를 샀고, 각각의 테니스 공 세트에는 3개의 테니스 공이 있다면, 철수는 지금 몇 개의 테니스 공을 가지고 있는지?
**Chain of Thought 1:**
1. 철수가 원래 가지고 있는 테니스 공의 개수: 6개
2. 철수가 구매한 테니스 공 세트의 개수: 2세트
3. 각 세트에 포함된 테니스 공의 개수: 3개
4. 추가된 테니스 공의 개수: 2세트 × 3개/세트 = 6개
5. 총 테니스 공의 개수: 6개 + 6개 = 12개
**Chain of Thought 2:**
1. 철수가 원래 가지고 있는 테니스 공의 개수: 6개
2. 각 세트에 포함된 테니스 공의 개수: 3개
3. 2개의 세트는 총 6개의 테니스 공을 추가합니다.
4. 총 테니스 공의 개수: 6개 + 6개 = 12개
**결론:** 철수는 지금 총 12개의 테니스 공을 가지고 있습니다.
여러 Chain of Thought를 생성하여 동일한 결론에 도달했음을 확인하는 방식
Tree of Thoughts
Tree of Thoughts는 문제 해결 과정에서 여러 가지 가능한 경로를 탐색하고, 각 경로의 분기점에서 최선의 선택을 찾아가는 방식입니다. 이는 여러 단계의 추론을 필요로 하는 복잡한 문제를 해결하는 데 유용함
예시
**문제:** 철수 +- 영희 이고, 영희 +- 바둑 이면, 철수 +- 바둑?
**Tree of Thoughts:**
1. **첫 번째 분기점:**
- 철수와 영희의 관계: 철수 = 영희 ± n
2. **두 번째 분기점:**
- 영희와 바둑의 관계: 영희 = 바둑 ± m
3. **결합:**
- 철수 = (바둑 ± m) ± n
**결론:** 철수는 바둑 ± k이고, 여기서 k는 m ± n의 결과입니다.
각 분기점에서 가능한 모든 경로를 탐색하고, 최적의 경로를 선택하여 문제를 해결하는 방식
비교 및 결론
- Input-Output 프롬프팅: 명확하고 일관된 입력과 출력을 제공하여 모델의 응답을 유도
- Chain of Thought (CoT): 문제를 단계별로 나누어 각 단계에서 논리적인 추론을 수행하는 방식
- Self-Consistency with CoT: 여러 개의 독립적인 추론 경로를 생성하여 일관된 답을 선택
- Tree of Thoughts: 복잡한 문제를 해결하기 위해 다양한 경로를 탐색하고, 최적의 경로를 선택
'[프로그래밍] 프롬프트 엔지니어링' 카테고리의 다른 글
[프롬프트 엔지니어링] Claude 와 대화 (0) | 2024.06.29 |
---|---|
[프롬프트 엔지니어링] 프롬프트 기초지식 (0) | 2024.05.27 |