흐름 보기
- 머신러닝, 딥러닝, LLM 전반 설명
- 프롬프트 엔지니어링 요약 -> 기초 -> 연습 -> 실무
주요 내용
LLM 성능을 향상 시킨 주요 기술
- 코드 데이터 학습 - 비정형 데이터 코드 작성 가능, 추론 능력 향상
- 인스트럭션 튜닝 - 대량의 텍스트 학습 기본 모델에 지시와 결과물 쌍 학습/튜닝
- RLHF(Reinforcement Learning from Human Feedback) - 사람 평가를 재학습하여 가이드라인 준수, Alignment
- 멀티모달 - 이미지, 소리, 텍스트 등 서로 다른 형태의 데이터 학습
소프트웨어 개발 방식의 진화
전통적인 머신러닝 개발 과정 | 프롬프트 기반 모델 |
1. 데이터 수집, train/test세트로 분할 2. 모델링 및 훈련 3. 평가 4. 패키징 5. 배포 |
1. 평가 데이터 수집 2. 프롬프트 생성 3. 평가 후 바로 반영 |
이제 머신러닝은 끝인가? No! No!
다음과 같이 모델링이나 파인튜닝이 필요한 경우는 여전히 필요함
- 숫자 예측 선형 회귀 문제
- 대량 로그 처리
- 높은 정밀도
- 최신성이 중요치 않은 경우
- 보안이 중요한 경우
프롬프트 엔지니어링 대표적인 5가지 방법
- 제로샷(zero-shot) - 예시 없이 작업
- 원샷(one-shot) - 예시 1개 제공
- 퓨샷(few-shot) - 예시 여러 개 제공
- CoT(Chain of Thought) - 문제를 푸는 단계별 과정을 예시로 제공하여 논리적 순서를 LLM이 따라하게 함
- 제로샷 CoT - 별도 가이드 없이 "단계 별로 생각해봅시다"와 같이 덧붙임
백터 서치, 컨텍스트를 가져오는 기술
- 단어나 문장 같은 언어를 숫자로 바꾸는 과정을 임베딩(Embedding)이라고 함
- 이 임베딩을 통해 각 언어 조각들의 가까운 정도를 알 수 잇음
- 이렇게 텍스트를 숫자로 바꿔주는 모델은 임베딩 모델이라고 함
- 이 데이터를 이용해 찾는 것을 벡터 서치(Vector Search) 또는 시멘틱 서치라고 함
백터 서치가 다 좋은 건 아님
- 대규모 계산에서 속도 느림
- 성능 문제 - 고품질 답변을 얻으려면 유용한 컨텍스트 제공이 필수이기 때문에 백터 서치를 위한 벡터 DB회사 주목 받고 있음
기본적인 프롬프팅 과정
- 배경지식 설명 - 이러 이러한 상황이야. 그리고 이걸 원해! -> 적절한 컨텍스트를 제공하고 활용하는 것을 인컨텍스트 러닝이라고 함
- 프롬프트 작성 - 이렇게 해
- 결과형식 지정 - 이런 형식으로 답변해세요
다음과 같이 5단계로 세분화
- 프롬프트 결과 설정 - 얻고자 하는 정보 종류/형태 결정
- 프롬프트 평가 설계 - 결과 측정 방법 정의, 자동화했을 때 가장 중요한 단계
- 그라운딩 설계 및 평가 - 모델이 참조할 기초 데이터나 사실 정리
- 프롬프트 디자인 - 이것 저것 시도하고 테스트
- 모니터링 및 개선 - 개선하고 최신 정보 반영하고 등
프롬프트 디자인이 처음이라면 7개만 기억
- 역할 (Role)
- 대상 (Audience)
- 지식/정보 (Knowledge/Information)
- 작업/목표 (Task/Goal)
- 정책/규칙, 스타일, 제약사항 (Policy/Rule, Style, Constaint)
- 형식/구조 (Format/Structure)
- 예시 (Example)
프롬프팅 테크닉 TOP 8
- 예시 제공
- CoT (Chain of Thought)
- 자기 일관성 - 자기 답변 여러 개를 이용해 일관성을 가지게 함
- 샘플링 투표 - 출력 유사도로 다수결 답변 선정
- 선택 추론 - 질문과 관련된 내용을 나열하고 이를 기반으로 답변 지시
- 최소에서 최대로 (Least-to-Most) - '{주어진 문제}를 풀려면 먼저 다음 문제를 풀어야 합니다'와 같이 작게 쪼개 질문하고 답변을 다음 질문에 그대로 입력하여 꼬꼬무(꼬리에 꼬리를 무는 이야기)처럼 만듬. 마치 작은 사건을 연결해 큰 문제를 해결하는 것과 같이.
- 리액트(ReAct) - 작업 별로 실행할 액션을 선택해 실행하는 방법. 외부 API 상호작용. 행동은 세 가지 유형이 있습니다. Search[entity], 이는 위키 백과에서 정확한 엔티티를 검색하고 존재하는 경우 첫 번째 문단을 반환합니다. 존재하지 않는 경우 검색할 수 있는 유사한 엔티티를 반환합니다. 와 같이 프롬프트 인스트럭션 만들고, 다음과 같이 씀. '행동1: Search[서울]'
- 자기평가 (Seach Evaluation) - 자기가 한 답변을 '자기평가 프롬프트'와 함께 질문에 되먹임. GPT-4와 같이 고성능 LLM 모델만 현재 가능
확장 테크닉
- 전문가 역할극 프롬프팅 - 전문가 페르소나 부여
- 위키피디아에 따르면 - 그라운딩 입력
- 지식 생성 프롬프팅 - 지식 먼저 생성 -> 지식 기반으로 답변
- 검색 증강 생성(RAG, Retrieval Augmented Generation) - 외부 검색 결과를 프롬프트 컨텍스트로 제공, 백터 서치 매우 중요.
- 프롬프트 체이닝 - 앞선 테크닉 TOP8과 같이
좋은 프롬프트 만들기
- 명확한 지시문
- 적절한 예시
- 모델에게 생각할 시간을.
- 작업 쪼개기
- 적절한 컨텍스트 - CoT와 체이닝 쓰면 좋겠지?!
- 생각보다 잘 안될 수 있음
- 구조화된 프롬프트 - 마치 코드처럼
원하는 결과가 나오지 않는다면
- 지시문을 반복해서 사용
- 지시문, 컨텍스트 위치 바꾸기
- 단어 바꿔보기
프롬프트 평가
- 신뢰성 (Faithfulness)
- 관련성 (Relevance)
- 정확성 (Correctness)
- 지침 (Guideline)
용어 공부
- 토큰 - 입출력 텍스트의 구성 요소 쪼갠 단위 (apple과 앞부분 겹치는 apples는 app과 les로 나눠져 2개)
- ** 한국어 이력서 보통 1,000~3,000개 토큰 / 200페이지 개인상해보험 약관 약 20만개 토큰
- 컨텍스트 윈도우 - 판단/예측에 사용되는 토큰 범위 또는 최대 토큰 수(GPT-3 2천개, GPT-4 8천개, Gemini 1.5 100만개)
- 청킹(Chunking) - 텍스트를 적절한 길이로 자르는 방법. 최대 토큰 수가 제한되어 있어 한번에 못넣음.
주요 옵션
- Temperature - 얼마나 높은 확률의 토큰을 사용할지. 1에 가까우면 창의적이나 헛소리 많이 하고 매번 다른 답변
- Top P - 확률이 상위 P%인 토큰
- Top K - 확률이 상위 K개인 토큰
- Maximum Length - 생성할 최대 토큰 수 (모델 최대 토큰 수 넘지 않도록 주의
프롬프트 예시
프롬프트 보안 취약점
- 프롬프트 인젝션
- 데이터 유출
- 취약한 샌드박싱
- 인증되지 않은 코드 실행
- LLM 생성 콘텐츠에 대한 과도한 의존
- 훈련 데이터 조작
- LLM의 목표와 사람의 목표가 불일치
- 불충분한 접근 제어
프롬프트 인젝션 방법 방법 3가지
- 프롬프트 입력 시 구분자를 사용해 사용자 입력값 격리
- 인젝션 프롬프트가 존재하는지 다른 LLM으로 확인 후 실행
- 명령을 입력받는 LLM과 문제 해결 LLM을 나눠서 사용
- System 프롬프트에 보안 정보 넣지 말기
- 내부, 외부 서비스 데이터 주입/프롬프트 명확한 분리
- 명령 실행 LLM의 경우 시스템 반드시 분리
참고도서
- 최고의 프롬프트 엔지니어링 강의, 김진중(골빈해커) 지음
'AI' 카테고리의 다른 글
개발자를 위한 ChatGPT 프롬프트 엔지니어링 - 1편 (0) | 2023.05.02 |
---|
댓글