1. 오버피팅 줄이기
- DNN 특유의 유연성으로 인해 학습 데이터에 딱 들어맞게 되어 과적합이 발생할 여지가 많음
- 해결법으로 조기 멈춤 / dropout / max-norm 정규화 / 데이터 확장 등 다양한 방법 존재
1) Dropout
-
매 학습 스텝 마다 임의의 뉴런을 정해진 확률로 동작하지 않게 하는 기법
- 단 출력층 노드는 제외
- 현 스텝에서 비활성화 되었다고 다음 스텝에 계속 비활성화 되어있지는 않음
- 학습 시에만 발동 / 테스트 시에는 발동 X
-
이 경우 드롭율 ( = 1 - 유지율 ) 만큼의 뉴런이 비활성화 되게 되므로 정상적인 경우보다 출력 값이 작아짐
→ 학습 종료 후 연결 가중치의 값을 유지율 만큼 곱한 값으로 변경해서 보정
-
tflearn 을 이용한 구현
# 유지율 정의
keeping_rate = 0.7
# 신경망 구성
input_layer = tflearn.input_data(...)
input_drop = tflearn.dropout(input_layer, keeping_rate) # 패러미터->(적용할 층, 유지율)
# 입력층, 은닉층에 적용 가능 / 출력층엔 불가
- 드롭아웃을 적용 시 1~2% 정도로 정확도 향상을 기대할 수 있음
- 타 기법 적용 후 추가로 적용하는 기법이므로 1~2%도 상당한 상승으로 볼 수 있음
- 층수가 많은 네트워크는 드롭율 상승 / 층수가 적은 네트워크는 드롭율 하강
- 모델이 과적합 되어있으면 드롭율 상승 / 미적합 발생시 드롭율 하강