한빛미디어 도서 <혼자 공부하는 머신러닝+딥러닝>의 전개를 따른 내용이다.
챕터 7, 딥러닝을 시작합니다!
* 딥러닝의 핵심 알고리즘 '인공 신경망'
* 대표적인 인공 신경망 라이브러리 텐서플로, 케라스
* 인공 신경망 모델의 훈련을 돕는 도구 익히기
혼공단 활동의 마지막 챕터..
하지만 머신러닝 책 진도는 남았다..
이제 학기가 시작되니까 여름 방학에 이어서 해야 하려나 ㅠㅠ
혼공단 활동 덕분에 그래도 강제성이 좀 있어서 꾸준히 했다.
사용한 데이터와 따로 정의한 함수 정보
# 손실 곡선 확인하기
훈련된 모델이 과적합인지 판단하기 위해서
'훈련세트의 손실 곡선 vs 검증세트의 손실 곡선'을 시각화해보자.
딥러닝 모델은 epoch마다 손실을 계산한다.
훈련 데이터에 대한 손실을 줄여나가는 목적으로 학습이 이루어지는데,
과적합인지를 알기 위해서는 검증 데이터에 대한 손실도 알아야 한다.
그래서 fit() 메서드에 validation_data를 넣어주면 검증 손실을 알 수 있다.
그럼 fit()이 리턴하는 History 객체에는 이런 정보가 담긴다.
loss와 val_loss 정보를 가지고 시각화할 수 있다.
훈련 손실은 꾸준히 감소하자만,
epoch 6에서 검증 손실이 급증한다.
검증 손실도 꾸준히 낮아지면 성능이 좋을텐데!
=> 검증 손실이 급증하는 시점을 최대한 뒤로 늦추는 방법을 고민해보아야 한다.
# 과대적합 막기
▶ 옵티마이저를 조정
옵티마이저를 (기본값)RMSprop를 Adam으로 변경해 테스트해보자.
*Adam은 적응적 학습률을 사용 => epoch마다 학습률의 크기가 조정됨
- 변경 전(RMSprop): epoch 6에서 검증 손실이 증가추세임
- 변경 후(Adam): epoch 11에서 검증 손실이 증가추세임
이 데이터셋에는 Adam 옵티마이저가 더 적절함을 볼 수 있다.
++ 참고: 여러 옵티마이저에 대한 좋은 정리 자료
▶ 신경망에서 사용하는 규제
과대적합을 막는 방법 중 '규제'라는 것도 있었다.
그런데 신경망에 특화된 규제 방법이 따로 있다고 한다!
그 중 대표적인 규제 방법인 "드롭아웃"을 공부한다.
드롭아웃
모델 훈련시 어떤 샘플을 처리할 때, 어떤 hidden layer의 뉴런 k개 중 일부를 랜덤으로 드롭아웃한다
(일부 뉴런의 출력을 0으로 만든다)
=> 특정 뉴런에 과의존하는 것을 방지
=> 서로 다른 뉴런의 신경망들을 앙상블하는 것과 비슷한 맥락
드롭아웃 하는 방법
=> keras.layers 패키지의 Dropout 클래스를 이용
=> 어떤 layer의 출력 뒤에 드롭아웃을 둔다.
랜덤으로 30%를 드롭아웃하는 드롭아웃 객체(층)을 모델에 추가해보자.
유의해야할 것은, 드롭아웃은 훈련할 때 적용되는 것이지 예측시 적용되는 것이 전혀 아니라는 것이다.
예측시에는 모델이 학습한 모든 뉴런을 사용한다는 개념을 알고 있도록 하자.
드롭아웃을 적용해 훈련한 모델의 손실곡선을 확인해보자.
과대적합이 줄었다.
검증 손실이 더욱더 길게 감소추세를 보인다.
epoch를 적절한 곳에서 끊으면 과대적합되지 않은 모델이 만들어지겠다.
10까지 감소추세이므로 10에서 끊은 모델을 만들어서, 모델을 따로 저장해보자.
저장한 파라미터, 모델구조는 나중에 다시 불러들여 쓸 수 있다.
1. 모델이 학습한 파라미터를 동일한 구조의 모델에 불러오기
2. 저장한 모델구조와 파라미터를 불러오기
# 콜백
방금 바로 위에서는
1. 적절한 epoch가 어디인지 알기위해 compile, fit 뒤에 훈련/검증 손실곡선을 확인
2. 적절한 epoch를 지정해서 다시 fit하기
그렇지만 두 과정을 하나로 합칠 수 있다.
즉, 단 한번만 fit하면서도 적절한 epoch로 fit할 수 있다! - 콜백 개념을 알자
콜백(keras.callbacks) : 훈련 과정 중간에 어떤 작업을 수행할 수 있게 하는 객체
fit() 메서드의 매개변수 callbacks에 list로 전달한다.
사용해 볼 콜백
1. ModelCheckpoint 콜백
=> 에포크마다 모델을 저장
2. EarlyStopping 콜백
=> 검증손실이 몇번 이상 향상되면 조기종료
언제 조기종료되었는지 확인도 가능하다.
9 epoch => 즉 10번째 epoch에서 조기종료되었다.
손실함수도 확인해보자. (훈련 손실과 검증 손실)
10번째 epoch에서 종료되었으며,
8번째 epoch에서 가장 낮은 검증 손실을 보였다.
요약 : 아주아주 편리한 콜백 기능...!
이전 글:
딥러닝 | 딥러닝 모델 성능 높이기 | layer 추가 & 활성화함수 & 옵티마이저 조정하기
'데이터분석과 머신러닝' 카테고리의 다른 글
integer(0~9) array change process visualization (how to make gif) (0) | 2022.03.01 |
---|---|
혼공단 7기 6주차 미션인증 (0) | 2022.02.27 |
딥러닝 | 딥러닝 모델 성능 높이기 | layer 추가 & 활성화함수 & 옵티마이저 조정하기 (0) | 2022.02.25 |
딥러닝 | 인공 신경망 분류 모델 만들기 (0) | 2022.02.24 |
[python] k-means clustering visualization module | how to make scatterplot, gif (0) | 2022.02.17 |