useful clutter

[CS231n]Lecture 6-Training Neural Networks, Part 1 - 1st

|

Lecture 6-Training Neural Networks, Part 1와 강의자료를 참고하여 개인적으로 정리한 글입니다.

이번 강의에서는 neural network를 학습시키는 과정과 관련 내용에 대해서 공부한다. 신경망 학습 과정은 아래와 같이 정리할 수 있다.

  1. One time setup (초기 설정)
    • Activation Functions
    • Data Preprocessing
    • Weight Initialization
    • Regularization
    • Gradient Checking
  2. Training dynamics (신경망 학습)
    • Babysitting the Learning Process
    • parameter Updates
    • hyperparameter Optimization
  3. Evaluation (모델 평가)
    • Model ensembles

6,7강에 걸쳐 위의 내용을 살펴볼텐데, 이번 강의에서 다룰 내용은 다음과 같다.

  • Activation Functions
  • Data Preprocessing
  • Weight Initialization
  • Batch Normalization
  • Babysitting the Learning Process
  • Hyperparameter Optimization

Activation Functions

간단히 요약하자면, activation function(활성함수)은 데이터 속 복잡한 패턴을 신경망이 잘 학습하도록 돕는 역할을 한다. 활성함수는 하나의 layer의 말단에 존재하면서 전달받은 input(입력값)을 다음 layer로 전달(활성화)할지 말지 결정한다고 볼 수 있다. 생물학적 신경 구조에서의 뉴런과 비슷한 셈이다.

뉴런과의 생물학적 유사성은 차치하더라도 활성함수가 꼭 필요한 데에는 몇 가지 이유가 있다.

  1. 활성함수는 $Wx+b$로 연산되어 전달받은 입력값을 restrict한다. 만약 값이 통제되지 않는다면 수백만의 파라미터를 가진 깊은(deep, layer가 많은) 신경망 모델에서는 매우 큰 값이 출력될 수 있다(explode). 그래서 치역이 제한된 활성함수를 사용하기도 한다.

  2. 가장 중요한 역할은 신경망에 비선형성을 부여하는 것이다. 아래의 흡연자와 비흡연자를 판별하는 문제를 생각해보자.

세가지 feature가 있다고 했을때, 선형 분류기만으로는 절대 흡연자와 비흡연자를 잘 분류해낼 수 없다. 패턴 자체가 비선형이기 때문이다. 그렇다면 선형 분류기를 여러개 쌓으면 되지 않을까? 뒤에서 설명하겠지만 활성함수 없이 여러 층을 쌓아도 결국 하나의 선형 분류기를 사용하는 것과 동일하게 된다. 결국 모델이 복잡한 패턴을 학습하게 하기 위해 층 사이사이에 비선형 구조를 넣어줄 필요가 있고, 그 역할을 활성함수가 수행한다.

활성함수의 역할을 알아보았고, 이제 어떤 함수가 활성함수로 적합한지 알아보자.

Binary Step Functions and Linear Fuctions

\[f(x) = \begin{cases} 0 & \text{if } x \leq 0 \\ 1 & \text{if } x > 0 \end{cases}\]

가장 먼저 생각할 수 있는 활성함수로는 binary step function과 linear function이 있다. Binary step function은 perceptron(퍼셉트론)에서 사용되는 활성함수로 임계치(보통 0)를 기준으로 0 과 1을 출력한다. 출력값이 0과 1 뿐이기 때문에 분류 기준이 세 가지 이상인 다중 분류 문제에서는 사용할 수 없다.

\[f(x) = cx, \text{ where } c \text{ is a constant.}\]

Linear function은 단일 직선 형태의 함수이다. 선형 함수는 여러 문제가 있다.

  1. 4강에서 공부한 backpropagation이 불가능하다. 역전파 과정에서 활성함수를 미분해야 하는데 미분한 결과가 데이터와 무관한 임의의 상수 $c$이기 때문에 예측에 아무런 도움이 되지 않는다.
  2. 선형 함수를 여러번 거치는 것은 마지막에 딱 한 번 거치는 것과 동일하다.
\[f(f( \cdots f(x))) = c^n x\]

여러 layer에서 활성함수를 거치면서 데이터에 대한 분류 혹은 예측을 수행해야 하는데 선형 함수를 사용하면 그럴 수가 없다. 따라서 위 두 가지 함수 모두 활성함수로 사용하기에는 문제가 있다.

Sigmoid

\[\sigma(x) = \frac{1}{1+e^{-x}}, ~~~\sigma'(x) = \sigma(x) (1-\sigma(x)).\]

Sigmoid는 비선형이며 미분이 쉽고 출력값이 (0,1)로 제한되기 때문에 explode하지 않아 활성함수로 사용할 수는 있다. 하지만 여러가지 이유로 최근에는 전혀 사용하지 않는 함수이다. 그 이유는 다음과 같다.

  1. Saturated neurons kill the gradients. 입력값은 실수 전체 범위에서 값을 가질 수 있는 반면, sigmoid 함수는 출력값을 $(0,1)$로 축소시킨다. 이것은 두 가지 문제를 야기한다. 두 개의 입력값 100과 10000이 있을 때, sigmoid 함수를 거치면 두 가지 모두 1에 매우 근접한 값을 출력한다. 실제로는 100배 차이나는 값이었지만 결론적으로 거의 같은 값을 가지게 되어버린다. 이것을 saturation 현상이라고 한다. 또한, 입력값이 커지면 커질수록 기울기(gradient)는 급격하게 0에 가까워지면서 layer를 거듭할수록 gradient가 0으로 수렴하는 gradient vanishing 현상이 발생한다. 추가로 미분값의 최댓값이 1/4밖에 되지 않는다.

  2. 지수함수는 computational cost가 비싸다.

  3. 출력값이 zero-centered가 아니며 항상 양수의 값을 가진다. 따라서 다음 layer가 항상 양의 입력값만을 받게 되어 역전파 과정에서 무조건 양 혹은 무조건 음의 방향으로만 진행하게 된다. 이는 수렴 속도가 느려지는 결과를 야기한다.

파란색 화살표는 hypothetical optimal direction이다. sigmoid 함수를 사용하면 optimal direction으로 갈 수 없고, 빨간 zigzag path처럼 느리게 업데이트된다.

이러한 단점때문에 sigmoid 함수는 활성함수로서 가져야할 좋은 특성들이 어떤 것인지 알려줄 뿐 거의 사용되지 않는다. Sigmoid의 일반화 버전으로 softmax가 함수가 있는데 이것은 신경망의 가장 마지막 층에서 값을 출력하는 역할을 한다. 주로 multi-class classification 문제에 사용된다.

tanh

\[\tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}\]

Sigmoid 함수가 zero-centered 가 아닌 것을 보완하기 위해 제안되었다. 하지만, 그 외의 단점은 동일하기 때문에 잘 사용하지 않는다.

ReLU

\[f(x) = \max(0,x)\]

가장 많이 사용되는(특히 CNN에서) 활성함수 중 하나이다. Rectified Linear Unit 의 약자로 선형함수의 단점을 보완한 것이다.

Pros

  1. 양수 영역에서는 saturate하지 않는다.
  2. 연산이 굉장히 효율적이다.
  3. Sigmoid, $\tanh$보다 수렴속도가 6배 정도 빠르다.
  4. Actually more biologically plausible than sigmoid. (4강의 뉴런 이야기)

Cons

  1. Not zero-centered.
  2. 0에서 미분 불가능하다.
  3. 입력값이 음수라면 gradient가 영영 죽어버린다.

Gradient가 0이 되어버리는 ReLU의 단점을 보완하기 위해 유사한 활성함수가 고안되었다.

Leaky ReLU and Parametric ReLU

\[f(x) = \max(0.01x, x)\]

음수 영역만 조금 다르게 한 것으로, ReLU의 모든 장점을 다 가지고 있으면서 gradient가 절대 죽지 않는다. Leaky는 새고 있다는 뜻이다. 비슷한 것으로는 Parametric Rectifier(PReLU)가 있다.

\[f(x) = \max(\alpha x, x)\]

만약 $\alpha$가 1로 설정되면 선형 분류기가 되기 때문에 1과 가깝지 않게 설정해야 한다. 만약 $\alpha$를 파라미터로 설정하면 역전파 과정에서 업데이트 된다.

ELU and ReLU6

\[f(x) = \begin{cases} x & \text{if } x > 0 \\ \alpha(e^x - 1) & \text{if } x \geq 0 \end{cases}\]

Exponential Linear Unit의 약자로 ReLU의 모든 장점을 가지고 있으며 조금 더 zero-centered되어 있다. 음수 영역에서의 saturate regime이 leaky ReLU보다 noise에 robust하게 해준다. 하지만 지수함수가 있어서 연산비용이 비싸다는 단점이 있다.

\[f(x) = \min(\max(0,x),6)\]

ReLU가 explode할 수도 있다는 단점을 보완하기 위해 등장했다.

Maxout

\[f( \mathbf{x}) = \max_i x_i\]

간단하게 설명하면 입력값 중 최댓값을 출력값으로 하는 활성함수이다. Dropout의 효과를 극대화하기 위해 고안된 활성함수이다. ReLU의 장점을 모두 가지고 있다. 단점으로 비싼 연산비용이 있다.

이 외에도 수많은 활성함수가 있다. 모든 문제에 최적인 활성함수는 없으므로 데이터를 보고 알맞게 선택해야 한다.

Further Reading

  1. Difference of Activation Functions in Neural Networks in general
  2. [라온피플 : Machine Learning Academy_Part VI. CNN 핵심 요소 기술] 4.Maxout
  3. Fundatmentals of Deep Learning - Activation Functions and When to Use Them?
  4. A Practical Guide to ReLU
  5. Coding Neural Network - Forward Propagation and Backpropagation
  6. Everything you need to know about “Activation Functions” in Deep learning models