본문 바로가기

머신러닝

[파이썬 딥러닝]퍼셉트론

.퍼셉트론(perceptron)은 인공신경망의 한 종류로서, 1957년에 코넬 항공 연구소(Cornell Aeronautical Lab)의 프랑크 로젠블라트 (Frank Rosenblatt)에 의해 고안되었다. 이것은 가장 간단한 형태의 피드포워드(Feedforward) 네트워크 - 선형분류기- 으로도 볼 수 있다.

퍼셉트론이 동작하는 방식은 다음과 같다. 각 노드의 가중치와 입력치를 곱한 것을 모두 합한 값이 활성함수에 의해 판단되는데, 그 값이 임계치(보통 0)보다 크면 뉴런이 활성화되고 결과값으로 1을 출력한다. 뉴런이 활성화되지 않으면 결과값으로 -1을 출력한다.

마빈 민스키와 시모어 페퍼트는 저서 "퍼셉트론"에서 단층 퍼셉트론은 XOR 연산이 불가능하지만, 다층 퍼셉트론으로는 XOR 연산이 가능함을 보였다.


-위키백과


1. 퍼셉트론

퍼셉트론이란 신경망의 기초가 되는 이론입니다.

퍼셉트론은 크게 단층과 다층으로 나눌 수 있습니다.


일단 단층부터 알아보도록 합시다.


퍼셉트론에 대한 이미지 검색결과


이 퍼셉트론은 3개의 입력을 받습니다.


x1, x2, x3가 동그라미(뉴런 또는 노드라고 부릅니다)에 도착할 때 이 그림에서는 표시되지 않았지만 각각 고유한 가중치가 곱해집니다.

뉴런은 우리가 알고 있는 뉴런과 같이 신호가 한계를 넘으면 1을 출력하고, 이를 뉴런을 활성화 한다고 표현합니다.


가중치란 정확히 무엇일까요?

가중치는 입력이 연산 결과에 미치는 영향력을 조절하는 요소입니다.


여기서 우리는 이 간단한 퍼셉트론을 활용한 논리 게이트를 생각해 볼 수 있습니다.

논리 게이트들은 두개의 입력을 받아 한개의 출력을 냅니다.

우리는 이를 퍼셉트론을 이용해 구현 할 수 있겠죠?

2. AND, OR게이트 그리고 XOR

이 소스코드를 보면 x1, x2를 입력받아 가중치 w1, w2를 곱해서 입력의 총합이 임계를 넘으면 1을 반환하고 아니면 0을 반환합니다.


자, 기본적인 AND게이트를 구현했습니다.

이제 약간 복잡하게 만들어 보도록 합시다.

 

이 소스 코드에는 theta 라는 값이 있었습니다. 이제 이것을 편향 b로 바꾸어 봅시다. 임계값의 역할을 편향을 이용해 대체하는 것입니다.

다시 해석하게 된다면, 퍼셉트론은 신호에 가중치를 곱한 값과 편향을 합쳐 0을 넘으면 1을 출력, 아니라면 0을 출력하게 됩니다.

자, 이제 넘파이를 이용해 진행해 볼까요?


이 코드와 이전 코드의 주요한 차이점은 theta, 즉 임계값의 역할이 b로 표현되는 편향으로 대체되었다는 것입니다.


앞에서 가중치에 대해 설명했는데요, 편향과 가중치의 역할이 어떻게 다른지 확실히 짚고 넘어 가도록 합시다

가중치란, 입력이 얼마나 총합에 영향을 미치는가를 표현해 주는 값이고 편향이란 이 뉴런, 노드가 얼마나 잘 활성화 되는지 표현해 주는 값이라고 할 수 있습니다.


이로써 우리는 단층 퍼셉트론을 구현해 보았습니다.

AND게이트를 구현했다면 OR게이트나NOT 게이트도 만들어 보세요.


그런데, XOR게이트는 어떨까요?


3.XOR과 다층 퍼셉트론

결론부터 말하자면, 단층 퍼셉트론으로는 XOR게이트를 구현할 수 없습니다. 이는 마빈 민스키 교수님의 "퍼셉트론"이라는 책에서 증명되었습니다. 그 이유는 XOR게이트의 출력은 비선형이기 때문입니다. 
 여기서 난데없이 비선형이라는 말이 왜 튀어나오시는지 모르시겠나요? 위의 정의를 보면 퍼셉트론은 "선형 분류기"입니다. 특정한 입력에 대해 0과 1로 대답합니다.


                             


AND와 OR은 이렇게 표시 될 수 있습니다. 하지만XOR은 어떨까요? XOR은 1이 홀수인 경우에만 1을 내놓는 게이트입니다.

한개의 선으로는 분류할 수 없을 뿐더러 한개의 선으로 분류하려면 선형 분류가 되지 않고 곡선을 그리게 됩니다.


여기서 우리는 한개의 선이 아니라 여러개의 선을 사용한다는 것에 초점을 두어야 합니다. 바로 다층 퍼셉트론입니다.


XOR 게이트를 살펴 봅시다. 위키피디아에 따르면 다음과 같습니다.



이 게이트를 이전에 만든  AND와 OR, 그리고 NAND를 사용해 만들어 볼 수 있습니다.




참 쉽죠? 이 소스는 다음과 같은 다층 퍼셉트론을 표현합니다.


이와 같이 한개의 퍼셉트론으로 해결할 수 없는 비선형 분류 문제는 2층 이상의 다층 퍼셉트론으로 해결할 수 있습니다.


4. 퍼셉트론의 한계

지금까지 퍼셉트론을 보아 왔고 퍼셉트론이 충분히 많은 문제를 해결할 수 있는 가능성을 보아 왔다. 하지만 퍼셉트론은 신경망이 아니다.
왜일까? 다시 한번 생각해보자. 분명히 여러분은 신경망을, 뉴럴 네트워크를 공부하기 위해 글을 검색했을 것이다. 그렇다면 조금 이상하다. 분명히 신경망은 스스로 데이터를 학습한다. 하지만 퍼셉트론은 모든 변수를 사람이 조정한다. 이것이 바로 신경망이 퍼셉트론이 아닌 이유이다. 하지만 다층 퍼셉트론의 아이디어를 신경망 또한 사용한다는 것을 알아두자