트랜스포머·PEFT 2일 과정1장 · 준비 수학과 Transformer 개요10 / 17← 이전목차다음 →MetaContents

1장. 준비 수학과 Transformer 개요

남은 한계와 Transformer 의 등장

번역가에게 원문을 다시 들춰 볼 권리를 주었지만, 원문 요약 메모는 여전히 한 줄씩 차례로 만들어야 한다고 해 봅시다. 들춰 보기는 편해졌는데, 메모를 만드는 줄은 여전히 깁니다. 2017년 Google 연구진은 질문을 바꿨습니다. "Attention 이 이렇게 쓸모 있다면, RNN 을 아예 빼고 Attention 만으로 문장을 처리할 수는 없을까?" 그 답이 논문 "Attention Is All You Need" 의 Transformer 입니다.

순차 계산, 장거리 의존성, 기울기 소실의 세 한계를 나란히 놓은 비교 그림

Attention 을 더해도 남은 한계

한계원인결과
순차 계산h_t 가 h_(t-1) 에 기댄다GPU 로 나눠 계산하기 어려워 학습이 느리다
장거리 의존성정보가 여러 칸을 거쳐 전달된다긴 문장에서 앞부분 정보가 약해진다
기울기 소실같은 계산이 거듭 곱해진다긴 문장 학습이 불안정하다
RNN 은 나는, 배가, 너무, 고프다를 네 단계로 차례로 읽고 Transformer 는 모든 낱말 쌍을 행렬곱 한 번으로 잇는 모습을 견준 강사자료 그림

강사자료 그림의 위쪽은 RNN 입니다. "나는 배가 너무 고프다"를 1단계부터 4단계까지 차례로 읽고, h4 를 구하려면 h1 → h2 → h3 을 기다려야 합니다. "나는"의 정보는 "고프다"까지 3단계를 거치며 희미해집니다. 아래쪽 Transformer 는 네 낱말의 모든 쌍을 행렬곱 한 번으로 동시에 계산합니다. 어떤 두 낱말도 한 단계 만에 바로 이어집니다.

Transformer base 와 big 이 이전 모델보다 높은 BLEU 를 더 적은 학습 연산량으로 얻었음을 보인 원 논문의 표 2

원 논문의 표 2입니다. 영어→독일어(EN-DE)와 영어→프랑스어(EN-FR) 번역의 BLEU 점수와 학습 연산량(FLOPs, 부동소수점 계산 횟수)을 견줍니다. Transformer(big)는 EN-DE 28.4, EN-FR 41.8(빨간 상자)로 가장 높고, 학습 연산량은 EN-DE 기준 2.3·10^19 로 앙상블 모델들(10^20 이상)보다 적습니다. 10^19 는 1 뒤에 0이 19개 붙은 수입니다.

RNN 과 Transformer 견주기

견줄 점RNN(Seq2Seq + Attention)Transformer
읽는 방식한 칸씩 차례로모든 낱말을 한꺼번에
낱말 1과 4의 거리3단계를 거친다1단계에 바로 잇는다
GPU 활용앞 칸을 기다려 어렵다행렬곱 한 번이라 쉽다
핵심 계산순환(recurrence)Self-Attention(행렬곱)

짧은 예시

Python
import numpy as np

rng = np.random.default_rng(0)
# 낱말 4개(나는, 배가, 너무, 고프다) × 숫자 3개 문장 행렬. 값은 예시다
X = rng.normal(size=(4, 3))

# RNN: 낱말 4개면 차례로 4번 계산해야 한다
steps = 0
for word_vec in X:
    steps += 1               # 한 칸 끝나야 다음 칸
print("RNN 계산 단계:", steps)            # 결과: RNN 계산 단계: 4

# Transformer 식: (4, 3) @ (3, 4) 행렬곱 한 번으로 모든 낱말 쌍의 내적 점수표
pair_scores = X @ X.T        # X.T 는 X 의 행과 열을 바꾼 것(전치)
print("모든 쌍 점수표 shape:", pair_scores.shape)   # 결과: 모든 쌍 점수표 shape: (4, 4)

이 코드가 뜻하는 것

RNN 은 반복문으로 네 번 줄을 서고, Transformer 식 계산은 행렬곱 한 번으로 4×4 = 16 쌍의 점수를 한꺼번에 냅니다. 점수표의 i 행 j 열은 i 번째 낱말과 j 번째 낱말의 내적입니다. 여기서 문장이 X, 모든 쌍의 관련도 표가 pair_scores 입니다.

줄하는 일쉽게 말하면
for word_vec in X행을 하나씩 꺼낸다한 줄씩 차례로 읽기
X.T(4, 3) 을 (3, 4) 로 뒤집는다표의 행과 열 바꾸기
X @ X.T(4, 3) @ (3, 4) → (4, 4)모든 낱말 쌍을 한 번에 견주기

이 (4, 4) 점수표에 행마다 Softmax 를 하면 "낱말마다 다른 낱말을 얼마나 참고할지" 비율표가 됩니다. 이것이 3장의 Self-Attention 입니다.

주의할 점

  • 모든 쌍을 계산하는 대신 낱말이 n 개면 점수표가 n×n 칸이 됩니다. 낱말이 두 배면 칸은 네 배입니다. LLM 이 한 번에 받을 수 있는 글 길이(컨텍스트 길이)에 한계가 있는 까닭 가운데 하나입니다.
  • 한꺼번에 계산하면 "차례" 정보가 사라집니다. "개가 사람을 물었다"와 "사람이 개를 물었다"를 구별하려면 차례를 따로 알려 줘야 합니다. 2장의 위치 인코딩이 이 일을 합니다.
← 이전 절1장 · Attention 의 등장: 필요한 곳을 다시 보기다음 절 →1장 · Transformer 전체 구조 한눈에 보기