Могу ли я использовать ReLU в автоэнкодере в качестве функции активации?


11

При реализации автоэнкодера с нейронной сетью большинство людей используют сигмоид в качестве функции активации.

Можем ли мы использовать ReLU вместо этого? (Поскольку ReLU не имеет ограничений на верхнюю границу, в основном это означает, что входное изображение может иметь пиксель больше 1, в отличие от ограниченных критериев для автоматического кодера при использовании сигмоида).

Ответы:


5

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

Чаглар Гюльчере (из лаборатории Йошуа Бенжио) сказал, что он успешно использовал следующую технику в вопросах знания: Важность предварительной информации для оптимизации :

обучите первый DAE как обычно, но с выпрямителями в скрытом слое: a1(x) = W1 x + b1 h1 = f1(x) = rectifier(a1(x)) g1(h1) = {sigmoid}(V1 h1 + c1) минимизируйте кросс-энтропию или потери MSE, сравнивая g1 (f1 (коррупционный (x))) и x. сигмоид является необязательным в зависимости от данных.

обучите 2-й DAE с добавленным шумом перед выпрямителем f1 и используйте единицы восстановления softplus с потерей MSE: h2 = f2(h1) = rectifier(W2 h1 + b2) g2(h2) = softplus(V2 h2 + c2) минимизируйтеf1(x)g2(f2(rectifier(corrupt(a1(x)))))2+λ1W1+λ2W2

Xavier Glorot, а также из лаборатории Bengio, сказал он сделал то же самое для замены , кроме с штрафа «на значения активации» (предположительно ?) В обоих доменов адаптации для Крупномасштабная классификация настроений: подход глубокого обучения (ICML 2011) и в нейронных сетях глубокого разреженного выпрямителя (AISTATS 2011).W1L1g2()1


Спасибо за быстрый ответ! Таким образом, вы говорите, что есть некоторая проблема в оптимизации auteencoder, когда вместо Sigmoid используется ReLU?
RockTheStar

Кажется, что это может вызвать проблемы, да, но это определенно можно сделать, если вы правильно настроили процесс обучения. Это может помочь прочитать связанные документы.
Дугал

Я экспериментирую с простым автоэнкодером в наборе данных MNIST. Я использую полностью подключенные сети с архитектурой 784-128-64-2-64-128-784. Я использую relus везде, но я экспериментирую со слоем узкого места (relu или linear) и выходным слоем (relu или сигмоид). Использование выпрямителя на выходе приводит к ухудшению производительности; сигмоид делает лучше Для сигмоидального выхода, линейное узкое место, кажется, немного лучше. Поэтому моя любимая комбинация для этих двух слоев - линейная / сигмовидная. (Кстати, использование сигмоидов на всех слоях делает его явно хуже.)
amoeba

@ameoba Меня не удивляет, что выходы relu плохие: если вы знаете, что выходы имеют определенные границы, имеет смысл использовать функцию активации, которая ограничивает вас этими границами. Я не очень опытный в этой области, но я бы, вероятно, попробовал ELU или негерметичный ReLU для скрытых слоев.
Дугал

2
Ого, я не знала о ELU! Большое спасибо за совет, Дугал. Я попробовал их, и они работают лучше. Глубокое обучение удивительно: новые трюки появляются каждый год, и никто не знает, почему одни работают лучше, чем другие. (CC для @RockTheStar). Кстати, я также считаю, что оптимизатор Adam работает довольно круто.
амеба
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.