모델을 선택하고 훈련시키려면 다양한 하이퍼파라미터를 변경하면서 훈련시키고 최적의 성능을 도출해야 한다.
다음은 선택 할 수 있는 하이퍼파라미터 목록들이다.
진단 : 성능 향상이 어느 순간 멈추었다면 원인을 분석할 필요가 있다. 문제를 진단하는데 사용할 수 있는 것이 모델에 대한 평가이다. 평가 결과를 바탕으로 문제를 진단해봐야 한다.
가중치 : 가중치 초깃값은 작은 난수를 사용한다. 작은 난수가 애매하다면 오토인코더 같은 비지도 학습을 통해 사전 훈련(가중치 정보를 얻기 위한 사전 훈련) 진행 고려
학습률 : 초기에 매우 크거나 작은 임의의 난수를 선택해서 학습 결과를 보고 조금씩 변경해야 한다. -> 망 계층이 많다면 학습률을 높이고, 계층이 몇 안 된다면 학습률을 작게 설정
활성화 함수 : 활성화 함수 변경시 손실 함수도 함께 변경해야 하는 경우가 많다. 변경시 신중해야 한다.
배치와 에포크 : 최근 딥러닝 트렌드는 작은 배치에 큰 에포크를 사용한다. 여러 배치와 에포크로 실험해보는 것도 좋다.
옵티마이저 및 손실 함수 : 일반적인 옵티마이저로 확률적 경사 하강법을 사용한다. 아담과 알엠에스프롭등도 좋은 성능을 보인다. 하지만 이것 역시 다양한 옵티마이저와 손실 함수를 적용해 봐야한다.
네트워크 구성 : 네트워크 토폴로지(topology)를 최적으로 조정해봐야 한다.
모델을 2개 이상 섞어서 사용하는 앙상블 또한 성능 향상에 도움이 될 수 있다.
GPU 병렬 프로그래밍 라이브러리 CUDA, cuDNN 설치 및 설정에 관한 내용이다. 나중에 자세히 정리할 예정이다!
정규화(normalization) : 데이터 범위를 사용자가 원하는 범위로 제한하는 방법.
-> 픽셀 정보 범위를 0~255에서 0~1로 바꾸는 것
규제화(regularization) : 모델 복잡도를 줄이기 위해 제약을 두는 방법. -> 데이터가 네트워크에 들어가기 전에 필터를 적용하는 것으로 생각하면 된다.
-> 드롭아웃과 조기 종료가 있다.
표준화(generalization) : 데이터를 평균은 0, 표준편차는 1인 형태의 데이터로 만드는 방법. -> 표준화 스칼라, z-스코어 정규화라고도 한다.
-> 평균을 기준으로 얼마나 떨어져 있는지를 살펴볼 때 사용한다. 수식(p.329) 참고
배치 정규화(batch normalization) : 기울기 소멸, 기울기 폭발 같은 문제를 해결하기 위한 방법이다.
-> 일반적으로 기울기 소멸이나 폭발 문제를 해결하기 위해 손실 함수로 렐루 함수, 초깃값 튜닝, 학습률 등을 조정한다.
기울기 소멸과 폭발 원인은 내부 공변량 변화(internal covariance shift)때문이라고 한다.
내부 공변량 변화 : 네트워크 층마다 활성화 함수가 적용되서 입력 값들의 분포가 계속 바뀌는 현상
이 분산된 분포를 정규 분포로 만들기 위해 표준화화 유사한 방식을 미니 배치에 적용하는 것이다. -> 평균은 0, 표준편차는 1로 유지하도록 BN층을 추가하는 것이다.
적용하지 않을 때보다 대부분 성능이 좋아지기 때문에 많이 사용한다. 구현은 (p.331)
과적합 문제를 방지하기 위해 사용하는 기법이다.
훈련할 때 일정 비율의 뉴런만 사용하고, 나머지 뉴런에 해당하는 가중치는 업데이트 하지 않는 방법이다. -> 매 단계 뉴런을 바꾸어 가면 훈련시킨다.
구현은 (p.344)
이 역시 과적합을 회피하는 규제 기법이다.
매 에포크마다 검증 데이터에 대한 손실을 측정하여 모델의 종료 시점을 제어하는 것이다. -> 과적합이 보이면 훈련을 종료하는 것이다.
구현은 (p.355)
데이터 사이언티스트들이 정확도를 조금씩 올린다는 말이 뭔지 알려주는 장이다.
배치 정규화, 드롭아웃, 조기 종료 구현은 역시 깃헙에!