규제(Regularization)

1. 모델의 크기 줄이기

과대적합을 완화하는 가장 간단한 방법은 모델의 크기를 줄이는 것이다. 모델의 기억 용량에 제한이 있다면 훈련 데이터를 단순히 외워 버리지 못한다. 반면에 과소적합이 되어서도 안되기 때문에 모델의 크기가 부족해서도 안된다. 절충점을 찾아야 한다.

적당한 모델 크기를 찾은 과정

이전에 나온 IMDB 영화 리뷰 모델 이용

from keras.datasets import imdb
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)

import numpy as np
def vectorize_sequences(sequences, dimension=10000):
    results = np.zeros((len(sequences), dimension))
    for i, sequence in enumerate(sequences):
        results[i, sequence] = 1.
    return results
train_data = vectorize_sequences(train_data)

from keras import models
from keras import layers

model = models.Sequential([
    layers.Dense(16, activation='relu'),
    layers.Dense(16, activation='relu'),
    layers.Dense(1, activation='sigmoid')])

model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])

history_original = model.fit(train_data, train_labels,
                             epochs=20, batch_size=512, validation_split=0.4)

더 작은 용량의 모델로 바꾸어 보기

model = models.Sequential([
    layers.Dense(4, activation='relu'),
    layers.Dense(4, activation='relu'),
    layers.Dense(1, activation='sigmoid')])
model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])
history_smaller_model = model.fit(train_data, train_labels,
                             epochs=20, batch_size=512, validation_split=0.4)