더보기
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'를 잘 반영
- 단점
- 양극단에 가까워질 수록 gradient의 값이 0 (saturated)
- not zero-centered
- 시그모이드의 출력값은 전부 양수(0~1)로 zero-centered 하지 않음
- 이로 인해 역전파 과정에서 모든 방향으로의 그래디언트 부호가 동일해지는 문제가 발생
- 역전파의 시작 지점에서는 모두 동일한 upstream gradient를 받음 (하나의 타겟)
- 따라서 모든 방향으로의 그래디언트는 모두 +이거나 모두 -
- 아래 그림과 같이 지그재그로 가중치가 업데이트됨 (효율적이지 않음)
- exp() 계산 비용이 높음
tanh
- sigmoid와 유사하지만 zero-centered (-1 ~ 1)
- 그러나 여전히 양 극단에서 그래디언트 포화가 발생
ReLU
- \( f(x) = max(0, x) \)
- + 영역에서는 그래디언트 포화 발생 x
- max로 빠른 계산 → 빠른 수렴
- 단점
- - 영역에서 그래디언트 포화 발생
- 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)라는 현상이 발생하는데, 이는 원활한 학습을 방해함
- 배치 정규화는 이를 해결하고자 컨볼루션 이후 / 활성 함수 이전에 배치 단위로 정규화를 진행
- 과정
- 각 층에 들어오는 입력에 대해 미니배치 단위로 평균과 분산 계산. 이때 채널(활성화 맵) 별로 평균과 분산을 각각 구함
- 계산한 평균과 분산으로 정규화 진행
- learnable parameter \( \gamma , \beta \)를 통해 스케일링 및 시프팅
- 이는 정규화를 통해 평균 0, 분산 1로 제한된 모델의 표현력을 보존하기 위함 (ReLU의 경우 절반은 사라지니까)
- 이후 테스트 단계에서는 학습 단계에서 미니배치 단위로 구한 평균과 분산에 대해 이동평균을 구한 하나의 고정된 평균과 분산 값을 이용
- 장점
- 높은 학습률을 적용하여 더 빠른 수렴 가능
- 그래디언트가 모델 전반에 걸쳐 잘 흐를 수 있게 해줌
- 가중치 초기화에 덜 민감
- 규제의 역할도 함 (레이어의 출력이 미치배치 단위의 모든 데이터에 영향을 받기 때문)
Babysitting the Learning Process
- 데이터 전처리
- 학습의 첫 단계는 데이터 전처리. 데이터를 정규화하여 평균이 0이 되도록 설정 (zero-mean)
- 모델 선택
- 사용할 데이터에 알맞은 적절한 모델 선택
- 네트워크 초기화
- 네트워크를 초기화한 후 초기 Loss가 그럴듯한지를 확인한다. 예를 들어 10개의 클래스가 있다면 softmax를 사용하는 경우 Loss는 대략 -log(1/10)로 약 2.3 정도가 된다. 이 값이 나오면 네트워크가 정상적으로 작동하고 있다는 것을 알 수 있다
- Regularization 설정
- Regularization을 추가하면 Loss가 증가한다. 마찬가지로 네트워크가 정상적으로 작동하고 있는지를 확인하는 좋은 방법
- 학습 시작 및 모니터링
- 데이터의 일부만 사용하여 모델을 학습시켜본다. 이때 높은 확률로 오버피팅이 발생할 것이며 Loss가 줄어들면서 동시에 Train Accurcay가 증가하는지 모니터링한다
- 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번의 샘플링에 불과함
- 결론적으로 임의 탐색이 더 유리하다
이 외에도
References
'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 |