Предварительная обработка и отсев в автоэнкодерах?

Я работаю с автоэнкодерами и у меня мало путаницы, я пробую разные автоэнкодеры, например:

fully_connected autoencoder
convolutional autoencoder
denoising autoencoder 

У меня есть два набора данных: один - числовой набор данных, который имеет значения float и int, второй - текстовый набор данных, который имеет значения текста и даты:

Набор числовых данных выглядит так:

date ,        id ,             check_in , check_out , coke_per , permanent_values , temp
13/9/2017     142453390001    134.2       43.1        13         87                 21
14/9/2017     142453390005    132.2       46.1        19         32                 41
15/9/2017     142453390002    120.2       42.1        33         99                 54
16/9/2017     142453390004    100.2       41.1        17         39  

           89

Любой мой набор текстовых данных выглядит так:

data              text
13/9/2017         i totally understand this conversation about farmer market and the organic products, a nice conversation ’cause prices are cheaper than traditional
14/9/2017         The conversation was really great. But I think I need much more practice. I need to improve my listening a lot. Now I’m very worried because I thought that I’d understand more. Although, I understood but I had to repeat and repeat. See you!!!

Итак, мои вопросы:

Должен ли я нормализовать свои числовые значения данных перед подачей на любой тип автоэнкодера? если они являются значениями int и float, мне все еще нужно нормализовать?

Какую функцию активации следует использовать в автоэнкодере? В некоторых статьях и исследованиях говорится «сигмоид», а в некоторых — «релу»?

Должен ли я использовать отсев в каждом слое? как если бы моя артичара для автоэнкодера выглядела как

encoder (1000 --> 500 -- > 256 ----> 128 ) --> decoder (128 --> 256 --> 500--> 784) 

что-то вроде этого?

encoder(dropout(1000,500) --> dropout( 500,256) --> dropout (256,128) )----> decoder(dropout(128,256),dropout(256,500),dropout(500,784))

Для набора текстовых данных, если я использую word2vec или любое встраивание для преобразования текста в вектор, тогда у меня будут значения с плавающей запятой для каждого слова, должен ли я также нормализовать эти данные?

text ( Hello How are you  ) -- > word2vec(text) ----> ([1854.92002 , 54112.89774 ,5432.9923 ,5323.98393]) 

я должен нормализовать эти значения или напрямую использовать в автоэнкодере?


person Aaditya Ura    schedule 10.06.2018    source источник


Ответы (1)


Нормализация выполняется, когда данные разных функций относятся к разным масштабам. Здесь Check_out и Check_in имеют совсем другие масштабы, чем coke_per. Другая возможная причина, по которой нормализация полезна, заключается в том, что после нормализации данные хорошо подходят для алгоритмов обучения. Если вы не сделаете нормализацию, есть шанс, что ваш алгоритм обучения не будет сходиться.

Dropout Можно рассматривать как регуляризатор для вашего набора данных. Поэтому предпочтительнее включить Dropout для проблемы Bias/Variance. Вы также можете включить слой BatchNorm, если хотите. Мне нравится думать о Dropout как об усреднении модели.

SoftMax/Relu Обычно предпочтение отдается Relu, так как при активации softmax возникает проблема исчезновения градиента. Но на самом деле все зависит от проблемы. Я бы начал с использования Relu и заменил на softmax, если метрика, которую я тестирую, не дает хороших результатов.

person Kris    schedule 10.06.2018
comment
После нормализации данных и подачи в автоэнкодер, а затем получения вывода из автоэнкодера следует ли денормализации данных или использовать те же значения? - person Aaditya Ura; 10.06.2018
comment
На выходе энкодера есть функция активации, которая выводит тот же нормализованный диапазон, что и вход: тангенс для [-1 до 1] или сигмоид [от 0 до 1]. - person vijay m; 10.06.2018