* 이 글은 홍콩과기대 김성훈 교수님의 무료 동영상 강좌 "모두를 위한 머신러닝과 딥러닝 강의"를 보고 요점을 정리한 글 입니다.
ReLU(Rectified Linear Unit)
복잡한 문제를 해결하기 위해서는 많은 Layer를 가지고 있는 Neural Network(신경망)를 사용해야합니다. 각각의 Layer에서는 Weight(가중치)와 Bias를 적용시켜서 계산해 주어야 하고 계산한 값을 Activation Function(활성화 함수)을 통해서 한번 바꾸어준 뒤 다음 Layer로 넘겨주어야합니다. 모든 Layer를 계산하고 도출된 마지막 결과값은 0과 1사이의 값이 나와야하기 때문에 Activation Function으로 Sigmoid Function(시그모이드 함수)을 사용해야합니다. 하지만 이것은 마지막 Layer에서의 Activation Function으로 Sigmoid Function이 필요하다는 의미이지 내부의 다른 Layer들의 Activation Function을 모두 Sigmoid Function을 사용해야 한다는 의미가 아닙니다. 만약 많은 Layer를 갖는 Neural Network의 모든 Layer의 Activation Function을 Sigmoid Function으로 사용한다면 아마 결과값은 좋지 않게 나올 것입니다. 이것은 Sigmoid Function의 0과 1사이의 값이 나온다는 특성과 관계가 있습니다.
많은 Layer를 갖는 Neural Network를 학습하려면 BackPropagation(역전파)을 사용해야 합니다. 이때 Back Propagation은 각각의 단계에서 나온 값을 미분한 뒤 Chain Rule(연쇄 법칙)을 통해서 계산합니다. 만약 내부의 모든 Layer의 Activation Function이 Sigmoid Function이라면 각 단계에서 계산된 값은 모두 0과 1 사이의 값이 될 것이고 Neural Network가 많은 Layer를 갖게 된다면 초기 입력값은 각각의 Layer에서 나온 값들을 곱하여준 만큼의 결과에 영향을 끼치는 것이기 때문에 그 값이 매우 작아지게 됩니다. 이러한 현상을 Vanishing Gradient(기울기 소실)라고 합니다. 이런 현상 때문에 내부의 Layer에 적용되는 Activation Function을 Sigmoid Function이 아닌 다른 함수로 사용하게 됩니다.
여러개의 Activation Function이 있지만 주로 사용하는 함수는 바로 ReLU(Rectified Linear Unit) Function 입니다. ReLU Function의 그래프 모형은 왼쪽의 그림과 같고 이 함수를 수식으로 표현하면 Equation (1)과 같습니다.
$$ f(x) = max(0,x) $$ | (1) |
이 함수는 0보다 작은 값이 나온 경우 0을 반환하고, 0보다 큰 값이 나온 경우 그 값을 그대로 반환하라는 의미를 가지고 있습니다.
많은 Layer를 갖는 Neural Network에서 내부에 있는 Layer에는 Activation Function으로 이 ReLU Function을 사용해주고 마지막 결과를 받는 Layer에는 Sigmoid Function을 사용한다면 이전에 비해서 정확도가 훨씬 올라가는 것을 확인할 수 있습니다.
Activation Function으로는 Sigmoid Function, ReLU Function 이외에도 tanh Function, Leaky ReLU Function, Maxout Function, ELU Function 등이 있습니다.