상세 컨텐츠

본문 제목

[Deep Learning-딥러닝]Solving XOR Problem with MLP

Artificial Intelligence

by [성운] 2019. 8. 4. 16:26

본문

Single neural network의 가장 대표적인 문제점으로 XOR problem으로 들 수 있습니다. Single neural network And, OR 연산은 해결할 수 있지만  XOR 문제는 해결하지 못했습니다우리는 AI를 공부하면 MLP에서는 XOR 문제를 해결할 수 있다고 들었습니다그럼 어떻게 해결할 수 있는지 예를 들어 보면서 해결 방법에 대해서 알아보겠습니다.

Single neural network의 한계점

분류를 할 때 뉴런이 한 개일 때는 하나의 직선밖에 만들 수가 없습니다 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 -

Classification with Single Neuron

위 그림처럼 AND, OR 연산의 출력 y의 값이 1 0의 분류가 하나늬 직선으로 구분할 수 있지만 XOR은 하나의 직선으로는 분류할 수 없습니다. XOR의 문제는 1969년에 Marvin Minsky수와 Seymour Paper가 “Perceptrons: an introduction to computational geometry”라는 책을 통해 퍼셉트론의 한계를 수학적으로 증명한 사례입니다.

Hidden layer를 사용한 XOR 해결법

XOR은 최소 두 개의 직선이 필요하거나 구부러진 선으로 분류가 가능합니다여기서는 두 개의 직선을 사용해서 XOR 문제를 해결해 보겠습니다.

Classification XOR with MLP

결과론적으로 우리는 위와 같이 두 개의 직선을 정의하고 두 직선이 교차하는 부분을 1로 아닌 부분을 0으로 정의하면 됩니다제 개인적인 의견으로는 이는 XOR 연산자와도 관련이 있다고 생각합니다. XOR 연산자는 아래와 같이 정의할 수 있습니다.

Formula-1

NOT (x1 AND x2) 을 분류하는 직선과 (x1 OR x2)을 분류하는 직선을 교차(AND)하는 부분을 1로 다른 부분을 0으로 정의하면 XOR 연산자를 만족합니다위 그림에서 파란 선이 NAND 연산의 구분 선이고 주황 선이 OR연산의 구분 선입니다.

Network Architecture

Input Layer에는(0, 0), (0, 1), (1, 0), (1, 1)의 값이 입력해야 하므로 두 개의 뉴런으로 구성하고 Hidden Layer에는 두 개의 직선을 만들기 위해서 두 개의 뉴런이 필요합니다그리고 이 둘을 교차시키는 연산이 필요합니다. Network FC(Fully Connected) 구조이며 가중치와 편차를 그림과 같이 설정하고 Activation Function으로는 Sigmoid를 사용합니다.

Sigmoid Function

Sigmoid 함수는 양수로 커질수록 1에 가까워지고 음수로 갈수록 0에 가까워집니다.

Input Layer x1=0, x2=0 이 들어 왔을 경우를 보겠습니다.

input value 0, 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 학습의 특징이므로 의문을 가지시지 말기를 바랍니다.

 

감사합니다.

관련글 더보기

댓글 영역