1. 인공 신경망이란?
우리가 무언가를 보고, 듣고, 생각하는 모든 과정은 뇌 속 수많은 신경세포, 즉 뉴런(Neuron)들의 복잡한 상호작용 덕분이다. 각각의 뉴런은 다른 뉴런들로부터 전기적 신호를 받는데, 이때 들어오는 신호가 충분히 강하지 않으면 아무런 반응도 하지 않는다. 하지만 신호의 총합이 특정 임계점(Threshold)을 넘어서는 순간, 뉴런은 ‘활성화’되어 다음 뉴런으로 자신만의 신호를 보낸다.
인공 신경망(Artificial Neural Network, ANN)은 바로 이 지점에서 출발한다. 인간 뇌의 정보처리 방식을 수학적으로, 그리고 공학적으로 흉내 내어 만든 기계 학습 모델인 것이다. 즉, 뇌의 구조와 기능을 모방하여 컴퓨터가 인간처럼 학습하고 문제를 해결할 수 있도록 만든 가상의 신경망이다.
인공 신경망의 가장 기본적인 컨셉 역시 “어느 정도 이하의 자극은 무시한다”는 생물학적 뉴런의 특성을 그대로 가져왔다. 여러 곳에서 들어온 입력 신호들을 종합하여, 그 값이 일정 수준을 넘을 때만 의미 있는 정보로 판단하고 다음 단계로 전달하는 구조다. 이 단순한 원리가 층층이 쌓여, 지금의 인공지능 시스템의 근간을 이루게 되었다.
2. 퍼셉트론(Perceptron)
인공 신경망이라는 개념을 이해하기 위해, 우리는 가장 먼저 그 시초인 퍼셉트론(Perceptron)에 대해 알아야 한다. 퍼셉트론은 1957년 프랑크 로젠블라트가 고안한 최초의 인공 뉴런 모델로, 신경망의 역사가 바로 이 퍼셉트론에서 시작되었다고 해도 과언이 아니다.
퍼셉트론의 구조와 구성 요소
퍼셉트론의 구조는 매우 간단하다. 여러 개의 입력을 받아 하나의 신호를 출력하는 구조로, 크게 다음과 같은 요소들로 구성된다.
- 입력값 (Input,
x): 외부에서 들어오는 다양한 신호. 각 신호는 고유의 값을 갖는다. - 가중치 (Weight,
w): 각각의 입력 신호가 얼마나 중요한지를 나타내는 값이다. 가중치가 클수록 해당 입력 신호가 결과에 더 큰 영향을 미친다. 이 가중치를 조정하는 과정이 바로 신경망의 ‘학습’이다. - 편향 (Bias,
b): 뉴런이 얼마나 쉽게 활성화될지를 결정하는 값이다. 편향은 모든 입력 신호에 가중치를 곱해 더한 값(가중합)에 추가되어, 임계값을 조절하는 역할을 한다. - 활성화 함수 (Activation Function): 모든 신호를 종합한 최종 값이 특정 임계값을 넘었을 때, 최종적으로 어떤 신호를 출력할지 결정하는 함수다.
작동 원리
퍼셉트론의 작동 원리는 입력 신호를 받아 하나의 출력 신호를 만드는 간단한 과정으로 요약 가능하다. 크게 ‘신호 종합’과 ‘활성화’ 두 단계로 나뉜다.
1. 신호 종합: 입력 신호를 하나의 값으로 합치기
먼저, 퍼셉트론은 들어온 모든 입력 신호 x에 각각의 중요도를 나타내는 가중치 w를 곱한다. 그 후, 곱해진 모든 값을 더하여 하나의 값으로 합친다. 이를 가중합(Weighted Sum)이라고 부른다.
$$ \text{가중합} = w_1 x_1 + w_2 x_2 + w_3 x_3 + \dots + w_n x_n $$
이렇게 계산된 가중합에, 뉴런이 얼마나 쉽게 활성화될지를 조절하는 편향(bias, b)을 더해준다. 편향까지 더한 이 최종 값을 넷 입력(Net Input) 또는 간단히 z라고 부른다. z가 바로 활성화 함수로 들어가기 직전의 값이다.
$$ z = (\text{가중합}) + b = (w_1 x_1 + w_2 x_2 + \dots + w_n x_n) + b $$
이 식은 행렬을 이용해 더 간결하게 표현할 수 있다.
$$ z = W^T X + b $$
이 식의 T는 전치 행렬을 의미한다.
2. 활성화: 신호의 출력 여부 결정
신호를 모두 종합하여 계산한 z 값을 그대로 출력하는 것이 아니다. 이 값을 활성화 함수(Activation Function)에 통과시켜 최종 출력값 y를 결정한다.
$$ y = \text{ActivationFunction}(z) $$
활성화 함수는 z 값이 특정 임계값(Threshold)을 넘는지 여부를 판단하여 신호를 내보낼지 말지를 결정하는 역할을 한다. 예를 들어, 초기 퍼셉트론에서 주로 사용된 스텝 함수(Step Function)는 z 값이 임계값(예: 0)보다 크면 1을, 그렇지 않으면 0을 출력한다.
이렇게 퍼셉트론은 ‘입력과 가중치를 곱해 모두 더하고(가중합), 편향을 더하여(z 계산) 그 결과가 임계값을 넘으면 활성화된다’는 단순한 원리로 작동한다. 이 간단한 계산 단위가 모여 복잡한 신경망을 이루는 것이다.
3. 다층 퍼셉트론(MLP)
앞서 배운 퍼셉트론은 인공지능 역사에 한 획을 그었지만, 곧 한계에 부딪히게 된다. 이 한계점을 보여주는 대표적인 사례가 바로 XOR 문제다. 이 문제를 이해하면 왜 신경망이 여러 층을 쌓는 형태로 발전할 수밖에 없었는지 알 수 있다.
선형(Linear) 문제
먼저 ‘선형 문제’가 무엇인지 알아보자. 어렵게 생각할 것 없이, “직선 하나로 깔끔하게 나눌 수 있는 문제”라고 생각하면 된다. 예를 들어, OR 논리 게이트를 보자.
| x1 | x2 | 출력 (y) |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
이것을 좌표 평면에 점으로 찍어보면, (0,0)만 결과가 0이고 나머지 점들은 결과가 1이다. 따라서 아래 그림처럼 직선 하나로 0과 1의 영역을 완벽하게 나눌 수 있다.
OR 게이트 선형 분리
■ 0의 영역과 ■ 1의 영역이 선으로 분리됨.
이처럼 직선으로 구분이 가능한 문제를 선형적으로 구분 가능(Linearly Separable)하다고 말한다. 단층 퍼셉트론은 바로 이 선형 문제를 푸는 데 특화된 모델이다. 왜냐하면 퍼셉트론의 계산식 y = f(w1*x1 + w2*x2 + b) 자체가 수학적으로 직선(또는 고차원에서는 평면) 하나를 찾는 과정과 같기 때문이다.
비선형(Non-linear) 문제: 퍼셉트론의 벽, XOR
이번에는 XOR 논리 게이트를 보자. XOR은 두 입력이 서로 다를 때만 1을 출력한다.
| x1 | x2 | 출력 (y) |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
이것을 좌표 평면에 찍어보면 상황이 완전히 달라진다. (0,1)과 (1,0)은 결과가 1이지만, (0,0)과 (1,1)은 결과가 0이다. 즉, 1과 0의 영역이 서로 대각선으로 교차하여 배치되어 있다.
XOR 게이트 비선형 문제
직선 하나로는 ‘0’ 그룹(🔴)과 ‘1’ 그룹(🔵)을 나눌 수 없음.
이 점들을 어떻게든 직선 하나로 나누려고 시도해 보면, 절대로 불가능하다는 것을 알 수 있다. 이것이 바로 비선형 문제다. 단층 퍼셉트론은 수학적으로 칼을 한 번만 그어 직선 하나를 긋는 것과 같기 때문에, 두 번 이상 잘라야만 분리되는 XOR 문제를 풀 수 없었다.
이후에 간단하면서도 혁신적인 해결책이 나타났다. “직선 하나로 안 되면, 여러 개를 그어서 곡선처럼 만들면 되잖아?”
이 아이디어를 구현한 것이 바로 다층 퍼셉트론(Multi-Layer Perceptron, MLP)이다. MLP는 입력층과 출력층 사이에 은닉층(Hidden Layer)을 추가하여 문제를 해결한다.
- 입력층 (Input Layer): 데이터를 받아들이는 곳
- 은닉층 (Hidden Layer): 데이터의 특징을 추출하고 조합하는 중간 계산 단계
- 출력층 (Output Layer): 최종 결과를 내보내는 곳
이 구조에서 가장 중요한 것은 신호가 각 층을 순서대로 통과하며 처리되는 순전파(Feed-forward) 과정이다.
순전파(Feed-forward) 과정
순전파는 이름 그대로 신호가 입력층에서 시작하여 출력층까지 앞으로(Forward) 나아가는(Feed) 흐름을 의미한다. 각 층은 이전 층의 출력을 자신의 입력으로 삼아 계산을 수행하고, 그 결과를 다음 층으로 넘겨준다.
- 입력층 → 은닉층
- 입력 데이터
X가 신경망에 들어온다. - 각 은닉층 노드는 모든 입력값
X에 자신만의 가중치 $w_h$를 곱하고 편향 $b_h$를 더하여 $z_h$를 계산한다. - 계산된 $z_h$는 활성화 함수 $f$를 통과하여 은닉층의 최종 출력 $O_h$가 된다.
$$ O_h = f(W_h^T X + b_h) $$
- 입력 데이터
- 은닉층 → 출력층
- 결정적으로, 이렇게 계산된 은닉층의 출력값 $O_h$가 다음 층인 출력층의 새로운 입력값이 된다.
- 출력층 노드는 이 $O_h$를 입력으로 받아, 자신만의 가중치 $W_o$와 편향 $b_o$를 이용해 최종 결과 $z_o$를 계산한다.
- $z_o$ 역시 활성화 함수
f를 통과하여 신경망의 최종 예측값 $Y_pred$가 된다.
$$ Y_{pred} = f(W_o^T O_h + b_o) $$
이처럼 MLP는 은닉층이라는 중간 단계를 둠으로써, 단층 퍼셉트론이 할 수 없었던 복잡한 비선형 문제(XOR 등)를 해결할 수 있는 능력을 갖추게 되었다. 이 순전파 과정이 바로 MLP가 작동하는 핵심 원리다.
4. 활성화 함수(Activation Function)
다층 퍼셉트론(MLP)이 단층 퍼셉트론의 한계를 넘을 수 있었던 것은 단순히 층을 쌓았기 때문만은 아니다. 각 층 사이에 ‘비선형(non-linear)’ 활성화 함수를 사용했기 때문이다.
왜 비선형 함수가 필요한가?
만약 활성화 함수가 선형(Linear), 예를 들어 f(x) = cx 같은 형태라고 상상해 보자. 3층짜리 신경망이 있다고 해도, 그 계산은 결국 y = c * (c * (c * x)) = c³ * x 가 된다. 이는 y = ax 와 같은 하나의 선형 함수에 불과하다. 즉, 선형 함수로는 층을 아무리 깊게 쌓아도 결국 하나의 층을 쓰는 것과 다를 바가 없어진다.
따라서 신경망이 층을 쌓는 혜택을 제대로 누리고, XOR 문제와 같은 복잡한 비선형 패턴을 학습하기 위해서는 반드시 비선형 활성화 함수를 사용해야 한다. 활성화 함수는 각 뉴런(노드)이 계산한 값을 그대로 다음 층으로 보내는 것이 아니라, 이 값을 특정 비선형 기준으로 한번 변환해주는 ‘스위치’ 또는 ‘게이트’ 역할을 한다.
신경망의 역사와 함께 다양한 활성화 함수들이 등장했다. 각 함수의 특징과 그래프를 통해 알아보자.
1. 스텝 함수 (Step Function)
가장 원시적이고 직관적인 활성화 함수다. 입력값이 특정 임계값 T를 넘으면 1을 출력하고, 그렇지 않으면 0을 출력하는, 말 그대로 ‘계단’ 모양의 함수다.yngie-c.github
$$ \text{Step}(x) = \begin{cases} 1 & \text{if } x > T \\ 0 & \text{otherwise} \end{cases} $$

2. 부호 함수 (Sign Function)
초기 퍼셉트론에서 주로 사용된 함수로, 스텝 함수와 유사하지만 출력이 0과 1이 아닌, -1과 +1로 나뉜다. 입력값이 0보다 크면 +1, 작으면 -1을 출력한다.
$$ \text{Sign}(x) = \begin{cases} +1 & \text{if } x > 0 \\ -1 & \text{otherwise} \end{cases} $$

스텝/부호 함수의 한계: 이 두 함수는 특정 지점에서 미분이 불가능하고, 다른 모든 지점에서는 미분값이 0이다. 이는 오차를 기반으로 가중치를 업데이트해야 하는 경사 하강법과 역전파 알고리즘이 제대로 작동할 수 없게 만들어, 실제 신경망 학습에는 거의 사용되지 않는다.
3. 시그모이드 함수 (Sigmoid Function)
스텝 함수의 단점을 보완하기 위해 등장했으며, 한때 신경망에서 가장 널리 사용되었던 활성화 함수다. 모든 입력값을 0과 1 사이의 부드러운 곡선 형태로 변환해 준다.
$$ \text{Sigmoid}(x) = \frac{1}{1 + e^{-x}} $$

출력값이 확률처럼 0과 1 사이라는 장점이 있지만, 층이 깊어질 경우 기울기 소실 문제(Vanishing Gradient Problem)를 일으키는 단점이 있어 최근에는 은닉층에서는 잘 사용되지 않는다.
4. 하이퍼볼릭 탄젠트 함수 (Tanh)
시그모이드 함수를 개선한 버전이다. 출력 범위가 0과 1 사이인 시그모이드와 달리, Tanh는 -1과 1 사이의 값을 출력한다.
$$ \text{Tanh}(x) = \frac{e^x – e^{-x}}{e^x + e^{-x}} $$

출력값의 중심이 0이기 때문에 시그모이드보다 학습 효율이 좋다고 알려져 있지만, 입력값이 특정 범위를 벗어나면 미분값이 0에 가까워지는 기울기 소실 문제는 여전히 가지고 있다.
5. 렐루 함수 (ReLU, Rectified Linear Unit)
최근 딥러닝에서 가장 기본적으로, 그리고 가장 널리 사용되는 활성화 함수다. ‘정류된 선형 유닛’이라는 이름처럼 작동 방식은 매우 간단하다.
$$ \text{ReLU}(x) = \max(0, x) $$
입력값(x)이 0보다 작으면 0을 출력하고, 0보다 크면 입력값을 그대로 출력한다.

계산이 매우 빠르고, 시그모이드나 Tanh와 달리 기울기 소실 문제가 거의 발생하지 않아 심층 신경망(Deep Neural Network)의 학습을 가능하게 한 일등공신이다.
6. 소프트맥스 함수 (Softmax Function)
소프트맥스는 시그모이드 함수를 다중 클래스 분류(Multi-class Classification) 문제에 맞게 일반화한 버전이다. 여러 개의 뉴런으로 구성된 출력층에서 사용되며, 각 뉴런의 출력값을 “전체 합이 1이 되는 확률”로 변환해준다.
예를 들어, 이미지가 ‘개’, ‘고양이’, ‘새’ 중 하나일 확률을 예측하는 문제에서, 소프트맥스는 각 클래스에 대한 예측 점수를 [0.7, 0.2, 0.1] 과 같이 총합이 1인 확률 분포로 만들어준다. 따라서 여러 개의 선택지 중 하나를 골라야 하는 문제의 출력층에 거의 필수적으로 사용된다.
5. 신경망은 어떻게 학습하는가? (경사 하강법과 역전파)
지금까지 우리는 신경망이 입력 신호를 받아 어떻게 최종 결과를 출력하는지(순전파)를 살펴보았다. 하지만 처음 만들어진 신경망은 무작위에 가까운 가중치(W)와 편향(b)을 가진, 말 그대로 ‘백지상태’의 빡통대가리 모델에 불과하다. 이 멍청한 모델을 똑똑하게 만드는 과정, 즉 ‘학습’은 어떻게 이루어질까?
신경망의 학습은 간단히 말해 “틀린 만큼 배우는 과정”이다. 즉, 자신의 예측이 정답과 얼마나 다른지(오차)를 계산하고, 그 오차를 줄이는 방향으로 자신의 가중치를 스스로 조금씩 수정해나가는 과정을 수없이 반복하는 것이다. 이 과정의 핵심에는 오차 함수, 경사 하강법, 그리고 역전파라는 세 가지 방법이 있다.
1. 오차 측정 – 비용 함수 (Cost/Error Function)
학습을 하려면 먼저 내가 얼마나 틀렸는지부터 알아야 한다. 신경망의 예측값과 실제 정답 사이의 거리를 측정하는 척도가 바로 비용 함수(Cost Function) 또는 오차 함수(Error Function)다. 이 함수의 값이 클수록 예측이 많이 틀렸다는 의미이고, 작을수록 정답에 가깝다는 의미다.
가장 대표적인 비용 함수는 평균 제곱 오차(Mean Squared Error, MSE)다.
$$ E(W) = \frac{1}{2} \sum_{n=1}^{N} ||y_n – t_n||^2 $$
- $y_n$: n번째 데이터에 대한 신경망의 예측값
- $t_n$: n번째 데이터에 대한 실제 정답 값(Target)
- $y_n – t_n$: 예측과 정답의 차이, 즉 순수한 오차
- $||…||^2$: 오차를 제곱하는 과정. 오차가 양수든 음수든 모두 양수로 만들고, 큰 오차에 더 큰 페널티를 부여하는 효과가 있다. (오차 2는 4로, 오차 3은 9로 만들어 격차를 벌린다)
Σ: 모든 데이터(n=1부터N까지)에 대한 제곱 오차를 모두 더한다.- $\frac{1}{2}$: 계산상의 편의를 위한 장치다. 나중에 미분할 때 제곱 항에서 나오는 2와 약분되어 수식이 깔끔해진다. 최종 오차의 최소 지점을 찾는 데는 영향을 주지 않는다.
결국 비용 함수 E(W)는 현재 가중치(W) 세트가 얼마나 나쁜지를 나타낸다. 신경망 학습의 목표는 이 비용 함수 값을 최소화(0에 가깝게)하는 최적의 가중치 W를 찾는 것이다.
2. 방향 찾기 – 경사 하강법 (Gradient Descent)
쉽게 비유를 들어보겠다. 우리는 ‘오차’라는 산의 정상 어딘가에 서 있다. 우리의 목표는 산의 가장 낮은 지점(오차가 최소인 지점)으로 내려가는 것이다. 그런데 안개가 껴서 어디가 가장 낮은 곳인지 보이지 않는다면 어떻게 해야 할까?
가장 상식적인 방법은 발밑의 경사(기울기)를 확인하는 것이다. 땅이 가장 가파르게 기울어진 방향으로 한 걸음씩 나아가다 보면 언젠가는 골짜기에 도착할 것이다. 이것이 바로 경사 하강법(Gradient Descent)의 방법이다.
- 기울기(Gradient,
∇E(W)): 비용 함수E(W)를 각 가중치W로 미분한 값. 이 기울기는 현재 위치에서 비용이 가장 가파르게 증가하는 방향을 가리킨다. - 가중치 업데이트: 우리는 비용을 감소시켜야 하므로, 기울기가 가리키는 방향의 정반대 방향으로 가중치를 이동(업데이트)시켜야 한다.
이를 수식으로 표현하면 다음과 같은 가중치 업데이트 규칙이 나온다.
$$ W_{\text{new}} = W_{\text{old}} – \eta \nabla_W E(W) $$
- $W_new$: 새로 업데이트될 가중치
- $W_old$: 현재 가중치
- $∇E(W)$: 비용 함수
E(W)의 기울기 (가장 가파른 오르막 방향) η(에타): 학습률(Learning Rate). 기울기 방향으로 얼마나 큰 보폭으로 나아갈지를 결정하는 값이다. 너무 크면 최저점을 지나쳐버릴 수 있고, 너무 작으면 학습 속도가 매우 느려진다. 이 학습률은 개발자가 직접 설정해야 하는 중요한 하이퍼파라미터(Hyperparameter)다.
3. 계산하기 – 역전파 (Backpropagation)
문제는, 다층 퍼셉트론처럼 수백만 개의 가중치가 얽힌 복잡한 신경망에서 각 가중치에 대한 기울기 ∇E(W)를 어떻게 효율적으로 계산하느냐다. “가중치를 하나씩 바꿔보며 오차가 얼마나 변하는지” 계산하는 것은 매우 비효율적이다. 또한 gradient를 계산하기가 쉽지 않으며, 레이어가 여러 개 있는 경우 속도가 느려진다.
가중치 하나가 최종 오차에 미치는 영향을 계산하려면, 그 가중치가 포함된 순전파 경로 전체를 미분해야 한다. 층이 깊어질수록 이 계산은 기하급수적으로 복잡해진다. 이 문제를 해결하는 알고리즘이 역전파(Backpropagation)다. 역전파는 이름 그대로 오차를 뒤(Back)로 전파(Propagate)시키는 방식이다.
- 순전파: 일단 입력을 넣어 최종 예측값을 계산한다.
- 오차 계산: 출력층에서 정답과 예측값의 오차를 계산한다.
- 역전파: 이 오차 신호를 출력층에서 은닉층으로, 은닉층에서 입력층으로 거꾸로 흘려보낸다. 이때 신호는 각 층을 지나면서 ‘미분의 연쇄 법칙(Chain Rule)’에 따라 변환된다. 이 과정을 통해 각 층의 뉴런과 가중치가 최종 오차에 얼마나 기여했는지(‘책임’의 정도)를 효율적으로 계산할 수 있다.
역전파는 경사 하강법에 필요한 기울기 ∇E(W)를 모든 가중치에 대해 한 번에 효율적으로 계산해내는 알고리즘이다. 이를 통해 개별 가중치 $W_jk$ (j층에서 k층으로 가는 가중치)에 대한 구체적인 업데이트 규칙을 다음과 같이 적용할 수 있게 된다.
$$ W_{jk} \leftarrow W_{jk} – \eta \frac{\partial E_j(W)}{\partial W_{jk}} $$
여기서 $\frac{\partial E_j(W)}{\partial W_{jk}}$가 바로 역전파 알고리즘을 통해 효율적으로 계산되는, ‘가중치 $W_jk$에 대한 오차의 부분적인 기울기’이다.
학습의 전체 과정: 에포크(Epoch)
신경망 학습은 이 모든 과정을 에포크(Epoch)라는 단위로 반복하며 이루어진다. 에포크는 전체 학습 데이터를 처음부터 끝까지 한 번 모두 사용하여 학습을 완료하는 것을 의미한다.
- 순전파: 데이터를 입력하여 예측값을 얻는다.
- 비용 계산: 비용 함수로 오차를 계산한다.
- 역전파: 오차를 역전파시켜 모든 가중치의 기울기를 계산한다.
- 가중치 업데이트: 경사 하강법으로 모든 가중치를 업데이트한다.
이 과정을 수십, 수백 번의 에포크 동안 반복하면, 신경망의 가중치 W는 점차 오차를 최소화하는 값으로 최적화되어 간다. 즉, 멍청했던 신경망이 점점 똑똑해지는 것이다.
6. 심층 신경망의 난제
지금까지 신경망의 층(Layer)을 깊게 쌓을수록(Deep) XOR 같은 복잡한 문제도 해결할 수 있다는 것을 알게 되었다. 그렇다면 이런 생각이 들 수 있다. “그럼 무조건 층을 깊게 쌓기만 하면, 신경망은 점점 더 똑똑해지는 것 아닐까?”
무식하게 생각하면 맞는 말이다. 하지만 세상은 쉽지 않다. 이게 무슨소리일까?
1. 기울기 소실과 폭주 (Vanishing & Exploding Gradient)
신경망 학습의 핵심은 출력층에서 계산된 오차를 거꾸로 전파(역전파)하여 각 층의 가중치를 업데이트하는 것이었다. 그런데 층이 수십, 수백 개로 깊어지자, 이 오차 신호가 맨 앞의 입력층까지 제대로 전달되지 않는 문제가 발생했다.
기울기 소실(Vanishing Gradient)
역전파 과정에서 오차 신호는 각 층을 거꾸로 지날 때마다 해당 층의 활성화 함수를 미분한 값(기울기)과 곱해진다. 그런데 과거에 널리 쓰이던 시그모이드(Sigmoid) 함수의 경우, 미분값의 최대치가 고작 0.25다.

상상해 보자. 10층짜리 신경망에서 출력층의 오차 신호가 입력층까지 전달되려면, 0.25보다 작거나 같은 값을 10번 연속으로 곱해야 한다.
최초 오차 × (≤0.25) × (≤0.25) × ⋯ × (≤0.25) (10번 반복)
1보다 작은 수를 계속 곱하면 그 값은 기하급수적으로 작아져 결국 0에 수렴하게 된다. 이것이 바로 기울기 소실 문제다. 오차 신호가 입력층에 가까워질수록 거의 사라져 버리는 현상이다. 신호가 사라지니, 앞쪽 층의 가중치(w)는 자신이 얼마나 틀렸는지 알 수 없게 되고, 결국 업데이트가 거의 이루어지지 않아 학습이 멈춰버린다.
기울기 폭주(Exploding Gradient)
반대의 경우도 있다. 특정 조건에서 가중치나 활성화 함수의 미분값이 1보다 계속 큰 경우, 오차 신호는 뒤로 갈수록 불어나 무한대에 가깝게 커져 버린다. 이를 기울기 폭주라고 한다. 이 경우 가중치 값이 비정상적으로 크게 튀면서 학습이 불안정해지고 모델이 망가진다.
이처럼 “기울기(오차 신호)가 사라지거나 폭주하는 효과” 때문에, 층이 깊어질수록 제대로 된 훈련이 불가능해지는 심각한 문제가 발생했다.
2. 과적합 (Overfitting)
신경망이 깊어지고 똑똑해지면서 발생한 또 다른 골치 아픈 문제는 과적합(Overfitting)이다.
과적합이란, 모델이 주어진 학습 데이터(Training Data)에만 너무 과도하게 최적화되어, 모델이 “패턴”을 배운 게 아니라 그냥 “외워버린” 상태다. 훈련 데이터에는 완벽하지만, 처음 보는 데이터에는 약하다.
훈련 정확도는 매우 높지만 실전에서는 개판인 이유다.
- 원인: 층이 깊고 복잡한 모델은 표현 능력이 너무 뛰어나다. 이 때문에 데이터에 담긴 진짜 패턴을 학습하는 대신, 데이터에 섞여 있는 사소한 노이즈나 특징까지 전부 외워버릴 수 있는 충분한 ‘암기 용량’을 갖게 된다.
- 결과: 학습 데이터에 대한 성능은 계속 올라가지만, 어느 순간부터 실제 성능(일반화 성능)은 오히려 떨어지기 시작한다.
그래서 우리는 비용 함수 $E(W)$에 정규화 항 $\lambda | W |^2$ 같이 벌점(패널티)을 붙여서 가중치가 너무 미친 값으로 커지거나 구조가 지나치게 날카로워지는 걸 막는다.
모델이 너무 복잡해지지 않도록 ‘벌점(Penalty)’을 부과하는 것이다. 구체적으로는, 우리가 최소화해야 할 비용 함수 $E(W)$에 가중치의 크기에 비례하는 정규화 항을 추가하는 것이다.
$$
\text{New Cost} = E(W) + \lambda ||W||^2 \quad (\text{기존 오차 + 정규화 항})
$$
||W||²: 모든 가중치의 제곱 합. 즉, 가중치 벡터의 크기를 나타낸다.λ(람다): 정규화 강도. 벌금을 얼마나 세게 매길지를 결정하는 하이퍼파라미터다.
결국 신경망은 ‘기존 오차’와 ‘벌점’을 동시에 최소화해야 하므로, 어쩔 수 없이 가중치 W의 값을 가능한 한 작게 유지하려는 경향을 갖게 된다. 가중치가 작아진다는 것은 특정 입력에 대한 의존도를 줄이고, 전체적으로 더 부드럽고 단순한 형태의 결정 경계를 만든다는 의미다. 진짜로 문제를 이해한 모델”을 만들려면 이 정규화가 반드시 필요하다.