트랜스포머 쉽게 이해하기 (1) - 인코더

2026. 4. 15. 20:08·개발지식/AI

트랜스포머에서의 인코딩 과정 (토큰화, 벡터화 멀티헤드 어텐션 등) 전체를 다룹니다


 

인코더 블록의 전체 구조


인코더는 아래의 단계들을 하나의 블록으로 묶어서 여러 번 반복합니다.

  1. 멀티헤드 어텐션 (쿼리, 키, 벨류를 이용한 연산)
  2. 잔차 연결 및 층 정규화
  3. 앞먹임 신경망

하나의 블록을 통과한 결과가 다음 블록의 입력이 되고, 이 과정을 반복할수록 단어 간의 관계가 점점 더 정교하게 표현됩니다.

인코딩 과정을 차근차근 설명해보겠습니다.

 

1단계: 쿼리, 키, 벨류 벡터 만들기


"I am study"라는 문장이 입력되면, 먼저 각 단어를 토큰화합니다.

예를 들어 "studying"이라는 단어는 "study"와 "##ing"처럼 더 작은 단위로 쪼개질 수 있습니다.

이렇게 나눠진 각 토큰은 숫자로 변환되어 토큰 임베딩 벡터(512차원)로 표현됩니다. 여기에 단어의 순서 정보를 담은 위치 벡터(512차원)를 더하면, 인코더 블록에 들어가는 입력이 완성됩니다.


"I"라는 단어 하나가 512개의 숫자로 이루어진 벡터로 표현되는 것입니다.


이 입력 벡터로부터, 각 단어마다 세 종류의 벡터가 만들어집니다. 쿼리, 키, 벨류 벡터는 각각 역할이 다르지만, 만들어지는 방식은 동일합니다. 하나의 입력 벡터에 각기 다른 가중치 행렬을 곱해서 만듭니다.


예를 들어 "I"에 대해서는 다음과 같습니다

  • (I의 임베딩 벡터 + 위치 벡터) × 쿼리 가중치 = 쿼리 벡터
  • (I의 임베딩 벡터 + 위치 벡터) × 키 가중치 = 키 벡터
  • (I의 임베딩 벡터 + 위치 벡터) × 값 가중치 = 값 벡터


같은 과정이 "am"과 "study"에 대해서도 각각 수행됩니다. 즉, 모든 단어가 자신만의 쿼리·키·벨류 벡터를 갖게 됩니다.

 

2단계: 어텐션 계산 — 단어 간의 관계 파악하기


이제 한 단어의 쿼리 벡터가 모든 단어의 키 벡터와 연산을 수행합니다.

"I"를 기준으로 설명하겠습니다.

  1. "I"의 쿼리 벡터를 "I"의 키 벡터, "am"의 키 벡터, "study"의 키 벡터와 각각 연산합니다.
  2. 그럼 "I"라는 단어 하나에 대해 3개의 값이 나옵니다. (이 값들은 "I"가 각 단어와 얼마나 관련이 있는지를 나타냅니다.)
  3. 이 3개의 값을 정규화합니다. (정규화란 이 값들의 합이 1이 되도록 변환하는 것입니다.) 예를 들어 0.55, 0.30, 0.15처럼 변환되면, "I"는 자기 자신과 55%의 관련성을, "am"과는 30%의 관련성을, "study"와는 15%의 관련성을 가진다는 뜻입니다.
  4. 이 정규화된 값들을 각 단어의 벨류 벡터와 연산합니다. (정규화된 값을 벨류 벡터에 곱한 뒤 모두 더합니다.) 그 결과 64차원의 벡터 하나가 만들어집니다. 이 벡터가 바로 "I"라는 단어가 문장 전체의 맥락을 반영하여 새롭게 표현된 결과입니다.

같은 과정을 "am"과 "study"에 대해서도 각각 수행합니다. 따라서 단어 3개에 대해 64차원 벡터 3개가 생성됩니다.



3단계: 멀티헤드 어텐션 — 여러 관점에서 바라보기


위에서 설명한 쿼리-키-벨류 연산은 하나의 헤드에서 일어나는 일입니다. 멀티헤드 어텐션은 이 과정을 여러 개의 헤드에서 동시에 수행합니다.

각 헤드는 서로 다른 가중치 행렬을 사용합니다. 따라서 같은 단어라 하더라도 헤드마다 다른 쿼리, 키, 벨류 벡터가 만들어지고, 결과적으로 각 헤드는 단어 간의 관계를 서로 다른 관점에서 파악하게 됩니다.

각 헤드의 결과는 단어당 64차원 벡터입니다. 이 벡터들을 모든 헤드에 대해 이어붙입니다. 예를 들어 헤드가 8개라면, 64차원 × 8 = 512차원의 벡터가 만들어집니다.

그 다음, 이어붙인 벡터에 멀티헤드 어텐션 가중치를 곱합니다. 이 연산을 통해 여러 헤드가 각각 발견한 정보를 하나로 통합한 최종 결과가 만들어집니다.

4단계: 잔차 연결과 층 정규화

 

멀티헤드 어텐션의 결과가 나오면, 바로 다음 단계로 넘어가지 않고 잔차 연결을 수행합니다.

잔차 연결이란, 멀티헤드 어텐션 블록에 들어가기 직전의 입력(토큰 임베딩 벡터 + 위치 벡터)을 그대로 보존해 두었다가, 멀티헤드 어텐션을 거쳐 나온 결과에 더해주는 것입니다.

잔차 연결 결과 = 블록의 입력(원본) + 멀티헤드 어텐션 결과 (3단계의 결과)

 

왜 이렇게 할까요? 멀티헤드 어텐션을 거치면서 원래 입력이 가지고 있던 정보가 손실될 수 있습니다. 원본 입력을 더해줌으로써 원래의 정보를 보존하면서도 새롭게 학습한 관계 정보를 함께 가져갈 수 있습니다.

잔차 연결 이후에는 층 정규화를 수행합니다. 층 정규화는 벡터의 값들이 너무 크거나 작아지지 않도록 안정적인 범위로 조정해주는 과정입니다.

 

5단계: 앞먹임 신경망


층 정규화까지 마친 결과는 앞먹임 신경망으로 전달됩니다. 앞먹임 신경망은 각 단어의 벡터를 독립적으로 변환하여, 더 풍부한 표현을 만들어냅니다. 앞먹임 신경망을 거친 후에도 다시 잔차 연결과 층 정규화가 수행됩니다.

이렇게 멀티헤드 어텐션 → 잔차 연결 및 층 정규화 → 앞먹임 신경망 → 잔차 연결 및 층 정규화까지가 인코더의 블록 하나입니다. 이 블록을 여러 번 쌓아서 인코더가 구성됩니다.

 

여기서 셀프 어텐션과 크로스 어텐션이라는 개념이 나옵니다.
셀프 어텐션은 Q, K, V가 모두 같은 문장에서 나오게 됩니다. “I am studying”라는 하나의 문장에서 Q, K, V를 만드는 것을 셀프 어텐션이라고 합니다.
반면 크로스 어텐션은 Q를 한쪽 문장에서, K와 V는 다른 쪽 문장에서 만드는 것을 말합니다. 예를 들어 한국어로 “나는”에서 Q를 만들고 “I am studying”에서 K, V를 만드는 것을 크로스 어텐션이라고 합니다

 

트랜스포머에서 사용자가 결정할 수 있는 변수(초모수, Hyper-Parameter)는 인코더 반복 횟수, 어텐션 헤드 수, 토큰 임베딩의 차원, 가중치 행렬의 크기, 토큰 사전의 크기 등이 있습니다.

 

인코더 레이어의 전체 흐름 요약


하나의 인코더 레이어는 다음과 같은 구조입니다.

입력(512차원)
  → 멀티헤드 셀프 어텐션 (8개의 어텐션 헤드)
  → 잔차 연결 (어텐션 블록의 입력 + 어텐션 출력)
  → 층 정규화
  → 앞먹임 신경망(FFN, Feed-Forward Network)
  → 잔차 연결 (FFN 입력 + FFN 출력)
  → 층 정규화
  → 출력(512차원)

* 첫 번째 인코더 레이어 안의 잔차 연결 입력: 단어의 토큰 임베딩 + 위치 임베딩
* 두 번째 인코더 레이어 안의 잔차 연결 입력: 이전 레이어의 출력

 

이 인코더 레이어를 N번 반복합니다. 원 논문(Attention Is All You Need)에서는 N=6입니다.




반응형
저작자표시 비영리 변경금지 (새창열림)

'개발지식 > AI' 카테고리의 다른 글

LLM 서빙 prefill·decode 분리 (1) - 분리의 이유  (0) 2026.06.11
LLM 서빙의 메모리 문제와 PagedAttention (2) - PagedAttention과 vLLM  (0) 2026.05.12
LLM 서빙의 메모리 문제와 PagedAttention (1) - KV 캐시와 단편화  (0) 2026.05.12
트랜스포머 쉽게 이해하기 (2) - 디코더  (0) 2026.04.20
GPU는 어떻게 트랜스포머의 행렬 연산을 가속하는가  (0) 2026.04.17
'개발지식/AI' 카테고리의 다른 글
  • LLM 서빙의 메모리 문제와 PagedAttention (2) - PagedAttention과 vLLM
  • LLM 서빙의 메모리 문제와 PagedAttention (1) - KV 캐시와 단편화
  • 트랜스포머 쉽게 이해하기 (2) - 디코더
  • GPU는 어떻게 트랜스포머의 행렬 연산을 가속하는가
반달bear
반달bear
꾸준히 성실하게 걷고 싶습니다. 지속 가능한 열정을 추구합니다.
  • 반달bear
    반달곰의 개발이야기
    반달bear
  • 전체
    오늘
    어제
    • 분류 전체보기 (107)
      • 개발지식 (35)
        • Spring (2)
        • Java (2)
        • DB (1)
        • Design Pattern (8)
        • CS (1)
        • Ops (12)
        • AI (8)
      • 기타 (72)
        • 일기 (5)
        • 지식 (67)
      • 일기장 (0)
  • 블로그 메뉴

    • 홈
  • 링크

    • 반달곰 Gihub
  • 공지사항

  • 인기 글

  • 태그

    소회
    실험
    java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
반달bear
트랜스포머 쉽게 이해하기 (1) - 인코더
상단으로

티스토리툴바