Single neural network의 가장 대표적인 문제점으로 XOR problem으로 들 수 있습니다. Single neural network는 And, OR 연산은 해결할 수 있지만 XOR 문제는 해결하지 못했습니다. 우리는 AI를 공부하면 MLP에서는 XOR 문제를 해결할 수 있다고 들었습니다. 그럼 어떻게 해결할 수 있는지 예를 들어 보면서 해결 방법에 대해서 알아보겠습니다.
분류를 할 때 뉴런이 한 개일 때는 하나의 직선밖에 만들 수가 없습니다. 즉 1차 선형 방정식으로 두 개의 분류로 분류할 수 있습니다.
x1 | x2 | AND | OR | NAND |
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | - |
위 그림처럼 AND, OR 연산의 출력 y의 값이 1과 0의 분류가 하나늬 직선으로 구분할 수 있지만 XOR은 하나의 직선으로는 분류할 수 없습니다. XOR의 문제는 1969년에 Marvin Minsky수와 Seymour Paper가 “Perceptrons: an introduction to computational geometry”라는 책을 통해 퍼셉트론의 한계를 수학적으로 증명한 사례입니다.
XOR은 최소 두 개의 직선이 필요하거나 구부러진 선으로 분류가 가능합니다. 여기서는 두 개의 직선을 사용해서 XOR 문제를 해결해 보겠습니다.
결과론적으로 우리는 위와 같이 두 개의 직선을 정의하고 두 직선이 교차하는 부분을 1로 아닌 부분을 0으로 정의하면 됩니다. 제 개인적인 의견으로는 이는 XOR 연산자와도 관련이 있다고 생각합니다. XOR 연산자는 아래와 같이 정의할 수 있습니다.
NOT (x1 AND x2) 을 분류하는 직선과 (x1 OR x2)을 분류하는 직선을 교차(AND)하는 부분을 1로 다른 부분을 0으로 정의하면 XOR 연산자를 만족합니다. 위 그림에서 파란 선이 NAND 연산의 구분 선이고 주황 선이 OR연산의 구분 선입니다.
Input Layer에는(0, 0), (0, 1), (1, 0), (1, 1)의 값이 입력해야 하므로 두 개의 뉴런으로 구성하고 Hidden Layer에는 두 개의 직선을 만들기 위해서 두 개의 뉴런이 필요합니다. 그리고 이 둘을 교차시키는 연산이 필요합니다. Network는 FC(Fully Connected) 구조이며 가중치와 편차를 그림과 같이 설정하고 Activation Function으로는 Sigmoid를 사용합니다.
Sigmoid 함수는 양수로 커질수록 1에 가까워지고 음수로 갈수록 0에 가까워집니다.
Input Layer에 x1=0, x2=0 이 들어 왔을 경우를 보겠습니다.
h1에서 -10에 Activation Function으로 sigmoid를 사용했을 경우 0으로 수렴되어 h1의 출력은 0이 됩니다. h2에는 30에 sigmoid를 적용해서 출력이 1이 되었습니다. 이 둘의 출력을 Output Layer의 가중치와 편차를 적용하고 sigmoid를 적용하면 0이 출력됩니다. 모든 입력에 대해서 연산을 하면 아래 결과가 나옵니다.
이처럼 MLP를 사용해 Hidden Layer를 이용하면 Single Layer에서 해결하지 못했던 XOR의 문제점을 두 개의 선을 이용해서 분류할 수 있습니다.
가중치와 편차는 학습 할 때마다 다르게 나올 것이다. 이는 MLP 학습 특징으로 Back propagation 학습의 특징이므로 의문을 가지시지 말기를 바랍니다.
감사합니다.
[Deep Learning-딥러닝]Backpropagation (역전파) 및 Delta Rule을 이용한 가중치 조정 방법 소스 구현 - XOR 연산 (0) | 2019.08.07 |
---|---|
[Deep Learning-딥러닝]Backpropagation (역전파) 및 Delta Rule을 이용한 가중치 조정 방법 (2) | 2019.08.06 |
[Tensorflow]선형회귀분석(Linear Regression) 소스 구현 (0) | 2019.08.03 |
[Tensorflow]기본 자료구조-텐서(Tensor) - Constant, Variable, Placeholer (0) | 2019.08.02 |
[Tensorflow]Tensorflow 소개 및 설치 방법 (0) | 2019.08.01 |
댓글 영역