16. Adaptive basis function models

16.1. Introduction

앞서 커널 법으로 비선형 회귀나 분류를 하는 법을 알아보았다. 이 때 예측은 \mathbf{\phi}(\mathbf{x}) = [\kappa(\mathbf{x}, \mathbf{\mu}_{1}), \cdots, \kappa(\mathbf{x}, \mathbf{\mu}_{N})]에 대해 f(\mathbf{x}) = \mathbf{w}^{T} \mathbf{\phi}(\mathbf{x})의 형태를 갖는다. \mathbf{\mu}_{k}는 학습 데이터 전체이거나 일부이다. 이런 꼴의 모델은 입력을 저장된 프로토타입과 비교하는 템플릿 매칭의 형태를 가진다. 이 방식은 잘 작동하지만 좋은 커널 함수를 선택해야 한다는 문제가 있다. 커널을 선택하는 대신 좋은 커널을 학습할 수 있다면 더 나을 것이다. 앞서 주변가능도를 최대화시켜 커널 매개변수를 학습하는 방법을 알아보았다. 또는 다중 커널 학습을 할 수도 있다. 이 모두가 계산 복잡도가 크다는 단점이 있다.

다른 방법은 커널들을 모아 합한 뒤 쓸모 있는 특성을 학습 데이터로부터 직접 학습하는 것이다. 즉, 데이터로부터 학습된 기저 함수 \phi_{m}(\mathbf{x})에 대해 적응적 기저 함수 모델 (ABM) f(\mathbf{x}) = w_{0} + \sum_{m=1}^{M} w_{m} \phi_{m}(\mathbf{x})을 생성하는 것이다. 기저 함수는 매개변수적이므로 기저 함수 매개변수 \mathbf{v}_{m}에 대해 \phi_{m}(\mathbf{x}) = \phi(\mathbf{x}, \mathbf{v}_{m})로 쓸 수 있다. 전체 매개변수 집합은 \mathbf{\theta} = (w_{0}, \mathbf{w}_{1 : M}, \{\mathbf{v}_{m}\}_{m=1}^{M})로 나타낼 수 있다. 결과 모델은 매개변수에 대해 선형이 아니기 때문에 국소적으로 최적인 최대가능도추정이나 최대사후확률추정만 계산할 수가 있다. 하지만 이런 모델은 선형 모델을 성능 면에서 압도하기도 한다.

16.2. Classification and regression trees (CART)

분류 회귀 트리 (CART), 또는 결정 트리는 입력 공간을 재귀적을 분할하고 그로 생기는 영역 각각에 국소적 모델을 정의함으로써 정의된다. 이는 한 영역마다 리프 노드를 갖는 트리로 나타낼 수 있다.

16.2.1. Basics

분류 회귀 트리는 특정 변수가 특정 기준을 넘는지에 따라 노드의 해당하는 자식 노드로 옮겨가면서 리프 노드에 도달시킨다. 이 평행축 분할의 결과는 N차원 공간을 여러 개의 영역으로 분할한다. 이후 이 영역 각각에 반응 함수를 대응시켜 구간적으로 상수인 함수를 만든다. 이 경우 모델은 f(\mathbf{x}) = \mathbb{E}[y | \mathbf{x}] = \sum_{m=1}^{M} w_{m} \phi(\mathbf{x} ;  \mathbf{v}_{m})의 형태로 쓸 수 있다. 이 때 w_{m}은 m번째 영역 R_{m}의 평균 반응도이고, \mathbf{v}_{m}은 변수분류 회귀 트리는 특정 변수가 특정 기준을 넘는지에 따라 노드의 해당하는 자식 노드로 옮겨가면서 리프 노드에 도달시킨다. 이 평행축 분할의 결과는 N차원 공간을 여러 개의 영역으로 분할한다. 이후 이 영역 각각에 반응 함수를 대응시켜 구간적으로 상수인 함수를 만든다. 이 경우 모델은 f(\mathbf{x}) = \mathbb{E}[y | \mathbf{x}] = \sum_{m=1}^{M} w_{m} \phi(\mathbf{x} ;  \mathbf{v}_{m})의 형태로 쓸 수 있다. 이 때 w_{m}은 m번째 영역 R_{m}의 평균 반응도이고, \mathbf{v}_{m}은 변수가 어떻게 분할되는지에 대한 선택과, m번째 리프 노드까지 도달하기 위한 경로의 기준치값을 나타낸다. 즉 이는 분류 회귀 트리는 그저 적응적 기저 함수 모델의 일부로써 기저 함수가 영역을 정의하고 가중치가 각 영역의 반응값을 나타냄을 의미한다. 영역의 평균 반응도 대신 클래스 라벨에 대한 분포를 저장함으로써 위의 세팅을 분류 문제로 확장할 수 있다.

회귀 트리의 영역 플롯의 예.

16.2.2. Growing a tree

데이터의 최적 분할을 찾는 것은 NP-완전 문제이므로 보통은 탐욕적 과정을 통해 국소적으로 최적인 최대가능도근사를 찾는다. 이 때 쓰이는 분할 함수는 다음과 같이 최적의 특성과 해당 특성에 대한 최적값을 찾는다: (j^{\ast}, t^{\ast}) = \mathrm{argmin}_{j \in \{ 1, \cdots, D \}} \min_{t \in \mathcal{T}_{j}} [\mathrm{cost}(\{\mathbf{x}_{i}, y_{i}; x_{ij} < t\}) + \mathrm{cost}(\{\mathbf{x}_{i}, y_{i}; x_{ij} > t\})] (비용 함수에 대한 정의는 나중에 이야기하자.) 표현의 단순화를 위해 모든 입력은 실변수이거나 서수임을 가정하였다. \mathcal{T}_{j}는 특성 j의 가능한 기준값들의 집합으로서 x_{ij}의 유일한 값들을 정렬함으로써 얻어진다. 입력이 범주적일 경우에는, 가장 흔한 접근법은 각 클래스 라벨 c_{k}에 대해 x_{ij} = c_{k}인지 x_{ij} \neq c_{k}인지 분할하는 분할들을 생각하는 것이다. 이진 분할이 아닌 분할도 생각할 수 있으나 이는 데이터 파편화를 불러와 과적합을 일으킬 수 있다.

노드가 분할할 가치가 있는지를 판별하는 휴리스틱으로 다음 방법들이 있다.

  • 비용 함수의 감소량이 너무 작은가? 노드를 분할할 때의 비용 함수의 감소량은 다음과 같이 정의할 수 있다: \Delta = \mathrm{cost}(\mathcal{D}) - (\frac{\lvert \mathcal{D}_{L} \rvert}{\lvert \mathcal{D} \rvert} \mathrm{cost}(\mathcal{D}_{L}) + \frac{\lvert \mathcal{D}_{R} \rvert}{\lvert \mathcal{D} \rvert} \mathrm{cost}(\mathcal{D}_{R}))
  • 트리가 기대 최대 깊이를 넘었는가?
  • \mathcal{D}_{L}, \mathcal{D}_{R} 중 하나의 반응분포가 충분히 동형인가? (즉, 라벨이 같고 분포가 순수분포인가?)
  • \mathcal{D}_{L}, \mathcal{D}_{R} 중 하나의 표본수가 지나치게 작은가?

이제 남은 것은 비용 함수를 특정해 분할의 질을 평가하는 것이다. 이것이 분류 문제인지 회귀 문제인지를 결정하기도 한다.

16.2.2.1. Regression cost

회귀 세팅에서는 비용 함수는 반응도의 평균값이 \bar{y} = \frac{1}{\lvert \mathcal{D} \rvert} \sum_{i \in \mathcal{D}} y_{i}일 때 \mathrm{cost}(\mathcal{D}) = \sum_{i \in \mathcal{D}} (y_{i} - \bar{y})^{2})로 정의된다. 다른 방법으로는, 각각의 리프 노드에 대해 선형 회귀 모델을 피팅할 수도 있다. 이 때 입력은 루트에서의 경로에서 선택된 특성이 되고 잔여오차를 사용한다.

16.2.2.2. Classification cost

분류 세팅에서는 분할의 질을 결정하는 여러 방법이 있다. 첫째로는 리프 노드마다 해당 노드의 데이터의 클래스 조건분포에 기준치를 걸어 다중 베르누이 분포를 피팅하는 방법이 있다. \hat{\pi}_{c} = \frac{1}{\lvert \mathcal{D} \rvert} \sum_{i \in \mathcal{D}} \mathbf{1}_{y_{i} = c}이 된다. 이후 주어진 분할에 대한 오차율을 측정하는 척도로는 다음 방법들이 있다.

  • 오감지율. 최적의 클래스 라벨을 \hat{y}_{c} = \mathrm{argmax}_{c} \hat{\pi}_{c}라 할 때 오감지율은 \frac{1}{\lvert \mathcal{D} \rvert} \sum_{i \in \mathcal{D}} \mathbf{1}_{y_{i} \neq \hat{y}} = 1 - \hat{\pi}_{y}이 된다.
  • 엔트로피(편차). \mathbb{H}(\hat{\mathbf{\pi}}) = - \sum_{c=1}^{C} \hat{\pi}_{c} \log \hat{\pi}_{c}. 이 때 \hat{\pi_{c}}가 분포 p(c | X_{j} < t)의 최대가능도근사임을 이용하면, 엔트로피를 최소화시키는 것은 정보량 증가분 \mathrm{infoGain}(X_{j} < t, Y) = \mathbb{H}(Y) - \mathbb{H}(Y | X_{j} < t)를 최대화시키는 것과 동치임을 알 수 있다.
  • 지니 지수. \sum_{c=1}^{C} \hat{\pi}_{c} (1 - \hat{\pi}_{c}) = 1 - \sum_{c} \hat{\pi}_{c}^{2}로, 기대 오차율과 같다.

클래스가 2개인 경우에는, p = \pi_{m}(1)이라 놓을 경우 오감지율은 1 - \max(p, 1-p)이 되고, 엔트로피는 \mathbb{H}_{2}(p), 지니 지수는 2p(1-p)이 된다. 교차 엔트로피와 지니 지수는 상당히 유사하고, 오감지율의 경우 클래스 확률에 더 민감하게 반응한다. 교차 엔트로피와 지니 지수는 한쪽의 노드가 순수 분포인 경우, 즉 단일 클래스로만 이루어진 경우를 더 선호한다.

오차율 vs 교차 엔트로피 vs 지니 계수.

16.2.2.3. Example

결정 트리가 복잡해질 수록 과적합의 위험이 커진다. 아래에서는 트리를 가지치기하는 방법을 알아본다.

과적합된 결정 트리의 예.

16.2.3. Pruning a tree

과적합을 막기 위해서는 오차 감소량이 적은 경우 노드를 분할하지 않는 것도 가능하지만, 이는 지나치게 국소적인 접근이다. 일반적인 접근법은 전체 트리를 만든 뒤 가지치기를 하는 것이다. 가지치기를 할 때는 트리에서 오차를 최소로 증가시키는 가지를 쳐낸다. 얼마나 가지치기를 수행할지 판단하기 위해서는 각각의 부분 트리들에 대해 교차 검증 오차를 계산한 뒤 교차 검증 오차가 1 최소 표준오차 이하인 트리를 선택한다.

16.2.4. Pros and cons of trees

분류 회귀 트리 모델은 표현하기 쉽고, 이산적/연속적 입력이 섞여 있는 경우를 처리하기 쉽고, 입력의 단조 변환에 대해 불변이고, 자동적 변수 선택을 수행하고, 이상치에 대해 상대적으로 강건하고, 큰 데이터셋에 대해 확장되기 쉽고, 입력이 유실된 경우에 대해서도 잘 수정될 수 있다는 장점들이 있다.

그러나, 분류 회귀 트리 모델에는 단점도 있는데, 가장 큰 단점은 다른 모델들에 비해 정확도가 상대적으로 낮다는 점이다. 이것은 트리를 만들 때 탐욕적 알고리즘을 사용하기 때문이다. 관련된 문제로 트리는 불안정하다는 점이 있는데, 입력 데이터에 약간의 변화만 줘도 전체 트리에 대해 큰 변화가 생길 수 있다는 점이다. 빈도학파적으로 이야기하면 트리들은 분산이 큰 추정자라고 할 수 있다.

16.2.5. Random forests

분류 회귀 트리 모델의 분산을 적게 하기 위한 하나의 방법은 여러 추정을 평균내는 것이다. 예를 들어, 데이터로부터 M개의 서로 다른 부분집합을 선택한 뒤 M개의 서로 다른 트리를 학습시키고 f_{m}이 m번째 트리일 때 그 결합인 f(\mathbf{x}) = \sum_{m=1}^{M} \frac{1}{M} f_{m}(\mathbf{x})을 계산할 수 있다. 이를 배깅, 붓스트랩 결합이라고 한다.

안타깝게도, 데이터의 서로 다른 부분집합들에 대해 같은 학습 알고리즘을 재가동하는 것은 예측기의 상호 연관성을 높이기 때문에 이로부터 얻을 수 있는 분산 감소량에는 한계가 있다. 무작위 숲으로 알려진 방법은 기반 트리들을 학습시킬 때 학습 데이터뿐만 아니라 입력 변수들에 대해서도 무작위 부분집합을 선택함으로써 기반 트리들간의 연관성을 줄인다.

배깅은 빈도학파적인 개념이다. 트리를 학습할 때 베이지안적 접근법을 적용할 수도 있는데, 마르코프 연쇄 몬테 카를로법을 통해 트리에 대해 근사적 추론을 함으로써 예측치들의 분산을 줄일 수 있다. 또는 트리의 결합에 대해 베이지안 추론을 할 수도 있다. 이를 베이지안 적응적 회귀 트리(BART)라 한다. 이 샘플링 기반 베이지안 방법의 비용은 샘플링 기반 무작위 숲 방법과 비슷하다는 것을 짚고 넘어갈 필요가 있다. 즉, 두 방법 모두 학습하기엔 느리지만, 질이 높은 분류기를 생성한다.

여러 트리를 사용하는 방법들의 단점은 단일 트리만큼 표현력이 충분치 않다는 점이다. 여러 후처리 과정을 통해 이 단점을 줄일 수는 있다.

16.2.6. CART compared to hierarchical mixture of experts

결정 트리의 흥미로운 대체재는 전문 모델의 계층적 혼합으로 알려져 있다. 이는 확률적 결정 트리로 볼 수 있는데, 이의 장점은 다음과 같다.

  • 이 모델은 입력 공간을 임의의 중첩된 선형 결정 경계의 집합으로 분할할 수 있다. 반면에, 일반적 결정 트리는 축에 평행한 분할밖에 쓸 수 없다.
  • 모델은 모든 전문 모델에 대한 평균값을 기반으로 예측을 한다. 반면에, 일반적 결정 트리는 대응하는 리프 노드들에 기반한 모델들에 의해서만 이루어진다. 리프 노드들은 보통 연관된 표본의 수가 적기 때문에, 이는 과적합을 낳을 수 있다.
  • 전문 모델의 계층적 혼합을 피팅하는 것은 부드러운 연속함수의 최적화 문제를 푸는 것을 포함한다. 이는 결정 트리를 피팅할 때 일반적인 탐욕적 이산적 최적화 방법에 비해 국소적 해에 갇히는 문제에 보다 잘 대처한다. 비슷한 이유로, 매개변수를 베이지안적으로 피팅하는 데 있어 계산적으로도 더 용이하다.

16.3. Generalized additive models

복수 입력에 대한 비선형 모델을 만드는 간단한 방법은 일반화된 덧셈 모델 f(\mathbf{x}) = \alpha + f_{1}(x_{1}) + \cdots + f_{D}(x_{D})을 사용하는 것이다. 이 때 각각의 f_{j}들은 산포 다듬질 모델로 모델링되고, f(\mathbf{x})는 일반화된 선형 모델 때처럼 연결 함수를 통해 p(y | \mathbf{x})로 매핑된다.

f_{j}를 모델링할 때 회귀 쐐기 모델을 쓸 경우엔 f_{j}(x_{j} = \mathbf{\beta}_{j}^{T} \mathbf{\phi}_{j}(x_{j})로 쓸 수 있으며, 전체 모델은 f(\mathbf{x}) = \mathbf{\beta}^{T} \mathbf{\phi}(\mathbf{x})의 꼴이 된다. (\mathbf{\phi}(\mathbf{x}) = [1, \mathbf{\phi}_{1}(x_{1}), \cdots, \mathbf{\phi}_{D}(x_{D})]) 그러나 f_{j}는 다듬질 쐐기 모델을 쓰는 경우가 더 많다. 이 경우에는 목적 함수는 정규화 가중치 \lambda_{j}에 대해 J(\alpha, f_{1}, \cdots, f_{D}) = \sum_{i=1}^{N}(y_{i} - \alpha - \sum_{j=1}^{D} f_{j}(x_{ij}))^{2} + \sum_{j=1}^{D} \lambda_{j} \int f_{j}^{\prime \prime} (t_{j})^{2} d t_{j}이 된다.

16.3.1. Backfitting

이 모델의 최대가능도추정을 어떻게 피팅할까? \alpha값은 유일하게 결정되지 않는다. 임의의 f_{j}에 상수값을 더할 수 있기 때문이다. 그러므로 일반적으로 모든 j에 대해 \sum_{i=1}^{N} f_{j}(x_{ij}) = 0임을 가정한다. 이 경우 \alpha의 최대가능도추정은 \hat{\alpha} = \frac{1}{N} \sum_{i=1}^{N} y_{i}이 된다.

나머지를 피팅하기 위해서는 반응치들에서 상수항 \hat{\alpha}를 뺀 뒤, f_{j}를 뺀 나머지를 대상 벡터로 삼아 반복적으로 f_{j}를 업데이트한다. 즉, \hat{f}_{j} = \mathrm{smoother}(\{y_{i} - \sum_{k \neq j} \hat{f}_{k}(x_{ik})\}_{i=1}^{N})으로 업데이트하는 것이다. 또, \hat{f}_{j, \mathrm{new}} = \hat{f}_{j} - \frac{1}{N} \sum_{i=1}^{N} \hat{f}_{j}(x_{ij})의 후처리를 통해 출력의 평균이 0임을 보장해준다. 이를 후적합 알고리즘이라 한다. \mathbf{X}가 풀 랭크이면 모든 다듬질 쐐기가 선형이므로 위의 목적 함수는 볼록함수가 되고, 이 과정은 전역 최적해로 수렴함이 보장된다.

일반적인 선형 모델의 경우에는 방법을 조금 수정해야 한다. 기본 아이디어는 반복 재가중 최소 제곱법을 가중 후적합 알고리즘으로 대체하는 것이다. 로지스틱 회귀의 경우에는 각각의 반응도가 s_{i} = \mu_{i}(1 - \mu_{i})의 가중치를 가진다. (\mu_{i} = \mathrm{sigm}(\hat{\alpha} + \sum_{j=1}^{D} \hat{f}_{j}(x_{ij})))

16.3.2. Computational efficiency

다듬질 함수에 대한 호출 각각은 O(N)의 시간복잡도를 가지므로 전체 시간복잡도는 반복을 T번 수행할 때 O(NDT)이다. 차원수가 높아지면 피팅하는 데 시간이 오래 걸리므로 희소 징벌치를 추가한 희소 덧셈 모델 (SpAM)을 사용하거나 부스팅같은 탐욕적 방법을 사용할 수도 있다.

16.3.3. Multivariate adaptive regression splines(MARS)

일반화된 덧셈 모델에 대해 상호작용을 갖도록 확장할 수 있다. 일반적으로 변량 분석과 같은 분해 f(\mathbf{x}) = \beta_{0} + \sum_{j=1}^{D} f_{j}(x_{j}) + \sum_{j, k} f_{jk} (x_{j}, x_{k}) + \sum_{j, k, l} f_{j, k, l}(x_{j}, x_{k}, x_{l}) + \cdots 을 사용한다. 물론 너무 고차 상호작용에 대해서는 매개변수가 너무 많아지므로 피팅을 할 수 없다.

어떤 변수를 더할지 결정할 때는 주로 탐욕적 알고리즘을 사용하는데, 이의 예 중 하나는 다변수 적응적 회귀 쐐기(MARS)가 있다. 이는 회귀 쐐기의 텐서곱을 기저함수로 삼아 다차원 회귀 함수를 표현한다. 이러한 함수들을 만들기 위해, \mathcal{C} = \{(x_{j} - t)_{+}, (t - x_{j})_{+} : t \in \{x_{1j}, \cdots, x_{Nj}\}, j = 1, \cdots, D \}을 기저 후보 함수의 집합으로 삼는다. 이를 반사쌍이라 한다. 그리고 기저 함수의 집합을 \mathcal{M} = \{1\}로부터 시작한 뒤, \mathcal{C} 내의 각 반사쌍 중 하나씩을 곱해나가 기저를 확장한다. 모델이 충분히 커질 때까지 이를 반복한 뒤 (상한을 지정할 수 있다), 뒤에서부터 가지치기를 한다. 가지치기를 할 때는 잔여 오차를 가장 적게 줄이는 기저 함수부터 쳐내는 작업을 교차검증 오차가 개선되지 않을 때까지 반복한다.

각각의 기저 함수 반사쌍을 노드의 분할로 보고 기저 함수를 곱하는 것을 자식 노드로 진행하는 것으로 본다면, 이 과정은 분류 회귀 트리와 밀접한 관계가 있음을 알 수 있다.

다변수 적응적 회귀 쐐기의 예. 두 기저쌍 함수에서 각각을 선택한 뒤 곱했다.

16.4. Boosting

부스팅은 적응적 기저 함수 모델을 피팅하는 탐욕적 알고리즘이다. 이 때 \phi_{m}들은 약한 학습기 또는 기본 학습기라 불리는 알고리즘에 의해 생성된다. 이 알고리즘은 약한 학습기를 가중치가 부과된 데이터에 연속적으로 적용하는데, 초기에 잘못 분류된 표본들에 대해 높은 가중치를 부여한다.

이러한 약한 학습기로는 아무 분류나 회귀 알고리즘을 쓸 수 있지만, 분류 회귀 트리를 쓰는 것이 보통이다. 이는 꽤 잘 동작하는데, 반면에 단일 결정 트리만 쓰는 것은 성능이 좋지 않다. 부스팅은 본래 이진 분류에 집중한 계산적 학습론에서 유도되었는데, 여기서 약한 학습기가 약간이라도 성능 개선을 보이기만 한다면 해당 학습기의 성능을 임의로 개선시킬 수 있음을 증명하였다. 실험에 의하면 학습 데이터 오차가 0이 된 후에도 테스트 데이터 오차가 계속 감소함을 알 수 있는데, 따라서 부스팅은 과적합에 대단히 강하다.

이런 실험적 성공에 따라 부스팅은 큰 관심을 끌게 되었다. 부스팅은 함수 공간에서의 경사 하강법으로 볼 수 있으며, 회귀, 강건 회귀, 푸아송 회귀 등 여러 손실 함수에 대해서도 다룰 수 있도록 확장할 수 있다.

16.4.1. Forward stagewise additive modeling

부스팅의 목적은 손실 함수 L(y, \hat{y})와 적응적 기저 함수 모델 f에 대해 다음의 최적화 문제 \min_{f} \sum_{i=1}^{N} L(y_{i}, f(\mathbf{x})_{i}))를 푸는 것이다.

제곱 오차 손실 함수를 쓰면 최적의 추정은 f^{\ast}(\mathbf{x}) = \mathrm{argmin}_{f(\mathbf{x})} \mathbb{E}_{y | \mathbf{x}} [(Y - f(\mathbf{x}))^{2}] = \mathbb{E}[Y | \mathbf{x}] 으로 주어지는데, 조건부 분포 p(y | \mathbf{x})의 참값을 모르기 때문에 실제로는 계산할 수 없다. 그러므로 이것은 집단 최소화자라고 불리고는 한다.

이진 분류에 대해서는 0-1 손실 함수를 쓸 수 있지만 이는 미분가능하지 않다. 그 대신에 0-1 손실 함수의 볼록한 상한인 로그 손실 함수를 쓴다. 이 경우 최적의 추정은 f^{\ast}(\mathbf{x}) = \frac{1}{2} \log \frac{p(\tilde{y} = 1 | \mathbf{x})}{p(\tilde{y} = -1 | \mathbf{x})}으로 주어진다. 이는 다중 클래스 세팅으로 확장할 수도 있다.

로그 손실 함수 외의 다른 볼록한 상한은 지수 손실 함수 L(\tilde{y}, f) = e^{-\tilde{y} f}가 있다. 이는 로그 손실 함수에 비해 계산할 때 이점이 있다. 이 경우 최적의 추정은 역시 f^{\ast}(\mathbf{x}) = \frac{1}{2} \log \frac{p(\tilde{y} = 1 | \mathbf{x})}{p(\tilde{y} = -1 | \mathbf{x})}으로 동일하다.

이 추정값을 직접 계산하기는 어렵기 때문에 반복적 방법을 이용한다. 최초에 f_{0}(\mathbf{x}) = \mathrm{argmin}_{\mathbf{\gamma}} \sum_{i=1}^{N} L(y_{i}, f(\mathbf{x}_{i}; \mathbf{\gamma}))으로 초기화한 뒤 m번째 반복 과정에서 (\beta_{m}, \mathbf{\gamma}_{m}) = \mathrm{argmin}_{\beta, \mathrm{gamma}} \sum_{i=1}^{N} L(y_{i}, f_{m-1}(\mathbf{x}_{i}) + \beta \phi(\mathbf{x}_{i}; \mathbf{\gamma}))을 계산하고, f_{m}(\mathbf{x}) = f_{m-1}(\mathbf{x}) + \beta_{m} \phi(\mathbf{x} ; \mathbf{\gamma}_{m})으로 업데이트한다. 핵심은 반복적 과정에서 이전 매개변수를 수정하지 않는다는 점인데, 이 때문에 이 방법은 전방 다단식 덧셈 모델링이라 불린다. 이를 M번 반복하는데, 이 때 M은 이 방법에서 우선적으로 최적화해야 하는 매개변수이다. 보통은 별도의 검증 집합에 대해 성능을 측정한 뒤 성능이 감소하기 시작하는 시점에 중단을 한다. 이를 이른 중단이라 한다. 또는 아카이케 정보량이나 베이지안 정보량 등의 모델 선택법을 쓸 수도 있다.

실제로는 테스트 집합에 대한 성능 개선은 계단 변수 0 < \nu \leq 1에 대해 다음의 부분적 업데이트 f_{m}(\mathbf{x}) = f_{m-1}(\mathbf{x}) + \nu \beta_{m} \phi(\mathbf{x} ; \mathbf{\gamma}_{m})로 이루어지기도 한다. 보통은 \nu = 0.1 등의 작은 값을 쓰는데, 이를 수축이라 한다.

아래에서는 위 문단의 반복적 업데이트에 대한 문제를 푸는 방법을 다룬다. 이는 손실 함수의 형태에 따라 다르나, 약한 학습기와는 독립적이다.

16.4.2. L2boosting

제곱 오차 손실 함수를 쓰면 m번째 단계에서 손실 함수는 현재 오차 r_{im} = y_{i} - f_{m-1}(\mathbf{x}_{i})에 대해 L(y_{i}, f_{m-1}(\mathbf{x}_{i}) + \beta \phi(\mathbf{x}_{i}; \mathbf{\gamma})) = (r_{im} - \phi(\mathbf{x}_{i}; \mathbf{\gamma}))^{2}의 꼴을 갖는다. 이 때 일반성을 잃지 않고 \beta = 1로 잡을 수 있다. 따라서 약한 학습기를 통해 새 기저 함수를 찾아 \mathbf{r}_{m}을 예측할 수 있다. 이를 L2 부스팅 또는 최소 제곱 부스팅이라 한다. 이는 변수 선택을 할 때 최소각 회귀 수축법과 같은 결과를 낸다.

16.4.3. AdaBoost

지수 손실 함수를 쓰는 이진 분류 문제를 생각해 보자. 이 경우 m번째 단계에서 목적 함수는 L_{m}(\phi) = \sum_{i=1}^{N} e^{-\tilde{y}_{i}(f_{m-1}(\mathbf{x}_{i}) + \beta \phi(\mathbf{x}_{i}))} = \sum_{i=1}^{N} w_{i, m} e^{-\beta \tilde{y}_{i} \phi(\mathbf{x}_{i})}이 된다. (w_{i, m} = e^{-\tilde{y}_{i}f_{m-1}(\mathbf{x}_{i})}는 i번째 데이터에 대한 가중치) 이는 다음과 같이 쓸 수 있다.

L_{m} = e^{-\beta} \sum_{\tilde{y}_{i} = \phi(\mathbf{x}_{i})} w_{i, m} + e^{\beta} \sum_{\tilde{y}_{i} \neq \phi(\mathbf{x}_{i})} w_{i, m} = (e^{\beta} - e^{-\beta}) \sum_{i=1}^{N} w_{i, m} \mathbf{1}_{\tilde{y}_{i} \neq \phi(\mathbf{x}_{i})} + e^{-\beta} \sum_{i=1}^{N} w_{i, m} 따라서 최적의 함수는 \phi_{m} = \mathrm{argmin}_{\phi} w_{i, m} \mathbf{1}_{\tilde{y}_{i} \neq \phi(\mathbf{x}_{i})}이며, 이는 데이터 집합에 가중치 w_{i, m}를 부여한 뒤 약한 학습기를 적용해서 얻을 수 있다. 이를 대입하면 \mathrm{err}_{m} = \frac{\sum_{i=1}^{N} w_{i} \mathbf{1}_{\tilde{y}_{i} \neq \phi_{m}(\mathbf{x}_{i})}}{\sum_{i=1}^{N} w_{i, m}} \beta_{m} = \frac{1}{2} \log \frac{1 - \mathrm{err}_{m}}{\mathrm{err}_{m}}을 얻으며, 전체 업데이트는 f_{m}(\mathbf{x}) = f_{m-1}(\mathbf{x}) + \beta_{m} \phi_{m}(\mathbf{x})이 된다.

이를 이용하면 다음 반복에서의 가중치는 w_{i, m+1} = w_{i, m} e^{2\beta_{m} \mathbf{1}_{\tilde{y}_{i} \neq \phi(\mathbf{x}_{i})}} e^{-\beta_{m}}이 됨을 알 수 있다. 일반성을 잃지 않고 e^{-\beta_{m}}은 없앨 수 있다. 이 과정을 에이다부스트.M1 알고리즘이라 한다. 이는 과적합되기까지의 과정이 매우 느리다.

16.4.4. LogitBoost

지수 손실 함수의 단점은 미분류된 표본에 대해 가중치를 크게 부여하기 때문에 이상치에 매우 취약하다는 것이다. 또한, 이진 변수에 대해 e^{-\tilde{y}f}를 로그로 갖는 확률질량함수는 존재하지 않으므로 확률분포 추정을 복원할 수도 없다.

대안으로서는 로그 손실 함수가 있는데, 이는 미분류된 표본에 대한 징벌을 선형으로 수행하기 때문에 위의 문제를 해결한다. 또한, p(y = 1 | \mathbf{x}) = \frac{e^{f(\mathbf{x})}}{e^{-f(\mathbf{x})} + e^{f(\mathbf{x})}}의 관계를 이용해 학습된 함수로부터 확률분포를 복원할 수도 있다. 이 때 목적 함수는 L_{m}(\phi) = \sum_{i=1}^{N} \log (1 + e^{-2 \tilde{y}_{i} (f_{m-1}(\mathbf{x}) + \phi(\mathbf{x}_{i}))})이 된다. 이는 뉴턴법 (반복 재가중 최소 제곱법과 비슷한)으로 업데이트한다. 이를 로짓부스트라 하며 다중 클래스로 확장할 수도 있다.

16.4.5. Boosting as functional gradient descent

서로 다른 손실 함수마다 각각 부스팅을 하기보다는 일반화된 부스팅을 하는 것도 가능하다. 이를 경사 부스팅이라 한다. 이를 알아보기 위해서, 데이터 집합에서의 함수값 \mathbf{f} = (f(\mathbf{x}_{1}), \cdots, f(\mathbf{x}_{N}))을 매개변수로 보았을 때 \hat{\mathbf{f}} = \mathrm{argmin}_{\mathbf{f}} L(\mathbf{f})을 최소화시키는 문제를 생각해보자. 이는 경사 하강법으로 풀 수 있다. m번째 단계에서의 L(\mathbf{f})의 경사를 \mathbf{f} = \mathbf{f}_{m-1}에서 구한 값을 \mathbf{g}_{m}이라 하자. 그러면 g_{im} = [\frac{\partial L(y_{i}, f(\mathbf{x}_{i}))}{\partial f(\mathbf{x}_{i})}]_{f = f_{m-1}} 이 되는데, 이를 이용해 \mathbf{f}_{m} = \mathbf{f}_{m-1} - \rho_{m} \mathbf{g}_{m}으로 업데이트한다. \rho_{m} = \mathrm{argmin}_{\rho} L(\mathbf{f}_{m-1} - \rho \mathbf{g}_{m})은 계단 크기이다. 이를 함수 경사 하강법이라 한다.

이 자체로는 고정된 데이터 집합에서의 함수만 최적화하므로 일반화하려는 본래 목적에 대해서는 크게 쓸모가 없다. 그래서 이를 수정해서 약한 학습기를 피팅해 음의 경사를 근사한다. 즉, \mathbf{\gamma}_{m} = \mathrm{argmin}_{\mathbf{\gamma}} \sum_{i=1}^{N} (-r_{im} - \phi(\mathbf{x}_{i} ; \mathbf{\gamma}))^{2}의 업데이트를 수행한다.

이 알고리즘에서 제곱 손실 함수를 사용하면 L2 부스팅이 된다. 로그 손실 함수를 사용하면 이진부스트가 된다. 이 알고리즘이 로짓부스트에 대해 갖는 장점은 가중치를 부여할 필요가 없이 임의의 블랙박스 회귀 모델에 대해 경사 벡터를 구하면 된다는 점이다. 또한, 다중 클래스로 확장할 수도 있다. 후버 손실같은 이상치에 강건한 손실 함수를 적용할 수도 있다.

16.4.6. Sparse boosting

다음의 알고리즘으로 약한 학습기를 사용한다고 가정하자. 가능한 변수 j = 1 : D에 대해 탐색을 하고 오차 벡터를 가장 잘 예측하는 j(m)을 선택하는 것이다.

j(m) = \mathrm{argmin}_{j} \sum_{j=1}^{N} (r_{im} = \hat{\beta}_{jm}x_{ij})^{2}

\hat{\beta}_{jm} = \frac{\sum_{i=1}^{N} x_{ij} r_{im}}{\sum_{i=1}^{N} x_{ij}^{2}}

\phi_{m}(\mathbf{x}) = \hat{\beta}_{j(m), m} x_{j(m)}

이를 희소 부스팅이라 하며, 이전에 언급된 매칭 추적 알고리즘과 동일하다.

M이 작기만 하다면 이는 희소한 추정값을 낸다. 위의 업데이트는 \mathbf{\beta}_{m} = \mathbf{\beta}_{m-1} + \nu(0, \cdots, 0, \hat{\beta}_{j(m), m}, 0, \cdots, 0)으로 다시 쓸 수 있기 때문이다. 이는 전방 다단식 선형 회귀로 알려져 있으며, \nu \to 0으로 가면 최소각 회귀 알고리즘과 동치가 된다. 부스팅에서 반복 시행수 m을 늘리는 것은 정규화 징벌치 \lambda를 감소시키는 것과 비슷하다. 부스팅을 수정해 변수 삭제를 허용한다면, 이는 최소각 회귀 수축 문제와 동치가 되어 라쏘 문제에 대한 전체 정규화 경로를 계산한다. 같은 알고리즘을 이용해 잔여 오차를 음의 그라디언트로 수정함으로써 희소 로지스틱 회귀에 대해서도 적용할 수 있다.

이제 약한 학습기를 쓸 때 잔여 오차를 계산하는 것을 선형 회귀 대신 다듬질 쐐기를 이용하는 상황을 생각해보자. 이 결과는 희소 일반화된 덧셈 모델이 된다. 이는 변수의 쌍을 선택하는 것으로 쉽게 확장할 수 있으며 다변수 적응적 회귀 쐐기보다 더 좋은 성능을 낸다.

16.4.7. Multivariate adaptive regression trees (MART)

일반적으로 약한 학습기로는 분류 회귀 트리를 많이 사용한다. 이 때 분산을 낮게 유지하기 위해 트리를 너무 깊게 하지 않는 것이 좋다. 분산이 낮아져 편향이 커지더라도, 이는 부스팅의 여러 단계를 거치면 완화된다. 이 때 트리의 높이, 부스팅하는 라운드 수, 그리고 수축 인자는 추가적으로 튜닝해야 하는 매개변수이다. 보통은 리프 노드가 6개 근처인 트리를 많이 쓴다.

경사 부스팅 알고리즘을 얕은 회귀 트리와 결합한다면 다변수 적응적 회귀 트리(MART) 모델이 된다. 이는 경사 부스팅 알고리즘에 대해서 회귀 트리를 피팅한 뒤에, 트리의 리프 노드에서 매개변수를 재추정해 손실 함수를 최소화하는 것이다. 즉, R_{jm}이 m번째 트리의 j번째 리프 영역, \gamma_{jm}이 그에 대응하는 매개변수일 때 (회귀일 때는 평균 반응도이고 분류일 때는 최적의 클래스 라벨이 될 것이다) \gamma_{jm} = \mathrm{argmin}_{\gamma} \sum_{x_{i} \in R_{jm}} L(y_{i}, f_{m-1}(\mathbf{x}_{i}) + \gamma)을 구하는 것이 된다.

16.4.8. Why does boosting work so well?

부스팅은 특히 분류에 대해 성능이 좋다. 이에는 크게 두 가지 이유가 있는데 첫째로는 이는 l_{1} 정규화의 형태로 볼 수 있어서 연관되어 있지 않은 특성을 제거함으로써 과적합을 막기 때문이다. 부스팅과 l_{1} 정규화를 결합한 것을 L1-에이다부스트라고 한다. 이는 부스팅 중 탐욕적 알고리즘으로 최적의 특성들을 (약한 학습기들을) 추가하고, 연관이 없는 것들을 l_{1} 정규화를 통해 가지치기한다. 두 번째 이유는 에이다부스트는 학습 데이터에 대한 마진을 최대화시키기 때문이다.

16.4.9. A Bayesian view

지금까지 살펴본 부스팅은 손실 함수를 탐욕적으로 최소화시키는 빈도학파적인 접근법을 사용하였다. 이 알고리즘의 베이지안적 표현은 각각 전문 모델이 약한 학습기인 전문 혼합 모델 p(y | \mathbf{x}, \mathbf{\theta}) = \sum_{m=1}^{M} \pi_{m} p(y | \mathbf{x}, \mathbf{\gamma}_{m})을 생각하는 것이다. 기대값 최대화 알고리즘을 통해 M개의 전문 모델을 한번에 피팅할 수도 있지만, 한 번에 하나의 전문 모델만 피팅하는 것을 생각해볼 수도 있다. E 단계에서, 사후 책임도는 존재하는 전문 모델이 주어진 데이터 표본을 얼마나 잘 설명하는지를 나타낸다. 설명도가 낮다면 다음 전문 모델을 피팅할 때 이 데이터 표본의 영향력을 증가시킨다.

이는 제대로 된 최대가능도추정이 아니다. 이전 전문 모델의 매개변수를 업데이트하지 않기 때문이다. 비슷하게, 부스팅이 약한 학습기에 배정된 가중치를 변경하고 싶다면 새 가중치가 부여된 약한 학습기를 추가하는 것밖에 없는데, 이는 모델 크기를 불필요하게 크게 만들 것이다. 반면에, 베이지안 적응적 회귀 트리 모델은 베이지안 버전의 후적합 알고리즘을 통해 약한 학습기의 (보통 트리인) 작은 합 모델을 피팅한다.

16.5. Feedforward neural networks (multilayer perceptrons)

피드포워드 신경망, 다층 퍼셉트론(MLP)은 층층이 쌓인 로지스틱 회귀 모델로서 마지막 층은 작업이 분류이냐 회귀냐에 따라 로지스틱 회귀나 선형 회귀를 수행한다. 예를 들어, 층이 2개이고 회귀 문제를 풀 때에는 p(y | \mathbf{x}, \mathbf{\theta}) = \mathcal{N}(y | \mathbf{w}^{T} \mathbf{z}(\mathbf{x}), \sigma^{2}), \mathbf{z}(\mathbf{x}) = g(\mathbf{V}\mathbf{x}) = [g(\mathbf{v}_{1}^{T} \mathbf{x}), \cdots, g(\mathbf{v}_{H}^{T} \mathbf{x})]의 꼴을 가진다. (\mathbf{v}_{j}\mathbf{V}의 j번째 행) 여기서 \mathbf{z}(\mathbf{x}) = \mathbf{\phi}(\mathbf{x}, \mathbf{V})는 크기 H의 은닉층으로 불리며 입력에 대한 결정론적 함수로 입력에 대해 선형 함수를 적용한 뒤 그 결과값을 비선형 활성화 함수, 또는 변환 함수 g로 보낸다. 보통 g는 로지스틱 함수나 쌍곡 탄젠트 함수를 사용한다. 최근에는 정류 선형 단위 함수(ReLU), \max(0, u)를 쓰기도 한다. g는 비선형이어야 하는데, 그렇지 않으면 전체 모델은 단일 선형 회귀 모델이 되기 때문이다.

이진 분류를 하기 위해서는 일반화된 선형 모델에서 그랬듯이 출력을 시그모이드 함수로 보낸다. p(y | \mathbf{x}, \mathbf{\theta}) = \mathrm{Ber}(y | \mathrm{sigm}(\mathbf{w}^{T} \mathbf{z}(\mathbf{x}))) 이는 간단히 복수의 출력을 갖도록 확장할 수 있다. 예를 들어 회귀 모델에서는 p(\mathbf{y} | \mathbf{x}, \mathbf{\theta}) = \mathcal{N}(\mathbf{y} | \mathbf{W} \mathbf{\phi} (\mathbf{x}, \mathbf{V}), \sigma^{2} \mathbf{I})이 된다. 출력 단위간 상호 억제를 더한다면, 즉 출력 중 하나만 작동되도록 제한한다면, 출력의 합이 1이 되도록 제한할 수 있으며 이를 다클래스 분류에 쓸 수 있다. 결과 모델은 \mathbf{W}_{k}가 클래스 k에 대한 가중치 벡터일 때 p(y | \mathbf{x}, \mathbf{\theta}) = \mathrm{Cat}(y | \mathcal{S} ( \mathbf{W} \mathbf{z}(\mathbf{x})))의 꼴이 될 것이다. 당연하지만 일반화된 선형 모델에서 했듯이 푸아송 회귀에 대해서도 신경망을 만들 수 있다.

다층 퍼셉트론은 보편적 근사기임을 보일 수 있는데, 즉 충분한 은닉층만 있으면 임의의 매끄러운 함수를 원하는 만큼 정확하게 모델링할 수 있다. 신경망을 넓게 잡을 수도 있고 깊게 잡을 수도 있는데, 후자는 몇 가지 이점이 있다.

16.5.1. Convolutional neural networks

은닉 단위의 목적은 입력의 비선형 결합을 학습하기 위한 것이다. 이것을 특성 추출 또는 특성 생성이라 부른다. 이 은닉 특성은 마지막 일반화된 선형 모델의 입력으로서 전달된다. 이 접근법은 원본 입력 특성들 각각이 크게 정보성이 없을 때 유용하다. 예를 들면, 입력 이미지의 각 픽셀 같은 경우. 반대로, 문서 분류할 때에는 각각의 단어가 정보성이 있으며 고차 특성을 추출하는 것은 상대적으로 덜 중요하다. 그러므로 신경망은 이미지에 많이 쓰인다.

담화/텍스트 등 1D 입력이나, 이미지 등 2D 입력에 특화된 다층 퍼셉트론을 컨볼루션 신경망이라 한다. 이 다층 퍼셉트론에서는 각각의 은닉층이 국소적 수용 영역을 갖고, 매개변수의 수를 줄이기 위해 가중치들이 이미지 내에서 공유된다. 직관적으로, 이러한 공간적 매개변수를 공유시키는 것의 효과는 이미지 내 특정 지역에서 발견된 쓸모 있는 특성을 독립적으로 학습시키지 않고 다른 지역에서 재활용될 수 있도록 하는 것이다. 그 결과로서 신경망은 변환에 불변이다. 즉, 패턴이 입력 이미지 내 어디에서 발생하는지에 상관없이 분류할 수 있다.

첫 번째 층에서는 특성 맵이 주어지며, 이 특성 맵 각각의 각 은닉 노드는 이미지와 가중치 행렬 (커널이라고도 불리는)에 대한 컨볼루션을 계산함으로써 계산되고, 편향치를 더한 뒤, 결과값을 어떠한 비선형 함수에 전달한다. 이는 계산된 뒤 다음 층의 입력으로 전달된다.

이 모델은 보통 추계적 경사 하강법을 이용해 학습된다. 데이터 집합을 한 번 훑는 것은 에포크라 불린다.

오차율을 더 줄이기 위한 보편적 트릭은 학습 집합에 원본 데이터의 왜곡된 버전을 추가하는 것이다. 온라인 학습에서는 이러한 왜곡된 버전을 따로 저장하지 않고 즉석에서 생성할 수 있다. 조금 더 복잡한 모델로는 LeNet5 등이 있는데, LeNet5는 각 컨볼루션 층간 부표본을 만든다. 즉, 이전 층에 작은 창을 적용해 해당 창 영역에 대한 최대값이나 평균값을 취해 크기를 줄이고 약간의 변환 불변성을 확보한다. 비슷한 아이디어는 네오코그니트론에서 처음 나타났다. 또 다른 차이점은 마지막 층이 일반적 시그모이드나 소프트맥스 층이 아니라 방사기저함수망이라는 것이다.

각각의 숫자 자릿수를 분류하는 것만으로는 크게 쓸모가 없으므로 컨볼루션 신경망을 연속적 무작위 영역 등의 모델과 결합시키곤 한다.

16.5.2. Other kinds of neural networks

다른 망 구조도 가능하다. 입력에서 은닉층을 건너뛰고 출력으로 연결되는 스킵 호를 추가할 수도 있으며, 층간 희소한 연결을 추가할 수도 있다. 하지만, 다층 퍼셉트론은 항상 가중치들이 방향 비순환 그래프임을 요구한다. 역방향 연결을 허용한다면, 이 모델은 재귀 신경망(RNN)으로 불린다. 이는 비선형 동역학계를 정의하지만, 간단한 확률적 표현을 갖지는 못한다. 이러한 재귀 신경망들은 언어 모델링에 유용하다. 한 가지 난점은, 경사 폭발 문제로 인해 학습하기가 힘들다는 점이다. 하나의 방법은 장단기 기억(LSTM)이라는, 가중치를 신중히 초기화한 RNN의 변형 모델을 이용하는 것이다.

은닉 단위간 대칭적 연결을 허용한다면, 이 모델은 호프영역 망 또는 결합적 기억으로 불린다. 이에 대한 확률적 대비는 볼츠만 기계라고 불리며 비지도 학습에 쓰인다.

16.5.3. A brief history of the field

신경망의 시초는 뉴런에 대한 근사를 수행하는 간단한 수학적 모델 y = \mathbf{1}_{\sum_{i} w_{i} x_{i} > \theta}로부터 시작되었다. (\theta는 어떠한 기준값) 비슷한 모델로는 적응적 선형 단위(아달린)이 있다. 1986년에는, 역전파 알고리즘이 개발되어 은닉층이 있는 모델을 피팅할 수 있게 되었다. 1987년에는, NETalk라는 모델이 나와 여러 음성에 대한 분산 표현을 성공적으로 학습하였고, 심리학에 있어 결합설계산주의설 등의 논의를 불러왔다. 2002년에는, 층 각각을 비지도 방식으로 학습할 수 있는 방법이 제시되었다.

여러 비선형 활성화 함수의 예.

16.5.4. The backpropagation algorithm

일반화된 선형 모델과 다르게, 다층 퍼셉트론의 음의 로그가능도는 매개변수에 대한 볼록함수가 아니다. 그럼에도 불구하고, 일반적인 경사 기반 최적화 방법으로 국소적으로 최적인 최대가능도추정이나 최대사후확률추정을 구할 수는 있다. 다층 퍼셉트론은 매개변수가 매우 많으므로 매우 큰 데이터 집합에 대해 학습되고는 한다. 그러므로 보통 추계적 경사 하강법같은 일차 온라인 방법을 쓰고는 한다. 반면에, 일반화된 선형 모델은 반복적 재가중 최소 제곱법 같은 이차 오프라인 방법을 쓴다. 아래에서는 음의 로그가능도의 경사 벡터를 미적분학의 연쇄법칙으로 계산하는 역전파 알고리즘을 다룬다.

표현의 단순화를 위해, 은닉 층은 하나만 있다고 가정한다. \mathbf{x}_{n}을 n번째 입력이라 하고, \mathbf{a}_{n} = \mathbf{V} \mathbf{x}_{n}을 은닉층에서 비선형 함수를 적용하기 전의 결과라고 하고, \mathbf{z}_{n} = g(\mathbf{a}_{n})변환 함수 g를 적용한 후의 결과라고 하자. 이제 \mathbf{b}_{n} = \mathbf{W} \mathbf{z}_{n}을 출력 층에서 비선형 함수를 적용하기 전의 결과라고 하고, \hat{\mathbf{y}}_{n} = h(\mathbf{b}_{n})을 출력 층에서 또 다른 비선형 연결 함수 (일반화된 선형 모델의 자연적 연결 함수와 대응되는) 를 적용한 최종 출력값이라 하자. 회귀 모델에 대해서는 h(\mathbf{b}) = \mathbf{b}, 이진 분류에 대해서는 h(\mathbf{b}) = [\mathrm{sigm}(b_{1}), \cdots, \mathrm{sigm}(b_{c})], 다중 분류에 대해서는 h(\mathbf{b}) = \mathcal{S}(\mathbf{b})이 된다. 즉 모델은 \mathbf{x}_{n} \xrightarrow{\mathbf{V}} \mathbf{a}_{n} \xrightarrow{g} \mathbf{z}_{n} \xrightarrow{\mathbf{W}} \mathbf{b}_{n} \xrightarrow{h} \hat{\mathbf{y}}_{n}의 꼴로 쓸 수 있다. 모델의 매개변수는 \mathbf{\theta} = (\mathbf{V}, \mathbf{W})로서, 첫 번째와 두 번째 가중치 행렬이다. 편향 값들은 일반성을 잃지 않고 일단은 무시하자.

회귀의 경우에는 K개의 출력을 가졌을 때 음의 로그가능도는 제곱 오차 J(\mathbf{\theta}) = - \sum_{n} \sum_{k} (\hat{y}_{nk}(\mathbf{\theta}) - y_{nk})^{2}이 된다. 분류의 경우에는 K개의 클래스가 있을 때 음의 로그가능도는 교차 엔트로피 J(\mathbf{\theta}) = -\sum_{n} \sum_{k} y_{nk} \log \hat{y}_{nk} (\mathbf{\theta})이 된다. 목표는 \nabla_{\mathbf{\theta}} J를 계산하는 것이다. 이는 각각의 n에 대해 계산한 뒤 합하는 방식으로 계산된다. 실제로는 보통 미니배치를 사용하지만.

b_{nk} = \mathbf{w}_{k}^{T} \mathbf{z}_{n}이므로, 출력층 가중치는 \nabla_{\mathbf{w}_{k}} J_{n} = \frac{\partial J_{n}}{\partial b_{nk}} \nabla_{\mathbf{w}_{k}} b_{nk} = \frac{\partial J_{n}}{\partial b_{nk}} \mathbf{z}_{n}로 계산될 수 있다. h가 출력 일반적 선형 모델의 자연적 연결 함수임을 가정하면, \frac{\partial J_{n}}{\partial b_{nk}} = \delta_{nk}^{w} = (\hat{y}_{nk} - y_{nk})로서 오차 시그널이 된다. 즉 전체 경사는 \nabla_{\mathbf{w}_{k}} J_{n} = \delta_{nk}^{w} \mathbf{z}_{n}으로, 출력층에 비선형 함수를 적용하기 전의 결과값과 오차 시그널을 곱한 것이 된다.

a_{nj} = \mathbf{v}_{j}^{T} \mathbf{x}_{n}이므로, 입력층 가중치는 \nabla_{\mathbf{v}_{j}} J_{n} = \frac{\partial J_{n}}{\partial a_{nj}} \nabla_{\mathbf{v}_{j}} a_{nj} = \delta_{nj}^{v} \mathbf{x}_{n}으로 계산될 수 있다. 남은 것은 첫 번째 층 오차 시그널 \delta_{nj}^{v}로 계산하는 것인데, 이는 \delta_{nj}^{v} = \frac{\partial J_{n}}{\partial a_{nj}} = \sum_{k=1}^{K} \frac{\partial J_{n}}{\partial b_{nk}} \frac{\partial b_{nk}}{\partial a_{nj}} = \sum_{k=1}^{K} \delta_{nk}^{w} \frac{\partial b_{nk}}{\partial a_{nj}}으로 구할 수 있다. 이제 b_{nk} = \sum_{j} w_{kj} g(a_{nj})이므로, \frac{\partial b_{nk}}{\partial a_{nj}} = w_{kj} g^{\prime}(a_{nj})이 된다. 그러므로 최종적으로 \delta_{nj}^{v} = \sum_{k=1}^{K} \delta_{nk}^{w} w_{kj} g^{\prime} (a_{nj})으로 계산할 수 있어서, 층 1의 오차는 층 2의 오차를 \mathbf{W} 행렬로 전달함으로써 구할 수 있다. 그래서 역전파라고 불리는 것이다. 이의 핵심은 경사 벡터를 국소적으로 계산할 수 있다는 것이다. 각 노드들이 필요한 정보는 직접적인 이웃들 뿐이다.

종합해 정리하면, 모든 경사는 다음과 같이 계산할 수 있다. 우선 전방으로 알고리즘을 수행해 \mathbf{a}_{n}, \mathbf{z}_{n}, \mathbf{b}_{n}, \hat{\mathbf{y}}_{n} 을 계산한 뒤, 출력층의 오차 \mathbf{\delta}_{n}^{(2)} = \hat{\mathbf{y}}_{n} - \mathbf{y}_{n}을 계산하고, 이를 \mathbf{W}에 전달해 첫째 층의 오차 \mathbf{\delta}_{n}^{(1)}을 계산한다. 이후 두 부분 벡터를 쌓아 전체 경사 벡터를 \nabla_{\mathbf{\theta}} J(\mathbf{\theta}) = [\sum_{n} \mathbf{\delta}_{n}^{v} \mathbf{x}_{n}; \sum_{n} \mathbf{\delta}_{n}^{w} \mathbf{z}_{n}]으로 계산한다.

16.5.5. Identifiability

신경망의 매개변수는 식별가능하지 않다. 활성 함수를 기함수로 쓸 경우 하나의 은닉 단위로 모아지는 가중치의 부호를 변경해도 은닉 단위의 결과값은 불변이고, 가능도에 영향을 끼치지 않고 은닉 단위들을 뒤섞을 수도 있기 때문이다. 은닉 단위가 H개 있을 때 서로 동치인 가능한 매개변수 조합은 H! 2^{H}개가 된다.

또한, 음의 로그가능도가 볼록이 아니기 때문에 국소적 해에 갇힐 수 있으며, 이 해는 좋지 않을 수 있기 때문에 추계적 최적화 방법으로 이들을 피한다. 여러 번 재시작을 거쳐서 최고의 해를 얻거나, 결과를 평균내기도 한다. (매개변수는 식별가능하지 않으므로, 매개변수끼리 평균내는 것은 의미가 없다.)

16.5.6. Regularization

최대가능도추정은 과적합될 수 있으며, 노드의 수가 많아질 때 특히 그렇다. 이를 피하는 간단한 방법은 이른 중단으로, 검증 집합에서의 오차가 처음 커지는 순간에 학습을 중단하는 것이다. 이 방법이 통하는 이유는 초기 가중치들이 작고 무작위가 되어 모델이 초기에는 간단한 모델이기 때문이다. (시그모이드나 쌍곡탄젠트 함수가 원점 근처에서 선형에 가깝기 때문에) 학습이 진행될수록 가중치가 커지고 모델은 비선형이 되고 최후에는 과적합될 것이다.

과적합을 막는 다른 방법은 매개변수에 사전분포를 도입해 최대사후확률추정을 구하는 것이다. 기본적으로는 l_{2} 정규화와 동치인 \mathcal{N}(0, \alpha^{-1} \mathbf{I}) 사전분포를 쓴다. (\alpha는 사전분포의 정밀도) 신경망의 언어로는 이를 가중치 쇠퇴라 하는데, 더 작은 가중치와 더 간단한 모델을 유도하기 때문이다. 징벌된 음의 로그가능도 목적 함수는 J(\mathbf{\theta}) = -\sum_{n=1}^{N} \log p(y_{n} | \mathbf{X}_{n}, \mathbf{\theta}) + \frac{\alpha}{2} [\sum_{ij} v_{ij}^{2} + \sum_{jk} w_{jk}^{2}]이 된다. (편향치는 징벌하지 않음을 눈여겨 보라.) 이렇게 수정된 목적 함수의 경사 벡터는 \nabla_{\mathbf{\theta}} J(\mathbf{\theta}) = [\sum_{n} \mathbf{\delta}_{n}^{v} \mathbf{x}_{n} + \alpha \mathbf{v}, \sum_{n} \mathbf{\delta}_{n}^{w} \mathbf{z}_{n} + \alpha \mathbf{w}]이 된다.

정규화의 세기가 충분히 강하다면, 은닉 단위가 얼마나 많건 상관이 없다 (낭비되는 계산량을 생각하지 않는다면). 따라서 은닉 단위를 감당할 수 있는 만큼 많이 잡고 (10-100 정도), 적절한 정규화자를 택하면 된다. \alpha 변수는 교차검증이나 실측 베이스로 세팅한다.

능선 회귀 때와 같이, 입력을 0 평균과 1 분산으로 표준화하는 것이 좋다. 구형 가우시안 사전분포가 더 잘 적용될 수 있기 때문이다.

16.5.6.1. Consistent Gaussian priors

첫 번째 층과 두 번째 층에 같은 정규화 계수를 쓰면 바람직한 불변 특성을 잃게 된다. 신경망 회귀 모델의 입력이나 출력을 선형으로 늘리거나 평행이동한다고 하자. 이 경우에도 같은 함수를 학습하는 것이 바람직할 것이다. 그러나, 이 때 첫 번째 층과 두 번째 층의 가중치를 각각 조정하는 데 필요한 비율은 같지 않다. 그러므로 층마다 각각 다른 정규화 계수를 써야 한다. 이를 위해서는 그냥 다음의 사전분포를 쓰면 된다: 편향이 \mathbf{b}, \mathbf{c}일 때 p(\mathbf{\theta}) = \mathcal{N}(\mathbf{W} | \mathbf{0}, \frac{1}{\alpha_{w}} \mathbf{I}) \mathcal{N}(\mathbf{V} | \mathbf{0}, \frac{1}{\alpha_{v}} \mathbf{I}) \mathcal{N}(\mathbf{b} | \mathbf{0}, \frac{1}{a_{b}} \mathbf{I}) \mathcal{N} (\mathbf{c} | \mathbf{0}, \frac{1}{\alpha_{c}} \mathbf{I})

이 초매개변수의 효과를 보기 위해서는 이 사전분포에서 다층 퍼셉트론 매개변수를 추출한 뒤 유도되는 무작위 함수들을 찍어볼 수 있다. \alpha_{v}를 줄이면 첫 번째 층의 가중치가 커져 시그모이드 모양이 깊어지고, \alpha_{b}를 줄이면 첫 번째 층의 편향치가 커져 시그모이드의 중심이 왼쪽이나 오른쪽으로 더 많이 이동하게 된다. \alpha_{w}를 줄이면 두 번째 층의 가중치가 커져서 함수가 더 울퉁불퉁해지고, \alpha_{c}를 줄이면 두 번째 층의 편향치가 커져서 함수의 평균 높이가 위 아래로 움직이는 정도가 커진다.

가중치/편향 각각에 대한 사전분포의 세기를 달리 했을 때의 다층 퍼셉트론 플롯.

16.5.6.2. Weight pruning

신경망에는 가중치가 많기 때문에 희소성을 유도하는 것이 때때로 도움이 된다. 여러 방법이 있지만 l_{1} 정규화자를 쓸 수 있고, 자동 연관성 판정을 쓸 수도 있다.

가중치를 가지치기한 심층 신경망의 피팅.

16.5.6.3. Soft weight sharing

매개변수를 정규화하는 또 다른 방법은 비슷한 가중치들에 대해서 통계적 세기를 공유하도록 하는 것이다. 그러나 어떤 매개변수를 그룹화할 지는 어떻게 판단해야 할까? 혼합 모델을 사용함을 통해 이를 학습할 수 있다. 즉, p(\mathbf{\theta})를 대각 가우시안의 혼합으로 모델링하는 것이다. 같은 클러스터로 배정되는 매개변수는 같은 평균과 분산을 가질 것이고 비슷한 값을 가질 것이다 (클러스터의 분산이 낮다고 할 때). 이를 약한 가중치 공유라 한다. 실제로는 많이 쓰이진 않는다.

16.5.6.4. Semi-supervised embedding

깊은 피드포워드 신경망을 정규화하는 흥미로운 방식은 은닉층에 대해 비슷한 오브젝트에 대해서는 비슷한 표현식을 갖도록 유도하는 것이다. 이것이 유용한 이유는 서로 비슷하거나 상이한 오브젝트의 쌍으로부터 부차적인 정보를 얻기 용이하기 때문이다. 예를 들어 비디오 분류 문제에서 인접한 프레임은 비슷한 오브젝트로 볼 수 있고 멀리 떨어진 프레임은 상이한 오브젝트로 볼 수 있다. 이 작업은 라벨링 없이도 할 수 있다는 점을 눈여겨보자.

표본 i, j가 비슷할 때 S_{ij} = 1, 상이할 때 0으로 두자. f(\mathbf{x}_{i}) = \mathbf{z}(\mathbf{x}_{i}, \mathbf{\theta})을 표본 \mathbf{x}_{i}의 은닉층 \mathbf{z}에 의한 껴묻기라 하자. 이제 손실 함수 L(f(\mathbf{x}_{i}), f(\mathbf{x}_{j}), S_{ij})를 두 오브젝트의 껴묻기와 유사성에 의해 결정되도록 정의하자. 예를 들면 S_{ij} = 1일 때 L(\mathbf{f}_{i}, \mathbf{f}_{j}, S_{ij}) = \lVert \mathbf{f}_{i} - \mathbf{f}_{j} \rVert^{2} , S_{ij} = 0일 때 적당한 마진 m에 대해 L(\mathbf{f}_{i}, \mathbf{f}_{j}, S_{ij}) = \max(0, m - \lVert \mathbf{f}_{i} - \mathbf{f}_{j} \rVert^{2})로 정할 수 있다. 이제 라벨링된 학습 집합을 \mathcal{L}, 라벨링되지 않은 학습 집합을 \mathcal{U}, 트레이드오프 인자를 \lambda \geq 0이라 할 때 신경망 학습에 쓰일 증강된 손실 함수를 \sum_{i \in \mathcal{L}} \mathrm{NLL}(f(\mathbf{x}_{i}), y_{i}) + \lambda \sum_{i, j \in \mathcal{U}} L(f(\mathbf{x}_{i}), f(\mathbf{x}_{j}), S_{ij})로 정의할 수 있다. 이를 반지도 껴묻기라 한다.

이런 목적 함수는 추계적 경사 하강법으로 쉽게 최적화할 수 있다. 각 반복에 대해, 라벨된 표본 (\mathbf{x}_{n}, y_{n})을 무작위로 선택한 뒤, 경사 단계를 통해 \mathrm{NLL}(\mathbf{x}_{n}, y_{n})을 최적화한다. 그 뒤엔 비슷한 라벨되지 않은 표본 \mathbf{x}_{i}, \mathbf{x}_{j}를 고른 뒤 (이는 미리 저장해두지 않고 즉석에서 생성할 수도 있다), 경사 단계를 통해 \lambda L(f(\mathbf{x}_{i}), f(\mathbf{x}_{j}), 1)을 최적화한다. 마지막으로, 라벨되지 않은 다른 표본 \mathbf{x}_{k}\mathbf{x}_{i}와 상이할 확률이 높도록 고른 뒤, 경사 단계를 통해 \lambda L(f(\mathbf{x}_{i}), f(\mathbf{x}_{j}), 0)을 최적화한다.

이는 데이터의 양이 많은 점을 이용할 수 있기 때문에 유용하다.

16.5.7. Bayesian inference

최대사후확률추정은 과적합을 방지하는 성공적인 방법이지만, 신경망을 피팅할 때 완전한 베이지안 방법을 적용하면 좋은 이유는 더 있다.

  • 매개변수를 최적화하는 대신 적분해서 빼내는 것은 최대사후확률추정보다 훨씬 강한 형태의 정규화이다.
  • 초매개변수 세팅이나 은닉 단위의 수를 결정할 때 베이지안 모델 선택법을 쓸 수 있다. 이는 교차검증보다 훨씬 빠른데, 초매개변수가 많을 때 특히 그렇다. (자동 연관성 판별 등)
  • 매개변수의 불확실성을 모델링하는 것은 예측분포에 불확실성을 유도할 것이고, 이는 능동적 학습이나 위험 회피형 결정 등의 문제에 있어 중요하다.
  • 온라인 학습을 할 때에는 확장된 칼만 필터 같은 온라인 추론법을 쓸 수 있다.

이 관점에서 여러 근사 베이지안 추론법을 사용할 수 있다. 여기서는 라플라스 근사를 다루겠지만 혼성 몬테 카를로나 변량 베이스 등도 쓸 수 있다.

16.5.7.1. Parameter posterior for regression

일단 회귀 문제를 고려해 보자. 사전분포로는 가중치를 \mathbf{w}이라 할 때 p(\mathbf{w}) = \mathcal{N}(\mathbf{w} | \mathbf{0}, \frac{1}{\alpha} \mathbf{I})을 쓸 수 있다. 노이즈의 정밀도를 \beta = \frac{1}{\sigma^{2}}로 나타내자.

이 때 사후분포는 다음과 같이 근사될 수 있다.

p(\mathbf{w} | \mathcal{D}, \alpha, \beta) \propto e^{-E(\mathbf{w})}

전체 오차 E(\mathbf{w}) = \beta E_{D}(\mathbf{w}) + \alpha E_{W} (\mathbf{w})

데이터 오차 E_{D}(\mathbf{w}) = \frac{1}{2} \sum_{n=1}^{N} (y_{n} - f(\mathbf{x}_{n}, \mathbf{w}))^{2}

사전분포 오차 E_{W}(\mathbf{w}) = \frac{1}{2} \mathbf{w}^{T} \mathbf{w}

이제 전체 오차에 대한 2차 테일러 급수 근사를 최소값 (최대사후확률추정)에 대해 전개하면 \mathbf{A} = \nabla^{2} E(\mathbf{w}_{\mathrm{MAP}}) = \beta \mathbf{H} + \alpha \mathbf{I}를 전체 오차의 헤시안, \mathbf{H}를 데이터 오차의 헤시안이라 할 때 E(\mathbf{w}) \simeq E(\mathbf{w}_{\mathrm{MAP}}) + \frac{1}{2} (\mathbf{w} - \mathbf{w}_{\mathrm{MAP}})^{T} \mathbf{A} (\mathbf{w} - \mathbf{w}_{\mathrm{MAP}}) 로 전개된다. 이는 매개변수가 d개일 때 역전파의 변형을 이용해 O(d^{2}) 시간에 계산될 수 있다. 또는 유사 뉴턴법을 통해 최빈값을 계산한다면 내부에서 계산된 \mathbf{H}의 저랭크 근사를 이용할 수 있다. (\mathbf{H}의 대각 근사는 대개 매우 부정확하다) 두 경우 모두, 이 2차 근사를 사용하면, 사후분포는 가우시안 p(\mathbf{w} | \alpha, \beta, \mathcal{D}) \simeq \mathcal{N}(\mathbf{w} | \mathbf{w}_{\mathrm{MAP}}, \mathbf{A}^{-1})이 된다.

16.5.7.2. Parameter posterior for classification

분류의 경우도 회귀 문제와 같은데, 차이점은 \beta = 1이고 E_{D}(\mathbf{w}) = \sum_{n=1}^{N} [y_{n} \ln f(\mathbf{x}_{n}, \mathbf{w}) + (1 - y_{n}) \ln f(\mathbf{x}_{n}, \mathbf{w})] 꼴의 교차 엔트로피라는 것이다.

16.5.7.3. Predictive posterior for regression

사후예측밀도함수는 p(y | \mathbf{x}, \mathcal{D}, \alpha, \beta) = \int \mathcal{N}(y | f(\mathbf{x}, \mathbf{w}), \frac{1}{\beta}) \mathcal{N}(\mathbf{w} | \mathbf{w}_{\mathrm{MAP}}, \mathbf{A}^{-1}) d \mathbf{w}이 된다. f(\mathbf{x}, \mathbf{w})가 비선형이므로 위의 적분은 해석적으로 계산 가능하지 않다. 따라서 그라디언트 \mathbf{g} = \nabla_{\mathbf{w}} f(\mathbf{x}, \mathbf{w}) |_{\mathbf{w} = \mathbf{w}_{\mathrm{MAP}}}에 대해 1차 테일러 급수 근사 f(\mathbf{x}, \mathbf{w}) \simeq f(\mathbf{x}, \mathbf{w}_{\mathrm{MAP}}) + \mathbf{g}^{T} (\mathbf{w} - \mathbf{w}_{\mathrm{MAP}})을 수행할 수 있다. 이 근사는 가우시안 사전분포가 가중치에 주어진 선형 가우시안 모델이므로 사후예측분산 \sigma^{2}(\mathbf{x}) = \frac{1}{\beta} + \mathbf{g}^{T} \mathbf{A}^{-1} \mathbf{g}에 대해 p(y | \mathbf{x}, \mathcal{D}, \alpha, \beta) \simeq \mathcal{N}(y | f(\mathbf{x}, \mathbf{w}_{\mathrm{MAP}}), \sigma^{2} (\mathbf{x}))가 된다.

사후예측분포에서 학습 데이터가 적은 영역일 수록 오차의 범위는 커진다.

회귀 신경망의 사후예측분포.

16.5.7.4. Predictive posterior for classification

이진 분류의 경우에는 로지스틱 회귀와 비슷하지만 사후예측평균 \mu = \mathbb{E}[y | \mathbf{x}, \mathbf{w}] = \mathrm{sigm}(a(\mathbf{x}, \mathbf{w}))\mathbf{w}에 대해 비선형 함수가 된다 (a(\mathbf{x}, \mathbf{w})은 마지막 층에서 비선형 함수를 적용하기 전의 결과값).

여기에 선형 근사를 적용하면 a(\mathbf{x}, \mathbf{w}) \simeq a_{\mathrm{MAP}} (\mathbf{x}) + \mathbf{g}^{T}(\mathbf{w} - \mathbf{w}_{\mathrm{MAP}})가 되는데, a_{\mathrm{MAP}} (\mathbf{x}) = a(\mathbf{x}, \mathbf{w}_{\mathrm{MAP}})\mathbf{g} = \nabla_{\mathbf{x}} a(\mathbf{x}, \mathbf{w}_{\mathrm{MAP}})은 역전파를 수정한 알고리즘으로 계산할 수 있다. 이를 이용하면 p(a | \mathbf{x}, \mathcal{D}) \simeq \mathcal{N}(a(\mathbf{x}, \mathbf{w}_{\mathrm{MAP}}), \mathbf{g}(\mathbf{x})^{T} \mathbf{A}^{-1} \mathbf{g} (\mathbf{x}))이 된다.

따라서 출력에 대한 사후예측분포는 \kappa(\sigma^{2}) = \frac{1}{\sqrt{1 + \frac{\pi \sigma^{2}}{8}}}일 때 p(y = 1 | \mathbf{x}, \mathcal{D}) = \int \mathrm{sigm}(a) p(a | \mathbf{x}, \mathcal{D}) da \simeq \mathrm{sigm} (\kappa(\sigma_{a}^{2}) \mathbf{b}^{T} \mathbf{w}_{\mathrm{MAP}})이 된다.

이의 더 간단한 대안은 가우시안 사후분포에서 표본을 몇 개 추출한 뒤에 몬테 카를로를 이용해 사후예측분포를 근사하는 것이다. 어떤 경우든, 매개변수에 대해 불확실성을 유도하는 것은 출력의 확실성을 낮추는 효과가 있다. 하지만 이 경우에 결정 경계가 영향받는 것은 아니다.

16.5.7.5. ARD for neural networks

사후분포에 대해 라플라스 근사를 수행하면, 주변가능도를 초매개변수 \mathbf{\alpha}에 대해 최적화할 수 있다.

전형적으로는 각 노드의 가중치에 대해 하나의 초매개변수를 써서 그룹 라쏘와 비슷한 효과를 낸다. 즉, 사전분포는 p(\mathbf{\theta}) = \prod_{i=1}^{D} \mathcal{N}(\mathbf{v}_{:, i} | \mathbf{0}, \frac{1}{\alpha_{v, i}} \mathbf{I}) \prod_{j=1}^{H} \mathcal{N}(\mathbf{w}_{:, j} | \mathbf{0}, \frac{1}{w_{:, j}} \mathbf{I})의 형태가 된다. a_{v, i} = \infty면 입력 특성 i는 연관이 없는 것이므로 가중치 벡터 \mathbf{v}_{:, i}은 쳐내진다. 비슷하게, a_{w, j} = \infty면 은닉 특성 j가 연관이 없는 것으로 여겨진다. 이는 자동 연관 판별(ARD)로 알려져 있다. 이를 신경망에 적용하면 비선형 모델에 대해 효과적으로 변수 선택을 할 수 있다.

16.6. Ensemble learning

총체 학습f(y | \mathbf{x}, \mathbf{\pi}) = \sum_{m \in \mathcal{M}} w_{m} f_{m}(y | \mathbf{x})의 기반 모델의 가중치합 형태인 모델을 학습하는 것이다. 이 때 가중치 w_{m}은 튜닝될 수 있는 변수들이다. 총체 학습은 위원회 법이라고도 불리는데, 각각의 기반 모델 f_{m}은 가중치가 부여된 기여를 하기 때문이다.

당연하지만 총체 학습은 적응적 기저 함수 모델을 학습하는 것과 밀접한 연관이 있다. 사실, f_{m}을 은닉 단위, w_{m}을 출력 가중치로 보면 신경망을 총체 학습으로 볼 수도 있다. 또한, 부스팅을 기반 모델의 가중치가 연속적으로 결정되는 총체 학습의 일종으로 볼 수도 있다.

16.6.1. Stacking

가중치를 추정하는 간단한 방법은 \hat{\mathbf{w}} = \mathrm{argmin}_{\mathbf{w}} \sum_{i=1}^{N} L(y_{i}, \sum_{m=1}^{M} w_{m} f_{m} (\mathbf{x})) 을 사용하는 것이다. 하지만 이것은 복잡한 모델에서는 w_{m}을 크게 만들어 과적합을 낳을 수 있다. 간단한 해결책은 교차검증을 사용하는 것이다. 즉, \hat{f}_{m}^{-1}(\mathbf{x})이 단일 데이터 (\mathbf{x}_{i}, y_{i})을 학습 데이터에서 제거한 뒤에 얻어진 모델일 때 단일 제거 교차 검증 추정 \hat{\mathbf{w}} = \mathrm{argmin}_{\mathbf{w}} \sum_{i=1}^{N} L(y_{i}, \sum_{m=1}^{M} w_{m} \hat{f}_{m}^{-1} (\mathbf{x}))을 사용하는 것이다. 이를 쌓기, 즉 쌓인 일반화라 한다. 이는 모델의 참값이 모델 클래스에 존재하지 않는 경우에 대해 더 강건하다.

16.6.2. Error-correcting output codes

총체 학습의 흥미로운 형태는 오차 교정 출력 코드(ECOC)로서 다중 분류에 쓰일 수 있다. 발상은 C개의 클래스 라벨을 가질 수 있는 결과값을 B = \lceil \log_{2} C \rceil 길이의 비트 벡터로 인코딩하고 B개의 이진 분류기를 각각 학습해 각 비트를 예측하는 것이다. 비트 수를 늘리고 상호간 해밍 거리를 최대로 만드는 코드워드를 설계하면 개개의 비트 뒤집힘 에러 (오분류)에 더 잘 대처할 수 있다. C_{cb}를 코드워드 내에서 클래스 c의 b번째 비트, \hat{p}_{b}(\mathbf{x})을 출력 비트 b가 입력 특성 \mathbf{x}에 대해 켜질 확률이라 할 때 복호화 규칙은 \hat{c}(\mathbf{x}) = \min_{c} \sum_{b=1}^{B} \lvert C_{cb} - \hat{p}_{b}(\mathbf{x}) \rvert이 된다. 최적의 코드워드를 쓰나 무작위 코드를 쓰나 성능은 비슷하다. 둘 다 복수의 분류기의 결과를 평균내는 식으로 작동하기 때문에 분산을 줄이기 때문이다.

16.6.3. Ensemble learning is not equivalent to Bayes model averaging

최선의 모델을 선택해 그 모델로 예측을 하는 대신 각각 모델에서의 예측의 가중평균 p(y | \mathbf{x}, \mathcal{D}) = \sum_{m \in \mathcal{M}} p(y | \mathbf{x}, m, \mathcal{D}) p(m | \mathcal{D})를 계산할 수 있다. 이를 베이즈 모델 평균(BMA)라 하며 그냥 단일 모델을 쓰는 것보다 가끔은 더 좋은 성능을 낸다. 물론, 모든 모델에 대해 평균을 내는 것은 계산적으로 불가능하므로, 간단한 근사로서 사후분포에서 몇 개의 모델을 샘플링한다. 더 간단한 근사는 그냥 최대사후확률추정 모델을 사용하는 것이다.

중요한 것은 베이즈 모델 평균법은 총체 학습과는 다르다는 것이다. 후자의 목적은 기반 모델의 볼록결합으로 정의되는 단일 새 모델 p(y | \mathbf{x}, \mathbf{\pi}) = \sum_{m \in \mathcal{M}} \pi_{m} p(y | \mathbf{x}, m)을 통해 모델 공간을 확장하는 것이다. 이론적으로는 베이지안 추론을 통해 p(\mathbf{\pi} | \mathcal{D})을 추론한 뒤 p(y | \mathbf{x}, \mathcal{D}) = \int p(y | \mathbf{x}, \mathbf{\pi}) p(\mathbf{\pi} | \mathcal{D}) d \mathbf{\pi}을 사용해 예측을 할 수 있다. 하지만 위에서 다뤘듯 \mathbf{\pi}에 대한 점 근사를 사용하는 것이 더 자주 쓰인다.

16.7. Experimental comparison

그래서 어떤 방법을 써야 하나? 보통은 여러 방법을 시도해 보고 성능이 잘 나오는 것을 쓴다. 보편적으로 최고인 학습법은 없다.

16.7.1. Low-dimensional features

저차원 특성에 대해서는 많은 때에 부스팅된 결정 트리가 뛰어났고, 무작위 숲, 배깅된 결정 트리, 보조 벡터 머신, 신경망 등이 뒤를 이었다. K-최근접 이웃, 부스팅된 스텀프, 단일 결정 트리, 로지스틱 회귀나 나이브 베이스는 상대적으로 성능이 그리 좋지 않았다. 고차원 특성이나 노이즈가 많으면 이야기는 달라진다.

16.7.2. High-dimensional features

프로브가 더해진 고차원 특성에 대해서는 베이지안 신경망이 뛰어났다. 이는 배깅과 부스팅 기반 방법과 유사한데, 이 모두 예측이 \hat{f}(\mathbf{x}_{\ast}) = \sum_{m=1}^{M} w_{m} \mathbb{E}[y | \mathbf{x}_{\ast}, \mathbf{\theta}_{m}] 의 형태를 가진다. 베이지안 다층 퍼셉트론은 혼성 몬테 카를로법에 의해 피팅되었기 때문에, w_{m} = \frac{1}{M}로 둔 뒤 \mathbf{\theta}_{m}은 사후분포로부터 추출되었다. 배깅에서는 w_{m} = \frac{1}{M}\mathbf{\theta}_{m}은 모델을 데이터로부터의 붓스트랩 표본으로부터 피팅하여 추정되었다. 부스팅에서는 w_{m} = 1이었고 \mathbf{\theta}_{m}은 순차적으로 추정되었다.

세팅을 조금 다르게 해도 베이지안 신경망이 가장 뛰어났으며, 두번째는 전처리에 따라 무작위 숲이나 부스팅된 다층 퍼셉트론이었다. 단 학습 데이터의 크기가 작았다는 것은 감안해야 할 필요가 있다. 학습 시간에 대해서는 혼성 몬테 카를로법이 상대적으로 훨씬 느렸다. 라플라스 근사와 같은 결정론적 베이지안 추론은 훨씬 더 빠를 것이지만, 성능이 얼마나 떨어질지도 봐야 할 것이다.

16.8. Interpreting black-box models

선형 모델은 쓰기 쉽기 때문에 자주 쓰인다. 하지만 대개 표현력은 떨어진다. 특정 변수가 얼마나 중요한지를 알아보기 위해서는 예측 정확도에만 기반해야 한다. 그래서 그 대신에 이 장에서는 예측 성능이 더 좋은 블랙박스 모델을 알아보았지만, 이들은 직접적으로 쓰기 어렵다. 다행히도, 어떤 입력 변수가 가장 중요한지를 알아보는 데 돕는 여러 휴리스틱이 있다.

하나의 방법은 변수들에 대해 f(\mathbf{x}_{s}) = \frac{1}{N} \sum_{i=1}^{N} f(\mathbf{x}_{s}, \mathbf{x}_{i, -s})\mathbf{x}_{s}간의 부분적 의존 플롯을 짜는 것이다.

다른 유용한 방법은 예측 변수간의 상대적 중요성을 계산하는 것이다. 이는 트리들의 총체 모델에 국한되기는 하지만, 변수 선택을 하는 비선형 방법으로 볼 수 있다. 기본 발상은 변수 j가 어떤 트리의 노드에 쓰이는지를 세는 것이다. 즉, 트리 T_{m}에 대해 v_{j} = \frac{1}{M} \sum_{m=1}^{M} \mathbf{1}_{j \in T_{m}}x_{j}를 쓰는 모든 분할의 비율이라고 할 때 트리의 사후분포 p(T_{1:M} | \mathcal{D})를 계산할 수 있다면 v_{j}의 사후분포를 계산할 수 있다. 또는 붓스트랩법을 쓸 수도 있다.

요점 정리

  • 적응적 기저 함수 모델 : 데이터로부터 학습된 기저 함수들의 선형 결합의 형태의 모델.
  • 결정 회귀 트리(CART) : 입력 공간을 재귀적으로 분할한 뒤 각 영역에 대해 국소적 모델을 정의해 트리 형태로 만든 것.
  • 일반화된 덧셈 모델 : 매끄러운 산포 함수의 결합 형태로 복수 입력에 대한 비선형 모델을 만드는 것.
  • 부스팅 : 적응적 기저 함수 모델의 각각 기저 함수를 약한 학습기로부터 생성한 뒤 이를 순차적으로 피팅하는 탐욕적 알고리즘.
  • 피드포워드 신경망(다층 퍼셉트론, MLP) : 선형 함수와 비선형 활성화 함수가 층층이 쌓인 비선형 모델. 역전파로 학습하며, 베이지안 학습도 가능함.
  • 총체 학습 : 기본 모델의 가중치합을 학습하는 것으로, 이 때 가중치는 튜닝 가능함.
  • 실험적 결과로는, 저차원 특성에 대해서는 부스팅된 결정 트리가 좋았고, 고차원 특성에 대해서는 베이지안 신경망이 좋았음.
  • 블랙 박스 모델에서 변수의 중요성을 감지하기 위한 여러 휴리스틱이 존재함.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중