학습자료: 최고의 프롬프트 엔지니어링 강의(김진중)
프롬프트 엔지니어링이란? 자연어로 컴퓨터와 상호작용하는 것
LLM
BERT(2018): LLM의 시초격 모델
트랜스포머
- 생성 가능한 텍스트 길이의 제한 대폭 개선, 처리 속도 대폭 향상, 양방향 문맥 이해로 주어진 단어의 의미를 전체 문장의 맥락에서 파악하는 것까지 가능
- 셀프-어텐션(self-attention): 문장 내 단어들 간의 관계를 학습하여 중요한 정보에 더 많은 가중치를 두고 집중하도록 만드는 기술. 각 단어는 문장 내 다른 모든 단어와의 관계를 평가하며, 이 과정에서 중요한 단어나 구문에 더 높은 점수를 부여하여 해당 정보에 집중하게 됨
- 예시: “The movie was not bad at all.” 이라는 문장에서 기존 모델들은 not, bad와 같은 단어 각각에만 초점을 맞추어 부정적인 감성으로 잘못 분류했지만, 트랜스포머를 이용한 모델은 문장 내 모든 단어 간의 관계와 not, bad 사이의 관계를 이해하여 긍정적인 감정으로 인식함
GPT-3(2020): BERT의 500배에 달하는 규모의 언어 모델
인스트럭트GPT(2022): GPT-3의 개량판. 인스트럭트 데이터 + RLHF(Reinforcement Learning from Human Feedback)
- 인스트럭트 데이터: 지시와 결과의 쌍으로 되어 있는 데이터
- RLHF: GPT-3가 만들어 낸 결과를 사람이 평가하게 한 다음 그 평가 점수와 수정된 내용을 기반으로 스스로 다시 학습하도록 한 방식
LLM의 작동 원리: 자기회귀 모델(Autoregressive Model)
- 뒤에 올 수 있는 수많은 단어들 중 가장 높은 확률로 나오는 단어를 선택하는 방식
- 이전 결과를 바탕으로 다음 단어 예측을 반복
- +) 트랜스포머 모델의 원리 → 성능 향상
LLM 성능을 향상시킨 주요 기술
1. 코드 데이터 학습
- 비정형 데이터인 코드 데이터 학습을 통해 추론 능력 비약적으로 발전
2. 인스트럭션 튜닝
- 명령이나 지시 형태로 표현된 텍스트를 이해한 뒤 해당 작업을 수행하는 것
- 대량의 텍스트를 학습한 Pre-trained 모델을 만든 후 지시와 결과물의 쌍으로 된 인스트럭트 데이터를 학습시켜서 튜닝
- 인스트럭션 튜닝을 통해 모델이 사람의 명령을 이해하고 그에 맞는 텍스트를 생성하는 방식이 가능해짐
3. RLHF
1) 다양한 요청이나 명령을 담은 ‘프롬프트 데이터셋’에서 여러 프롬프트 샘플 추출
2) 이 샘플은 ‘초기 언어 모델’에 입력되어 프롬프트와 관련된 텍스트를 생성
3) 생성된 텍스트는 사람에 의해 평가되며, 각각의 텍스트에 품질에 따라 점수 부여
4) 이 점수는 ‘보상(선호도) 모델’을 훈련시키는 데 사용
5) 보상 모델을 사용하여 언어 모델을 계속 훈련시켜 사람들이 높은 점수를 준 텍스트와 유사한 품질의 답변을 더 잘 생성하도록 유도
- 얼라인먼트(alignment): 모델이 사용자의 질문이나 지시에 더 적절하게 반응할 뿐만 아니라, 비윤리적이거나 부적절한 내용을 피하는 등의 윤리적 가이드라인을 더 잘 준수하게 됨
4. 멀티모달(Multimodal) 학습
- 이미지와 소리, 텍스트와 같이 서로 다른 형태의 데이터를 동시에 학습시킴으로써 LLM의 문맥 이해 능력 극대화
- 예를 들어, 우는 아이 사진을 보고 왜 우는지 설명하는 것과 같이, 이미지 분석 결과를 토대로 텍스트 형태의 질문에 답변하는 방식을 학습
프롬프트 엔지니어링으로 전 과정 대체하기 어려운 경우(모델링, 파인튜닝 필요)
- 선형 회귀 문제
- 대량의 로그성 데이터의 실시간 처리
- 특수 목적의 매우 높은 정밀도를 요구하는 문제
- 데이터의 최신성이 중요하지 않은 경우
- 데이터 보안이 매우 중요한 경우
프롬프트 엔지니어링
프롬프트 엔지니어링의 기본 원칙: “질문을 잘할수록 좋은 대답을 얻는다”
DALL-E(이미지 생성 AI)에 질문하는 예시:
1. 먼저 이미지의 프레임, 즉 대략적인 장면을 묘사한다. “어떤 사람이 식료품점에 있다.”
2. 주요 객체들을 조금 더 자세하게 묘사한다. “어떤 여자가 사과를 손에 쥐고 있다.”
3. 그림 스타일을 정한다. “반 고흐 스타일로 그려 줘.”
반복적인 명령을 통해 차근차근 단계적으로 원하는 결과를 완성해 감
프롬프트 엔지니어링 방법론
1. 제로샷(Zero-shot) 프롬프팅
LLM에게 아무런 데이터나 예시를 주지 않고 특정 작업을 수행하도록 하는 것
작업 지시: 영어를 한국어로 번역해 줘
사용자 입력: It’s a beautiful day ⇒
정확도가 높지 않으며 모호하거나 부정확한 답을 내놓을 가능성 높음
2. 원샷(One-shot) 러닝
실행 방법에 대한 예시 한 가지를 동시에 제공
작업 지시: 영어를 한국어로 번역해 줘
예시: This is an apple ⇒ 이것은 사과입니다
사용자 입력: It’s a beautiful day ⇒
제공된 예시를 바탕으로 문제 해결 방법을 추론
3. 퓨샷(Few-shot) 러닝
LLM에 특정 명령을 내릴 때 2~3개부터 수십 개 정도의 예시를 함께 제공
작업 지시: 영어를 한국어로 번역해 줘
예시: This is an apple ⇒ 이것은 사과입니다
I am a boy => 나는 소년입니다
You are a girl => 너는 소녀입니다
사용자 입력: It’s a beautiful day ⇒
데이터가 부족하거나 특정 작업에 대한 사례가 많지 않을 때 특히 유용
4. CoT(Chain of Thought)
LLM에게 문제 해결 과정에서 따라야 할 생각의 단계나 논리적 순서를 제시하면 LLM은 이 사고 과정을 따라 문제를 분석하고 각 단계를 거치면서 최종 해답에 도달
Prompt
Q: 로저는 5개의 테니스 공을 가지고 있습니다. 그는 테니스 공을 2캔 더 삽니다. 각 캔에는 3개의 공이 들어 있습니다. 로저는 지금 몇 개의 테니스 공을 가지고 있나요?
A: 로저는 5개의 테니스 공을 가지고 시작했습니다. 3개의 테니스 공이 각각 들어 있는 캔이 2개 있으니 테니스 공은 6개입니다. 5+6=11. 정답은 11입니다.
Q: 레스토랑에는 23개의 사과가 있습니다. 점심을 만들면서 20개를 사용하고 6개를 더 샀다면 이제 레스토랑에 남아 있는 사과는 모두 몇 개일까요?
Output
A: 레스토랑에는 원래 사과가 23개 있었습니다. 그들은 점심을 만들기 위해 20개를 사용했습니다. 그래서 23-20=3. 그들은 사과를 6개 더 샀고, 그래서 3+6=9. 정답은 9입니다.
복잡한 문제 해결과 추론을 요구하는 작업에 유용
5. 제로샷 CoT
CoT와 비슷한 방법이지만 문제 해결 과정에서 따라야 할 생각의 단계나 논리적 순서 등의 가이드를 주지 않고, 그저 천천히 생각해 보라는 식으로만 지시
Prompt
Q: 레스토랑에는 23개의 사과가 있습니다. 점심을 만들면서 20개를 사용하고 6개를 더 샀습니다. 그 후에 3개를 먹었다면 사과가 몇 개 남았을까요? 단계별로 생각해 봅시다.
A:
Output
1. 처음에는 레스토랑에 원래 23개의 사과가 있었습니다.
2. 점심을 만들기 위해 20개를 사용했으므로 남은 사과는 23-20=3개입니다.
3. 그 후에 6개를 더 사서 현재 사과의 개수는 3+6=9개입니다.
4. 마지막으로 3개를 먹었으므로 남은 사과의 개수는 9-3=6개입니다.
기본적인 프롬프트의 구성(프롬프트 디자인의 핵심 요소)
1. 답변을 위해 필요한 적절한 컨텍스트 제공
이때 컨텍스트는 보통 정제되지 않은 긴 텍스트로 제공
AI는 주어진 정보를 참고하여 환각(할루시네이션)이 없는 더 정확한 응답을 생성할 수 있음
AI가 답변해야 하는 정보가 ‘1988년 서울 올림픽’에 대한 내용이라면 AI에게 먼저 해당 정보를 컨텍스트로 제공
2. 원하는 결과 추출을 위한 프롬프트 작성
“1988년 서울 올림픽의 금메달 순위를 추출해 줘”
3. 결과물의 형식을 지정
“금메달 순위는 숫자 목록으로 작성해 줘”
인컨텍스트 러닝: 프롬프트 엔지니어링 과정에서 생성한 정보를 다시 새로운 컨텍스트로 사용. AI가 추가적인 훈련 과정 없이 주어진 문맥 안에서 바로 정보를 학습하고 이를 결과에 적용.
벡터 서치(시멘틱 서치): 임베딩 공간에 텍스트를 벡터화하여 배치하고 가장 가까운 의미를 찾는 것
하이브리드 서치: 키워드 검색을 통해 DB에서 후보 데이터를 일부 검색해 온 다음, 사용자가 요청한 내용과 유사한 데이터를 벡터 서치로 다시 한번 필터링하는 방식(혹은 반대의 방식)
'프롬프트 엔지니어링' 카테고리의 다른 글
[프롬프트 엔지니어링 기초] 프롬프트 엔지니어링 테크닉(2) (0) | 2025.04.07 |
---|---|
[프롬프트 엔지니어링 기초] 프롬프트 엔지니어링 테크닉(1) (0) | 2025.04.05 |
[프롬프트 엔지니어링 기초] 프롬프트 엔지니어링 과정 (0) | 2025.03.30 |