Définition exacte de Maxout

8

J'ai essayé de comprendre ce que cela signifiait exactement par la fonction d'activation "Maxout" dans les réseaux de neurones. Il y a cette question, cet article, et même dans le livre Deep Learning de Bengio et al. , sauf avec juste un peu d'informations et un gros TODO à côté.

J'utiliserai la notation décrite ici pour plus de clarté. Je ne veux tout simplement pas le retaper et provoquer un gonflement des questions. Brièvement,aji=σ(zji)=σ(kaki1wjki+bji), en d'autres termes, un neurone a un seul biais, un seul poids pour chaque entrée, puis il additionne les entrées multiplié par les poids, puis ajoute le biais et applique la fonction d'activation pour obtenir la valeur de sortie (aka activation).

Jusqu'à présent, je sais que Maxout est une fonction d'activation qui "sort le maximum de ses entrées". Qu'est-ce que ça veut dire? Voici quelques idées que je pourrais interpréter à partir de cela:

  1. aji=maxk(aki1), également appelé max-pooling.
  2. aji=maxk(aki1wjki)+bji , en remplaçant simplement la somme qui se fait normalement par un max.
  3. aji=maxk(aki1wjki+bjki) , où chaque neurone a maintenant une valeur de biais pour chaque entrée, au lieu d'une seule valeur de biais appliquée après avoir additionné toutes les entrées. Cela rendrait la rétropropagation différente, mais toujours possible.
  4. Chaque zji est calculé comme normal, et chaque neurone a un biais unique et un poids pour chaque entrée. Cependant, semblable à SOFTMAX ( aji=exp(zji)kexp(zki) ), cela prend le maximum de tous les z « s dans sa couche actuelle . Formellement, aji=maxkzki .

Certains de ces éléments sont-ils corrects? Ou est-ce quelque chose de différent?

Phylliida
la source

Réponses:

9

Aucune de ces réponses; Les réseaux maxout ne suivent pas l'architecture que vous supposiez.

Depuis le début de la section "description de maxout" dans l'article que vous avez lié , qui définissait maxout:

Étant donné une entrée ( peut être , ou peut être l'état d'une couche cachée), une couche cachée maxout implémente la fonctionxRdxv

hi=maxj[1,k]zij

où , et et sont paramètres appris.zij=xTWij+bijWRd×m×kbRm×k

Ainsi, chaque unité des unités a différentes combinaisons affines de la couche précédente et génère le maximum de ces fonctions affines. Imaginez que chaque couche soit connectée à la couche précédente avec connexions de différentes couleurs et en prenant le maximum de couleurs.mkkk

Alternativement, vous pouvez considérer une unité maxout comme étant en fait deux couches: chacune des unités de la couche précédente est connectée à chacune des unités avec la fonction d'activation d'identité, puis une seule unité connecte ces unités linéaires avec une activation de regroupement max. .kk

Cela signifie que l'unité, considérée comme une fonction de à , est le maximum par morceaux des fonctions affines. La figure 1 du document donne quelques exemples de différentes fonctions auxquelles elle pourrait ressembler:RdR

entrez la description de l'image ici

Chacune des lignes en pointillés représente un . Vous pouvez représenter n'importe quelle fonction convexe de cette manière, ce qui est plutôt bien.WTx+b

Dougal
la source
Donc, puisque , cela signifie que . Comment en tirer le maximum? Est-ce l'ampleur des vecteurs? zijRm×kzi1,zi2,...Rm
Phylliida
@DanielleEnsign L'indexation est un peu non standard ici, mais chaque , , so . C'est un max scalaire normal. WijRdxRdbijRzijR
Dougal
2
Ah je comprends enfin maintenant, merci. Fondamentalement, chaque neurone est composé de beaucoup de "sous-neurones" qui absorbent l'entrée de ce neurone, ont leurs propres poids et biais et sont transmis via la fonction d'activation d'identité. Ensuite, la sortie vers ce neurone est le maximum de toutes ses sorties de sous-neurone.
Phylliida
Serait-il exact de dire que vous pouvez modéliser cela en utilisant k plusieurs connexions entre chaque paire de neurones connectés (plutôt qu'une seule connexion comme cela se fait normalement), en calculant k activations pour chaque paire, puis en sélectionnant le premier comme gagnant? Ou est-il parfois nécessaire d'utiliser des biais distincts pour chaque sous-connexion, ce qui oblige à modéliser chaque connexion comme si elle appartenait à un sous-neurone différent?
SQLServerSteve
1
@SQLServerSteve Chacune des connexions peut avoir des biais différents (cela est nécessaire par exemple pour le "quadratique" dans l'image ci-dessus). Mais vous pouvez toujours y penser de la manière que vous avez décrite, il vous suffit également d'ajouter un biais pour chacune des connexions. Parfois, les gens parlent d'une «unité de biais» imaginaire qui produit toujours 1; dans ce cas, votre modèle fonctionne correctement tant que l'unité de polarisation a également plusieurs connexions. k
Dougal