ReLU함수의 모든것
ReLU함수 파헤치기
이번 시간에는 cs231n Image Seminar를 통해 학습하면서 궁금했던 점들을 하나하나 풀어보도록 하겠습니다😃
첫 손님은 ReLU함수입니다. ReLU함수의 특징과 Dead ReLU에 대해서 알아보도록 하겠습니다😊
모두를 위한 cs231n
모두를 위한 cs231n 😀
👉🏻 시작합니다! 🎈
모두를 위한 cs231n (feat. 모두의 딥러닝 & cs231n)
👉🏻 Neural Network 기초 📗
* Backpropagation
Lecture4. Backpropagation and Neural Network. 오차역전파에 대해서 알아보자😃
👉🏻 Training Neural Network Part I 📑
- Activation Function 파헤치기
Lecture 6. Activation Functions에 대해 알아보자
Lecture 6. Activation Functions - ReLU함수의 모든 것
- Data Preprocessing
Lecture 6. Training Neural Network - Data Preprocessing
- Weight Initialization
Lecture 6. Weight Initialization
- Batch Normalization
Lecture 6. Batch Normalization
👉🏻 Deep Learning CPU와 GPU ⚙️
Lecture 8 - Part1. Deep Learning 을 위한 CPU와 GPU
👉🏻 Deep Learning Framework ☕️
Lecture 8 - Part2. Deep Learning Framework
👉🏻 TensorFlow Fraemwork 🧱
Lecture 8 - Part3. TensorFlow Framework
👉🏻 PyTorch Framework 🔥
Lecture 8 - Part3. PyTorch Framework
👉🏻 Generative Model
Activation Functions
- Lecture PPT from cs231n 2017
- Activation Functions...
Deep Learning Network에서 사용되는 Activation Function(활성화 함수)들은 다음과 같습니다.
sigmoid, tanh, ReLU, Leaky ReLU, ELU, Maxout...
오늘은 이 중 ReLU에 대해 하나씩 배워보도록 하겠습니다.
ReLU 파헤치기
CNN Model을 학습시킬 때 Activation Function로 ReLU를 사용하면 좋다고 막연하게 알고 있었는데요. 파면 팔수록 중요한 점들이 많은 것 같습니다. ReLU함수의 특징(장. 단점)부터 ReLU함수에 대한 궁금증을 하나씩 정복해보도록 하겠습니다🤔
Load map of ReLU
ReLU함수
ReLU 수식
함수의 수식과 모양에서 알 수 있듯이 ReLU 함수는 계산이 간단하고 모양도 심플한 함수입니다.
ReLU함수의 특징
ReLU함수의 특징에 대해 몇가지 살펴보겠습니다.
- Sigmoid, tanh가 가졌던 Saturated 문제를 어느 정도 해결했다
- Sigmoid 함수와 달리 exp()계산이 없어 수렴 속도가 더 빠르다(6배 정도 빠르다고 합니다)
- 생물학적 타당성이 크다
특징에 대한 설명을 하나하나 풀어보겠습니다.
Sigmoid, tanh의 경우 Activation Function의 출력 값이 Saturate 되어 Weight업데이트가 이루어지지 않는 문제점이 있었다. 반면 ReLU 함수를 Activation Function으로 사용할 경우 적어도 +구간(양의 값을 가질 때)에서는 Saturation문제를 해결할 수 있게 되었습니다.
또한 Sigmoid함수에 비해 max값만 구하면 되기 때문에 계산 속도가 6배가량 빠르며 more biologically plausible than sigmoid. 즉 생물학적 타당성도 높습니다.
하지만 이러한 ReLU함수도 문제점을 가지고 있습니다.
ReLU함수의 문제점
ReLU함수는 다음의 세 가지 문제점을 가지고 있습니다.
- ReLU는 더이상 zero-centered가 아니다
- gradient의 절반을 죽인다(음수 영역에서 Saturated 되는 문제가 다시 발생합니다)
- Dead ReLU
tanh가 해결한 zero-centerd문제를 ReLU는 다시 안고있습니다.
또한 ReLU함수의 특징으로 함수의 인자가 양의 구간일 때 saturate문제를 해결한다고 했는데 음의 영역에서는 saturated 되어 gradient가 죽는 문제가 발생하게 됩니다.(이를 Vanishing gradient현상이라고 합니다)
마지막으로 Dead ReLU 문제가 있습니다. Dead ReLU문제에 대해 살펴보도로 하겠습니다.
Dead ReLU
Dead ReLU에 대한 내용은 강의 자료 일부를 발췌해 설명하도록 하겠습니다.
위의 그림을 보면 DATA CLOUD라는 별 모양의 그림이 있습니다. 이를 Training Data로 가정해 보겠습니다.
- active ReLU는 ReLU함수가 반응하는 구간입니다
- dead ReLU는 ReLU함수가 active하지 않고 죽어버리는 구간입니다
DADA CLOUD에서 ReLU함수를 적용할 시 절반만 activate 된다는 것을 알 수 있습니다.
즉 ReLU의 가중치 평면이 DATA CLOUD에서 떨어져 있을 때 Dead ReLU가 발생할 수 있다는 것입니다.
Dead ReLU에서는 activate가 일어나지 않고 가중치도 update 되지 않습니다. 반면 activate ReLU에서는 일부는 activate 되고 일부는 activate 되지 않습니다.
그렇다면 언제 activate(활성화)가 되지 않을까요?
두 경우 activate가 일어나지 않습니다.
- 초기화를 잘못한 경우
- Learning rate가 지나치게 높은 경우
그림에서와 같이 가중치 평면이 DATA CLOUD에서 멀리 떨어져 있는 경우(빨간선), 어떤 입력 데이터에서도 activate 되는 경우가 존재하지 않을 것입니다. 따라서 activation이 일어나지 않기 때문에 backprop(오차 역전파)도 일어나지 않을 것입니다.
다음으로 '더 흔한 경우'에 대해 살펴보겠습니다.(강의자 Serena Yeung의 말에 의하면 두 번째 경우가 더 흔한 경우라고 합니다.) 바로 learning rate가 높은 경우입니다.
처음에 적절한 ReLU로 학습을 할 수 있어도 learning rate가 높아 weight update가 지나치게 커지면 가중치가 날뛰게 되어 ReLU가 데이터의 manifold를 벗어나게 된다고 합니다. 그래서 처음에 학습이 잘 되다가도 갑자기 죽어버리게 되는 경우가 생긴다고 합니다.
생각해보니 저도 간단한 네트워크를 트레이닝시킬 때 비슷한 경험을 했던 적이 있습니다.
모델이 조금 더 빨리 수렴했으면 하는 바람에 learning rate값을 조금 올렸었는데 loss 갑자기 날뛰더니 최악으로 흘러가서 의아했던 적이 있었습니다... (아 manifold를 벗어났던 것이었어...😑)
이런 느낌이 아닐까 싶네요
한편 Dead ReLU문제를 해결하기 위해 아주 작은 positive bias값을 더해 초기화하기도 한다고 합니다.
이상 cs231n Lecture 6을 수강하면서 가장 이해가 되지 않았던 ReLU, Dead ReLU에 대한 정리노트입니다.
혹여나 잘못된 부분이 있다면 댓글을 통해 알려주신다면 감사하겠습니다. 이상 Steve-Lee였습니다.
Reference
'Deep Learning > 모두를 위한 cs231n' 카테고리의 다른 글
[모두를 위한 cs231n] Lecture 8 - Part1. Deep Learning 을 위한 CPU와 GPU (3) | 2020.05.08 |
---|---|
[모두를 위한 cs231n] Lecture 8 - Part4. PyTorch Framework (0) | 2020.05.07 |
[모두를 위한 cs231n] - Lecture4. Backpropagation and Neural Network. 오차역전파에 대해서 알아보자😃 (0) | 2020.04.30 |
[모두를 위한 cs231n] Lecture 1. Introduction. 앞으로 이런 것들을 배울거에요😄 (0) | 2020.04.30 |
모두를 위한 cs231n (feat. 모두의 딥러닝 & cs231n) (15) | 2020.04.30 |
댓글