
📓Google Colab에서 실습하기
이 레슨은 PyTorch/GPU가 필요합니다. 노트북을 다운로드 후 Google Colab에서 열어주세요.
학습 내용
Transformer 개요 - 현대 AI의 시작점
학습 목표
이 레슨을 완료하면:
- •"Attention is All You Need" 논문이 왜 혁명적이었는지 설명할 수 있다
- •RNN/LSTM의 한계와 Transformer가 이를 어떻게 해결했는지 이해한다
- •Transformer 아키텍처의 전체 구조를 큰 그림으로 파악한다
- •Encoder와 Decoder의 역할 차이를 구분할 수 있다
핵심 메시지
"Transformer는 단어를 한 줄로 읽는 대신, 칠판에 적힌 모든 단어를 한눈에 본다." 이 단순한 아이디어 하나가 GPT, BERT, ChatGPT 등 현대 AI 혁명의 출발점이 되었습니다.
RNN의 한계 - 왜 새로운 구조가 필요했을까?
비유: 전화 통화 vs 칠판
Level 6에서 배운 RNN/LSTM을 떠올려 봅시다. RNN은 문장을 처리할 때 전화 통화와 비슷합니다.
RNN 방식 (전화 통화):
- •친구가 전화로 긴 이야기를 해줍니다
- •한 단어씩 순서대로 들어야 합니다
- •앞부분에서 들은 내용은 점점 기억이 흐려집니다
- •중간에 "아까 뭐라고 했지?" 하고 되돌아갈 수 없습니다
- •한 사람이 말을 끝내야 다음 사람이 말할 수 있습니다
Transformer 방식 (칠판):
- •친구가 모든 이야기를 칠판에 적어둡니다
- •모든 단어를 한눈에 볼 수 있습니다
- •첫 번째 단어와 마지막 단어의 관계도 바로 파악합니다
- •여러 사람이 동시에 칠판을 읽을 수 있습니다
RNN의 세 가지 근본적 문제
| 문제 | 설명 | 결과 |
|---|---|---|
| 순차 처리 | 단어를 하나씩 차례로 처리해야 함 | 학습이 매우 느림, GPU 활용 어려움 |
| 장거리 의존성 | 멀리 떨어진 단어 관계를 파악하기 어려움 | 긴 문장에서 성능 저하 |
| 정보 병목 | 모든 문맥을 하나의 벡터에 압축 | 정보 손실 불가피 |
구체적으로 살펴보겠습니다.
문제 1: 순차 처리의 느림
RNN이 "나는 오늘 학교에 갔다"를 처리하는 과정:
시간 1: "나는" 처리 → 상태 h1 생성 시간 2: "오늘" 처리 (h1 필요) → 상태 h2 생성 시간 3: "학교에" 처리 (h2 필요) → 상태 h3 생성 시간 4: "갔다" 처리 (h3 필요) → 상태 h4 생성
각 단계가 이전 단계의 결과를 기다려야 합니다. 100단어 문장이면? 100번 순차 계산이 필요합니다.
Transformer는 이 4개 단어를 동시에 처리합니다!
문제 2: 장거리 의존성의 어려움
긴 문장 예시: "그 소년은 매일 아침 공원에서 운동을 하고, 점심에는 도서관에서 공부를 하며, 저녁에는 친구들과 축구를 하는데, 주말에는 가족과 함께 시간을 보내는 것을 좋아하는 아이였다."
RNN이 "아이였다"를 처리할 때:
- •"그 소년은"이라는 주어 정보가 수십 단어를 거치면서 희석됨
- •LSTM이 게이트로 보존하려 해도 한계가 있음
Transformer라면:
- •"아이였다"에서 "그 소년은"을 직접 참조 가능
- •거리와 상관없이 모든 단어와 직접 연결
문제 3: 병렬 처리 불가
GPU의 강점: 수천 개의 작은 연산을 동시에 수행
RNN: t 시점 계산에 t-1 결과가 필요 → 병렬화 불가능
- •GPU가 아무리 좋아도 순차적으로 기다려야 함
Transformer: 모든 위치를 동시에 계산 → 완벽한 병렬화
- •GPU 코어를 최대한 활용 → 학습 속도 비약적 향상
"Attention is All You Need" - 역사를 바꾼 논문
논문의 배경
2017년, 구글 연구팀(Vaswani 등)이 발표한 이 논문의 제목부터 파격적이었습니다.
논문 제목: "Attention is All You Need" 번역: "어텐션만 있으면 됩니다"
기존 상식: 시퀀스 처리에는 RNN/LSTM이 필수다 논문 주장: RNN을 완전히 제거하고, Attention만으로 충분하다!
결과:
- •번역 성능에서 기존 모델을 크게 앞섬
- •학습 시간도 획기적으로 단축
이 논문이 낳은 것들
| 연도 | 모델 | 설명 |
|---|---|---|
| 2017 | Transformer | 논문 발표 |
| 2018 | GPT-1 (OpenAI) | Transformer의 Decoder 활용 |
| 2018 | BERT (Google) | Transformer의 Encoder 활용 |
| 2019 | GPT-2 | 더 큰 Transformer |
| 2020 | GPT-3 | 1750억 파라미터 |
| 2022 | ChatGPT | GPT-3.5 기반 대화형 AI |
| 2023 | GPT-4 | 멀티모달 AI |
| 2024~ | Claude, Gemini, LLaMA | 수많은 LLM |
모두 Transformer 아키텍처 기반!
핵심 아이디어: Self-Attention
논문의 핵심은 Self-Attention(자기 주의)이라는 메커니즘입니다.
비유: 독서 모임에서 한 문단을 분석할 때, 각 단어가 다른 모든 단어를 돌아보며 "나와 가장 관련 있는 단어는 뭘까?"라고 질문하는 것과 같습니다.
"나는 사과를 먹었다"에서 Self-Attention이 하는 일:
"먹었다"의 관점:
- •"나는"과의 관련성: 높음 (주어-동사 관계)
- •"사과를"과의 관련성: 매우 높음 (목적어-동사 관계)
- •"먹었다" 자신과의 관련성: 보통
결과: "먹었다"는 "사과를"에 가장 많이 주목하고, "나는"에도 적당히 주목하여 문맥을 이해합니다.
Transformer 아키텍처 전체 구조
큰 그림
Transformer는 크게 Encoder(인코더)와 Decoder(디코더) 두 부분으로 구성됩니다.
Encoder의 역할
Encoder = "이해하는 역할"
비유: 통역사가 영어 문장을 듣고 의미를 완전히 파악하는 단계
- •입력: 원래 문장의 토큰들
- •처리: Self-Attention으로 단어 간 관계 파악
- •출력: 각 단어의 문맥이 반영된 표현 (Context-aware Representation)
사용하는 모델: BERT, 문장 이해/분류 모델
Decoder의 역할
Decoder = "생성하는 역할"
비유: 통역사가 이해한 내용을 한국어로 한 단어씩 말하는 단계
- •입력: 이전에 생성한 토큰들 + Encoder의 출력
- •처리: Self-Attention + Cross-Attention (Encoder 출력 참조)
- •출력: 다음에 올 단어 예측
사용하는 모델: GPT 시리즈, 텍스트 생성 모델
Encoder 블록의 내부 구조
하나의 Encoder 블록:
입력 (단어 임베딩 + 위치 인코딩)
|
v
[Multi-Head Self-Attention] ← 단어 간 관계 파악
|
+ (잔차 연결: 입력을 더해줌)
|
v
[Layer Normalization] ← 값을 안정화
|
v
[Feed-Forward Network] ← 각 위치별 변환
|
+ (잔차 연결)
|
v
[Layer Normalization]
|
v
출력
이 블록을 N번 쌓음 (원래 논문에서는 N=6)
Decoder 블록의 내부 구조
하나의 Decoder 블록:
입력 (이전 출력 임베딩 + 위치 인코딩)
|
v
[Masked Multi-Head Self-Attention] ← 미래 단어를 못 보게 마스킹
|
+ (잔차 연결) → [Layer Norm]
|
v
[Multi-Head Cross-Attention] ← Encoder 출력을 참조
|
+ (잔차 연결) → [Layer Norm]
|
v
[Feed-Forward Network]
|
+ (잔차 연결) → [Layer Norm]
|
v
출력
역시 N번 쌓음 (N=6)
주요 구성 요소 미리보기
다음 레슨들에서 각각을 자세히 배우겠지만, 전체 그림을 위해 간단히 소개합니다.
| 구성 요소 | 역할 | 비유 | 상세 레슨 |
|---|---|---|---|
| Self-Attention | 단어 간 관계 파악 | 독서 모임에서 서로의 역할 분석 | 7-2 |
| Multi-Head Attention | 여러 관점에서 동시 분석 | 여러 전문가가 각자 다른 측면 분석 | 7-3 |
| Positional Encoding | 단어 순서 정보 제공 | 줄 번호가 적힌 칠판 | 7-4 |
| Feed-Forward Network | 각 위치별 비선형 변환 | 각 단어 정보를 더 풍부하게 가공 | 7-5 |
| Layer Normalization | 학습 안정화 | 시험 점수를 표준 점수로 변환 | 7-5 |
| Residual Connection | 정보 손실 방지 | 원본 복사본을 항상 보관 | 7-5 |
RNN vs Transformer 상세 비교
처리 방식 비교
📝 문장: "나는 오늘 학교에 갔다"
| 방식 | 처리 과정 | 단계 수 |
|---|---|---|
| RNN | [나는]→h1 → [오늘]+h1→h2 → [학교에]+h2→h3 → [갔다]+h3→h4 | 4단계 (순차) |
| Transformer | [나는, 오늘, 학교에, 갔다] → 동시에 모든 관계 계산 | 1단계 (병렬) |
성능 비교표
| 항목 | RNN/LSTM | Transformer |
|---|---|---|
| 처리 방식 | 순차적 (하나씩) | 병렬적 (한꺼번에) |
| 학습 속도 | 느림 | 매우 빠름 |
| 장거리 의존성 | 어려움 (정보 희석) | 쉬움 (직접 참조) |
| GPU 활용 | 제한적 | 최대 활용 |
| 메모리 | O(1) 추가 메모리 | O(n^2) 메모리 필요 |
| 해석 가능성 | 낮음 | 높음 (Attention 시각화) |
Transformer의 약점도 있다
⚠️ Transformer가 만능은 아닙니다!
| 약점 | 설명 | 영향 |
|---|---|---|
| 메모리 O(n²) | 문장 길이 n → n×n 크기의 Attention 행렬 | 긴 문서(수만 단어)에서 메모리 부족 |
| 위치 정보 부재 | 구조 자체에 순서 개념 없음 | Positional Encoding 별도 추가 필요 (7-4) |
| 학습 데이터 필요량 | RNN보다 더 많은 데이터가 필요한 경향 | 소규모 데이터에서는 RNN이 더 나을 수도 있음 |
실행해보기: RNN vs Transformer 속도 비교 시뮬레이션
RNN과 Transformer의 처리 방식 차이를 간단한 시뮬레이션으로 확인해 봅시다.
pythonimport numpy as np # 문장 길이에 따른 처리 단계 수 비교 seq_lengths = [5, 10, 20, 50, 100, 200] print("=" * 55) print("문장 길이별 처리 단계 수 비교") print("=" * 55) print(f"{'문장 길이':>10} | {'RNN 단계':>10} | {'Transformer':>12} | {'속도 비':>8}") print("-" * 55) for n in seq_lengths: rnn_steps = n # RNN: 순차적으로 n단계 transformer_steps = 1 # Transformer: 병렬로 1단계 ratio = rnn_steps / transformer_steps print(f"{n:>10} | {rnn_steps:>10} | {transformer_steps:>12} | {ratio:>7.0f}x") print() print("Transformer는 문장이 길어져도 1단계!") print("RNN은 문장 길이에 비례하여 단계가 늘어납니다.") print() # 메모리 사용량 비교 (Attention 행렬 크기) print("=" * 55) print("Attention 행렬 크기 (Transformer의 메모리 비용)") print("=" * 55) print(f"{'문장 길이':>10} | {'행렬 크기':>12} | {'메모리(대략)':>12}") print("-" * 55) for n in seq_lengths: matrix_size = n * n memory_mb = matrix_size * 4 / (1024 * 1024) # float32 기준 print(f"{n:>10} | {n}x{n} = {matrix_size:>6} | {memory_mb:>8.4f} MB") print() print("문장이 길어지면 메모리가 n^2으로 증가합니다.") print("이것이 Transformer의 주요 약점입니다.")
Transformer가 세상을 바꾼 이유
확장성(Scalability)의 승리
Transformer의 진정한 강점: "크게 만들수록 더 잘 작동한다"
모델 크기를 키우면:
- •RNN: 순차 처리 때문에 학습 시간이 기하급수적 증가
- •Transformer: 병렬 처리 덕분에 GPU만 추가하면 됨
이것이 가능하게 한 것:
- •GPT-3: 1750억 파라미터 (RNN으로는 불가능했을 규모)
- •수천 개의 GPU로 동시에 학습
- •"스케일링 법칙": 모델이 클수록, 데이터가 많을수록 성능 향상
다양한 변형 모델들
| 모델 유형 | 사용 부분 | 대표 모델 | 특기 |
|---|---|---|---|
| Encoder만 | Encoder | BERT, RoBERTa | 문장 이해/분류 |
| Decoder만 | Decoder | GPT 시리즈 | 텍스트 생성 |
| Encoder-Decoder | 둘 다 | T5, BART | 번역, 요약 |
핵심 요약
| 개념 | 설명 | 비유 |
|---|---|---|
| RNN의 한계 | 순차 처리, 장거리 의존성, 병렬화 불가 | 전화 통화로 긴 이야기 듣기 |
| Transformer | 모든 단어를 동시에 처리하는 구조 | 칠판에 적힌 글을 한눈에 보기 |
| Self-Attention | 각 단어가 다른 모든 단어를 참조 | 독서 모임에서 서로 분석 |
| Encoder | 입력을 이해하는 부분 | 통역사의 이해 단계 |
| Decoder | 출력을 생성하는 부분 | 통역사의 말하기 단계 |
| 확장성 | 크게 만들수록 성능 향상 | GPU 추가로 확장 가능 |
학습 체크리스트
- • RNN의 세 가지 근본적 한계를 설명할 수 있다
- • "Attention is All You Need" 논문의 핵심 아이디어를 이해했다
- • Transformer의 Encoder와 Decoder 역할을 구분할 수 있다
- • Encoder/Decoder 블록의 내부 구성 요소를 나열할 수 있다
- • RNN 대비 Transformer의 장점과 약점을 설명할 수 있다
다음 레슨: Self-Attention 메커니즘을 상세히 파헤쳐 봅니다. Q, K, V가 무엇이고, 어떻게 계산되는지 numpy로 직접 구현해 봅시다!
레슨 정보
- 레벨
- Level 7: Transformer & LLM 원리
- 예상 소요 시간
- 50분
- 참고 영상
- YouTube 링크
💡실습 환경 안내
이 레벨은 PyTorch/GPU가 필요하여 Google Colab 사용을 권장합니다.
Colab은 무료 GPU를 제공하여 PyTorch, CNN, Transformer 등을 실행할 수 있습니다.