관리 메뉴

HAMA 블로그

인공신경망 - (퍼셉트론) 본문

통계 & 머신러닝 & 딥러닝

인공신경망 - (퍼셉트론)

[하마] 이승현 (wowlsh93@gmail.com) 2015. 10. 4. 22:32

* 퍼셉트론

 - 계단 함수 또는 부호함수를 사용하여 만들어진 단순한 뉴런

 - 퍼셉트론에서는 초평면과 선형분리 개념이 적용된다.

  > 초평면 : N차원 공간을 두개의 영역으로 나누는 평면

  > 선형분리 : 값의 분포를 2개로 나눠지는 평면이 존재하면, 선형분리가 가능하다라고 한다.

 - 선형분리가 가능해야지 퍼셉트론으로 표현이 가능하다.


 ex1) AND

0.PNG 

   > 녹색선과 빨간색선은 모두 2차원 공간을 2개로 나누는 초평면이다.

   > 녹색선으로 만들어진 함수는 AND를 나타내기 위해 부적합하다.

   > 붉은선으로 만들어진 함수는 AND를 나타내기에 적합하다. 또한 붉은선에 의해서 상태가 나눠지므로,

      선형분리가 가능하다.

   > 이는 퍼셉트론으로 계산이 가능하다.

 

 ex2) XOR

  1.PNG 

   > 어떠한 초평면으로도 XOR을 만족시키는 것이 없다.

   > 이는 선형분리가 불가능하며, 퍼셉트론으로 계산이 불가능하다.


* 퍼셉트론의 학습규칙

 - 퍼셉트론의 학습은 오차율을 계산해내어, 입력값의 비율 만큼 가중치 값을 조종한다.

 - 다음과 같은 AND연산을 위한 퍼셉트론에서 (x1, x2)가 (1, 1)이 들어 왔을 때,

   가중치 값을 변경해 나가는 것을 보며 학습규칙을 설명하겠다.

 2.PNG 

  1) 현재 들어 온 값과 Step함수를 이용해 Y값을 구한다.

     f(X1*W1 + X2+W2 - θ ) = f(1*0.2 + 1*(-0.1) - 0.2 ) = f( - 0.1) = 0 (Step 함수는 0보다 클 경우 1을 작을경우 -1을 출력)

  2) (1, 1)이 들어 왔을 때에 기대 값은 1이므로, 오차 "1"이 발생한다.

   > e = Yd - Y ( Yd : 목표치 / Y : 현재치 )

  3) 오차가 발생했기 때문에 보정을 해준다. 이 보정은 다음의 식을 따른다.

   > Wi(next) = Wi(current) + a * Xi * e // 다음 가중치 = 현재 가중치 + 보정치 * 입력값 * 오차 // a = 0.1 

     ( a는 0과 1사이의 값으로 학습률을 나타낸다. 이 값은 Wi값이 적정치로 가는데 값의 변화의 폭을 줄이기 위해서 필요하다. )

   > 위 식에 따라 W1(next) = 0.2 + 0.1 * 1 * 1 = 0.3, W2(next) = -0.1 + 0.1 * 1 * 1 = 0.0으로 계산된다.

 - 위와 같은 형식으로 가중치 값을 학습해나간다. 이는 오차를 누가 더 많이 발생했느냐에 따라서 가중치 값의 변화도 변한다.

 - 위 과정은 가능한 모든 입력치에 대해서 모두 실행했을때 모두 오차가 나지 않을 때 까지 반복한다.

  > 하나의 입력치 뭉치를 에폭이라고 하며, 가중치 값을 한번 변화하는 과정을 P값을 이용해 나타낸다.

 - 위에서 알아본 퍼셉트론의 학습규칙을 일반화하면 다음과 같다.


 ⓐ Step 1 : 초기 가중치 값 및 임계값(θ)를 임의의 값으로 부여한다. 여기서 θ와 W값은 -0.5~0.5 사이를 만족시키도록 한다.  

                 또한 P값을 1로 Setting한다. 또한, 정한 학습률을 저장시킨다.(슈도코드에선 0.1로 선택)

     >> Pseudo Code 

     theta = Random[-0.5,0.5];                                    // Set the theta value( threshold )

     for ( i = 0 ; i < n ; i++ ) W[i] = Random[-0.5,0.5];    //  Set the W[i] value( weight )

     p = 1;                                                                //  Set the P value ( Proceed number )

     assistant = 0.1;                                                   //  Set the a value


 ⓑ Step 2 : 활성화 함수와 theta값을 이용하여 Y(p)값을 산출해난다.

                 3.PNG 

    >> Pseudo Code

    sum = 0;                                                             // sum  value of Xi * Wi

    result;                                                                // Value of Y(i)

    // Calculate Step Function

    for ( i = 0 ; i < n ; i++ ) sum += x[i]*w[i];                // sum of Xi * Wi

    sum -= theta;                                                      // Minus threshold value

    if ( sum > 0 ) result = 1;                                        

    else result = 0;


 ⓒ Step 3 : 다음 식을 이용하여 가중치 보정을 실시한다. 에러가 발생하지 않았다면 Step 4로 간다.

               4.PNG 


    >> Pseudo Code

    error = expectation[p] - result;

    if ( error != 0 ){

        for ( i = 0 ; i < n ; i++ ) w[i] += assistant * x[i] * e;

    }

 ⓓ Step 4 : 한 에폭을 실시하는 동안 에러가 나지 않는 다면 종료, 하나라도 에러가 났다면 Step 2로 돌아간다.


* 퍼셉트론의 한계

 - 선형분리가 불가능한 문제에 대해서 해결 할 수 없었다.(XOR)

 - 이러한 문제를 풀기 위해서 나온 것이 다층 피드 포워드 신경망이다.

저작자 표시 비영리 변경 금지
Posted by 구름여행 Cloud Travel
http://destiny738.tistory.com/455

Comments