본문 바로가기

Open Lecture Review/Deep Learning for Computer Vision

Lec10_Training Neural Networks 1

 

1. Activation Functions

① Sigmoid

  • 출력값을 0에서 1사이의 확률값으로 나타낸다.

[단점]

  • (Saturation problem) Input x가 매우 크거나 작으면 기울기가 0에 가까워져 gradient vanishing 문제가 일어나게 된다.
  • (not zero-centered problem) Input x가 모두 양수이거나 모두 음수이면, Gradient W의 값도 항상 양수이거나 음수값이 된다. 이는 gradient W가 항상 같은 방향으로 움직인다는 것을 의미하고, 결국 비효율적으로 최적해를 탐색하게 된다.

 

 

② Tanh

  • 출력값을 -1에서 1로 나타내어 zero-centered 문제를 해결해준다. 

[단점]

  • (Saturation Probelm) 여전히 saturation 구간이 있어서 gradient vanishing 문제가 있다. 

 

 

③ ReLU

  • 양의 값에서는 Satrurated 되지 않는다.
  • sigmoid와 tanh보다 6배 정도 빠르다. 

[단점]

  • (not zero-centered Problem) zero-centered 가 아니라는 문제가 있다.
  • (Saturation Problem) 음수 영역에서 saturated 되는 문제가 있다. 
  • ReLU가 DATA CLOUD로부터 떨어져 있을 때 Dead ReLU가 발생할 수 있다.

dead ReLU

④ Leaky ReLU

  • ReLU와 유사하지만, negative regime에서 0의 값이 아니다.
  • 그래서 ReLU와 다르게 saturated 되지 않는다.
  • 또한 Dead ReLU현상도 없다. 
  • Leaky ReLU와 유사한 PReLU라는 함수도 있는데 여기서는 기울기가 alpha라는 파라미터로 결정이 된다. alpha는 상수가 아니라 backprop으로 학습시키는 파라미터이다. 

 

⑤ Exponential Linear Unit (ELU)

  • 앞선 LU 그래프들과 다르게 ELU는 zero-mean에 가까운 출력값을 보인다. 

[단점]

  • Leaky ReLU와 비교해보면 ELU는 negative regime에서 Saturated되는 문제가 있다. 
  • 하지만 ELU 논문에서는 이런 Saturation이 좀 더 noise에 강인할 수 있다고 주장한다. 

 

⑥ Scaled Exponential Linear Unit (SELU)

  • ELU의 scale된 버젼
  • "Self Normalization" 특성이 있어서 BatchNorm없이 SELU 네트워크를 학습시킬 수 있다. 

 

 

⑦ Gaussian Error Linear Unit (GELU)

 

  • 다양한 활성화 함수들이 있지만 실제로 가장 많이 쓰는 것은 ReLU이다.
  • 다만 ReLU를 사용하려면 learning rate를 잘 조절해서 Dead ReLU에 빠지지 않게 해야 한다. 

 


2. Data Preprocessing

 

  • normalization을 하는 이유는 모든 차원이 동일한 범위안에 있게 해줘서 전부 동등한 contribute를 하기 위함이다.
  • 또한 정규화를 하면 weights의 작은 변화에 덜 민감하게 되고 최적화하기 쉬워진다. 

이미지를 처리하는 여러 딥러닝 중에

  • AlexNet은 전체 픽셀 값의 평균을 빼서 사용한다. -> zero-mean 전처리
  • VGGNet은 채널별 픽셀 값의 평균을 빼서 사용한다.  -> zero-mean 전처리
  • ResNet은 채널별 픽셀 값의 평균을 빼고 채널별 픽셀 값의 표준편차를 나눠서 사용한다. 

주로 preprocessing과 batch normalization을 사용한다. 

 


3. Weight Initialization

'모든 가중치=0'이면 어떻게 될까?
모든 뉴런이 같은 일(같은 연산)을 하여 결국 gradient가 같을 것이고 모든 뉴런이 똑같이 업데이트 될 것이다. 

 

<가중치 초기화 방법>

① Activation Statistics

: 작은 랜덤 값으로 초기화 시켜준다. 

- 초기 W를 표준 정규분포에서 샘플링한다. 
- 더 작은 값을 위해 평균이 0이고, 표준편차를 0.01인 가우시안 분포를 이용한다. 

[단점]
Small data에서는 잘 작동하지만 activation 함수를 넣은 Deep Network에서는 잘 작동하지 않는다. 

 

② Xavier Initialization

Xavier Initialization 적용

W = np.random.randn(Din, Dout) / np.sqrt(Din)

- Standard gaussian으로 뽑은 값을 '입력의 수'로 스케일링 해준다. 
- 기본적으로 Xavier Initialization이 하는 일은 입/출력의 분산을 맞춰주는 것이다. 

- 하지만 이 방법은 Linear activation이 있다고 가정한다.

- 그래서 ReLU를 사용하면 잘 작동하지 않는 문제점이 있다. 
- ReLU는 출력의 negative region을 죽이기 때문에 출력의 분산을 반토막 내버리기 때문에 위와 같은 가정이 있는 한, ReLU에서는 잘 작동하지 않는다. 

Xavier Initialization을 ReLU에 적용

 

③ Kaiming / MSRA Initialization

Kaiming / MSRA Initialization

- ReLU 의 nonlinear 문제를 해결하기 위해 std를 sqrt(1/Din)에서 sqrt(2/Din)으로 바꾼다.
- 이는 뉴런들 중 절반이 없어진다는 사실을 고려하기 위함이다. 

 

④ Residual Networks

[Problem]
Residual Networks에서는 input의 분산과 output의 분산이 합쳐지기 때문에 activation의 분산이 계속 커지게 된다. 
[Solution]
First layer는 MSRA initialize하고, Last layer는 0으로 초기화한다.

 


 

4. Regularization

① Add term to the loss

② Dropout

  • [첫번째 해석] Feature의 co-adaptation을 막을 수 있다. 
    • 물체를 인식하는 데 서로 다른 부분을 robust한 방법으로 학습할 수 있다. 
    • 예를 들어 고양이를 인식할 때 Dropout을 적용해 어떤 뉴런들은 귀에 대해 학습하고, 어떤 뉴런들은 꼬리에 대해 학습하여, 서로 다른 뉴런들이 고양이의 각 부분을 더욱 잘 학습할 수 있게 해준다. 
  • [두번째 해석] Dropout은 아주 큰 앙상블을 학습한다. 
    • weights를 공유하고 있는 여러 sub network를 학습한다. 
  • [문제점] Dropout은 test time에서의 output을 랜덤하게 만든다.
  • -> test시에 dropout을 좀 더 deterministic하게 만들 필요가 있다. 

  • [해결책] Test time에서는, drop을 하지 않고 dropout probability를 곱해서 사용한다. 
  • 각 뉴런의 scale을 모두 맞춰야 한다 : test time에서의 output = train time에서의 expected output

Inverted Dropout

Q) Rescaling을 언제 할 것인가?

A) test time에는 시스템의 효율을 최대화해야 하기 때문에 rescale하지 않는게 좋다.

 

[A common pattern]

  • Training을 할 때는 randomness을 더하지만, Testing 할 때는 randomness를 평균내서 사용한다. 
  • Batch Normalization을 예시로 들면, Training시에는 random minibatches의 통계값들을 사용하지만, Testing시에는 고정된 통계값들을 사용한다.
  • ResNet 구조의 경우, 보통 Dropout 대신 L2 weight decay 또는 Batch Normalization을 regularizer로 사용한다. 

 

 

④ DropConnect

: random activation을 랜덤으로 zeroing하는 것이 아니라, 랜덤으로 zero weight를 만든다.

⑤ Fractional Pooling

⑥ Stochastic Depth

: droping blocks 

⑦ Mixup

 

 


5. Data Augmentation <- To make more diverse randomness examples

① Random Crops and Scales

② Color Jitter

 

[A common pattern]

Training : randomness를 더하다 / Testing : randomness를 무시하다

 

 

6. 정리

  • Consider Dropout for large fully-connected layers
  • Batch normalization and data augmentation almost always a good idea
  • Try cutout and mixup especially for small classification datasets

 

'Open Lecture Review > Deep Learning for Computer Vision' 카테고리의 다른 글

Lec12_Recurrent Neural Networks  (0) 2022.02.14
Lecture 11_Training Neural Networks 2  (0) 2022.02.13
Lec8_CNN Architectures  (0) 2022.02.07
Lec7_ Convolutional Networks  (0) 2022.01.24
Lec6_Backpropagation  (0) 2022.01.24