본문 바로가기

ML

[ML] 딥러닝 1 - 2강 활성화 함수

※ 본 글은 한경훈 교수님의 머신러닝 강의를 정리, 보충한 글입니다. ※

[딥러닝 I] 2강. 활성화 함수 - YouTube

 


활성화 함수란?

입력 신호를 종합하여 출력 신호로 변환하는 함수를 활성화 함수(activation function)이라고 한다.

활성화 함수의 종류에는 heaviside, sigmoid, relu 등이 있다

지난 강의에서 배운 것처럼 실제 뉴런을 본뜬 활성화함수는 아래와 같다.

앞으로는 theta 대신 편향 b를 사용하는 오른쪽 그림을 사용하게 될 것!

 


heaviside(=step_funciton) 함수의 한계

heaviside 함수는 x축의 0을 기준으로 y 축 값이 0과 1로 나뉘어 있으므로

그 모양때문에 step_function 이라고도 불린다.

이런 heaviside 함수를 머신러닝에 적용하기에는 치명적인 단점이 있다.

바로 머신러닝은 미분을 통해 학습한다는 것.

상수를 미분하면 항상 0이고 심지어 heaviside는 0에서 미분이 불가능하므로

heaviside 함수를 활성화 함수로 사용하기엔 적합하지 않다.

 


Sigmoid 함수

heaviside 함수의 끊어진 부분을 부드럽게 이어준 함수라고 생각하면 된다.

0 또는 1로 출력이 나뉘는 heaviside 함수와 달리 sigmoid 함수의 출력은 0과 1 사이에서 이뤄진다.

 

 


heaviside 함수 구현

일반적으로 머신러닝의 입력은 벡터로 이뤄지므로, 입력받은 벡터에 대한 step_function을 구현해야 한다.

⇒ np.array([ ]) 이용

def step_function(x):
    return np.array(x>0,dtype=np.int)  # 0보다 크면 True(1), 작으면 False(0)

이때 벡터 x 에 대해 x>0는 일반 실수에 대한 연산일 뿐 아니라 벡터의 각 원소들에 대한 비교 연산이다.

ex. x = np.array([-1,1,2]) 일 때 print(x>0) 은 [False True True]가 출력된다.

dtype=np.int는 리턴된 boolean을 정수형으로 바꿔준다.

따라서 step_function(np.array([-1,1,2]) 는 [0,1,1]을 반환한다.

 


sigmoid 함수 구현

h(x) = 1/ (1+exp(-x))를 파이썬으로 구현하면 아래와 같다.

이때 exp는 e의 지수함수이다.

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

 


ReLU 함수

ReLU함수는 입력이 0을 넘으면 입력을 그대로 출력하고, 0이하이면 0을 출력하는 활성화 함수이다.

→ 0의 지점에서 미분이 불가능하다는 특징을 가지고 있다.

시그모이드 함수가 초기 딥러닝에서 많이 사용되었지만 후에 Vanishing Gradient문제가 커지면서 시그모이드보다 ReLU함수를 사용하는 경우가 늘어나고 있다.

def relu(x):
	return np.maximum(0,x)

'ML' 카테고리의 다른 글

[ML] 딥러닝 1 - 6강 손실함수  (0) 2021.07.23
[ML] 딥러닝 1 - 5강 신경망 구현  (0) 2021.07.23
[ML] 딥러닝 1 - 4강 MNIST  (0) 2021.07.17
[ML] 딥러닝 1 - 3강 인공신경망  (0) 2021.07.14
[ML] 딥러닝 1 - 1강 퍼셉트론  (1) 2021.07.11