Data/ML

Deep Learning(딥러닝) - 3.활성화 함수(Activation Function)

뚱요 2021. 10. 16. 00:00
반응형

활성화 함수(Activation Function)

임계값에 따라서 입력 신호의 총합을 출력 신호로 변환하는 함수 h(x)

딥러닝에서 비선형 함수를 사용함으로써 비선형성을 증가시키는 역할을 함

(1) Linear function 선형 함수

 

f(x) =a+bx

:(  층을 아무리 깊이해도 은닉층이 없는 네트워크로도 똑같은 기능 할 수 있음

h(x) =cx를 사용하는 3층 네트워크

y(x) =h(h(h(x))) =c*c*c*x= c^3x=ax  (if a=c^3) 

여전히 선형 함수형태임을 알 수 있다.

 

(2) non-linear fucntion 비선형 함수 : 다층 신경망에서 층이 많아질수록 비선형 함수가 더 중요함

 

(2.1) Binary Step function (이진 계단 함수):

0,1 사이에서 값이 0을 기준으로 크면 1 작으면 1로 이진 출력(이산형)

한계: 다중 출력을 할 수 없다, 미분이 불가능하여 역전파를 통한 학습이 불가능하다.

계단 함수 코드 구현

def step_function(x):
	if x>0:
    	return 1
    else:
    	return 0
        
        
def step_funciton(x):
	y=x>0           # 해당 조건에 따라 bool배열 ;boolean type array
    return y,astype(np.int) #bool => integer 예.True =1 , FAlse=0
import numpy as np
x= np.array([-1.0, 1.0, 2.0])
step_function(x)  #array([0,1,1])

 

(2.2) Sigmoid (시그모이드 함수):

0,1 사이에서 값이 0에 가까울수록 0에 가까워지고 1에 가까워지는 실수 출력(연속형)

함수가 연속성을 갖고 있어 모든 구간에서 미분가능

문한계: 입력값이 아무리 크더라도, 출력되는 값의 범위가 매우 좁기 때문에 경사하강법 수행 시에 범위가 너무 좁아, 0에 수렴하는 기울기 소실(Gradient Vanishing)이 발생

-계단 함수의 부드러운 s형태와 유사

시그모이드 함수 코드 구현

def sigmoid(x):
	return 1/(1 + np.exp(-x))
    
 x= np.array([-1.0, 1.0, 2.0])
 sigmoid(x)  # 0.268 , 0.731, 0.88]

 

(2.3) ReLu(Rectified Linear Unit, 렐루) :

0 기준으로 작으면 0 크면 값 그대로(예. x=5 , 5로 출력, x=-1이면 0)

sigmoid의 vanishing gradient 문제를 해결하기 위해 나옴

한계:  음수 값들이 모두 0이 되면서 역전파에서 제대로 학습이 이루어 지지 않음

렐루 함수 코드 구현

def relu(x):
	return np.maximum(0,x)# 최대값 반환

(2.4) Leaky ReLu(Leaky Rectified Linear Unit, 리키 렐루) 

dying relu 문제를 해결하기 위해, 음수를 일부 반영하도록 ReLU를 변형시킨 함수 중 하나

0 기준으로 작으면 값에서 1/10 곱하고 크면 값 그대로(예. x=5 , 5로 출력, x=-1이면 -0.1 로 출력)

리키 렐루 함수 코드 구현

def leaky_relu(x):
	return np.maximum(0.1x ,x)# 최대값 반환

 

(2.5) 소프트 맥스(Softmax)

데이터가 어떤 클래스에 속하는지 분류 중 2개 이상의 클래스를 분류할때 출력하는 함수

  •  모든 출력층의 합  1
    • 확률과 같은 개념으로 해당 데이터 i번째 클래스일 경우의 확률로 해석 가능

  • 0 <softmax(xi)<1 사이 실수 값을 가짐
  • 분모는 모든 출력층의 뉴런의 모든 입력 신호의 합(영향을 받기 때문)
  • Mutually Exclusive: 클래스 분류 중 오직 하나만 있음.(확률로 표현하기 때문에 가장 큰 값 선택)
  • 분류 개수 = 출력 층수
  • overflow e^x, x가 특정값 이상이면 inf로 계산되므로 계산 수치가 불안정해지기 때문에 최댓값을 각 원소에 제하여 계산.
    • 예.  [1010, 1000, 900]에서 최댓값 1010을 각 원소를 빼며 [0, -10, -20], 이를 exp취하면 문제 피할 수 있음
""" Softmax: Overflow 문제
 
"""
def new_softmax(a) : 
    c = np.max(a) # 최댓값
    exp_a = np.exp(a-c) # 최댓값 뺀 값에 exp. ( overflow 대첵)
    sum_exp_a = np.sum(exp_a)
    y = exp_a / sum_exp_a
    
    return y
    
a = np.array([1010, 1000, 990]) 
print (softmax(a)) # [0.018, 0.245, 0.737]

이 외에도 ELU, tanh이 있다.

[위키피디아]  더 많은 활성화 함수 그래프 와 식 

 

Activation function - Wikipedia

For the formalism used to approximate the influence of an extracellular electrical field on neurons, see activating function. For a linear system’s transfer function, see transfer function. Logistic activation function In artificial neural networks, the

en.wikipedia.org

 

(3) 회귀

데이터 바탕으로 수치 예측

(3.1) 항등 함수(identity function)

 입력 그대로 출력 예. f(x)= x

 

 

 

Reference 

https://towardsdatascience.com/backward-propagation-for-feed-forward-networks-afdf9d038d21

https://glassboxmedicine.com/2019/05/26/classification-sigmoid-vs-softmax/

반응형