Стратегия регуляризации в Керасе

Я пытаюсь настроить задачу нелинейной регрессии в Керасе. К сожалению, результаты показывают, что происходит переоснащение. Вот код,

model = Sequential()
model.add(Dense(number_of_neurons, input_dim=X_train.shape[1], activation='relu', kernel_regularizer=regularizers.l2(0)))
model.add(Dense(int(number_of_neurons), activation = 'relu', kernel_regularizer=regularizers.l2(0)))
model.add(Dense(int(number_of_neurons), activation='relu', kernel_regularizer=regularizers.l2(0)))
model.add(Dense(int(number_of_neurons), activation='relu',kernel_regularizer=regularizers.l2(0)))
model.add(Dense(int(number_of_neurons), activation='relu',kernel_regularizer=regularizers.l2(0)))
model.add(Dense(outdim, activation='linear'))
Adam = optimizers.Adam(lr=0.001)
model.compile(loss='mean_squared_error', optimizer=Adam, metrics=['mae'])
model.fit(X, Y, epochs=1000, batch_size=500, validation_split=0.2, shuffle=True, verbose=2 , initial_epoch=0)

Результаты без регуляризации показаны здесь без регуляризации. Средняя абсолютная ошибка для обучения намного меньше по сравнению с валидацией, и оба имеют фиксированный разрыв, который является признаком переоснащения.

Регуляризация L2 была указана для каждого слоя, например,

model = Sequential()
model.add(Dense(number_of_neurons, input_dim=X_train.shape[1], activation='relu', kernel_regularizer=regularizers.l2(0.001)))
model.add(Dense(int(number_of_neurons), activation = 'relu', kernel_regularizer=regularizers.l2(0.001)))
model.add(Dense(int(number_of_neurons), activation='relu', kernel_regularizer=regularizers.l2(0.001)))
model.add(Dense(int(number_of_neurons), activation='relu',kernel_regularizer=regularizers.l2(0.001)))
model.add(Dense(int(number_of_neurons), activation='relu',kernel_regularizer=regularizers.l2(0.001)))
model.add(Dense(outdim, activation='linear'))
Adam = optimizers.Adam(lr=0.001)
model.compile(loss='mean_squared_error', optimizer=Adam, metrics=['mae'])
model.fit(X, Y, epochs=1000, batch_size=500, validation_split=0.2, shuffle=True, verbose=2 , initial_epoch=0)

Результаты для них приведены здесь L2 регуляризованный результат. MAE для теста близок к обучению, что хорошо. Тем не менее, MAE для обучения плохой на 0,03 (без регуляризации он был намного ниже на 0,0028).

Что я могу сделать, чтобы уменьшить обучение MAE с регуляризацией?

1 ответ

Исходя из ваших результатов, создается впечатление, что вам нужно найти правильное количество регуляризации, чтобы сбалансировать точность обучения с хорошим обобщением для тестового набора. Это может быть так же просто, как уменьшение параметра L2. Попробуйте уменьшить лямбду с 0,001 до 0,0001 и сравнить свои результаты.

Если вы не можете найти хорошую настройку параметров для L2, вы можете попробовать вместо этого упростить регуляризацию. Просто добавь model.add(Dropout(0.2)) между каждой парой плотных слоев и, если необходимо, поэкспериментируйте со скоростью отсева. Более высокий показатель отсева соответствует большей регуляризации.

Другие вопросы по тегам