rueki

2. Activation Function 본문

DL

2. Activation Function

륵기 2020. 2. 18. 14:43
728x90
반응형

활성화 함수란 각 노드들에 들어오는 값들에 있어서 그 다음 노드로 값을 전달할 지, 안 할지 기준이 되는 함수이다.

주로 비선형 함수로 구성이 되어있으며 많이 언급되는 함수는 Sigmoid와 Relu 함수이다.

 

Sigmoid Function

Logistic 함수로도 하며, Non-linear 함수이다.

시그모이드의 특징은 범위가 0과 1로 제한됨에 따라, 기준은 0.5이다

입력 값이 0.5 이상이면 1, 0.5 이하면 0으로 출력이 된다.

이와 같은 특징으로 binary classification에서 많이 볼 수가 있다. 확률 값이 들어왔을 때, 출력은 1아님 0이 나오기 때문이다.

 

그러나 Sigmoid의 단점으로는 Gradient Vanishing이 발생한다.

뉴럴 네트워크는 역전파 학습을 토앻서 모델이 학습이 되는데, 역전파 수행 시, 레이어의 가중치와 편항들은 Sigmoid에 의해 영향을 받게 되는데, 예로 10개의 레이어가 있을 때, sigmoid에 적용된 숫자를 10번 곱하게 되면 즉 0과 1사이의 소수점을 갖고있는 값들이 제곱될 때 0.0000000... 의 값을 가지게 됨에따라 가중치와 편향의 변동이 적어지는 문제이다.

 

이를 해결하기위해 등장한 것이 Relu(Rectified linear unit)이다.

Relu의 특징으로는 X >0 이면 기울기가 1인 직선이고, X<0이면 함수값이 0이 된다.

이로인해 시그모이드보다 학습이 훨씬 빠르게 이루어진다.

출력되는 값의 범위가 무한대이므로 Backpropagation 수행 시 초기 레이어의 weight 값과 bias 값을 변동하는데 용이하다.

 

def relu(input):
    output = max(0, input)
      
    return(output)

weights = {'node_0' : np.array([3,3]),
           'node_1' : np.array([1,5]),
           'output' : np.array([2,-1])
          }


node_0_input = (input_data * weights['node_0']).sum()
node_0_output = relu(node_0_input)


node_1_input = (input_data * weights['node_1']).sum()
node_1_output = relu(node_1_input)


hidden_layer_outputs = np.array([node_0_output, node_1_output])


model_output = (hidden_layer_outputs * weights['output']).sum()


print(model_output)

Relu 함수를 Max()를 이용해서 구현했다. Relu의 특성은 0보다 작으면 0으로 나머지는 선형적 증가를 보이기 때문에

입력으로 값이 들어왔을 때, 이를 0과 비교하면 된다.

728x90
반응형

'DL' 카테고리의 다른 글

딥러닝 Optimization 함수 정리  (0) 2020.08.26
Batch Normalization  (0) 2020.07.05
Adam Optimizer (adaptive moment estimation)  (0) 2020.07.05
RNN과 LSTM에 대해서 알아보자  (0) 2020.04.04
1. Forward Propagation  (0) 2020.02.18
Comments