본문 바로가기
Deep Learning/모두를 위한 cs231n

[모두를 위한 cs231n] Lecture 6. Activation Functions - ReLU함수의 모든 것

by Steve-Lee 2020. 4. 21.

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

Lecture 13 - Part2. VAE(Variational AutoEncoder)

 

모두를 위한 cs231n (feat. 모두의 딥러닝 & cs231n)

cs231n 시작합니다! 안녕하세요. Steve-Lee입니다. 작년 2학기 빅데이터 연합동아리 활동을 하면서 동기, 후배들과 함께 공부했었던 cs231n을 다시 시작하려고 합니다. 제가 공부하면서 느꼈던 점들과

deepinsight.tistory.com

Activation Functions

  • Lecture PPT from cs231n 2017

우리가 일반적으로 알고 있는 Activation Function의 Computational Graph

  • Activation Functions...

Deep Learning Network에서 사용되는 Activation Function(활성화 함수)들은 다음과 같습니다.

sigmoid, tanh, ReLU, Leaky ReLU, ELU, Maxout...

오늘은 이 중 ReLU에 대해 하나씩 배워보도록 하겠습니다.

 

다양한 Activation Function들에 대한 학습을 하였다

ReLU 파헤치기

CNN Model을 학습시킬 때 Activation Function로 ReLU를 사용하면 좋다고 막연하게 알고 있었는데요. 파면 팔수록 중요한 점들이 많은 것 같습니다. ReLU함수의 특징(장. 단점)부터 ReLU함수에 대한 궁금증을 하나씩 정복해보도록 하겠습니다🤔

Load map of ReLU

ReLu에 대해 정리한 Note

ReLU함수

Activation Function 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에 대한 내용은 강의 자료 일부를 발췌해 설명하도록 하겠습니다.

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를 벗어났던 것이었어...😑)

 

learning rate가 높을 경우 Dead ReLU가 될 수 있다

이런 느낌이 아닐까 싶네요

 

initialize ReLU with slightly positive biasese(e.g 0.01)

한편 Dead ReLU문제를 해결하기 위해 아주 작은 positive bias값을 더해 초기화하기도 한다고 합니다.

 

이상 cs231n Lecture 6을 수강하면서 가장 이해가 되지 않았던 ReLU, Dead ReLU에 대한 정리노트입니다.

혹여나 잘못된 부분이 있다면 댓글을 통해 알려주신다면 감사하겠습니다. 이상 Steve-Lee였습니다.

 

 

모두를 위한 cs231n (feat. 모두의 딥러닝 & cs231n)

cs231n 시작합니다! 안녕하세요. Steve-Lee입니다. 작년 2학기 빅데이터 연합동아리 활동을 하면서 동기, 후배들과 함께 공부했었던 cs231n을 다시 시작하려고 합니다. 제가 공부하면서 느꼈던 점들과 중요하다고..

deepinsight.tistory.com

 

Reference

댓글