1. 머신러닝 어플리케이션 설정하기
1-1. Train/Dev/Test
신경망의 층 수, Hidden Unit 등 사용자가 지정해야하는 하이퍼파라미터는 여러번 반복해 신경망을 학습시켜야 한다.
전통적으로 Train set 으로 학습 후 Dev set으로 검증 후 Test set로 Score를 확인한다
하지만 딥러닝, 예를 들어 100만개 이상의 데이터에서는 Dev/Test를 전통적이 아닌 약 1%/1%가 되도록 적게 하는것이 좋다.
또한 딥러닝에서는 Train과 Test가 다른 분포에서 나오는 경우도 많다. 이때는 Dev와 Test set이 같은 분포에서 나와야 한다.
1-2. 편향과 분산(Bias & Variance)
높은 편향 >>>> 과소적합(Under Fitting: Train set 조차 잘 학습이 되지 않음)
높은 분산 >>>> 과대적합(Over Fitting: Train set만 과도하게 학습)
1-3. 머신러닝 레시피(편향 및 분산의 오류가 있을 때)
이때 규제(정규화)는 Regulation으로 Overfitting을 억제하는 부분이다.
2. 신경망 네트워크의 정규화
2-1. 정규화(Regulation)
높은 분산으로 네트워크가 Overfitting 됐다고 의심갈 때 가장 먼저 진행한다.
Overfitting은 가중치(W)의 값이 너무 클 때 자주 발생한다.
거의 모든 매개변수를 W가 가지고 있기에 b는 일반적으로 고려하지 않아도 된다.
λ = 정규화 파라미터(하이퍼 파라미터임)
신경망에서는
모델이 최적화되는 동안 큰 가중치를 가지는 것을 억제하고 가중치의 값들을 작게 유지하도록 유도한다. 이를 통해 모델의 복잡도를 낮추고 일반화 능력을 향상시킨다. 즉, 손실함수를 계속 작개 해아하기 때문에 람다가 커지면 W를 낮추는것이다. W, 즉 가중치의 값이 작아지면 데이터의 작은 변동에 덜 민감하게 돼어 오버피팅을 억제한다.
λ를 크게 만들면 W값이 0에 가까워지므로 Hidden Units가 0에 가까워지므로 간단하고 작은 신경망이 된다고 생각할 수 있다.
2-2. Dropout Regulization
각가의 층에 대해 노드를 삭제하는 확률을 설정한다. 이를 통해 간소화된 네트워크로 표현해 과대적합 방지
구현 방법: 대표적으로 역 드롭아웃(Inverted Dropout)
d3는 0.8 확률로 1, 0.2 확률로 0
즉, 노드를 삭제한 후에 얻은 활성화값에 keep_prob(삭제하지 않을 확률)을 나눠준다.
이를 통해 기존에 삭제하지 않았을 때의 활성화 값의 기대값으로 맞춘다.
이 역 드롭아웃 방법은 스케일링 문제를 작게 해주기에 Test를 쉽게 해준다.
- Test에서는 Dropout 사용 X
그리고 경사하강법의 Step 마다 0이 되는 Hidden Units은 변경된다.
Dropout의 효과
- Dropout은 랜덤으로 노드를 삭제시켜 하나의 특성에 의존하지 못하게 만들어 가중치를 분산시키는 효과가 있다. L2norm과 비슷한 효과
- Keep_prob 확률은 층마다 다르게 설정할 수 있다.
- Dropout 사용 전, 비용함수가 단조감소인지 확인 후 사용해야 한다.
다른 규제 방법: 데이터 증식, Early Stopping
3. 최적화 문제 설정
3-1. 입력값의 정규화
이를 통해 신경망의 훈련을 빠르게 할 수 있다.
Test set를 정규화 시 Train set에서의 평균과 분산을 사용해야 한다.
입력값을 정규화하는 이유: 정규화를 통해 비용함수의 모양이 최적화하기 쉬위줘 학습이 빨라진다.
3-2. 경사 소실/경사 폭발(Vanishing Gradients, Exploding Gradients)
해당 두가지 개념은 매우 깊은 신경망을 훈련시킬 때, 기울기가 매우 커지거나 작아지는 문제가 생길 수 있다.
이처럼 경사의 기하급수적 증가와 감소로 인해 폭발, 소실로 인해 학습시키는데 많은 시간이 걸리기에 가중치 초기화 값을 신중하게 잘 선택해야 한다.
3-3. 심층 신경망의 가중치 초기화
가중치 추기화를 주의깊게 하면 경사소실 및 폭발을 어느정도 해결할 수 있다.
이렇게 다양한 입력 특성의 개수 등을 활용해 가중치의 분산을 설정하면 된다.
해당 내용은 네이버 부스트코스 Andrew NG의 딥러닝 2단계: 심층 신경망 성능 향상시키기를 바탕으로 작성된 글입니다.