2022.07.18 - [Studying/Machine Learning] - [머신러닝] Pytorch Linear Regression & MLP - Mnist 활용
저번 포스트의 MLP 모델에 Relu 함수를 적용하였는데
설명이 필요할 것 같아 정리하게 되었다.
활성화 함수를 쓰는 이유를 설명하기 위해 예시를 들어 보겠다.
동물을 분류할 때 '눈 크기, 키, 몸무게, 발 사이즈, 색' 등의 많은 데이터가 있다고 가정을 할 때
몇 가지 데이터는 분류에 있어서 큰 가중치를 가지고, 몇 가지 데이터는 가중치가 낮을 수 있다.
이 가중치를 추가적으로 조절하고
여러 레이어를 통과하며 값이 어떻게 변할지 모르기 때문에 그 폭을 어느 정도 제어하는 역할 도 한다.
이를 모델에 학습시키기 위해 활성화 함수를 사용하게 된다.
그러면 활성화 함수를 살펴보겠다.
최초에는 Step(계단) 함수를 사용했다.
이렇게 0과 1로만 이루어져서 0을 기준으로 차이가 아주 심하다.
간단한 분류 문제에는 잘 동작하겠지만
딥러닝이 필요한 복잡한 데이터에는 매우 낮은 성능을 낼 것이다.
Sigmoid 함수
보통 맨 처음에 배우는 활성화 함수이다.
계단 함수의 단점인 급격한 변화를 보완하기 위해 나왔고 모든 x 값을 0~1 사이의 값으로 바꿔준다.
이 함수를 미분해서 계산해보면 최댓값이 0.25가 나온다.
이렇기에 여러 레이어를 거치면 backpropagation을 할 때
미분값이 0에 가까워지는 vanishing gradient 문제가 발생하게 된다.
또, 함수의 중심값이 0이 아니기 때문에 학습이 느려질 수 있다고 한다.
중심값을 0으로 보완하기 위해 tanh를 쓰게 된다.
Tanh 함수
중심을 0으로 옮겨 최적화 시 지그재그로 답을 찾는 문제를 해결했다.
또 미분의 최댓값이 1로 커졌지만
이 또한 vanshing gradient 문제를 완전히 해결하진 못했다.
이를 보완하기 위한 ReLU함수를 보자.
ReLU 함수
x가 0보다 크면 y=x, 작으면 0이 된다.
음수일 때 뉴런이 죽을 수 있는 단점이 있다.
장점은 sigmoid, tanh에 비해 학습이 빠르고, 연산 비용이 적고, 구현이 쉽다.
또, 생물학적으로 타당하다고 한다.
단점은 다시 zero-centered가 되지 않은 문제가 발생했고,
음수의 구간에서 뉴런이 죽는 현상이 발생한다.
이를 보완한 Leaky ReLU가 나온다.
Leaky ReLU
장점은 ReLU와 유사하지만 음수에서 0이 아니고, 계산이 효율적이고 빠르다.
음일 때 0.01x, 양일 때는 x이다.
이와 유사한 PReLU가 있는데 음일 때 0.01로 고정이 아닌 파라미터 a를 놓고 backpropagation으로 학습시킨다.
ELU
ELU는 LU와 비슷하지만 평균이 0에 가까운 출력 값을 가진다.
하지만 음일 때 다시 기울기가 없어지는 문제가 생긴다고 하는데
ELU논문에서는 그 부분이 noise에 강인하다고 주장한다.
깊게는 들어가지 않겠다.
Maxout
maxout은 좀더 일반화된 형태로 w1*x+b1, w2*x+b2의 값을 가진다.
문제점은 w1, w2 두개의 파라미터가 필요하기에 뉴런당 파라미터의 수가 두배가 되는 것이다.
정리
여기까지 다양한 활성화 함수를 살펴보았다.
실제로 가장 많이 사용되는 것은 ReLU이다.
조심할 점은 learning rate를 낮게 설정해 data 범위의 밖으로 나가게 하지 않는 것이다.
cs231n 강의에서는 ReLU를 사용하고 Leaky ReLU / Maxout / ELU를 사용해보고
다른 것은 기대를 하지 말라고 한다.
Pytorch에서 실제 코드로는 한줄도 안되니
2022.07.18 - [Studying/Machine Learning] - [머신러닝] Pytorch Linear Regression & MLP - Mnist 활용
위 포스트의 MLP 모델에서 바꿔보면서 사용해봐도 좋을 것 같다.
'Studying > Machine Learning' 카테고리의 다른 글
[머신러닝] Convolution Layer - Padding, Stride, Dilation (4) | 2022.07.21 |
---|---|
[머신러닝] Convolutional Neural Network 이해하기 (2) | 2022.07.21 |
[머신러닝] Pytorch Linear Regression & MLP - Mnist 활용 (8) | 2022.07.18 |
[머신러닝] K-Means Clustering - 물고기 데이터셋 (0) | 2022.07.18 |
[머신러닝] K-Means Clustering 정리 (0) | 2022.07.15 |
댓글