IT Log

퍼셉트론 (Perceptrons) 본문

Machine Learning

퍼셉트론 (Perceptrons)

newly0513 2019. 5. 15. 17:27
728x90
반응형

퍼셉트론이란?

인공신경망의 한 종류로서, 1957년에 코넬 항공 연구소의 프랑크 로젠블라트에 의해 고안되어졌다.

신경망을 이루는 가장 중요한 기본 단위로 입력 값과 활성화 함수를 사용해 출력 값을 얻는다.

 

 

 

퍼셉트론의 구조

 

변수 설명
x 입력 값
w 가중치
b 바이어스
활성화 함수

 

입력 값을 받아서 각 입력 값마다 가중치를 곱하여 모두 더하고 마지막으로 바이어스를 더해준 값을 활성화 함수에 의하여 판단되어 최종 출력값을 뽑아낸다. 이 말을 식으로 표현하면 아래와 같다.

위의 식은 더 간단하게 보면 xw + b로 볼 수 있는데, 이것은 직선의 기울기를 구할 때와 유사하다. 이를 이용하여 논리 회로들을 표현해보면 아래와 같다.

 

AND

OR

NAND

XOR


이처럼 AND, OR, NAND의 경우 직선 하나로 결과 값을 분류해 낼 수 있지만
 XOR의 경우, 직선 하나로 1과 0을 분류 할 수 없어서 퍼셉트론은 한계를 맞이하게 된다. 그렇게 오랜시간이 지나 MLP(Multi Layer Perceptron)가 등장함으로써 XOR문제가 해결되게 된다.


논리회로 예제 (with R)

AND= function(x1, x2){
  w1 = 0.5
  w2 = 0.5
  theta = 0.7
  value = x1*w1 + x2*w2
  if(value <= theta ){
    print(return(0))
  }
  else{
    print(return(1))
  }
}

OR= function(x1, x2){
  w1 = 0.5
  w2 = 0.5
  theta = 0.4
  value = x1*w1 + x2*w2
  if(value <= theta ){
    print(return(0))
  }
  else{
    print(return(1))
  }
}

NAND= function(x1, x2){
  w1 = -0.5
  w2 = -0.5
  theta = -0.7
  value = x1*w1 + x2*w2
  if(value <= theta ){
    print(return(0))
  }
  else{
    print(return(1))
  }
}

TOTAL=function(x1,x2){
      paste0("INPUT(",x1,",",x2,") AND :",AND(x1,x2),
             ", OR :",OR(x1,x2),", NAND :",NAND(x1,x2))
}
TOTAL(0,0)
TOTAL(0,1)
TOTAL(1,0)
TOTAL(1,1)
> TOTAL(0,0)
[1] 0
[1] "INPUT(0,0) AND :0, OR :0, NAND :1"
> TOTAL(0,1)
[1] 1
[1] "INPUT(0,1) AND :0, OR :1, NAND :1"
> TOTAL(1,0)
[1] 1
[1] "INPUT(1,0) AND :0, OR :1, NAND :1"
> TOTAL(1,1)
[1] 0
[1] "INPUT(1,1) AND :1, OR :1, NAND :0"

예제

AND 연산

W0 = 0.3, W1 = 0.4, W2 =0.1, X0 = -1 

( 0, 0 )일 때,

 

W0 = 0.3, W1 = 0.4, W2 =0.1

X0 = -1, X1 = 0, X2 = 0

net =  W1X1 + W2X2 + W0X0 = -0.3

f(net) = 0

  • AND 연산 X1, X2 값이 둘다 0인경우 Y값은 0이므로 알맞게 나왔다.

 

( 0, 1 )일 때,

 

W0 = 0.3, W1 = 0.4, W2 =0.1

X0 = -1, X1 = 0, X2 = 1

net =  W1X1 + W2X2 + W0X0 = -0.2

f(net) = 0

 

( 1, 0 )일 때,

 

W0 = 0.3, W1 = 0.4, W2 =0.1

X0 = -1, X1 = 1, X2 = 0

net =  W1X1 + W2X2 + W0X0 = 0.1

f(net) = 1

  • AND 조건에 맞으려면 1, 0일 때, Y값은 0 이여야 하는데 1이 나왔으므로 가중치를 조정
조정하는 방법은 w = w + 0.05 * X * ( T - f(net) )
따라서, W0 = 0.3 + 0.05 * ( -1 ) * ( 0 - 1 ) = 0.35 이고, W1과 W2도 똑같이 계산하면 W1 = 0.35, W2 = 0.1

 ( 1, 1)일 때, 

 

W0 = 0.35, W1 = 0.35, W2 =0.1

X0 = -1, X1 = 1, X2 = 1

net =  W1X1 + W2X2 + W0X0 = 0.1

f(net) = 1

  • 마지막은 알맞게 나왔지만 결과적으로 0, 0, 1, 1이 나왔으므로, 바뀐 가중치로 위 과정을 반복한다.

( 0, 0 ), ( 0, 1 )은 조건에 알맞은 값이 나오지만 ( 1, 0 )일 때,

 

W0 = 0.35, W1 = 0.35, W2 =0.1

X0 = -1, X1 = 1, X2 = 0

net =  W1X1 + W2X2 + W0X0 = 0

f(net) = 1

위에서 했던 가중치 조정방법에 따라 다시 재조정하여 W0 = 0.4, W1 = 0.3, W2 = 0.1 로 조정하여 진행

( 1, 1)일 때, 

 

W0 = 0.4, W1 = 0.3, W2 =0.1

X0 = -1, X1 = 1, X2 = 1

net =  W1X1 + W2X2 + W0X0 = 0

f(net) = 1

  • 아까와 같은 상황으로 ( 0, 0 )부터 다시 반복

( 0, 0 )일 때,

 

W0 = 0.4, W1 = 0.3, W2 =0.1

X0 = -1, X1 = 0, X2 = 0

net =  W1X1 + W2X2 + W0X0 = -0.4

f(net) = 0

 

( 0, 1 )일 때,

 

W0 = 0.4, W1 = 0.3, W2 =0.1

X0 = -1, X1 = 0, X2 = 1

net =  W1X1 + W2X2 + W0X0 = -0.3

f(net) = 0

 

( 1, 0 )일 때,

 

W0 = 0.4, W1 = 0.3, W2 =0.1

X0 = -1, X1 = 1, X2 = 0

net =  W1X1 + W2X2 + W0X0 = -0.1

f(net) = 0

 

( 1, 1)일 때, 

 

W0 = 0.4, W1 = 0.3, W2 =0.1

X0 = -1, X1 = 1, X2 = 1

net =  W1X1 + W2X2 + W0X0 = 0

f(net) = 1

AND 연산에 알맞은 값이 나왔으므로 가중치 조정을 더 이상 진행하지 않고 마무리한다.
728x90
반응형
Comments