본문 바로가기
AI, 빅데이터/AI

[AI] Perceptron

by Foxy현 2022. 11. 7.
728x90
반응형

퍼셉트론다수의 신호를 입력 받아 하나의 신호를 출력합니다.

입력에 상수(가중치)를 곱해 전부 더한 값이 특정 값보다 크면 1, 아니면 0을 출력합니다.

여기서 특정 값은 임계값이라고 하며, theta로 나타냅니다.

 

위 내용을 아래로 나타내면 다음과 같습니다.

 

 

퍼셉트론은 입력 신호 각각에 고유한 가중치를 부여합니다. 가중치가 클수록 해당 신호가 그만큼 더 중요함을 나타냅니다.

 

그럼 퍼셉트론을 활용한 간단한 문제를 살펴보겠습니다.

위에서 퍼셉트론은 다수의 입력을 받아 하나의 신호를 출력한다고 했죠?

AND 게이트를 예로 들면 2개 이상의 입력을 받아 하나의 출력값을 결정해줍니다.

 

 

이를 위해 할 일은 진리표대로 작동하는 x1,x2,theta의 값을 정하는 것입니다.

 

 

다음과 같은 그림을 파이썬으로 구현해보겠습니다.

 

 

다음과 같이 2개의 입력을 넣으면 1개의 출력(0 혹은 1)이 나오네요!

OR, NAND 문제 또한 동일하게 생각할 수 있겠네요

 

import numpy as np

def activation(x):
    if x>0:
        return 1
    else:
        return 0

def AND(x):
    return activation(2*x[0]+2*x[1]-3)

def OR(x):
    return activation(2*x[0]+2*x[1]-1)

def NAND(x):
    return activation(-2*x[0]-2*x[1]+3)


test1 = np.array([0,1])
test2 = np.array([1,1])
test3 = np.array([0,0])
test4 = np.array([1,0])

print('========== AND =========')
print(f'AND({0},{1}) = {AND(test1)}')
print(f'AND({1},{1}) = {AND(test2)}')
print(f'AND({0},{0}) = {AND(test3)}')
print(f'AND({1},{0}) = {AND(test4)}')

print('========== OR =========')
print(f'OR({0},{1}) = {OR(test1)}')
print(f'OR({1},{1}) = {OR(test2)}')
print(f'OR({0},{0}) = {OR(test3)}')
print(f'OR({1},{0}) = {OR(test4)}')

print('========== NAND =========')
print(f'NAND({0},{1}) = {NAND(test1)}')
print(f'NAND({1},{1}) = {NAND(test2)}')
print(f'NAND({0},{0}) = {NAND(test3)}')
print(f'NAND({1},{0}) = {NAND(test4)}')

 

하지만 퍼셉트론으로는 XOR문제를 해결할 수 없었습니다.

하지만 이후, 이 문제를 해결할 수 있던 방법은 하나의 퍼셉트론을 더 추가하여 다층퍼셉트론을 구현하는 것이였습니다.

 

def XOR(x):
    a=[]
    a.append(NAND(x))
    a.append(OR(x))
    return AND(a)

print('========== XOR =========')
print(f'XOR({0},{1}) = {XOR(test1)}')
print(f'XOR({1},{1}) = {XOR(test2)}')
print(f'XOR({0},{0}) = {XOR(test3)}')
print(f'XOR({1},{0}) = {XOR(test4)}')

 

다음과 같이 NAND와 OR퍼셉트론을 더하여 다수의 퍼셉트론을 만듦으로써 퍼셉트론의 한계를 이겨냈습니다.

 


오늘은 퍼셉트론에 대해서 알아보았습니다.

요약하자면,

  • 퍼셉트론은 입력을 주면 규칙에 따른 값을 출력한다
  • 퍼셉트론으로 AND,OR,NAND 문제를 표현할 수 있다
  • 다층퍼셉트론을 이용하면 XOR문제를 해결할 수 있다

감사합니다!

 

 

728x90
반응형