본문 바로가기
컴퓨터&프로그래밍&머신러닝

[딥러닝] 퍼셉트론 - 가중치,편향치

by 토들백만장자 2020. 10. 28.

 

 

지난 포스팅에서 우리는 논리게이트를 통한 퍼셉트론의 예제까지 살펴보았다.

한발자국만 더 앞으로 나아가면 딥러닝의 개념을 이전보다 구체적으로 알 수 있을거라 믿는다.

(필자의 지나친 욕심일까....?)

 

앞으로 진행하기 위해 이번 포스팅 역시 지난 포스팅의 내용인 논리게이트의 예시를 짚고 넘어가야 한다.

논리게이트 문제를 파악하지 못했다면 아래 링크를 보고 같이 따라와주길 바란다.

 

지난 포스팅-논리게이트 구현 보러가기

 

[딥러닝] 퍼셉트론 - 논리게이트 #2

이전 포스팅을 보고와야 이해가 되므로 아래 링크를 먼저 보고 와주길 바란다. 논리게이트#1 포스팅 보러가기 [딥러닝] 퍼셉트론 - 논리게이트 #1 우리나라에 알파고(AlphaGo) 사태가 일어난 이래 4

toddlemillionaire.tistory.com

 

이전 포스팅을 쫓아온 독자에게 필자가 묻는다.

 

"논리게이트를 구현하는데 있어서 필자의 방식에 혹시 의문점이 들지 않았는가?"

 

구현방식을 쫓아하면서 위 질문을 필자에게 했으면 하는 바램이 있었다.

왜냐하면 필자의 방식 말고도 여러가지 방식을 통해서

AND게이트, OR게이트, NAND게이트가 구현 가능하기 때문이다.

 

AND게이트를 기준으로 먼저 살펴보겠다. 아래 그림은 필자가 제시한 방식인 X1+X2-1.5 직선을 기준으로 AND게이트를

구현한 모식도이다.

첫번째 AND게이트 방식

이 방식을 까탈스럽게 바라봐 보자.

'저 직선이 최선인가?'

 

질문에 대한 필자의 대답은 "아니다!" 이다.

 

다음 AND 게이트 예시를 살펴보자.

새롭게 제안된 AND게이트(보라색 실선)

처음에 제안된 AND게이트의 기준선(초록색 점선) X1+X2-1.5가 아닌 새롭게 제안된 기준선(보라색 실선)은

4X1+5X2-6이다. 새로운 기준선에 입력신호 X1, X2를 넣고 0보다 큰지, 아닌지를 판단해서 AND게이트가 구현되면

끝인것이다. 

 

짤막하게 구현해보자.

 

 

 

def AND_gate(x1,x2):
...     if 4*x1+5*x2-6 >= 0:
...             return True
...     else:
...             return False


>>> AND_gate(1,1)
True
>>> AND_gate(1,0)
False
>>> AND_gate(0,1)
False
>>> AND_gate(0,0)
False

 

 

 

이런 보라색 실선은 하나만 있지 않다. AND게이트를 구분짓는 특정영역 범위내에서 우리는 무수히 많은 직선식을

생각 할 수 있으며 이 직선식들은 모두 AND게이트의 각각의 기준선이 되는 것이다.

 

앞서 인공지능은 이런 신호들을 입력 받아 스스로 가공하고 사람이 원하는 신호를 출력하는 알고리즘이라고 말했다.

우리가 AND게이트 문제를 접했을때 필자가 직접 선보인 직선 수식을 구하는 방법이 아닌 인공지능이 스스로 위 기준을 충족하는 직선식을 찾게 만들었을때 비로소 인공지능을 개발했다고 말할 수 있다.

 

AND게이트를 인공지능이 풀게 하기 위해 사람이 문제를 내어 해결 할 수 있게 유도한다고 생각해보자.

 

사람: "어이! 인공지능씨! W1X1+W2X2 - B라는 수식을 알고 싶은데 말이야, X1과 X2가 1이면 수식이 0보다 크고

아니면 무조건 0을 내뱉는 W1, W2, 그리고 B를 찾아줄수 있겠나?"

 

인공지능이 위 문제의 답인 W1, W2, 그리고 B를 구하기만 하면 끝인거다. 이 방식이 인공지능이 문제를 푸는 것이다.

적절한 짝인 (W1, W2, B)를 구하는 구체적인 방법은 아마 다음 아니면 다다음 포스팅에 이야기를 할 것이니 기대하기 바란다.

 

잠시 옆으로 말이 샜는데, 사람의 질문에서 나온 수식을 한번 살펴보자.

저 수식을 간단하게 풀어쓸수 있다고 생각이 드는가?

 

입력신호 X1과 X2, 그리고 각각의 신호앞에 붙은 W1과 W2를 아래와 같이 묶어보자.

 

 

$X=\begin{bmatrix} X_{1}  & X_{2}  \end{bmatrix}, \; W=\begin{bmatrix} W_{1} \\ W_{2} \end{bmatrix}$

 

이렇게 묶어보면 그 질문은 다음과 같은 선형식 형태로 깔끔하게 정리된다.

$XW-B$

 

앞으로 우리는 X를 입력(input vector), W를 가중치 행렬(weight matrix), 그리고 B를 편향벡터(bias vector)라고 일컫겠다. 약속된 용어로 인공지능중 퍼셉트론을 달리표현하면 다음과 같다.

 

"퍼셉트론은 입력값에 따라 사람이 원하는 대로의 결과를 줄 수 있도록 하는 가중치 행렬과 편향 벡터의 방정식"

 

 

 

 

혹시 갑자기 난이도가 올라간것 같은가? 그렇다면 수학 카테고리내의 선형방정식 부분을 참조하여 공부해보도록 하자.

다음 포스팅에서는 본격적인 딥러닝으로 가기위한 다층퍼셉트론, 비선형방정식에 대한 이야기를 해보겠다.

 

 

P.S 위에서 가중치 '행렬'을 보고서 행렬이라는 표현에 대해서 의아해 할 수 있을 것이다. 본 포스팅의 출력값은 단일 스칼라 값으로 나오지만 출력값이 스칼라가 아닌 벡터나 텐서형태로 출력된다면 가중치 값은 벡터가 아닌 행렬 값으로 나와야 함을 생각해야 할 것이다.

댓글