Transformer 모델은 2017년 등장한 이래, 자연어 처리(NLP) 분야에서 혁신적인 성과를 이뤄냈으며, 다양한 언어 모델의 기반이 되었다. 특히, 기계 번역과 같은 자연어 응용 분야에서 뛰어난 성능 향상을 보여주었고, 이는 기존의 모델들과 비교할 때 압도적인 결과를 나타냈다.
이 모델의 핵심은 Self-Attention 메커니즘을 활용한 단어 간의 상호작용이다. Self-Attention은 각 단어를 숫자 벡터로 변환한 후, 내적을 이용해 단어 간의 유사도를 계산하고, 이를 통해 문장 내에서 서로 얼마나 밀접한 관련이 있는지를 파악한다. 이 과정에서 단어들의 관계를 더 잘 이해하고, 번역을 할 때 어떤 단어에 집중해야 하는지 학습한다.
또한, Transformer 모델은 Attention 메커니즘을 활용해 다음 단어를 예측할 때 어떤 단어에 집중해야 할지를 학습한다. 이를 통해 모델은 문맥에서 중요한 단어들을 선택하고, 이를 바탕으로 더욱 정확한 번역을 수행할 수 있게 된다.
Recurrent Neural Networks(RNN)은 순차적인 데이터를 처리하는 데 강점을 가진 모델로, 특히 시계열 데이터나 자연어 처리에서 많이 사용된다.
딥 러닝 " RNN (Recurrent Neural Network) "
RNN(Recurrent Neural Network) 시퀀스 : 문장 같은 단어가 나열된 것을 의미시퀀스 모델 : 이러한 시퀀스들을 처리하기 위해 고안된 모델. 그 중 RNN은 딥 러닝의 가장 기본적인 시퀀스 모델이다. 시계열
shok11.tistory.com
가장 큰 문제점은 시간이 지남에 따라 과거의 정보가 점차 소실된다는 것이다. 구체적으로, 시퀀스가 길어질수록 마지막 시퀀스의 정보만 강하게 반영되고, 그 이전의 정보는 상대적으로 약해진다. 이를 장기 종속성 문제(Long-term Dependency Problem)라고 부르며, RNN이 긴 문장이나 복잡한 시계열 데이터를 처리할 때 성능이 저하되는 주요 원인 중 하나다.
자연어 처리 관점에서 보면, 문장 내 마지막 단어에 지나치게 의존하게 되는 상황을 초래할 수 있다. 즉, 문장 전체 맥락을 이해하기보다는 마지막 단어만 중시하게 되어 정확한 의미 전달이 어려울 수 있다.
Transformer는 Self-Attention을 통해 RNN의 약점을 보완하고 더 효율적인 정보 처리를 가능하게 했다.
Transformer는 인코더-디코더 구조를 바탕으로 Self-Attention 메커니즘과 피드포워드 네트워크를 결합하여, 이전의 RNN이나 LSTM과 같은 순차적 처리 모델의 한계를 극복했다.
이후 등장한 여러 발전된 모델들은 Transformer의 구조에서 특정 부분을 제거하거나 수정하면서 성능을 향상시키는 방향으로 진화했다. 예를 들어, BERT는 디코더 부분을 제거하고 인코더만을 사용한 모델이며, GPT는 인코더를 생략하고 디코더만으로 언어 생성에 집중한 모델이다.
Transformer의 기본 구조를 잘 익히면, 이후 발전된 모델들이 어느 부분을 빼거나 수정했는지, 그리고 그것이 왜 필요한지를 명확히 알 수 있게 된다. 이 과정에서 모델이 어떻게 진화했고, 각각의 변형이 어떤 문제를 해결했는지 이해하는 것이 핵심이다.
인코더와 디코더는 각각의 문장을 처리하고 생성하는 데 있어 협력 관계에 있다. 인코더는 문장을 깊이 있게 이해하고, 이를 벡터로 압축하여 디코더로 전달한다. 디코더는 이를 바탕으로 새로운 문장을 생성하거나, 번역하는 작업을 수행한다.
이처럼 인코더는 입력을 이해하고, 디코더는 출력을 생성하는 과정을 통해 Transformer는 자연어 처리에서 강력한 성능을 발휘한다.
Transformer 모델에서 단어의 순서를 반영할 수 없는 단순한 내적 연산으로 인해, 각 단어의 위치 정보는 별도로 처리되어야 합니다. RNN과 달리 Transformer는 순차적 구조를 사용하지 않기 때문에, 각 단어의 위치 정보를 제공하는 것이 중요합니다. 이를 해결하기 위해 사용되는 것이 위치 임베딩(Positional Embedding)입니다.
1. 단어 배치 순서와 위치 정보
Transformer에서는 단어 임베딩만으로는 단어의 순서를 구별할 수 없다. 따라서 단어의 위치를 표현하기 위해 One-Hot Encoding을 사용하여 위치 정보를 추가할 수 있다.
2. 위치 임베딩 벡터 생성
이렇게 만든 위치 정보를 nn.Linear(max_len, D) 레이어에 통과시키면, 이는 위치 임베딩 벡터가 된다. 여기서:
- max_len: 문장의 최대 길이
- D: 임베딩 차원
이 레이어는 위치에 대한 정보를 고차원 벡터로 변환하는데, 결과적으로 각 단어의 위치 정보가 담긴 임베딩 벡터는 다음과 같은 형태를 갖게 된다.
위치 임베딩 벡터를 생성한 후, 이를 단어 임베딩 벡터와 더하는 것이 Transformer 모델에서 중요한 단계이다. 이때 단어 임베딩 벡터는 문장 내의 각 단어의 의미 정보를 담고 있으며, 위치 임베딩 벡터는 그 단어가 문장 내에서 어디에 위치해 있는지를 나타낸다.
이 두 벡터를 더하면 문장 내의 단어 의미와 그 단어의 위치 정보를 모두 포함하는 새로운 벡터가 만들어진다. 이 벡터는 Transformer의 핵심 메커니즘인 Self-Attention을 수행하기 위한 준비가 완료된 상태를 의미한다.
3. Self-Attention을 위한 준비
단어 임베딩과 위치 임베딩이 결합되면, Self-Attention 메커니즘이 학습을 통해 문장 내에서 각 단어가 다른 단어와 어떤 관계에 있는지, 어떤 단어에 더 주목해야 하는지를 학습하게 된다.
Positional Encoding은 단어의 순서 정보를 반영하기 위해 사용된다. 기존의 Positional Embedding과 달리, Positional Encoding은 사전 학습된 임베딩 벡터를 사용하지 않고, 수학적 공식을 통해 각 단어의 위치 정보를 추가하는 방식이다. 이 과정에서 복잡한 내적 연산을 생략하고, 단순히 sin과 cos 함수 값을 계산하여 임베딩 벡터에 더하는 방식으로 구현된다.
Positional Encoding은 특정 위치 pospos에 대해 고정된 값을 계산하며, 각 위치에 대해 sin과 cos 함수가 번갈아 가며 사용됩니다. 공식은 다음과 같습니다:
만약 첫 번째 단어의 위치가 pos=0pos = 0이라면, 위 공식에 따라 계산된 값은 다음과 같이 된다.
따라서 첫 번째 단어의 위치 값은 [0, 1, 0, 1, ...] 형태로 설정된다. 이 값은 단어 임베딩 벡터에 더해져, 각 단어의 위치 정보를 반영하는 역할을 한다.
이렇게 계산된 Positional Encoding 값은 단어 임베딩 벡터와 더해져서 입력된다. 이를 통해 Transformer 모델은 단어의 의미뿐만 아니라 문장 내에서의 위치 정보를 동시에 학습할 수 있게 된다. 이 과정을 거친 후, Self-Attention 메커니즘이 작동하며 단어 간의 관계와 위치 정보를 종합적으로 학습하게 된다.
Self-Attention은 Transformer 모델의 핵심 메커니즘으로, 문장 내에서 각 단어가 다른 단어와 어떤 관계를 가지고 있는지를 학습하는 과정이다. Self-Attention을 통해 각 단어는 문장 내에서의 의미적 관계를 이해하고, 어떤 단어에 주목해야 할지를 학습하게 된다.
Self-Attention에서는 세 가지 중요한 벡터가 사용된다.
기본적으로 Q, K, V는 임베딩 레이어를 통과한 단어 임베딩 벡터와 위치 임베딩(Positional Encoding)이 결합된 후, 각기 다른 Linear 레이어를 통해 선형 변환된 결과물이다. 예를 들어, 크기가 (32,50,512)인 임베딩 벡터가 (512,64)의 Linear 레이어에 통과하면, (32,50,64) 형태의 Q, K, V가 생성된다.
Scaled Dot-Product Attention은 Self-Attention에서 실제 내적 연산을 수행하는 단계이다. Q와 K의 내적을 통해 각 단어 간의 유사도를 계산하고, 그 값을 기준으로 V와의 관계를 평가하게 된다. 이때, 내적 연산은 학습이 필요한 파라미터가 아니라 단순히 각 단어 간의 유사도를 측정하기 위한 연산이다.
이 연산을 통해 모델은 문장 내에서 어떤 단어가 중요한지를 판단하고, 어떤 단어에 더 주목해야 할지를 학습하게 된다. RNN 기반의 Attention에서도 유사한 역할을 했지만, Transformer에서는 병렬 처리를 통해 더 빠르고 효율적인 학습을 가능하게 한다.
이와 같은 Self-Attention 메커니즘 덕분에 Transformer는 문장의 순서를 고려하지 않고도, 각 단어가 문장 내에서 어떤 관계를 가지는지 빠르게 파악할 수 있다.
1. Query, Key, Value 생성 및 내적 연산
Self-Attention의 첫 번째 단계는 Query(Q), Key(K), **Value(V)**를 생성하는 것이다. Q, K, V는 임베딩된 벡터가 선형 변환을 통해 만들어지며, 각 벡터는 문장 내 단어들 간의 유사도를 측정하기 위한 준비 단계이다. 이때 Q와 K의 내적을 통해 각 단어 간의 유사도를 계산한다.
2. Scaled Dot-Product 연산
Q와 K의 내적 결과를 얻은 후, 이를 모델의 차원수로 나누어 스케일링(Scaling)한다. 이 과정을 통해 너무 큰 값이 Softmax 함수에 들어가 소실되지 않도록 방지할 수 있다.
3. Softmax 연산
스케일링된 결과를 바탕으로, Softmax 연산을 수행한다. Softmax는 각 단어 간의 유사도를 확률 분포로 변환해, 어떤 단어에 더 집중해야 할지를 나타내는 가중치를 만들어낸다.
4. Value와의 결합
Softmax를 통해 얻어진 가중치를 V 벡터에 곱해 최종 Attention Value를 계산한다. 이를 통해 각 단어가 얼마나 중요한지를 파악한 후, 해당 단어에 대한 정보를 반영한 결과를 얻을 수 있다.
5. 최종 Attention 결과
최종적으로, 각 단어 간의 관계를 반영한 Attention Value를 얻게 된다. 이는 Self-Attention 메커니즘을 통해 각 단어가 문장 내에서 서로 어떤 관계에 있으며, 어떤 단어에 주목해야 하는지를 학습한 결과다.
이 값을 나누고 Softmax를 적용하면 다음과 같이 된다.
이 값이 바로 Qi에 대한 에너지 값이 되며, 이를 V와 내적 하면 단어 "I"에 대한 Attention Value를 얻을 수 있게 된다.
1. Multi-Head Attention 개념과 개별 Attention 처리
Multi-Head Attention은 단어에 대한 가중치를 다각도로 살펴보는 방법이다.
Scaled Dot Product Attention을 모두 수행하면 (N, t, dk) 형식의 Attention Value가 나온다. 이 과정을 h번 동시에 수행한다.
2. Scaled Dot-Product Attention의 병렬 처리 및 결합
각 Head에서 얻은 Attention 결과들을 Concat을 통해 결합한다. 여러 개의 Attention 값이 하나로 합쳐진다.
3. 최종 결합 및 Add & Norm (Skip Connection) 처리
Linear 레이어를 통해 각 Head의 생각이 종합 된다.
이때 Linear 레이어는 추후 Add & Norm 처리 ( Skip Connection )를 위해 입력 데이터와의 차원을 똑같이 맞춰준다.
1. Multi-Head Attention + Add & Norm (Skip Connection)
Add & Norm :
모델이 과거의 정보를 유지하면서 새로운 정보를 안정적으로 받아들이는 역활.
Multi-Head Attention이 적용된 결과는 입력 벡터와 더해져, 정보 손실을 방지한다. 그 후, Layer Normalization을 통해 학습 과정의 안정성을 유지한다.
첫 번째 입력 데이터는 ( Input Embedding + Positional Encoding )로 만들어진다. 이 후, Multi-Head Attention이 입력 데이터와 결합되어 Skip Connection이 적용된다.
Layer Normalization :
각 입력 데이터에 대해 포준화를 적용하는 과정. 이를 통해 (N, t, dk × h) → (N, t, 512)라면 512개의 데이터에 대한 표준화를 수행한다.
2. Feed Forward + Add & Norm
Feed Forward는 Multi-Head Attention에서 학습된 관계를 더 깊이 분석하기 위한 네트워크다. 이 네트워크는 두 개의 선형 변환으로 구성되며, 첫 번째 변환에서는 차원을 확장하고( ReLU 적용 ), 두 번째 변환에서는 다시 차원을 줄인다.
- Add & Norm : Feed Forward를 통과한 결과도 다시 원래 입력 벡터와 더해지고, 정규화 과정을 거친다.
- 이 과정은 Encoder에서 N번 반복되며, 문장의 의미를 점차 깊이 있게 학습한다.
디코더는 인코더(Encoder)와 매우 유사한 구조를 가지고 있지만, 디코더는 추가적으로 Masked Multi-Head Attention을 수행한다. 이후 인코더와 똑같이 Multi-Head Attention을 수행 하는데, 이 때 인코더의 결과 벡터를 K, V로 삼는다.
- Masked Multi-Head Attention: 아직 예측되지 않은 단어는 보지 못하도록 가리면서(마스킹) Attention을 적용
Masked Multi-Head Attention의 기능
입력이 들어가는 방식은 인코더와 동일하지만, 학습 시에는 Teacher Forcing, Test 수행 시에는 출력으로 나온 출력으로 나온 내용을 입력으로 사용한다. Multi Head Attention에 문장을 집어 넣고 그냥 Attention을 수행하면 뒤에 등장해야 할 단어들을 모두 보면서 Attention을 수행하게 된다. 미래의 단어를 참조하지 못하도록 하여, 모델이 올바른 순서대로 다음 단어를 예측하게 만든다.
Softmax를 통해 각 단어에 할당된 확률을 계산하고, 뒤쪽 단어는 매우 작은 음수값으로 변경된다.
이 단계에서 Softmax 연산을 통해 확률 분포를 계산하고, 그 결과에 따라 다음에 출력될 단어를 예측한다. Softmax는 각 단어가 출력될 확률을 계산해 준다.
Softmax로 계산된 Attention 가중치를 Value 벡터와 결합하여 최종 Attention 값을 얻는다. 이 값은 문장 내에서 각 단어가 다른 단어와 어떤 관계를 맺고 있는지 반영하게 된다. 최종적으로 Attention 값을 계산한 후, Value 벡터와 결합하여 문장의 의미를 파악한다.
디코더는 인코더의 Multi-Head Attention 출력 값을 사용하여 Key와 Value를 얻고, 이를 바탕으로 Q와의 상호작용을 통해 다음에 출력될 단어를 예측합니다. 이 상호작용을 통해 입력 문장과 출력 문장 간의 관계를 학습합니다.
디코더에서 최종적으로 Multi-Head Attention 결과와 Add & Norm 처리를 한 뒤, Feed Forward 네트워크를 통해 더 깊이 있는 단어 벡터를 학습하고, 최종적으로 Softmax를 통해 출력 확률을 계산합니다.
추론 수행 시에도 똑같이 Masking을 합니다. 따라서 미래 단어를 참조하지 않게 되기 때문에
번역의 결과가 달라질 염려는 없다.
1. Transformer의 학습은 결국 임베딩 벡터를 어디에 위치 시켜야 할지를 학습한다.
2. 관련 없는 벡터와의 내적이 0이 되는 직교 방향으로 학습하지 않는 이유는 Softmax 때문이다.
3. 내적의 결과에 Softmax를 수행하기 때문에 내적의 결과가 음수 쪽으로 향해야(반대 방향의 벡터로 만들어야) Softmax 의 결과가 0일 때 반대를 의미하게 된다고 해석할 수 있습니다.
4. 자연스럽게 주목해야 할 단어를 찾아내게 되며, 이 때 잔차 학습(Skip Connection)이 큰 역할을 한다.
https://arxiv.org/abs/1706.03762
Attention Is All You Need
The dominant sequence transduction models are based on complex recurrent or convolutional neural networks in an encoder-decoder configuration. The best performing models also connect the encoder and decoder through an attention mechanism. We propose a new
arxiv.org
이상 강사님의 자료와 논문을 배경으로 공부해 보았습니다.
BLEU Score ( 자연어 처리(NLP) 모델의 성능을 평가하는 지표 )에 대해서는 추후에 공부해서 올리겠습니다.
한국 경제신문 with toss bank Final_Project 리뷰 (6) | 2024.12.24 |
---|---|
[패스트캠퍼스] 완강 후기 테디노트의 RAG 비법노트 : 랭체인을 활용한 GPT부터 로컬 모델까지의 RAG 가이드 (2) | 2024.12.15 |
딥 러닝 " RNN (Recurrent Neural Network) " (15) | 2024.10.08 |
기본_LLM_Chain_( 1 ) (10) | 2024.09.21 |
Deep Learning 공부하기 ( 2 ) (1) | 2024.09.19 |