머신러닝

4-4 XOR 문제의 Polynomial Hypothesis 접근법과 Support Vector Machine 기법

coding art 2021. 7. 4. 14:58
728x90

수상돌기의 시냅스 영역에서 신경전달물질(neurotransmitter) 분비에 의한 입력 신호 전달과정에서 웨이팅이 일어나며 아울러 여러 개의 수상돌기가 연결된 뉴론에서 시그마()에 의한 전기 신호의 가감 합산이 일어난다. 합산된 전위 값은 threshold 조건 만족 여부에 따라 fire 즉 신경 충격이 일어나게 되며 뉴론에서 외부로 연결된 축색 돌기를 통해 신경 정보 전달이 이루어진다. 뉴럴 네트워크는 이와 같은 기본 구조를 갖추도록 컴퓨터 모델링을 통해 구성되며 그중에서 가장 단순한 모델이 퍼셉트론일 것이다.

 

뉴론 모델의 출발점에 해당하는 단일 퍼셉트론의 논리적 특성 파악을 위한 AND OR 논리 머신 러닝에서 입력 신호 처리, 웨이팅 그리고 시그마()에 의한 가감 합산처리, threshold 판단에 따른 firing 과정에 이르기까지 별문제 없이 처리가 가능하였다. 하지만 XOR 논리에 이르러서는 신호가 입력되어도 웨이팅 값이 0 이 되고 편향(바이어스) 값이 상수인 0.5로 결정되어 firing 할 것인지 말 것인지 결정이 불가능해진다. (W0 = 0.5, W1 = 0.0, W2 = 0.0)

 

이런 현상이 발생하는 이유는 무엇일까? 단일 퍼셉트론이라는 조건에 유의해 보자. 선형 회귀 문제뿐만 아니라 AND OR 로직문제를 잘 처리할 수 있다는 사실은 결국 AND OR 문제도 선형 특성이 있다는 점으로 이해할 수 있디. 반면에 XOR 로직에 대한 단일 퍼셉트론에 접근법이 실패한 결과를 낳는 이유는 XOR 로직 특성이 선형적이지 않다는 점일 것이다.

 

간단히 말하면 XOR 로직을 처리하는데 필요한 웨이트 벡터의 수가 충분치 못해 일어나는 현상으로 볼 수도 있다. 그렇다면 충분한 수의 웨이트 벡터를 사용하면 처리가 가능할 수도 있다는 점이다. 물론 실제 뉴론에서는 생체의 전기화학적인 메카니즘 자체가 전혀 변경될 수는 없으므로 뉴럴 네트워크(NN) 구성에서는 뉴론을 모방한 퍼셉트론 구조를 수정함이 없이 단지 다층화 및 교차연결에 의해서 웨이트 벡터들이 증가된 뉴럴 네트워크를 구성하여 문제 해결을 시도해 왔다.

 

하지만 수치적으로 데이터를 처리하는 뉴럴 네트워크에서는 반드시 생체내의 전기화학적인 과정을 모방한 퍼셉트론 알고리듬을 반드시 그대로 지켜야 할 이유는 없을 것이다. 즉 뉴럴 네트워크에서는 컴퓨팅 과정에서 웨이트 값을 찾기 위해 랜덤 넘버가 사용되기 때문에 때에 따라서는 생체 뉴론에서는 그럴 일이 없지만 floating point error 현상이 자주 발생하기도 한다. 비록 뉴럴 네트워크가 생체 뉴론을 잘 반영한 모델이긴 하지만 실제 생체 뉴론과 동일하지는 않다고 볼 수 있는 측면이기도 하다. 따라서 단일 퍼셉트론 모델의 XOR 처리 문제에 대해서도 다층화 교차연결 모델만 고려할 것이 아니라 퍼셉트론에서 웨이팅된 신호들의 선형이 아닌 다양한 연산 모델에도 관심을 기울여야 할 필요가 있다.

 

선형 회귀 문제에서는 입력 값 X 벡터에 대한 적절한 웨이트 벡터 W 와 편향(바이어스) 벡터 b를 결정하는 문제로 귀착된다. 따라서 다음과 같이 선형 hypothesis 함수 f(X)와 벡터들을 표현하자.

하지만 이러한 선형 hypothesis를 사용하여 XOR 로직문제를 처리할 수 없다면 좀 더 웨이트 벡터나 바이아스 벡터를 증가시킨 2차 또는 3차 다항식 hypothesis 모델로 일반화를 시도해 보도록 해보자. 다음의 두 모델은 웨이트 벡터의 수는 그대로지만 편향(바이어스) 항이 추가된 상태에서 2차와 3차 다항식 형태를 취하고 있다.

웨이트 벡터들의 값들이 경사하강법에 의한 학습을 통해 결정이 되면 함수 G(X)H(X)는 입력 벡터 X 에 대해 각각 2, 3차식의 형태를 가지게 된다. 즉 선형 문제와 비교하여 차원이 증가된 상태로 볼 수 있다.

 

한편 다음과 같은 형태로 웨이트 벡터와 편향(바이어스)를 추가한 다항식 모델도 고려해 보자.

TensorFlow 학습을 위한 데이터 구조는 아무런 변동 없으며 단지 hypothesis 만 바꾼 상태에서 learning_rate 값은 0.05 로 두고 학습 횟수를 500회로 설정하여 최소제곱법 cost 함수를 적용하는quadratic_regression_XOR_bias_01.py 코드를 실행하자.

결과를 관찰해 보면 100회 학습을 통해서도 약 0.2% 정도의 오차로 이미 충분히 수렴된 결과를 보여준다. 하지만 때때로 hypothesis 값들이 0.5가 되는 즉 불완전한 hypothesis 설정에 따라 머신 러닝이 실패하는 경우도 자주 일어난다.

바이아스를 하나 더 추가한 G(X) 형의 quadratic hypothesis 사용에 있어서 제대로 XOR 논리를 학습한 경우와 반면에 XOR 논리처리가 불가능한 경우 2 종류의 결과가 출력될 수 있다는 점이다. hypothesis 값들이 0.5가 되는 즉 불완전한 hypothesis 설정에서 탈피하기 위해서는 편향(바이어스) 값 b1, b2 중에 하나를 0.0 으로 두면 제대로 된 결과를 얻을 수 있다.

입력 벡터 중 (0, 0)을 대입할 경우 G(0,0)=b1b2 가 되는데 원점에서 XOR 문제의 hypothesis 값은 0 이 되어야 하므로 바이아스 값 중 하나는 상수 0.0 으로 설정해야 한다.

 

HypothesisX 벡터에 대한 차수를 높여 G(X) 대신 H(X) hypothesis를 사용해 보기로 하자. H(X)도 실패하는 계산 결과를 주지만 편향(바이어스) 벡터 하나를 상수 값 0으로 설정하면 완전히 성공적인 계산 결과를 낳는다.

입력 벡터 중 (0, 0)을 대입할 경우 H(0,0)=b1b2b3  가 되므로 원점에서 XOR 문제의 hypothesis 값은 0 이 되어야 하므로 편향(바이어스) 값 중 하나는 상수 0.0 으로 설정해야 한다.

Hypothesis 곡면을 플롯해 보면 (0,0) (1,1) 을 연결하는 대각선 방향으로 푹 꺼진 다음과 같은 곡면을 보여 준다.

한편 웨이트 벡터와 편향(바이어스)를 증가시킨 hypothesis E(X)도 성공적인 계산 결과를 낳는다.

하지만 이 경우의 Hypothesis 곡면은 다음과 같이 위로 볼록한 곡면을 나타내게 된다.