실습 3주차, 이번 주는 현대 AI의 근간이 된 Transformer(트랜스포머) 아키텍처를 논문을 이해하는 것을 목표로 삼았습니다. 단순히 라이브러리를 사용하는 것을 넘어, 내부 연산의 흐름과 설계 의도를 파고든 기록을 남깁니다.

1. Transformer: 왜 'Attention'만으로 충분한가?
기존 NLP의 표준이었던 RNN(Recurrent Neural Networks)은 문장을 단어 단위로 한 단계씩 순차적으로 처리했습니다. 하지만 이러한 방식은 두 가지 치명적인 병목 현상을 야기했습니다.
❶ 순차적 연산의 한계 (Sequential Bottleneck)
RNN은 t 시점의 연산을 하기 위해 t-1 시점의 결과가 반드시 필요합니다. 이는 최신 GPU의 강점인 병렬 연산(Parallel Computing)을 원천적으로 차단하여, 모델이 커질수록 학습 시간이 기하급수적으로 늘어나는 결과를 초래했습니다.
❷ 정보 소실 (Vanishing Gradient & Long-term Dependency)
문장이 길어질수록 앞부분의 정보가 뒷부분까지 전달되지 못하고 흐릿해지는 문제가 있었습니다. LSTM과 GRU가 이를 보완하려 했으나, 수백 단어 이상의 긴 문맥(Context)을 완벽히 유지하기엔 역부족이었습니다.
❸ 트랜스포머의 해법: "모든 단어를 동시에 보라"
트랜스포머는 '순서'라는 개념을 연산 순서에서 분리해냈습니다.
- Self-Attention: 문장 내의 모든 단어 쌍(Pair) 간의 관계를 한 번에 계산합니다. "The animal didn't cross the street because it was too tired"라는 문장에서 'it'이 무엇을 가리키는지 찾을 때, RNN처럼 앞의 단어를 다 거쳐오는 것이 아니라 'it'과 'animal'의 유사도를 즉각적으로 계산해버리는 방식입니다.
- Positional Encoding: 순차 연산을 없애면서 사라진 '단어의 위치 정보'를 보완하기 위해 도입되었습니다. 단어 임베딩에 사인(Sine)과 코사인(Cosine) 함수 기반의 고유 위치 값을 더해주어, 모델이 "이 단어는 문장의 앞에 있다"는 것을 수학적으로 인지하게 만듭니다.
결과적으로, 트랜스포머는 모든 정보를 한 번에(Global Context) 보면서도 병렬 처리가 가능해졌고, 이를 통해 훨씬 거대한 데이터를 빠른 속도로 학습할 수 있게 되었습니다. 이것이 바로 논문 제목이 "Attention이면 충분하다(Attention Is All You Need)"인 이유입니다.
2. 핵심 메커니즘: Scaled Dot-Product Attention

트랜스포머의 성능은 결국 "입력 데이터 중 어디에 집중(Attention)할 것인가"를 수학적으로 얼마나 잘 표현하느냐에 달려 있습니다. 그 수식이 바로 아래의 공식입니다.

이 수식이 왜 이렇게 설계되었는지, 각 구성 요소의 역할을 깊이 있게 분석해 보았습니다.
❶ Query, Key, Value의 역할극
단순히 데이터를 넣는 것이 아니라, 데이터를 세 가지 목적에 맞게 투영(Projection)합니다.
- Query (질문): "현재 내가 처리 중인 이 단어와 관련된 정보가 어디에 있지?"
- Key (색인): "나는 이런 정보를 가지고 있어. 네 질문과 얼마나 일치하니?"
- Value (값): "일치한다면, 내가 가진 이 실제 정보를 줄게."
❷ Dot-product (QK^T): 관계의 수치화
질문(Q)과 색인(K)을 내적(Dot-product)하는 과정입니다. 두 벡터가 유사한 방향을 향할수록 내적값은 커집니다. 즉, 단어 사이의 연관성(Similarity)을 점수로 환산하는 단계입니다. 이 점수가 높을수록 해당 단어의 정보를 더 많이 가져오게 됩니다.
❸ Scaling ($\frac{1}{\sqrt{d_k}}): 왜 굳이 나누는가?
이 부분이 설계의 핵심입니다.
- 문제점: 모델의 차원(d_k)이 커질수록 내적값(QK^T)의 절댓값도 기하급수적으로 커질 가능성이 높습니다.
- 결과: 내적값이 너무 커지면 softmax 함수를 통과할 때 출력값이 0 또는 1에 극단적으로 치우치게 됩니다.
- 치명적 단점: 소프트맥스 그래프의 끝부분에서는 기울기(Gradient)가 거의 0에 수렴하여, 기울기 소실(Vanishing Gradient) 문제가 발생하고 학습이 멈춰버립니다.
- 해결: 이를 방지하기 위해 차원의 크기인 sqrt{d_k}로 나누어(Scaling) 값의 범위를 조절함으로써 학습의 안정성을 확보한 것입니다.
❹ Multi-Head Attention: 앙상블의 지혜
논문에서는 이 연산을 한 번만 하는 것이 아니라, 여러 개의 'Head'로 나누어 병렬로 수행합니다.
- 한 Head는 '문법적 관계'에 집중하고,
- 다른 Head는 '의미적 관계'에 집중하며,
- 또 다른 Head는 *먼 거리의 맥락'에 집중합니다.
- 이렇게 나온 서로 다른 결과들을 하나로 합침으로써(Concatenate), 모델은 문장을 다각도에서 입체적으로 이해할 수 있게 됩니다.
3. Encoder vs Decoder: 닮은 듯 다른 두 엔진

트랜스포머 아키텍처는 정보를 압축하는 인코더와 이를 바탕으로 새로운 정보를 생성하는 디코더의 협업 시스템입니다. 두 엔진은 겉보기엔 비슷하지만, 정보를 다루는 '태도'에서 결정적인 차이가 있습니다.
❶ Encoder: 양방향 문맥의 마스터 (Bidirectional Context)
인코더의 역할은 입력받은 문장을 완벽하게 이해하는 것입니다.
- Self-Attention: 인코더 내에서는 모든 단어가 서로를 자유롭게 바라봅니다. 예를 들어 "사과가 맛있다"라는 문장에서 '사과'를 처리할 때 '맛있다'라는 정보를 즉시 가져올 수 있습니다.
- Global Understanding: 문장 전체의 관계를 한 번에 파악하여 각 단어의 고차원적인 의미 벡터(Context Vector)를 만들어냅니다.
❷ Decoder: 예측의 마술사와 'Masking'의 규칙
디코더는 인코더가 넘겨준 정보를 바탕으로 한 단어씩 결과를 출력합니다. 여기서 가장 중요한 점은 "미래를 봐서는 안 된다"는 것입니다.
- Look-ahead Masking: 번역을 할 때 모델이 다음에 올 단어를 미리 알고 있다면 학습이 제대로 되지 않습니다. 그래서 현재 시점보다 뒤에 있는 단어들을 수학적으로 '가리는(Masking)' 기법을 사용합니다. 이를 통해 디코더는 오직 '지금까지 생성한 단어들'만 참고하여 다음 단어를 예측하게 됩니다.
- Auto-regressive: 자신의 출력을 다시 자신의 입력으로 사용하는 자기 회귀적 특성을 가집니다.
❸ Encoder-Decoder Attention: 두 엔진의 교차점
디코더의 중간에는 인코더와 대화하는 특별한 층이 있습니다.
- The Bridge: 여기서 디코더는 "내가 지금 단어를 하나 만들어야 하는데, 인코더 네가 분석한 문장에서 어떤 부분에 집중하면 좋을까?"라고 질문(Query)을 던집니다.
- Interaction: 인코더는 자신이 만든 Key와 Value를 제공하며 응답합니다. 이 과정을 통해 "I love you"라는 영어 문장에서 'love'를 처리할 때 한국어 '사랑'이라는 부분에 강한 Attention을 가할 수 있게 됩니다.
4 후기
이번 논문 스터디를 통해 얻은 가장 큰 수확은 "수학적 엄밀함이 곧 모델의 성능으로 이어진다"는 확신으로, 단순히 오픈 소스 코드를 복사해 붙여넣는 수동적인 방식에서 벗어나 아키텍처의 설계 의도를 논리적으로 파악할 때 비로소 모델을 완벽히 제어할 수 있음을 깨달았습니다. 특히 내적값이 커짐에 따라 발생하는 Gradient Vanishing 문제를 해결하기 위해 도입된 Scaling(sqrt{d_k})의 수학적 필연성을 이해하며 작은 수식 하나가 거대 모델의 학습 가능 여부를 결정짓는 결정적 단서임을 체감했고, 인과관계를 보존하기 위한 Masking 기법이 어떻게 행렬 연산 내부에서 논리적 제약 조건을 구현하는지 학습하며 딥러닝이 단순한 '블랙박스'가 아닌 철저히 계산된 공학의 산물임을 확인했습니다.
'현장실습 일기' 카테고리의 다른 글
| 2주차 회고 -FashionMNIST로 비교하는 MLP vs CNN 성능 차이 분석 (1) | 2026.01.22 |
|---|---|
| 2주차 회고 - 딥러닝의 Hello World: MNIST 손글씨 숫자 분류하기 (1) | 2026.01.22 |
| 2주차 회고 - 딥러닝(Deep Learning)의 본질: '깊은' 신경망의 힘 (0) | 2026.01.22 |
| 현장실습 2주차 회고 (0) | 2026.01.22 |
| 1주차 회고 – Oxford-IIIT Pet Dataset으로 CLIP 적용하기 (0) | 2026.01.11 |