가령 아래의 +- 오브젝트들을 분류해본다.
직감적으로 선을 하나 그려 분리할 수 있을 것이다. linearly separable 하기 때문이다.
이는 퍼셉트론을 활용하여 분류할 수 있는데 퍼셉트론은 N개의 인풋을 받아서 1개의 아웃풋을 내놓는데 이를 도식화해보면 다음과 같다.
인풋 x1~xn에 가중치 w를 주어 P(x)라는 아웃풋을 내놓는 뉴런이다.
그리고 그림처럼 input Layer, output Layer가 존재한다.
퍼셉트론을 활용하여 Linearly separable한 문제를 푸는 방법은 아래처럼 구현할 수 있다.
아주 기본적인 코드이지만 문제가 linear하다면 느릴지라도 결국 선분 하나를 찾아낼 수 있을 것이다.
이를 활용하여 AND, OR, XOR 문제를 생각해보자.
if w1x1 + w2x2 + b >0 then 1 else 0
먼저 AND GATE의 생김새이다.
위의 AND GATE는 적절한 선분을 그어 1과 0의 값을 구현할 수 있다.
다음 OR GATE도 마찬가지이다.
w1, w2, b는 적절한 값으로 주고.. 파이썬 코드로 보면 다음과 같다.
def AND_GATE(x1, x2):
w1=0.5
w2=0.5
b=-0.7
result = x1*w1 + x2*w2 + b
if result <= 0:
return 0
else:
return 1
def OR_GATE(x1, x2):
w1=0.6
w2=0.6
b=-0.5
result = x1*w1 + x2*w2 + b
if result <= 0:
return 0
else:
return 1
def NAND_GATE(x1, x2):
w1=-0.5
w2=-0.5
b=0.7
result = x1*w1 + x2*w2 + b
if result <= 0:
return 0
else:
return 1
이런식으로 단층 퍼셉트론으로 AND, OR, NAND 정도는 구할 수 있다. 하지만 XOR GATE는 단층 퍼셉트론으로 구현할 수 없다. 우리는 디지털 회로 시간에 배운 GATE를 엮어서 XOR GATE를 만들어낸 경험을 되살려야 한다.
XOR GATE의 경우 서로 다른 값을 가지고 있을 때에만 1을 return 한다. 즉 x1, x2가 같으면 0을 return 한다.
XOR GATE는 다음처럼 표현될 수 있다.
XOR GATE는 1개의 직선으로 구분이 불가능하다. 하지만 AND, OR, NAND GATE를 조합해서 만들 수 있다.
XOR GATE의 경우 서로 다른 값을 가지고 있을 때에만 1을 return 한다. 즉 x1, x2가 같으면 0을 return 한다.
XOR GATE는 다음처럼 표현될 수 있다.
XOR GATE는 1개의 직선으로 구분이 불가능하다. 하지만 AND, OR, NAND GATE를 조합해서 만들 수 있다.
XOR_GATE의 코드는 다음처럼 볼 수 있겠다.
def XOR_GATE(x1, x2):
s1 = NAND_GATE(x1, x2)
s2 = OR_GATE(x1, x2)
return AND_GATE(s1, s2)
이런 다층 퍼셉트론을 MLP(Multilayer Perceptron)라고 하며 입력층과 출력층 사이에 hidden layer가 존재한다는 것이 특징이다. 이러한 hidden layer를 n개를 쌓은 개념이 DNN(Deep Neural Network)이고 최근 인공 신경망의 기초가 되었다.
댓글 없음:
댓글 쓰기