[SKALA] Transformer 이해하기

2025. 4. 18. 17:09·SKALA
728x90

Transformer는 자연어 처리(NLP) 분야에서 가장 널리 사용되는 모델 중 하나다.
특히 번역, 문장 생성, 요약 같은 작업에서 뛰어난 성능을 보여주면서 많은 주목을 받았다.

Transformer의 등장은 단순히 NLP 성능 향상을 넘어, 대규모 언어 모델(LLM)의 기반 구조로 이어졌다.

이 글에서는 Transformer의 기본 구조인 Encoder와 Decoder를 중심으로,
각 구성 요소가 어떻게 동작하는지 하나씩 정리해본다.

Transformer란?

Transformer는 기존 RNN이나 CNN과는 다르게, 입력 데이터를 병렬로 처리할 수 있는 구조를 갖고 있다.
이 덕분에 더 빠르게 학습이 가능하고, 긴 문장이나 복잡한 문맥도 잘 처리할 수 있다.

Transformer는 크게 두 부분으로 나뉜다:

  • Encoder: 입력 문장을 이해하는 역할
  • Decoder: 이해한 내용을 바탕으로 출력 문장을 생성

Encoder

Encoder는 다음 두 개의 주요 레이어로 구성되어 있다:

  1. Self-Attention Layer
  2. Feed Forward Layer

이 외에도 Multi-Head Attention, Positional Encoding,
Residual Connection + Layer Normalization 같은 보조 구조들이 함께 작동한다.

Self-Attention Layer

Self-Attention은 문장 내 다른 단어들과의 관계를 고려해
현재 단어를 더 잘 이해하도록 도와주는 핵심 메커니즘이다.

동작 방식

  1. Query, Key, Value 벡터 생성
    각 단어 임베딩에 가중치 행렬을 곱해 Q, K, V 벡터를 만든다.
    • Query: 지금 단어가 어떤 문맥을 찾고 싶은지
    • Key: 각 단어가 어떤 특성을 갖고 있는지
    • Value: 실제로 그 단어가 담고 있는 정보
  2. 유사도 점수 계산
    현재 단어의 Query와 모든 단어의 Key를 내적해서, 관련도를 점수로 계산한다.
  3. 스케일링
    점수가 너무 커지면 softmax에서 확률이 극단적으로 치우칠 수 있기 때문에,
    Key 벡터의 차원 수의 제곱근으로 나눠준다. → 안정적인 학습을 위해 꼭 필요한 과정이다.
  4. Softmax 정규화
    점수들을 확률로 바꿔, 어떤 단어에 주의를 얼마나 줄지를 정한다.
  5. Value 가중합 계산
    각 단어의 Value에 softmax 점수를 곱해 가중합을 만든다.
    → 관련성이 높은 단어일수록 정보가 더 많이 반영된다.
  6. 최종 출력 생성
    이 가중합이 곧 Self-Attention의 출력이 되고, 다음 레이어로 전달된다.

Multi-Head Attention

Self-Attention을 여러 개의 시선으로 동시에 수행하는 구조다.
보통 8개의 head를 사용하며, 각 head마다 다른 Q/K/V 가중치 세트를 갖는다.

장점

  • 자기 자신에만 주의를 집중하는 현상 완화
  • 다양한 문맥 표현 가능 → 같은 단어라도 다양한 관점에서 해석

흐름 요약

  • 여러 개의 Self-Attention을 병렬로 수행
  • 각 head의 출력을 concat
  • 마지막으로 출력 가중치 행렬을 곱해서 하나의 벡터로 결합

Positional Encoding

Transformer는 입력 순서를 따로 인식하지 않기 때문에,
단어의 위치 정보를 별도로 더해줘야 한다.

왜 위치 정보가 필요할까?

Transformer는 문장을 한 번에 바라보는 구조다.
그래서 “내가 몇 번째 단어인지”를 알려주는 위치 정보가 없으면, 문맥을 정확히 이해하기 어렵다.

구성 방식

  • sin, cos 함수를 기반으로 한 주기적인 수학 패턴 사용
  • 각 단어 임베딩에 이 위치 벡터를 더해서, 상대적인 거리나 순서를 반영

Feed Forward Layer

Self-Attention이 문맥을 파악하는 단계라면,
Feed Forward는 각 단어의 표현을 독립적으로 다듬는 단계다.

구조

복사편집
입력 → 선형 변환 → ReLU → 선형 변환 → 출력
  • 모든 단어 위치에 대해 동일한 네트워크를 독립적으로 적용
  • 비선형 변환이 포함돼 있어 모델의 표현력을 높여준다

Residual Connection & Layer Normalization

Transformer의 핵심 레이어들은 모두 다음의 구조를 따른다:

Residual Connection 정보 손실 없이 입력을 더해주고, 역전파도 안정적으로 만듦
Layer Normalization 출력 분포를 정규화해 학습을 더 안정적으로 진행할 수 있도록 함

이 구조 덕분에 Transformer는 레이어가 깊어져도 학습이 잘 된다.


Decoder 구조

Decoder는 인코더의 출력과 이전 시점까지의 디코더 출력을 바탕으로
다음 단어를 예측하는 구조다.

구성 요소는 다음과 같다:

  1. Masked Self-Attention
  2. Encoder-Decoder Attention
  3. Feed Forward Layer

모든 레이어는 Encoder와 마찬가지로
Residual Connection + Layer Normalization으로 감싸져 있다.

Masked Self-Attention

디코더에서 사용하는 Self-Attention은 미래 단어를 볼 수 없도록 마스킹이 적용된다.
문장을 왼쪽부터 순서대로 생성하려면, 아직 생성되지 않은 단어는 참조할 수 없어야 하기 때문이다.

마스킹 방식

  • softmax 계산 전에 미래 위치를 -∞로 설정
  • 해당 위치는 attention 점수가 0이 되므로, 이전 단어까지만 참조 가능

Encoder-Decoder Attention

이 레이어는 인코더의 출력 결과를 참고할 수 있도록 도와준다.
디코더는 이를 통해 입력 문장의 어떤 부분을 주목할지를 결정한다.

  • Query: 디코더 내부에서 가져옴
  • Key, Value: 인코더의 최종 출력에서 가져옴

Feed Forward Layer

구조와 역할은 인코더의 Feed Forward와 동일하다.

  • 두 개의 선형 변환 + ReLU
  • 단어 위치마다 독립적으로 적용
  • 이후 Residual + LayerNorm 처리

최종 출력: Linear + Softmax

디코더의 마지막 출력은 아직 단어가 아니라 벡터 형태다.
이를 실제 단어로 바꾸려면 다음 두 단계를 거친다:

  1. Linear Layer: 벡터를 단어 수만큼의 차원으로 확장 (logits 생성)
  2. Softmax Layer: 확률 분포로 변환하고, 가장 높은 확률의 단어 선택

학습 과정

Transformer는 학습 중, 예측 결과와 실제 정답 간의 오차를 바탕으로 학습한다.

예시

입력: "merci"
정답: "thanks"

  • 초기에는 모델 출력이 엉뚱하게 나온다
  • 예측된 확률 분포와 실제 정답의 one-hot 벡터를 비교
  • Cross-Entropy Loss를 계산해 역전파로 가중치를 조정

번역 결과 생성 방식

문장을 생성할 때 Transformer는 한 단어씩 순차적으로 예측한다.
이때 다음 단어를 고르는 방식은 다음과 같다:

1. Greedy Decoding

  • 매 스텝마다 확률이 가장 높은 단어 하나만 선택
  • 단순하고 빠르지만, 항상 최적의 결과를 보장하진 않는다

2. Beam Search

  • 여러 후보 경로를 동시에 탐색
  • 예: beam size=2 → 가장 가능성 높은 2개의 문장을 계속 유지하면서 확장
  • 정확도는 높지만 속도는 느려질 수 있음

Beam size, top-k 등은 하이퍼파라미터로 조절 가능하다

 

마무리

Transformer는 단어 간의 관계를 정교하게 계산하는 Self-Attention 구조를 기반으로,
복잡한 문맥도 효과적으로 이해할 수 있도록 설계된 모델이다.

이러한 구조 덕분에 딥러닝 모델이 길고 복잡한 문장에서도 뛰어난 성능을 낼 수 있는 LLM이 나오게 되었다.

Transformer의 Encoder-Decoder 구조와 각 구성 요소의 원리에 대해 알게되면서,
단순한 번역이나 문장 생성뿐 아니라 더 복잡한 AI 모델의 작동 방식도 이해할 수 있게 되었다.

Self-Attention에 대해서도 더 깊이 이해해보아야겠다.

 

참고자료: https://nlpinkorean.github.io/illustrated-transformer/

 

The Illustrated Transformer

저번 글에서 다뤘던 attention seq2seq 모델에 이어, attention 을 활용한 또 다른 모델인 Transformer 모델에 대해 얘기해보려 합니다. 2017 NIPS에서 Google이 소개했던 Transformer는 NLP 학계에서 정말 큰 주목을

nlpinkorean.github.io

 

728x90

'SKALA' 카테고리의 다른 글

[SKALA] 쿠버네티스 실습 - ArgoCD, Jenkins  (0) 2025.05.07
[SKALA] DB Query 작성 및 튜닝 기초 실습 (2)  (0) 2025.04.21
[SKALA] DB Query 작성 및 튜닝 기초 실습(1)  (0) 2025.04.17
[SKALA] AI Agent 두번째 실습 - LangChain, RAG  (0) 2025.04.08
[SKALA] AI Agent 개념 및 실습  (0) 2025.04.06
'SKALA' 카테고리의 다른 글
  • [SKALA] 쿠버네티스 실습 - ArgoCD, Jenkins
  • [SKALA] DB Query 작성 및 튜닝 기초 실습 (2)
  • [SKALA] DB Query 작성 및 튜닝 기초 실습(1)
  • [SKALA] AI Agent 두번째 실습 - LangChain, RAG
Sanghyundal
Sanghyundal
  • Sanghyundal
    초보 개발자
    Sanghyundal
  • 전체
    오늘
    어제
    • Coding
      • Flutter
      • FE
      • CS 공부
      • Git
      • 활동 관련
      • SKALA
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    pr agent
    우테코 프론트엔드
    Get.lazyPut()
    skala 부트캠프
    initialBinding
    SK
    ossca
    crew ai
    JS 이벤트 위임
    클라우드
    멋쟁이 사자처럼 해커톤
    ai agent
    자바스크립트 이벤트 위임
    skala
    turbopack
    css normalize
    skala1기
    Get.put()
    skala 1기
    oscca
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Sanghyundal
[SKALA] Transformer 이해하기
상단으로

티스토리툴바