5. 다층 신경망
5장 다층 신경망 개요
4장에서 살펴본 단층 신경망은 XOR과 같은 선형 분리 불가능 문제를 해결할 수 없었다. 이를 해결하기 위해 은닉층(hidden layer) 을 추가한 다층 신경망(Multi-Layer Network) 이 등장했고, 핵심 학습 방법인 오차 역전파(Back-Propagation, BP) 알고리즘과 개선 알고리즘들을 공부한다.
5.1 다층 신경망의 기능 및 구조
단층 신경망이 하나의 직선으로 패턴을 분리했다면, 다층 신경망은 여러 개의 경계선을 조합해서 복잡한 영역을 분리할 수 있다.
- 2차원: 여러 직선이 만드는 볼록 영역 / 비볼록 영역을 분리
- 3차원: 평면을 조합한 다면체 영역을 분리
예를 들어 2차원에서 그룹 1 {A, D}, 그룹 2 {B, C, E}를 분리하려면 3개의 경계선이 필요하다. 이때 은닉층 뉴런 3개가 각각 하나의 경계선을 담당하고, 출력층에서 이들을 조합한다.
기본 구조:
- 입력층(input): 외부 입력 받음
- 은닉층(hidden): 입력의 좌표값을 변환, 그룹별 판정값 계산
- 출력층(output): A, D vs B, C, E 등으로 최종 분류

예제 5.1 (p.181) — XOR 연산 (다층 신경망)
| input | x₁ | x₂ | 1 | y³ |
|---|---|---|---|---|
| A | 0 | 0 | 1 | -1 |
| B | 0 | 1 | 1 | 1 |
| C | 1 | 0 | 1 | 1 |
| D | 1 | 1 | 1 | -1 |
주의: bias는 XOR 연산 표시 X
경계선 1: $-x_1 + x_2 - \frac{1}{2} = 0$ → $w_0 = [-1, 1, -\frac{1}{2}]$
경계선 2: $x_1 - x_2 - \frac{1}{2} = 0$ → $w_0 = [1, -1, -\frac{1}{2}]$
두 경계선으로 부분 신경망을 각각 설계한 뒤, 두 결과를 합쳐 다층 신경망을 구성한다. 최종 조합은 $y_1 + y_2 + 1 = 0$ 형태로 합성된다.
증명
$y_1, y_2, y_3$는 양극성 계단함수($T=0$)를 사용하는 Perceptron이며 출력 $y$는 다음과 같다.
$$y = \begin{cases} 1 & (\text{Net} > T) \\ 0 & (\text{Net} = T) \\ -1 & (\text{Net} < T) \end{cases}$$
입력 $X_A = [0, 0, 1]$에 대해:
$$\text{Net}_{1A} = [0,0,1]\begin{bmatrix}-1\\1\\-1/2\end{bmatrix} = -1/2 \to y_{1A} = -1$$
$$\text{Net}_{2A} = [0,0,1]\begin{bmatrix}1\\-1\\-1/2\end{bmatrix} = -1/2 \to y_{2A} = -1$$
$$\text{Net}_{3A} = [-1,-1,1]\begin{bmatrix}1\\1\\1\end{bmatrix} = -1 \to y_{3A} = -1$$
같은 방식으로 $X_B, X_C, X_D$를 계산하면 XOR 결과가 정확히 나온다. 최종 가중치: $W_1 = [-1, 1, -1/2]$, $W_2 = [1, -1, -1/2]$, $W_3 = [1, 1, 1]$.
5.2 MADALINE
MADALINE (Many ADALINE): 여러 개의 ADALINE을 결합한 다층 구조. 3장의 ADALINE 학습법(LMS)을 다층으로 확장한 것이다.
- 여러 ADALINE의 출력을 MAJORITY vote 또는 AND/OR 게이트로 합성
- 은닉층에서 여러 개의 선형 경계선을 학습 → 결합해서 복잡한 비선형 경계 생성
- XOR 같은 문제를 풀기 위한 초기 다층 학습 기법 중 하나

5.3 오차 역전파 (Back-Propagation) 알고리즘
Backward Propagation algorithm of errors. 다층 신경망의 핵심 학습 알고리즘. 전체 과정은 두 단계로 나뉜다.
- Feedforward phase: 입력 → 은닉층 → 출력층 순으로 계산해서 출력 $y$를 구함
- Backward phase: 출력에서 나온 오차 $E$를 이용해 출력층 → 은닉층 → 입력층 방향으로 가중치 업데이트
활성화 함수
BP 학습에서는 미분 가능한 AF가 필요하다 (계단함수는 미분 불가능). 대표적으로:
- Sigmoid: $f(x) = \frac{1}{1 + e^{-\lambda x}}$ — 출력 범위 $[0, 1]$
- Bipolar sigmoid: $f(x) = \frac{2}{1 + e^{-\lambda x}} - 1$ — 출력 범위 $[-1, 1]$
시그모이드의 도함수 $f'(x) = \lambda \cdot f(x)(1 - f(x))$ 처럼 자기 자신으로 표현 가능하기 때문에 계산 효율이 좋다.

학습 과정
오차 함수:
$$E = \frac{1}{2}\sum_{k=1}^{M}(y_k^d - y_k)^2$$
출력층 가중치 업데이트 (Gradient descent):
$$\Delta w_{jk} = -\lambda \frac{\partial E}{\partial w_{jk}} = \lambda (y_k^d - y_k) f'(\text{Net}_k) z_j$$
여기서 $z_j$는 은닉층 출력, $\delta_k = (y_k^d - y_k)f'(\text{Net}_k)$ 을 출력층 delta로 정의한다.
은닉층 가중치 업데이트: 출력층 delta를 역전파해서
$$\delta_j = f'(\text{Net}_j) \sum_k \delta_k w_{jk}$$
$$\Delta v_{ij} = \lambda \delta_j x_i$$
의 형태로 은닉층의 델타를 계산하고 가중치를 업데이트한다. Sigmoid 사용 시 $f'$이 자기 자신으로 표현되므로 계산이 편하다.

XOR 예제 BP 학습
앞서 경계선 두 개로 설계했던 XOR 구조를 학습으로 얻는다. 초기 가중치를 random하게 설정한 뒤 입력 패턴 A, B, C, D에 대한 forward 계산 → 오차 → backward 가중치 업데이트를 반복.
주요 계산 흐름 (요약):
- $\text{Net}_j = \sum x_i v_{ij}$, $z_j = f(\text{Net}_j)$
- $\text{Net}_k = \sum z_j w_{jk}$, $y_k = f(\text{Net}_k)$
- $\delta_k = (y_k^d - y_k) f'(\text{Net}_k)$
- $\delta_j = f'(\text{Net}_j) \sum \delta_k w_{jk}$
- $w_{jk} \leftarrow w_{jk} + \lambda \delta_k z_j$
- $v_{ij} \leftarrow v_{ij} + \lambda \delta_j x_i$

5.4 은닉층 뉴런 수 (p.211)
은닉층 뉴런 수는 너무 적으면 표현력 부족, 너무 많으면 과적합과 학습 속도 저하가 생긴다. 경험적 추정식과 몇 가지 지침:
입력 패턴 공간의 선형 분할 영역
입력 공간이 $P$개 영역으로 나뉠 때 은닉층 뉴런 수는 대략 $P = \log_2 8 = 3$개가 적당. 즉 출력 분류 수에 로그를 취한 값 정도.
입력 패턴의 표현 방법
예: ㄱ, ㄴ, ㄷ 같은 글자를 3×3 격자로 입력:
- (a) $n = 9$ (행렬로 표현)
- ㄱ → $X = [111, 001, 001]$, $y^d = [1, 0, 0]$
- ㄴ → $X = [100, 100, 111]$, $y^d = [0, 1, 0]$
- ㄷ → $X = [111, 100, 111]$, $y^d = [0, 0, 1]$
- 입력층 9개, 출력층 3개 → 은닉층 $P = \log_2 3 \approx 2$개 (반올림 3개)
- 전체 연결 강도 수 (bias 포함): $(9+1) \times 2 + (2+1) \times 3 = 29$개
- (b) $n = 2$ (좌표로 표현)
- 각 글자의 검은 칸 좌표만 입력 → 입력층 2개
- 학습 패턴 수 증가 (9개)
- 전체 연결 강도 수: $(2+1) \times 2 + (2+1) \times 3 = 15$개 → 더 적은 수로 표현 가능
학습률 및 학습 패턴 수 (p.217)
- 학습률 $\lambda$: $0.001 \sim 10$ 내의 값, 연결 강도를 조정하는 scaling factor, 수렴 속도에 영향
- 학습 패턴 수 (E. Baum & D. Haussler):
$$P = \frac{N}{1-a}$$
($N$: 연결 강도 수, $a$: 정확도 accuracy)
- 예) $a = 0.1 \to P = \frac{6}{1-0.1} \approx 6$
- $a = 0.3 \to P = \frac{6}{1-0.3} \approx 8$
- 학습 패턴이 많을수록 학습 속도 ↓, 정확도 ↑
- 학습 속도: 양극성 data > 이진 data

5.5 개선된 BP 알고리즘 (p.220)
기본 BP는 학습 속도가 느리고 local minimum에 빠질 수 있다. 이를 개선한 두 가지 대표 알고리즘:
① 모멘텀(Momentum) BP 알고리즘
이전 단계의 연결강도 변화량을 보조적으로 활용해서 학습 관성을 주는 방식.
$$v^{k+1} = v^k + \Delta v^k = v^k + \lambda \delta_j X^k + \beta \Delta v^{k-1}$$
$$w^{k+1} = w^k + \Delta w^k = w^k + \lambda \delta_k Z^k + \beta \Delta w^{k-1}$$
$\beta$는 모멘텀 계수 (보통 $0 \sim 0.8$). 추가적으로 사용하며 이전 업데이트 방향을 기억해 진동을 줄이고 안정적으로 수렴하게 한다.
② 적응식 학습률 BP 알고리즘 (p.223)
연결강도 변화 상황에 따라 학습률 $\lambda$를 적응적으로 변경. 너무 작게/크게 잡았을 때 생기는 문제를 잡기 위해 상황에 따라 바꿔준다.
Δ-$\bar{\Delta}$ (delta-bar-delta) 방법
출력층:
$$\Delta w \triangleq -\delta_k Z^k, \quad \overline{\Delta w} \triangleq (1-\beta)\Delta w + \beta \overline{\Delta w^{k-1}}$$
은닉층:
$$\Delta v \triangleq -\delta_j X^k, \quad \overline{\Delta v} \triangleq (1-\beta)\Delta v + \beta \overline{\Delta v^{k-1}}$$
학습률 업데이트 규칙:
$$\lambda^{k+1} = \begin{cases} \lambda^k + \kappa & (\overline{\Delta^{k-1}}(\Delta^k)^T > 0) \\ (1+r)\lambda^k & (\overline{\Delta^{k-1}}(\Delta^k)^T < 0) \\ \lambda^k & (\overline{\Delta^{k-1}}(\Delta^k)^T = 0) \end{cases}$$
($\kappa, r, \beta$는 임의의 상수)
성능 비교 (XOR 연산)
| 학습 방법 | 학습 시도 횟수 | 학습 성공 횟수 | 반복 평균 | 표준편차 |
|---|---|---|---|---|
| BP 알고리즘 | 25 | 24 | 16859.8 | 10866.3 |
| 모멘텀 BP | 25 | 25 | 2056.9 | 1051.2 |
| delta-bar-delta | 25 | 22 | 447.3 | 258.2 |
임의 초기값(랜덤)으로 221회/661회 시도한 결과, delta-bar-delta가 반복 평균이 가장 빠르지만 학습 성공 횟수는 약간 떨어진다. 모멘텀 BP가 안정성과 속도 모두에서 균형이 좋다.

정리
| 기법 | 핵심 아이디어 |
|---|---|
| 다층 구조 | 은닉층 도입으로 비선형 분리 가능 |
| BP 알고리즘 | 오차를 출력→입력 방향으로 역전파, gradient descent로 가중치 업데이트 |
| 모멘텀 BP | 이전 변화량 $\beta \Delta w^{k-1}$ 추가해 관성 부여 |
| 적응식 BP (Δ-Δ̄) | 학습률 $\lambda$를 상황에 맞게 증감 |
다층 신경망 + BP의 등장으로 XOR 같은 선형 분리 불가능 문제까지 학습으로 해결할 수 있게 되었으며, 이후 CNN/RNN 같은 심층 구조의 기반이 된다.
Comments (0)
No comments yet. Be the first to comment!
Please to write a comment.