14. DNN Architectures 단계별 학습 문서
원문 경로
/Users/keumky/Documents/New project 3/sources/mlsysbook/14-dnn_architectures/source.md
짧은 소개
이 장은 딥러닝 모델의 “구조”가 왜 중요한지 설명해요. 같은 신경망이라도 입력을 모두 빽빽하게 연결하는지, 이미지의 작은 영역을 훑는지, 순서를 기억하는지, 모든 위치 사이의 관계를 직접 계산하는지에 따라 완전히 다른 시스템 특성이 생겨요.
핵심은 정확도만이 아니에요. 아키텍처 선택은 계산량, 메모리 사용량, 데이터 이동, 병렬 처리 가능성, 하드웨어 가속 효율, 실제 배포 가능성까지 함께 결정해요.
읽는 방법
처음부터 모든 수식과 세부 구현을 붙잡기보다는 세 번에 나누어 읽는 것이 좋아요.
| 반복 | 먼저 볼 것 | 목표 |
|---|---|---|
| 1회차 | 서론, 요약, 각 아키텍처의 큰 역할 | ”어떤 데이터에 어떤 구조가 맞는가”를 감으로 잡아요. |
| 2회차 | 각 구조의 데이터 흐름과 간단한 연산 | 입력이 어떤 순서로 처리되는지 이해해요. |
| 3회차 | 수식, 복잡도, 메모리, 하드웨어 영향 | 왜 이 구조가 시스템 설계까지 바꾸는지 엄밀하게 이해해요. |
전체 흐름은 이렇게 잡으면 좋아요.
데이터의 모양 파악
↓
그 데이터에 맞는 inductive bias 선택
↓
연산량, 메모리, 데이터 이동 확인
↓
하드웨어와 배포 조건에 맞는지 검증
이 장의 한 줄 요약
DNN 아키텍처는 데이터에 대한 가정을 계산 구조로 만든 것이며, MLP, CNN, RNN, Attention, Transformer는 서로 다른 패턴을 잘 처리하도록 설계되어 있고 그 선택은 모델 성능뿐 아니라 시스템 비용과 배포 가능성까지 결정해요.
1단계: 중학교 수준
신경망 구조는 문제에 맞는 도구예요
집을 고칠 때 모든 일을 망치 하나로 하지는 않지요. 나사를 조일 때는 드라이버가 필요하고, 나무를 자를 때는 톱이 필요해요. 딥러닝에서도 마찬가지예요. 데이터의 생김새가 다르면 잘 맞는 신경망 구조도 달라져요.
이 장에서 보는 구조들은 이런 도구 상자라고 생각하면 돼요.
| 구조 | 일상 비유 | 잘 보는 것 |
|---|---|---|
| MLP | 반 전체 학생을 모두 서로 소개시키는 방식 | 어떤 정보가 어떤 정보와 관련될지 모를 때 |
| CNN | 사진 위를 돋보기로 조금씩 훑는 방식 | 이미지처럼 가까운 위치가 중요한 데이터 |
| RNN | 앞에서 들은 이야기를 기억하며 다음 말을 듣는 방식 | 문장, 음성, 시간 기록처럼 순서가 있는 데이터 |
| Attention | 지금 중요한 단어를 찾아 표시하는 형광펜 | 멀리 떨어진 정보 사이의 관계 |
| Transformer | 여러 형광펜 팀이 동시에 중요한 관계를 찾는 방식 | 복잡한 문맥과 관계가 많은 데이터 |
MLP는 모두에게 말을 걸어보는 방식이에요
MLP는 가장 기본적인 신경망 구조예요. 입력으로 들어온 모든 정보가 다음 단계의 모든 정보와 연결돼요. 그래서 “어떤 정보가 중요한지 아직 모를 때” 유연하게 사용할 수 있어요.
예를 들어 학생의 시험 점수, 출석률, 과제 제출 여부, 수면 시간으로 성적을 예측한다고 해볼게요. 어떤 항목이 결과에 가장 중요한지 확실하지 않다면, MLP는 모든 항목 사이의 가능성을 열어두고 배워요.
하지만 단점도 있어요. 모두가 모두에게 말을 걸면 시간이 오래 걸리겠지요. 입력이 아주 커지면 연결이 너무 많아져서 계산과 메모리를 많이 써요.
CNN은 사진을 작은 돋보기로 보는 방식이에요
사진을 볼 때 우리는 한 픽셀만 보지 않아요. 가까운 픽셀들이 모여 선, 모서리, 질감, 눈, 코, 얼굴 같은 모양을 만들어요. CNN은 이 사실을 이용해요.
CNN은 작은 필터를 사진 위에서 이리저리 움직이며 비슷한 무늬를 찾아요. 같은 귀 모양은 사진의 왼쪽 위에 있어도 귀이고, 오른쪽 아래에 있어도 귀예요. 그래서 CNN은 같은 탐지기를 여러 위치에서 반복해서 사용해요.
이 덕분에 CNN은 이미지처럼 공간 배치가 중요한 데이터에 효율적이에요.
RNN은 앞의 내용을 기억하는 방식이에요
문장을 읽을 때 매 단어를 따로따로 이해하지 않아요. 앞에서 읽은 내용을 기억하면서 다음 단어를 이해해요. RNN은 이런 방식으로 순서가 있는 데이터를 처리해요.
예를 들어 “나는 어제 비가 와서 우산을…”까지 들으면, 뒤에 “썼다” 같은 말이 나올 가능성을 생각할 수 있어요. 앞의 정보가 다음 판단에 영향을 주기 때문이에요.
RNN은 이전 단계의 기억을 다음 단계로 넘겨요. 그래서 문장, 음성, 주가, 센서 기록처럼 시간이 흐르는 데이터를 다룰 수 있어요. 다만 한 칸씩 순서대로 처리해야 해서 느려질 수 있고, 너무 오래전 기억은 흐려질 수 있어요.
Attention은 필요한 곳을 직접 바라보는 방식이에요
긴 문장에서 중요한 단어가 바로 옆에만 있는 것은 아니에요. 멀리 떨어진 단어가 지금 단어의 뜻을 결정할 수 있어요.
Attention은 “지금 이 단어를 이해하려면 문장 안의 어떤 단어를 봐야 할까?”를 계산해요. 모든 단어가 다른 단어를 살펴보고, 중요한 관계에 더 큰 관심을 줘요.
그래서 Attention은 긴 문맥이나 복잡한 관계를 다룰 때 강해요.
Transformer는 Attention을 중심으로 만든 현대적 구조예요
Transformer는 RNN처럼 한 단어씩 차례대로만 처리하지 않아요. 문장의 여러 위치를 동시에 보면서 관계를 계산할 수 있어요.
덕분에 병렬 처리가 잘 되고, 긴 문장에서 멀리 떨어진 단어 사이의 관계도 잘 잡아요. 그래서 현대 언어 모델과 여러 대형 AI 모델의 핵심 구조가 되었어요.
1단계 중간 정리
| 질문 | 쉬운 답 |
|---|---|
| 왜 여러 신경망 구조가 필요할까요? | 데이터마다 생김새와 중요한 패턴이 다르기 때문이에요. |
| MLP는 왜 유연한가요? | 모든 입력 관계를 열어두기 때문이에요. |
| CNN은 왜 이미지에 좋은가요? | 가까운 픽셀과 반복되는 위치 패턴을 잘 쓰기 때문이에요. |
| RNN은 왜 순서 데이터에 쓰이나요? | 이전 정보를 기억하면서 다음 정보를 처리하기 때문이에요. |
| Transformer는 왜 강력한가요? | 모든 위치 사이의 관계를 동적으로 계산하기 때문이에요. |
2단계: 고등학교 수준
아키텍처는 데이터에 대한 가정이에요
신경망 구조는 단순한 모양 선택이 아니에요. “이 데이터에는 이런 규칙이 있을 것이다”라는 가정을 담고 있어요. 이 가정을 원문에서는 inductive bias라고 설명해요.
| 데이터 예시 | 숨은 규칙 | 어울리는 구조 |
|---|---|---|
| 표 데이터, 일반 숫자 벡터 | 어떤 항목이든 서로 영향을 줄 수 있음 | MLP |
| 이미지, 의료 영상, 센서 격자 | 가까운 위치끼리 관련이 큼 | CNN |
| 문장, 음성, 시계열 | 앞뒤 순서가 중요함 | RNN |
| 긴 문맥, 번역, 문서, 그래프 | 멀리 떨어진 요소도 직접 관련될 수 있음 | Attention, Transformer |
좋은 구조를 고른다는 것은 데이터의 규칙과 모델의 가정을 맞추는 일이에요.
MLP의 흐름: 모든 입력을 가중합해요
MLP는 입력값에 가중치를 곱하고 더한 뒤, 비선형 함수를 통과시켜 다음 층으로 보내요.
간단히 쓰면 이런 흐름이에요.
입력
↓
가중치 곱하기 + bias 더하기
↓
activation 적용
↓
다음 층으로 전달
수식으로는 한 층을 다음처럼 볼 수 있어요.
[ \mathbf{h}^{(l)} = f(\mathbf{h}^{(l-1)}\mathbf{W}^{(l)} + \mathbf{b}^{(l)}) ]
여기서 (\mathbf{h}^{(l-1)})는 이전 층의 출력, (\mathbf{W}^{(l)})는 연결의 세기, (\mathbf{b}^{(l)})는 보정값, (f)는 activation 함수예요.
MLP는 모든 입력과 모든 출력이 연결되기 때문에 유연해요. 하지만 입력 차원이 커지면 가중치 행렬도 커져요. 예를 들어 (28 \times 28) 이미지를 펼치면 784개의 숫자가 되고, hidden neuron이 100개라면 첫 층에만 78,400개의 가중치가 필요해요.
CNN의 흐름: 작은 필터를 반복해서 적용해요
CNN은 이미지를 한 줄로 펼치지 않고, 공간 구조를 유지해요. 작은 필터가 이미지 위를 움직이면서 지역 패턴을 찾아요.
이미지 입력
↓
작은 필터가 주변 픽셀 묶음을 확인
↓
feature map 생성
↓
층이 깊어지며 edge → texture → object part → object로 발전
CNN의 중요한 아이디어는 두 가지예요.
| 아이디어 | 뜻 | 효과 |
|---|---|---|
| local connectivity | 가까운 영역만 먼저 봐요. | 불필요한 연결을 줄여요. |
| parameter sharing | 같은 필터를 여러 위치에서 써요. | 파라미터 수를 크게 줄여요. |
그래서 CNN은 MLP보다 이미지에 훨씬 효율적일 수 있어요. 같은 선 모양 탐지기를 이미지 모든 위치에서 재사용하기 때문이에요.
RNN의 흐름: 현재 입력과 이전 기억을 함께 봐요
RNN은 각 시점에서 현재 입력과 이전 hidden state를 합쳐 새 hidden state를 만들어요.
[ \mathbf{h}t = f(\mathbf{W}{hh}\mathbf{h}{t-1} + \mathbf{W}{xh}\mathbf{x}_t + \mathbf{b}_h) ]
이 식을 말로 풀면 이래요.
이전 기억 h_{t-1}
+
현재 입력 x_t
↓
새 기억 h_t 생성
RNN은 같은 계산을 시간 방향으로 반복해요. 그래서 길이가 다른 문장이나 시계열도 처리할 수 있어요. 하지만 (t)번째 계산은 (t-1)번째 결과가 있어야 가능해요. 즉, 시간 방향 병렬화가 어렵습니다.
또 긴 문장에서는 앞쪽 정보가 뒤쪽까지 잘 전달되지 않을 수 있어요. 이 문제가 vanishing gradient problem이에요. LSTM과 GRU는 이런 한계를 줄이기 위해 gate를 도입한 변형 구조예요.
Attention의 흐름: 관계 점수를 만들고 정보를 섞어요
Attention은 각 위치가 다른 위치를 얼마나 참고해야 하는지 계산해요. 핵심 흐름은 다음과 같아요.
입력에서 Query, Key, Value 만들기
↓
Query와 Key를 비교해 유사도 점수 계산
↓
softmax로 중요도 비율 만들기
↓
그 비율로 Value를 섞어 출력 만들기
대표 수식은 scaled dot-product attention이에요.
[ \text{Attention}(\mathbf{Q}, \mathbf{K}, \mathbf{V}) = \text{softmax}\left(\frac{\mathbf{Q}\mathbf{K}^T}{\sqrt{d_k}}\right)\mathbf{V} ]
여기서 (\mathbf{Q})는 “무엇을 찾고 있는가”, (\mathbf{K})는 “나는 어떤 특징을 갖고 있는가”, (\mathbf{V})는 “실제로 가져갈 정보”라고 생각하면 쉬워요. (\sqrt{d_k})로 나누는 이유는 점수가 너무 커져서 softmax가 한쪽으로 과하게 쏠리는 것을 막기 위해서예요.
주의할 점도 있어요. 길이가 (N)인 sequence에서는 모든 위치 쌍을 비교하므로 (N \times N) attention matrix가 생겨요. 즉, sequence가 길어질수록 계산과 메모리 부담이 빠르게 커져요.
Transformer의 흐름: self-attention을 병렬로 실행해요
Transformer는 Attention을 보조 장치가 아니라 중심 구조로 사용해요. 특히 self-attention에서는 Query, Key, Value가 모두 같은 입력 sequence에서 나와요.
입력 sequence X
↓
Q = XW_Q, K = XW_K, V = XW_V
↓
각 위치가 다른 모든 위치와 관계 계산
↓
여러 attention head가 서로 다른 관계를 병렬로 탐색
↓
feed-forward layer, normalization, residual connection으로 안정화
Transformer는 RNN처럼 시간 순서대로 기다릴 필요가 적어서 병렬화에 강해요. 하지만 attention matrix 때문에 긴 sequence에서는 메모리 병목이 생겨요.
2단계 중간 정리
| 구조 | 계산의 핵심 | 강점 | 대표 한계 |
|---|---|---|---|
| MLP | dense matrix multiplication | 가장 일반적이고 유연함 | 입력이 커지면 파라미터와 메모리 부담 증가 |
| CNN | convolution, sliding window | 공간 구조와 파라미터 공유 활용 | 전역 관계를 직접 보기는 어려움 |
| RNN | recurrent state update | 순서와 상태를 표현 | 시간 방향 병렬화가 어려움 |
| Attention | pairwise similarity + weighted sum | 멀리 떨어진 관계를 직접 계산 | sequence 길이에 대해 비용이 크게 증가 |
| Transformer | self-attention + FFN + residual/norm | 병렬화와 표현력이 강함 | attention 메모리와 데이터 이동 부담이 큼 |
3단계: 대학교 수준
1. Architectural Principles and Engineering Trade-offs
원문은 DNN 아키텍처를 단순한 모델 모양이 아니라 시스템 설계 결정으로 봐요. 어떤 아키텍처를 선택하느냐에 따라 다음이 함께 결정돼요.
- 메모리 대역폭 요구량
- 계산 복잡도 증가 방식
- 병렬화 가능한 축
- 하드웨어 가속기와의 궁합
- 배포 환경에서의 지연 시간과 에너지 비용
딥러닝 이론에서는 충분히 큰 신경망이 매우 다양한 함수를 표현할 수 있다고 말해요. 하지만 실제 시스템에서는 “표현할 수 있는가”보다 “제한된 자원 안에서 계산할 수 있는가”가 더 중요해요.
이 장의 핵심 긴장은 다음 세 가지로 정리할 수 있어요.
| 이론적 방향 | 현실의 제약 | 아키텍처가 해결하는 방식 |
|---|---|---|
| 어떤 함수든 표현하고 싶음 | 너무 큰 모델은 계산 불가능함 | 데이터 구조에 맞는 연결만 남겨요. |
| 표현력을 최대화하고 싶음 | 메모리와 대역폭이 제한됨 | 파라미터 공유, locality, sparsity를 활용해요. |
| 일반적인 구조를 쓰고 싶음 | 배포 환경은 특정 하드웨어를 가짐 | 연산 primitive가 하드웨어에 잘 맞도록 설계해요. |
여기서 inductive bias가 중요해져요. Inductive bias는 모델 구조 안에 들어 있는 “데이터는 아마 이런 모양일 것이다”라는 가정이에요. CNN은 가까운 픽셀이 중요하다고 가정하고, RNN은 과거 상태가 현재에 영향을 준다고 가정하며, Transformer는 관계가 입력 내용에 따라 동적으로 정해진다고 가정해요.
원문은 네 계열을 중심으로 설명해요.
| 계열 | 기본 가정 | 시스템적 특징 |
|---|---|---|
| MLP | 모든 feature가 모든 feature와 관련될 수 있음 | dense matrix multiplication 중심 |
| CNN | 가까운 공간 패턴과 위치 이동 안정성이 중요함 | sliding window, weight reuse 중심 |
| RNN | 순서와 과거 상태가 중요함 | 시간 방향 의존성, 상태 유지 중심 |
| Attention/Transformer | 모든 요소 쌍의 관계가 내용에 따라 달라짐 | (N^2) attention, 병렬 matmul, 큰 중간 메모리 중심 |
2. Multi-Layer Perceptrons: Dense Pattern Processing
2.1 MLP가 필요한 상황
MLP는 데이터에 특별한 구조를 강하게 가정하지 않아요. 어떤 입력 feature가 어떤 출력에 영향을 줄지 모를 때 모든 관계를 열어두는 방식이에요. 금융 지표처럼 여러 변수가 복잡하게 얽히거나, 표 데이터처럼 명확한 공간 구조가 없는 경우에 잘 맞을 수 있어요.
MNIST 예시로 보면, (28 \times 28) 픽셀 이미지를 784차원 벡터로 펼친 뒤 모든 픽셀이 hidden neuron에 연결돼요. 사람이 보기에는 숫자 6의 고리나 숫자 8의 교차 부분처럼 특정 모양이 중요해 보이지만, MLP는 그런 공간 가정을 미리 넣지 않고 모든 픽셀 조합 가능성을 학습해요.
2.2 Universal Approximation Theorem의 의미
Universal Approximation Theorem은 충분히 큰 MLP와 비선형 activation이 있으면 compact domain 위의 연속 함수를 임의로 잘 근사할 수 있다고 말해요.
중요한 점은 이 정리가 “가능성”을 말할 뿐이라는 거예요.
| 정리가 말해주는 것 | 정리가 말해주지 않는 것 |
|---|---|
| 어떤 MLP는 원하는 함수를 근사할 수 있어요. | 그 MLP가 얼마나 커야 하는지는 알려주지 않아요. |
| MLP의 표현력이 강하다는 근거가 돼요. | 좋은 weight를 어떻게 빨리 찾을지는 알려주지 않아요. |
| 일반적인 문제에 쓸 수 있는 이론적 기반이에요. | 실제 배포 비용이 적다는 뜻은 아니에요. |
그래서 MLP는 이론적으로 강력하지만, 구조가 있는 데이터에서는 너무 많은 연결을 써서 비효율적일 수 있어요.
2.3 알고리즘 구조
MLP 한 층의 계산은 다음과 같아요.
[ \mathbf{h}^{(l)} = f\big(\mathbf{h}^{(l-1)}\mathbf{W}^{(l)} + \mathbf{b}^{(l)}\big) ]
각 기호의 의미는 다음과 같아요.
| 기호 | 의미 |
|---|---|
| (\mathbf{h}^{(l-1)}) | 이전 층에서 온 입력 activation |
| (\mathbf{W}^{(l)}) | 모든 입력과 모든 출력 사이의 weight matrix |
| (\mathbf{b}^{(l)}) | bias vector |
| (f(\cdot)) | ReLU 같은 activation function |
| (\mathbf{h}^{(l)}) | 현재 층의 출력 |
입력 차원이 (d_{\text{in}}), 출력 차원이 (d_{\text{out}})이면 weight matrix는 (d_{\text{in}} \times d_{\text{out}}) 크기예요. MNIST에서 784차원 입력을 100개 hidden neuron으로 보내면 (784 \times 100 = 78{,}400)개의 weight가 필요해요.
이 구조의 장점은 모든 feature interaction을 허용한다는 것이고, 단점은 그만큼 파라미터와 계산이 커진다는 것이에요.
2.4 Architectural Characteristics
MLP의 dense connectivity는 최대한 넓은 hypothesis space를 제공해요. 모든 입력이 모든 출력에 영향을 줄 수 있으므로 일반적인 패턴을 표현하기 좋아요. 하지만 간단한 패턴을 배우는 데도 불필요한 연결이 많이 생길 수 있어요.
이런 이유로 원문은 MLP에서 다음 최적화가 중요하다고 설명해요.
| 최적화 | 아이디어 | 효과 |
|---|---|---|
| structured pruning | 중요하지 않은 연결 묶음을 제거해요. | 계산과 저장량을 줄여요. |
| quantization | 32-bit 대신 8-bit 또는 더 낮은 precision을 써요. | 메모리와 연산 비용을 줄여요. |
| BLAS/GEMM 최적화 | dense matmul을 고성능 라이브러리에 맡겨요. | CPU/GPU 효율을 높여요. |
2.5 Computational Mapping
수식으로는 한 줄의 matrix multiplication처럼 보이지만, 하드웨어 관점에서는 반복적인 multiply-accumulate 연산이에요.
batch의 각 sample에 대해
각 output neuron에 대해
모든 input feature를 돌며
input 값 × weight를 누적
MNIST에서 hidden neuron 하나를 계산하려면 784개의 입력과 784개의 weight를 곱하고 더해야 해요. hidden neuron이 100개라면 한 이미지에 대해 78,400개의 multiply-accumulate가 필요해요.
이 패턴은 GEMM에 매우 잘 맞아요. 그래서 cuBLAS, Intel MKL, OpenBLAS 같은 라이브러리와 GPU tensor core가 MLP 실행에서 큰 역할을 해요.
2.6 System Implications
MLP의 시스템 특성은 memory, computation, data movement 세 축으로 볼 수 있어요.
| 축 | MLP에서의 특징 | 시스템 영향 |
|---|---|---|
| Memory requirements | weight matrix, input, intermediate activation 저장 | 큰 dense layer는 메모리 용량과 bandwidth를 압박해요. |
| Computation needs | 대부분 multiply-accumulate | matrix unit과 tensor core 활용이 중요해요. |
| Data movement | 입력, weight, 누적합을 계속 이동 | 데이터 재사용과 cache tiling이 성능을 좌우해요. |
MLP의 중요한 교훈은 “일반성은 비용을 동반한다”예요. 데이터에 공간 구조나 시간 구조가 있다면, 그 구조를 활용하는 아키텍처가 훨씬 효율적일 수 있어요.
3. CNNs: Spatial Pattern Processing
3.1 CNN이 필요한 상황
이미지는 픽셀 하나하나가 독립적인 숫자 모음이 아니에요. 가까운 픽셀들이 모여 edge, texture, shape를 만들고, 이런 작은 패턴이 다시 object part와 object를 만들어요.
MLP는 이미지를 펼쳐서 모든 픽셀을 모든 neuron에 연결해요. 반면 CNN은 이미지의 공간 구조를 유지하고, 작은 영역을 반복적으로 처리해요.
CNN이 가진 핵심 가정은 두 가지예요.
| 가정 | 뜻 |
|---|---|
| spatial locality | 가까운 픽셀끼리 더 관련이 깊어요. |
| translation invariance/equivariance | 같은 패턴은 위치가 바뀌어도 의미가 유지돼요. |
3.2 알고리즘 구조
CNN의 convolution layer는 다음과 같이 표현돼요.
[ \mathbf{H}^{(l)}{i,j,k} = f\left( \sum{di}\sum_{dj}\sum_c \mathbf{W}^{(l)}{di,dj,c,k} \mathbf{H}^{(l-1)}{i+di,j+dj,c}
- \mathbf{b}^{(l)}_k \right) ]
이 식은 복잡해 보이지만 의미는 단순해요.
| 기호 | 의미 |
|---|---|
| ((i,j)) | 출력 feature map의 공간 위치 |
| (k) | 출력 channel |
| (c) | 입력 channel |
| ((di,dj)) | filter 내부의 작은 위치 |
| (\mathbf{W}) | local filter weight |
| (\mathbf{H}) | 입력 또는 출력 feature map |
MLP가 전체 입력을 한 번에 보는 반면, CNN은 (3 \times 3)이나 (5 \times 5) 같은 작은 local receptive field만 먼저 봐요. 그리고 같은 filter weight를 모든 위치에서 반복 사용해요.
MNIST 예시에서 (28 \times 28) grayscale 이미지에 (3 \times 3) filter 32개를 padding과 함께 적용하면 (28 \times 28 \times 32) feature map이 나와요. 각 위치마다 주변 (3 \times 3) 영역을 보고 32가지 특징을 측정하는 셈이에요.
3.3 Receptive Field와 계층적 표현
Receptive field는 어떤 output neuron이 영향을 받는 입력 영역이에요. 한 층에서는 작은 영역만 보지만, convolution layer를 여러 층 쌓으면 깊은 층의 neuron은 원본 이미지의 더 넓은 영역을 간접적으로 보게 돼요.
초기 층: edge, 방향, 색 변화
↓
중간 층: texture, 곡선, 부분 모양
↓
깊은 층: object part, 전체 object
이 계층적 특징 학습은 시각 데이터에 잘 맞아요. 복잡한 물체가 단순한 부분들의 조합으로 이루어져 있기 때문이에요.
3.4 Translation Equivariance와 Group Theory 관점
원문은 CNN의 효과를 symmetry 관점에서도 설명해요. 입력 이미지를 어떤 방향으로 조금 이동시키면, convolution feature map도 같은 방식으로 이동해요. 이를 translation equivariance라고 해요.
수식으로는 다음처럼 표현할 수 있어요.
[ f(T_v x) = T_v f(x) ]
여기서 (T_v)는 입력을 벡터 (v)만큼 이동시키는 연산이에요. 이 성질 덕분에 CNN은 어떤 feature가 이미지의 특정 한 위치에만 나타난다고 외우지 않고, 여러 위치에서 같은 패턴을 인식할 수 있어요.
이것은 hypothesis space를 줄이는 효과도 있어요. MLP는 가능한 모든 함수 관계를 넓게 탐색하지만, CNN은 “시각 데이터에서는 local pattern과 위치 이동 안정성이 중요하다”는 가정을 넣어 더 작은 공간을 탐색해요. 잘 맞는 문제에서는 이 제약이 오히려 일반화를 좋게 만들어요.
3.5 Architectural Characteristics
CNN의 효율성은 parameter sharing에서 나와요. (3 \times 3) filter는 channel마다 몇 개의 weight만 가지지만, 이 weight를 이미지 전체에 반복해서 사용해요.
원문은 CNN 최적화 예시로 다음을 들어요.
| 기법 | 설명 | 효과 |
|---|---|---|
| depthwise separable convolution | channel별 convolution과 (1 \times 1) pointwise convolution으로 나눠요. | 모바일 환경에서 큰 연산 절감 가능 |
| channel pruning | 중요도가 낮은 feature map/channel을 제거해요. | FLOPs와 메모리 사용량 감소 |
| data reuse 최적화 | filter weight를 cache에 두고 feature map을 효율적으로 흘려요. | 메모리 대역폭 부담 완화 |
3.6 Computational Mapping
CNN convolution은 하드웨어에서 여러 겹의 loop로 풀려요.
batch
출력 height
출력 width
출력 channel
kernel height
kernel width
입력 channel
multiply-accumulate
겉으로는 “필터 하나를 미는 것”처럼 보이지만, 실제로는 공간 위치, 출력 channel, kernel 위치, 입력 channel을 모두 순회하는 구조예요.
MLP와 다른 점은 한 output value가 전체 입력이 아니라 작은 지역만 본다는 거예요. 예를 들어 (3 \times 3) filter라면 각 위치에서 입력 channel당 9개의 multiply-accumulate만 필요해요. 하지만 이 계산을 모든 공간 위치와 모든 output channel에 반복하므로 전체 연산량은 여전히 큽니다.
3.7 System Implications
| 축 | CNN에서의 특징 | 시스템 영향 |
|---|---|---|
| Memory requirements | filter weight는 작지만 feature map이 큼 | activation 저장과 feature map layout이 중요해요. |
| Computation needs | 작은 filter를 모든 위치에 반복 적용 | spatial/channel parallelism을 활용해요. |
| Data movement | filter weight는 많이 재사용, feature map은 streaming | cache, tiling, memory layout 최적화가 중요해요. |
CNN은 weight 재사용이 강한 구조예요. 예를 들어 (224 \times 224) feature map에서 filter weight 하나는 수만 번 재사용될 수 있어요. 그래서 CPU는 cache hierarchy를, GPU는 high-bandwidth memory와 병렬 thread를 활용해요. SIMD instruction도 여러 filter 위치나 channel 연산을 동시에 처리하는 데 도움이 돼요.
4. RNNs: Sequential Pattern Processing
4.1 RNN이 필요한 상황
CNN은 “무엇이 있는가”를 잘 찾지만, “언제 일어났는가”와 “앞에서 나온 정보가 뒤에 어떤 영향을 주는가”를 다루는 데는 한계가 있어요.
문장, 음성, 금융 시계열처럼 순서가 있는 데이터에서는 현재 입력의 의미가 과거 입력에 의존해요. RNN은 이 문제를 해결하기 위해 hidden state라는 내부 기억을 유지해요.
4.2 알고리즘 구조
기본 RNN의 상태 업데이트는 다음과 같아요.
[ \mathbf{h}t = f(\mathbf{W}{hh}\mathbf{h}_{t-1}
- \mathbf{W}_{xh}\mathbf{x}_t
- \mathbf{b}_h) ]
| 기호 | 의미 |
|---|---|
| (\mathbf{x}_t) | 시간 (t)의 입력 |
| (\mathbf{h}_{t-1}) | 이전 시점의 hidden state |
| (\mathbf{h}_t) | 현재 시점의 hidden state |
| (\mathbf{W}_{xh}) | 입력을 hidden state로 보내는 weight |
| (\mathbf{W}_{hh}) | 이전 hidden state를 현재 hidden state로 보내는 recurrent weight |
입력 단어가 100차원 벡터이고 hidden state가 128차원이라면, 한 time step마다 (100 \times 128) input projection과 (128 \times 128) recurrent projection을 계산해요.
4.3 RNN의 재귀적 성격
RNN은 같은 함수를 sequence 길이만큼 반복 적용해요.
h_0 → h_1 → h_2 → h_3 → ... → h_T
이 구조는 재귀 함수와 비슷해요. 이전 결과가 다음 호출의 입력으로 들어가듯이, 이전 hidden state가 다음 time step의 입력이 돼요. 그래서 variable-length sequence를 자연스럽게 처리할 수 있어요.
4.4 Vanishing Gradient와 LSTM/GRU
기본 RNN은 긴 sequence에서 vanishing gradient problem을 겪기 쉬워요. backpropagation through time 과정에서 gradient가 여러 time step을 거슬러 올라가며 반복적으로 곱해지기 때문이에요. 값이 1보다 작은 항이 계속 곱해지면 gradient가 거의 0이 되어 오래전 정보가 학습되지 않아요.
LSTM과 GRU는 gate를 사용해 어떤 정보를 유지하고 어떤 정보를 버릴지 조절해요. 원문은 이들을 자세히 구현하기보다는, RNN의 한계를 완화한 sequence processing의 중요한 발전으로 다뤄요.
4.5 Efficiency and Optimization
RNN은 시간 방향 병렬화가 어렵지만, memory 측면에서는 장점도 있어요. sequence 길이가 길어도 hidden state 크기만 유지하면 되므로 attention처럼 (N^2) matrix를 저장하지 않아도 돼요.
| 최적화/특성 | 의미 |
|---|---|
| constant hidden-state memory | 긴 sequence에서도 hidden state 저장량은 고정적이에요. |
| hidden-to-hidden pruning | recurrent weight 중 덜 중요한 연결을 제거할 수 있어요. |
| quantization caution | quantization error가 시간 방향으로 누적될 수 있어 주의가 필요해요. |
| batching sequences | time step 병렬화가 어려우므로 batch 축으로 처리량을 확보해요. |
4.6 Computational Mapping
RNN의 high-level 식은 간단하지만 실제 계산은 시간 순서 의존성을 가져요.
각 sequence에 대해
각 time step에 대해
이전 hidden state와 recurrent weight 계산
현재 input과 input weight 계산
bias와 activation 적용
batch 안의 여러 sequence는 동시에 처리할 수 있지만, 같은 sequence 안에서 (t+1)번째 계산은 (t)번째 hidden state가 있어야 시작할 수 있어요.
4.7 System Implications
| 축 | RNN에서의 특징 | 시스템 영향 |
|---|---|---|
| Memory requirements | input-to-hidden weight, hidden-to-hidden weight, hidden state 저장 | weight를 cache에 두고 hidden state를 잘 관리해야 해요. |
| Computation needs | time step마다 두 종류의 matrix multiplication | batch 병렬화는 가능하지만 시간 병렬화가 제한돼요. |
| Data movement | hidden state를 매 step load/store | temporal dependency 때문에 prefetch와 scheduling이 까다로워요. |
RNN의 한계는 분명해요. 시간 순서 때문에 parallel hardware를 충분히 활용하기 어렵고, fixed-size hidden state가 긴 문맥의 병목이 될 수 있어요. 이 문제들이 attention의 등장을 이끌었어요.
5. Attention Mechanisms: Dynamic Pattern Processing
5.1 Attention이 해결하려는 문제
RNN은 정보를 순서대로 처리해요. 그래서 멀리 떨어진 두 요소가 중요하게 연결되어 있어도 그 사이의 모든 요소를 거쳐야 해요. 또한 가까운 요소가 항상 더 중요하다는 식의 암묵적 가정이 생길 수 있어요.
Attention은 이 접근을 바꿔요. 입력의 모든 요소 쌍을 비교하고, 내용상 중요한 관계에 더 큰 weight를 줘요. 즉, 연결이 고정되어 있지 않고 입력 내용에 따라 달라져요.
예를 들어 “river bank”의 bank와 “loan bank”의 bank는 주변 맥락이 다르기 때문에 다른 단어를 바라봐야 해요. Attention은 이런 관계를 동적으로 계산해요.
5.2 Basic Attention Mechanism
Scaled dot-product attention은 다음과 같아요.
[ \text{Attention}(\mathbf{Q}, \mathbf{K}, \mathbf{V}) = \text{softmax}\left( \frac{\mathbf{Q}\mathbf{K}^T}{\sqrt{d_k}} \right)\mathbf{V} ]
각 단계는 다음과 같아요.
| 단계 | 계산 | 의미 |
|---|---|---|
| 1 | (Q, K, V) projection | 입력에서 질문, 검색용 특징, 실제 정보를 만들어요. |
| 2 | (QK^T) | 각 query가 각 key와 얼마나 맞는지 점수를 계산해요. |
| 3 | (/\sqrt{d_k}) | 점수 크기를 안정화해요. |
| 4 | softmax | 점수를 합이 1인 attention weight로 바꿔요. |
| 5 | weight (\times V) | 중요한 value를 더 많이 섞어 출력해요. |
sequence 길이가 (N), feature dimension이 (d)이면 attention score matrix는 (N \times N)이에요. 이 matrix는 각 위치가 모든 위치를 얼마나 참고하는지 담고 있어요.
5.3 Computational Mapping
Attention은 수식상 matrix multiplication으로 잘 표현되지만, 의미상으로는 모든 위치 쌍을 비교하는 구조예요.
batch의 각 sequence에 대해
각 query 위치 i에 대해
각 key 위치 j에 대해
similarity score 계산
softmax로 weight 생성
각 query 위치 i에 대해
모든 value를 weight로 합산
이 때문에 attention은 강력하지만 quadratic cost를 가져요. (N)이 두 배가 되면 (N \times N) attention matrix는 네 배로 커져요.
5.4 System Implications
| 축 | Attention에서의 특징 | 시스템 영향 |
|---|---|---|
| Memory requirements | (N \times N) attention weight, Q/K/V projection, intermediate activation 저장 | 긴 sequence에서 memory bottleneck이 커져요. |
| Computation needs | (QK^T), attention weight와 (V) 곱셈, softmax | sequence 길이에 대해 quadratic scaling이 생겨요. |
| Data movement | Q/K/V와 attention matrix를 자주 이동 | 동적 weight 때문에 bandwidth와 cache pressure가 커져요. |
Attention은 RNN보다 병렬화가 쉽지만, 그 대가로 더 큰 중간 메모리와 데이터 이동을 요구해요. 이것이 이후 FlashAttention, sparse attention, linear attention 같은 최적화가 등장한 배경이에요.
6. Transformers: Attention-Only Architecture
6.1 Transformer의 핵심 전환
Transformer는 attention을 RNN의 보조 장치로 쓰지 않고, attention 자체를 중심 구조로 삼아요. 원문의 표현대로 보면, MLP는 모든 것을 고정적으로 연결하고, CNN은 지역적으로 연결하고, RNN은 순서대로 연결하며, Transformer는 내용에 따라 동적으로 연결해요.
Transformer의 inductive bias는 독특해요. 강한 공간 또는 시간 구조를 미리 박아넣기보다, 모든 위치 사이의 관계를 데이터에서 학습하게 해요. 이 선택은 매우 유연하고 병렬화에 좋지만, 계산과 메모리 비용도 큽니다.
6.2 Self-Attention
Transformer의 self-attention에서는 Query, Key, Value가 모두 같은 입력 (\mathbf{X})에서 나와요.
[ \text{SelfAttention}(\mathbf{X}) = \text{softmax}\left( \frac{\mathbf{XW_Q}(\mathbf{XW_K})^T}{\sqrt{d_k}} \right)\mathbf{XW_V} ]
| 구성 요소 | 의미 |
|---|---|
| (\mathbf{XW_Q}) | 각 위치가 무엇을 찾는지 나타내는 query |
| (\mathbf{XW_K}) | 각 위치가 어떤 검색 단서를 제공하는지 나타내는 key |
| (\mathbf{XW_V}) | 실제로 전달될 정보 value |
| softmax | 어떤 위치를 얼마나 참고할지 정하는 확률적 weight |
이 구조 덕분에 문장 안의 대명사가 멀리 떨어진 명사와 연결될 수 있어요. 중요한 관계가 거리보다 내용에 의해 결정되기 때문이에요.
6.3 Multi-Head Attention
Multi-head attention은 attention을 여러 개 병렬로 실행해요.
[ \text{MultiHead}(\mathbf{Q}, \mathbf{K}, \mathbf{V}) = \text{Concat}(\text{head}_1, \ldots, \text{head}_h)\mathbf{W}^O ]
[ \text{head}_i = \text{Attention}(\mathbf{Q}\mathbf{W}_i^Q, \mathbf{K}\mathbf{W}_i^K, \mathbf{V}\mathbf{W}_i^V) ]
각 head는 서로 다른 projection을 사용하므로, 한 head는 위치 관계를, 다른 head는 문법 관계를, 또 다른 head는 의미 관계를 더 잘 볼 수 있어요. 원문은 실제 대형 Transformer에서 attention head들이 positional, syntactic, semantic 패턴으로 특화되는 경향이 있다고 설명해요.
6.4 Scaling Factor와 Softmax 안정성
(\sqrt{d_k})로 나누는 이유는 수치 안정성이에요. query와 key의 dimension이 커지면 dot product의 분산도 커져요. 너무 큰 값이 softmax에 들어가면 특정 위치의 확률이 거의 1이 되고 나머지는 거의 0이 되어 gradient가 작아져요.
따라서 (\sqrt{d_k}) scaling은 단순한 장식이 아니라 학습 안정성을 위한 장치예요.
6.5 Content-Addressable Memory와 정보 이론적 해석
원문은 attention을 content-addressable memory처럼 볼 수 있다고 설명해요. query가 key들과 비교되고, 잘 맞는 key에 해당하는 value가 더 많이 검색돼요. 데이터베이스에서 검색어와 문서 key를 비교해 관련 문서를 가져오는 것과 비슷해요.
또 attention weight는 “어디에 중요한 정보가 있는지에 대한 불확실성”으로 볼 수 있어요. softmax는 중요한 곳에 집중하면서도 완전히 한 곳만 보지 않도록 weight 분포를 만들어요. 그래서 attention은 필요한 정보를 선택적으로 모으는 데 효과적이에요.
6.6 Efficiency and Optimization
Transformer는 강력하지만 비용이 커요. 원문은 다음 최적화 방향을 다뤄요.
| 문제 | 최적화 방향 | 설명 |
|---|---|---|
| 여러 head가 비슷한 일을 함 | head pruning | 덜 중요한 attention head를 제거해요. |
| attention matrix가 큼 | low-rank factorization | attention 구조를 더 낮은 차원으로 근사해요. |
| softmax와 score가 quantization에 민감함 | Q/K/V별 세심한 quantization | INT8은 가능하지만 정확도 손실을 관리해야 해요. |
| sequence 길이에 대해 (O(n^2)) | sparse/linear attention | local window, strided pattern, learned sparsity 등을 사용해요. |
Transformer block은 일반적으로 attention만으로 끝나지 않아요. feed-forward layer, layer normalization, residual connection이 함께 쓰여요. residual connection은 정보와 gradient가 깊은 층을 통과하도록 돕고, normalization은 학습을 안정화해요.
6.7 Computational Mapping과 System Implications
Transformer self-attention의 시스템 특성은 다음과 같아요.
| 특성 | 설명 |
|---|---|
| 병렬성 | 모든 token의 Q/K/V projection을 동시에 계산할 수 있어요. |
| quadratic attention | attention score가 (N \times N) 크기라 긴 sequence가 어렵습니다. |
| multi-head 비용 | head 수가 늘면 projection과 attention 작업이 늘어요. |
| matrix multiplication 중심 | ((N \times d)), ((d \times d)), ((N \times N)) 형태의 matmul이 많아요. |
| memory-intensive intermediates | attention weights와 head별 중간 결과가 큰 메모리를 차지해요. |
결론적으로 Transformer는 현대 병렬 하드웨어에 잘 맞지만, 긴 sequence와 작은 batch 또는 메모리 제약 환경에서는 특별한 최적화가 필요해요.
7. Architectural Building Blocks
7.1 아키텍처는 단절된 발명이 아니라 building block의 진화예요
원문은 MLP, CNN, RNN, Transformer를 서로 완전히 다른 물건으로 보지 않아요. 오히려 오랜 시간 축적된 building block들이 재조합된 결과로 봐요.
7.2 Perceptron에서 Multi-Layer Network로
Perceptron에서 MLP로 발전하면서 세 가지 핵심 building block이 생겼어요.
| building block | 의미 |
|---|---|
| layer stacking | 여러 층을 쌓아 점점 복잡한 feature를 만들어요. |
| non-linear activation | 선형 변환만으로 표현할 수 없는 패턴을 가능하게 해요. |
| backpropagation | error를 뒤로 전달해 여러 층의 weight를 효율적으로 학습해요. |
이 중 backpropagation은 현대 딥러닝 최적화의 핵심이에요. Transformer 안의 feed-forward layer도 MLP 계열의 building block을 계속 사용해요.
7.3 Dense에서 Spatial Processing으로
CNN은 MLP의 layer-wise processing을 유지하면서 연결 방식을 공간 데이터에 맞게 바꿨어요.
중요한 발전은 다음과 같아요.
| 발전 | 원래 맥락 | 이후 영향 |
|---|---|---|
| parameter sharing | CNN filter를 여러 위치에서 재사용 | 효율적 inductive bias의 대표 사례가 되었어요. |
| skip connection | ResNet에서 깊은 CNN 학습 안정화 | Transformer 등 거의 모든 현대 구조에 쓰여요. |
| batch normalization | CNN 학습 안정화 | layer normalization 등으로 발전했어요. |
ResNet의 residual connection은 (\mathcal{F}(\mathbf{x}) + \mathbf{x}) 형태로, 층이 아주 깊어져도 정보가 직접 흐를 수 있게 해요. 이 아이디어는 Transformer의 residual path에도 중요하게 이어져요.
7.4 Sequence Processing의 진화
RNN은 state를 유지하고 업데이트한다는 아이디어를 도입했어요. LSTM과 GRU는 gate를 통해 정보를 선택적으로 유지하거나 잊는 방법을 보여주었어요.
또 encoder-decoder 구조에서 attention이 등장하면서, sequence 모델은 “고정된 hidden state 하나에 모든 정보를 압축하는 방식”에서 벗어나기 시작했어요. 이 attention building block이 나중에 Transformer의 중심이 되었어요.
7.5 Modern Architectures: Synthesis and Unification
Transformer는 새로운 계산 원리만으로 만들어진 구조가 아니에요. 여러 building block을 전략적으로 조합한 구조예요.
| Transformer 구성 | 역사적 뿌리 |
|---|---|
| feed-forward network | MLP |
| attention | sequence-to-sequence 모델 |
| positional embedding | 순서/위치 정보를 넣으려는 sequence와 spatial intuition |
| residual connection | ResNet |
| layer normalization | normalization 계열 기법 |
Vision Transformer는 이미지를 patch로 나누어 token처럼 처리해요. 이는 CNN의 공간적 inductive bias를 약하게 하고, 충분한 데이터와 compute로 attention이 시각 관계를 학습하게 하는 접근이에요.
8. System-Level Building Blocks
8.1 Core Computational Primitives
원문은 여러 아키텍처를 더 작은 시스템 primitive로 분해해요. 핵심은 세 가지예요.
| primitive | 설명 | 주로 보이는 곳 |
|---|---|---|
| matrix multiplication | feature의 weighted combination을 계산해요. | MLP, CNN 변환, Transformer |
| sliding window operation | local region에 같은 연산을 반복 적용해요. | CNN |
| dynamic computation | 입력 내용에 따라 연산 관계가 달라져요. | Attention, Transformer |
Matrix multiplication은 거의 모든 구조의 중심이에요. CNN도 im2col을 사용하면 convolution을 GEMM으로 바꿀 수 있어요. Attention도 Q/K/V projection과 score 계산에서 큰 matmul을 사용해요.
8.2 im2col, Tensor Core, Systolic Array
im2col은 convolution의 overlapping patch를 column 형태로 펼쳐 matrix multiplication으로 바꾸는 기법이에요. 장점은 오래 최적화된 GEMM 라이브러리를 활용할 수 있다는 것이고, 단점은 겹치는 데이터를 복제하므로 메모리 사용량이 늘어난다는 것이에요.
하드웨어 측면에서는 tensor core와 systolic array가 중요해요.
| 하드웨어 개념 | 역할 |
|---|---|
| tensor core | 작은 matrix multiplication을 매우 빠르게 수행해요. |
| systolic array | processing element들이 리듬처럼 데이터를 넘기며 multiply-accumulate를 수행해요. |
| high-bandwidth memory | 큰 모델의 데이터 이동 병목을 줄여요. |
TPU의 systolic array는 데이터 이동과 계산을 겹치게 만들어 대량의 MAC 연산을 효율적으로 처리해요.
8.3 Memory Access Primitives
메모리 접근 패턴은 성능을 크게 좌우해요. 계산 장치가 아무리 빨라도 데이터가 제때 도착하지 않으면 놀게 되기 때문이에요.
| 접근 패턴 | 특징 | 예시 |
|---|---|---|
| sequential access | 연속된 메모리를 순서대로 읽음 | MLP의 matrix 저장 |
| strided access | 일정 간격을 두고 읽음 | CNN의 sliding window |
| random access | 예측하기 어려운 위치를 읽음 | Transformer attention의 gather |
Sequential access는 prefetch와 burst mode에 잘 맞아요. Strided access는 cache와 layout 변환으로 최적화할 수 있어요. Random access는 cache miss와 latency 문제가 커서 가장 어렵습니다.
Working set size도 중요해요. MLP의 한 층은 비교적 예측 가능한 weight와 activation을 필요로 하지만, Transformer는 attention pattern 저장만으로도 큰 메모리를 요구할 수 있어요.
8.4 Data Movement Primitives
원문은 data movement가 계산보다 더 많은 시간과 에너지를 쓸 수 있다고 강조해요. 대표 패턴은 네 가지예요.
| 패턴 | 설명 | 예시 |
|---|---|---|
| broadcast | 같은 데이터를 여러 곳에 보냄 | matrix multiplication에서 weight 공유 |
| scatter | 서로 다른 데이터를 여러 처리 장치에 나눠 보냄 | GPU core별 작업 분배 |
| gather | 여러 위치의 데이터를 모음 | attention에서 key/value 수집 |
| reduction | 여러 값을 하나로 합침 | sum, softmax, layer output |
Transformer attention은 broadcast, gather, reduction을 강하게 사용해요. sequence 길이 512라면 각 query가 많은 key/value 정보를 모아야 하므로 gather 비용이 커져요.
8.5 System Design Impact
이 primitive들은 하드웨어 설계를 직접 바꿔요.
| 요구 | 시스템 설계 반응 |
|---|---|
| 대량 matrix multiplication | GPU tensor core, TPU 같은 전용 가속기 |
| 큰 메모리 대역폭 | HBM 도입 |
| 예측 가능한 빠른 on-chip 접근 | cache와 scratchpad memory |
| broadcast/gather/reduction | 특수 interconnect와 network-on-chip |
여전히 bottleneck은 남아요. 특히 memory bandwidth, off-chip data movement의 에너지 비용, 대형 모델의 distributed training 통신 overhead가 자주 문제가 됩니다.
8.6 Energy Consumption Across Architectures
에너지 관점에서도 아키텍처마다 성격이 달라요.
| 구조 | 에너지 특성 |
|---|---|
| MLP | dense matmul은 산술 집약도가 좋지만, 큰 weight 이동이 에너지를 많이 써요. |
| CNN | filter와 input 재사용 덕분에 효율적일 수 있지만, im2col은 메모리 복제로 에너지를 늘릴 수 있어요. |
| RNN | hidden state memory footprint가 작아 긴 sequence에서 DRAM 접근을 줄일 수 있지만, 병렬성이 낮아 하드웨어 활용률이 떨어질 수 있어요. |
| Transformer | attention matrix와 irregular access 때문에 FLOP당 에너지 비용이 높고, sequence 길이에 따라 비용이 빠르게 증가해요. |
시스템 설계자는 하나의 primitive에만 최적화할 수 없어요. dense matmul에 최적화하면 attention의 동적 접근에 약할 수 있고, Transformer용 큰 memory를 넣으면 edge deployment의 에너지 효율이 떨어질 수 있어요.
9. Architecture Selection Framework
9.1 선택은 유행이 아니라 적합성 문제예요
원문은 아키텍처 선택을 체계적인 의사결정 문제로 봐요. 최신 모델이라는 이유만으로 Transformer를 고르는 것은 위험해요. 먼저 데이터의 구조, 그 다음 계산 제약, 마지막으로 배포 조건을 확인해야 해요.
9.2 Data-to-Architecture Mapping
| 데이터 특성 | 우선 고려할 구조 | 이유 |
|---|---|---|
| arbitrary feature relationship | MLP | 모든 feature 조합을 열어둘 수 있어요. |
| spatial locality | CNN | local connectivity와 parameter sharing이 맞아요. |
| temporal dependence | RNN | hidden state로 순서를 반영해요. |
| complex pairwise relation | Transformer | 모든 요소 쌍 관계를 동적으로 계산해요. |
데이터와 아키텍처의 가정이 맞으면 학습과 계산이 효율적이에요. 맞지 않으면 더 많은 데이터와 compute를 쓰고도 나쁜 결과가 나올 수 있어요.
9.3 Computational Complexity Considerations
각 구조의 scaling 방식은 달라요.
| 구조 | 주된 비용 증가 | 병목 |
|---|---|---|
| MLP | layer width가 커질수록 dense parameter 증가 | weight memory와 bandwidth |
| CNN | image resolution, channel, kernel size에 따라 증가 | feature map memory와 convolution bandwidth |
| RNN | sequence length만큼 sequential step 증가 | 시간 방향 직렬화 |
| Transformer | sequence length에 대해 attention이 (O(n^2)) | attention memory와 data movement |
MLP와 CNN은 data parallelism으로 여러 device에 나누기 비교적 쉽고, RNN은 sequential dependency 때문에 어렵고, Transformer는 sequence position 병렬화는 좋지만 (O(n^2)) memory가 batch size를 제한할 수 있어요.
9.4 Production Considerations
실제 배포에서는 정확도 외에도 latency, memory, energy, fault tolerance를 봐야 해요.
| 관점 | MLP/CNN | RNN | Transformer |
|---|---|---|---|
| latency | 비교적 예측 가능하거나 최적화 쉬움 | sequence 길이에 민감 | batch throughput은 좋지만 단일 inference overhead 가능 |
| memory | model size와 feature map 중심 | hidden state 중심 | attention matrix와 checkpoint가 큼 |
| fault tolerance | stateless에 가까워 복구가 쉬움 | temporal state가 복잡성 추가 | 큰 checkpoint와 memory state 관리 필요 |
| hardware efficiency | tensor unit 활용 좋음 | peak utilization 낮을 수 있음 | 큰 batch에서는 좋지만 작은 batch에서는 비효율 가능 |
9.5 Hardware Mapping and Optimization Strategies
| 구조 | 하드웨어 최적화 |
|---|---|
| MLP | matrix tiling, mixed precision, operation fusion |
| CNN | im2col, Winograd, direct convolution, channel layout tuning |
| RNN | loop unrolling, state vectorization, sequence batching |
| Transformer | FlashAttention, sparse attention, low-rank approximation, multi-query attention |
FlashAttention은 attention matrix를 메모리에 전부 저장하지 않고 online softmax와 재계산을 활용해 memory usage를 (O(n^2))에서 더 낮추는 방향의 대표 기법이에요. 원문은 이런 최적화가 아키텍처의 시스템 병목에서 자연스럽게 나온다고 설명해요.
9.6 Decision Framework
실무적으로는 다음 순서로 판단하면 좋아요.
1. 데이터 패턴 확인
↓
2. 자연스럽게 맞는 아키텍처 후보 선택
↓
3. 메모리, 연산량, latency, energy 제약 확인
↓
4. 제약을 넘으면 더 작은 구조, 다른 구조, 최적화 기법 검토
↓
5. 정확도 목표를 못 맞추면 capacity를 늘리고 다시 제약 확인
이 과정은 한 번에 끝나지 않아요. 실제 프로젝트에서는 성능과 제약 사이를 여러 번 왕복하며 균형점을 찾아요.
10. Unified Framework: Inductive Biases
이 장의 통합 관점은 inductive bias예요. 각 아키텍처는 hypothesis space를 다르게 제한해요.
| 구조 | inductive bias 강도 | 설명 |
|---|---|---|
| CNN | 강함 | local connectivity, parameter sharing, translation equivariance를 강하게 가정해요. |
| RNN | 중간 | sequential dependence와 shared temporal weight를 가정해요. |
| MLP | 약함 | layer-wise dense processing 외에는 구조 가정이 적어요. |
| Transformer | adaptive | 고정 구조보다 attention pattern을 데이터에서 학습해요. |
모든 성공적인 딥러닝 구조는 계층적 표현 학습을 해요. CNN은 receptive field 확장을 통해 공간 계층을 만들고, RNN은 hidden state의 시간적 진화를 통해 temporal hierarchy를 만들고, Transformer는 multi-head attention을 통해 content-dependent hierarchy를 만들어요.
이 계층 구조는 시스템 설계에도 영향을 줘요.
- memory hierarchy는 낮은 수준 feature와 높은 수준 feature의 재사용 패턴에 맞아야 해요.
- parallelization strategy는 계층적 dependency를 깨지 않아야 해요.
- accelerator는 feature composition에 필요한 matrix operation을 효율적으로 지원해야 해요.
- framework는 서로 다른 아키텍처의 계층 계산을 잘 표현해야 해요.
11. Fallacies and Pitfalls
원문은 아키텍처 선택에서 자주 생기는 오해를 명확히 경고해요.
| 오해 또는 함정 | 왜 문제인가요? | 더 나은 판단 |
|---|---|---|
| 복잡한 구조가 항상 더 좋다 | Transformer 같은 구조는 큰 compute와 memory를 요구해요. | 문제 복잡도와 데이터 규모에 맞춰 선택해요. |
| 정확도만 보고 구조를 고른다 | latency, memory, bandwidth 제약 때문에 배포 실패가 날 수 있어요. | 시스템 제약을 함께 평가해요. |
| 하드웨어와 무관하게 성능이 같다고 본다 | CNN, MLP, RNN, Transformer는 활용하는 hardware feature가 달라요. | target hardware와 architecture alignment를 확인해요. |
| 여러 구조를 무작정 섞는다 | memory access와 data movement 병목이 새로 생길 수 있어요. | 구성요소 상호작용을 분석해요. |
| 전체 deployment pipeline을 무시한다 | 학습 환경에서 빠른 구조가 edge inference에는 부적합할 수 있어요. | hardware-software co-design 관점으로 봐요. |
핵심은 “좋은 아키텍처”가 절대적으로 정해져 있지 않다는 거예요. 좋은 선택은 문제, 데이터, 하드웨어, 운영 조건이 함께 맞아떨어질 때 나와요.
12. Summary
이 장의 결론은 다음과 같아요.
- MLP는 tabular data나 arbitrary feature relationship에 유연하지만 dense connectivity 비용이 커요.
- CNN은 spatial locality와 parameter sharing으로 이미지 같은 데이터에 효율적이에요.
- RNN은 sequence state를 유지하지만 시간 방향 병렬화와 장기 의존성에서 한계가 있어요.
- Attention은 content-dependent 관계를 직접 계산해 long-range dependency를 잘 다루지만 (N^2) 비용이 생겨요.
- Transformer는 self-attention, feed-forward layer, residual connection, normalization을 결합해 강력한 병렬 sequence 모델이 되었어요.
- 모든 구조는 matrix multiplication, sliding window, dynamic computation, memory access, data movement primitive로 해석할 수 있어요.
- 아키텍처 선택은 accuracy가 아니라 computational feasibility와 deployment constraints까지 포함한 시스템 의사결정이에요.
복습 질문
- MLP가 “유연하지만 비싸다”고 말하는 이유는 무엇인가요?
- CNN의 parameter sharing은 파라미터 수와 일반화에 어떤 영향을 주나요?
- translation equivariance와 translation invariance를 직관적으로 설명해보세요.
- RNN에서 hidden state는 어떤 역할을 하나요?
- vanishing gradient problem은 왜 긴 sequence 학습을 어렵게 하나요?
- Attention의 Query, Key, Value를 검색 시스템 비유로 설명해보세요.
- Transformer의 self-attention은 RNN과 비교해 어떤 병렬화 장점을 가지나요?
- sequence 길이가 길어질 때 Transformer의 memory bottleneck이 커지는 이유는 무엇인가요?
- im2col은 convolution을 왜 matrix multiplication으로 바꾸며, 어떤 대가를 치르나요?
- sequential access, strided access, random access 중 Transformer attention에 가장 문제가 되는 접근은 무엇인가요?
- broadcast, scatter, gather, reduction이 각각 어떤 데이터 이동 패턴인지 예시와 함께 설명해보세요.
- MLP, CNN, RNN, Transformer를 inductive bias가 강한 순서에서 약하거나 adaptive한 순서로 정리해보세요.
- 최신 아키텍처를 무조건 선택하면 안 되는 이유를 latency, memory, hardware 관점에서 설명해보세요.
- 특정 배포 환경에서 아키텍처를 선택할 때 어떤 순서로 의사결정을 해야 하나요?