Chapter 02

뉴런과 신경망

인공 뉴런은 놀랄 만큼 단순하다. 입력과 가중치의 내적에 편향을 더하고, 그 결과를 구부러진 함수 하나에 통과시킨다. 그게 전부다. 그런데 이 단순한 부품을 층층이 쌓으면 원 안팎을 가르고, 나선을 풀고, 이론적으로는 어떤 연속 함수든 흉내 낼 수 있다. 이 장에서는 직선 하나밖에 못 긋는 퍼셉트론에서 출발해, 은닉층이 공간을 '접어서' 문제를 쉽게 만드는 과정을 직접 보고, 브라우저 안에서 실제 역전파로 신경망을 학습시킨다.

생물 뉴런과 인공 뉴런

사람의 뇌에는 약 860억 개의 뉴런이 있고, 각 뉴런은 수천 개의 다른 뉴런과 시냅스(synapse)로 연결된다. 뉴런은 가지돌기(dendrite)로 신호를 받아 세포체(soma)에서 모으고, 모인 전위가 문턱을 넘으면 축삭(axon)을 따라 전기 펄스(활동 전위)를 내보낸다. 시냅스마다 신호를 얼마나 세게 전달할지가 다르고, 학습은 이 연결 강도가 바뀌는 과정이다.

1943년 McCulloch와 Pitts는 이 구조를 극도로 단순화한 수학 모델을 제안했다. 입력 \(x_i\)마다 연결 강도 \(w_i\)(가중치)를 곱해 더하고, 편향(bias) \(b\)를 더한 뒤, 활성화 함수(activation function) \(\varphi\)를 통과시킨다.

$$y = \varphi\Big(\sum_{i=1}^{d} w_i x_i + b\Big) = \varphi(\mathbf w\cdot\mathbf x + b) = \varphi(z)$$
\(z = \mathbf w\cdot\mathbf x + b\)를 사전 활성화(pre-activation)라 부른다. 1장에서 본 대로 내적 \(\mathbf w\cdot\mathbf x\)는 "입력이 가중치 패턴 \(\mathbf w\)와 얼마나 닮았나"이고, \(b\)는 얼마나 닮아야 반응할지 정하는 문턱이다.
생물 뉴런 가지돌기입력 수신 세포체합산·문턱 축삭 시냅스연결 강도 인공 뉴런 x₁ x₂ x₃ w₁w₂w₃ Σ + b z φ(z) y 가중합 → 편향 → 비선형 함수
그림 2-1. 생물 뉴런(왼쪽)과 인공 뉴런(오른쪽)의 대응. 시냅스 강도 ↔ 가중치 \(w_i\), 세포체의 합산 ↔ \(\Sigma\), 발화 문턱 ↔ 편향 \(b\)와 활성화 함수 \(\varphi\). 인공 뉴런은 펄스의 타이밍을 무시하고 '발화율' 같은 실수 하나만 출력한다.
비유는 여기까지

현대 신경망은 뇌의 시뮬레이션이 아니다. 실제 뉴런은 시간에 따라 펄스를 내고, 수상돌기 자체가 비선형 계산을 하며, 학습 규칙도 역전파와 다르다. 인공 뉴런은 "가중합 + 비선형"이라는 계산 단위로 이해하는 편이 정확하다. 이름만 생물학에서 빌렸을 뿐, 이 책의 나머지는 순수하게 선형대수와 미적분이다.

퍼셉트론: 결정 경계는 직선이다

1958년 Rosenblatt의 퍼셉트론(perceptron)은 활성화 함수로 계단 함수를 쓰는 뉴런 하나다. \(z = \mathbf w\cdot\mathbf x + b\)가 0 이상이면 클래스 +1, 아니면 −1로 분류한다. 그러면 두 클래스를 가르는 경계는 \(\mathbf w\cdot\mathbf x + b = 0\)인 점들의 집합, 곧 2차원에서는 직선, \(d\)차원에서는 초평면(hyperplane)이다.

기하학적으로 \(\mathbf w\)는 경계에 수직인 법선 벡터이고 '+1 쪽'을 가리킨다. \(b\)는 경계를 원점에서 얼마나 떨어뜨릴지 정한다(원점에서 경계까지 거리 \(=|b|/\lVert\mathbf w\rVert\)). 한 점의 \(z\) 값은 그 점이 경계에서 법선 방향으로 얼마나 떨어져 있는지(× \(\lVert\mathbf w\rVert\))를 나타낸다.

퍼셉트론 학습 규칙

Rosenblatt의 학습 규칙은 놀랍도록 단순하다. 잘못 분류된 점 \((\mathbf x, y)\)(\(y\in\{-1,+1\}\))을 하나 골라 가중치를 그 점 쪽으로(또는 반대쪽으로) 조금 민다.

$$\text{만약 } y\,(\mathbf w\cdot\mathbf x + b)\le 0 \text{ 이면:}\qquad \mathbf w \leftarrow \mathbf w + \eta\,y\,\mathbf x,\qquad b \leftarrow b + \eta\,y$$
\(\eta\)는 학습률. 업데이트 후 그 점의 \(y z\)는 \(\eta(\lVert\mathbf x\rVert^2+1)\)만큼 커져 올바른 쪽으로 이동한다. 퍼셉트론 수렴 정리: 데이터가 선형 분리 가능하면 이 규칙은 유한 번 안에 모든 점을 맞히는 경계를 찾는다. 분리 불가능하면 영원히 흔들린다.
SIMULATOR

퍼셉트론: 경계선을 직접 돌리거나 학습시키기

빈 곳 클릭: 점 추가 · 점 클릭: 클래스 바꾸기 · 끌기: 이동
클릭 동작
데이터
퍼셉트론 규칙

경계선의 ● 손잡이를 끌면 평행 이동, 화살표(법선 w) 끝을 끌면 회전한다.

w = (w₁, w₂)—
b—
정확도—
업데이트 횟수0
상태—
해볼 것: ① '선형 분리 가능'에서 '경계 무작위' 후 '자동'을 누르면 몇십 번의 업데이트 안에 정확도 100%로 멈춘다(수렴 정리). 노랗게 표시되는 점이 방금 업데이트에 쓰인 오분류 점이다. ② 손잡이로 경계를 직접 돌려서 100%를 만들어 보자. 정답 경계는 하나가 아니다 — 퍼셉트론은 '어떤' 경계든 찾으면 멈출 뿐, 여유(margin)가 가장 큰 경계를 찾지는 않는다. ③ 'XOR'에서는 아무리 돌려도 정확도가 75%를 넘지 못하고, 자동 학습은 끝없이 흔들린다. 다음 절의 주제다.

XOR 문제와 선형 분리 불가능성

두 입력이 0 또는 1일 때 AND와 OR은 퍼셉트론 하나로 쉽게 표현된다. 예를 들어 AND는 \(\mathbf w=(1,1), b=-1.5\), OR은 \(\mathbf w=(1,1), b=-0.5\)다. 그런데 "둘 중 정확히 하나만 1"일 때 1을 내는 XOR은 다르다. 네 점 (0,0), (1,1)은 한 클래스, (0,1), (1,0)은 다른 클래스인데, 대각선으로 엇갈려 있어 어떤 직선으로도 나눌 수 없다.

AND x₁ + x₂ − 1.5 = 0직선 하나로 분리 ✓ OR x₁ + x₂ − 0.5 = 0직선 하나로 분리 ✓ XOR 어떤 직선도 4점 중 1개 이상 틀림선형 분리 불가 ✗ 가로 x₁, 세로 x₂ ∈ {0,1} · 보라 = 1, 분홍 = 0
그림 2-2. AND와 OR은 직선 하나로 1과 0을 나눌 수 있지만 XOR은 불가능하다. 1969년 Minsky와 Papert가 이 한계를 엄밀히 보이면서 신경망 연구는 한동안 침체기('첫 번째 AI 겨울')를 맞았다.

증명도 간단하다. 퍼셉트론이 XOR을 푼다면 \(b\lt0\)((0,0) → 0), \(w_1+b\ge0\), \(w_2+b\ge0\)((1,0), (0,1) → 1), \(w_1+w_2+b\lt0\)((1,1) → 0)이어야 한다. 가운데 두 식을 더하면 \(w_1+w_2+2b\ge0\), 곧 \(w_1+w_2+b\ge -b\gt0\)이 되어 마지막 식과 모순이다.

해법은 뉴런을 여러 층으로 쌓는 것이다. XOR = (OR) AND NOT (AND)이므로, 첫 층에서 OR 뉴런과 AND 뉴런을 만들고 둘째 층에서 이 둘을 조합하면 된다. 문제는 오랫동안 "여러 층의 가중치를 어떻게 학습시키느냐"였고, 그 답이 1986년 Rumelhart·Hinton·Williams가 널리 알린 역전파다(3장). 그런데 층을 쌓기만 해서는 안 된다. 활성화 함수가 반드시 비선형이어야 한다.

선형 층은 아무리 쌓아도 선형이다

활성화 함수 없이 두 층을 쌓으면 \(W_2(W_1\mathbf x+\mathbf b_1)+\mathbf b_2 = (W_2W_1)\mathbf x + (W_2\mathbf b_1+\mathbf b_2)\)로, 행렬 하나짜리 층과 똑같다. 100층을 쌓아도 직선 하나만 긋는다. 1장에서 본 대로 선형 변환의 합성은 선형 변환이기 때문이다. 비선형 함수가 끼어야 비로소 공간을 '구부릴' 수 있다.

활성화 함수: 비선형의 재료

활성화 함수는 신경망에 비선형성을 주는 유일한 부품이다. 역사적으로 여러 함수가 쓰였고, 각각 학습 속도와 안정성에 영향을 준다. 핵심 기준은 도함수다. 3장의 역전파에서 기울기는 층을 거꾸로 지나며 각 층 활성화 함수의 도함수를 곱해 간다. 도함수가 0에 가까운 포화 영역(saturation)이 넓으면 기울기가 사라져 학습이 멈춘다.

함수식도함수 범위특징·사용처
계단 (step)\(\mathbb 1[z\ge0]\)0 (z ≠ 0)퍼셉트론. 기울기가 없어 역전파 불가
sigmoid\(\sigma(z)=\dfrac{1}{1+e^{-z}}\)(0, 0.25]출력 (0,1) → 확률. 은닉층에선 포화로 기울기 소실
tanh\(\tanh z = 2\sigma(2z)-1\)(0, 1]0 중심 출력. RNN·LSTM 내부
ReLU\(\max(0,z)\){0, 1}계산이 싸고 양수 쪽 포화 없음. 2012년 이후 CNN의 표준. 음수 쪽 '죽은 뉴런' 문제
GELU\(z\,\Phi(z)\)약 −0.13 ~ 1.13매끄러운 ReLU. BERT·GPT-2·GPT-3
SiLU / Swish\(z\,\sigma(z)\)약 −0.1 ~ 1.1Llama·Mistral 계열 FFN의 SwiGLU 게이트

sigmoid의 도함수 \(\sigma'(z)=\sigma(z)(1-\sigma(z))\)는 최댓값이 \(z=0\)에서 0.25다. 10층을 지나면 기울기는 최대 \(0.25^{10}\approx 10^{-6}\)배로 줄어든다. ReLU는 양수 영역에서 도함수가 정확히 1이라 이런 감쇠가 없다. 이것이 깊은 신경망이 실용화된 결정적 요인 중 하나였다. GELU와 SiLU는 0 근처를 매끄럽게 하고 음수 쪽에 작은 음의 값을 허용해, 대규모 Transformer에서 약간 더 좋은 성능을 보인다.

SIMULATOR

활성화 함수 탐색기: 값, 도함수, 포화 영역

좌우로 끌어 입력 z를 옮기세요
함수
z—
φ(z)—
φ′(z)—
φ′(z)L (L층 통과 후 기울기 배율)—
해볼 것: ① sigmoid에서 z를 0에 두면 φ′ = 0.25가 최대다. L = 10이면 기울기 배율이 10−6까지 떨어진다. z = 4로 옮기면 φ′ ≈ 0.018로 포화 영역에 들어가 더 심해진다. ② tanh는 z = 0에서 φ′ = 1이라 sigmoid보다 낫지만 |z| > 2.5면 역시 포화된다. ③ ReLU는 z > 0이면 φ′ = 1이라 L을 50으로 해도 배율 1이다. 대신 z < 0에서는 정확히 0 — 이 뉴런으로는 기울기가 전혀 흐르지 않는다. ④ GELU·SiLU의 음수 쪽 작은 '골짜기'를 찾아보자(최솟값 약 −0.17, −0.28).

은닉층은 공간을 휘고 접는다

층 하나 \(\mathbf h = \varphi(W\mathbf x+\mathbf b)\)가 하는 일을 기하학으로 보자. 먼저 \(W\mathbf x+\mathbf b\)는 1장의 선형 변환(+평행 이동)이다. 격자를 돌리고, 늘이고, 기울인다. 그다음 ReLU가 성분마다 음수를 0으로 바꾼다. 이것은 공간에서 각 좌표축의 음수 쪽 영역을 축 위로 눌러 접는 것이다. 원래 공간에서 보면, 은닉 뉴런 \(j\)마다 직선 \(\mathbf w_j\cdot\mathbf x+b_j=0\)이 '접는 선'이 된다.

접힌 공간에서는 원래 멀리 떨어져 있던 점들이 겹치기도 하고, 꼬여 있던 클래스가 한쪽으로 모이기도 한다. 그러면 다음 층은 접힌 공간 위에 다시 직선을 긋기만 하면 된다. 은닉층의 역할은 마지막 층이 직선 하나로 풀 수 있는 공간을 만들어 주는 것이다. 아래 시뮬레이터는 2 → 2(ReLU) 변환을 나란히 보여 준다. 오른쪽 은닉 공간에서 점선은 로지스틱 회귀로 찾은 최적 직선이다.

SIMULATOR

공간 접기: 입력 공간 → 은닉 공간 (2 → 2, ReLU)

입력 공간 x — 접는 선 끌기 가능
은닉 공간 h = ReLU(Wx + b)
프리셋
은닉 공간에서 선형 분리—
최적 직선 정확도—
h(0,0) · h(1,0) · h(0,1) · h(1,1)—
해볼 것: ① 'XOR 풀이'에서 은닉 뉴런 1은 x₁+x₂를, 뉴런 2는 x₁+x₂−1을 계산한 뒤 ReLU로 음수를 자른다. (1,0)과 (0,1)은 은닉 공간에서 같은 점 (1,0)으로 합쳐지고, (0,0)과 (1,1)은 그 양옆으로 갈라져 직선 하나로 분리된다. 왼쪽 배경색은 이 직선을 원래 공간으로 되돌린 결정 영역 — 띠 모양이다. ② ReLU를 끄면 격자는 평행사변형으로만 변하고 XOR은 다시 풀리지 않는다. ③ 왼쪽에서 접는 선의 손잡이를 끌어 다른 해법을 찾아보자. 두 접는 선이 네 점을 '가운데 두 점 vs 바깥 두 점'으로 나누면 풀린다.

신경망 플레이그라운드: 브라우저에서 학습시키기

이제 여러 은닉층을 쌓은 다층 퍼셉트론(MLP, Multi-Layer Perceptron)을 실제로 학습시켜 보자. 구조는 입력 2개 → 은닉층 1~3개 → 출력 1개(sigmoid, 클래스 1일 확률)이고, 손실은 이진 교차 엔트로피다. 기울기는 역전파로 정확히 계산하며, 최적화는 Adam 또는 SGD로 미니배치(10개)마다 갱신한다. 역전파와 Adam의 원리는 3장에서 자세히 다룬다. 여기서는 '학습되는 모습'에 집중하자.

x₁x₂ ŷ W₁: 4×2, b₁: 4 W₂: 4×4, b₂: 4 W₃: 1×4, b₃: 1 은닉층 1 (ReLU)은닉층 2 (ReLU)출력 (sigmoid) 입력
그림 2-3. 2 → 4 → 4 → 1 MLP. 화살표 하나가 가중치 하나이고, 층과 층 사이 연결 전체가 행렬 \(W_l\) 하나다. 파라미터 수 = (4·2+4) + (4·4+4) + (1·4+1) = 37. 층마다 \(\mathbf h_l = \varphi(W_l\mathbf h_{l-1}+\mathbf b_l)\)을 계산하는 것을 순전파라 한다.
SIMULATOR

신경망 플레이그라운드 (실제 역전파 학습)

데이터셋
활성화
최적화
캔버스 클릭으로 점 추가
에폭0
학습 손실—
테스트 손실—
테스트 정확도—
파라미터 수—
위: 결정 경계 히트맵(보라 = 클래스 1 확률 높음, 분홍 = 클래스 0). 아래: 학습(실선)·테스트(점선) 손실. 패널: 각 은닉 뉴런의 출력을 입력 공간 전체에 그린 작은 지도. 해볼 것: ① '원'은 은닉층 1개·뉴런 2개로는 잘 안 되고(직선 두 개로 원을 감쌀 수 없다), 뉴런 3~4개면 삼각형·사각형 모양의 경계로 풀린다. ② '나선'은 1층 × 4뉴런으론 거의 불가능하다. 3층 × 8뉴런, 학습률 0.01로 두면 수백 에폭(30초 남짓) 뒤에 테스트 정확도 90% 이상으로 풀린다. ③ 학습률을 최대로 올리면 손실이 요동치거나 폭발한다. SGD는 같은 학습률에서 Adam보다 훨씬 느리다. ④ 패널의 첫 층 뉴런 지도는 항상 '직선 하나로 나뉜 반평면'이고, 깊은 층으로 갈수록 모양이 복잡해진다 — 층이 접기를 거듭한 결과다.

보편 근사 정리: ReLU 조각으로 무엇이든

은닉층 하나짜리 신경망은 얼마나 강력할까? 보편 근사 정리(Universal Approximation Theorem)는 놀라운 답을 준다. 비다항식 활성화 함수를 쓰는 은닉층 하나짜리 신경망은, 뉴런 수만 충분하면 유계 구간 위의 어떤 연속 함수든 원하는 정확도로 근사할 수 있다(Cybenko 1989, Hornik 1991, Leshno 외 1993).

ReLU로 보면 직관이 명확하다. 은닉 뉴런 하나 \(a\cdot\mathrm{ReLU}(x - t)\)는 \(x=t\)에서 꺾이는 '경첩'이다. 이런 경첩을 여러 개 더하면, 꺾이는 점마다 기울기가 바뀌는 꺾은선이 된다. 꺾은선은 점을 충분히 촘촘히 찍으면 어떤 연속 곡선이든 따라갈 수 있다.

$$\hat f(x) = c + \sum_{k=1}^{N} a_k\,\mathrm{ReLU}(x - t_k)$$
\(t_k\)는 꺾이는 위치(\(=-b_k/w_k\)), \(a_k\)는 그 점에서 기울기가 바뀌는 양. 실제 신경망은 \(w_k, b_k, a_k\)를 모두 학습하지만, 아래 시뮬레이터는 \(t_k\)를 고정하고 \(a_k, c\)만 최소제곱법으로 정확히 푼다(정규방정식 \(\Phi^\top\Phi\,\mathbf a = \Phi^\top\mathbf y\)).
ReLU(x) −2·ReLU(x−0.35) 2.5·ReLU(x−0.7) 합 = 꺾은선 경첩 3개 → 꺾인 점 2개 조각 8개로 sin 근사 조각을 늘리면 오차가 줄어든다 (최대 오차 ∝ 1/N²)
그림 2-4. 왼쪽: 서로 다른 위치에서 꺾이는 ReLU 세 개(가는 선)의 합이 꺾은선(굵은 초록)이 된다. 오른쪽: 꺾이는 점을 8개 두면 sin 곡선(회색)을 꺾은선(보라)이 따라간다. 매끄러운 함수라면 조각 수 \(N\)을 두 배로 할 때 오차가 약 1/4로 준다.
SIMULATOR

ReLU 조각으로 함수 근사 (최소제곱)

곡선을 끌면 '사용자 정의' 목표가 됩니다
목표 함수
꺾이는 위치 tₖ
은닉 뉴런 N—
1→N→1 신경망 파라미터—
RMSE—
최대 오차—
해볼 것: ① sin에서 N을 2 → 4 → 8 → 16으로 늘리며 RMSE를 보자. N을 두 배로 할 때마다 대략 1/4로 줄어든다. ② '계단'은 불연속이라 N을 늘려도 점프 근처의 최대 오차가 잘 줄지 않는다 — 정리가 '연속' 함수를 조건으로 다는 이유다. 대신 오차가 생기는 구간의 폭은 계속 좁아진다. ③ '사용자'에서 점 11개를 끌어 꺾은선 목표를 만들고 N = 10, 균등으로 두면 오차가 정확히 0이 된다. 꺾은선은 ReLU의 합으로 정확히 표현된다. ④ '무작위' 위치는 같은 N에서 대개 더 나쁘다. 실제 학습은 이 위치까지 최적화하므로 훨씬 효율적이다.
그런데 왜 깊게 쌓는가

보편 근사 정리는 '존재'만 보장할 뿐, 필요한 뉴런 수가 얼마나 될지, 학습으로 그 가중치를 찾을 수 있을지는 말해 주지 않는다. 얕은 신경망은 꺾은선 조각을 하나하나 따로 만들어야 하지만, 깊은 신경망은 접기를 반복해 조각 수를 층마다 곱으로 늘릴 수 있다. 폭 \(n\)인 ReLU 층 \(L\)개는 많게는 \(n^L\) 수준의 선형 조각을 만든다(Montúfar 외 2014). 종이를 반으로 \(L\)번 접고 한 번 자르면 \(2^L\)개의 조각이 나오는 것과 비슷하다.

출력층: 회귀, 분류, 로짓, 소프트맥스

마지막 층은 문제의 종류에 맞춰 설계한다. 값 하나를 맞히는 회귀(regression)라면 활성화 없이 \(\hat y = \mathbf w\cdot\mathbf h + b\)를 그대로 출력하고 평균제곱오차(MSE)로 학습한다. 두 클래스 분류라면 sigmoid로 (0, 1) 확률을 내고 이진 교차 엔트로피를 쓴다(앞의 플레이그라운드). \(K\)개 클래스 중 하나를 고르는 다중 분류에서는 출력 뉴런을 \(K\)개 두고, 각각의 실수 출력 \(z_k\)를 로짓(logit)이라 부른다. 로짓을 확률로 바꾸는 함수가 소프트맥스(softmax)다.

$$p_k = \operatorname{softmax}(\mathbf z)_k = \frac{e^{z_k/T}}{\sum_{j=1}^{K} e^{z_j/T}},\qquad \mathcal L_\text{CE} = -\sum_k y_k\log p_k = -\log p_{\text{정답}},\qquad \frac{\partial\mathcal L}{\partial z_k} = p_k - y_k\;(T=1)$$
\(T\)는 온도(기본 1). \(\mathbf y\)는 정답 클래스만 1이고 나머지가 0인 원-핫 벡터. 소프트맥스는 모든 로짓에 같은 상수를 더해도 결과가 변하지 않으며, 지수 때문에 큰 로짓을 과장한다. 교차 엔트로피와 결합하면 기울기가 '예측 − 정답'이라는 깔끔한 형태가 된다.
로짓 z 2.01.20.8−1−2 임의의 실수 (음수 가능) softmax 확률 p .55.24.16.03.01 0~1, 합 = 1 원-핫 정답 y 10000 손실 = −log 0.55 ≈ 0.60
그림 2-5. 다중 분류 출력층. 로짓을 소프트맥스로 확률 분포로 바꾸고, 원-핫 정답과의 교차 엔트로피로 손실을 잰다. 언어 모델은 이 \(K\)가 어휘 크기(GPT-2 50,257, Llama 3 128,256)인 거대한 분류기다(7장, 8장).
SIMULATOR

로짓 → 소프트맥스 → 교차 엔트로피

왼쪽 막대를 위아래로 끌면 로짓이 바뀌고, 클래스 이름(또는 오른쪽 막대)을 누르면 정답이 바뀐다. '기울기 방향으로 1스텝'은 z ← z − 1.0·(p − y)를 적용한다. 학습이 로짓을 어떻게 움직이는지 볼 수 있다.

p(정답)—
교차 엔트로피 (nat)—
엔트로피 (bit)—
∂L/∂z = (p − y)/T—
해볼 것: ① '모든 로짓 +1'을 여러 번 눌러도 확률은 전혀 변하지 않는다(소프트맥스는 차이만 본다). ② 정답 로짓을 다른 것보다 3만큼 크게 만들면 p ≈ 0.9를 넘고 손실은 0.1 근처로 떨어진다. 반대로 정답 로짓을 최하위로 내리면 손실이 급격히 커진다. ③ T를 0.2로 낮추면 분포가 1위에 몰리고(엔트로피 ↓), 5로 높이면 거의 균등해진다 — 8장 샘플링 온도의 정체다. ④ '1스텝'을 반복하면 정답 로짓은 올라가고 나머지는 확률에 비례해 내려간다.

깊이 vs 너비, 그리고 파라미터 수 세기

신경망의 크기는 너비(층당 뉴런 수)와 깊이(층 수)로 정해진다. 너비는 한 층이 동시에 표현할 수 있는 특징의 수, 깊이는 특징을 조합하는 단계의 수다. 이미지 분류 CNN의 앞 층은 모서리, 중간 층은 질감·부품, 뒤 층은 물체 전체에 반응하는 식으로, 깊은 망은 단순한 특징을 계층적으로 조합한다. 같은 파라미터 예산이라면 대개 적당히 깊은 망이 넓고 얕은 망보다 효율적이지만, 너무 깊으면 기울기가 전달되기 어려워진다. 이를 해결한 잔차 연결이 6장에서 등장한다.

완전연결층 \(d_\text{in}\to d_\text{out}\)의 파라미터 수는 가중치 \(d_\text{in}\times d_\text{out}\)에 편향 \(d_\text{out}\)을 더한 것이다. 층 크기 목록 \([n_0, n_1, \dots, n_L]\)인 MLP 전체는

$$N_\text{params} = \sum_{l=1}^{L}\big(n_{l-1}\,n_l + n_l\big)$$
예: MNIST 분류 MLP [784, 256, 128, 10] = (784·256+256) + (256·128+128) + (128·10+10) = 235,146. 순전파 FLOPs는 토큰(샘플)당 약 \(2\times\)(가중치 수)다.

이 공식이 Transformer에서도 그대로 통한다. GPT-2와 Llama의 각 블록에 있는 FFN(Feed-Forward Network)은 다름 아닌 은닉층 하나짜리 MLP다. GPT-2 small은 [768, 3072, 768]에 GELU를 쓰고, Llama 3 8B는 [4096, 14336, 4096]에 SiLU 게이트를 곱하는 SwiGLU를 써서 행렬이 3개다(\(W_\text{down}(\mathrm{SiLU}(W_\text{gate}\mathbf x)\odot W_\text{up}\mathbf x)\), 편향 없음). 모델 파라미터의 대부분이 바로 이 MLP들에 있다. 아래 계산기로 확인해 보자.

SIMULATOR

MLP 파라미터 계산기

옵션
프리셋
블록 1개 파라미터—
전체 (× 반복)—
메모리 FP32 / BF16—
순전파 FLOPs/샘플—
해볼 것: ① 'GPT-2 small FFN ×12'는 약 5,670만 개로, 전체 약 1.24억 파라미터의 절반 가까이 된다(나머지는 어텐션과 임베딩). ② 'Llama 3 8B FFN ×32'는 블록당 약 1.76억, 전체 약 56억 개 — 8.03B 중 약 70%다. ③ '깊고 좁게' [2,8,8,8,8,1]과 '얕고 넓게' [2,64,1]은 파라미터 수가 비슷하다(249 vs 257). 플레이그라운드에서 나선 문제를 풀어 보면 어느 쪽이 유리할까? (힌트: 위의 '접기' 논리)

핵심 정리

  1. 인공 뉴런은 \(y=\varphi(\mathbf w\cdot\mathbf x+b)\): 입력과 가중치 패턴의 내적에 편향을 더해 비선형 함수에 통과시킨다.
  2. 퍼셉트론의 결정 경계 \(\mathbf w\cdot\mathbf x+b=0\)은 직선(초평면)이고 \(\mathbf w\)는 그 법선이다. 퍼셉트론 규칙은 선형 분리 가능한 데이터에서 반드시 수렴하지만 XOR은 풀 수 없다.
  3. 활성화 함수가 없으면 층을 아무리 쌓아도 선형 변환 하나다. sigmoid·tanh는 포화로 기울기가 사라지기 쉽고, ReLU는 양수 쪽 도함수가 1이라 깊은 망을 가능하게 했다. GELU·SiLU는 대규모 Transformer의 표준이다.
  4. 은닉층은 공간을 선형 변환한 뒤 ReLU로 접어, 마지막 층이 직선 하나로 풀 수 있는 표현을 만든다.
  5. MLP는 역전파와 경사하강(Adam 등)으로 학습하며, 깊이와 너비가 표현력을 정한다. 깊이는 접기를 거듭해 조각 수를 곱으로 늘린다.
  6. 보편 근사 정리: 은닉층 하나로도 충분히 넓으면 어떤 연속 함수든 근사할 수 있다. ReLU 합은 꺾은선이다.
  7. 다중 분류 출력층은 로짓 → 소프트맥스 → 교차 엔트로피이며 기울기는 \(\mathbf p-\mathbf y\)다. 파라미터 수는 \(\sum(n_{l-1}n_l+n_l)\)이고, Transformer의 FFN이 바로 이 MLP다.

확인 퀴즈

1. 퍼셉트론 \(\mathbf w=(2,-1), b=1\)에 대한 설명으로 옳은 것은?

(0,0)에서 z = 1 > 0이므로 +1이다. \(\mathbf w\)는 경계에 수직인 법선이며 +1 쪽을 가리킨다. b는 경계를 평행 이동시킬 뿐 기울기는 \(\mathbf w\)의 방향이 정한다.

2. 활성화 함수 없이 Linear 층 10개를 쌓은 신경망의 표현력은?

\(W_{10}\cdots W_2W_1\)은 하나의 행렬이고 편향들도 하나의 벡터로 합쳐진다. 선형(아핀) 변환의 합성은 선형(아핀) 변환이므로 결정 경계는 여전히 직선이다.

3. sigmoid 도함수의 최댓값과, 그것이 깊은 망에서 의미하는 바는?

\(\sigma'(z)=\sigma(z)(1-\sigma(z))\)는 \(z=0\)에서 \(0.5\times0.5=0.25\)가 최대다. 역전파는 층마다 이 값을 곱하므로 10층이면 \(0.25^{10}\approx10^{-6}\)배 이하가 된다.

4. 편향을 포함한 MLP [784, 256, 10]의 파라미터 수는?

(784×256 + 256) + (256×10 + 10) = 200,960 + 2,570 = 203,530. 235,146은 [784, 256, 128, 10]의 값이다.

5. 로짓 (3, 1, 0)에 모든 원소에 10을 더한 (13, 11, 10)의 소프트맥스 결과는?

\(e^{z_k+c}/\sum_j e^{z_j+c} = e^c e^{z_k}/(e^c\sum_j e^{z_j})\)로 \(e^c\)가 약분된다. 실제 구현은 이 성질을 이용해 최대 로짓을 빼서 오버플로를 막는다. 분포를 날카롭게/평평하게 바꾸는 것은 덧셈이 아니라 온도(나눗셈)다.

6. Llama 3 8B의 FFN(d = 4096, 은닉 14,336, SwiGLU, 편향 없음) 한 블록의 파라미터 수에 가장 가까운 것은?

SwiGLU는 gate·up·down 행렬 3개를 쓴다: 3 × 4096 × 14336 = 176,160,768. 32층이면 약 5.64B로 전체 약 8.03B의 70% 정도가 FFN이다.