- Hyperparameter Tuning Guide
- 딥러닝 홀로서기
- Gradient Descent With Momentum
- 학습해왔던 관성의 법칙을 유지하는 방식으로 학습 개선
- Batch Size
- Batch를 크게하면 좋은 이유
- 그러나 항상 크게할 수 없는 이유
- 일반적으로 Batch라고 하면 Mini-batch를 의미한다는 점
- Wandb QuickStart 회원가입
Review
- 신경망의 순전파와 역전파
- 신경망의 순전파
- 신경망의 역전파
- 모델 생성과 모델 초기화
- 경사하강법의 다양성
- 학습 과정에서 알아야 할 Tricks
- 가중치 감소/제한(Weight Decay/Constraint)
- 드롭아웃(Dropout)
- 학습률 계획(Learning Rate Scheduling)
- 그간 다뤄본 데이터
- 손글씨 MNIST
- Fashion MNIST
Hyperparameter tuning
Grid Search
- 오래걸리기 때문에 1개 혹은 2개 정도의 파라미터 최적값을 찾는 용도로 적합하다.
- 모델 성능에 직접적인 영향을 주는 하이퍼파라미터가 따로 있기 때문에 이러한 파라미터만 제대로 튜닝해서 최적값을 찾은 후 나머지 하이퍼파라미터도 조정해나가면 못해도 90% 이상의 성능을 확보할 수 있다.
Random Search
- 무한루프라는 Grid Search의 단점을 해결하기 위해 나온 방법이다.
- 지정된 범위 내에서 무작위로 모델을 돌려본 후 최고 성능의 모델을 반환한다.
- 상대적으로 중요한 하이퍼파라미터에 대해서는 탐색을 더 하고, 덜 중요한 하이퍼파라미터에 대해서는 실험을 덜 하도록 한다.
Bayesian Methods
- 이전 탐색 결과 정보를 새로운 탐색에 활용하는 방법이다.
튜닝 가능한 파라미터의 종류
- 배치 크기(batch_size)
- 반복 학습 횟수(에포크, training epochs)
- 옵티마이저(optimizer)
- 학습률(learning rate)
- 활성화 함수(activation functions)
- Regularization(weight decay, dropout 등)
- 은닉층(Hidden layer)의 노드(Node) 수
Batch Size
- 모델의 가중치를 업데이트할 때마다, 즉 매 iteration 마다 몇 개의 입력 데이터를 볼 지 결정하는 하이퍼파라미터이다.
- 배치 사이즈를 너무 크게 하면 한 번에 많은 데이터에 대한 Loss를 계산해야 한다는 단점이 생긴다.
- 이럴 경우 가중치 업데이트가 빠르게 이루어지지 않은데다, 주어진 Epoch 안에 충분한 횟수의 iteration을 확보할 수 없게 된다.
- 파라미터가 굉장히 많은 모델에 큰 배치 사이즈를 적용하게 될 경우 메모리를 초과해버리는 현상(Out of Memory)이 발생하기도 한다.
- 배치사이즈를 너무 작게 하면 학습에 오랜 시간이 걸리고, 노이즈가 많이 발생한다는 단점이 있다.
- 일반적으로 35 ~ 512 사이의 2의 제곱수로 결정한다.
- 기본값은 32로 설정되어 있다.
Optimizer
- adam이라는 옵티마이저가 꽤 좋은 성능을 보장한다.
- 기능을 추가한 adamW, adamP와 같은 옵티마이저도 사용된다.
- 중요한 점은 모든 경우에 좋은 옵티마이저란 없다는 것이다.
Learning Rate
- 옵티마이저에서 지정해 줄 수 있는 하이퍼파라미터 중 하나이다.
- 학습률이 너무 높으면 경사 하강 과정에서 발산하면서 모델이 최적값을 찾을 수 없게 되어버린다.
- 반대로 너무 낮게 설정할 경우에는 최적점에 이르기까지 너무 오래 걸리거나, 주어진 iteration 내에서 모델이 수렴하는데 실패하기도 한다.
Momentum
- 옵티마이저에 관성을 부여하는 하이퍼파라미터이다.
- 이전 iteration에서 경사 하강을 한 정도를 새로운 iteration에 반영한다.
- 지역 최적점에 빠지지 않도록 한다.
Network Weight Initialization
- 초기 가중치를 어떻게 설정할 지 결정하는 가중치 초기화는 신경망에서 중요한 요소이다.
표준편차 1인 정규분포로 가중치를 초기화할 때 각 층의 활성화 값 분포
- 표준편차가 일정한 정규분포로 가중치를 초기화 해 줄 때 대부분 활성화 값이 0과 1에 위치한다.
- 활성값이 고르지 못할 경우 학습이 제대로 이루어지지 않는다.
- 간단한 방법임에도 잘 사용되지 않는다.
Xavier 초기화를 해주었을 때의 활성값 분포
- Xavier initialization은 가중치를 표준편차가 고정값인 정규분포로 초기화 했을 때의 문제점을 해결하기 위해 등장한 방법이다.
- 이전 층의 노드가 $n$ 개일 때, 현재 층의 가중치를 표준편차가 $\frac{1}{\sqrt{n}}$ 인 정규분포로 초기화한다.
He 초기화를 해주었을 때 활성화 값 분포
- 활성화 함수가 sigmoid인 신경망에서는 잘 동작한다.
- 하지만 ReLU의 경우엔 층이 지날수록 활성값이 고르지 못하게 되는 문제를 보인다.
- 이런 문제를 해결하기 위해 등장한 것이 He initialization이다.
- He 초기화는 이전 층의 노드가 $n$ 개일 때, 현재 층의 가중치를 표준편차가 $\frac{2}{\sqrt{n}}$ 인 정규분포로 초기화한다.
- He 초기화를 적용하면 층이 지나도 활성값이 고르게 유지되는 것을 확인할 수 있다.
요약
- Sigmoid ⇒ Xavier 초기화를 사용하는 것이 유리
- ReLU ⇒ He 초기화 사용하는 것이 유리
Code
Import & EDA
1 |
|
GridSearchCV 사용
1 |
|
Keras Tuner
1 |
|