신경망모델의 각 layer에서는 input 값과 W(가중치)를 곱하고 b(편향)를 더하는 연산을 통해 a=WX+b를 계산하고 마지막에 활성화 함수를 거쳐 h(a)를 출력한다. 이렇게 각 layer마다 활성화 함수를 거쳐 출력하는 이유가 무엇일까?
XOR문제 - 선형분류기의 한계
인공신경망에 대한 연구가 한계를 맞게된 첫 과제는 바로 XOR문제였다.
아래 그림에서 확인할 수 있듯이 기존의 퍼셉트론은 AND와 OR문제는 해결할 수 있었지만 선형 분류기라는 한계에 의해 XOR과 같은 non-linear한 문제는 해결할 수 없었다.
그리고 이를 해결하기 위해 나온 개념이 hidden layer이다.
그러나 이 hidden layer도 무작정 쌓기만 한다고 해서 퍼셉트론을 선형분류기에서 비선형분류기로 바꿀 수 있는 것은 아니다.
왜냐하면 선형 시스템이 아무리 깊어지더라도 $f(ax+by)=af(x) + bf(y)$의 성질 때문에 결국 하나의 layer로 깊은 layer를 구현할 수 있기 때문이다.
즉, linear한 연산을 갖는 layer를 수십개 쌓아도 결국 이는 하나의 linear 연산으로 나타낼 수 있다.
선형함수인 h(x)=cx를 활성화함수로 사용한 3층 네트워크를 떠올려 보세요.
이를 식으로 나타내면 y(x)=h(h(h(x)))가 됩니다. 이는 실은 y(x)=ax와 똑같은 식입니다.
a=c3이라고만 하면 끝이죠. 즉, 은닉층이 없는 네트워크로 표현할 수 있습니다.
뉴럴네트워크에서 층을 쌓는 혜택을 얻고 싶다면 활성화함수로는 반드시 비선형 함수를 사용해야 합니다.
- 밑바닥부터 시작하는 딥러닝 -
활성화 함수 activation function
이에 대한 해결책이 바로 활성화 함수(activation function)이다.
활성화 함수를 사용하면 입력값에 대한 출력값이 linear하게 나오지 않으므로 선형분류기를 비선형 시스템으로 만들 수 있다.
👉 따라서 MLP(Multiple layer perceptron)는 단지 linear layer를 여러개 쌓는 개념이 아닌 활성화 함수를 이용한 non-linear 시스템을 여러 layer로 쌓는 개념이다.
따라서 활성화 함수는 입력값을 non-linear한 방식으로 출력값을 도출하기 위해 사용한다.
이를 통해 linear system을 non-linear한 system으로 바꿀 수 있게 되는 것이다.
활성화 함수의 종류
✔︎ 선형함수 (Linear Function)
- 문제점 1: backpropagtaion 사용이 불가
역전파(backpropabation)는 활성화 함수를 미분하는 과정을 통해 손실 값을 줄이는 과정이다.
하지만, 선형함수의 미분 값은 항상 같은 상숫값이 나와서 사용이 불가능하다.
- 문제점 2: 활성화 함수 본래의 역할 수행 불가
활성화 함수의 목적은 linear한 함수를 non-linear 하게 만들어 깊은 층을 쌓기 위함인데, 선형함수는 깊은 층을 쌓을 수 없다.
✔︎ 계단함수 (Step Function)
입력이 양수일때는 1(보낸다)을 음수일때는 0(보내지 않는다)의 신호를 보내주는 이진적인(Binary) 함수이다.
- 문제점1 : 다중 출력이 불가능
- 문제점2 : 미분 불가능
미분이 가능하지 않아 깊은 층을 쌓는 딥러닝의 경우 역전파를 통해 손실을 줄일 수 없기 때문에 사용 할 수 없다.
✔︎ 시그모이드 함수 (Sigmoid Function)
output값을 0에서 1사이로 만들어주고, 데이터의 평균은 0.5를 갖게된다.
매우 큰 값을 가지면 함수값은 거의 1이며, 매우 작은 값을 가지면 거의 0이다.
👉 시그모이드는 값을 0과 1사이로 변환해주는 역할을 해주기 때문에 아무리 값이 많아도 데이터를 0과 1사이로 변환시켜준다.
- 단점 1: Gradient Vanishing 기울기 소실
입력이 아무리 커도 미분 값의 범위가 0과 1/4 사이로 제한됨으로써 층이 많을수록 gradient 값이 0에 수렴할 것이다.
따라서 층이 많아지면 점점 기울기의 값이 0에 수렴되어버리는 문제가 발생하여 성능이 떨어지게 된다.
- 단점 2: 함수값 중심이 0이 아니다
함수값 중심이 0이 아니라 학습이 느려질 수 있다.
뉴런으로 들어오는 데이터가 항상 양수인 경우 gradient는 모두 양수 또는 음수가 된다.
이는 gradient 업데이트 중 지그재그로 변동하는 문제점이 발생하는데, 지그재그로 변동하는 gradient는 학습 효율성을 감소시킬 수 있다.
⭐ 시그모이드를 사용하는 경우
대부분의 경우에서 시그모이드함수는 좋지 않기때문에 사용하지 않는다.
그러나 유일한 예외가 있는데 binary classification경우 출력층 노드가 1개이므로 이 노드에서 0~1사이의 값을 가져야 마지막에 cast를 통해(ex. 0.5이상이면 1, 미만이면 0) 1혹은 0값을 output으로 받을 수 있다. 따라서 이때는 시그모이드를 사용한다.
✔︎ softmax 함수 (Softmax function)
소프트맥스 함수는 시그모이드 함수를 일반화 (generalization) 하여 얻을 수 있다.
소프트맥스 함수는 다중 클래스 분류 모델의 출력층에서 사용되며, 결과를 확률로 해석할 수 있게 변환해주는 함수로 높은 확률을 가지는 class로 분류한다.
각 출력값은 0 ~ 1 사이의 값을 가지고 모든 출력의 합이 반드시 1이 된다.
✔︎ tanh 함수 (Hyperbolic tangent function)
시그모이드 함수와 거의 유사하다. 시그모이드와의 차이는 -1~1값을 가지고 데이터의 평균이 0이라는 점이다.
tanh 함수는 함수의 중심값을 0으로 옮겨 시그모이드의 최적화 과정이 느려지는 문제를 해결했다.
- 단점 1: Gradient Vanishing 기울기 소실
시그모이드 보다 성능이 좋지만 tanh 함수도 기울기의 값이 0에 수렴되어버리는 문제가 발생한다.
✔︎ ReLU 함수 (Rectified Linear Unit)
대부분의 경우 일반적으로 ReLU의 성능이 가장 좋기때문에 ReLU를 사용한다.
대부분의 input값에 대해 기울기가 0이 아니기 때문에 학습이 빨리 된다.
- 장점 1: 빠른 연산
단순히 입력값을 그대로 출력으로 내보내기 때문에 다른 활성화 함수에 비해 계산 속도가 빠르다.
- 단점 1: 음수에 대한 대응
값이 음수일 경우 기울기가 0이기 때문에 뉴런이 죽을 수 있는 단점이 존재한다. (학습을 하지 못함)
하지만 실제로 hidden layer에서 대부분 노드의 z값은 0보다 크기 때문에 기울기가 0이 되는 경우가 많지 않다.
✔︎ Leakly ReLU 함수
ReLU의 뉴런이 죽는(Dying ReLu)현상을 해결하기위해 나온 함수이다.
위의 식에서 0.01대신 다른 매우 작은 값으로 사용 가능하다.
음수의 x값에 대해 미분값이 0되지 않는다는 점을 제외하면 ReLU와 같은 특성을 가진다.
✔︎ ELU 함수 (Exponential Linear Unit)
ELU 도 Leakly ReLU와 마찬가지로 ReLU의 뉴런이 죽는(Dying ReLu)현상을 해결하였다.
음수 일 때 ELU 활성화 함수 출력의 평균이 0에 가까워지기 때문에 편향 이동(bias shift)이 감소하여 그래디언트 소실 문제를 줄여준다.
하이퍼파라미터인 $\alpha $는 음수일 때 ELU가 수렴할 값을 정의하며 보통 1로 설정한다.
📌 참고 사이트
'DL(Deep-Learning) > 개념' 카테고리의 다른 글
[DL] 엔트로피 Entropy (0) | 2022.01.29 |
---|---|
분류 성능 지표 - Precision(정밀도), Recall(재현율) (0) | 2022.01.29 |
[실습] numpy로 만드는 단층 신경망 - 회귀 문제 (0) | 2022.01.29 |
[DL] 오차 역전파 Error Backpropagation (0) | 2022.01.28 |
[DL] 신경망 Neural Network (0) | 2022.01.28 |