티스토리 뷰
안녕하세요. Teus입니다.
지난번 포스팅을 통해서, GPT의 구조가 대략적으로 어떻게 생겼고
해당하는 구조를 통해서 다음단어 예측기(Decoder Only Transformer)가 대략적으로 어떻게 동작하는지 확인했습니다.
이번 포스팅에서는 해당하는 다음단어 예측기를 통해서 어떻게 GPT가 Chat
이 가능한지 알아봅니다.
1. 다음단어 예측기의 한계
GPT는 문장
이 주어졌을 때, 앞에있던 단어들을 가지고 다음에 올 단어을 예측합니다.
이러한 문장의 경우 대부분 위키피디아 등에 존재하는 문서 형태이기 때문에
인터넷의 수많은 문서를 학습한 상태의 LLM에게(이를 pre-trained
상태라고 합니다)
오늘 날씨는 어때?
라고 물어본다면
이처럼 정상적이지 못한 다음단어만 예측을 하면서, LLM이 예상치 못한 결과만을 줄 뿐 입니다.
이때 조금 책과 비슷한 형태의 텍스트를 입력하면, 아래와 같이 됩니다.
서울의 날씨는 맑음. 부산은 아래지방 이므로
이처럼 GPT는 Text를 받고, 해당하는 Text의 다음 단어를 예측할 뿐입니다.
때문에 이런 GPT한테 어떻게 유저와 Chat
을 할지를 알려줘야하고
이 과정을 instrunction tunning
이라고 합니다.
2. instruction tunning
pre-traind
상태에서
이제 유저와의 Chat
이 가능하게 만드는 post training(또는 fine tuning)
의 일종입니다.
LLM의 경우 문장을 집어넣으면, 해당 문장 다음에 올 단어를 예측했었죠?
이점을 동일하게 이용 합니다.
일단 설명에 앞서, ChatGPT가 받아들이는 문자가 어떤 형태인지 볼 필요가 있습니다.
https://tiktokenizer.vercel.app/
유저가 chatGPT한테 너의 이름은 뭐야?
라고 입력할 경우
아래와 같은 형태로 입력이 됩니다.
우리는 단순하게 너의 이름은 뭐야?
라고 입력했다고 생각하지만
실제로는 <|im_start|>
, <|im_sep|>
과 같은 특수 문자들이 삽입되어 있는 것을 확인할 수 있습니다.
해당 문자들의 경우 instruction tuning
과정에서 chatGPT가 학습을 했고,
첫<|im_start|>
다음에는 system
이라는 글자가 나와야하고,
그 다음은 <|im_sep|>
이 나오게 학습된것 이라고 볼 수가 있습니다.
그럼 도대체 어떻게 학습했길래 이게 가능 했을까요?
ChatGPT의 instruction tuning 과정을 알 수는 없지만
llama를 가지고 Alpaca를 만든 과정이 완벽하게 오픈소스로 공개되어서,
어떤 과정으로 학습을 했을지 대략적으로 추측을 할 수가 있습니다.
3. Alpaca의 instruction tunning
https://github.com/tatsu-lab/stanford_alpaca
Alpaca의 경우, Meta의 llama를 사용해서 Chat
이 가능하게 만든 오픈소스 모델 입니다.
GitHub - tatsu-lab/stanford_alpaca: Code and documentation to train Stanford's Alpaca models, and generate the data.
Code and documentation to train Stanford's Alpaca models, and generate the data. - tatsu-lab/stanford_alpaca
github.com
Alpaca가 단순한 다음문자 예측기
를 어떻게 Chat
이 가능하게 했는지는, 아래 형태를 통해서 알 수 있습니다.
Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.
### Instruction:
Classify the following into animals, plants, and minerals
### Input:
Oak tree, copper ore, elephant
### Response:
Oak tree: Plant\n Copper ore: Mineral\n Elephant: Animal
학습에 사용된 실제 데이터 입니다.
보면 알 수 있듯, pre-train
때와는 다르게 질문에 대한 답변
세트로 구성되어있는것을 확인할 수 있습니다.
https://github.com/tatsu-lab/stanford_alpaca/blob/main/alpaca_data.json
stanford_alpaca/alpaca_data.json at main · tatsu-lab/stanford_alpaca
Code and documentation to train Stanford's Alpaca models, and generate the data. - tatsu-lab/stanford_alpaca
github.com
이런 수많은 데이터를 학습한 이후에
Alpaca와 Chat을 하기 위해서는 아래와같이 text를 만들 뒤 다음 단어를 예측하게 만들면 됩니다.
Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.
### Instruction:
Classify the following text as formal or informal.
### Input:
Hey, what's up? Wanna grab lunch later?
### Response:
pre-trained
상태의 LLM의 경우 평문에 대한 다음 단어 예측만 학습했기 때문에 Chat이란게 불가하지만
위처럼 instrunction과 input이 주어지고, 그 다음 Response:
다음에는 어떤 식으로 단어를 예측 해야할지를 instrunction tuning
과정에서 배웠기 때문에
단순한 다음단어 예측기 상태에서, Chat이 가능한 LLM으로서 활용이 가능하게 됩니다.
huggingface에서
pre-trained
상태의 모델을 Base 모델
이라고 하고,
instruction tuning
이 완료된 모델은instruct 모델
로 표기되는것을 볼 수 있습니다.
이제 ChatGPT로 돌아가 볼까요?
ChatGPT의 경우
<|im_start|>system<|im_sep|>You are a helpful assistant<|im_end|>
<|im_start|>user<|im_sep|>너의 이름은 뭐야?<|im_end|>
<|im_start|>assistant<|im_sep|>
형태로 유저의 질문이 ChatGPT한테 입력되고, 그 뒷부분에 올 단어를 예측하게 되어있습니다.
그러므로, ChatGPT의 경우 아래형태의 데이터를 사용해서 instruction tuning을 진행했을 것이란걸 예상해 볼 수 있습니다.
<|im_start|>system<|im_sep|>{System_instruction}
<|im_end|><|im_start|>user<|im_sep|>{User_Query}<|im_end|>
<|im_start|>assistant<|im_sep|>{LLM_Response}<|im_end|>
'Ai' 카테고리의 다른 글
쉽게이해하는 GPT. 1편(다음단어 예측기. Base모델) (1) | 2025.04.15 |
---|
- Total
- Today
- Yesterday
- SIMD
- 모바일청첩장
- 프로그래머스
- AVX
- ai
- LLM
- git
- 병렬처리
- GPT
- stack
- 완전탐색 알고리즘
- 알고리즘
- javascript
- Python
- 코딩테스트
- ChatGPT
- 동적계획법
- 사칙연산
- GDC
- Search알고리즘
- react
- 청첩장
- 분할정복
- hash
- Greedy알고리즘
- 셀프모청
- prime number
- 자료구조
- 이분탐색
- Sort알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |