👩‍💻LEARN : ML&Data/Book Study

[모두의 딥러닝] #2-7. 퍼셉트론

쟈니유 2023. 2. 12. 22:14
728x90

내겐 웜홀과 같은 퍼셉트론...

 


#2-7. 퍼셉트론과 인공지능의 시작 

 

1. 퍼셉트론이란 

  • 퍼셉트론 : 인공신경망 연구로 입력값을 여러개 받아 출력을 만드는데, 이 때 입력 값에 가중치를 조절할 수 있게 만들음 
  • 아달라인 : 퍼셉트론에 경사하강법을 도입해 최적의 경계선을 그릴 수 있게 함. 아달라인이 추후 발전하면서 로지스틱 회귀 알고리즘도 생겨남 

 

2. 퍼셉트론의 과제 : XOR문제 

논리연산에서

논리합(OR), 논리곱(AND),배타적논리합(XOR)을 좌표평면에 나타내고 선을 그어 구분할 시 퍼셉트론의 한계가 XOR의 논리연산에서 1과 0 을 구분할수 없다는 것을 확인할 수 있음 

 

논리연산
논리곱(AND) x1 = 1 AND x2 = 1  :  1 
x1 x2 결과값
0 0 0
0 1 0
1 0 0
1 1 1

논리합(OR) x1 = 1 OR x2 = 1 : 1 
x1 x2 결과값
0 0 0
0 1 1
1 0 1
1 1 1

부정논리곱(NAND) x1 = 1 AND x2 = 1 : 0 , 그 외에는 모두 1 
x1 x2 결과값
0 0 1
0 1 1
1 0 1
1 1 0

부정논리합(NOR) x1 = 0 AND x2 = 0 : 1, 그 외에는 모두 0 
x1 x2 결과값
0 0 1
0 1 0
1 0 0
1 1 0

배타적논리합(XOR) x1 과 x2 중 단 하나만 1이어야 : 1 

x1 x2 결과값
0 0 0
0 1 1
1 0 1
1 1 0

 


#2-8. 다층 퍼셉트론 

 

1. 개요 

이런 대충 인터스텔라 웜홀 마냥 평면을 휘어서 해결하자! 라는 발상 ...
x1, x2의 예시는 위의 논리연산자와 동일

 

2. 다층 퍼셉트론의 설계 

결국 행렬로 귀결되버려..!

 

3. 코딩으로 XOR문제 해결하기 

import numpy as np

#가중치와 바이어스 선언

w11 = np.array([-2,-2]) #n1를 위한 가중치
w12 = np.array([2,2]) #n2를 위한 가중치

w2 = np.array([1,1])
b1 = 3
b2 = -1
b3 = -1

#퍼셉트론 만들기

def MLP (x,w,b) :
   y = np.sum(w*x)+b
   if y <= 0:  
      return 0
   else :
     return 1

#NAND 게이트

def NAND(x1,x2):
return MLP(np.array([x1,x2]),w11,b1)

#OR 게이트

def OR(x1,x2):
return MLP(np.array([x1,x2]),w12,b2)

#AND 게이트

def AND(x1,x2):
return MLP(np.array([x1,x2]),w2,b3)

#XOR 게이트

def XOR(x1,x2):
return AND(NAND(x1,x2), OR(x1,x2))


#최종값 출력

for x in [(0,0), (1,0), (0,1), (1,1)]:
   y = XOR(x[1], x[0]) #x는 튜플 형태로 x에 있는 원소에 대한 인덱싱. x[0]은 첫번째 원소 의미.
   print("입력값 :" + str(x) + "출력값 : " + str(y))

type(x)
입력값 :(0, 0)출력값 : 0
입력값 :(1, 0)출력값 : 1
입력값 :(0, 1)출력값 : 1
입력값 :(1, 1)출력값 : 0
tuple