Выпадение с плотно связанным слоем

Я использую модель densenet в одном из своих проектов, и у меня есть некоторые трудности с регуляризацией.

Без какой-либо регуляризации уменьшаются и валидация, и потеря обучения (MSE). Однако потери на обучение снижаются быстрее, что приводит к некоторому переобучению окончательной модели.

Поэтому я решил использовать отсев, чтобы избежать переобучения. При использовании Dropout потери при проверке и обучении уменьшаются примерно до 0,13 в течение первой эпохи и остаются постоянными в течение примерно 10 эпох.

После этого обе функции потерь уменьшаются так же, как и без выпадения, что снова приводит к переобучению. Окончательная величина потерь находится примерно в том же диапазоне, что и без выпадения.

Так что мне кажется, что отсев из школы на самом деле не работает.

Если я переключусь на регуляризацию L2, я смогу избежать переобучения, но я бы предпочел использовать Dropout в качестве регуляризатора.

Теперь мне интересно, испытывал ли кто-нибудь такое поведение?

Я использую выпадение как в плотном блоке (слой узкого места), так и в переходном блоке (коэффициент отсева = 0,5):

def bottleneck_layer(self, x, scope):
    with tf.name_scope(scope):
        x = Batch_Normalization(x, training=self.training, scope=scope+'_batch1')
        x = Relu(x)
        x = conv_layer(x, filter=4 * self.filters, kernel=[1,1], layer_name=scope+'_conv1')
        x = Drop_out(x, rate=dropout_rate, training=self.training)

        x = Batch_Normalization(x, training=self.training, scope=scope+'_batch2')
        x = Relu(x)
        x = conv_layer(x, filter=self.filters, kernel=[3,3], layer_name=scope+'_conv2')
        x = Drop_out(x, rate=dropout_rate, training=self.training)

        return x

def transition_layer(self, x, scope):
    with tf.name_scope(scope):
        x = Batch_Normalization(x, training=self.training, scope=scope+'_batch1')
        x = Relu(x)
        x = conv_layer(x, filter=self.filters, kernel=[1,1], layer_name=scope+'_conv1')
        x = Drop_out(x, rate=dropout_rate, training=self.training)
        x = Average_pooling(x, pool_size=[2,2], stride=2)

        return x

2 ответа

Решение

Без какой-либо регуляризации уменьшаются и валидация, и потеря обучения (MSE). Однако потери на обучение снижаются быстрее, что приводит к некоторому переобучению окончательной модели.

Это не переоснащение.

Переобучение начинается, когда ваши потери проверки начинают увеличиваться, в то время как ваши потери в обучении продолжают уменьшаться; вот его контрольная подпись:

Изображение адаптировано из статьи Википедии о переобучении - по горизонтальной оси могут лежать разные вещи, например, глубина или количество усиленных деревьев, количество итераций подгонки нейронной сети и т. Д.

Разница (обычно ожидаемая) между обучением и потерей проверки - это нечто совершенно иное, называемое пробелом обобщения:

Важная концепция для понимания обобщения - это пробел в обобщении, то есть разница между производительностью модели на обучающих данных и ее производительностью на невидимых данных, взятых из того же распределения.

где, с практической точки зрения, данные проверки - это действительно невидимые данные.

Так что мне кажется, что отсев из школы на самом деле не работает.

Это вполне может быть так - отсев не всегда срабатывает и для каждой проблемы.

Интересная проблема,
я бы рекомендовал построить график потерь при проверке и обучении, чтобы увидеть, действительно ли это переоснащение. если вы видите, что потеря валидации не изменилась, а потеря тренировки снизилась (вы также, вероятно, увидите большой разрыв между ними), то это переобучение.

Если это переоснащение, попробуйте уменьшить количество слоев или количество узлов (также немного поиграйте со скоростью отсева после того, как вы это сделаете). Также может оказаться полезным сокращение количества эпох.

Если вы хотите использовать другой метод вместо исключения, я бы рекомендовал использовать слой Gaussian Noise.
Керас - https://keras.io/layers/noise/
TensorFlow - https://www.tensorflow.org/api_docs/python/tf/keras/layers/GaussianNoise

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