[CS231n] Lecture 6 | Training Neural Networks I

2024. 8. 8. 22:51·CS231n
목차
  1.  
  2. Activation Functions
  3. Data Preprocessing
  4. Weight Initialization
  5. Batch Normalization
  6. Babysitting the Learning Process
  7. Hyperparameter Optimzation
  8. References
더보기

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

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

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

 

 Leaky ReLU

  • f(x)=max(0.01x,x)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 γ,βγ,β를 통해 스케일링 및 시프팅
      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
  1.  
  2. Activation Functions
  3. Data Preprocessing
  4. Weight Initialization
  5. Batch Normalization
  6. Babysitting the Learning Process
  7. Hyperparameter Optimzation
  8. References
'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

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.