주요 컴포넌트
- tokenizer
- Embedding Layer
- Transformer Decoder Layers
- Output Layer
컴포넌트 설명
Tokenizer
Tokenizer는 자연어 처리(NLP) 시스템에서 입력 텍스트를 처리하는 첫 번째 단계에서 활용되는 도구입니다. 이 과정에서 텍스트를 토큰(Token)이라는 최소 단위로 분할합니다. 자주 함께 쓰이는 문자 쌍을 병합해 서브 워드를 생성 합니다. 토큰은 단어, 부분 단어, 혹은 심지어 개별 문자일 수도 있습니다. 모델이 텍스트를 이해하고 처리하기 위해서는 먼저 이처럼 텍스트를 작은 단위로 나누는 과정이 필요합니다.
token : 텍스트를 분할하는 최소 단위
BPE (Byte Pair Encoding) Tokenizer의 동작 과정
BPE 토크나이저는 텍스트 데이터를 서브워드 단위로 분할하여 처리하는 방법입니다. 이 과정은 특정 문자가 자주 함께 등장하는 패턴을 찾아, 그 문자 쌍을 병합하여 더 긴 서브워드를 생성하는 방식으로 이루어집니다. BPE의 주요 단계는 다음과 같습니다:
1. 초기화
- 단어를 문자 단위로 분할: 먼저, 각 단어를 문자 단위로 분할하여 초기 단어 집합을 생성합니다. 예를 들어, "lower"라는 단어는
[l], [o], [w], [e], [r]
로 분할됩니다.- 예시:
- "lower" →
l
,o
,w
,e
,r
- "low" →
l
,o
,w
- "lower" →
- 예시:
2. 빈도 계산
- 문자 쌍의 빈도를 계산: 텍스트 내에서 모든 문자 쌍의 빈도를 계산합니다. 예를 들어, "lower"와 "low"에서 "lo", "ow", "we", "er" 등의 문자 쌍이 몇 번 나타나는지를 셉니다.
- 예시:
- "lower":
lo
,ow
,we
,er
- "low":
lo
,ow
- "lower":
- 예시:
3. 쌍 병합
- 가장 빈번하게 나타나는 문자 쌍 병합: 가장 빈번하게 나타나는 문자 쌍을 선택하여 병합합니다. 예를 들어, "lo"가 가장 자주 등장했다면 이를 병합하여 새로운 서브워드인 "lo"를 만듭니다.
- 예시:
- 병합 전:
l
,o
,w
,e
,r
- 병합 후:
lo
,w
,e
,r
- 병합 전:
- 예시:
4. 반복
- 병합 과정을 반복: 이 과정을 반복하여, 각 반복마다 가장 빈번한 쌍을 병합하고, 점점 더 긴 서브워드를 생성합니다. 이 반복이 충분히 진행되면, 단어 전체가 더 긴 서브워드로 구성됩니다.
- 예시:
- "lo",
w
,e
,r
→lower
- "lo",
- 예시:
Embedding Layer
Embedding Layer는 언어 모델이 텍스트 데이터를 수치형 벡터로 변환하는 데 중요한 역할을 합니다. 이 레이어는 텍스트를 고차원 벡터 공간으로 변환하여, 각 단어의 의미를 벡터 형태로 표현합니다. 이를 통해 모델은 텍스트의 의미적 관계를 이해할 수 있게 됩니다.
주요 특징:
- Embedding Matrix: Embedding Layer는 Embedding Matrix라는 가중치 행렬을 학습합니다. 이 행렬은 모델이 단어들을 벡터로 표현할 수 있도록 돕는 중요한 도구입니다. 각 행은 특정 단어의 벡터 표현에 해당합니다.
- 토큰을 벡터로 매핑: 입력 텍스트의 각 토큰(단어, 서브워드 등)은 Embedding Matrix의 특정 행으로 매핑됩니다. 예를 들어, 단어 "apple"이 입력되면, Embedding Matrix에서 "apple"에 해당하는 벡터를 추출하게 됩니다.
- 가중치 학습: 모델이 텍스트 데이터를 학습하는 동안, Embedding Matrix의 가중치도 함께 학습됩니다. 이 과정에서 모델은 단어들 간의 의미적 관계를 반영하도록 Embedding Matrix를 최적화합니다. 즉, 의미가 유사한 단어들은 벡터 공간에서 서로 가깝게 위치하도록 학습됩니다.
쉽게 말하면: Embedding Layer는 텍스트를 숫자로 표현하는 과정에서 중요한 역할을 합니다. 이 레이어는 각 단어를 의미적으로 유사한 벡터로 변환하여, 모델이 단어 간의 관계를 이해하고 활용할 수 있게 합니다. Embedding Matrix는 이러한 벡터 변환을 가능하게 하며, 학습 과정에서 단어 간의 의미적 유사성을 잘 반영하도록 최적화됩니다.
Embedding Layer의 특징
Embedding Layer는 텍스트 데이터를 수치형 벡터로 변환하는 과정에서 중요한 역할을 하며, 몇 가지 주요 특징을 가지고 있습니다.
1. 차원수 (Dimensionality)
- 차원수: Embedding 벡터의 차원은 모델을 설계할 때 결정됩니다. 일반적으로 수백에서 수천까지 다양하며, 벡터의 차원 수는 모델의 표현력과 밀접한 관련이 있습니다. 높은 차원수는 더 복잡하고 미세한 의미적 관계를 캡쳐할 수 있지만, 계산 복잡성도 증가합니다.
2. 학습 가능 (Trainable)
- 학습 가능: Embedding 행렬은 모델 학습 과정에서 지속적으로 업데이트됩니다. 학습을 통해 단어 간의 의미적 유사성이 반영되며, 이 때문에 새로운 언어에 적용할 때는 해당 언어에 맞게 Embedding Layer를 학습해야 합니다. 이를 통해 모델은 단어 간의 복잡한 관계를 학습하여 더 정확한 예측을 할 수 있습니다.
3. 중요성 (Importance)
- 의미 보존: Embedding Layer는 단어 간의 의미적인 관계를 유지하면서, 텍스트를 수치 벡터로 변환합니다. 예를 들어, "사과"와 "배" 같은 과일 이름들은 유사한 벡터로 표현되며, 모델이 이 관계를 이해할 수 있도록 돕습니다.
- 효율성: 텍스트 데이터를 수치 벡터로 변환함으로써, 모델이 데이터를 효율적으로 처리할 수 있게 합니다. 이는 대규모 텍스트 데이터를 다루는 데 특히 유리하며, 학습과 예측의 효율성을 높입니다.
- 학습 가능: 모델 학습을 통해 Embedding Layer는 단어 간의 복잡한 의미적 관계를 캡쳐하는 역할을 합니다. 이는 모델이 텍스트의 깊은 의미를 이해하고, 더 정교한 예측을 가능하게 합니다.
쉽게 말하면: Embedding Layer는 텍스트를 숫자로 바꾸는 역할을 하며, 단어들 사이의 의미적 관계를 잘 유지하면서, 데이터를 효율적으로 처리할 수 있게 합니다. 이 과정에서 벡터의 차원수는 모델의 성능에 중요한 영향을 미치며, 학습 가능한 Embedding 행렬은 새로운 언어에도 적용될 수 있도록 지속적으로 업데이트됩니다.
Transformer Decoder Layer
Transformer Decoder Layer는 주로 텍스트 생성 작업에서 사용되며, 다음과 같은 중요한 구성 요소들로 이루어져 있습니다. 각 요소는 모델이 문맥을 이해하고, 다음 단어를 예측하는 데 중요한 역할을 합니다.
1. Masked Self-Attention
- Masked Self-Attention: 입력 시퀀스의 각 토큰이 자신 이전의 토큰들만을 참조하여 어텐션을 수행하는 메커니즘입니다. 이를 위해 쿼리(Query), 키(Key), 값(Value) 벡터를 사용하여 어텐션 스코어를 계산합니다. 마스킹을 통해 미래의 토큰들을 참조하지 않도록 하여, 모델이 미래의 정보를 사용하지 않고 현재까지의 문맥만으로 다음 단어를 예측할 수 있도록 합니다. 이 과정은 시퀀스의 흐름을 자연스럽게 유지하며, 텍스트 생성의 순차성을 보장합니다.
2. Feed-Forward Neural Network
- Feed-Forward Neural Network: Masked Self-Attention의 출력에 대해 비선형 변환을 적용하여 더 복잡한 패턴을 학습하는 단계입니다. 일반적으로 두 개의 선형 변환과 비선형 활성화 함수(ReLU 등)를 사용합니다. 이 신경망은 각 토큰의 표현을 개별적으로 처리하여, 모델이 다양한 텍스트 패턴을 학습할 수 있도록 돕습니다. 이를 통해 문맥을 고려한 복잡한 관계를 모델이 이해하게 됩니다.
3. Layer Normalization
- Layer Normalization: 각 서브 레이어(예: Masked Self-Attention, Feed-Forward Neural Network) 뒤에 적용되어 모델의 학습 안정성을 높이고 훈련 속도를 향상시킵니다. Layer Normalization은 입력 벡터의 평균과 분산을 조정하여, 모든 층에서 입력 데이터가 일정한 분포를 유지하게 만듭니다. 이는 모델이 더 안정적으로 학습할 수 있도록 돕고, 깊은 네트워크에서 발생할 수 있는 문제들을 완화합니다.
4. Residual Connections
- Residual Connections: 각 레이어의 입력과 출력을 직접 연결하는 경로를 제공합니다. 이는 그라디언트 소실 문제를 완화하고, 모델이 더 깊은 구조를 가질 수 있도록 돕습니다. Residual Connections은 이전 레이어의 정보가 다음 레이어로 직접 전달되도록 하여, 학습 과정에서 중요한 정보가 손실되지 않도록 보장합니다. 이로 인해 모델은 더 깊고 복잡한 구조를 가지면서도 효과적으로 학습할 수 있습니다.
쉽게 말하면: Transformer Decoder Layer는 텍스트를 생성하는 과정에서 이전 단어들을 바탕으로 다음 단어를 예측합니다. Masked Self-Attention은 현재 시점 이전의 정보만을 사용해 문맥을 이해하게 하며, Feed-Forward Network는 그 문맥을 바탕으로 더 복잡한 패턴을 학습합니다. Layer Normalization과 Residual Connections은 학습의 안정성과 효율성을 높여, 모델이 더 정확하게 텍스트를 생성할 수 있도록 돕습니다.
Output Layer
Output Layer는 Transformer 디코더의 마지막 단계로, 모델이 다음 단어를 예측하거나 텍스트를 생성하는 데 중요한 역할을 합니다. 이 레이어는 주로 두 가지 주요 작업을 수행합니다: 선형 변환(Linear Transformation)과 SoftMax Activation입니다.
Linear Transformation
- 선형 변환: 디코더의 마지막 레이어에서 나온 출력 벡터를 어휘 크기만큼의 차원을 가진 벡터로 변환합니다. 이 과정에서 각 출력 벡터의 차원은 모델의 임베딩 차원과 동일합니다. 선형 변환을 통해, 모델은 각 출력 벡터를 어휘 집합 내의 모든 단어에 해당하는 벡터로 매핑합니다. 이렇게 변환된 벡터는 텍스트 생성 과정에서 각 단어가 다음에 나올 가능성을 계산하는 데 사용됩니다.
SoftMax Activation
- SoftMax 활성화: 선형 변환의 결과를 소프트맥스 함수에 입력하여 확률 분포로 변환합니다. 소프트맥스 함수는 각 벡터의 값을 0과 1 사이의 확률로 변환하며, 모든 확률의 합이 1이 되도록 조정합니다. 이를 통해 모델은 각 단어가 다음 위치에 등장할 확률을 계산하고, 가장 가능성이 높은 단어를 선택할 수 있게 됩니다.
Logits and Probabilities
- Logits와 확률: 소프트맥스 함수를 적용하기 전의 출력은 logit 값이라고 불립니다. 이는 모델의 선형 변환 출력으로, 로그 확률과 유사한 값을 가집니다. Logits는 확률로 변환되기 전 모델의 예측 점수를 나타내며, 이후 SoftMax 함수를 적용하여 각 단어가 선택될 확률을 계산합니다. 이 확률들은 다음 단어 예측 및 텍스트 생성에 활용됩니다.
쉽게 말하면: Output Layer는 모델이 다음에 올 단어를 예측하는 최종 단계입니다. 선형 변환으로 각 단어에 대한 점수를 계산하고, SoftMax 함수로 이 점수들을 확률로 변환하여, 어떤 단어가 다음에 나올 가능성이 가장 높은지를 결정합니다. Logits는 SoftMax 적용 전의 예측 점수로, 이 점수를 기반으로 확률이 계산됩니다.
'langchain 공부' 카테고리의 다른 글
임베딩과 차원의 의미 (0) | 2024.09.10 |
---|---|
llm 디코딩 방식 모음 (0) | 2024.09.02 |
Tokenizer와 embedding(LLM 역사와 발전4) (0) | 2024.09.02 |
생성의 의미, 인코더 디코더 모델(LLM 역사와 발전3) (1) | 2024.09.01 |
Transformer와 GPT3까지 발전 과정 (LLM 역사와 발전2) (3) | 2024.09.01 |