머신러닝

본문 바로가기
사이트 내 전체검색


머신러닝
머신러닝

2. 퍼셉트론

페이지 정보

작성자 관리자 댓글 0건 조회 1,550회 작성일 20-02-22 13:14

본문

2. 퍼셉트론

퍼셉트론(인공뉴런)

 

1957년에 고안된 알고리즘

퍼셉트론은 딥러닝(신경망)의 기원이되는 알고리즘

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

 

# 여기서 신호는 전류나 물의 흐름을 생각해 볼 수 있다.

# 신호의 흐름을 표현할 때 두가지 값을 갖는데 0, 1의 값을 갖는다.
# 0은 안흐른다. 1은 신호가 흐른다.


2.PNG 

 

[ 퍼셉트론 식 ]

1.PNG 

 
 x1, x2는 입력신호, y는 출력신호, w1,w2는 가중치를 의미한다.
 (w는 weight을 의미)   θ는 임계값(정해진 한계값)

 
  w1*x1 + w2*x2 값이 임계값(θ) 이하 일때는 0을 출력, 임계값보다 클때  1을 출력한다.

  가중치가 클수록 해당신호가 강해진다 


[논리회로]

  * AND 게이트 진리표

 


3.PNG


 입력이 모두 1일때만 1을 출력한다.

 퍼셉트론으로 AND게이트를 표현하고자 할 때는
 w1, w2, θ 값을  어떤 값으로 설정할 것인지 생각해봐야 한다.

 AND게이트를 만족하는 w1, w2, θ의 조합은 무수히 많다.

 예>
 (w1, w2, θ)  ->  (0.5, 0.5, 0.8), (1.0, 1.0, 1.0)

 
 *NAND(Not AND) 게이트 진리표

 


4.PNG


 NAND게이트를 표현하기 위한 매개변수의 값
 (w1, w2, θ) = (-0.5, -0.5, -0.7)


 * OR게이트 진리표 

 

5.PNG


 입력신호 중 하나 이상이 1이면 출력이 1이되는 논리 회로


퍼셉트론 표현할 때는 가중치와 임계값을 설정하여 표현할 수 있다.

이 매개변수(w, θ)의 값을 적절히 조절하면 AND, NAND, OR게이트를 모두 표현 가능하다.



실습.


import numpy as np

def AND(x1, x2):
   w1, w2, theta = 0.5, 0.5, 0.8
   tmp = w1*x1+w2*x2
   if tmp <= theta:
      return 0
   elif tmp > theta:
      return 1


print(AND(0,0))
print(AND(0,1))
print(AND(1,0))
print(AND(1,1))
 


결과.


6.PNG



[ 가중치와 편향을 도입한 퍼셉트론 식]

 * 위의 퍼셉트론 식에서 θ 를 -b로 치환하면

 



7.PNG


  이때 b(bias)를 편향이라고 한다.

  퍼셉트론은 입력신호에 가중치를 곱한 값과 편향을 합하여, 그값이
  0을 넘으면 1을 출력하고, 그렇지 않으면 0을 출력한다.



실습.


import numpy as np

def AND(x1, x2):
  x = np.array([x1, x2])
  w = np.array([0.5, 0.5])
  b = -0.7
  tmp = np.sum(w*x) + b
  if tmp <= 0:
     return 0
  else:
     return 1


print(AND(0,0))
print(AND(0,1))
print(AND(1,0))
print(AND(1,1))



결과.


9.PNG 

 


 * XOR 게이트 진리표

 

8.PNG


 XOR 게이트는 배타적논리합이라고 한다.
 x1과 x2 중 어느 한쪽이 1일 때만 1을 출력하는 논리회로


 퍼셉트론으론는 XOR 게이트를 구현 할 수 없다.

 직선하나로는  XOR 게이트의 출력을 구분할 수 없다.(구분 불가능)

 퍼셉트론(단층 퍼셉트론)은 직선 하나로 나눈 영역만 표현할 수 있다는
 한계가 있다.

 선형 : 직선의 영역을 선형 영역
 비선형 : 곡선의 영역을 비선형 영역




11.PNG

10.PNG



# 다층 퍼셉트론(Multi Layer Perceptron)

  * 단층 퍼셉트론으로는 XOR게이트를 표현할 수 없다.
    즉, 단층 퍼셉트론으로는 비선형 영역을 분리할 수 없다.
   
  기존 게이트(AND, OR, NAND) 조합하여 층을 쌓으면 XOR 게이트를 구현할 수  있게 된다.



13.PNG

14.PNG

 

 

  게이트를 조합한 XOR 게이트의 진리표

 


12.PNG


15.PNG


실습.


# -*- coding: utf-8 -*-
import numpy as np

def AND(x1, x2):
  x = np.array([x1, x2])
  w = np.array([0.5, 0.5])
  b = -0.7
  tmp = np.sum(w*x) + b
  if tmp <= 0:
     return 0
  else:
     return 1

def NAND(x1, x2):
  x = np.array([x1, x2])
  w = np.array([-0.5, -0.5]) #가중치
  b = 0.7 #편향
  tmp = np.sum(w*x) + b
  if tmp <= 0:
     return 0
  else:
     return 1


def OR(x1, x2):
  x = np.array([x1, x2])
  w = np.array([0.5,0.5])
  b = -0.2
  tmp = np.sum(w*x) + b
  if tmp <= 0:
    return 0
  else:
    return 1

def XOR(x1,x2):
   s1 = NAND(x1,x2)
   s2 = OR(x1,x2)
   y = AND(s1,s2)
   return y


print(NAND(0,0))
print(NAND(0,1))
print(NAND(1,0))
print(NAND(1,1))

print("-------------")

print(OR(0,0))
print(OR(0,1))
print(OR(1,0))
print(OR(1,1))


print("------ XOR ---------")
print(XOR(0,0))
print(XOR(0,1))
print(XOR(1,0))
print(XOR(1,1))



결과.



16.PNG

댓글목록

등록된 댓글이 없습니다.


개인정보취급방침 서비스이용약관 모바일 버전으로 보기 상단으로

TEL. 063-469-4551 FAX. 063-469-4560 전북 군산시 대학로 558
군산대학교 컴퓨터정보공학과

Copyright © www.leelab.co.kr. All rights reserved.