귀납적 편향과 아키텍처 선택
먼저 읽을 장 17.1 신경망의 구성 요소
유한한 데이터로 본 적 없는 입력의 답을 맞히려면, 데이터에 없는 무언가를 가정해야 한다. 학습 데이터 1000개를 정확히 지나는 함수는 무수히 많고, 그중 무엇을 고를지는 데이터가 아니라 모델이 정한다. 이 "데이터 밖의 가정"을 귀납적 편향(inductive bias)이라 한다. 합성곱 신경망, 순환 신경망, Transformer, 그래프 신경망은 서로 다른 귀납적 편향의 묶음이다.
이 장은 이 부 전체의 관점을 세운다. 아키텍처를 "최신인가"가 아니라 "어떤 가정을 거는가"로 읽고, 그 가정이 데이터의 구조와 맞는지로 고른다. 가정이 맞으면 적은 데이터로 잘 일반화하고, 틀리면 데이터를 아무리 늘려도 지울 수 없는 오차가 남는다. 이 두 결과를 실제 학습 곡선으로 확인한다.
학습 목표
- 귀납적 편향의 개념을 이해한다
- 데이터 구조에 맞는 아키텍처를 선택한다
귀납적 편향
왜 필요한가. 입력이 인 회귀 문제에서 학습 데이터가 개 있다고 하자. 학습 데이터의 값만으로는 그 사이와 바깥의 값이 정해지지 않는다. 같은 학습 오차 0을 내는 함수 중 어느 것을 고르느냐는 모델 구조, 초기화, 정규화, 최적화 방법이 함께 정한다. 이 선택 규칙 전체가 귀납적 편향이다. 편향이라는 말은 나쁜 뜻이 아니다. 편향이 없으면 일반화도 없다.
정의. 귀납적 편향은 학습 알고리즘이 데이터와 무관하게 특정 가설을 다른 가설보다 선호하게 만드는 가정의 집합이다. 두 가지 형태로 들어간다.
- 제약(hard constraint): 모델이 표현할 수 있는 함수의 집합 자체를 줄인다. 합성곱 층은 위치마다 다른 가중치를 쓰는 함수를 아예 표현하지 못한다.
- 선호(soft preference): 표현은 가능하지만 특정 함수를 더 쉽게 찾게 한다. weight decay는 작은 가중치를, 데이터 증강은 변환 전후에 같은 답을 내는 함수를 선호하게 만든다.
네 가지 대표 가정. 이 부의 아키텍처는 다음 가정의 조합으로 읽을 수 있다.
| 가정 | 뜻 | 대표 구조 |
|---|---|---|
| 국소성(locality) | 출력은 가까운 입력에 주로 의존한다 | CNN(18.2장), 그래프 신경망의 이웃 집계 |
| 가중치 공유(weight sharing) | 위치마다 같은 규칙이 적용된다 | CNN의 kernel, RNN의 시간마다 같은 갱신(18.3장) |
| 순서(order) | 입력의 순서가 의미를 가진다 | RNN, causal convolution, 위치 인코딩을 쓴 Transformer(18.4장) |
| 대칭성(symmetry) | 어떤 변환을 해도 답이 같거나 정해진 방식으로 바뀐다 | 등변 신경망, 그래프 신경망(18.6장) |
직관: 합성곱은 제약을 건 행렬이다. 길이 인 신호에 작용하는 선형층은 행렬이다. 아무 가정이 없으면 원소 개가 모두 자유 파라미터다. 국소성을 가정하면 각 행에서 대각선 근처 개만 남고 나머지는 0이 된다. 여기에 가중치 공유를 더하면 모든 행이 같은 개 값을 한 칸씩 밀어 쓴다. 이렇게 대각선을 따라 값이 일정한 행렬이 합성곱이다(경계를 원형으로 감으면 순환 행렬(circulant matrix)이 된다).
아래 셀은 kernel (이산 2계 차분)의 원형 합성곱 행렬을 만들고, 신호를 한 칸 미는 이동 행렬 와 비교한다.
import numpy as np
T, k = 8, 3
def conv_matrix(kernel, T): # 원형 합성곱을 (T, T) 행렬로
M = np.zeros((T, T))
for t in range(T):
for j, w in enumerate(kernel):
M[t, (t + j - 1) % T] = w # 출력 t는 입력 t-1, t, t+1만 본다
return M
rng = np.random.default_rng(0)
M_conv = conv_matrix(np.array([1.0, -2.0, 1.0]), T) # (T, T), 이산 2계 차분
M_dense = rng.normal(size=(T, T)) # 아무 가정 없는 dense 층 (T, T)
print(M_conv[:3].astype(int))
S = np.roll(np.eye(T), 1, axis=0) # 한 칸 이동 행렬 (T, T)
x = rng.normal(size=T) # (T,)
relu = lambda z: np.maximum(0.0, z)
for name, M in [("conv ", M_conv), ("dense", M_dense)]:
equi = np.allclose(M @ (S @ x), S @ (M @ x))
inv = np.isclose(relu(M @ (S @ x)).sum(), relu(M @ x).sum())
print(f"{name} 등변 f(Sx) = S f(x): {equi!s:5} ReLU 후 합 불변: {inv}")
print("자유 파라미터 dense =", T * T, " 국소(공유 없음) =", T * k, " 합성곱 =", k)[[-2 1 0 0 0 0 0 1] [ 1 -2 1 0 0 0 0 0] [ 0 1 -2 1 0 0 0 0]] conv 등변 f(Sx) = S f(x): True ReLU 후 합 불변: True dense 등변 f(Sx) = S f(x): False ReLU 후 합 불변: False 자유 파라미터 dense = 64 국소(공유 없음) = 24 합성곱 = 3
행렬의 각 행이 앞 행을 한 칸 민 것이고, 첫 행의 끝(열 7)에 원형 경계가 보인다. 이 구조 덕분에 합성곱 행렬은 이동 행렬과 교환된다(). 입력을 민 뒤 합성곱한 것과 합성곱한 뒤 민 것이 같다는 뜻이고, 이것이 이동 등변성(translation equivariance)이다. 원소별 ReLU는 위치를 섞지 않으므로 등변성을 유지하고, 마지막에 위치 축 전체를 합하면 위치 정보가 사라져 불변이 된다. 무작위 dense 행렬은 어느 쪽도 아니다.
연구에서의 의미. 파라미터 수가 에서 로 줄었다는 것은 같은 데이터로 추정할 것이 그만큼 적다는 뜻이다. 동시에 표현할 수 있는 함수도 그만큼 줄었다. 귀납적 편향은 늘 이 교환이다. 데이터에 맞는 가정은 데이터를 아끼고, 맞지 않는 가정은 표현력을 깎는다.
대칭성
불변성과 등변성. 대칭의 정확한 정의는 7.10장에서 다뤘다. 군 의 원소 가 입력에 로, 출력에 로 작용할 때 이면 불변, 이면 등변이다. 이 부의 아키텍처에 대응하는 대칭은 다음과 같다.
| 구조 | 군 | 등변 층 | 불변으로 만드는 방법 |
|---|---|---|---|
| 합성곱 | 이동(원형 경계에서 정확) | 합성곱 + 원소별 활성화 | 전체 pooling |
| 집합 모델(DeepSets 계열) | 순열 | 원소마다 같은 층 + 평균 | 합·평균 pooling |
| self-attention(위치 정보 없이) | 순열 | attention 층 | 합·평균 pooling |
| 그래프 신경망 | 노드 번호 바꾸기 | 메시지 전달 | 그래프 readout |
| 등변 신경망 | 회전·반사·평행이동 | 등변 메시지 전달 | 스칼라 출력 |
예측 대상이 무엇인지가 불변과 등변 중 무엇이 필요한지를 정한다. 영상 분류의 라벨은 물체가 어디 있든 같으므로 불변, 영상 분할(segmentation)의 픽셀별 라벨은 물체와 함께 움직이므로 등변이다.
데이터 증강과 구조적 제약. 대칭을 모델에 넣는 방법은 크게 둘이다. 7.10장의 세 방법 가운데 불변 특징과 등변 구조를 구조적 제약으로 묶으면 다음과 같이 비교된다.
| 데이터 증강 | 구조적 제약 | |
|---|---|---|
| 귀납적 편향의 형태 | 선호(손실을 통해 권장) | 제약(표현 가능한 함수 자체를 제한) |
| 대칭 보장 | 학습 분포 근처에서 근사적 | 모든 입력에서 정확 |
| 데이터 효율 | 대칭을 배우는 데 데이터와 계산이 든다 | 대칭을 배울 필요가 없다 |
| 구현 | 어떤 모델에도 붙일 수 있다 | 대칭마다 구조를 새로 설계한다 |
| 대칭이 근사적일 때 | 증강 강도로 조절할 수 있다 | 깨진 대칭까지 강제한다 |
마지막 행이 중요하다. 실제 데이터의 대칭은 흔히 근사적이다. 지형이 있는 기상장은 평행이동에 대칭이 아니고, 측정 장비의 방향이 고정된 영상은 회전에 대칭이 아니다. 구조적 제약은 정확한 대칭에서 가장 강하고, 근사적인 대칭에서는 증강이나 대칭을 깨는 입력(위치 좌표, 지형 고도)을 함께 넣는 설계가 낫다.
MLP
아무 구조도 가정하지 않는 모델. 입력을 한 줄로 펼쳐 dense 층과 활성화를 쌓은 다층 퍼셉트론(multilayer perceptron, MLP)은 입력 성분 사이의 위치·순서·대칭에 대해 아무것도 가정하지 않는다. 입력 성분의 순서를 모두 바꿔도, 첫 층 가중치의 열 순서를 같이 바꾸면 똑같은 모델이 된다. 즉 MLP에게 "이웃한 픽셀"이라는 개념은 없다.
장점. 가정이 적으므로 가정이 틀릴 위험도 적다. 보편 근사 정리(7.2장)에 따라 은닉층이 충분히 넓으면 연속함수를 원하는 정확도로 근사할 수 있다. 입력 성분이 서로 다른 의미를 가진 표 데이터(온도, 압력, 농도…)처럼 공간·시간 구조가 없는 데이터에는 MLP나 트리 앙상블(16.4장)이 합리적인 출발점이다.
단점. 보편 근사 정리는 표현이 가능하다는 말이지 적은 데이터로 찾을 수 있다는 말이 아니다. 데이터의 구조를 모델이 처음부터 배워야 하므로, 구조가 분명한 데이터에서는 같은 성능에 훨씬 많은 데이터가 든다. 입력 크기에 따라 파라미터가 늘고(첫 층이 ), 학습할 때와 다른 길이·해상도의 입력을 받지 못한다.
다음 셀은 이 차이를 학습 곡선으로 본다. 입력은 길이 32인 신호이고, 목표는 이웃한 두 점의 국소 상호작용을 모든 위치에서 합한 값 다. 세 모델은 모두 고정된 특징 위에 마지막 층만 ridge 회귀로 학습한다(이렇게 하면 최적화의 영향 없이 구조의 차이만 비교할 수 있다). 선형 모델은 입력을 그대로, MLP 특징은 입력 전체를 섞는 무작위 ReLU 특징 300개를, 합성곱 특징은 길이 3 창마다 같은 무작위 ReLU 특징 100개를 적용한 뒤 위치에 대해 합한 값을 쓴다. 합성곱 특징은 국소성·가중치 공유·이동 불변을 모두 가정한다.
T, K = 32, 3
def target(X, w_pos): # (N, T) → (N,), 이웃 두 점의 국소 상호작용 합
return np.maximum(0, X * np.roll(X, -1, axis=1)) @ w_pos / np.sqrt(T)
A_mlp, b_mlp = rng.normal(size=(T, 300)) / np.sqrt(T), rng.normal(size=300)
A_cnn, b_cnn = rng.normal(size=(K, 100)), rng.normal(size=100)
models = [
lambda X: X, # 선형 (N, T)
lambda X: relu(X @ A_mlp + b_mlp), # MLP 특징 (N, 300), 위치 구조 없음
lambda X: relu(np.stack([np.roll(X, -j, axis=1) for j in range(K)], -1)
@ A_cnn + b_cnn).sum(axis=1), # 합성곱 특징 (N, 100), 국소·공유·합 pooling
]
def r2(feat, Xtr, ytr, Xte, yte, lam=1.0): # ridge 회귀로 마지막 층만 학습
F, G = np.c_[feat(Xtr), np.ones(len(Xtr))], np.c_[feat(Xte), np.ones(len(Xte))]
w = np.linalg.solve(F.T @ F + lam * np.eye(F.shape[1]), F.T @ ytr)
return 1 - np.mean((G @ w - yte) ** 2) / np.var(yte)
def curves(w_pos, sizes=(20, 100, 1000, 3000)):
Xte = rng.normal(size=(1000, T))
print(" N test R²: 선형 MLP 합성곱")
for N in sizes:
Xtr = rng.normal(size=(N, T))
row = [r2(f, Xtr, target(Xtr, w_pos), Xte, target(Xte, w_pos)) for f in models]
print(f"{N:5d} " + " ".join(f"{v:6.3f}" for v in row))
curves(np.ones(T)) # 위치와 무관한 목표N test R²: 선형 MLP 합성곱 20 -3.410 -0.303 0.815 100 -0.356 -0.169 0.950 1000 -0.040 0.360 0.982 3000 -0.005 0.430 0.983
는 test 평균을 예측하는 상수 모델 대비 개선 정도로, 1이면 완벽하고 0 이하이면 상수보다 못하다. 합성곱 특징은 데이터 20개로 이미 에 이르고, MLP 특징은 3000개에서도 0.43이다. 선형 모델은 데이터와 무관하게 0 근처에 머문다. 목표 은 의 부호를 모두 뒤집어도 같은 짝함수라서, 선형 함수와의 상관이 0이기 때문이다. 이것은 "너무 강하고 틀린 가정"의 예다.
선택 기준
가정이 틀리면 어떻게 되는지도 보아야 한다. 같은 실험에서 목표만 바꿔, 뒤쪽 위치일수록 가중치가 커지도록(가 0에서 2까지 선형으로 증가) 한다. 이제 목표는 위치에 의존하고, 합성곱 특징의 이동 불변 가정은 틀렸다.
curves(np.linspace(0, 2, T)) # 뒤쪽 위치일수록 가중치가 큰 목표N test R²: 선형 MLP 합성곱 20 -2.781 -0.560 0.260 100 -0.235 -0.212 0.489 1000 -0.028 0.262 0.711 3000 -0.011 0.426 0.722
합성곱 특징은 여전히 적은 데이터에서 앞서지만 0.72 근처에서 멈춘다. 위치에 의존하는 부분은 이 모델이 표현할 수 없으므로, 그 오차는 데이터를 늘려도 줄지 않는다. 실습에서 데이터를 40000개까지 늘리면 가정 없는 MLP가 결국 앞지른다.
아키텍처를 고를 때 따질 네 가지 축을 정리하면 다음과 같다.
데이터 구조. 가장 먼저 묻는다. 입력에 공간 격자가 있는가, 시간 순서가 있는가, 순서 없는 원소의 집합인가, 원소 사이의 연결(그래프)이 있는가, 아니면 의미가 다른 특징들의 묶음인가. 그리고 예측 대상이 어떤 변환에 불변이거나 등변인가. 대칭은 데이터의 모양이 아니라 지배 방정식과 측정 설정에서 확인한다(7.10장).
| 데이터 구조 | 첫 후보 | 근거가 되는 가정 |
|---|---|---|
| 의미가 다른 특징의 표 | 트리 앙상블, MLP | 구조 없음 |
| 격자 위의 영상·장 | CNN, U-Net | 국소성, 이동 등변 |
| 등간격 시계열 | causal CNN, RNN, 상태공간 모델 | 순서, 국소성 또는 상태 |
| 긴 맥락의 시퀀스 | Transformer, 상태공간 모델 | 순서, 먼 위치 사이 상호작용 |
| 점구름·분자 | 등변 신경망, 그래프 신경망 | 순열·회전·평행이동 대칭 |
| 메시·관계 데이터 | 그래프 신경망 | 연결 구조, 순열 등변 |
데이터 크기. 위 학습 곡선이 보여 주듯 데이터가 적을수록 강하고 맞는 가정의 가치가 크다. 과학 데이터는 흔히 수백–수천 개의 시뮬레이션이나 실험이라, 대규모 데이터에서 검증된 약한 가정의 구조(큰 Transformer)가 그대로 유리하다고 볼 수 없다.
계산 예산. 같은 데이터에서도 구조마다 비용이 다르다. 합성곱의 비용은 입력 크기에 선형, self-attention은 시퀀스 길이의 제곱이다(18.4장). 긴 시계열이나 고해상도 장에서는 이 차이가 선택을 결정한다. 학습 비용과 추론 비용(실시간 제어, 대규모 앙상블 예측)을 구분한다.
해석 요구. 결과를 물리적으로 해석해야 한다면 가정이 명시적인 구조가 유리하다. 합성곱 kernel은 국소 연산자로, 상태공간 모델의 행렬은 선형 동역학으로 읽을 수 있다. 다만 어떤 구조든 가중치나 attention map을 그대로 설명으로 읽는 데는 한계가 있다(18.4장, 18.8장).
실습
같은 데이터에 구조적 가정이 다른 세 모델을 학습해 데이터 크기에 따른 성능 곡선을 비교한다. 코드는 labs/architectures/inductive-bias/learning_curves.py다. 본문 셀과 같은 설정에서 MLP 특징을 2000개로 늘리고, 데이터를 40000개까지, 시드 3개로 평균한다(실행에 몇 분 걸린다). 집필 시점의 실행 결과는 다음과 같다.
위치 무관 목표: test R² (시드 3개 평균)
N 선형 MLP 합성곱
20 -2.623 -0.243 0.905
100 -0.393 0.087 0.969
1000 -0.042 0.560 0.983
10000 -0.004 0.784 0.985
40000 -0.000 0.818 0.986
위치 의존 목표: test R² (시드 3개 평균)
N 선형 MLP 합성곱
20 -2.064 -0.298 0.437
100 -0.438 -0.025 0.408
1000 -0.037 0.543 0.704
10000 -0.003 0.774 0.727
40000 -0.001 0.810 0.729
결과를 읽는 법은 세 가지다.
- 맞는 가정은 데이터 수천 배의 가치가 있다. 위치 무관 목표에서 합성곱 모델이 데이터 20개로 낸 성능(0.905)을 MLP는 40000개로도 내지 못한다(0.818).
- 틀린 가정은 천장을 만든다. 위치 의존 목표에서 합성곱 모델은 데이터 1000개 이후 0.70–0.73에 멈추고, MLP가 10000개에서 앞지른다. 어느 모델이 나은가는 데이터 크기에 따라 바뀐다. 그래서 아키텍처 비교는 한 데이터 크기가 아니라 학습 곡선으로 보고한다.
- 강하고 틀린 가정은 쓸모가 없다. 선형 모델은 목표의 대칭(부호 반전에 짝함수) 때문에 데이터 크기와 무관하게 0 근처다. 실패는 데이터 부족이 아니라 가정 탓이다.
이어서 연습문제를 푼다. 합성곱이 가중치 공유를 건 행렬이라는 것을 직접 구성해 확인한다.
실패 사례
- 최신 구조가 항상 낫다고 가정하는 것. 대규모 데이터에서 앞선 구조는 약한 가정 대신 데이터로 구조를 배우는 쪽이 많다. 수백 개의 시뮬레이션으로 학습하는 과학 문제에서는 그 장점이 사라지고, 데이터 구조에 맞는 단순한 구조가 이길 수 있다. 같은 데이터 분할과 같은 튜닝 예산으로 단순한 baseline과 비교한 뒤에 결론을 낸다.
- 한 데이터 크기에서의 비교로 구조의 우열을 말하는 것. 실습처럼 데이터 크기에 따라 순위가 뒤집힌다. 최소한 두세 개의 데이터 크기에서 학습 곡선을 보고, 내 문제의 데이터 크기가 곡선의 어디쯤인지 말한다.
- 데이터에 없는 대칭을 강제하는 것. 위치에 의존하는 목표에 이동 불변 모델을 쓰면 데이터를 늘려도 오차가 줄지 않는다. 학습 곡선이 일찍 평평해지면 데이터를 더 모으기 전에 모델의 가정을 의심한다.
- 증강으로 대칭이 보장된다고 생각하는 것. 증강은 선호를 줄 뿐이다. 대칭이 결론에 중요하면 입력을 변환해 예측이 같은지(또는 정해진 방식으로 바뀌는지) 직접 측정해 보고한다.
통과 기준
- 자신의 데이터 구조(격자·순서·집합·그래프·표)와 예측 대상의 불변·등변 성질을 적고, 그에 근거해 아키텍처를 선택하고 대안을 기각한 이유를 말한다.
- 구조적 가정이 다른 두 모델 이상을 두세 개의 데이터 크기에서 비교한 학습 곡선을 만들고, 가정이 맞을 때와 틀릴 때의 차이를 설명한다.
- 연습문제
circulant-conv-matrix의 테스트를 통과한다.
참고 문헌
- Battaglia 외 (2018). Relational inductive biases, deep learning, and graph networks. arXiv:1806.01261. — 아키텍처의 구성 요소를 관계적 귀납 편향의 관점으로 정리