ML - 퍼셉트론(Perceptron)
0. 개요
최근 자연어처리에는 딥러닝 기술을 많이 사용한다. 이 중 퍼셉트론은 인공지능(AI) 중 가장 오래된 알고리즘 중 하나이다. 결과적으로 보면 퍼셉트론은 '단순한 선형분류기'라는 한계 때문에 사람들의 기대를 모은 만큼의 결과를 보여주지 못하고 사그라들었으며 인공신경망 연구는 다시금 얼어버리게 된다.
1. 퍼셉트론 사전적 의미(위키피디아)
퍼셉트론(perceptron)은 인공신경망의 한 종류로서, 1957년에 코넬 항공 연구소(Cornell Aeronautical Lab)의 프랑크 로젠블라트 (Frank Rosenblatt)에 의해 고안되었다. 이것은 가장 간단한 형태의 피드포워드(Feedforward) 네트워크 - 선형분류기- 으로도 볼 수 있다.
2. 퍼셉트론
2-1. 퍼셉트론과 뉴런
퍼셉트론은 우리가 고등학교 생물시간에 배웠던 뉴런과 비슷한 모양이다. 뉴런과 퍼셉트론은 <그림1>처럼 생겼다. 뉴런은 왼쪽 돌기같은 부분에서 여러 전기 신호를 받아 하나로 합해준 뒤에 오른쪽으로 전달해주고 퍼셉트론도 왼쪽에서 input 값을 받아 처리를 해준뒤에 오른쪽으로 값을 전달해주는 방식으로 퍼셉트론이 인간의 신경망인 뉴런과 매우 유사하다는 것을 알 수 있다.
<그림1> 뉴런과 퍼셉트론
2-2. 연산
<그림1>의 오른쪽은 n개의 입력을 받는 퍼셉트론이다. x1, x2, ... 는 입력신호를 뜻하고, w1, w2, ... 는 각 입력의 가중치를 나타낸다. 가중치는 각 입력마다 다를 수 있으며 가중치가 클 수록 그 입력이 상대적으로 더 중요하다는 의미를 갖는다. 각각의 입력신호들은 각 가중치들과 곱해진 뒤 총합을 하는데 이 총합이 정해진 선을 넘을 때 다음 신호로 값을 전달한다. 이것을 식으로 나타내면 <그림2> 처럼 된다. 여기에서 threshold 는 정해놓은 임계값이라고 보면 된다.
<그림3>은 퍼셉트론에서 사용하는 활성함수(activation function)이다. 퍼셉트론에서 사용하는 활성함수는 계단함수 라고도 한다. 생긴 모양을 보면 계단처럼 생겼다. 그래프의 x축 값이 입력신호와 가중치를 합한 값이고, y축 값이 output이다. x축 값이 0으로 일정하다가 어느 순간 1로 바뀌는 구간이 있는데 이게 입력신호와 가중치의 곱을 합한 값이 임계치를 넘었을 때 이다.
<그림2> 퍼셉트론 식
<그림3> activation function>
2-3. 학습
퍼셉트론은 선형분리자이다. 선형분리자란 선형(직선)으로 두개의 값들을 서로 분리해준다고 간단히 이해하면 쉽다. 퍼셉트론의 학습은 간단한 방식으로 진행된다.
1. 초기 벡터에 수직인 직선을 하나 찾는다.
2. 데이터를 받아와 찾은 직선과 비교한다. (직선보다 위에 있는지 아래에 있는지)
3. 답이 맞으면 다음 데이터를 불러와 비교한다.
4. 답이 맞지 않으면 들어온 데이터까지의 벡터를 구하고, 새로운 벡터에 러닝레이트를 곱해준다.
5. 기존의 벡터에 새로운 벡터를 더해준 다음 분리의 기준이 되는 새로운 직선을 찾는다.
6. 반복
그림으로 보면 이해가 빠르다. **빨간 점은 분리자의 위, 초록 삼각형은 분리자의 아래가 정답으로 가정
-첫번째 값이 들어왔을 경우-
첫 번째 : 초기 벡터와
두 번째 : 빨간점이 아래로 내려와있다.(오답) 벡터를 기존의 벡터와 더해줌
세 번째 : 새로운 벡터로 분리자를 새로 찾아줌
-두 번째 값이 들어왔을 경우-
첫 번째 : 초록 삼각형 오답.
두 번째 : 벡터를 기존의 벡터에서 빼줌
세 번째 : 새로운 벡터로 분리자를 새로 찾아줌
이런 짓들을 반복하다 보면 아래 그림과 같은 결과를 얻을 수 있다.
2-4. 한계
퍼셉트론은 인공지능에서 많은 기대를 모았지만 결국은 선형분리자라는 한계때문에 그 인기는 급속도로 식었다. 위 그림과 같이 일정하게 모여있는 데이터들에 대해서는 좋은 결과를 보여주지만 직선으로 구별할 수 없는 XOR 문제나 곡선으로 모여있는 데이터들에 대해서는 분류를 하지 못하는 상황이 발생한다.
<그림4>
3. 참조
https://ko.wikipedia.org/wiki/%ED%8D%BC%EC%85%89%ED%8A%B8%EB%A1%A0
http://solarisailab.com/archives/1206
https://bitsdroid.com/history-of-machine-learning/perceptron/