본문 바로가기
지능형시스템/머신러닝

[머신러닝] - 단층 퍼셉트론(Single-layer Perceptron)

by CHML 2016. 2. 15.
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을 출력한다.


[그림 1] 뉴런의 구조


위의 [그림 1]은 뉴런의 구조를 나타낸다. 뉴런에서 $x$는 입력 벡터의 값을 나타내고 $w$는 가중치를 나타낸다. 바이어스 입력값은 \({x}_{0}\), 바이어스 기울기는 \({w}_{0}\)로 표기했으며, $f$는 활성함수를 타나낸다.


3. 알고리즘 구조

단층 퍼셉트론은 입력층(input layer)과 출력층(output layer)으로 구성된다. 입력층은 학습 벡터 또는 입력 벡터가 입력되는 계층으로써, 입력된 데이터는 출력층 뉴런으로 전달되어 활성함수에 따라 값이 출력된다. 출력층은 퍼셉트론 설계 시 임의의 $n$개의 뉴런으로 구성할 수 있으며, 아래의 [그림 2]는 1개의 뉴런으로 구성된 출력층을 나타낸다.


[그림 2] 출력층의 크기가 1인 단층 퍼셉트론


 단층 퍼셉트론의 학습 알고리즘은 아래와 같다.


1) 가중치와 바이어스 가중치를 -0.5와 0.5 사이의 임의의 값으로, 바이어스 입력값을 임의의 값으로 초기화

2) 하나의 학습 벡터에 대한 출력층 뉴런의 $net$값을 계산

3) 활성함수를 통해 계산된 $net$값으로부터 뉴런의 실제 출력값을 계산

4-1) 뉴런의 출력값과 목표값의 차이가 허용 오차보다 작으면 [5]로 이동

4-2) 뉴런의 출력값과 목표값의 차이가 허용 오차보다 크면 학습을 진행

5-1) 현재 학습 벡터가 마지막 학습 벡터가 아니면, 현재 학습 벡터를 다음 학습 벡터로 설정하고 [2]로 이동하여 반복

5-2-1) 현재 학습 벡터가 마지막 학습 벡터이고, 모든 학습 벡터에 대해 출력값과 목표값이 허용 오차보다 작으면 알고리즘을 종료

5-2-2) 현재 학습 벡터가 마지막 학습 벡터이지만 출력값과 목표값이 허용 오차보다 큰 학습 벡터가 존재하면, 현재 학습 벡터를 처음 학습 벡터로 설정하고 [2]로 이동하여 반복


4. 연산 정의

1) 뉴런의 net값 계산

뉴런의 $net$값은 아래와 같이 계산된다. 아래의 식에서 $N$은 입력 벡터의 크기를 나타낸다.



2) 활성함수 정의

활성함수는 $net$값이 임계치보다 크면 뉴런의 출력값을 활성화하고, 그렇지 않으면 뉴런의 출력값을 비활성화하는 함수이다. 퍼셉트론에서 사용하는 가장 기본적인 활성함수는 계단 함수(step function)를 이용한다. 퍼셉트론에서 이용하는 계단 함수의 정의는 아래의 [식 1]과 같다. 활성함수로 계단함수를 이용할 때는 뉴런의 출력값은 0과 1만을 갖기 때문에 목표값과 출력값의 차이라는 개념보다는 목표값과 출력값의 일치, 불일치라는 개념을 이용한다.



3) 학습 연산(Learning rule) 정의

출력층 뉴런의 출력값과 목표값의 차이가 허용오차보다 크면 출력층 뉴런의 가중치를 조정해야한다. 가중치를 조정하는 식은 아의 [식 2]와 같다.




5. 예제

이 예제는 단층 퍼셉트론을 이용하여 AND 연산을 학습시키는 예제이다. 이 예제에서 AND 연산을 학습하기 위한 퍼셉트론의 구조는 아래의 [그림 3]과 같다. 이 예제의 단층 퍼셉트론의 학습률은 0.05, 임계치는 0으로 설정하였다. 허용오차는 알고리즘을 시작하기 전에 0과 0.1 사이의 적당히 작은 값으로 설정한다. 그러나 계단 함수를 이용할 경우에는 출력값과 목표값이 '같다/다르다'로만 판별되기 때문에 허용오차를 계산하는 것이 무의미하여 허용오차에 대한 서술을 생략하였다.


[그림 3] AND 연산 학습을 위한 단층 퍼셉트론의 구조


1) 학습 데이터 제시

AND 연산에 대한 학습 데이터는 아래와 같다.



2) 가중치 및 바이어스 초기화

가중치와 바이어스 가중치를 -0.5와 0.5 사이의 임의의 값으로, 바이어스 입력값은 -1로 초기화한다.



3) 각 학습 벡터에 대한 출력값 계산 및 가중치 조정

3-1) t = 1

첫 번째 학습 벡터 (0, 0, 0)에 대한 출력값을 계산한다.



출력값이 목표값과 일치하므로 가중치를 수정하지 않고 두 번째 학습 벡터 (0, 1, 0)에 대한 출력값을 계산한다.



출력값이 목표값과 일치하므로 가중치를 수정하지 않고 세 번째 학습 벡터 (1, 0, 0)에 대한 출력값을 계산한다.



출력값이 목표값과 다르므로 가중치를 수정한다.



네 번째 학습 벡터 (1, 1, 1)에 대한 출력값을 계산한다.



학습 벡터1, 2, 4는 출력값과 목표값이 일치하지만, 출력값과 목표값이 다른 학습 벡터(세 번째 학습 벡터)가 존재하므로 현재 학습 벡터를 처음 학습 벡터로 설정하고 이 과정을 반복한다.


3-2) t = 2

첫 번째와 두 번째 학습 벡터의 출력값은 모두 목표값과 같으므로 가중치의 변화가 없다. 그러나 세 번째 학습 벡터의 출력값은 1로, 목표값인 0과 다르므로 가중치를 수정한다.



네 번째 학습 벡터에 대한 출력값은 1로, 목표값인 1과 같으므로 현재 가중치를 그대로 유지한다. 세 번째 학습 벡터의 출력값이 목표값과 다르므로, 학습 벡터를 처음 학습 벡터로 설정하고 이 과정을 반복한다.


3-3) t = 3

아래의 현재 가중치를 갖는 퍼셉트론에 첫 번째부터 네 번째까지 학습 벡터를 입력하면 모두 목표값과 같으므로, 알고리즘을 종료한다. 퍼셉트론 학습의 목표는 모든 학습 벡터를 올바르게 분류하는 가중치를 구하는 것이기 때문에 현재 가중치를 반드시 별도의 저장공간에 유지해야한다. 이 예제를 통해 AND 연산을 올바르게 학습하게된 퍼셉트론의 가중치는 아래와 같다.