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

[딥러닝] 퍼셉트론 출력신호 조절 - 활성화 함수

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

이번 포스팅도 꾸준히 앞선 포스팅에서부터 연속된 내용이다. 

퍼셉트론 개념부터 시작하므로 역시나 이해가 부족하면 이전 포스팅서부터 같이 와주길 바란다.

 

>>>이전포스팅 보러가기

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

지난 포스팅에서 우리는 논리게이트를 통한 퍼셉트론의 예제까지 살펴보았다. 한발자국만 더 앞으로 나아가면 딥러닝의 개념을 이전보다 구체적으로 알 수 있을거라 믿는다. (필자의 지나친 욕

toddlemillionaire.tistory.com

 

지금까지의 퍼셉트론의 출력신호를 참(1)과 거짓(0), 단 두 가지로 분류했다. 

그런데 앞으로 이야기할때 복잡한 인공지능 신경망을 분석 할 때 신경망의 신호가 이진 분류 체계로만 구성된다면 인공신경망이 섬세한 신호를 놓치는 부분이 있을 수 있다. 

 

출력값이 0.01, 0.37, 0.86 등 실수형태의 신호를 출력하도록 퍼셉트론을 만들어보는 것이 이번 포스팅의 목표다. 

 

뜬금없지만 Step function이라고 하는 "계단함수"를 살펴보자.

 

 

Step function, 출력 결과값이 0과 1 이진분류로 되어있다.

 

구현하는 방식은 굉장히 간단하다. 입력신호가 0보다 크거나 같으면 출력은 1, 그렇지 않으면 출력을 0.

파이썬으로 함수를 구현하면 다음과 같다.

 

def Step_function(x):
	if x >= 0:
		return 1
	else:
		return 0

 

위 구문에서 입력신호가 0보다 크다 작다 등의 조건문이 들어간 부분이 퍼셉트론의 출력신호를 보낼지 말지와 연결되는 부분이다.  두개의 입력 신호를 기준으로 가중치와 편향의 선형결합 식을 아래와 같이 써보자.

 

$Y = XW+B$                  식 1.

 

식 1.의 좌변 Y를 위의 Step function에 넣으면 AND게이트, NAND게이트 처럼 되는 것이다. 

(물론 게이트 종류에 따른 가중치 행렬, 편향치는 지금단계에선 우리가 잘 조절해 줘야 한다) 

 

$Result = f_{step}(Y)$         식 2.

 

위와 같이 퍼셉트론의 최종신호를 얻기 위해 계단함수가 선형방정식에 적용되었다.

이 계단함수가 바로 딥러닝하는 사람들이 이야기하는 활성화 함수(Activation function)의 정체다!

 

지금까지 본 계단함수는 그 결과를 이진분류 해주는 활성화 함수의 역할을 해준다. 포스팅의 서두에서 출력신호를 연속적으로 출력하기위해선 다른 종류의 함수가 필요하다고 언급하였다. 그 대안으로 계단함수와 비슷하지만 연속적인 값을 출력하는 시그모이드 함수(Sigmoid function)를 이용 할 수있다.

 

 

Sigmoid function, 출력신호가 연속분포로 되어있다.

 

위 시그모이드 함수의 개형처럼 출력결과는 (0,0.5) 값을 점 대칭으로 0에서부터 1까지 연속적으로 분포한다. 시그모이드 함수는 알파벳 S와 유사한 형태로 나중에 이야기 할 부분이지만 인공지능이 특정 사건이 일어날지 일어나지 않을지 확률을 예측할때 매우 유용하게 이용될 함수이다.

 

수식을 기반으로 파이썬코드로 시그모이드 함수를 구현해보자. 참고로 exponential값을 구하기 위해 numpy라이브러리를 이용했다!(import numpy as np)

 

def Sigmoid_function(x):
	return 1/(1+np.exp(-x))

 

이전 포스팅에서 새롭게 제안한 AND게이트 수식을 sigmoid값으로 치환하면 

$Y=4X1+5X2-6$
$X1=1, X2=1$일 때,

Sigmoid 출력값은 

 

>>>Y = 4*1+5*1-6
>>>Sigmoid_function(Y)
0.9525741268224334

 

0.9525값으로 신호가 매우 강하게 출력됨을 확인하였다. Sigmoid가 0.5에 근접하면 갈 수록 이진분류를 하기에 애매한 결과이며 0이나 1에 가까울수록 이진분류가 강조된 신호다 라고 해석하면 되겠다. 

 

활성화 함수는 시그모이드 함수이외에도

 

- Relu

_ Selu

- Tanh

- Elu

- Leaky_relu

.

.

.

굉장히 다양한 형태의 함수들이 있다(y=x같은 일직선식만 아니면 된다!). 인공지능 문제형태나 예측결과 성능에 이러한 활성화 함수들이 어떤 영향을 미치므로 상세히 연구해보는 것도 굉장히 재미있을것이다. 여기서는 모든 함수를 하나하나 다 살펴보는것은 지루할것 같으므로(사실 필자도 사람이니까 자야한다 ㅇㅅㅇ;;) 이 부분은 독자들에게 맡기는 바이다. 

 

다음 포스팅은 지금까지 보았던 개념을 복습하는 차원으로 XOR게이트를 적절한 Activation function으로 구현해보며 리뷰하는 내용이 될것이다. 흥미있게 보았다면 차근차근 봐주길 바란다.

 

 

 

 

P.S 포스팅을 4번째 하는 단계에와서 블로그에 코드스타일을 넣는 법을 알았다. 포스팅 결과물을 보면서 왜 이쁘게 나오지 않는지 이유를 몰랐는데 이제라도 알게되어 다행이다!

 

댓글