Связь между диапазоном входных значений и сходимостью потерь - PullRequest
0 голосов
/ 18 апреля 2020

Я обучаю вариационный автоэнкодер с tenorflow 2.0 с использованием высокопроизводительного API Keras. Цель состоит в том, чтобы резонировать изображения, которые состоят из формы с однородной интенсивностью int_shape, не равной нулю на нулевом фоне, см. Следующее изображение с int_shape = -0.25:

enter image description here

Вариационный автоэнкодер имеет следующую архитектуру: w со скрытым пространством из 50 измерений, в отличие от 16, указанных на изображении :

enter image description here

Лямбда-слой использует функцию для выборки из нормального распределения, которое выглядит так:

def sampling(args):
    z_mean, z_log_var = args
    epsilon = K.random_normal(shape =(1,1,latent_dim))
    return z_mean + K.exp(0.5 * z_log_var) * epsilon

Потеря представляет собой комбинацию KL расхождение и потеря MSE:

    def vae_loss(y_pred, y_gt):
        mse_loss = mse(y_pred, y_gt)
        original_dim = GLOBAL.input_res**2
        mse_loss *= original_dim
        z_mean = model.get_layer('z_mean_layer').output
        z_log_var = model.get_layer('z_log_var_layer').output
        kl_loss = 1 + z_log_var - K.square(z_mean) - K.exp(z_log_var)
        kl_loss = K.sum(kl_loss, axis=-1)
        kl_loss *= -0.5
        return K.mean(mse_loss + GLOBAL.beta*kl_loss)

В настоящее время int_shape принимает значения в диапазоне (-0,5, 0,5), но разной величины (1e-1, 1e-2 и редко 1e-3) , Целью VAE является получение изображения в качестве входного сигнала и восстановление того же изображения. Для диапазона (-0,5, 0,5) сходимость потерь не является детерминированной c: иногда она остается постоянной на протяжении всего времени, иногда она остается постоянной в течение 5 / 50/180 эпох, а затем падает и сходится. В результате реконструкции не всегда хороши, некоторые грязные, иногда только шум. По моему мнению, сходимость сильно зависит от начальной начальной точки для оптимизации.

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

Мой вопрос: есть ли связь между диапазоном входных данных и сходимостью потерь в случае VAE?

Из моих экспериментов формы с более высоким int_shape имеют тенденцию иметь лучшие реконструкции. Я бы отнес это к более высоким градиентам и, следовательно, к большим шагам в пространстве гиперпараметров, так как значение градиентов зависит от значения ввода. Большие шаги ведут к точке, где потеря находит минимум и сходится. В этом смысле меньшие значения приведут к меньшим градиентам, и поэтому будут предприняты меньшие шаги по оптимизации.

Другая теория, которая у меня есть, заключается в том, что для небольшого диапазона (-0,5, 0,5) точки в скрытом пространстве представляют входы расположены ближе друг к другу, и во время случайной выборки они путаются, и для декодера выбирается «неправильная» точка. Я проверил, построив гистограммы скрытых компонентов пространства. Чем выше диапазон входных значений, тем выше дисперсия распределения в скрытом пространстве.

Обновление: я пробовал разные скорости обучения, от 1e-4 до 5e-2, с и без скорости обучения распад (уменьшение на 10% каждые 10 эпох). Я также тренировался для достаточного количества эпох (300), размер партии 64, тренировочный набор 3800 изображений, val на 100. Потеря не улучшилась, и восстановление не является хорошим. И 32-битная, и 64-битная точность с плавающей запятой были использованы без какого-либо успеха. Для скоростей обучения, превышающих 2e-2, потеря иногда превращается в Nan. Самая высокая скорость обучения, обеспечивающая стабильное обучение, составляет 1e-2. Кроме того, скрытое пространство равно 50 (хотя, IMO не должно влиять на проблему).

Ответы [ 2 ]

1 голос
/ 19 апреля 2020

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

1 голос
/ 18 апреля 2020

Это звучит в зависимости от скорости обучения.

Масштабирование входов, вероятно, не слишком сильно влияет на сеть. Да, нормализация входных данных, например, с помощью z-показателя, является стандартной и поможет сходимостью. Но я думаю, что это не то, что движет вашими результатами.

Для случая VAE, я думаю, это тот факт, что ваш коэффициент 10x или 100x также будет масштабировать выходы . Это приведет к большим потерям, которые будут передавать более сильный сигнал через остальную часть сети. Вы получите более быструю конвергенцию, если исходная скорость обучения была слишком низкой. Что, судя по всему, так и было. Очень длительный период, когда ничего не происходит, сопровождаемый возможной конвергенцией, часто означает, что вы можете тренироваться быстрее.

Поэтому вместо масштабирования входных данных в 10 или 100 раз попробуйте увеличить скорость обучения в 10 или 100 раз. Суперконвергентная статья Lesl ie Н. Смита дает отличную информацию о высокой скорости обучения и хорошем графике LR для быстрой конвергенции. Если вы хотите go еще глубже настроить гиперпараметр, у него также есть отличная статья по дисциплинированному подходу к гиперпараметрам нейронной сети .

...