[Tensorflow] 2-5 Relu

Problem of Sigmoid


모델이 학습을 하는 과정을 살펴보자



외부로 부터 들어온 Input 을 Network를 통과시켜 Output을 얻어내고 실제값 (ground-truth)과의 차이를 loss로, loss를 미분한 값(gradient)을 사용해 Backpropagation방식으로 학습이 진행된다. 이때 sigmoid activation function을 사용하게 되면 이 gradient 값이 좌, 우 극단 좌표계에서는 거의 0에 가까워진다. Neural Network에서 학습할 때 0에 가까운 gradient값이 한두개라면 학습에 문제가 없겠지만, sigmoid function들이 많아지고 0에 가까운 gradient 값들을 전달받으면서 결국 계산된 기울기 값이 0이 되어 버린다. 이를 Vanishing Gradient라고 한다. sigmoid의 문제를 해결하기 위해 사용되는 것이 Relu이다.

Relu Function



0보다 클 때는 x를 그대로 반환하고 0보다 작은 경우 0을 반환한다. 문제가 있다면 0보다 작을때는 모두 0을 반환하는 것이다. 하지만 이 간단한 함수가 엄청난 성능 향상을 가져오기 때문에 많은 사람들이 사용하는 함수이다.
Relu이외에도 tf.keras.activations 내에는 다양한 함수들 : sigmoid, tanh(하이퍼 탄젠트), elu, selu 등이 있으므로 성능차이를 확인해 보는것도 좋다.
위에서 언급한 relu 의 단점을 보완하기 위해서 사용할 수 있는 것은 tf.keras.layers에 있는 leaky relu 함수이다. 모듈의 패키지가 다르므로 주의하도록하자. leaky relu의 경우는 0보다 작을때 0이 아닌 아주 작은 지정된 알파 값을 곱한 값을 반환한다.


No comments:

Powered by Blogger.