Académique Documents
Professionnel Documents
Culture Documents
2 octobre 2020
Yann LeCun
“Generative Adversarial Network : the most interesting idea in the
last ten years in machine learning”
Référence
Ian Goodfellow, 2016 (NIPS) : [paper]
Generative adversarial networks (gan)
Définitions
Application avec Keras : apprentissage de la fonction cosinus
Adaptation de notre gan pour apprendre à générer une image
Les GANs
Principe
Définition
Deux réseaux de neurones sont placés en compétition. Le premier,
le générateur va essayer de générer un échantillon. Le second, le
discriminateur va essayer de deviner si l’exemple qu’il reçoit est réel
ou s’il est générer par le générateur.
Difficulté
Convergence lente et parfois compliquée.
Les GANs
Principe
[source]
Les GANs
Exemple
Generateur
I1
I2 =⇒
. O1
.
. .
.
.
In
Discriminateur
I1
I2 =⇒
. O1 NO !
.
. .
.
.
In
Les GANs
Exemple
Generateur
I1
I2 =⇒
. O1
.
. .
.
.
In
Discriminateur
I1
I2 =⇒
. O1 NO !
.
. .
.
.
In
Les GANs
Exemple
Generateur
I1
I2 =⇒
. O1
.
. .
.
.
In
Discriminateur
I1
I2 =⇒
. O1 YES !
.
. .
.
.
In
Définition du problème
Génération d’une fonction cosinus en 1D.
Espace de points : (-5,5).
Utilisation de la bibliothèque Keras.
def create_discriminator(intput_size=2):
model = Sequential()
model.add(Dense(15, activation='relu',
input_dim = intput_size))
model.add(Dense(5, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])
return model
Création du discriminateur
Le discriminateur
En entrée : un vecteur de 2 éléments
En sortie : une prédiction de classification (échantillon réel ou
faux)
Le réseau :
Une couche dense d’entrée de 15 neurones, fonction
d’activation relu.
Une couche dense cachée de 5 neurones, fonction d’activation
relu.
Une couche dense de sortie de 1 neurone, fonction
d’activation sigmoid.
Optimizer : adam.
Fonction de perte : binary crossentropy.
Création du discriminateur
def create_discriminator(intput_size=2):
model = Sequential()
model.add(Dense(15, activation='relu',
input_dim = intput_size))
model.add(Dense(5, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])
return model
def generate_real_points(n=100):
x = np.random.uniform(-5, 5, n)
x = x.reshape(n, 1) # shape(n,) --> shape(n, 1)
x2 = evaluate(x)
# stacking the data et labeling as real points
return np.hstack((x, x2)), np.ones((n, 1))
def generate_fake_points(n=100):
x = np.random.uniform(-10, 10, n)
x2 = np.random.uniform(-10, 10, n)
x = x.reshape(n, 1) # shape(n,) --> shape(n, 1)
x2 = x2.reshape(n, 1) # shape(n,) --> shape(n, 1)
# stacking the data et labeling as fake points
return np.hstack((x, x2)), np.zeros((n, 1))
Création du générateur
Le générateur
En entrée : le générateur prend un point de l’espace latent.
L’espace latent est un espace 5D de variables aléatoires
gaussiennes.
En sortie : un vecteur de 2 éléments.
Le réseau :
Une couche dense d’entrée de 15 neurones, fonction
d’activation relu.
Une couche dense cachée de 5 neurones, fonction d’activation
relu.
Une couche dense de sortie de 1 neurone, fonction
d’activation linear.
Optimizer : adam.
Fonction de perte : binary crossentropy.
Generative adversarial networks (gan)
Définitions
Application avec Keras : apprentissage de la fonction cosinus
Adaptation de notre gan pour apprendre à générer une image
Création du générateur
Création du générateur
Création du gan
Création du gan
Entrainement du gan