LLM 선수 지식
Transformer Encoder 계열 모델
Masked Language Model (MLM)
- Seqence 에서 토큰 일부를 무작위로 선택하여 가리고, 모델이 가려진 단어를 예측하는 방식
- Contextual 정보를 활용하여 단어의 의미를 더 깊이 이해하도록 돕습니다. ( BERT )
셀프 어텐션 (Self-Attention)
- 쿼리에 대해서, 토큰 스스로를 포함하여 키와 벨류를 어텐션하는 방식
Transformer Decoder 계열 모델
Casual Language Model
- AutoRegressive 방식
- 입력 시퀀스로부터 토큰을 하나씩 생성하며, 생성된 토큰을 입력에 포함하여 다음 토큰을 예측합니다.
- 다시 말해서, 현재 시점까지의 토큰을 고려하여 다음 토큰을 예측하고, 마스킹으로 미래 토큰 정보는 차단합니다.
입출력 프로세스에 대한 분석 ( Inferene )
- 입력 텍스트는 토크나이저를 통해 토큰 ID로 변환됩니다. 예를 들어, 10개의 토큰 ID 가 생성되었다고 가정해봅시다.
- 토큰 ID는 Embedding layer를 통과하여, 모델의 히든 차원을 갖는 임베딩 벡터로 변환 됩니다.
( 임베딩 테이블에서 lookup 하여 임베딩 벡터를 추출해내는 방식 ) - 임베딩의 결과는 배치 차원을 포함하여 (batch, seq, model dimension)의 형태로, 가령 모델 차원이 512인 경우 (batch, 10, 512) 가 됩니다.
- 디코더의 출력은 모든 vocab 에 대한 로짓(logit) 값으로 제공 됩니다.
- 어휘의 크기가 10,000개 라면, 출력은 (batch, seq, 10000) 의 형태가 됩니다.
- 첫 번째 생성된 토큰에 대해 Softmax를 적용하여 예측 값을 얻고, 이 토큰을 다음 입력으로 사용하여 다음 토큰을 예측합니다.
- 최종적으로 필요한 시퀀스 길이만큼 반복하여 토큰을 생성하며, 최종 출력은 (Batch, output_seq, vocab size) 가 됩니다.
KV Cache
- 위 추론 과정에 따르면 디코더는 매번 이전에 예측된 모든 토큰들에 대해 Key와 Value를 재계산할까요? 그렇지 않습니다.
- 이전 계산 결과를 캐시하여 사용하는데 이를 KV Cache 라고 합니다.
Teacher Forcing
- 추론할 때는 필연적으로 순차적으로 토큰을 생성하게 되지만, 학습할 때는 굳이 순차적으로 진행할 필요가 없습니다.
- 우리는 이미 라벨을 알고 있기 때문에 이전에 예측된 토큰 대신 라벨을 가져다 사용할 수 있는데 이를 Teacher Forcing이라 합니다.
- 따라서 우리는 전체 시퀀스를 병렬로 학습하여 모델의 학습 속도를 향상시킬 수 있게 됩니다.
사전 학습과 FineTuning의 차이
사전학습
- 모델의 일반적인 언어 이해 능력 획득
- Large Corpus를 사용한 범용적인 학습
FineTuning
- 인코더 모델의 경우
- MLM을 통해 나온 CLS 토큰에 대하여 Logit 값으로 받아서, 뒷단에 Classifier 와 같은 Adapter를 붙여 학습시키는 방식으로 Finetuning이 이루어집니다.
- 디코더 모델의 경우
- 위에서 언급한 디코더 모델 학습과 로직이 동일합니다. 다만 사용하고자 하는 도메인의 데이터를 입력으로 받아서 Pretraining에 비해 적게 학습시키게 되는거죠.
- 주로 Triplet의 형태로 Instruction Tuning 하는 방식이 많이 애용 됩니다. Instruction과 Text Input, Label 이렇게 세 개 쌍으로 모델에 백만 쌍 가량 넣어서 학습시켜주는 것입니다. ( 단, Instruction과 Input Text는 입력으로만 들어갈 뿐 학습의 대상은 아니기 때문에 Loss 값을 구하거나 할 때 포함되지 않습니다. )
- Instruction Tuning 예시 1)
- Instruction : "지금부터 내가 문장을 입력하면, 해당 문장 내에서 사람 이름을 무작위로 바꿔서 출력해줘"
- Input Text : "김영수는 비가 내리는 것을 보았다."
- Label : "강철수는 비가 내리는 것을 보았다."
- Instruction Tuning 예시 2)
- Insturcution : "지금부터 내가 한글을 문장으로 입력하면, 이를 영어로 번역해줘"
- Input Text : " 너를 사랑한다."
- Label : "love you"
- 예시 2)에서 가령 Teacher Forcing으로 병렬 학습한다고 한다면, 아래와 같이 라벨을 가져와서 병렬로 학습하게 됩니다.
- Input : ["너를 사랑한다. <s>", "너를 사랑한다. <s> love", "너를 사랑한다. <s> love you"]
- Predict : [ "love", "you", "</s>" ]
얇은 LLM history
Encoder
- Representation 잘 뽑아내네? 감정 분류 해보자, 두 문장의 유사도 비교 해볼까? ......
Decoder
- Generative Pre-trained Transformer ( GPT )
GPT-2 ( 1 ~ 2 B )
- Zero - Shot
GPT-3 ( 175B )
- In-Context Learning, 학습을 안시켰는데 주어진 예시만으로도 얘가 이해해서 문제를 풀더라. (Few Shot Learning)
- scaling law와 emergent ability 참조
- 대 프롬포팅의 시대 시작
InstructGPT
사람이 알아들을 수 있게, 더 보기 쉽게 결과물을 뽑아보자. ( RLHF, Reinforcement Learning From Human Feedback )
1. SFT, Supervised Fine Tuning
- 기초 모델(Base Model)을 사용하여 사람이 질문에 답할 수 있도록 모델을 미세 조정 합니다.
- 결과적으로, 질문에 대한 답변을 생성할 수 있는 수준의 SFT 모델을 만듭니다.
2. Reward Model (Mimic Human Preferences)
- SFT 모델은 프롬포트(Prompt)에 대해 여러 개의 응답(Response)를 생성합니다.
- 사용자는 생성된 여러 응답 가운데 가장 마음에 드는 것을 선택하고, 순위를 매깁니다.
- 해당 데이터셋을 이용하여 사람의 선호를 반영하는 Reward Model을 학습합니다.
3. PPO(Proximal Policy Optimization) 를 사용한 SFT 모델 강화학습
- SFT 모델에 입력을 주고, 출력에 대해 Reward 반환, 학습을 반복합니다.
- 2, 3의 과정을 지속적으로 반복하며 모델을 강화합니다.
- DPO, KPO와 같은 최적화 방법도 있습니다.
ChatGPT
- Instruct GPT에 더하여 Dialogue 패턴에 대해 추가적으로 학습하여, 서비스화 시킨 게 ChatGPT 라고 할 수 있다.
- Dialogue 패턴을 어떻게 학습시켰는지는 공개되지 않았다.
업무에서 해야하는 LLM
- 업무에 필요로 하는 단계는 SFT 까지만 이라고도 할 수 있을 것이다.
( 나는 합성 데이터에서 Gentexting을 수행할 방법을 모색하는 중이다. ) - 고려해야할 점
- 프롬포트가 내 데이터와 적합한 방법으로 이루어져 있는가?
- N 개의 Task에 대해서 한번에 출력할 것인지, 순차적으로 출력할 것인지, 누적하여 출력할 것인지.
- 어떤 데이터를 어떻게 넣어서 Finetuning 해 줄 것인지. ( 키 - 밸류..? )
- 결과 값을 어떻게 받을 것인지 ( 샘플링..? )
@chanmuzi 님의 설명을 듣고 작성하였습니다
'LLM' 카테고리의 다른 글
DoLa: Decoding by Contrating Layers Improves Factuality in Large Language Models (2) | 2024.09.04 |
---|---|
테디노트 - 강수진 박사님 프롬포트 노하우 (29) | 2024.08.10 |
파인튜닝 전문가 이승유님 발표 자료 - 테디노트 (0) | 2024.08.04 |