딥러닝에서 많이 사용되는 활성화 함수 (activation function)와 비활성화 함수(deactivation function)

 본 글에는 딥러닝에서 사용하는 활성화 함수와 역전파(backward propagation)과정에서 사용되는 비활성화 함수의 python, c 코드가 실려 있다. 


1. relu , leaky-relu


python code

def relu(x):
    if x > 0:
        return x
    return 0

def deactive_relu(x):
    if x > 0:
        return 1
    return 0

def leaky_relu(x):
    if x > 0:
        return x
    return x*0.01

def deactive_leaky_relu(x):
    if x > 0:
        return 1
    
    return 0.01


c code

static double ReLU(double x)
{
   if (x > 0) return x;
   return 0;
}

static double DeActivateReLU(double x)
{
   if (x > 0) return 1;
   return 0;
}

그래프로 표시하면 아래와 같다.


def show_relu():
    x = np.arange(-10,10,0.1)
    y = [relu(i) for i in x]
    
    plt.title('relu')
    plt.plot(x,y)
    plt.show()
    
    y = [deactive_relu(relu(i)) for i in x]
    plt.title('deactivated relu')
    plt.plot(x,y)
    plt.show()


2. sigmoid


python code

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

def deactive_sigmoid(x):
    return x*(1-x)


c code

static double Sigmoid(double x)
{
    return 1.0 / (1 + exp(-x));
}

static double DeActivateSigmoid(double x)
{
    return x * (1.0 - x);
}


sigmoid의 Deactivation함수는 sigmoid(x)(1.0-sigmoid(x))가 된다. 이를 그래프로 표시하면 아래와 같다.


def show_sigmoid():
    x = np.arange(-10,10,0.1)
    y = [sigmoid(i) for i in x]
    plt.title('sigmoid')
    plt.plot(x,y)
    plt.show()
    
    y = [deactive_sigmoid(sigmoid(i)) for i in x]
    plt.title('deactivated sigmoid')
    plt.plot(x,y)
    plt.show()


3. tanh


python code

def tanh(x):
    return np.tanh(x)

def deactive_tanh(x):
    return 1-x*x


c code

static double ActivateTanh(double x)
{
   return tanh(x);
}

static double DeActivateTanh(double x)
{
   return 1.0 - (x*x);
}


tanh의 Deactivation 함수는 1.0-tanh(x)^2이 되며, 그래프는 아래와 같다.

def show_tanh():
    x = np.arange(-10,10,0.1)
    y = [tanh(i) for i in x]
    plt.title('tanh')
    plt.plot(x,y)
    plt.show()
    
    y = [np.tanh(i) for i in x]
    y = [deactive_tanh(tanh(i)) for i in x]
    plt.title('deactivated tanh')
    plt.plot(x,y)
    plt.show()


댓글

이 블로그의 인기 게시물

간단한 cfar 알고리즘에 대해

간단한 칼만 필터(Kalman Filter) 소스 코드와 사용 예제

Embedded Linux USB Ethernet Gadget 사용하기

uwb 레이더를 사용한 물체의 2차원 위치 측정 원리

쉽게 설명한 파티클 필터(particle filter) 동작 원리와 예제