Activation Function

강승구·2022년 12월 29일
0

신경망모델의 각 layer에서는 input 값과 W, b를 곱, 합연산을 통해 a=WX+b를 계산하고 마지막에 활성화 함수를 거쳐 output을 출력한다. 이렇게 각 layer마다 sigmoid, softmax, relu 등 여러 활성화 함수를 이용한다.

선형 분류기의 한계(XOR 문제)

인공신경망에 대한 연구가 한계를 맞게된 첫 과제는 바로 XOR문제였다.

아래 그림에서 확인할 수 있듯이 기존의 퍼셉트론은 AND와 OR문제는 해결할 수 있었지만 선형 분류기라는 한계에 의해 XOR과 같은 non-linear한 문제는 해결할 수 없었다.

이를 해결하기 위해 나온 개념이 hidden layer이다. 그러나 이 hidden layer도 무작정 쌓기만 한다고 해서 퍼셉트론을 선형분류기에서 비선형분류기로 바꿀 수 있는 것은 아니다.

왜냐하면 선형 시스템이 아무리 깊어지더라도 f(ax+by)=af(x) + bf(y)의 성질 때문에 결국 하나의 layer로 깊은 layer를 구현할 수 있기 때문이다.

즉, linear한 연산을 갖는 layer를 수십개 쌓아도 결국 이는 하나의 linear 연산으로 나타낼 수 있기 때문에 layer를 깊게 쌓는 의미가 없어진다.

이에 대한 해결책이 바로 활성화 함수(activation function이다.
활성화 함수를 사용하면 입력값에 대한 출력값이 linear하게 나오지 않으므로 선형분류기를 비선형 시스템으로 만들 수 있다.

따라서 다층퍼셉트론(Multiple Layer Perceptron)은 단지 linear layer를 여러개 쌓는 개념이 아닌 활성화 함수를 이용해 linear layer를 non-linear 시스템으로 바꾸어 여러 layer로 쌓는 개념이라고 할 수 있다.

결론적으로 활성화 함수는 입력값을 non-linear한 방식으로 출력값을 도출하기 위해 사용한다.


Activation Function의 종류

1. Step Function

논리회로 게이트에서 우리가 궁금한 점은 연산결과가 0인지 1인지에 대한 것이다.
따라서 우리는 활성화 함수를 통해 이를 최종 출력값으로 내보내줘야할 필요가 있다.

퍼셉트론 모델에서 이 활성화 함수는 Step Function(계단함수) 라고 부른다.

계단함수는 계산한 값이 임계점 이상이면 1이, 아니면 0이 나오는 매우 심플한 함수이다.

퍼셉트론에서는 이 계단함수를 사용하지만 실제로는 값이 너무 극단적이기 때문에 계단함수를 잘 쓰지는 않는다.

물론 이게 최종 결과로 쓰여야한다면 상관없지만 중간층에서 써야한다면 계단 함수를 선택하는건 리스크가 있다.

우리는 퍼셉트론을 쌓을 것인데 최종 결과가 아닌 중간 계층에서는 값이 계산하기 유용한 상태로 전달되는것이 좋다.

계단함수는 극단적으로 반환값이 0과 1이므로 중간 계층에서 값을 살리기 너무 힘들게 되어 있다. 그래서 등장한 것이 바로 시그모이드 함수이다.


2. Sigmoid Function

sigmoid 함수는 Logistic 함수라고 불리기도 하며, x의 값에 따라 0~1의 값을 출력하는 S자형 함수이다.

y=11+exy=\frac{1}{1+e^{-x}}

sigmoid 함수의 특징은 다음과 같다.

  • 우선 함수값이 (0, 1)로 제한된다.
  • 중간 값은 12이다.
  • 매우 큰 값을 가지면 함수값은 거의 1이며, 매우 작은 값을 가지면 거의 0이다.

이러한 특징을 가지는 sigmoid는 신경망 초기에는 많이 사용되었지만, 최근에는 아래의 단점들 때문에 사용하지 않는다.

  • Gradient Vanishing 현상이 발생한다. 미분함수에 대해 x=0에서 최대값 14 을 가지고, input값이 일정이상 올라가면 미분값이 거의 0에 수렴하게된다. 이는 |x|값이 커질 수록 Gradient Backpropagation시 미분값이 소실될 가능성이 크다.
  • 함수값 중심이 0이 아니다. 함수값 중심이 0이 아니라 학습이 느려질 수 있다. 만약 모든 x값들이 같은 부호라고 가정하고 아래의 파라미터 w에 대한 미분함수식을 살펴보자. ∂L∂w=∂L∂a∂a∂w 그리고 ∂a∂w=x이기 때문에, ∂L∂w=∂L∂ax이다. 위 식에서 모든 x가 양수라면 결국 ∂L∂w는 ∂L∂a 부호에 의해 결정된다. 따라서 한 노드에 대해 모든 파라미터w의 미분값은 모두 같은 부호를 같게된다. 따라서 같은 방향으로 update되는데 이러한 과정은 학습을 zigzag 형태로 만들어 느리게 만드는 원인이 된다.
  • exp 함수 사용시 비용이 크다.

3. tanh (Hyperbolic tangent function)

Hyperbolic tangent란 쌍곡선 함수중 하나이다.

Hyperbolic tangent 함수는 시그모이드 함수를 transformation해서 얻을 수 있다.

-1 vertical shift & 1/2 horizontal squeeze & 2 vertical stretch

함수는 다음과 같이 정의된다.

tanh(x)=2σ(2x)1tanh(x)=2σ(2x)−1

tanh(x)=exexex+extanh(x)=ex−e−xex+e−x

tanh(x)=1tanh2(x)tanh′(x)=1−tanh2(x)

  • tanh 함수는 함수의 중심값을 0으로 옮겨 sigmoid의 최적화 과정이 느려지는 문제를 해결했다.
  • 하지만 미분함수에 대해 일정값 이상 커질시 미분값이 소실되는 gradient vanishing 문제는 여전히 남아있다.

4. ReLU (Rectified Linear Unit)

ReLu함수는 최근 가장 많이 사용되는 활성화 함수이다. 함수는 아래와 같이 정의된다.

f(x)=max(0,x)f(x)=max(0,x)

ReLU함수의 특징은 다음과 같다.

  • x>0 이면 기울기가 1인 직선이고, x<0이면 함수값이 0이된다.
  • sigmoid, tanh 함수와 비교시 학습이 훨씬 빨라진다.
  • 연산 비용이 크지않고, 구현이 매우 간단하다.
  • x<0인 값들에 대해서는 기울기가 0이기 때문에 뉴런이 죽는 Dying ReLU 현상이 발생한다는 단점이 있다.

5. Leakly ReLU

leakly ReLU는 ReLU의 뉴런이 죽는 Dying ReLu 현상을 해결하기위해 나온 함수이다. 함수도 매우 간단한 형태로 다음과 같다.

f(x)=max(0.01x,x)f(x)=max(0.01x,x)

위의 식에서 0.01대신 다른 매우 작은 값 사용 가능하다.

Leakly ReLU함수의 특징은 다음과 같다.

  • Leakly ReLU는 음수의 x값에 대해 미분값이 0되지 않는다는 점을 제외하면 ReLU와 같은 특성을 가진다.
  • 입력값이 0보다 작을 때 gradient가 0이 되는 Dying ReLU 현상이 발생하지 않아 ReLU에 비해 학습 성능이 좋다.

6. PReLU

f(x)=max(αx,x)f(x)=max(αx,x)

Leakly ReLU와 거의 유사하지만 새로운 파라미터 α 를 추가하여 x<0에서 기울기를 학습할 수 있게 하였다.

PReLU의 특징은 다음과 같다.

  • 입력값이 0보다 작으면 출력값은 αxαx가 되고, 입력값이 0보다 크면 출력값은 x가 된다.
  • 입력값이 0보다 작으면 기울기(gradient)는 αα이고, 입력값이 0보다 크면 gradient는 1이다.

7. Exponential Linear Unit(ELU)

ELU는 비교적 가장 최근에 나온 함수이다.

f(x)=xifx>0f(x)=xifx>0

f(x)=α(ex1)ifx0f(x)=α(ex−1)ifx≤0

ELU 의 특징은 다음과 같다.

  • ReLU의 모든 장점을 포함한다.
  • Dying ReLU 문제를 해결했다.
  • 출력값이 거의 zero-centered에 가깝다
  • 일반적인 ReLU와 달리 exp함수를 계산하는 비용이 발생한다.

8. Maxout

Maxout 함수는 다음과 같다.

f(x)=max(wT1x+b1,wT2x+b2)f(x)=max(wT1x+b1,wT2x+b2)

이 함수는 ReLU가 가지는 모든 장점을 가졌으며, dying ReLU문제 또한 해결한다. 하지만 파라미터의 개수가 두배로 늘어나기 때문에 계산량이 복잡하다는 단점이 있다.

profile
강승구

0개의 댓글