[CS231n] Lecture 7 | Training Neural Networks II

2024. 8. 13. 21:01·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

 

Recap

  • Activation Functions
  • Weight Initilization

    • 가중치가 너무 작으면 activation 0, 너무 크면 saturation
  • Data Preprocessing

    • 좌측 그림과 같이 zero-mean이 아닌 경우라면 결정 경계(가중치)가 조금만 변하더라도 loss는 이에 민감하게 반응
  • Batch Normalization

    • 미니 배치 단위로 평균과 표준편차 계산 (채널 별)
    • learnable parameter \( \gamma, \beta \)로 스케일링 및 시프팅
  • Babysitting Learning

    • 그림의 경우 train acc은 높아지는데 val acc은 침체 → 오버피팅
    • regularization 필요
  • Hyperparameter Search

    • 성능을 좌우하는 특정 파라미터 축을 더 넓게 탐색할 수 있는 임의 탐색이 더 유리
    • coarse stage (넓은 범위, 저반복) → fine stage (좁은 범위, 고반복)

Optimization

SGD

  • Basics
    • 손실 함수의 gradient를 계산하고 이에 대한 반대 방향으로 파라미터를 반복적으로 업데이트하는 최적화 방법
  • 한계
    • 비대칭적인 손실 함수
      • taco shell과 같은 형태의 손실 함수를 상상해보면 특정 방향에 대해서만 loss가 민감하게 반응
      • 이런 환경에서 SGD를 수행하면 지그재그 형태로 가중치가 업데이트 됨
      • 즉, loss에 영향을 거의 미치지 않는 수평 방향으로는 적게 업데이트 되고 loss에 큰 영향을 미치는 수직 방향으로는 많이 업데이트 되기 때문에 SGD가 잘 작동하지 않음
      • 또한 실제로는 그림과 같은 2차원이 아닌 훨씬 고차원의 공간이기 때문에 이러한 문제가 더 빈번하게 발생
    • Local minima와 Saddle points
      • SGD는 gradient가 0이 되는 지점에서 멈출 수 있는데, 이 경우 손실 함수의 optimal minima가 아니라 local minima일 수 있음
      • 또한 saddle point는 특정 방향으로의 gradient가 평평한 것을 말하는데 이는 앞선 경우와 마찬가지로 고차원 공간에서 매우 빈번하게 발생할 수 있음
    • Noise의 영향
      • SGD는 미니배치를 사용하기 때문에 noise가 섞여서 최적화가 이루어지고, 이로 인해 수렴 속도가 느려질 수 있음

 

SGD with Momentum

  • Basics
    • 현재 gradient뿐 아니라 이전 업데이트의 방향(velocity)을 고려하여 학습을 진행
    • 하이퍼파라미터 \( \rho \)를 통해 velocity의 영향을 조절하고 보통 0.9와 같은 높은 값으로 설정
    • 빨간 점이 현재 위치라고 가정했을 때 최종 업데이트는 gradient 벡터와 velocity 벡터의 가중평균으로 계산됨
  • 특징
    • velocity를 유지하기 때문에 gradient가 0인 지점에서도 움직임을 지속할 수 있어 local minima와 saddle points를 넘어설 수 있음
    • loss에 민감한 방향으로의 변동은 줄여주고 둔감한 방향으로의 움직임은 증가시키기 때문에 지그재그로 수렴하는 Poor Conditioning 문제를 해결할 수 있음

 

 

Nesterov Momentum

  • Basics
    • velocity 방향으로 이동한 후 그 지점에서 gradient를 계산하고, 이를 다시 원래 위치에서의 velocity와 결합
  • 특징
    • Convex 문제에서는 Nesterov가 뛰어난 성능을 보이지만 Neural Network와 같은 Non-convex 문제에서는 항상 성능이 보장되지 않을 수 있음
    • gradient를 나중에 계산함으로써 noise를 줄임
    • momentum 방식에서는 minima를 지나쳐버리는 overshooting이 발생할 수 있는데, Nesterov는 이를 줄이는 데 더 효과적

 

AdaGrad

  • Basics
    • 일반적인 momentum 방식에서 사용하는 velocity term 대신에, gradient의 제곱 값을 누적해서 사용
    • 학습 과정에서 각 step마다 gradient의 제곱 값을 계산하고 이를 누적하여 업데이트 시에 그래디언트를 나눠줌 (각 차원 별로 element-wise 하게)
  • 특징
    • 작은 gradient를 가진 차원에서는 제곱 값이 작으므로 속도가 상대적으로 빨라지고 큰 gradient를 가진 차원에서는 제곱 값이 크므로 속도가 점점 느려짐
    • 차원 별로 학습률이 조정되어 학습의 안정성이 향상됨
  • 한계
    • 학습이 계속 진행되면 gradient의 제곱 합이 누적되면서 step size가 점점 작아짐
    • 이로 인해 최적점에 가까워질수록 수렴 속도를 줄이며 안정적으로 도달하기 때문에 Convex 환경에서는 좋을 수 있음
    • 그러나 Non-convex 환경에서는 문제가 될 수 있는데, 특히 saddle point에 도달하면 학습이 멈춰버릴 수 있음

 

RMSProp

  • Basics
    • AdaGrad의 개선된 버전으로, 학습 도중 계산된 gradient 제곱 값을 누적하는 대신 decay rate를 적용하여 가중치를 부여하고 최신 gradient에 더 높은 비중을 두는 방식
    • 쉽게 말해 decay rate을 통해 누적된 gradient 제곱 값과 최신 값을 가중합
    • 일반적으로 decay rate는 0.9 또는 0.99 값을 사용
  • 특징
    • AdaGrad처럼 학습률을 조정하지만 학습이 진행될수록 step size가 줄어드는 문제를 방지할 수 있음
    • overshooting 없이 각 차원의 상황에 맞게 학습 궤적을 수정

 

 

Adam

  • Basics
    • velocity와 gradient의 제곱을 둘 다 사용 (momentum + RMSProp)
    • first moment와 second moment라는 두 가지 요소를 이용하여 학습을 진행
      • First moment: momentum과 비슷하게 gradient의 가중 합을 담당
      • Second moment: RMSProp처럼 gradient의 제곱을 이용해 step을 조절
    • 두 요소가 초기 단계에서 0으로 초기화되어 step size가 너무 커지게 되는 문제를 해결하기 위해 bias correction term을 도입
  • 특징
    • momentum과 RMSProp의 장점을 결합하여 보완 
    • 다양한 상황에서 잘 동작. 대부분의 문제에 대한 기본 optimizer로 사용
    • beta_1 = 0.9, beta_2 = 0.999, learning rate = 1e-3 또는 5e-4 등의 하이퍼파라미터 설정으로 대부분의 신경망 구조에서 준수한 성능

Learning Rate Decay

  • 중요성
    • 학습률은는 모든 최적화 알고리즘의 중요한 하이퍼파라미터
    • 학습률이 너무 높으면 모델이 불안정하게 학습되고(그래프에서 노란색 선처럼), 너무 낮으면 수렴 속도가 느려짐(파란색 선처럼).
  • 적용 방식
    • 학습 과정에서 학습률을 점차 줄임으로써 처음에는 큰 step으로 빠르게 학습하고, 이후에는 작은 step으로 더 세밀하게 학습하는 전략을 사용할 수 있음
    • Step Decay: 일정한 학습 단계(예: 100,000번의 반복 후)마다 learning rate를 갑작스럽게 낮추는 방법
    • Exponential Decay: 학습이 진행됨에 따라 learning rate를 점진적으로 줄여나가는 방법
    • ResNet 논문에서도 learning rate decay가 사용된 것을 알 수 있는데 loss가 일정하게 줄어들다가 어느 순간 급격히 감소하는 것을 확인할 수 있음
    • 학습을 시작할 때는 decay 없이 학습을 진행하고, loss 곡선을 관찰하여 학습률을 줄여야 할 시점을 파악하는 것이 좋음

Model Ensembles

Cyclic learning rate & Polyak averaging

  • 중요성
    • 앞선 최적화 방법들은 모두 training error를 줄이기 위한 것
    • 그러나 , 실제로 중요한 것은 training error가 아니라 한 번도 보지 못한 데이터에 대한 성능인 test error
    • 우리가 추구하는 것은 training error와 test error 사이의 격차를 줄이는 것
  • 적용 방식
    • 모델 앙상블 기법은 여러 개의 모델을 독립적으로 학습시키고 그 결과를 평균하여 최종 예측을 만듦
    • 앙상블을 구성할 때 각 모델의 하이퍼파라미터는 동일할 필요가 없고 모델의 크기, 학습률, 규제 기법 등을 다양하게 적용할 수 있음
    • 이로 인해 오버피팅을 줄이고, 성능을 약 2% 정도 향상시키는 효과가 있음
    • 독립적인 여러 모델을 학습시키는 대신, 하나의 모델을 학습하는 과정에서 중간에 여러 번의 스냅샷을 저장하고 이들로부터 나온 예측값들의 평균을 사용하는 기법도 존재
    • 또한, 학습 중인 네트워크의 파라미터를 지속적으로 평균화하여 smooth ensemble 효과를 얻는 Polyak averaging 기법도 존재하나 실제로 자주 사용하지는 않음

Regularization

Recap

  • 앙상블의 경우 test time 여러 모델을 실행해야 하므로 시간이 오래 걸림
  • 정규화(regularization)을 통해 앙상블이 아닌 단일 모델의 성능을 높일 수 있음. 정규화는 오버피팅을 방지하고 모델의 일반화 성능을 높임
  • 앞선 강의에서 L1, L2 정규화 등을 다루었고, 이는 손실 함수에 추가적인 항을 더하는 방식
  • 그러나, L2 정규화는 신경망 구조에는 잘 어울리지 않음

 

Dropout

  • Basics

    • 드롭아웃은 신경망에서 가장 많이 사용하는 정규화 기법 중 하나로, 훈련 과정 중 임의로 일부 뉴런을 0으로 설정하여 비활성화(activation이 0이 되게)하는 방식
    • 모델이 특정 뉴런이나 특징에 과도하게 의존하는 것을 막음으로써 오버피팅을 방지
    • FC layer에서 흔히 사용하지만 CNN에서 일부 채널 자체를 드롭하는 방식으로도 사용 가능
  • 효과

    • 특징들 간의 상호작용(co-adaptation)을 방지하여, 특정 특징에 대한 의존도를 줄이고 다양한 특징을 골고루 활용할 수 있도록 함
    • 예를 들어 고양이라는 이미지 클래스로 분류할 때 고양이의 다양한 특징을 골고루 이용할 수 있도록 함
    • 드롭아웃을 적용한 모델은 결과적으로 다양한 서브네트워크의 앙상블 효과를 얻을 수 있음. 단일 모델 학습만으로도 여러 모델을 사용하는 것과 유사한 효과
    • 훈련 시간은 증가할 수 있지만 결과적으로 더 나은 일반화 성능을 얻게 됨
  • Test Time에서의 처리

    • 드롭아웃을 적용하면 함수(=모델) \( f \)에 입력 \( x \)외에도 랜덤 변수 \( z \)가 추가되어 출력도 랜덤성을 가지게 됨
    • 그러나 test time에서 이러한 랜덤성을 평균화하기 위해 적분을 사용하는 것은 매우 어려움
    • 따라서 단순히 드롭아웃 확률 \( p \)를 곱해주어 모델 출력을 조정하는 식으로 이를 근사함
    • 그런데 test time에서 곱하기 연산이 추가되는 것도 거슬리니까 역으로 train time에서 p로 나눠주는 Inverted Dropout을 흔히 사용
    • 최종적으로 드롭아웃은 이와 같이 적용됨
      • Train time: 매 반복마다 레이어의 출력을 계산한 후 드롭아웃 확률 p에 따라 임의로 일부 노드를 0으로 만듦. 이후 다시 p로 나눠줌
      • Test time: 기존과 동일하게 predict 진행
  • Batch Normalization과의 유사성

    • 배치 정규화 또한 학습 시 미니배치 단위로 매번 서로 다른 데이터들이 만나 정규화가 이루어지면서 랜덤성을 얻고, 테스트 시에는 미치배치가 아닌 global 단위로 진행되면서 이러한 랜덤성을 평균화 함
    • 이러한 점에서 드롭아웃과 유사하며 배치 정규화 또한 규제 효과를 제공
    • 일반적으로 배치 정규화로도 충분한 규제 효과를 얻을 수 있기 때문에 드롭아웃과 병행하여 사용하지는 않지만 드롭아웃은 조정 가능한 파라미터 p가 존재한다는 점에서 여전히 유용

 

Data Augmentation

 

  • Basics
    • 다양한 변환을 통해 학습 데이터를 인위적으로 늘림으로써 모델이 다양한 데이터 분포에 대응할 수 있도록 하는 방법
    • horizontal flip, random crop, color jittering 등
  • Randomness in Train Time

    • 데이터 증강 또한 train time에서 한 이미지를 여러 번 변환하여 학습함으로써 랜덤성을 얻고 test time에는 각 변환된 이미지로 예측한 결과를 평균내는 방법을 사용
    • ResNet을 예로 들면 test time에서 하나의 이미지를 50개의 cropped image로 증강하여 이를 평균

 

Extra Methods

  • DropConnect

    • 드롭아웃과 유사한 방식으로, 활성화 함수가 아닌 weight matrix에 적용
  • Fractional Max Pooling

    • 고정된 2x2 영역에서 max pooling 연산이 이루어지는 기존 방법과 달리 임의 지역에 max pooling
  • Stochastic Depth

    • 학습 과정에서 일부 레이어를 건너 뛰어 학습하고, 테스트 시에는 전체 네트워크를 사용하는 방법. 드롭아웃과 유사한 정규화 효과를 가짐

Transfer Learning

  • Basics
    • 기존에 학습된 모델을 새로운 문제에 맞게 재사용하는 방법
    • 데이터가 부족할 때 유용하며 새로운 모델을 처음부터 학습시키는 대신 사전 학습된 모델을 활용
    • 전이 학습 역시 오버피팅 문제를 해결할 수 있는 효과적인 방법 중 하나
  • 적용 방식
    • 전이 학습은 사용하려는 데이터의 크기와 기존 데이터와의 유사성을 고려하여 전략을 달리 활용 
    • 기존 데이터와 유사한 경우
      • 데이터셋이 작다면 사전 학습된 모델의 최종 FC Layer만 새로운 task에 맞게 재학습시키고, 나머지 네트워크는 동결(Freeze)
      • 데이터가 더 많다면 동결된 일부 레이어를 점차 해제하여 재학습시킴으로써 네트워크 전체를 Fine-tuning 해볼 수 있음 (이때 학습률은 작게 설정)
    • 기존 데이터와 다른 경우 (의료 영상 같은 경우)
      • 데이터셋이 작다면 효과가 잘 안 나올 수 있음
      • 데이터셋이 크다면 사전 학습된 모델의 더 많은 부분을 파인튜닝
  • 전이 학습의 일반화

    • 현재 대부분의 컴퓨터 비전 관련 작업들은 모델을 처음부터 학습시키지 않고 ImageNet과 같은 대규모 데이터셋으로 사전 학습된 모델을 사용
    • 이러한 이유로 Caffe, TensorFlow, PyTorch와 같은 대부분의 딥러닝 프레임워크에서 사전 학습된 모델을 제공

'CS231n' 카테고리의 다른 글

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

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

  • 공지사항

  • 인기 글

  • 태그

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

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

티스토리툴바