Quelle est la différence entre CNN, GAN, autoencoders et VAE?


Réponse 1:

CNN

Ceux-ci représentent les réseaux de neurones convolutifs. Il s'agit d'un type spécial de réseau de neurones, conçu pour les données à structure spatiale. Par exemple, les images, qui ont un ordre spatial naturel, sont parfaites pour les CNN. Les réseaux de neurones convolutifs sont composés de nombreux «filtres» qui convoluent ou glissent à travers les données et produisent une activation à chaque position de la lame. Ces activations produisent une «carte des caractéristiques», qui représente la quantité de données dans cette région qui a activé le filtre (qui n'est qu'un neurone). Par exemple, supposons que nous ayons un filtre qui est formé pour reconnaître les visages, ce peuvent être les cartes d'entités qu'il génère:

(Cette image est tirée de l'article Comprendre les réseaux neuronaux grâce à une visualisation approfondie, http: //yosinski.com/media/papers ..., excellent document, je recommande vivement de le lire)

La particularité des réseaux de neurones convolutifs est qu'ils sont spatialement invariants, ce qui signifie que peu importe où une partie saillante de l'image apparaît, elle sera détectée par le réseau. Cela est dû au fait que les pondérations du filtre ne changent pas à différentes parties de l'image — puisque le filtre est glissé sur l'image, chaque partie de l'image est pondérée de la même manière.

Cette propriété d'invariance spatiale d'un CNN n'est pas seulement applicable aux images 2D, mais aussi à la vidéo 3D (http: //www.cs.cmu.edu/~rahuls/pu ...), et même aux séries temporelles 1D. Les CNN ont également été considérés comme un type de réseau neuronal pseudo-récurrent, car le filtre peut glisser sur des pas de temps, au lieu de sections de données, lui permettant de prendre ses décisions en fonction de points de données dans le passé (et potentiellement dans le futur également) ).

GAN

GANs signifie Generative Adversarial Networks. Il s'agit d'un type de modèle génératif, car ils apprennent à copier la distribution des données que vous leur donnez et peuvent donc générer de nouvelles images qui se ressemblent.

La raison pour laquelle un GAN est appelé «contradictoire», c'est qu'il implique deux réseaux concurrents (adversaires), qui tentent de se surpasser.

(Cette image provient de https: //blog.slinuxer.com/2016/1 ..., je viens de la retirer de Google Images)

Essentiellement, un GAN est souvent assimilé à l'analogie d'un policier (discriminateur) et d'un contrefacteur (générateur). Le contrefacteur n'a au départ aucune idée de ce à quoi ressemble l'argent réel, il génère donc de l'argent au hasard qui semble totalement faux. Heureusement pour le contrefacteur, le policier n'a aucune idée de ce à quoi ressemble l'argent réel.

Cependant, nous avons des exemples de cash réel. Le service de police commence donc à enseigner au policier à quoi ressemble l'argent réel et à quoi ressemble l'argent faux du discriminateur, et l'oblige à distinguer le faux et le vrai argent. Cependant, le policier est super paresseux et apprend à peine assez pour connaître la différence entre le faux et le vrai argent.

Ensuite, le contrefacteur s'entraîne encore plus et apprend à faire de l'argent un peu plus réaliste et finit par tromper le policier (car il est vraiment paresseux et a appris un très mauvais classificateur).

Le cycle se répète pendant un certain temps, jusqu'à ce que (idéalement) le policier ne puisse pas faire la différence entre la fausse monnaie et la vraie monnaie, car la fausse monnaie ressemble exactement à la vraie monnaie. Une fois cela fait, nous pouvons simplement utiliser le générateur pour faire de l'argent pour toujours.

Étendons cela aux images. Le générateur est un réseau de neurones, qui prend un vecteur de variables aléatoires, Z, et produit une image,

II

.

Le discriminateur est aussi un réseau de neurones, qui prend une image,

II

et produit une sortie unique

pp

, décidant de la probabilité que l'image soit réelle. Quand

p=1p = 1

, le discriminateur croit fermement que l'image est réelle, et lorsque

p=0p = 0

, le discriminateur croit très fortement que l'image est fausse.

Le discriminateur est alimenté par une image génératrice, que nous noterons

igeneratori_{generator}

et apprend que l'image est fausse. Plus concrètement, le discriminateur maximise

log(1pgenerator)log(1 - p_{generator})

. Le discriminateur reçoit alors une image réelle,

ireali_{real}

et apprend que l'image est réelle ou qu'elle maximise

log(preal)log(p_{real})

. Le générateur essaie de faire exactement le contraire et essaie de faire en sorte que le discriminateur maximise la probabilité de croire que la fausse image est réelle, de sorte que le générateur essaie de maximiser

log(pgenerator)log(p_{generator})

. Une fois que nous nous entraînerons comme ça pendant un certain temps, nous commencerons à voir des photos assez réalistes:

Les deux photos du haut sont des photos générées (sauf celles en jaune) des chiffres et des visages du MNIST respectivement. Ceux-ci fonctionnent parfaitement car les nombres et les visages ont tous deux des structures très pratiques et stables (ils sont toujours centrés, les nez sont généralement à un endroit, les yeux généralement à un autre). Cependant, une fois que nous nous étendons aux images du monde réel, nous constatons que la distribution des données de ces images du monde réel est beaucoup trop complexe à modéliser, et nous n'avons souvent pas assez de données pour produire de bonnes images génératives. C'est encore assez impressionnant, et vous devriez lire le papier: https: //papers.nips.cc/paper/542 ...

Encodeurs de voiture

Celles-ci sont assez simples, tout ce qu'elles font, c'est prendre une entrée et reproduire l'entrée aussi fidèlement que possible. Si j'entre une photo du chiffre «1», l'autoencodeur est censé produire exactement la même photo.

Cela semble facile et inutile, mais a des propriétés intéressantes. En règle générale, nous n'avons pas seulement une couche d'entrée et de sortie, car le réseau peut simplement copier les pixels de l'entrée vers la sortie, ce qui est totalement inutile. Nous aurons généralement une seule (ou plusieurs) couche cachée entre les couches d'entrée et de sortie, qui agira comme des couches de goulot d'étranglement.

Les goulots d'étranglement peuvent venir de plusieurs façons différentes, mais je vais me concentrer sur le plus simple: avoir moins de neurones cachés.

Si les neurones de la couche cachée sont inférieurs au nombre de pixels de l'image d'entrée, le réseau doit «compresser» les données qu'il voit.

(Image de blog.keras.io).

Cette compression signifie que seules les caractéristiques les plus saillantes de l'image peuvent rester - tout le reste est inutile. Les fonctionnalités qui peuvent encoder le plus d'informations sur les données sont encodées dans les neurones cachés.

Cela rend les auto-encodeurs (en théorie) utiles, car, si nous manquons de données d'entraînement supervisé, nous pouvons simplement alimenter un auto-encodeur un tas de données non étiquetées, et il apprendra des fonctionnalités utiles. Nous pouvons ensuite mettre ces caractéristiques dans un réseau neuronal plus fort et le faire s'exercer sur le petit ensemble de données supervisé. Bien que l'ensemble de données supervisé soit petit, il apprendrait (théoriquement) bien car il a été amorcé par l'autoencodeur.

Malheureusement, les auto-encodeurs n'étaient pas tout ce qu'ils étaient censés être, et ce type de formation (appelé pré-formation) est rarement utilisé avec les auto-encodeurs.

Emirats Arabes Unis

VAE signifie Variational Autoencoders. Par son nom, vous pouvez probablement dire qu'un VAE est assez similaire à un autoencodeur, et c'est techniquement le cas, mais avec une torsion majeure.

Alors qu'un autoencodeur n'a qu'à reproduire son entrée, un autoencodeur variationnel doit reproduire sa sortie, tout en conservant ses neurones cachés dans une distribution spécifique. Ce que cela signifie, c'est que la sortie du réseau devra s'habituer aux neurones cachés générés en fonction d'une distribution, et ainsi nous pouvons générer de nouvelles images, simplement en échantillonnant à partir de cette distribution, et en les introduisant dans la couche cachée du réseau.

Par exemple, supposons que notre distribution cible est une distribution normale, avec une moyenne de 0 et une variance de 1. Lorsque nous entrons une image dans le VAE, les nœuds cachés ne produisent pas de valeurs qui seront directement utilisées par la sortie , mais produira à la place des moyennes et des écarts. Chacun de ces nœuds cachés agira comme sa propre distribution gaussienne. Nous désignerons les valeurs des nœuds cachés comme

hmeanh_{mean}

et

hvarianceh_{variance}

. Nous échantillonnons ensuite les valeurs d'une distribution normale réelle, que nous appellerons

zz

, qui est de la même taille que le calque masqué. Nous allons ensuite multiplier

zz

élément par élément avec

hvarianceh_{variance}

andaddelementwisewithhmean.Thisallowsthenetworktoshiftthenormaldistributionandchangeitsvariance.Thisishowitencodesinformation.Aftertheelementwiseadditionandmultiplication,weareleftwithwhatwecallalatentvector.Wefeedthislatentvectorintotheoutputlayer,andtheoutputlayerattemptstoproduceacopyoftheinput.Thelossoftheautoencoder,istominimizeboththereconstructionloss(howsimilartheautoencodersoutputwastoitsinput),anditslatentloss(howcloseitshiddennodesweretoanormaldistribution).Thesmallerthelatentloss,thelessinformationcanbeencoded,andthereforethereconstructionlossgoesup.Asaresult,theVAEislockedinatradeoffbetweenthelatentlossandthereconstructionloss.Ifthelatentlossissmall,ournovelgeneratedimageswilllookalotliketheimagesattraintime,buttheywillbothlookreallybad.Ifthereconstructionlossissmall,thenthereconstructedimagesattraintimewilllookreallynice,butournovelgeneratedimageswilllooknothinglikethereconstructedimages.Obviouslywewantboth,soitsimportanttofindaniceequilibrium. and add elementwise with h_{mean}. This allows the network to shift the normal distribution and change its variance. This is how it encodes information. After the elementwise addition and multiplication, we are left with what we call a latent vector. We feed this latent vector into the output layer, and the output layer attempts to produce a copy of the input. The loss of the autoencoder, is to minimize both the reconstruction loss (how similar the autoencoder’s output was to its input), and its latent loss (how close its hidden nodes were to a normal distribution). The smaller the latent loss, the less information can be encoded, and therefore the reconstruction loss goes up. As a result, the VAE is locked in a trade-off between the latent loss and the reconstruction loss. If the latent loss is small, our novel generated images will look a lot like the images at train time, but they will both look really bad. If the reconstruction loss is small, then the reconstructed images at train time will look really nice, but our novel generated images will look nothing like the reconstructed images. Obviously we want both, so it’s important to find a nice equilibrium.

Ces explications ne sont pas si bien construites et sont juste destinées à donner une idée générale de ces architectures, il serait donc beaucoup plus avantageux de lire les articles que j'ai liés dans la réponse. Ils sont vraiment super!