VAE масштабирование входных данных - PullRequest
0 голосов
/ 20 марта 2019

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

Чтобы увидеть следующую проблему, описывающую доступ к Блокноту здесь: https://github.com/mobias17/VAE-Input-Scaling/blob/master/VAE%20Input%20Scaling.ipynb

Давайте предположим, что цель состоит в том, чтобы восстановить синусоидальную волну (например, звуковую волну) с помощью VAE. Когда я передаю стандартизированные данные через модель, она способна лишь приблизить значения от -1 до 1. Очевидно, что быстрый ответ - нормализация данных. Тем не менее, это приводит к следующим вопросам:

1) Каков рациональный вариант, согласно которому VAE может приближать значения только от -1 до 1? (это гауссова репараметризация, исчезающие градиенты?)

2) Есть ли способ преодолеть эту границу (изменения модели)?

3) Какова наилучшая практика для масштабирования данных для VAE? Должны ли данные быть нормализованы по стандартному стандартному устройству?

Результаты, показывающие Sutputs между -1 и 1

1 Ответ

0 голосов
/ 25 апреля 2019

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

Декодер этого VAE использует в качестве последнего слоя keras.layers.LSTM. Функция активации этого слоя по умолчанию - tanh, , а функция tanh выводит значения в диапазоне (-1,1). Вот почему модель не может генерировать значения за пределами этого диапазона.

Однако, если мы изменим функцию активации, скажем, на линейную, заменив

decoder_mean = LSTM(input_dim, return_sequences=True)

с

decoder_mean = LSTM(input_dim, return_sequences=True, activation=None)

VAE теперь может аппроксимировать данные. Это результат, который я получил после тренировки за 100 эпох. enter image description here

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

...