📌 서론
이번 글에서 설명할 모델들은 이전 글에서 설명한 트랜스포머 구조를 사용한 모델들이다. 그러므로 트랜스포머 구조를 설명한 이전 글을 읽고 오면 좋을 것 같다!
2024.08.19 - [Upstage AI Lab 4기/RAG] - [RAG] RAG의 기본 개념 및 트랜스포머 어텐션 설명 (1)
Bert
Bert는 트랜스포머의 인코더만을 사용한 모델이다.
디코더 부분이 없으니 자연어 생성보다는 자연어 이해에 초점을 맞춘 모델이라는 것을 알 수 있다.
트랜스포머 인코더 레이어를 여러 개 쌓아서 임베딩을 만들고 마지막에 classifier 레이어를 붙여서 원하는 결과물을 만들어낸다.
예를 들어, 텍스트의 의미를 이해하고 그 내용을 바탕으로 질문에 답해야 하는 상황을 상상해 보자. 이 경우, Bert는 텍스트를 잘게 쪼개어 각 단어와 그 관계를 분석하고, 이를 바탕으로 “이 텍스트가 무슨 뜻인지” 파악하게 된다. 그 과정에서 “질문에 답하기”와 같은 특정 작업을 위해 추가적으로 학습된 레이어를 통해 결과를 내놓는다.
Bert는 사전학습모델이기도 한데, 사전학습 모델은 레이블링 되지 않은 큰 데이터셋에서 먼저 데이터를 학습해서 모델이 일반적인 데이터 분포를 먼저 배우게 한다.
이후에 다운 스트림 태스크라고 하는 특정한 태스크에 대해서 다시 학습시켜서 모델을 조금 더 뾰족하게 만드는데 이를 fine-tuning이라고 한다. 프리 트레이닝을 먼저 수행하고 파인튜닝을 거친 모델은 다운스트림 태스크로만 학습한 모델보다 일반적으로 훨씬 좋은 성능을 보인다.
마치 우리가 시험을 대비해 공부하는 과정과 비슷하다. 처음에는 전체 교과서를 읽으며 개념을 익히는 과정(프리 트레이닝)을 거치고, 그다음에는 시험에 나올 가능성이 높은 부분(다운스트림 태스크)에 집중하며 문제를 푸는 과정(파인튜닝)을 거치는 것이다.
그런데 레이블링이 되어있지 않은 데이터를 갖고 어떻게 학습을 할 수 있을까?
일반적으로 프리 트레이닝은 주어진 큰 데이터셋에서 문제를 자동적으로 생성해 모델에게 풀게 하는 방식을 통해 진행된다. 이는 우리가 학습하는 방식과도 좀 비슷한데, 백지 쓰기나 빈칸 채우기 등의 방식을 생각하면 된다.
Bert Pre-Training
Masked Language Modeling
Masked Language Modeling은 빈칸 채우기 문제이다. 문장의 중간중간에 구멍을 뚫어놓고 구멍이 뚫린 토큰이 원래 무엇이었는지를 맞추는 방식이다. 위 예시 안에는 ‘카카오콩’이 들어가면 된다.
Bert는 마스크 토큰이 해당하는 자리의 임베딩을 가지고 해당 마스크 토큰이 원래 무엇인지를 예측하는 방식으로 pre-training 한다.
이 방법은 우리가 어릴 때 연습장에 ‘빈칸 채우기’ 문제를 푸는 것과 비슷하다. 문장에서 일부 단어를 빈칸으로 만들어두고, 그 빈칸에 들어갈 단어를 맞추는 것이다. 예를 들어, “나는 ( )을 먹었다”라는 문장에서 빈칸에 들어갈 단어를 맞추는 방식이다. Bert는 이러한 문제를 통해 단어와 문장의 의미를 더 잘 이해할 수 있도록 학습한다.
Next Sentence Prediction
Bert가 pre-train인에서 사용한 두 번째 전략은 next sentence prediction이다. next sentence prediction은 두 개의 문장이 연속되는 문장인지 아니면 연속되는 문장이 아닌지를 판별하는 문제다.
첫 번째 토큰 자리의 임베딩에 classifier(분류기)를 씌워서 연속되는 문장일 경우에는 1, 그렇지 않을 경우에는 0을 출력하도록 한다.
예를 들어서, 초콜릿의 원료는 카카오콩이다. 그리고 초콜릿은 맛있다.라는 텍스트 데이터가 있다면 이 두 문장은 연속하는 문장일 확률이 높다. 이런 경우에는 1을 출력하면 된다.
이런 학습법은 특정한 다운스트림 태스크 해결에 직접적인 도움을 주는 것은 아니지만, 모델이 자연어의 분포에 대한 일반적인 사전 지식을 얻게 해 준다.
GPT
GPT는 Bert와는 대조적으로 트랜스포머의 디코더만을 사용한 모델이다. GPT 모델의 내부에는 트랜스포머의 디코더가 여러 겹 쌓여있다.
그런데 디코더 레이어를 보면 이전에 작성했던 트랜스포머의 디코더 레이어와 조금 차이가 있다.
트랜스포머 디코더 레이어에 대한 설명은 다음 링크에서 볼 수 있다.
트랜스포머의 디코더는 masked self attention, encoder-decoder attention, 그리고 feed forward network로 이루어져 있었는데 GPT에서는 인코더를 사용하지 않기 때문에 Encoder-Decoder attention은 쓸 수가 없다. 그래서 GPT의 디코더는 Masked self attention, FFNN 두 가지의 조금 더 간단한 구조를 가지게 된다.
GPT는 문장을 하나하나 생성해 가는 방식에 중점을 둔다. 예를 들어, “오늘 날씨는”이라는 문장이 주어지면, GPT는 그다음에 “좋다”와 같은 단어를 예측해 이어 붙인다. 이 과정은 사람이 이야기를 하나씩 만들어가는 것과 비슷하다. GPT는 이러한 방식으로 자연스러운 문장을 생성할 수 있도록 학습된다.
Bert와 GPT 차이점 1
Bert에서는 모든 토큰들이 각 트랜스포머 레이어로 들어가지만 GPT에서는 현재 시점보다 과거의 토큰만이 input이 되는 걸 볼 수 있다.
Bert는 문장 전체를 한꺼번에 보고 그 의미를 이해하려고 한다. 반면, GPT는 문장을 하나씩 만들어 나가면서, 앞에서 쓴 단어들을 바탕으로 다음에 올 단어를 결정한다. 이는 마치, Bert는 책의 모든 내용을 한 번에 읽고 요약하는 독서 방법이라면, GPT는 책을 한 줄씩 써나가는 작가의 방법이라고 할 수 있다.
왜냐하면 Bert는 input값을 한 번에 받아들이고 이해하는 것에 중점을 둔 언어 이해 모델이지만, GPT는 이전의 맥락을 참조해서 다음에 이어질 토큰을 출력하는 데 중점을 둔 언어 생성 모델이기 때문이다. 물론 그렇다고 Bert를 언어 생성에 아예 사용할 수 없거나, GPT를 언어 이해에 아예 사용할 수 없는 것은 아니지만, 두 모델이 가지는 주안점이 다르고 설계가 다르다는 것을 기억하면 좋다.
GPT Series: Pre-train
GPT는 Bert와는 다른 사전학습론을 사용한다.
Next Word Prediction
이전의 토큰들이 있을 때 다음의 토큰을 예측하는 방식이다. 이 방식은 앞서 Masked Language 모델링이나 Next Sentence Prediction처럼 레이블링 되지 않은 코퍼스에서도 학습한 문제를 만들어 낼 수 있다.
pretrain의 목적 (objective)
이 수식은 모델이 이전에 본 토큰(단어)들로부터 다음에 올 토큰을 예측하는 방식이다. 예를 들어, 문장에서 “나는 학교에”까지 본 상태라면, 그다음에 “갔다”라는 토큰이 올 확률을 최대화하는 방식으로 학습한다.
u_i는 각 단어(토큰)를 의미하고, Θ(세타)는 모델의 파라미터를 의미한다. 이 수식은 이전에 본 K개의 토큰(단어)들을 바탕으로, 다음에 올 토큰이 무엇인지 예측하는 방법을 학습하는 것이다.
모델은 한 번에 너무 많은 단어를 기억할 수 없기 때문에, “컨텍스트 랭스(context length)“라고 불리는 일정한 길이의 토큰만 참조한다. 예를 들어, GPT 모델이 현재 문장에서 10개의 단어를 참조한다고 하면, 그 10개의 단어를 바탕으로 다음에 올 단어를 예측하게 된다. 이 방식으로 문장을 만들어가면서 학습한다.
이 objective를 maximize 한 방식으로 출력되는 다음 토큰이 최대한 실제 다음 토큰과 가깝도록 학습할 수 있다.
이 과정을 퍼즐 맞추기에 비유할 수 있다. 이미 맞춰진 퍼즐 조각들을 보고, 그다음에 어떤 조각이 와야 할지 예측하는 것이다. 모델이 퍼즐을 맞히는 법을 잘 배우게 하기 위해, 가능한 많은 퍼즐을 보여주면서 학습시키는 것이 pre-training의 목적이다.
Fine-tuning의 목적 (Objective)
이 수식은 주어진 입력 문장(토큰들)에 대해 올바른 레이블을 예측하는 것을 목표로 한다. 예를 들어, 텍스트가 주어졌을 때 그것이 긍정적인지 부정적인지를 맞추는 것과 같은 작업이다.
fine-tuning을 하는 방식 자체는 Bert와 비슷하다. output에 linear layer를 하나 붙여서 올바른 레이블을 예측하도록 학습하는 것이다. objective 함수를 보면 input값에 비추어 올바른 출력값 Y를 찾아낼 확률을 최대화하고 있다.
이 과정은 마치 문제를 풀고 정답을 맞추는 연습과 같다. 이전에 퍼즐 맞추기에서 배운 내용을 활용해, 주어진 문제(문장)에 대해 올바른 정답(레이블)을 찾아내는 것이다. Fine-tuning 단계에서는 이와 같은 특정한 작업에 맞춰 모델을 더욱 정교하게 조정하게 된다.
Auxiliary Objective (보조 목적)
이 수식은 fine-tuning 단계에서, pre-training에서 사용했던 예측 방식(Next Word Prediction)을 추가로 사용하여 모델의 성능을 향상하는 방법을 보여준다.
디코더의 output으로부터 다음 토큰이 무엇인지도 학습하고 동시에 레이블도 예측하는 것이다. 이렇게 auxiliary objective를 사용했을 때 모델 학습 시에 수렴도 조금 더 빨리 되고, 일반화 성능도 올랐다고 한다.
요약
Bert는 Masked Language Modeling 방식을 사용해서 학습한다. Bert는 문장 중간중간에 빈칸(마스크)을 만들어두고, 그 빈칸에 어떤 단어가 들어가야 할지 예측하는 방식으로 학습한다.
예를 들어, "나는 [MASK]을 먹었다"라는 문장이 주어지면, "[MASK]"에 들어갈 단어가 "사과"인지 "빵"인지를 맞추는 것이다. Bert는 이 빈칸을 예측할 때 문장의 앞부분과 뒷부분 모두를 참고한다. 이를 "바이디렉셔널(Bidirectional)"이라고 부른다. Bert는 문장의 전체적인 맥락을 이해하기 위해 양쪽 방향을 모두 참고하기 때문에, 문장의 의미를 이해하는 데 매우 강력한 모델이다. 또한, Bert는 마스킹된 단어만 예측하고, 마스킹되지 않은 단어는 건드리지 않는다.
GPT는 Masked Language Modeling 방식을 사용하지 않고, 이전 토큰을 기반으로 다음 토큰을 예측하는 Next Token Prediction 방식을 사용한다. GPT는 문장을 순서대로 읽으며, 이미 본 단어들을 기반으로 다음에 어떤 단어가 올지 예측한다.
예를 들어, "나는 사과를 먹었다"라는 문장이 주어지면, "나는"을 보고 그다음에 "사과를", 그리고 "사과를" 다음에 "먹었다"를 예측하는 방식으로 학습한다.
GPT는 이전에 본 단어들만 참고하고, 앞으로 나올 단어는 전혀 보지 못한다. 그래서 GPT는 문장을 읽을 때 항상 앞에서 뒤로, 한 방향으로만 예측을 진행한다. 이런 특성 때문에 GPT를 "유니디렉셔널(Unidirectional)" 모델이라고도 부른다. GPT는 문장을 자연스럽게 이어가는 데 매우 능숙하다.
Bert는 문장의 중간중간에 빈칸을 두고 그것을 채우는 방식으로 학습하는 반면, GPT는 문장을 순서대로 읽으며 다음에 올 단어를 예측하는 방식으로 학습한다. Bert는 전체 문장의 앞뒤를 모두 살펴보면서 빈칸을 채우기 때문에 문장의 전체적인 의미를 잘 이해할 수 있다. 반면에, GPT는 문장을 처음부터 순차적으로 읽고, 그 흐름을 유지하면서 자연스럽게 문장을 이어나가는 데 강점을 가지고 있다. 따라서, Bert는 문장의 의미를 파악하는 데 강하고, GPT는 다음에 나올 문장을 예측하고 생성하는 데 강점이 있다.
'RAG' 카테고리의 다른 글
[RAG] RAG와 Fine-Tuning 차이점과 Small Language Models (SLM) (2) | 2024.08.30 |
---|---|
[RAG] RAG 파이프라인 (1) | 2024.08.30 |
[RAG] RAG의 기본 개념 및 트랜스포머 어텐션 설명 (1) | 2024.08.19 |
페르소나를 이용한 챗봇 (2) - chat memory 추가 (0) | 2024.08.13 |
페르소나를 이용한 챗봇 (1) - 셜록 홈즈 데이터 준비 및 검색 엔진 설정 (0) | 2024.08.13 |