오늘은 간단하게 이미지 문제에서 과적합 발생시 해결할 수 있는 방법에 대해서 간단하게 요약해보고자 합니다.
과적합 증상
모델 개발을 하다보면 수 없이 과적합을 만나게 됩니다. 학습을 완료한 후에 테스트셋으로 돌려보니 현격하게 성능 차이가 발생한다면 이는 과적합이 발생했다는 것으로 볼 수 있습니다. 과적합이 발생하는 원인이 다르기 때문에 해결방안도 각기 다를 것 같습니다.
오늘은 간략하게 소개만하고 세부적은 방법에 대해서 이어서 작성해야할 예정입니다.
대응 방안
과적합 발생 시 크게 두 가지 방법으로 대응을 할 수 있을 것 같습니다. 하나는 모델에 제약을 가하거나 모델에 변화를 주는 방법이고, 다른 하나는 데이터에 기반하여 해결이 가능할 것 같습니다.
데이터에 기반한 대응 방안
- 데이터 사이즈 늘리기 (데이터 증강)
얼마나 데이터 사이즈를 늘려야할까라는 질문이 뒤따르지만, 당연하게도 데이터가 사이즈가 늘어나면 과적합이 어느 정도 완화됩니다.
이미지의 경우 회전, 이동, 확대, 대칭, 기울기, 노이즈 첨가, 색상변화 등 다양한 증강 기법이 존재합니다.
텍스트의 경우 코퍼스를 더 모으거나, 특정 도메인에 속한 코퍼스가 가지고 있다면 좀 더 일반화된 코퍼스를 모으는 방법이 필요할 듯합니다. 사실 텍스트의 경우 이미지처럼 자연스러운 또 프로그래매틱한 증강은 쉽지 않습니다.
- 생성모델 사용(GAN)
GAN역시 이미지에 대해서는 수 많은 모델들이 나와있지만, 텍스트의 경우는 적용하기가 쉽지 않을 것 같습니다. GPT와 같이 생성모델을 사용해서 코퍼스를 만드는 것이 가능할까? 생각도 해보았는데, 적당하지 않은 방법일 것 같습니다(느낌적인 느낌).
- 전이학습(Transfer Learning)
사실 전이학습의 경우 이미지 모델이건 텍스트 모델이건 이미 큰 사이즈의 제너릭한 데이터를 바탕으로 학습한 것이기 때문에 테이터에 기반한 대응방안으로 분류하였습니다. 이미지쪽은 이미 이미지넷 등에서 학습한 모델(VGG, ResNet, Inception, EfficientNet 등)을 특수한 목적으로 전이 학습하는 경우가 빈번하고, 텍스트의 경우도 Transformer 계열(BERT, T5, GPT 등)은 초대형 코퍼스를 학습(Pre-training)한 모델을 가져와서 목적에 맞추어 학습(하위 태스크)시키거나 특수한 분야의 코퍼스를 추가 학습시키는 등의 방법으로 대응하는 경우가 많습니다.
모델에 기반한 대응 방안
- 모델 Parameter 수 줄이기
모델의 파라미터가 너무 많아도 학습데이터에 과적합됩니다. 우선, 파라미터수를 줄이는 것만으로도 과적합에 대응할 수 있습니다.
- Regularization 추가
L1 정규화나 L2 정규화 등의 제약을 걸어둡으로써 과적합에 대응이 가능합니다.
- 앙상블 학습
K-Fold CV 등으로 학습데이터를 나누어 동일한 모델을 다르게 학습시키고 앙상블을 하거나, 동일한 학습데이터세트로 서로다른 모델을 학습하여 앙상블하는 경우 서로 다른 특징을 잡아냄으로써 과적합 대응이 가능해집니다.
- Dropout
뉴럴넷의 경우 드롭아웃을 추가함으로써 모델의 학습에 제약을 가하게되면 과적합을 방지할 수 있습니다. 드롭아웃의 효과에 대해서는 너무 길어서 여기서 다루기에는 적합하지 않지만, 간단하게 말해서 드롭아웃을 적용하면 마치 모델 파라미터를 줄인 작은 모델을 앙상블 시키는 효과가 있다고 알려져 있습니다.