인공 신경망으로 복잡한 함수 모델링
- 2장에서 다루었던 인공 뉴런은 다층 인공 신경망의 구성 요소이다. 인공 신경망 이면에 있는 기본 개념은 사람의 뇌가 어떻게 복잡한 문제를 푸는지에 대한 가설과 모델을 기반으로 한다.
- 인공 신경망이 최근 몇 년간 인기를 끌고 있지만 신경망에 대한 초기 연구는 1940년대 워렌 맥컬록(Warren McCulloch)과 월터 피츠(Walter Pitts)가 처음 뉴런 작동 방식을 기술했던 때로 올라간다.
- 맥컬록-피츠 뉴런 모델인 로젠블라트의 퍼셉트론이 1950년대 처음 구현된 이후 수시년 동안 많은 연구자와 머신러닝 기술자는 신경망에 대한 관심을 잃었는데, 다층 신경망을 훈련하기 위한 좋은 방법이 없었기 때문이다.
- 마침내 루멜하트(D. E. Rumelhart), 힌튼(G. E. Hinton), 윌리엄스(R. J. Wiliams)가 1986년 신경망을 효과적으로 훈련시키는 역전파 알고리즘을 재발견하면서 신경망에 대한 관심이 다시 살아났다.
- 신경망이 요즘처럼 인기를 끌었던 때는 없었는데, 딥러닝 알고리즘과 여러 개의 층으로 이루어진 신경망 구조는 지난 10여년 간 일어난 많은 혁신의 결과물이다.
단일층 신경망 요약
- 다층 신경망 구조를 본격적으로 배우기 전에 단일층 신경망 네트워크 개념을 되새겨보자.
- 이는 2장에서 소개한 아달린(ADAptive LInear NEuron, Adaline) 알고리즘으로 아래 그림과 같다.
https://drive.google.com/uc?id=1bgh45ZW4IPj2nA6JXen2YIZ2zVQq3xNj
- 2장에서 이진 분류를 수행하는 아달린 알고리즘을 구현했는데, 경사 하강법 최적화 알고리즘을 사용하여 모델 가중치를 학습했다.
- 훈련 세트를 한 번 순회하는 에포크마다 가중치 벡터 $w$를 업데이트하기 위해 다음 공식을 사용한다.
$w := w + \Delta w$
$\Delta w = - \eta \nabla J(w)$
- 다른 말로 하면 전체 훈련 세트에 대한 그래디언트를 계산하고 그래디언트 $\nabla J(w)$ 의 반대 방향으로 진행하도록 모델 가중치를 업데이트 했다.
- 최적의 모델 가중치를 찾기 위해 제곱 오차합(Sum of Squared Errors, SSE) 비용 함수 $J(w)$로 정의된 목적 함수를 최적화 한다.
- 또 학습률 $\eta$를 그래디언트에 곱한다.
- 학습률은 비용 함수의 전역 최솟값을 지나치지 않도록 학습 속도를 조절하기 위해 신중하게 선택해야 한다.
- 경사 하강법 최적화에서는 에포크마다 모든 가중치를 동시에 업데이트 한다. 가중치 벡터 $w$에 있는 각각의 가중치 $w_{j}$에 대한 편도 함수는 다음과 같이 정의한다.
${\partial \over \partial w_{j}} J(w) = - \sum_{i} (y^{(i)} - a^{(i)}) x_{j}^{(i)}$
- 여기서 $y^{(i)}$는 특정 샘플 $x^{(i)}$의 타깃 클래스 레이블이다.
- $a^{(i)}$는 뉴런의 활성화 출력이다.
- 아달린은 선형 함수를 사용하므로 활성화 함수 $\phi(\cdot)$ 는 다음과 같이 정의한다.
$\phi (z) = z = a$
- 여기서 최종 입력 $z$는 입력층과 출력층을 연결하는 가중치의 선형 결합이다.
$z = \sum_{j} w_{j} x_{j} = w^{T} x$
- 업데이트할 그래디언트를 계산하기 위해 활성화 함수를 사용했지만, 예측을 위해 임계 함수를 구현하여 연속적인 출력 값을 이진 클래스 레이블로 압축했다.