본문 바로가기

인공지능/LLM

GPT 구조에 대한 초간단 리뷰

728x90
반응형

GPT 구조에 대한 초간단 리뷰

GPT(Generative Pre-trained Transformer)란 무엇인가?

GPT는 자연어 처리(Natural Language Processing, NLP) 분야에서 각광받는 인공 지능 모델 중 하나입니다. 트랜스포머(Transformer) 아키텍처를 기반으로 하며, 대규모의 데이터로 비지도학습(Unsupervised Learning)을 통해 사전 훈련(Pre-trained)되어 있습니다. 이 모델은 다음 토큰 예측(Next Token Prediction)을 통해 훈련되며, 이는 주어진 텍스트 뒤에 이어질 단어나 문자를 예측하는 것을 목표로 합니다. 이 과정을 통해 언어의 근본적인 패턴을 학습하고, 이를 다양한 하위 작업에 파인튜닝(Fine-tuning)하여 활용할 수 있습니다.

GPT의 구조

GPT의 구조를 이해하기 위해선, 트랜스포머 모델의 플로우차트를 살펴볼 필요가 있습니다. 아래는 각 구성 요소를 간단히 설명한 것입니다.

1. 입력 임베딩(Input Embedding) + 위치 임베딩(Positional Embedding)

모델이 문장을 이해하기 위해, 각 단어는 고유한 벡터로 변환됩니다. 위치 임베딩은 단어가 문장 내 어디에 위치하는지 정보를 추가합니다.

2. 드롭아웃(Dropout)

과적합(Overfitting)을 방지하기 위해 일부 입력 값을 무작위로 0으로 설정합니다.

3. 레이어 노멀라이제이션(Layer Normalization)

각 레이어의 출력을 정규화하여 학습 과정을 안정화합니다.

4. 마스크드 셀프 어텐션(Masked Self-Attention)

모델이 주어진 단어의 위치에서 그 이전에 있는 단어들만 참조하도록 제한하여 정보의 순방향 흐름을 보장하는 트랜스포머 모델의 기능입니다. 이는 언어 생성 과정에서 모델이 아직 생성하지 않은 미래의 단어를 참조하지 않도록 하여 자동 회귀적인 텍스트 생성을 가능하게 합니다.

5. 덧셈(Add)

잔차 연결(Residual Connection)을 통해 입력을 직접 출력에 더함으로써 깊은 네트워크에서도 학습이 잘 이루어질 수 있도록 돕습니다.

6. 피드 포워드 신경망(Feed Forward Neural Network)

피드 포워드 신경망(FFNN)은 각 트랜스포머 레이어 내에서 중요한 역할을 합니다. 이 네트워크는 셀프 어텐션 부분의 출력에 독립적인, 비선형 처리를 추가하여 각 토큰의 표현을 강화합니다. FFNN은 두 번의 선형 변환과 비선형 활성화 함수(예: ReLU 또는 GELU)를 거쳐 입력 데이터의 차원을 변환하고, 모델이 복잡한 데이터 패턴을 학습할 수 있도록 합니다. 각 레이어의 FFNN은 독립적인 매개변수를 가지며, 이는 전체적인 언어 이해와 문장 생성에 필수적인 요소입니다.

7. 출력 임베딩(Output Embedding)

출력 임베딩은 모델의 마지막 트랜스포머 레이어에서 나온 출력을 다시 단어로 매핑하는 과정입니다. 기본적으로, 이 과정은 입력 임베딩의 역과정으로 생각할 수 있습니다. 즉, 모델이 입력 데이터를 내부적인 표현으로 변환하는 방식의 반대입니다. 각 단어 또는 토큰은 고차원 임베딩 공간에서 특정 벡터로 표현되며, 출력 임베딩 과정은 이러한 벡터를 취하여 가장 가능성이 높은 단어로 변환합니다. 이는 주로 임베딩 행렬을 사용하여 수행되며, 이 행렬은 사전 훈련 과정에서 학습됩니다. 출력 임베딩은 모델이 어떤 단어를 선택할 것인지 결정하는 데 도움을 주는 점수를 생성합니다. 이 점수는 각 단어의 확률을 결정하는 다음 단계인 소프트맥스 함수에 입력으로 사용됩니다.

8. 소프트맥스(Softmax)

소프트맥스는 출력 임베딩에서 생성된 점수를 확률 분포로 변환하는 함수입니다. 이 함수는 모델이 각 단어의 점수를 확률로 변환하여, 다음 단어로 무엇이 올지를 예측하는 데 사용됩니다. 소프트맥스 함수는 모든 가능한 단어에 대해 확률을 할당하고, 이 확률의 총합이 1이 되도록 합니다. 이렇게 하여 모델은 가장 높은 확률을 가진 단어를 다음 토큰으로 선택할 수 있습니다.

위 구조와 단계는 GPT가 복잡한 언어 패턴을 학습하고, 문맥을 고려해서 자연스럽게 문장을 생성합니다.

관련코드

picoGPT는 GPT-2의 단순 버전로 GPT 를 이해하기 위한 좋은 예제코드 입니다.

https://github.com/jaymody/picoGPT/

 

GitHub - jaymody/picoGPT: An unnecessarily tiny implementation of GPT-2 in NumPy.

An unnecessarily tiny implementation of GPT-2 in NumPy. - GitHub - jaymody/picoGPT: An unnecessarily tiny implementation of GPT-2 in NumPy.

github.com

picoGPT는  NumPy로만 구현되어 있으며, 전체 forward pass 코드가 단 40줄입니다. 이 코드는 성능적으로 속도가 느리고(🐌), 훈련 코드나 배치(batch) 추론, 고급 샘플링 기법은 지원하지 않으며, 단일 파일 라인에 대해서만 처리 가능하고, greedy 샘플링만을 지원합니다(✅). picoGPT는 매우 작은 크기('TEENIE TINY')를 자랑하며 Python 3.9.10에서 테스트되었습니다. 필요한 dependencies를 설치한 뒤 스크립트를 실행하여 텍스트 생성이 가능합니다. 

반응형

'인공지능 > LLM' 카테고리의 다른 글

Whisper large v3 모델 실행하기  (0) 2024.01.20
LLM 학습과정에서 RLHF 란?  (0) 2024.01.18
LLM 의 기본 구조와 모델  (0) 2024.01.18
LLama.cpp 설치하고 실행해보기  (0) 2024.01.14