티스토리 뷰

Activation Functions

  • Sigmoid

image

> 0에서 1까지의 범위를 가지며, saturated한 모습을 보이고 있다.

3가지 문제점

  1. Saturated되는 특징으로 인해서 gradient가 사라진다(vanishing gradient). Saturated되는 부분( x = 10, x = -10 )에서 gradient가 0이 되고 0의 값이 backprop으로 넘어가면서 gradient가 사라진다.

     

  2. Sigmoid의 출력이 zero centered 하지 않다.


image

> input값이 모두 양수이면 gradient가 전부 양수, 음수가 된다. Gradient의 부호는 위에서 내려온 gradient의 부호 값과 같아지기에 파라미터를 업데이트 할 때 다 같이 증가하거나 감소하게 된다.

> gradient의 움직임은 1,3 사분면으로 나오게 되어서 파란색 선을 따르지 않고 빨간색처럼 지그재그 패턴을 반복한다.

> zero centered한 데이터는 input값을 양수, 음수 값으로 가지게 되어서 gradient가 빠르게 움직일 수 있다.


  1. Exp( )계산은 다른 연산들에 비해서 expensive한 문제가 있다.

  • tanh

image

> -1에서 1의 범위를 가지며 zero centered 형태를 가지고 있다. 그러나 여전히 gradients가 saturated하기 때문에 gradient vanishing 문제가 있다.


  • ReLU

image

> 양의 값에서 saturated하지 않는 장점이 있다.

> Exp계산을 하지 않기에 계산속도도 빠르다. zero-centered하지 않는다.


image

> ReLu가 data cloud에서 떨어져 있는 경우에 dead ReLu가 발생한다. Positive한 부분만 update되고 Negative한 부분은 update가 되지 않는다.


  • Leaky ReLU / PReLU

image

> Negative한 부분에서 0이 아니기 때문에 Saturated한 문제가 없다. Dead ReLU 현상도 없다.

> PReLU의 경우에는 Negative한 부분이 backprop으로 학습시키는 alpha이기 때문에 activation Function이 유연하다.


  • ELU

image

> zero centerd하고 Negative한 부분에서 Saturated하다.

> Saturated한 부분이 noise에 robust하다고 주장한다 (feature selection과 연관)


  • Maxout

image

> 두 개의 선형함수를 사용하였기 때문에 Saturated되지 않으며 gradient가 사라지지 않는다. 그러나 parameters를 두 개를 사용했기 때문에 연산이 두 배 증가한다.


Data Preprocessing

image

> zero-centered하는 이유는 sub_optimal이 발생하기 때문에 최적화가 어렵다.(gradient가 지그재그로 움직이는 현상)

> normalized 모든 차원이 동일한 범위 안에 있게 해줘서 feature들이 전부 동등한 기여를 하게 한다.

> 이미지의 경우, 전 처리를 zero-centered만 해주면 된다.

> 픽셀 값은 0 ~ 255 사이에 존재, 이미 스케일이 동일한 범주에 속한다 normalize 불필요하다

  • zero-centered할 때

> train에서 계산한 평균을 test데이터에도 동일하게 적용해준다.

> 미니배치 단위로 학습시킨다고 해도 평균은 학습 데이터 전부를 가지고 계산한다.

Weight Initialization

> Weight를 Initialization하는 것이 중요하다. 만약 w = 0으로 동일하게 Initialization이 된다면 parameter값이 동일하게 update 될 것이고 모든 뉴런 값이 같아진다. (우리는 서로 다른 뉴런들을 통해 특징들을 뽑고 싶다)


  • Weight Initialization 해결방법

  1. 임의의 작은 값으로 초기화 ( 초기 w값은 gaussian을 따르게 한다. )

image

> small network에서는 괜찮지만 network가 깊어질수록 gradient가 점점 더 작아지는 현상이 발생한다.


  1. 임의의 큰 값으로 초기화

> 가중치가 큰 값을 가지므로 Saturation하게 되고 gradient가 사라지는 현상이 발생하게 된다. (sigmoid, tanh을 사용할 때)


  1. Xavier initialization

    w = np.random.randn (fan_in, fan_out) / np.sqrt(fan_in)

> input이 작으면 input보다 더 작은 값으로 나누어 큰 가중치를 얻고 input이 크면 input보다 더 큰 값으로 나누어 작은 가중치를 얻는다.

> 가중치의 크기가 적절하게 조절되고 W(가중치)의 분산이 1로 유지가 된다.

> activation function을 ReLU를 사용하게 된다면 negative 영역의 output이 0이기 때문에 문제가 발생한다.


  1. He initialization

    w = np.random.randn (fan_in, fan_out) / np.sqrt(fan_in/2)

> ReLU에서 Output의 절반이 사라지는 사실을 고려하여 Xavier의 방법에서 나누어 주는 값을 input/2로 맞추어 준다.


Batch Normalization

image

> layer의 입력을 unit gaussian으로 만들어주는 방법, layer의 입력은 linear한 영역에 속하게 되고 Saturated하지 않는다.

> batch별로 평균과 분산을 구한 뒤 Normalization을 한다. 감마와 베타값을 이용해 batch Normalization을 얼마나 scaling하고 shift할지 결정한다. (항상 정확한 Normalization이 좋은 것이 아니다.)

> Test time에 적용되는 평균과 분산은 Training time에서 구한 평균과 분산을 사용하는 것이다.


Babysitting the Learning Process

  1. 데이터 전처리
  2. 모델 선택

> loss가 적절한지 확인한다. (regularization term을 없앴다가 추가해본다. 추가 후 loss값이 올라가는 것을 보면서 overfitting되지 않는 것을 확인)

> loss값이 줄어들지 않는 상황(learning rate가 작음) -> learning rate를 올리자

> loss값이 발산하는 상황(learning rate가 크다) -> learning rate를 낮추자


Hyperparameter Optimization

  • Cross-validation strategy

> Training set으로 학습시키고 Validation set으로 평가하는 방법, 이때 적절한 hyperparameter를 찾아야 한다.

  1. 넓은 범위에서 값을 조절해 나가면서 어떤 hyperparameter가 좋을지 판단한다.(coarse stage)
  2. 범위를 좁게 설정한 뒤 학습을 길게 가져가면서 최적의 값을 찾는다. (fine stage)
  • Random Search vs Grid Search

image

> Random Search가 Grid Search보다 좋다

> Parameter를 Random하게 Search하기 때문에 다양한 parameter를 sampling 한다(초록색 그래프 비교)

> 민감하고 중요하게 생각하는 것들을 더 잘 sampling 할 수 있다.

 

 

스터디 질문 모음


1) ReLU, ELU는 왜 noise에 robust할까?

> 음의 영역에서 saturate되어 gradient vanishing 되는 부분이 있다. 이때 데이터 전체를 학습하는 것이 아니라 0인 부분이 있어 선택적으로 학습하게 된다.(generalized)


2) CONV에서 Batch Normalization할때 주의사항

> 기존에 activation function에 넣기 전에 Wx + b 형태로 weight를 적용시켜준다. 그러나 CONV에서 Batch Normalization을 사용하기 위해서는 b를 없애준다.( Wx ) Batch Normalization의 Beta 값이 b의 역할을 대체할 수 있기 때문이다.



<참고자료>

[1] https://shuuki4.wordpress.com/2016/01/13/batch-normalization-%EC%84%A4%EB%AA%85-%EB%B0%8F-%EA%B5%AC%ED%98%84/

[2] http://saikatbasak.in/sigmoid-vs-relu-vs-elu/

[3] http://laid.delanover.com/activation-functions-in-deep-learning-sigmoid-relu-lrelu-prelu-rrelu-elu-softmax/

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함