페이지

2022년 7월 30일 토요일

4.4.1 네트워크 크기 축소

 과대적합을 맏는 가장 단순한 방법은 모델의 크기, 즉 모델에 있는 학습 파라미터의 수를 줄이는 것입니다. 파라미터의 수는 층의 수와 각 층의 유ㅜ닛 수에 의해 결정됩니다. 딥러닝에서 몰델에 잇는 학습 파라미터의 수를 종종 모델의 용량(capacity)이라고 말합니다. 당연하게 파라미터가 많은 모델이 기억 용량이 더 많습니다. 훈련 샘플과 ㅌ나깃 사이를 딕셔너리 같은 일대일 매핑으로 완벽하게 학습할 수도 있습니다. 이런 매핑은 일반화 능력이 없습니다. 옐르 들어50만개의 이진 파라미터가 있는 모델은 MNIST 훈련 세트의 숫자 이미지 클래스를 모두 쉽게 학습할 수 있습니다. 5만 개의 숫자 이미지 하나마다 10개의 이진 파라미터만 있으면 됩니다. 하지반 이런 모델은 새로운 숫자 샘플을 분류하는 용도는 쓸모가 없습니다. 항상 유념해야 할 것은 딥러닝 모델은 훈련 데이터에 잘 맞추려는 경향이 있다는 점입니다. 하지만 진짜 문제는 최적화가 아니고 일반화입니다.

다른 한편으로 네트워크가 기억 용량에 제한이 있다면 이런 매핑을 쉽게 학습하지 못할 것입니다. 따라서 손실을 최소화하기 위해 타깃에 대한 예측 성능을 가진 압축된 표현을 학습해야 ㅎ바니다.

정확히 이런 표현이 우리 관심 대상입니다. 동시에 기억해야 할 것은 과소적합되지 않도록 충분한 파라미너틀 가진 모델을 사용해야 한다는 점입니다. 모델의 기억용량이 부족해서는 안됩니다. 너무 많은 용량과 충부하지 않은 용량 사이의 정충점을 찾아야 합니다. 안타깝지만 알맞은 층의 수나 각 층의 유닛 수를 결정할 수 있는 마법 같은 공식은 없습니다. 데이터 알맞는 모델 크기를 찾으려면 각기 다른 구조를 (당연히 데티스 세트가 아니고 검증 세트에서)평가해 보아야 합니다. 적절한 모델 크기를 찾는 일반적인 작업 흐름은 비교적 적은 수의층과 파라미터로 시작합니다. 그 다음 검증 손실이 감소되기 사작할 때까지 층이나 유닛의 수를 늘리는 것입니다.

영화 리뷰 분류 모델에 적용해 보죠, 원래 네트워크는 다음과 같습니다.

    from keras import models

    from keras import layers


    model = models.Sequenctial()

    model.add(layers.Dense(16, activation='relu', input_Shape=(10000,)))

    model.add(layers.Dense(16, activation='relu'))

    model.add(layers.Dense(1, activation-'sigmoid'))

더 작은 네트워크로 바꾸어 보죠.

    model = models.Sequential()

    model.add(layers.Dense(6, activation='relu', input_shape=(10000,)))

    model.add(layers.Dense(6, activation='relu'))

    model.add(layers.Dense(1, activation='sigmoid'))

그림 4-4는 원본 네트워크와 축소된 네트워크의 검증 손실을 비교한 것입니다. 점으로 표현된 것이 작은 네트워크고, 덧셈기호가 원래 네트워크입니다(검증 손실이 작은것이 좋은 모델입니다). 여기서 볼 수 있듯이 작은 네트워크가 기본 네트워크보다 더 나중에 과대적합되기 시작했습니다(네번째에 에포크가 아니라 여섯 번째 에포크에서). 과대 적합이 시작되었을 때 성능이 더 천천이감소되었습니다.

이번에는 문제에 필요한 것보다 훨씬 더 많은 용량을 가진 테트워크를 비교해 보겠습니다.

    model = models.Sequential()

    model.add(layers.Dense(1024, activation='relu', input_shape=(10000,)))

    model.add(layers.Dense(1024, activation='relu'))

    model.add(layers.Dense(1, activation='sigmoid'))

그림 4-5는 더 큰 네트워크가 기본 네트워크에 비;해 얼마나 차이 나는지 보여 줍니다. 그림에서 점은 용량이 큰 네트워크의 검증 손실이고, 덧셈 기호는 원본 네트워크의 검증 손실입니다.

용량이 큰 네트워크는 첫 번째 에포크 이후 거의 바로 과대적합이 시작되어 갈수록 더 심해집니다. 검증 손실도 매우 불안정합니다.

한편 그림 4-6은 두 네트워크의 훈련 손실을 보여 줍니다. 여기서 볼 수 있듯이 용량이 큰 네트워크는 훈련 손실이 매우 빠르게 0에 가까워집니다. 용량이 많은 네트워크일수록 더 빠르게 훈련 데이터를 모델링할 수 있습니다(결국 훈련 손실이 낮아집니다). 하지만 더욱 과대적합에 민감해집니다(결국 훈련과 검증 손실 사이에 큰 차이가 발생합니다).


댓글 없음: