퍼셉트론 공식

허선우·2021년 6월 13일
1

인공지능/딥러닝

목록 보기
1/4

퍼셉트론은 인간의 신경전달과정을 착안하여 만든 공식이다.
먼저 간단히 신경 전달 과정을 살펴보겠다.

위의 사진은 2개의 뉴런이 붙어 있는 사진인데 초록색으로 동그라미 친 부분을 보면 두 뉴런은 연결되어 있지 않다. 그렇다면 어떻게 전기신호를 전달할까?
전기신호는 뉴런에서 만들어져 시냅스로 이동한다. 이때 시냅스의 말단에서 전기 신호가 특정 기준을 넘으면 그림의 확대 부분처럼 시냅스 말단에서 아세틸CO-A라는 신경전달물질이 발포되고 이것이 다음 뉴런의 수상돌기를 자극시킨다.
시냅스 공간에서 전기 자극의 신호가 충분치 않다면 전기신호는 다음 뉴런을 자극시키지 못해 사라질 것이고, 충분하다면 다음 뉴런으로 이동할 것이다.

다음 그림에서는 전기 신호를 그래프로 나타낸 활동 전위에 대해 더 자세히 설명하겠다.

위 그래프는 한 뉴런에서의 전기 자극 세기를 나타낸 그래프이다.
1번과정에서 전기 자극이 전달 되었다고 하자.
만약 이때 전기의 세기가 어떠한 역치(기준점)를 넘는다면 뉴런의 다른 신경 전달 물질을 자극 시키고 이것은 그래프의 3번처럼 activated된다.
하지만 2번의 과정에서 역치점을 넘기지 않는다면 이 신호는 activated되지 못하고 줄어들게 된다.

퍼셉트론 이론은 이 과정을 모티브로 만든 공식이다.
어떠한 값이 임계치를 넘는다면 1이라는 숫자를 부여하고
(여기서의 1은 전기신호를 전달한다. 라고 생각하면 되겠다.)
임계치를 넘지 않는다면 0이라는 값을 부여한다.(전기 신호가 전달되지 않는다.)

퍼셉트론 공식에 대해 더 알아보겠다.

  1. 개요
    퍼셉트론은 1957년 코넬 항공 연구소(Cornell Aeronautical Lab)의 프랑크 로젠블라트(Frank Rosenblatt)에 의해 고안된 인공신경망이다. 로젠블라트에 의해 제안된 것은 가장 간단한 형태의 단층 퍼셉트론(single-layer perceptron)으로 입력 벡터를 두 부류로 구분하는 선형분류기이다.

  2. 용어 정의

임계치(threshold): 어떠한 값이 활성화되기 위한 최소값을 임계치라고 한다.

가중치(weight): 퍼셉트론의 학습 목표는 학습 벡터를 두 부류로 선형 분류하기 위한 선형 경계를 찾는 것이다. 가중치는 이러한 선형 경계의 방향성 또는 형태를 나타내는 값이다.

바이어스(bias): 선형 경계의 절편을 나타내는 값으로써, 직선의 경우는 y절편을 나타낸다.

net값: 입력값과 가중치의 곱을 모두 합한 값으로써, 기하학적으로 해석하면 선형 경계의 방정식과 같다.

활성홤수(activation function): 뉴런에서 계산된 net값이 임계치보다 크면 1을 출력하고, 임계치보다 작은 경우에는 0을 출력하는 함수이다. 이 정의는 단층 퍼셉트론에서만 유효하며, 다층 퍼셉트론에서는 다른 형태의 활성함수를 이용한다.

뉴런(neuron): 인공신경망을 구성하는 가장 작은 요소로써, net값이 임계치보다 크면 활성화되면서 1을 출력하고, 반대의 경우에는 비활성화되면서 0을 출력한다.

<뉴런의 구조>

우리에게 x의 값들이 주어졌다고 하자.
이 값들을 통해 전기신호를 전달할 지 전달하지 않을 지 결정하는 것이 우리의 임무이다. 우리는 이 값들을 두 분류로 구분하여 전기신호를 보낼 쪽과 보내지 않을 부분을 정해야한다.

w는 가중치의 역할을 한다. 만약 x값이 1이고 w값이 0.5라면 두 값의 곱은 0.5가 되어 줄어들 것이고 w값이 2라면 결과값은 2가 될 것이다. 즉 w값은 x값에 가중치를 부여하여 값을 극적으로 나타내는 역할을 한다.

벡터값과 가중치를 모두 곱하였다면 그값을 모두 더해 활성함수에 대입한다. 활성함수란 이 값이 역치값을 넘는지 넘지 않는지 계산해주는 값이다.
역치값을 넘는다면 1을 반환하고 넘지 않는다면 0을 반환한다.

다음은 퍼셉트론 공식을 파이썬으로 구현한 것이다.

#가중치 생성(임의로 가중치를 생성한다. w0 = -1)
w =[0.3, 0.4, 0.1]
4개의 변수로 부터 and_table공식을 대입한 후, 테이블 생성
and_table = [ [-1,0,0,0], [-1,0,1,0], [-1,1,0,0], [-1,1,1,1] ]

def perceptron(and_table,w):                        #퍼셉트론 가중치를 업데이트하는 함수 생성
    import my_cal as mc                              
    r = float(input('가중치 r의 값은?'))            #가중치를 물어 r이라는 변수에 할당
    cost= 1                                              #while루프를 돌리기 위한 cost 값 할당
    
    while cost != 0 :                                 #cost가 0이 아니라면 루프 반복
            for i in range(0,4):                       #표본의 수만큼(4명) 반복문을 실행하라. 
                k = and_table[i][0]*w[0]+and_table[i][1]*w[1]+and_table[i][2]*w[2]   #각 표본의 k값을 구한 후
                cost = and_table[i][3] - mc.step_function(k)                            #두번째 식의 t-f(k)값을 cost에 할당하라 
                for j in range(0,3):                                                         # w의 개수인 3번 반복하라
                    if cost != 0:                                                             # cost의 값이 0이 아니라면
                        w[j] = round(w[j]+r*and_table[i][j]*cost,2)                    #각 w의 값을 업데이트 한다
    return w                                                                                  #이 때 cost가 0이라면 중단.
            
perceptron(and_table,w)

1개의 댓글

comment-user-thumbnail
2022년 10월 5일

ㅎㅇ

답글 달기