10장 - 신경망 입문
10장. 신경망 입문
오늘은 딥러닝과 신경망에 대해 이야기하겠다. 로지스틱 회귀가 신경망의 특수한 경우임을 보인 뒤, 본격적으로 신경망으로 넘어간다. — Kian Katanforoosh (CS229 강사)
10.1 딥러닝이란
딥러닝은 머신러닝의 한 부분집합으로, 특히 컴퓨터 비전, 자연어 처리, 음성 인식 분야에서 널리 활용되고 있다. 딥러닝이 최근 크게 발전할 수 있었던 세 가지 요인은 다음과 같다.
요인 |
설명 |
|---|---|
연산 능력 |
GPU(그래픽 처리 장치)를 활용한 병렬 연산으로 대규모 계산이 가능해졌다 |
데이터 |
인터넷의 발전과 디지털화로 대규모 데이터에 접근할 수 있게 되었다 |
알고리즘 |
데이터와 연산 능력을 효과적으로 활용하는 새로운 기법들이 개발되었다 |
딥러닝 모델은 매우 유연하여 데이터를 많이 줄수록 데이터의 핵심적인 특징을 더 잘 파악한다. 그러나 그만큼 연산 비용이 매우 크다는 점도 함께 이해해야 한다.
10.2 로지스틱 회귀를 신경망으로 해석하기
10.2.1 이미지 분류 문제 설정
고양이가 있는 이미지에는 1을, 없는 이미지에는 0을 출력하는 이진 분류 문제를 생각하자. 64×64 크기의 컬러 이미지가 주어졌을 때, 이 이미지는 RGB 3채널로 구성되므로 총 \(64 \times 64 \times 3 = 12{,}288\)개의 숫자로 표현된다.
로지스틱 회귀를 적용하기 위해 이 3차원 행렬을 하나의 벡터로 **평탄화(flatten)**한다. 그러면 입력 \(x\)는 \(12{,}288 \times 1\) 크기의 열벡터가 된다.
10.2.2 로지스틱 회귀 모델
평탄화된 벡터 \(x\)에 대해 로지스틱 연산을 수행한다.
\[\hat{y} = \sigma(w^T x + b)\]
여기서 \(\sigma\)는 시그모이드 함수로, 임의의 실수를 0과 1 사이의 값으로 변환한다.
\[\sigma(z) = \frac{1}{1 + e^{-z}}\]
이 함수는 분류 문제에서 확률을 출력하기에 매우 편리하다. 이전 강의에서 \(\theta^T x\)로 표기했던 것을 여기서는 \(w\)와 \(b\)로 분리하여 표기한다. \(w\)는 \(1 \times 12{,}288\) 크기의 행벡터이고, \(b\)는 스칼라(편향)이다.
10.2.3 가중치와 편향
신경망에서는 매개변수를 가중치(weights) \(w\)와 편향(bias) \(b\)로 구분한다. 이 모델의 매개변수 수를 세어 보면, 12,288개의 가중치와 1개의 편향으로 총 12,289개다.
매개변수 수를 세는 간편한 방법이 있다. 네트워크 그림에서 간선(edge)의 수가 가중치 수이고, 각 뉴런마다 편향이 1개씩 있다.
10.2.4 훈련 과정
모델을 훈련하는 과정은 다음과 같다.
- 초기화: 가중치 \(w\)와 편향 \(b\)를 초깃값으로 설정한다.
- 최적화: 손실 함수를 정의하고 경사 하강법으로 최적의 \(w\), \(b\)를 찾는다.
- 예측: 최적화된 매개변수로 새로운 이미지에 대해 예측한다.
손실 함수는 최대우도추정에서 유도되는 로지스틱 손실을 사용한다.
\[L(\hat{y}, y) = -\left[ y \log \hat{y} + (1 - y) \log(1 - \hat{y}) \right]\]
이 손실 함수를 최소화하기 위해 경사 하강법을 적용한다. 매 반복마다 손실의 매개변수에 대한 미분을 계산하고, 그 방향으로 매개변수를 갱신한다.
10.2.5 핵심 공식 두 가지
신경망을 이해하기 위한 두 가지 핵심 공식이 있다.
공식 1: 뉴런 = 선형 변환 + 활성화 함수
\[a = \sigma(w^T x + b)\]
뉴런은 두 부분으로 구성된다. 먼저 입력에 대해 선형 변환 \(z = w^T x + b\)를 수행하고, 그 결과를 활성화 함수(여기서는 시그모이드)에 통과시킨다. 활성화 함수는 시그모이드 외에 다른 함수도 사용할 수 있다.
공식 2: 모델 = 아키텍처 + 매개변수
모델을 배포한다는 것은 적절한 아키텍처(네트워크 구조)와 최적화된 매개변수(가중치와 편향)를 확보했다는 뜻이다. 실무에서 모델은 아키텍처 파일과 매개변수 파일, 이 두 파일로 구성된다.
10.3 다중 클래스 분류
10.3.1 독립 시그모이드 방식
이제 고양이뿐 아니라 사자, 이구아나까지 세 종류의 동물을 식별하는 문제로 확장하자. 가장 직관적인 방법은 뉴런을 3개로 늘리는 것이다. 각 뉴런은 모든 입력과 연결되며, 각자 독립적으로 해당 동물의 존재 여부를 판별한다.
\[\hat{y}_1 = a_1^{[1]} = \sigma(w_1^{[1]T} x + b_1^{[1]}) \quad \text{(고양이)}\]
\[\hat{y}_2 = a_2^{[1]} = \sigma(w_2^{[1]T} x + b_2^{[1]}) \quad \text{(사자)}\]
\[\hat{y}_3 = a_3^{[1]} = \sigma(w_3^{[1]T} x + b_3^{[1]}) \quad \text{(이구아나)}\]
여기서 대괄호 위첨자 \([1]\)은 층(layer)의 번호를, 아래첨자는 해당 층 내 뉴런의 번호를 나타낸다. 출력 \(\hat{y}\)는 단일 숫자가 아니라 크기 3의 벡터가 된다.
매개변수 수: 이전 모델의 3배인 \(3 \times (n + 1)\)개다. 각 뉴런이 독립적인 가중치 벡터와 편향을 가지기 때문이다.
레이블링: 고양이 이미지는 \((1, 0, 0)\), 사자 이미지는 \((0, 1, 0)\), 이구아나 이미지는 \((0, 0, 1)\)로 레이블한다.
10.3.2 다중 레이블의 강건성
이 방식에서 흥미로운 점은 한 이미지에 여러 동물이 동시에 존재해도 잘 작동한다는 것이다. 예를 들어 고양이와 사자가 함께 있는 이미지를 \((1, 1, 0)\)으로 레이블할 수 있다.
그 이유는 세 뉴런이 서로 통신하지 않기 때문이다. 각 뉴런의 시그모이드 출력은 다른 뉴런과 독립적이며, 사실상 세 개의 로지스틱 회귀를 동시에 수행하는 것과 같다. 충분한 데이터만 있으면, 네트워크는 어떤 뉴런이 어떤 동물을 담당하는지 스스로 알아낸다.
10.3.3 손실 함수 확장
3개의 뉴런을 훈련하기 위해 손실 함수도 확장해야 한다. 기존의 이진 분류 손실을 세 뉴런에 대해 합산한다.
\[L_{3} = \sum_{k=1}^{3} \left[ -y_k \log \hat{y}_k - (1 - y_k) \log(1 - \hat{y}_k) \right]\]
이 손실 함수의 미분은 기존과 동일한 복잡도를 가진다. 예를 들어 \(w_2^{[1]}\)에 대한 미분을 구할 때, 세 항 중 두 번째 항만 \(w_2^{[1]}\)에 의존하므로 나머지 두 항의 미분은 0이 된다.
10.4 소프트맥스 회귀
10.4.1 상호 배타적 분류
이미지에 최대 하나의 동물만 존재한다는 제약이 있는 경우를 생각하자. 질병 진단에서 하나의 질병만 분류하는 상황이 이에 해당한다. 이런 경우 독립 시그모이드 방식은 최적이 아니다. 특히 특정 클래스의 데이터가 극히 희소하면, 해당 뉴런이 제대로 학습되지 않는 문제가 생긴다.
이를 해결하기 위해 소프트맥스(softmax) 함수를 사용한다.
10.4.2 소프트맥스 함수
먼저 각 뉴런의 선형 부분만 계산한다. 선형 부분의 출력을 \(z\)로 표기한다.
\[z_k^{[1]} = w_k^{[1]T} x + b_k^{[1]}, \quad k = 1, 2, 3\]
그런 다음 시그모이드 대신 소프트맥스 함수를 적용한다.
\[\hat{y}_k = \frac{e^{z_k^{[1]}}}{\sum_{j=1}^{3} e^{z_j^{[1]}}}\]
소프트맥스의 핵심 성질은 모든 출력의 합이 반드시 1이 된다는 것이다. 분자를 모두 더하면 분모와 같아지므로, 출력은 클래스 전체에 대한 확률 분포를 형성한다.
따라서 "고양이일 확률 0.7, 사자일 확률 0.6"처럼 독립적인 확률을 출력할 수 없다. 대신 "고양이일 확률 0.7, 사자일 확률 0.2, 이구아나일 확률 0.1"처럼 합이 1인 분포를 출력한다.
레이블링 방식: 소프트맥스 네트워크에서는 원-핫 인코딩을 사용한다. 고양이는 \((1, 0, 0)\), 사자는 \((0, 1, 0)\), 이구아나는 \((0, 0, 1)\)이다. 독립 시그모이드와 달리 \((1, 1, 0)\) 같은 레이블은 사용할 수 없다. 출력의 합이 1이어야 하므로, \((1, 1, 0)\)을 레이블로 주면 네트워크는 각각 약 \(0.5, 0.5, 0\)에 수렴하려 할 것이고, 이는 원하는 결과가 아니다.
예측 시에는 소프트맥스 출력 중 가장 큰 값을 1로, 나머지를 0으로 설정한다.
10.4.3 교차 엔트로피 손실 함수
소프트맥스 네트워크에서는 각 뉴런의 출력이 다른 뉴런의 매개변수에도 의존하므로(분모 때문에), 로지스틱 손실을 그대로 쓸 수 없다. 대신 **교차 엔트로피 손실(cross-entropy loss)**을 사용한다.
\[L = -\sum_{k=1}^{K} y_k \log \hat{y}_k\]
이 함수는 로지스틱 손실과 형태가 유사하지만, 모든 클래스에 대해 합산한다는 점이 다르다.
10.4.4 회귀 문제로의 변환
만약 고양이의 유무가 아니라 고양이의 나이를 예측하고 싶다면 어떻게 해야 할까? 두 가지 접근이 가능하다.
- 이산화 후 소프트맥스: 나이를 여러 구간으로 나누어 각 구간을 클래스로 취급한다. 하나의 나이만 가질 수 있으므로 소프트맥스가 적합하다.
- 직접 회귀: 활성화 함수를 바꾼다. 시그모이드는 출력을 0과 1 사이로 제한하므로 적합하지 않다.
직접 회귀의 경우, 활성화 함수로 **ReLU(Rectified Linear Unit)**를 사용할 수 있다.
\[\text{ReLU}(z) = \max(0, z)\]
ReLU는 거의 선형이지만, 음수 입력에 대해서는 0을 출력한다. 나이처럼 음수가 불가능한 값을 예측할 때 적합하다. 만약 활성화 함수를 완전한 선형 함수로 설정하면, 전체 네트워크가 단순한 선형 회귀가 된다.
손실 함수도 회귀 문제에 맞게 변경해야 한다. L1 손실 \(|\hat{y} - y|\) 또는 L2 손실 \(\|\hat{y} - y\|^2\)을 사용한다.
10.5 신경망의 구조
10.5.1 다층 신경망
이제 본격적으로 신경망을 구성해 보자. 고양이 분류 문제로 돌아가서, 단일 뉴런 대신 여러 층에 걸쳐 뉴런을 배치한다.
예를 들어 다음과 같은 구조를 만들 수 있다.
- 1층 (입력층): \(n\)개의 입력을 받아 3개의 뉴런으로 전달
- 2층 (은닉층): 3개의 뉴런에서 2개의 뉴런으로 전달
- 3층 (출력층): 2개의 뉴런에서 1개의 출력 뉴런으로 전달
매개변수 수 계산:
구간 |
가중치 |
편향 |
|---|---|---|
입력 → 1층 |
\(3n\) |
\(3\) |
1층 → 2층 |
\(2 \times 3 = 6\) |
\(2\) |
2층 → 3층 |
\(1 \times 2 = 2\) |
\(1\) |
합계 |
\(3n + 8\) |
\(6\) |
대부분의 매개변수가 입력층에 집중되어 있다는 점에 주목하라. 은닉층을 추가해도 매개변수 수는 크게 늘지 않는다.
10.5.2 층(Layer)의 정의
- 층(Layer): 서로 연결되지 않은 뉴런들의 집합이다. 같은 층 내의 뉴런들은 서로 통신하지 않는다.
- 입력층(Input Layer): 원본 데이터를 받는 첫 번째 층이다.
- 출력층(Output Layer): 최종 예측값을 생성하는 마지막 층이다. 분류 문제에서는 클래스 수만큼, 회귀 문제에서는 1개의 뉴런을 가진다.
- 은닉층(Hidden Layer): 입력층과 출력층 사이의 모든 층이다. 입력과 출력이 이 층에 직접 보이지 않기 때문에 "은닉"이라 부른다. 은닉층은 이전 층이 전달한 정보만을 입력으로 받고, 자신이 이해한 내용만 다음 층에 전달한다.
10.5.3 은닉층이 학습하는 것
고양이 분류 네트워크를 충분한 데이터로 훈련하면, 각 층은 점점 더 복잡한 특징을 학습한다.
- 첫 번째 은닉층: 픽셀만 직접 보기 때문에, 인접 픽셀 간의 색상 차이를 감지하여 **가장자리(edge)**를 학습한다. 한 뉴런은 수직 가장자리를, 다른 뉴런은 수평 가장자리를 감지할 수 있다.
- 두 번째 은닉층: 가장자리 정보를 조합하여 부분 형태(귀, 입 등)를 학습한다.
- 출력층: 부분 형태를 종합하여 고양이의 얼굴을 구성하고, 고양이의 존재 여부를 판단한다.
깊은 층일수록 더 복잡하고 추상적인 정보를 파악할 수 있다. 다만 신경망의 해석은 아직 활발히 연구되는 분야로, 각 뉴런이 정확히 무엇을 학습하는지 완벽하게 이해하기는 어렵다.
10.5.4 주택 가격 예측 예시
주택 가격을 예측하는 문제를 생각하자. 입력 특성은 침실 수, 집 크기, 우편번호, 인근 지역의 부유함 정도다.
사람이 직접 설계한다면 다음과 같이 생각할 수 있다.
- 우편번호 + 부유함 → 학군의 질
- 우편번호 → 도보 접근성
- 집 크기 + 침실 수 → 수용 가능한 가족 규모
이 세 가지 중간 특성이 가격 예측에 더 유용할 것이다. 그러나 실제로는 이런 중간 특성을 사람이 설계하지 않는다. 대신 **완전 연결층(fully-connected layer)**을 사용하여, 모든 입력을 모든 뉴런에 연결하고 네트워크가 스스로 유용한 특성을 발견하게 한다.
네트워크는 종종 인간보다 더 나은 특성을 찾아낸다. 이것이 신경망을 블랙박스 모델이라 부르는 이유이기도 하다. 각 간선이 어떤 의미를 가지는지 해석하기 어렵기 때문이다.
이처럼 입력과 출력만 지정하고 중간 과정을 네트워크에 맡기는 방식을 **종단간 학습(end-to-end learning)**이라 한다.
10.6 순전파 방정식
10.6.1 단일 입력에 대한 순전파
입력층, 은닉층(2개 뉴런), 출력층(1개 뉴런)으로 구성된 3층 네트워크의 순전파 방정식을 작성하자. 1층에 뉴런이 3개라고 가정한다.
\[z^{[1]} = W^{[1]} x + b^{[1]}\]
\[a^{[1]} = \sigma(z^{[1]})\]
\[z^{[2]} = W^{[2]} a^{[1]} + b^{[2]}\]
\[a^{[2]} = \sigma(z^{[2]})\]
\[z^{[3]} = W^{[3]} a^{[2]} + b^{[3]}\]
\[a^{[3]} = \sigma(z^{[3]}) = \hat{y}\]
각 층의 여러 뉴런에 대한 개별 방정식을 행렬 연산 하나로 압축한 것이다.
10.6.2 차원 분석
각 변수의 차원을 정리하면 다음과 같다.
변수 |
차원 |
설명 |
|---|---|---|
\(x\) |
\(n \times 1\) |
입력 벡터 |
\(W^{[1]}\) |
\(3 \times n\) |
1층 가중치 (3개 뉴런 × \(n\)개 입력) |
\(b^{[1]}\) |
\(3 \times 1\) |
1층 편향 |
\(z^{[1]}, a^{[1]}\) |
\(3 \times 1\) |
1층 출력 |
\(W^{[2]}\) |
\(2 \times 3\) |
2층 가중치 (2개 뉴런 × 3개 입력) |
\(b^{[2]}\) |
\(2 \times 1\) |
2층 편향 |
\(z^{[2]}, a^{[2]}\) |
\(2 \times 1\) |
2층 출력 |
\(W^{[3]}\) |
\(1 \times 2\) |
3층 가중치 (1개 뉴런 × 2개 입력) |
\(b^{[3]}\) |
\(1 \times 1\) |
3층 편향 |
\(z^{[3]}, a^{[3]}\) |
\(1 \times 1\) |
3층 출력 (최종 예측값) |
가중치 행렬의 행 수는 현재 층의 뉴런 수, 열 수는 이전 층의 뉴런 수(또는 입력 수)다. 이 규칙을 기억하면 차원을 쉽게 파악할 수 있다. 층 간 간선의 수가 가중치 행렬의 원소 수와 같다. 예를 들어 1층(3개 뉴런)과 2층(2개 뉴런) 사이의 간선은 \(2 \times 3 = 6\)개이며, 이는 \(W^{[2]}\)의 원소 수와 일치한다.
10.6.3 배치 입력에 대한 순전파
배치 경사 하강법을 사용하려면 여러 입력을 동시에 처리해야 한다. \(m\)개의 훈련 예제를 열벡터로 나란히 쌓으면 입력 행렬 \(X\)를 구성할 수 있다.
\[X = \begin{bmatrix} | & | & & | \\ x^{(1)} & x^{(2)} & \cdots & x^{(m)} \\ | & | & & | \end{bmatrix}\]
여기서 소괄호 위첨자 \((i)\)는 \(i\)번째 훈련 예제를 나타낸다. 대괄호 \([l]\)은 층 번호, 소괄호 \((i)\)는 예제 번호라는 표기법을 기억하자.
배치 버전의 순전파 방정식은 소문자를 대문자로 바꾸면 된다.
\[Z^{[1]} = W^{[1]} X + b^{[1]}\]
\[A^{[1]} = \sigma(Z^{[1]})\]
차원 변화는 다음과 같다.
변수 |
단일 입력 |
배치 입력 (\(m\)개) |
|---|---|---|
\(X\) |
\(n \times 1\) |
\(n \times m\) |
\(W^{[1]}\) |
\(3 \times n\) |
\(3 \times n\) (변화 없음) |
\(Z^{[1]}\) |
\(3 \times 1\) |
\(3 \times m\) |
가중치 행렬 \(W\)의 차원은 입력 개수와 관계없이 동일하다. 입력을 1,000개 주든 100만 개 주든 매개변수의 수는 변하지 않는다.
10.6.4 브로드캐스팅
배치 순전파에서 대수적 문제가 하나 발생한다. \(W^{[1]} X\)의 결과는 \(3 \times m\) 행렬인데, \(b^{[1]}\)은 \(3 \times 1\) 벡터이므로 차원이 맞지 않아 직접 더할 수 없다.
이를 해결하는 기법이 **브로드캐스팅(broadcasting)**이다. \(b^{[1]}\)을 \(m\)번 복제하여 \(3 \times m\) 행렬 \(\tilde{b}^{[1]}\)을 만들면 덧셈이 가능해진다.
\[\tilde{b}^{[1]} = \begin{bmatrix} b^{[1]} & b^{[1]} & \cdots & b^{[1]} \end{bmatrix}\]
매개변수의 수는 그대로 유지하면서, 병렬 연산이 가능한 형태로 코드를 작성하는 것이다. NumPy에서는 \(3 \times m\) 행렬과 \(3 \times 1\) 벡터를 더하면 자동으로 브로드캐스팅이 수행된다.
10.7 아키텍처 결정: 뉴런 수와 층 수
신경망을 설계할 때 "뉴런을 몇 개 써야 하는가?", "층을 몇 개 쌓아야 하는가?"라는 질문에 대한 정답은 없다. 실무에서의 접근법은 다음과 같다.
- 실험: 여러 아키텍처를 시도하고, 검증 세트(validation set)에서의 정확도를 비교하여 최적의 구조를 선택한다.
- 경험적 직관: 문제의 복잡도를 가늠하여 네트워크의 깊이를 결정한다.
예를 들어 고양이 분류와 낮/밤 분류를 비교해 보자. 고양이 분류가 더 어렵다. 고양이에는 다양한 품종과 자세가 있지만, 밤에는 "품종"이 없기 때문이다. 문제가 복잡할수록 더 많은 데이터가 필요하고, 네트워크도 더 깊어야 한다.
10.8 비용 함수와 역전파 개요
10.8.1 비용 함수
단일 예제에 대한 **손실 함수(loss)**와 전체 배치에 대한 **비용 함수(cost)**를 구분한다.
\[J(\hat{y}, y) = \frac{1}{m} \sum_{i=1}^{m} L^{(i)}\]
\[L^{(i)} = -\left[ y^{(i)} \log \hat{y}^{(i)} + (1 - y^{(i)}) \log(1 - \hat{y}^{(i)}) \right]\]
비용 함수는 손실 함수의 평균이다. 비용 함수에 대한 미분은 개별 손실 함수에 대한 미분의 합이므로, 복잡도가 증가하지 않는다. 미분은 선형 연산이기 때문이다.
10.8.2 역전파(Backpropagation) 개요
최적화 대상은 모든 층의 가중치와 편향이다.
\[W^{[l]} := W^{[l]} - \alpha \frac{\partial J}{\partial W^{[l]}}, \quad b^{[l]} := b^{[l]} - \alpha \frac{\partial J}{\partial b^{[l]}} \quad (l = 1, 2, 3)\]
이 갱신을 수행하려면 모든 매개변수에 대한 비용 함수의 미분을 계산해야 한다.
왜 "역전파"인가? 출력층에 가까운 매개변수부터 미분을 계산하는 것이 효율적이기 때문이다. \(W^{[3]}\)는 손실 함수에 직접 가까이 있으므로 미분이 간단하다. 반면 \(W^{[1]}\)은 여러 층을 거쳐야 손실에 도달하므로 관계가 복잡하다.
10.8.3 연쇄 법칙(Chain Rule)
\(W^{[3]}\)에 대한 미분을 연쇄 법칙으로 분해하면 다음과 같다.
\[\frac{\partial J}{\partial W^{[3]}} = \frac{\partial J}{\partial a^{[3]}} \cdot \frac{\partial a^{[3]}}{\partial z^{[3]}} \cdot \frac{\partial z^{[3]}}{\partial W^{[3]}}\]
각 항은 개별적으로 쉽게 계산할 수 있다. 특히 \(\frac{\partial z^{[3]}}{\partial W^{[3]}} = (a^{[2]})^T\)로 매우 간단하다.
\(W^{[2]}\)에 대한 미분을 계산할 때는 \(W^{[3]}\)의 미분을 구하면서 이미 계산한 중간 결과를 재활용할 수 있다.
\[\frac{\partial J}{\partial W^{[2]}} = \underbrace{\frac{\partial J}{\partial a^{[3]}} \cdot \frac{\partial a^{[3]}}{\partial z^{[3]}}}_{\text{이미 계산됨}} \cdot \frac{\partial z^{[3]}}{\partial a^{[2]}} \cdot \frac{\partial a^{[2]}}{\partial z^{[2]}} \cdot \frac{\partial z^{[2]}}{\partial W^{[2]}}\]
마찬가지로 \(W^{[1]}\)에 대한 미분도 이전 단계에서 계산한 값을 재활용한다.
\[\frac{\partial J}{\partial W^{[1]}} = \underbrace{\frac{\partial J}{\partial z^{[2]}}}_{\text{이미 계산됨}} \cdot \frac{\partial z^{[2]}}{\partial a^{[1]}} \cdot \frac{\partial a^{[1]}}{\partial z^{[1]}} \cdot \frac{\partial z^{[1]}}{\partial W^{[1]}}\]
이처럼 출력층에서 입력층 방향으로 거슬러 올라가며 미분을 전파하므로 역전파라 부른다. 핵심은 이미 계산한 값을 저장하고 재사용함으로써 중복 연산을 피하는 것이다. 순전파 방정식이 있어야 연쇄 법칙에서 올바른 경로를 설정할 수 있다는 점도 중요하다.
역전파의 구체적인 미분 계산은 다음 강의에서 다룬다.
10.9 신경망을 조정할 수 있는 요소
신경망을 구축한 후에는 다양한 요소를 조정(tuning)해야 한다.
조정 요소 |
선택지 |
|---|---|
활성화 함수 |
시그모이드, ReLU, tanh 등 |
손실 함수 |
로지스틱 손실, 교차 엔트로피, L1/L2 손실 등 |
층의 수 |
얕은 네트워크 vs 깊은 네트워크 |
층당 뉴런 수 |
문제의 복잡도에 따라 결정 |
학습률 |
수렴 속도와 안정성에 영향 |
경사 하강법 방식 |
배치 vs 확률적 vs 미니 배치 |
이러한 조정 가능한 요소들을 **하이퍼파라미터(hyperparameter)**라 하며, 다음 강의에서 본격적으로 다룬다.
핵심 정리
개념 |
핵심 |
|---|---|
뉴런 |
선형 변환(\(z = w^Tx + b\)) + 활성화 함수(\(a = \sigma(z)\)) |
모델 |
아키텍처(네트워크 구조) + 매개변수(가중치와 편향) |
시그모이드 |
실수를 \([0, 1]\)로 변환. 이진 분류에 사용 |
소프트맥스 |
출력의 합을 1로 만드는 함수. 상호 배타적 다중 클래스 분류에 사용 |
ReLU |
\(\max(0, z)\). 회귀 및 은닉층 활성화에 사용 |
은닉층 |
입력의 추상적 표현을 학습. 깊을수록 더 복잡한 특징 포착 |
완전 연결층 |
모든 입력을 모든 뉴런에 연결. 네트워크가 스스로 특징을 발견 |
순전파 |
입력 → 은닉층 → 출력 방향으로 값을 계산 |
역전파 |
출력 → 은닉층 → 입력 방향으로 기울기를 계산 (연쇄 법칙 활용) |
브로드캐스팅 |
편향 벡터를 배치 크기만큼 복제하여 행렬 연산을 가능하게 함 |
종단간 학습 |
중간 특성을 사람이 설계하지 않고 네트워크에 맡김 |
이전 장: 9장 - 의사결정 트리와 앙상블 기법 다음 장: 11장 - 역전파와 신경망 개선