본문 바로가기
IT/[Everyday]Coding

딥러닝_Neural Network_퍼셉트론

by Jang HyunWoong 2014. 12. 19.

퍼셉트론은 뉴럴 네트워크의 가장 심플한 기본적인 형태이다. (하나의 뉴런 모델)

하나의 퍼셉트론은 여러가지 inputs, 하나의 프로세서, 하나의 output으로 되어 있다. 



위의 그림에서 보면 Input0, Input1에서 값이 processor로 들어가고 processor에서 어떠한 연산을 한 후 output으로 보내는 과정이다. 

그러면 조금 더 자세하게 값을 넣어 가면서 보겠다. 

 

1. 먼저 두 inputs 값을 x1, x2로 보겠다. 

x1 = 12 (input0)

x2 = 5   (input1)

 

2. wieght 값을 정한다. 

각 input은 processor로 보내질 때 weight값과 계산되어서 가야한다. 예를 들어 어떠한 weight값과 input값이 곱셈이 되어 간다. (보통 weight값은 -1과 1사이 값이다.)

보통 퍼셉트론을 만들면 랜덤하게 weight값이 정해진다. 

 

weight 0 = 0.5

weight 1 = -1

 

계산을 하게되면

 

x1 * weight0 = 12 * 0.5 = 6

x2 * weight1 = 5 * -1 = -5

 

3. 계산된 값을 더한다. 

6 + -1 = 1

 

4. 이제는 output 값을 만들면 된다. 

output은 sum(계산된 합)된 값이 activation function(활성화 함수)를 통해 생성된다. 

활성화 함수는 약간 복잡할 수 있지만 지금은 연습, 이해하는 과정이기 때문에 간단하게 -1, 1로 output 되도록 하겠다. 

만약 sum된 값이 0 이상이면 1, 0 미만(-값)이면 -1로 output 하겠다. 

 

output = sign(sum) = sign(1) => 1

 

정리하면

1. inputs 값에 각 weight를 곱한다. 

2. 모든 곱해진 값을 sum한다. 

3. sum을 활성화 함수에 넣어서 최종 output을 생성한다. 

 

기본적인 이론은 했고 이것을 코드화 시켜서 보겠다. 

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int activate(float sum);
  5.  
  6. int main() {
  7. // your code goes here
  8.  
  9. float inputs[] = {12, 5};
  10. float weights[] = {0.5, -1};
  11. float sum = 0;
  12.  
  13. for(int i=0; i < sizeof(inputs); i++)
  14. {
  15. sum += inputs[i]*weights[i];
  16. }
  17.  
  18. int output = activate(sum);
  19.  
  20. cout << output << endl;
  21.  
  22. return 0;
  23. }
  24.  
  25. int activate(float sum){
  26. if(sum>0) return 1;
  27. else return -1;
  28. }

결과 stdout: 1

 

line 9-11: inputs값과 weights 값을 넣는다. (weight 값은 랜덤하게 rand함수를 사용해도 무관(-1~1)), sum 변수선언

line 13-16: 각 inputs 값과 weights 값을 multiplies(곱) 한다. 그리고 sum에 더한다. 

 

line 18: activation 함수에 넣어서 1 or -1 값을 반환

 

기본적인 퍼셉트론을 만들어 봤는데 추가 해야할 것이 있다. 

 

그건 이어서...

 

 

반응형

'IT > [Everyday]Coding' 카테고리의 다른 글

딥러닝_Neural Network_퍼셉트론3  (0) 2014.12.19
딥러닝_Neural Network_퍼셉트론2  (1) 2014.12.19
딥러닝_Neural Network_서론  (0) 2014.12.19
퀵정렬 (Quick Sort)  (0) 2014.12.19
사각형그리기2  (0) 2014.12.19