저번에 모델을 학습했을 때 살짝의 training data 과적합이 발생했었음.
(validation loss는 약 10 에폭 동안 정체 + training loss만 떨어짐)
오늘의 목표는 과적합 경향 살짝이라도 줄여서 최종 accuracy 높이기!
(기존 accuracy는 91%!!)
오버피팅을 줄이기 위해 L1, L2 정규화 기법 중 무엇을 적용할까?
L1 -> 중요한 특성만 강조. 나머지 특성들을 거의 0으로 만듦
L2 -> 모든 특성이 중요할 때 사용. 모든 특성들의 값 크기를 고루고루 줄임.
내가 봤을 때 이미지 분류 task에서는 하나의 이미지를 구성하는 모든 픽셀(feature)이 중요하지 않다.
특정 feature들이 한 이미지의 class 분류에 있어 결정적인 역할을 할 것 같음.
-> L1을 적용해보자.
1. L1, 람다값=0.0001 적용
L1을 적용해보며 새롭게 안 사실..
람다값을 0.0001만 줬는데도 규제 효과가 겁나 크다
초반 training loss 엄청 커짐.
이게 L1 사용 안했을 때
이게 L1 적용했을 때..
L1 적용하고나서 training data에도 제대로 학습 안되고, validation 성능도 안좋아서
중간에 멈추고 람다값 수정.
2. L1, 람다값=0.000001 적용
람다에 0 두 개 추가
학습 매우 더딤....
validation 성능 향상 안됨
accuracy 1퍼 낮아짐.. ㅠ
L1 없애고.. L2 적용해보자.
3. L2, 람다값=0.0001 적용
성능 안 좋아서 중간에 멈춤.
뭔가 아무리 정규화를 적용해도 generalization 성능이 안 나아지는 걸 보면
정규화가 아니라 더 많은 feature들을 학습해야하는 거 아닐까?
애초에 학습된 general feature가 부족하니까 validation 성능이 더 안나아지는 것 같기도?
모델을 좀 더 키우고 오버피팅을 일부러 좀 더 키워볼까
4. fc3 레이어 추가해서 모델 키우기
accuracy 2퍼 떨어짐...
5. earlystopping patience 15로 변경
좀 더 확실하게 오버피팅된 모델을 만든 다음에 규제를 해보고 싶으므로 earlystopping patience 값 늘려보기
accuracy는 똑같은데
validation loss 더 줄어듦
6. earlystopping 델타값 0.01에서 0.005로 줄여보기
성능 개선 없음...
내일 다시 하기...