본문 바로가기
Study/DL

[모두를 위한 딥러닝 시즌2] lab 9-1~9-4

by hyeon827 2024. 1. 12.

[9-1]

 

시그모이드의 문제점

  • 출력이 0에 가까워지자(또는 1에 가까워지자) 그 미분은 0에 다가감

 

  • 0에 가까운 기울기가 곱해질 경우 역전파의 기울기 값이 점점 사라짐 (기울기 소실)

 

  • 이를 보완하고자 ReLU 함수가 나옴
  • 입력값이 0을 넘을 때 기울기 = 1
  • 음수의 영역에서는 기울기가 0이어서 음수로 activation 될 경우 기울기가 사라질 위험이 있으나 그래도 잘 동작

 

[9-2]

  • N -> weight initialization 적용 (훨씬 더 성능이 좋음)
  • weight 초깃값 설정이 딥러닝 성능에 있어 매우 중요한 부분

  • IF, 가중치 초깃값을 0으로 설정할 경우 모든 gradient 값이 0이기에 학습할 수 X

[RBM (Restricted Boltzmann machine)]

  • 같은 layer에 있는 node끼리는 연결하지 X
  • 다른 layer끼리 fully connection
  • Pre-training 과 Fine-tuning 과정을 거쳐 initialize를 하는 초창기 모델(잘 사용 X)

[Xavier / He initialization]

  • layer의 특성에 따라 initialization
  • Normal initialization / Uniform initialization 모델 존재
  • nin : layer의 input 수
  • nout: layer의 output 수
  • He는 Xavier와 달리 nout값이 존재하지 않는 모델

  • fan_in = nin
  • fan_out = nout

  • Xavier 함수는 nn.init 패키지에 있음

 

9-3

  • Underfitting -> 너무 낮은 차원의 모델 사용
  • Overfitting -> 너무 높은 차원의 모델 사용

  • Overfitting 모델은 train data에 대해 매우 높은 정확도를 보임
  • But, test data에 대해서는 정확도가 떨어지고 에러율 증가

 

[Dropout]

  • 모델의 일부 뉴런을 랜덤하게 제거하고, 학습을 진행하여 Overfitting 방지

* Dropout ≒ 앙상블 학습

1. 매 학습때 뉴런을 무작위로 삭제하는 행위를 매번 다른 모델을 학습시키는 것으로 해석

2. 추론 때는 뉴런의 출력에 삭제한 비율을 곱합으로써 앙상블 학습에서 여러 모델의 평균을 내는 것과 같은 효과

  • (p=drop_prob) 학습을 하면서 해당 스텝마다 전체 노드 중에 몇퍼센트 정도를 사용 안 할지 결정

  • test 시에는 모든 뉴런에 신호 전달 (Dropout X)
  • model.train() : Dropout 적용 -> train 전에 선언
  • model.eval(): Dropout 적용 X -> test 전에 선언

 

9-4

  • Gradient Vanishing : 기울기 소실
  • Gradient Exploding : 기울기 폭주

  • Train과 Test 데이터의 분포 차이가 문제를 일으킴( 입력과 출력 분포가 다름)

  • Layer 들끼리 Covariate Shift가 발생  

 

[Batch Normalization]

  • 각 Layer 데이터 분포가 평균이 0, 분산이 1이 되도록 정규화
  • (미니배치) m개의 입력 데이터의 집합에 대해 평균과 분산을 구함
  • ε 기호는 작은 값(예컨대 10e-7 등)으로 0으로 나누는 사태를 예방
  • 배치 정규화 계층마다 이 정규화된 데이터에 고유한 확대와 이동 변환 수행(: 확대 ,  : 이동)
  • -> 이유: 연속적으로 Batch Normalization 시 activation 함수의 비선형성 손실을 완화
  • 처음에는 γ =1, β=0 부터 시작하고, 학습하면서 적합한 값 조정

 

[Batch Normalization에서도 Train mode, Evaluation mode 사용]

  • Batch Normalization 하는 과정에서 X가 변경되면 μ 와 variance가 전혀 다른 값이 나올 수 있음
  • 즉, batch 값이 바뀌면다른 결과가 나올 수 있음
  • 따라서 이 과정에서도 trian과 evaluation 모드를 따로 둠

learning mean 과 learning variance

  • 학습셋에서 sample mean(= μ)과 sample variance(=σ) 평균을 따로 저장 (learning mean, learning variance)
  • Inference (테스트)할 때 입력 데이터의 μ 와 variance가 아닌, leanring mean과 learning variance를 계산
  • Batch Normalization 학습이 끝난 뒤 입력 batch 데이터와 상관 없이 변하지 않는 고정값이 됨
  • 이 값을 inference 할 때에는 이 값을 이용하여 mean과 variance로 normalizae를 시키는 방식을 취함
  • 따라서 , batch에 있는 데이터가 변하더라도 normalize하는 mean과 variance 값이 바뀌지 X

 

  • normalization 기법은 activation 함수 이전에 사용하는 것이 일반적