본문 바로가기

심층학습/Deep Learning

6장 심층 순방향 신경망 - 6.0 퍼셉트론의 이해

본 포스팅은 Ian Goodfellow 등 2인이 저술한 심층학습(Deep Learning Adaptive Computation and Machine Learning)및 오일석 저술의 기계학습 을 기반으로 작성합니다.

 

이번에는 신경망에 대해서 알아봅시다. 신경망은 인간의 뇌 속에 있는 뉴런의 구조를 본떠서 소프트웨어적으로 구현한 기계학습 모델입니다. 현재 기계학습 역사에서는 가장 오래된 모델이면서, CNN, RNN, LSTM 등의 가장 다양한 형태를 자랑합니다. 그리고 과거에는 SVM 등에 밀려서 사라질뻔한 분야였지만, 화려하게 부활해 기계학습의 대세가 되었죠.

 

이들이 과거에 밀렸던 이유는 뭘까요? 과거에는 신경망이 단층 퍼셉트론에 그쳐서 그렇습니다. 1969년 Minsky와 Papert의 저서 "Perceptrons"에서는 "퍼셉트론은 단순히 선형분류기에 불과해 XOR 문제 조차 해결하지 못한다"는 사실을 수학적으로 입증했고, 신경망 연구는 퇴보하게 됩니다. 1986년에 다층퍼셉트론과 오류 역전파 학습 알고리즘이 제안되었지만, SVM에 밀리는 형국이었죠. 하지만 2000년대 들어서 딥러닝이 실현되면서 신경망이 기계학습의 주류기술로 자리잡게 됩니다. 자세한 신경망의 역사는 [Kurenkov2015]를 참고하시면 됩니다. 

 

이 다층신경망을 이해하기 위해서는 가장 먼저 단층 신경망인 퍼셉트론에 대해서 이해할 필요가 있습니다. 퍼셉트론은 선형분류만 가능한 한계를 지녔지만, MLP의 초석이 된다는 점에서 큰 의의를 가집니다. 퍼셉트론을 어떻게 결합하여 만드느냐에 따라서 신경망 모델은 달라지기 때문이죠.

 

퍼셉트론의 구조

퍼셉트론은 입력층과 출력층을 가집니다. 입력층에서는 따로 연산을 진행하지 않고, 단일 층 구조라고 간주합니다. 맨 위에 x0 노드는 항상 1이 입력되는 편차 노드(Bias Node)이고, 출력층은 한개의 노드로 이루어집니다. 그리고 각 입력층 노드와 출력층 노드를 연결하는 엣지(Edge)에는 가중치(Weight)를 가집니다. 

 

이 출력층 노드에는 특징값과 가중치의 곱을 모두 더한 결과 s값이 출력됩니다. 그리고 출력된 s값에는 활성함수 τ를 적용해 True or False를 구별해내죠. 이 그림에서는 활성함수로 계단함수를 사용했는데, 결국 최종 출력인 y값은 +1, -1이 됩니다. 

 

이 퍼셉트론의 목표는 훈련 집합을 가장 옳게 분류하는 퍼셉트론을 찾는 것입니다. 이걸 바탕으로 비용함수를 이해해보죠.

비용함수(Cost Function)

비용함수는 어떻게 될까요? 비용함수가 되기 위해서는 몇 가지 조건이 존재하는데,

  1. J(w) >= 0
  2. w가 최적일 때(모든 샘플이 오분류 없이 분류되었을 때) J(w) = 0이다.
  3. 틀리는 샘플의 수가 많다 -> 비용함수 J(w)의 값이 커진다. 

세 가지입니다. 이것들을 식을 보면서 같이 이해해보도록 합시다. 

zz

비용함수는 다음과 같이 정의합니다. 일단 Y를 이해해보면, Y는 예측값과 실제값이 틀린 x, 즉 예측이 틀린 x값이 포함되는 집합입니다. 만일 예측과 정답이 다르다면, 이 집합에 정답값(1 or -1)을 포함시키도록 알고리즘을 짭니다. 만일 모든 예측값과 정답값이 같다면, Y값은 0이 되고, 그러면 비용함수 J(w)=0 으로 최적입니다.

 

그리고 괄호 안의 식은 가중치 * 특징값 으로, 이전에 활성함수에 넣기 전의 형태입니다. 이렇게 결정한 이유는 틀린 정도에 따라서 비용의 증가 정도를 조절하기 위해서임입니다. 또한, 아까 전에 계단함수에서, 이 값이 음수일 때 -1, 양수일 때 1이 출력된다고 했죠? 그러면 예측이 틀린 경우는 반대로, 이 값이 음수일 때 정답값이 1이거나, 이 값이 양수일때 정답값이 -1인 경우가 되겠네요. 이 식에 - 부호를 곱한 이유는 여기에 있습니다. 이 활성함수를 양수로 만들어서, 틀리면 틀릴수록 값이 증가하는 형태로 만드는 거죠.

 

이제 비용함수의 Gradient를 이용해 가중치를 계속 갱신하면 됩니다. 이전 선형회귀와 같습니다. 위 비용함수식을 미분하면, 이런 식이 나옵니다. 

이전과 동일하게, 가중치의 Update값은 가중치 + 학습률 * 비용함수의 Gradient 입니다. 결국 최종적으로 알고리즘을 설명하면 아래와 같습니다.