Sungjoo Ha

Artificial Neural Network

Logistic regression은 일종의 선형 모델인데, 모델의 가중치와 입력 피쳐의 선형 결합 후 적당한 함수를 거친 뒤 결과를 내기 때문이다. 이는 주어진 공간을 평면으로 자르는 식으로 동작한다고 생각할 수도 있다. 하지만 만약 데이터가 선형 분리 가능linearly separable하지 않다면 어떻게 해야할까?

FIXME xor? circle?

가장 대표적인 문제로 XOR이 있다. 2차원의 데이터가 다음과 같이 주어졌을 때 이를 분류하는 선형 분류기를 만들 수 있는가?

위의 데이터를 하나의 평면으로 분리하는 건 불가능하다. 하지만 적절하게 데이터의 피쳐를 확장하여 다음과 같이 변환한다면 가능하다.

이 접근 방법의 문제는 임의의 데이터가 주어진다면 우리가 직접 위와 같은 변환을 고안해내야 한다는 점이며 이는 항상 쉽지만은 않다는 데에 있다. 가능하면 이런 피쳐 변환을 자동으로 할 수 있었으면 한다.

Feedforward network는 이에 대한 한 가지 대안이다. 이는 입력과 가중치의 선형 결합 후 비선형 변환 함수를 거치는 작업을 여러 차례 반복하며 스스로 피쳐 변환을 모델이 찾아주길 기대하는 방법이다.

Feedforward Network

인공신경망artificial neural network의 일종인 feedforward network는 아래와 같은 구조를 갖는다.

보통은 위와 같이 여러 레이어를 두어 계산하며 입력이 들어오는 부분을 입력층input layer, 출력이 나오는 부분을 출력층output layer, 그리고 중간의 단계들을 은닉층hidden layer라 부른다.

보통의 feedforward network에서는 모든 입력이 각 간선의 가중치와 곱해진 뒤 더해지는 선형 결합을 거치고 그렇게 나온 결과가 비선형함수를 거치게 된다. 이렇게 나온 결과 하나가 다음 층의 하나의 노드의 출력이 되는 셈이다. 예전에는 흔히 비선형함수로 로지스틱logistic 함수나 쌍곡탄젠트tanh를 사용했으나 이제는 rectified linear unit과 각종 변종을 사용하는 경우가 많다.

Modern Neural Network

현대의 뉴럴넷은 그저 미분 가능한 함수들의 합성을 거쳐서 최종적으로 확률 분포를 표현하는 모델을 뱉어내도록 구성된다.

Backpropagation

학습과 최적화에 대해 되짚어보자. 어떤 모델이 학습한다 함은 최적화 문제를 푸는 것이고 이는 모델 공간을 탐색하는 것을 의미한다. 대체로 학습에서 우리가 찾고 싶은 것은 어떤 입력과 그에 대응되는 레이블이 주어졌을 때 똑같은 결과를 결과를 내놓는 함수를 찾는 것이다. 그리고 이를 측정하는 한 가지 방법으로 likelihood를 제시하였다. 즉, 우리가 결정한 모델을 가정할 때 관측한 데이터가 생성될 확률을 계산해보고 이를 최대화하는 방향으로 모델을 움직이는 것이다. 보통 loss라는 표현을 사용할 때에는 likelihood에 로그를 씌우고 음수를 취해서 이를 최소화하는 방향으로 모델을 움직인다.

$$L(y, \hat{y}) = L(y, f(\theta, x))$$

위의 식에서 우리에게 주어진 것은 $x$와 $y$이며, 모델을 결정하는 $\theta$를 바꿔서 위의 $L$을 최소화하는 것이 목표이다.

모델 공간을 탐색하는 가장 단순한 방법 중 하나는 모델을 아주 조금 수정하고 결과가 어떻게 바뀌는지 살펴보는 것이다. 가령 변수가 단 하나뿐인 모델을 생각해보자. 하나의 변수가 조금 달라지면 함수의 결과값이 어떻게 변하는지 살펴보는 것이다. 즉, $f(\theta)$를 계산해보고 $f(\theta + \epsilon)$과 $f(\theta - \epsilon)$도 계산해서 더 나아지는 방향으로 $\theta$를 움직이는 것이다.

위의 과정을 조금 생각해보면 미분이 위의 과정과 같음을 알 수 있다. 일변수 함수의 경우 도함수를 아래와 같이 정의한다.

$$\frac{d}{dx} f(x) = \lim_{\delta x \to 0} \frac{f(x + \delta x) - f(x)}{\delta x}$$

그 의미를 음미해보면 결국 입력이 아주 조금 변했을 때 결과가 어떻게 달라지는지 묻는 것에 불과하다. 즉, loss의 미분을 통해 패러미터 $\theta$가 조금 변할 때 $L$이 어떻게 변하는지 이야기할 수 있고 이를 바탕으로 어떻게 $\theta$를 바꿔야 하는지도 알 수 있다.

같은 방법을 $n$-차원 변수에 대해서도 적용할 수 있다. 다른 모든 변수를 고정하고 하나의 변수를 조금만 변화시킨 뒤 결과가 더 나아지는 방향을 찾는 것은 쉽게 할 수 있으며 이를 모든 변수에 대해서 수행한 뒤 한 번의 업데이트를 통해서 $n$ 개의 변수를 동시에 바꿔가며 모델을 조금씩 개선하는 것이다. 이 방법의 문제는 개념적인 부분이 아니라 계산적인 부분에 있다. 현대의 뉴럴넷은 수 백만 단위의 변수를 사용하는데 모델을 개선할 때 수 백만 개의 변수를 조금씩 바꿔보고 매번 함수가 어떤 결과를 내놓는지 수 백만 번 실행해본 뒤 아주 약간의 개선을 얻는 것은 너무 비싼 작업이다. 하지만 다행히도 다변수 함수도 위의 일변수 함수의 경우와 비슷하게 편미분을 통해 $L(y, f(\theta, x))$를 한 번만 평가하고도 모든 변수가 어떤 방향으로 변해야 하는지 알 수 있다. 그 계산을 조금 더 자세히 살펴보면 아래와 같다.

편미분 계산에는 중복되는 부분이 많이 있고, 이를 동적계획법의 아이디어를 사용하여 계산량을 줄이는 것이 역전파backpropgation 알고리즘이다.

References

이론적으로는 universal approximation theorem에 의해 유한개의 노드를 지닌 단 한 층의 히든 레이어만 있어도 원하는 임의의 함수를 표현할 수 있다. 하지만 그런 이론이 현실적인 도움이 되는지는 불명확하다. 이론적으로 임의의 함수를 표현할 수 있다해서 이를 실제로 현실적인 조건하에서 학습할 수 있는지는 모르기 때문이다. Pedro Domingos의 A Few Useful Things to Know about Machine Learning에서도 지적하고 있지만 많은 경우 이론적 상/하한은 타이트하지 않아서 현실적인 쓸모가 없을 때도 많다.

조금 더 자세한 backpropagation에 대한 설명은 Karpathy의 Hacker's guide to Neural Networks를 참고하기 바란다.

최근 딥러닝이라 불리며 뉴럴넷의 다양한 변형이 좋은 결과를 많이 내고 있다. 이 글에서는 의도적으로 이에 대한 설명을 피했다. 딥러닝에 대해서 더 자세히 알고 싶으면 Goodfellow, Bengio, Courville의 Deep Learning 혹은 Stanford University CS231n: Convolutional Neural Networks for Visual Recognition 등을 참고하기 바란다.