[CS231n] Lecture 6 | Training Neural Networks I

2024. 8. 8. 22:51·CS231n
더보기

CS231n 강의 홈페이지: https://cs231n.stanford.edu/

CS231n Spring 2017 유튜브 강의 영상: https://www.youtube.com/watch?v=vT1JzLTH4G4&list=PLC1qU-LWwrF64f4QKQT-Vg5Wr4qEE1Zxk

강의 슬라이드 & 한글 자막: https://github.com/visionNoob/CS231N_17_KOR_SUB

 

Activation Functions

Sigmoid

  • \( \sigma (x)= \frac{1}{1+e^{-x}} \)
  • neuron의 'firing rate'를 잘 반영
  • 단점
    1. 양극단에 가까워질 수록 gradient의 값이 0 (saturated)
    2. not zero-centered

      • 시그모이드의 출력값은 전부 양수(0~1)로 zero-centered 하지 않음
      • 이로 인해 역전파 과정에서 모든 방향으로의 그래디언트 부호가 동일해지는 문제가 발생
      • 역전파의 시작 지점에서는 모두 동일한 upstream gradient를 받음 (하나의 타겟)
      • 따라서 모든 방향으로의 그래디언트는 모두 +이거나 모두 -
      • 아래 그림과 같이 지그재그로 가중치가 업데이트됨 (효율적이지 않음)
    3. exp() 계산 비용이 높음

 

tanh

  • sigmoid와 유사하지만 zero-centered (-1 ~ 1)
  • 그러나 여전히 양 극단에서 그래디언트 포화가 발생

 

ReLU

  • \( f(x) = max(0, x) \)
  • + 영역에서는 그래디언트 포화 발생 x
  • max로 빠른 계산 → 빠른 수렴
  • 단점
    1. - 영역에서 그래디언트 포화 발생
    2. Dead ReLU → 입력값이 음수로 유지 되어 계속 0 출력

      • Hyperplane 절반만 활성화
      • 가중치 초기화가 잘못되거나 학습률이 지나치게 높은 경우에 발생 가능

 

 Leaky ReLU

  • \( f(x) = max(0.01x, x) \)
  • - 영역에서도 포화 발생 x
  • 여전히 빠름
  • zero mean output
  • Dead ReLU도 해결
  • PReLU는 기울기를 learnable 파라미터로 설정

 

ELU

  • zero mean output
  • - 영역을 saturated 하게 (논문에서는 잡음에 강인하다고 주장)
  • exp()로 인한 높은 계산 비용

 

Maxout Neuron

  • ReLU와 Leaky ReLU의 일반화된 형태
  • 선형 형태이므로 포화 x
  • 단점은 뉴런 당 파라미터 수가 2배가 됨


Data Preprocessing

 

  • 전처리는 모든 데이터가 동일한 범위에 있도록 하여 학습 과정에서 동등하게 기여하게 만드는 것이 목적
  • 훈련 데이터 전체에 대한 평균과 표준편차를 통해 normalize 하는 것이 일반적
  • 그러나 이미지 데이터의 경우, 주로 zero-centering만 하고 normalization은 잘 하지 않음 (원본 이미지의 공간 정보를 그대로 활용하기 위해)

    • 이미지 전체 평균 빼주기
    • 채널 별 평균 빼주기
  • 전처리 방식을 테스트 데이터에도 동일하게 적용해야 함

Weight Initialization

  • 모든 가중치를 0으로 초기화
    • 이 경우 모든 뉴런이 동일한 연산을 수행하고 동일한 gradient를 가지며 동일한 방식으로 업데이트되어 뉴런 간의 차이가 사라지게 됨 (symmetry breaking이 일어나지 않음)
  • 아주 작은 임의의 값으로 초기화

    • 정규분포에서 샘플링하여 초기 가중치를 설정한 뒤 0.01로 스케일링
    • 이 경우, 작은 네트워크에서는 충분하지만 네트워크가 깊어지면 문제가 생길 수 있음
      • forward pass: 레이어 출력값의 표준편차를 보면 층이 깊어질 수록 0에 수렴하는 것을 확인할 수 있다. 즉 출력값들이 뒤로 갈 수록 0에 가까워진다는 뜻. 이는 Wx에서 W가 매우 작기 때문에 반복적으로 곱해지면서 0에 가까워지기 때문
      • backward pass: upstream gradient와 local gradient가 곱해져서 gradient가 전파되는데, Wx에서 local gradient는 x임을 알 수 있다. x는 앞선 경우에서 알 수 있듯이 매우 작은 값이므로 gradient 또한 0에 가까워 학습이 제대로 이루어지지 않음
  • 아주 큰 임의의 값으로 초기화

    • 가중치가 크므로 출력값도 커지게 됨. 이에 따라 tanh을 거치며 그래디언트 포화 발생
  • Xavier initilization
    • 입력 데이터의 분산이 출력에도 유지되게 가중치를 초기화 하는 방법
    • 입력 뉴런 개수 n일 때 가중치의 분산이 1/n이 되도록 설정 (수식 증명 참고: Link)
  • He initialization
    • 앞서 Xavier 초기화의 경우 활성 함수가 (국소적으로) 선형인 시그모이드 계열에서는 잘 동작하지만 ReLU와 같이 음수 부분을 출력하지 않는 활성 함수의 경우 분산이 절반으로 줄어들어 잘 작동하지 않음
    • 이를 해결하기 위해 He 초기화는 가중치의 분산이 2/n 되도록 설정

Batch Normalization

  • 학습 진행 중 입력 데이터의 분포가 점점 변하게 되는 내부 공변량 변화(Interna Covariance Shift)라는 현상이 발생하는데, 이는 원활한 학습을 방해함
  • 배치 정규화는 이를 해결하고자 컨볼루션 이후 / 활성 함수 이전에 배치 단위로 정규화를 진행
  • 과정 

    • 각 층에 들어오는 입력에 대해 미니배치 단위로 평균과 분산 계산. 이때 채널(활성화 맵) 별로 평균과 분산을 각각 구함
    • 계산한 평균과 분산으로 정규화 진행
      batch normalization
    • learnable parameter \( \gamma , \beta \)를 통해 스케일링 및 시프팅
      scaling and shifting

      • 이는 정규화를 통해 평균 0, 분산 1로 제한된 모델의 표현력을 보존하기 위함 (ReLU의 경우 절반은 사라지니까)
    • 이후 테스트 단계에서는 학습 단계에서 미니배치 단위로 구한 평균과 분산에 대해 이동평균을 구한 하나의 고정된 평균과 분산 값을 이용
  • 장점
    • 높은 학습률을 적용하여 더 빠른 수렴 가능
    • 그래디언트가 모델 전반에 걸쳐 잘 흐를 수 있게 해줌
    • 가중치 초기화에 덜 민감
    • 규제의 역할도 함 (레이어의 출력이 미치배치 단위의 모든 데이터에 영향을 받기 때문)

Babysitting the Learning Process

  1. 데이터 전처리
    • 학습의 첫 단계는 데이터 전처리. 데이터를 정규화하여 평균이 0이 되도록 설정 (zero-mean)
  2. 모델 선택
    • 사용할 데이터에 알맞은 적절한 모델 선택
  3. 네트워크 초기화
    • 네트워크를 초기화한 후 초기 Loss가 그럴듯한지를 확인한다. 예를 들어 10개의 클래스가 있다면 softmax를 사용하는 경우 Loss는 대략 -log(1/10)로 약 2.3 정도가 된다. 이 값이 나오면 네트워크가 정상적으로 작동하고 있다는 것을 알 수 있다
  4. Regularization 설정
    • Regularization을 추가하면 Loss가 증가한다. 마찬가지로 네트워크가 정상적으로 작동하고 있는지를 확인하는 좋은 방법
  5. 학습 시작 및 모니터링
    • 데이터의 일부만 사용하여 모델을 학습시켜본다. 이때 높은 확률로 오버피팅이 발생할 것이며 Loss가 줄어들면서 동시에 Train Accurcay가 증가하는지 모니터링한다
  6. Learning Rate 설정
    • 학습률은 가장 중요한 하이퍼파라미터 중 하나이다. 학습률이 너무 작으면 Loss가 거의 줄어들지 않을 수 있고 반대로 너무 크면 발산할 수도 있다. 일반적으로 1e-3 ~ 1e-5 값을 사용하는데 cross validation을 통해 최적의 값을 결정할 수도 있다

Hyperparameter Optimzation

Cross-validation

  • Coarse Stage

    • 짧은 epoch으로 학습시키면서 특정 하이퍼파라미터가 어느 정도 범위에서 잘 작동하는지 대략적으로 탐색
    • 이때 학습률의 경우 lr = 10**uniform(-3, -6)과 같이 차수를 바탕으로 샘플링
    • Loss가 이전보다 3배 이상이라면 멈추고 범위 재설정
    • rough한 범위 구하기
  • Fine Stage

    • 앞서 얻은 범위를 바탕으로 더 좁은 범위에서, 조금 더 긴 epoch으로 학습을 진행
    • 그림과 같이 성능이 좋게 나오는 하이퍼파라미터 설정이 설정한 범위의 경계 근처에 존재하면 재고해볼 필요가 있음 (최적의 하이퍼파라미터가 설정한 범위 중간 정도에 위치하는 것이 가장 좋음)

 

Random Search & Grid Search

  • 파라미터 마다 중요도가 천차만별이라고 가정하면 임의 탐색은 성능이 높게 나오는 그림 상의 초록색 파라미터를 찾을 수 있는 반면 격자 탐색은 균일하게 샘플링 되기 때문에 놓칠 수 있음
  • 즉 초록색 파라미터 축 관점에서 임의 탐색은 9번의 샘플링이지만 격자 탐색은 3번의 샘플링에 불과함
  • 결론적으로 임의 탐색이 더 유리하다

 

이 외에도

학습률에 따른 loss curve(좌) & bad initialization(우)

 

train acc과 val acc 비교를 통한 오버피팅 판단(좌) & 가중치 크기 대비 업데이트 비율(우)

 


References

  • https://sonstory.tistory.com/71#Xavier%20%EC%B4%88%EA%B8%B0%ED%99%94-1

'CS231n' 카테고리의 다른 글

[CS231n] Lecture 8 | Deep Learning Software  (0) 2024.08.19
[CS231n] Lecture 7 | Training Neural Networks II  (0) 2024.08.13
[CS231n] Lecture 5 | Convolutional Neural Networks  (0) 2024.07.30
[CS231n] Lecture 4 | Introduction to Neural Networks  (0) 2024.07.29
[CS231n] Lecture 3 | Loss Functions and Optimization  (0) 2024.07.26
'CS231n' 카테고리의 다른 글
  • [CS231n] Lecture 8 | Deep Learning Software
  • [CS231n] Lecture 7 | Training Neural Networks II
  • [CS231n] Lecture 5 | Convolutional Neural Networks
  • [CS231n] Lecture 4 | Introduction to Neural Networks
ymkwon
ymkwon
공부 기록, 논문 리뷰 등에 대한 정리
  • ymkwon
    ymkwon
    ymkwon
  • 전체
    오늘
    어제
    • 분류 전체보기 (21)
      • CS231n (9)
      • 기계학습 (2)
      • 딥러닝 (0)
      • Paper Review (4)
      • Computer Vision (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    컴퓨터비전
    cs231n
    멀티모달
    cs231
    딥러닝
    기계학습
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
ymkwon
[CS231n] Lecture 6 | Training Neural Networks I
상단으로

티스토리툴바