Posso usar o ReLU no autoencoder como função de ativação?

11

Ao implementar um autoencoder com rede neural, a maioria das pessoas usará sigmóide como função de ativação.

Podemos usar ReLU? (Como a ReLU não tem limite no limite superior, basicamente significa que a imagem de entrada pode ter um pixel maior que 1, diferente dos critérios restritos para o autoencoder quando o sigmoid é usado).

RockTheStar
fonte

Respostas:

5

Aqui está um tópico de discussão (de julho de 2013) indicando que pode haver alguns problemas, mas isso pode ser feito.

Çağlar Gülçehre (do laboratório de Yoshua Bengio) disse que usou com sucesso a seguinte técnica em Matérias de conhecimento: Importância da informação prévia para otimização :

treine o primeiro DAE como de costume, mas com retificadores na camada oculta: a1(x) = W1 x + b1 h1 = f1(x) = rectifier(a1(x)) g1(h1) = {sigmoid}(V1 h1 + c1) minimize a entropia cruzada ou a perda de MSE, comparando g1 (f1 (corrompido (x))) e x. o sigmoide é opcional, dependendo dos dados.

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, também do laboratório Bengio, disse que fez o mesmo, exceto para substituir com um pena "sobre os valores de ativação" (presumivelmente ?) Tanto domínio da adaptação para Classificação de sentimentos em larga escala: uma abordagem de aprendizado profundo (ICML 2011) e em redes neurais de retificadores esparsos profundos (AISTATS 2011).L 1 " g 2 ( ... ) " 1W1L1g2()1

Dougal
fonte
Obrigado pela resposta rápida! Então, você está dizendo que há algum problema na otimização do codificador automático quando o ReLU é usado em vez do Sigmoid?
RockTheStar
Parece que pode causar problemas, sim, mas definitivamente pode ser feito se você configurar o processo de aprendizado corretamente. Pode ajudar a ler os artigos vinculados.
Dougal 03/04
Estou experimentando um autoencoder simples no conjunto de dados MNIST. Eu uso redes totalmente conectadas com arquitetura 784-128-64-2-64-128-784. Uso relus em todos os lugares, mas estou experimentando a camada de gargalo (relu ou linear) e a camada de saída (relu ou sigmóide). Usar retificador na saída leva a um desempenho pior; sigmoid faz melhor. Para saída sigmóide, o gargalo linear parece estar se saindo um pouco melhor. Então, minha combinação favorita para essas duas camadas é linear / sigmóide. (By the way, usando sigmoids em todas as camadas torna claramente pior.)
ameba
@ameoba Não me surpreende que as saídas de relu sejam ruins: se você sabe que as saídas têm certos limites, faz sentido usar uma função de ativação que o restrinja a esses limites. Não tenho muita experiência nessa área, mas provavelmente tentaria uma ELU ou uma ReLU com vazamento para as camadas ocultas.
Dougal
2
Oh, uau, eu não estava ciente das ELU! Muito obrigado pela dica, Dougal. Eu tentei, e eles funcionam melhor. O aprendizado profundo é incrível: novos truques aparecem todos os anos e ninguém tem idéia de por que alguns funcionam melhor que outros. (CC para @RockTheStar). A propósito, também acho que o otimizador do Adam tem um desempenho incrível.
Ameba