꿈이 너무 많은 한 대학생의 공간

3. 멀티 인풋 뉴런 본문

인공지능/딥러닝 이론 및 파이썬 실습

3. 멀티 인풋 뉴런

청울울청 2020. 7. 5. 12:40

본 포스팅은 구름EDU 딥러닝 이론 및 파이썬 실습 (허민석) 을 참고하여 작성된 요약본입니다. 비전문가가 작성하였으므로 참고만 해주시길 부탁드립니다.

 

1. 멀티 인풋 뉴런이란?

 

싱글 인풋 뉴런에서는 f(p * w + b) = a(f는 활성 함수, p는 자극, w는 가중치, b는 편향)의 형태로 뉴런이 작동했습니다.

하지만 실제 뇌에서 작동하는 뉴런은 한 개 이상의 자극을 받는다. 그러므로 싱글 인풋 뉴런으로는 효과적으로 처리할 수 없다. 

싱글 인풋 뉴런과 큰 차이점은 없다. 단지 p가 하나 더 늘어났을 뿐이다.

즉 2개의 입력을 받는 멀티 인풋 뉴런은 다음과 같은 형태를 띈다.

f( (p1 * w1) + (p2 * w2) + b ) = a (이때 p1, p2는 자극, w1, w2는 가중치, b는 편향, f는 활성 함수이다.)

입력을 여러 개를 받아도 해당 입력을 일정한 가중치와 곱한 값을 모두 더하고, 편향을 더하는 단순한 구조이다.

아래부터는 싱글 인풋 뉴런과 멀티 인풋 뉴런을 통틀어 "퍼셉트론" 이라고 정의한다.

 

2. 인풋 뉴런에서의 판단 과정

 

만약 하나의 로봇이 있다. 이 로봇에게 사과와 야구공을 주고 "무엇이 사과이고 무엇이 야구공인지 찾아라" 라는 명령을 내리면, 로봇은 어떤 과정을 거쳐 판단을 내릴까? (이때 로봇은 손을 통해 물건의 모양과 질감을 느낄 수 있다)

 

제일 먼저 로봇은 두 가지의 입력값을 받아야 할 것이다. 손을 통해 물건의 모양과 질감을 느낄 수 있으니, 입력값에는 모양과 질감이 입력되게 된다. 이 입력만을 통해 로봇이 어떻게 판단할 수 있을까?

 

모양을 shape, 질감을 texture 라고 하고, shape = 1 일때 물체의 모양은 둥글고 shape = 0 일때 물체의 모양은 각지다.

texture = 1 일때 물체의 질감은 딱딱하고 texture = 0 일때 물체의 질감은 딱딱하다. (매끄럽지 않다.)

 

이때 사과와 공을 각각 위와 같이 표현한다면 사과는 (1, 1) , 공은 (1, 0) 이 될 것이다.

그 후 활성 함수를 거쳤을 때 나오는 값이 1이라면 사과,  0이라면 공이라고 로봇에게 정의한다면,

shape에 대응하는 가중치 w1을 0으로 놓고 texture에 대응하는 가중치 w2를 1로 둔 뒤 편향을 -1로 두자. (이 가중치 및 편향은 그저 예시로 두었을 뿐, 입력값에 따라 변화시킬 수 있다.)

그렇다면 뉴런은 f((shape * w1 + texture * w2) + b) = a 의 형태가 된다.

만약 로봇에게 사과를 준다면 f((1 * 0 + 1 * 1) - 1) 가 되므로, 결국 f(1-1) = f(0), a값(함수값)은 1이 나오게 된다.

로봇에게 a값이 1이라면 사과라고 했으므로 로봇은 사과라고 판단하는 것이다.

반대로 공을 준다면 f((1 * 0 + 0 * 1) - 1) 이 되므로 f(-1) = 0, 즉 공으로 판단하게 되는 것이다.

또다른 경우인 럭비공을 준다고 하자. 럭비공은 둥글지도 않고 매끈하지도 않다. 즉 (0, 0) 이다.

f((0 * 0 + 0 * 1) - 1) = a 일때 f(-1) 이므로 결국 a값은 0, 사과가 아님을 나타낸다.

 

비록 모든 경우에서 성립한다고 보장할 순 없지만, 주어진 테스트케이스에 따라서는 정확한 판단을 하는 것을 알 수 있다. 

 

3. AND 논리 연산

 

AND 논리 연산을 판단하는 뉴런을 구성해보자.

A와 B를 입력값으로 받으며, 각각 w1, w2 가중치가 곱해지게 된다. 편향값은 0으로 존재하지 않으며, 활성 함수는 1 이상의 인자값을 받으면 1을 리턴하고, 아니면 0을 리턴하는 활성 함수라고 정의하자.

 

A가 0, B가 0일때 f((0 * 0.6) + (0 * 0.6)) = f(0) 이므로 f(0)은 0을 리턴한다. 즉 A와 B를 AND 연산하면 0, 거짓이 나오게 된다.

A가 0, B가 1일때 f((0 * 0.6) + (1 * 0.6)) = f(0.6) 이다. 이때 f는 인자값이 1 이상일 떄에만 1을 리턴하므로 0을 리턴한다. 즉 A와 B를 연산하면 0, 거짓이 나오게 된다. (윗줄에서의 A, B와는 다르다!)

A가 1, B가 0일때도 동일하니 생략한다.

A가 1, B가 1일때 f((1 * 0.6) + (1 * 0.6)) = f(1.2) 이므로 1.2는 1보다 크다. 즉 f는 1을 리턴한다. 그러므로 A와 B를 AND 연산하면 1, 참이 나오게 되는 것이다.

 

4. OR 논리 연산

 

OR 논리 연산을 구현해보자. 환경은 AND 논리 연산과 같으며, 가중치만 다르게 정의한다.

이떄 A와 B에 각각 곱해지는 w1, w2 가중치를 1.1 이라고 놓자. 

 

A = 0, B = 0 일때 f((0 * 1.1) + (0 * 1.1)) = f(0) 이므로 f는 0을 리턴한다.

A = 1, B = 0 일때 f((1 * 1.1) + (0 * 1.1)) = f(1.1) 이므로 f는 1을 리턴한다.

A = 1, B = 1 일때 f((1 * 1.1) + (1 * 1.1)) = f(2.2) 이므로 f는 1을 리턴한다.

즉 A와 B 사이에서의 OR 연산이 성공적으로 수행됨을 알 수 있다.

 

5. XOR 논리 연산

 

다만,  XOR 연산은 하나의 퍼셉트론으로는 구현이 불가능하다. 싱글 퍼셉트론은 좌표평면으로 값을 구현했을 때 하나의 선으로 구분짓는 것이 가능하다.

이미지 출처 : 구름EDU 딥러닝 이론 및 파이썬 실습 (허민석) 

1번째 이미지는 AND, 2번째 이미지는 OR, 3번째 이미지는 XOR 연산을 좌표평면으로 구현한 것이다.

AND와 OR에서는 하나의 선으로 경우를 구분하는 것이 가능했지만 XOR에서는 하나의 선으로는 구분짓기 힘들다.

이를 해결하기 위해서 하나의 퍼셉트론에서 이를 분류하는 것이 아닌 두 번의 연산을 통해 그 결과로 분류하는 방법이 개발되었다. 3강에서 이어진다.

Comments