11장 - 역전파와 신경망 개선
11장. 역전파와 신경망 개선
신경망을 설계했다고 해서 바로 작동하는 것은 아니다. 실제로 신경망이 제대로 동작하게 만들려면 알아야 할 기법과 요령이 매우 많다. — Kian Katanforoosh
11.1 복습: 순전파와 비용 함수
지난 강의에서 신경망의 구조를 정의하고, 로지스틱 회귀를 단일 뉴런 신경망으로 바라보는 관점을 배웠다. 시그모이드는 \((-\infty, +\infty)\) 범위의 값을 \((0, 1)\) 구간으로 변환하여 확률로 해석할 수 있게 해주는 활성화 함수였다. 뉴런을 층 안에 쌓고, 층을 서로 위에 쌓을수록 매개변수가 늘어나며, 매개변수가 많을수록 네트워크는 데이터의 복잡성을 더 잘 포착할 수 있다.
지난 시간에 우리는 순전파까지 진행했다. 훈련 예제를 네트워크에 통과시키고, 출력을 얻은 뒤, 이 출력과 정답을 비교하는 비용 함수를 계산하는 단계까지 마쳤다. 이번 강의에서는 오차를 역전파하여 매개변수를 갱신하는 방법을 유도하고, 이어서 신경망을 개선하는 다양한 기법을 다룬다.
비용 함수의 정의
\(m\)개의 예제를 한 번에 네트워크에 통과시키는 이유는 **벡터화(vectorization)**를 활용하여 GPU의 병렬 연산 능력을 최대한 이용하기 위해서다.
각 훈련 예제 \(i\)에 대한 **손실 함수(loss function)**를 정의하고, 이를 배치 전체에 대해 평균한 것이 비용 함수(cost function) \(J\)이다.
고양이 분류 네트워크를 예로 들자. 입력 이미지를 \(x_1\)부터 \(x_n\)까지의 벡터로 펼치고, 3개 뉴런 → 2개 뉴런 → 1개 뉴런으로 구성된 완전 연결 네트워크에 통과시킨다. 이진 분류에 사용하는 손실 함수는 **이진 교차 엔트로피(binary cross-entropy)**다:
\[\mathcal{L}^{(i)} = -\left[ y^{(i)} \log \hat{y}^{(i)} + (1 - y^{(i)}) \log(1 - \hat{y}^{(i)}) \right]\]
이 네트워크에서 각 층의 매개변수는 다음과 같다:
층 |
가중치 |
편향 |
|---|---|---|
1층 |
\(W^{[1]}\) |
\(b^{[1]}\) |
2층 |
\(W^{[2]}\) |
\(b^{[2]}\) |
3층 |
\(W^{[3]}\) |
\(b^{[3]}\) |
경사 하강법의 갱신 규칙은 모든 층 \(l\)에 대해 다음과 같다:
\[W^{[l]} := W^{[l]} - \alpha \frac{\partial J}{\partial W^{[l]}}, \quad b^{[l]} := b^{[l]} - \alpha \frac{\partial J}{\partial b^{[l]}}\]
11.2 역전파: 마지막 층의 미분
연쇄 법칙을 효과적으로 활용하기 위해, 비용 함수와 가장 직접적으로 연결된 마지막 층의 매개변수 \(W^{[3]}\), \(b^{[3]}\)부터 미분을 계산한다. \(W^{[1]}\)은 네트워크의 여러 층을 거쳐야 비용 함수에 도달하므로 관계가 더 복잡하다.
미분은 선형 연산이므로, 비용 함수 \(J\)의 미분을 구하려면 개별 손실 함수 \(\mathcal{L}\)의 미분을 구한 뒤 합산하면 된다. 따라서 표기를 간결하게 하기 위해 하나의 예제에 대한 손실 함수의 미분을 먼저 계산한다.
\(\frac{\partial \mathcal{L}}{\partial W^{[3]}}\) 유도
\(\hat{y} = a^{[3]} = \sigma(W^{[3]} a^{[2]} + b^{[3]})\)임을 기억하자. 여기서 \(\sigma\)는 시그모이드 함수다.
손실 함수를 전개하면:
\[\frac{\partial \mathcal{L}}{\partial W^{[3]}} = -y \cdot \frac{1}{\sigma(z^{[3]})} \cdot \frac{\partial \sigma(z^{[3]})}{\partial W^{[3]}} + (1-y) \cdot \frac{1}{1 - \sigma(z^{[3]})} \cdot (-1) \cdot \frac{\partial \sigma(z^{[3]})}{\partial W^{[3]}}\]
여기서 시그모이드의 미분 공식을 적용한다:
\[\sigma'(z) = \sigma(z)(1 - \sigma(z))\]
또한 \(z^{[3]} = W^{[3]} a^{[2]} + b^{[3]}\)의 선형 부분에 대한 미분도 필요하다:
\[\frac{\partial z^{[3]}}{\partial W^{[3]}} = (a^{[2]})^T\]
전치가 나타나는 이유는 형상 분석(shape analysis) 때문이다. \(W^{[3]}\)는 \(1 \times 2\) 행렬(2개 뉴런을 1개 뉴런에 연결)이고, \(\frac{\partial \mathcal{L}}{\partial W^{[3]}}\)의 형상은 \(W^{[3]}\)와 같아야 한다. \(a^{[2]}\)는 \(2 \times 1\) 벡터이므로, 형상이 맞으려면 \((a^{[2]})^T\)를 사용해야 한다.
모든 항을 정리하면 깔끔한 결과를 얻는다:
\[\frac{\partial \mathcal{L}}{\partial W^{[3]}} = (a^{[3]} - y) \cdot (a^{[2]})^T\]
따라서 비용 함수에 대한 미분은:
\[\frac{\partial J}{\partial W^{[3]}} = \frac{1}{m} \sum_{i=1}^{m} (a^{[3](i)} - y^{(i)}) \cdot (a^{[2](i)})^T\]
꽤 복잡해 보이는 미분의 결과가 의외로 간결하다는 점이 주목할 만하다.
11.3 연쇄 법칙을 이용한 역전파
이제 2층 매개변수 \(W^{[2]}\)에 대한 미분을 구하자. 처음부터 다시 계산하는 대신, **연쇄 법칙(chain rule)**을 사용하여 이미 계산한 결과를 재활용한다.
연쇄 법칙의 경로 선택
\[\frac{\partial \mathcal{L}}{\partial W^{[2]}} = \frac{\partial \mathcal{L}}{\partial a^{[3]}} \cdot \frac{\partial a^{[3]}}{\partial z^{[3]}} \cdot \frac{\partial z^{[3]}}{\partial a^{[2]}} \cdot \frac{\partial a^{[2]}}{\partial z^{[2]}} \cdot \frac{\partial z^{[2]}}{\partial W^{[2]}}\]
각 항의 의미를 살펴보자:
미분 |
의미 |
결과 |
|---|---|---|
\(\frac{\partial \mathcal{L}}{\partial a^{[3]}}\) |
손실 함수의 출력에 대한 미분 |
손실 함수에서 직접 계산 |
\(\frac{\partial a^{[3]}}{\partial z^{[3]}}\) |
시그모이드의 미분 |
\(a^{[3]}(1 - a^{[3]})\) |
\(\frac{\partial z^{[3]}}{\partial a^{[2]}}\) |
선형 부분의 입력에 대한 미분 |
\((W^{[3]})^T\) |
\(\frac{\partial a^{[2]}}{\partial z^{[2]}}\) |
2층 활성화 함수의 미분 |
\(a^{[2]} \odot (1 - a^{[2]})\) |
\(\frac{\partial z^{[2]}}{\partial W^{[2]}}\) |
2층 선형 부분의 가중치에 대한 미분 |
\((a^{[1]})^T\) |
연쇄 법칙의 경로를 선택할 때 핵심적인 원칙이 있다. \(z^{[3]} = W^{[3]} a^{[2]} + b^{[3]}\)에서 \(W^{[3]}\)이나 \(b^{[3]}\)에 대해 미분하면 더 이상 역전파할 수 없어 "막히게" 된다. 오차를 이전 층으로 전파하려면 \(a^{[2]}\)에 대해 미분해야 한다. \(a^{[2]}\)는 \(z^{[2]}\)와 연결되고, \(z^{[2]}\)는 다시 \(a^{[1]}\)과 연결되기 때문이다.
형상 분석으로 결과 확인
연쇄 법칙으로 각 항을 구한 뒤, 이들을 올바르게 조합하려면 형상 분석이 필수적이다.
- \(a^{[3]} - y\): 스칼라 (\(1 \times 1\))
- \((W^{[3]})^T\): \(2 \times 1\) (원래 \(W^{[3]}\)는 \(1 \times 2\))
- \(a^{[2]} \odot (1 - a^{[2]})\): \(2 \times 1\) (원소별 곱)
- \((a^{[1]})^T\): \(1 \times 3\) (원래 \(a^{[1]}\)은 \(3 \times 1\))
시그모이드의 미분은 항상 **원소별 곱(element-wise product, \(\odot\))**으로 나타난다. 이는 어떤 활성화 함수를 사용하든 동일하다.
최종 결과를 형상에 맞게 조합하면:
\[\frac{\partial \mathcal{L}}{\partial W^{[2]}} = \left[ (W^{[3]})^T (a^{[3]} - y) \odot a^{[2]} \odot (1 - a^{[2]}) \right] (a^{[1]})^T\]
\(W^{[2]}\)는 \(2 \times 3\) 행렬(3개 뉴런을 2개 뉴런에 연결)이므로, 최종 결과도 \(2 \times 3\) 형상이 되어야 한다. 형상 분석을 통해 각 항의 위치와 전치 여부를 결정할 수 있다.
11.4 캐싱의 중요성
역전파 과정에서 \((a^{[1]})^T\), \(a^{[2]}\), \(a^{[3]}\) 등 순전파 단계에서 이미 계산한 값들이 반복적으로 등장한다. 캐싱을 하지 않으면 역전파 중에 이 값이 필요할 때마다 다시 순전파를 수행해야 한다.
예를 들어, 역전파 중 \(a^{[2]}\)가 필요하면 다시 순전파를 해서 \(a^{[2]}\)를 구해야 하고, \(a^{[1]}\)이 필요하면 또 다시 입력 \(x\)부터 순전파를 반복해야 한다. 이는 극도로 비효율적이다.
따라서 순전파 시 중간 계산 결과(활성화 값, 선형 출력, 가중치 등)를 **메모리에 저장(캐싱)**해 두고, 역전파 시 이를 재사용한다. 이 방법은 메모리 비용이 발생하지만, 계산 효율성을 크게 향상시킨다.
11.5 활성화 함수
실제로 신경망이 잘 동작하게 만들려면 다양한 기법이 필요하다. 첫 번째로 살펴볼 것은 활성화 함수의 선택이다.
시그모이드 (Sigmoid)
\[\sigma(z) = \frac{1}{1 + e^{-z}}, \quad \sigma'(z) = \sigma(z)(1 - \sigma(z))\]
\((-\infty, +\infty)\) 범위의 입력을 \((0, 1)\) 구간으로 매핑한다.
장점: 출력을 확률로 해석할 수 있어 분류 문제에 적합하다.
단점: \(z\)가 매우 크거나 매우 작으면 기울기가 거의 0에 가까워진다. 그래프에서 양 끝이 거의 평탄한 것을 볼 수 있다. 이를 **포화(saturation)**라고 한다. 역전파 시 캐싱된 \(z\)가 큰 값이었다면, 기울기가 극도로 작아져서 네트워크 앞쪽 층의 매개변수를 갱신하기가 매우 어렵다. 기울기가 사실상 사라지는 것이다.
하이퍼볼릭 탄젠트 (tanh)
\[\tanh(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}}, \quad \tanh'(z) = 1 - \tanh^2(z)\]
시그모이드와 유사하지만 출력 범위가 \((-1, +1)\)이다.
시그모이드와 동일한 포화 문제를 갖는다. 큰 양수나 음수에서 기울기가 거의 0이 된다.
강화학습에서처럼 출력이 음의 보상(\(-1\))과 양의 보상(\(+1\)) 사이의 값이어야 하는 경우에 유용하다.
ReLU (Rectified Linear Unit)
\[\text{ReLU}(z) = \max(0, z), \quad \text{ReLU}'(z) = \mathbf{1}_{z > 0}\]
여기서 \(\mathbf{1}_{z > 0}\)은 \(z > 0\)이면 1, 그렇지 않으면 0인 지시 함수다.
핵심 장점: 양수 영역에서 포화가 발생하지 않는다. \(z\)가 아무리 커도 기울기는 항상 1이다. 역전파 시 기울기를 그대로 통과시키므로, 시그모이드의 곱셈 항 \(a(1-a)\) 대신 단순히 지시 함수로 대체된다. 이 특성 덕분에 깊은 네트워크에서도 기울기가 잘 전파된다.
집값 예측처럼 출력이 \([0, +\infty)\) 범위여야 하는 회귀 문제에도 적합하다.
활성화 함수 비교
함수 |
출력 범위 |
포화 문제 |
주요 용도 |
|---|---|---|---|
시그모이드 |
\((0, 1)\) |
있음 |
이진 분류 출력층 |
tanh |
\((-1, +1)\) |
있음 |
보상 예측, 은닉층 |
ReLU |
\([0, +\infty)\) |
없음 (양수) |
은닉층 (가장 널리 사용) |
실무에서는 보통 한 층 안의 모든 뉴런에 동일한 활성화 함수를 사용한다. 예를 들어 "ReLU 층"이란 ReLU 활성화를 사용하는 완전 연결 층을 의미한다. 다른 뉴런에 다른 활성화 함수를 넣는 실험도 많았지만, 한 층에 하나의 활성화 함수를 사용하는 것이 합의된 관행이다.
활성화 함수가 반드시 필요한 이유
활성화 함수 없이 항등 함수(\(g(z) = z\))를 사용하면 어떻게 될까?
순전파를 전개해 보면:
\[\hat{y} = W^{[3]}(W^{[2]}(W^{[1]}x + b^{[1]}) + b^{[2]}) + b^{[3]}\]
이를 정리하면:
\[\hat{y} = (W^{[3]} W^{[2]} W^{[1]})x + (W^{[3]} W^{[2]} b^{[1]} + W^{[3]} b^{[2]} + b^{[3]})\]
이것은 결국 \(\hat{y} = W'x + b'\) 형태, 즉 선형 회귀에 불과하다. 네트워크가 아무리 깊어도, 활성화 함수가 없으면 선형 변환의 합성은 여전히 선형 변환이다. 네트워크의 복잡성과 표현력은 비선형 활성화 함수에서 비롯된다.
11.6 입력 정규화
\(z = Wx + b\)를 계산할 때 \(x\) 값이 매우 크면 \(z\)도 커지고, 이는 시그모이드나 tanh에서 포화를 유발한다. 이를 방지하는 방법이 **입력 정규화(input normalization)**다.
절차
2차원 입력 \((x_1, x_2)\)를 예로 들자.
1단계: 평균 제거 (Mean Subtraction)
\[\mu = \frac{1}{m} \sum_{i=1}^{m} x^{(i)}, \quad \tilde{x} = x - \mu\]
이 변환으로 데이터가 원점 주변으로 이동한다.
2단계: 분산 정규화 (Variance Normalization)
\[\sigma^2 = \frac{1}{m} \sum_{i=1}^{m} (x^{(i)})^2, \quad \tilde{x} = \frac{\tilde{x}}{\sigma}\]
원소별로 나누어 데이터의 분산을 1로 만든다. 최종적으로 데이터는 원점 중심에 대칭적으로 분포하게 된다.
정규화가 학습에 미치는 영향
정규화 전의 손실 함수 등고선은 한 방향으로 길쭉하게 늘어난 타원 형태다. 이 경우 경사 하강법이 최솟값을 향해 지그재그로 진동하며 느리게 수렴한다.
정규화 후에는 등고선이 원에 가까운 형태가 되어, 경사 하강법의 가장 가파른 방향이 항상 최솟값을 가리킨다. 따라서 훨씬 적은 반복으로 수렴할 수 있다.
테스트 시 주의사항
\(\mu\)와 \(\sigma\)는 훈련 세트에서 계산한 값을 저장해 두고, 테스트 세트에도 동일하게 적용해야 한다. 테스트 세트의 평균과 표준편차를 별도로 계산하여 정규화하면 안 된다. 네트워크는 훈련 시의 정규화 방식에 맞춰 학습되었으므로, 테스트 시에도 동일한 변환을 적용해야 입력의 분포가 일관되게 유지된다.
11.7 기울기 소실과 폭발 문제
직관적 이해
2차원 입력을 받는 매우 깊은 네트워크(예: 10층 이상)를 가정하자. 모든 활성화 함수를 항등 함수로, 편향을 0으로 놓으면:
\[\hat{y} = W^{[L]} W^{[L-1]} \cdots W^{[1]} x\]
경우 1: 가중치가 1보다 약간 큰 경우
\[W^{[l]} = \begin{bmatrix} 1.5 & 0 \\ 0 & 1.5 \end{bmatrix}\]
이 경우 가중치 행렬의 곱은 \(1.5^L\)에 비례하여 기하급수적으로 폭발한다.
경우 2: 가중치가 1보다 약간 작은 경우
\[W^{[l]} = \begin{bmatrix} 0.5 & 0 \\ 0 & 0.5 \end{bmatrix}\]
이 경우 \(0.5^L\)에 비례하여 \(\hat{y}\)가 0에 수렴한다. 기울기도 같은 방식으로 소실된다.
순전파 방정식으로 설명했지만, 역전파의 기울기에 대해서도 정확히 동일한 분석이 적용된다. 가중치 행렬의 미분이 항등 행렬보다 약간 크거나 작으면, 역전파되는 기울기가 층을 거치며 폭발하거나 소실된다.
11.8 가중치 초기화
기울기 소실/폭발 문제를 완화하는 한 가지 방법은 가중치를 적절한 범위로 초기화하는 것이다.
직관
단일 뉴런의 선형 부분을 보자:
\[z = w_1 x_1 + w_2 x_2 + \cdots + w_n x_n\]
\(n\)개의 항이 합산되므로, \(n\)이 클수록 \(z\)가 커지기 쉽다. \(z\)가 폭발하지 않으려면 각 \(w_i\)가 작아야 한다. 직관적으로, \(w_i\)를 \(\frac{1}{n}\)에 비례하는 크기로 초기화하면 입력의 수에 관계없이 \(z\)를 적절한 범위로 유지할 수 있다.
주요 초기화 기법
초기화 방법 |
공식 |
적합한 활성화 함수 |
|---|---|---|
기본 초기화 |
\(W^{[l]} = \text{randn}(\text{shape}) \times \sqrt{\frac{1}{n^{[l-1]}}}\) |
시그모이드 |
He 초기화 |
\(W^{[l]} = \text{randn}(\text{shape}) \times \sqrt{\frac{2}{n^{[l-1]}}}\) |
ReLU |
Xavier 초기화 |
\(W^{[l]} = \text{randn}(\text{shape}) \times \sqrt{\frac{1}{n^{[l-1]}}}\) |
tanh |
Glorot 초기화 |
\(W^{[l]} = \text{randn}(\text{shape}) \times \sqrt{\frac{2}{n^{[l-1]} + n^{[l]}}}\) |
범용 |
여기서 \(n^{[l-1]}\)은 이전 층의 뉴런 수(순전파 시 입력 수), \(n^{[l]}\)은 현재 층의 뉴런 수(역전파 시 입력 수)다.
He 초기화에서 분자가 1이 아닌 2인 이유는 실험적으로 ReLU 활성화 함수와 함께 사용할 때 더 좋은 성능을 보였기 때문이다. 이론적 근거가 완전히 정립된 것은 아니지만, 실무에서 널리 채택되었다.
Glorot 초기화의 직관은, 가중치가 순전파와 역전파 양방향에서 기울기를 곱하므로, 양쪽 입력 수의 기하 평균을 사용하여 양방향 모두에서 적절한 범위를 유지하려는 것이다.
왜 무작위 초기화인가
가중치를 무작위로 초기화하지 않으면 **대칭성 문제(symmetry problem)**가 발생한다. 모든 뉴런이 동일한 가중치에서 출발하면, 같은 기울기를 받아 같은 방향으로 갱신되므로, 결국 모든 뉴런이 동일한 함수를 학습하게 된다. 무작위 초기화는 각 뉴런이 서로 다른 출발점에서 시작하여 독립적으로 발전할 수 있도록 보장한다.
11.9 미니 배치 경사 하강법
배치와 확률적 경사 하강법의 절충
배치 경사 하강법은 벡터화를 통해 전체 데이터를 한 번에 처리할 수 있어 효율적이지만, 데이터셋이 100만 개 이미지처럼 매우 클 경우 한 번의 갱신에 극도로 오랜 시간이 걸린다.
**확률적 경사 하강법(SGD)**은 갱신이 빠르지만, 한 개 예제만으로 기울기를 추정하므로 잡음이 심하다.
미니 배치 경사 하강법은 이 둘 사이의 절충안이다. 전체 데이터를 작은 배치로 나누어, 벡터화의 이점을 살리면서도 빈번한 갱신이 가능하다.
알고리즘
\(m\)개의 훈련 예제를 크기 \(B\)의 배치로 분할한다. 예를 들어 \(m = 1{,}000{,}000\)이고 \(B = 1{,}000\)이면 \(T = 1{,}000\)개의 배치가 생긴다.
\[X = \{X^{\{1\}}, X^{\{2\}}, \ldots, X^{\{T\}}\}, \quad Y = \{Y^{\{1\}}, Y^{\{2\}}, \ldots, Y^{\{T\}}\}\]
중괄호 위첨자 \(\{t\}\)는 \(t\)번째 미니 배치를 나타낸다.
반복 t = 1, ..., T:
1. 배치 (X{t}, Y{t}) 선택
2. 순전파: 배치 전체를 네트워크에 통과
3. 비용 함수 계산: J{t} = (1/B) * Σ L(i)
4. 역전파
5. 매개변수 갱신: W[l] := W[l] - α * dW[l]
수렴 특성
알고리즘 |
비용 함수 그래프 |
특성 |
|---|---|---|
배치 GD |
매 반복마다 단조 감소 |
매끄러운 곡선 |
미니 배치 GD |
전반적으로 감소하나 진동 |
노이즈가 있는 곡선 |
배치가 작을수록 확률성이 커지므로 비용 함수 그래프의 진동이 심해진다. 등고선 그림에서 보면, 배치 경사 하강법은 매끄럽게 최솟값으로 향하지만 각 반복의 계산 비용이 크고, 미니 배치 경사 하강법은 지그재그로 움직이지만 각 반복이 매우 빠르다.
전체 데이터셋을 한 바퀴 도는 것보다, 1,000개 예제만으로도 충분히 좋은 기울기 방향을 추정할 수 있는 경우가 많다.
11.10 모멘텀
직관
손실 함수의 등고선이 한 방향으로 길쭉하게 늘어난 경우를 생각하자. 경사 하강법은 가장 가파른 방향을 따라가므로, 좁은 방향으로는 크게 진동하고 긴 방향으로는 느리게 이동한다.
이상적으로는 긴 축(수평 방향)으로는 빠르게 이동하고, 좁은 축(수직 방향)으로는 작은 갱신을 하고 싶다. 과거 갱신의 평균을 보면, 수직 방향 갱신은 위아래로 상쇄되어 작아지고, 수평 방향 갱신은 같은 방향으로 누적되어 커진다.
물리학에서의 관성과 비유할 수 있다. 로켓은 질량과 관성이 있으므로 방향을 급격히 바꿀 수 없다. 모멘텀은 최적화에 이와 같은 관성을 부여한다.
구현
기존 경사 하강법:
\[W := W - \alpha \frac{\partial J}{\partial W}\]
모멘텀 경사 하강법:
\[v := \beta v + (1 - \beta) \frac{\partial J}{\partial W}\]
\[W := W - \alpha v\]
여기서 \(v\)는 속도(velocity) 변수로, 이전 기울기들의 지수 이동 평균이다. \(\beta\)는 과거 기울기에 부여하는 가중치를 결정하는 하이퍼파라미터다.
구현 측면에서 코드 한 줄과 변수 하나만 추가하면 되지만, 최적화 성능에 상당한 영향을 미친다.
고급 최적화 알고리즘
모멘텀 외에도 실무에서 널리 쓰이는 최적화 알고리즘이 있다:
- RMSProp: 각 매개변수의 기울기 크기에 따라 학습률을 적응적으로 조절한다.
- Adam (Adaptive Moment Estimation): 모멘텀과 RMSProp을 결합한 알고리즘으로, 현재 딥러닝에서 가장 널리 사용되는 최적화 알고리즘이다.
핵심 정리
개념 |
핵심 |
|---|---|
역전파 |
연쇄 법칙으로 비용 함수의 기울기를 출력층에서 입력층으로 전파 |
연쇄 법칙 경로 |
\(W\)나 \(b\)가 아닌 활성화 \(a\)를 통해 이전 층으로 역전파 |
형상 분석 |
미분 결과의 형상이 매개변수와 일치하도록 전치 여부를 결정 |
캐싱 |
순전파의 중간 값을 저장하여 역전파 시 재계산 방지 |
활성화 함수 |
ReLU(은닉층), 시그모이드(분류 출력), tanh(보상 예측) |
항등 활성화의 한계 |
비선형 활성화 없이는 아무리 깊어도 선형 회귀에 불과 |
입력 정규화 |
평균 제거 + 분산 정규화로 학습 속도 향상 |
기울기 소실/폭발 |
깊은 네트워크에서 기울기가 기하급수적으로 축소/확대 |
가중치 초기화 |
He(ReLU), Xavier(tanh), Glorot(범용) 초기화로 완화 |
미니 배치 GD |
배치 GD의 벡터화 이점 + SGD의 빠른 갱신을 절충 |
모멘텀 |
과거 기울기의 지수 이동 평균으로 진동 억제, 수렴 가속 |
Adam |
모멘텀 + RMSProp 결합, 현재 가장 널리 사용되는 최적화기 |
이전 장: 10장 - 신경망 입문 다음 장: 12장 - ML 모델 디버깅과 오류 분석