Puis-je utiliser ReLU dans l'encodeur automatique comme fonction d'activation?

11

Lors de la mise en œuvre d'un autoencodeur avec réseau de neurones, la plupart des gens utiliseront sigmoïde comme fonction d'activation.

Pouvons-nous utiliser ReLU à la place? (Étant donné que ReLU n'a pas de limite sur la limite supérieure, ce qui signifie essentiellement que l'image d'entrée peut avoir un pixel supérieur à 1, contrairement aux critères restreints pour l'autoencodeur lorsque sigmoïde est utilisé).

RockTheStar
la source

Réponses:

5

Voici un fil de discussion (de juillet 2013) indiquant qu'il pourrait y avoir des problèmes, mais cela peut être fait.

Çağlar Gülçehre (du laboratoire de Yoshua Bengio) a déclaré avoir utilisé avec succès la technique suivante dans Knowledge Matters: Importance of Prior Information for Optimization :

entraînez le premier DAE comme d'habitude, mais avec des redresseurs dans la couche cachée: a1(x) = W1 x + b1 h1 = f1(x) = rectifier(a1(x)) g1(h1) = {sigmoid}(V1 h1 + c1) minimisez l'entropie croisée ou la perte MSE, en comparant g1 (f1 (corrompu (x))) et x. le sigmoïde est facultatif selon les données.

former le 2ème DAE avec du bruit ajouté avant le redresseur f1 et utiliser des unités de reconstruction softplus avec perte MSE: h2 = f2(h1) = rectifier(W2 h1 + b2) g2(h2) = softplus(V2 h2 + c2) minimiserf1(x)g2(f2(rectifier(corrupt(a1(x)))))2+λ1W1+λ2W2

Xavier Glorot, également du laboratoire Bengio, a déclaré qu'il avait fait de même, sauf pour remplacer par une pénalité "sur les valeurs d'activation" (vraisemblablement ?) Dans les deux adaptations de domaine pour Classification des sentiments à grande échelle: une approche d'apprentissage en profondeur (ICML 2011) et dans les réseaux de neurones de redressement clairsemés (AISTATS 2011).W1L1g2()1

Dougal
la source
Merci pour la réponse rapide! Vous dites donc qu'il y a un problème dans l'optimisation de l'encodeur automatique lorsque ReLU est utilisé à la place de Sigmoid?
RockTheStar
Il semble que cela puisse causer des problèmes, oui, mais cela peut certainement être fait si vous configurez correctement le processus d'apprentissage. Il pourrait être utile de lire les articles liés.
Dougal
J'expérimente avec un simple encodeur automatique sur le jeu de données MNIST. J'utilise des réseaux entièrement connectés avec une architecture 784-128-64-2-64-128-784. J'utilise relus partout, mais j'expérimente avec la couche de goulot d'étranglement (relu ou linéaire) et la couche de sortie (relu ou sigmoïde). L'utilisation d'un redresseur dans la sortie entraîne de moins bonnes performances; sigmoïde fait mieux. Pour la sortie sigmoïde, le goulot d'étranglement linéaire semble se porter légèrement mieux. Donc, ma combinaison préférée pour ces deux couches est linéaire / sigmoïde. (Soit dit en passant, l'utilisation de sigmoïdes sur toutes les couches aggrave nettement la situation.)
amoeba
@ameoba Il n'est pas surprenant pour moi que les sorties relu soient mauvaises: si vous savez que les sorties ont certaines limites, il est logique d'utiliser une fonction d'activation qui vous contraint à ces limites. Je ne suis pas super expérimenté dans ce domaine, mais j'essaierais probablement une ELU ou une ReLU qui fuit pour les couches cachées.
Dougal
2
Oh, wow, je ne connaissais pas les ELU! Merci beaucoup pour l'astuce, Dougal. Je les ai essayés et ils fonctionnent mieux. L'apprentissage en profondeur est incroyable: de nouveaux trucs apparaissent chaque année et personne ne sait pourquoi certains fonctionnent mieux que d'autres. (CC à @RockTheStar). Soit dit en passant, je trouve également que l'optimiseur d'Adam fonctionne assez génial.
amoeba