Auto-encodeurs variationnels : théorie et mise en œuvre
Variational Autoencoder (VAE) est un modèle génératif basé sur des réseaux de neurones. Son objectif est d'apprendre des représentations de variables latentes de faible dimension de données de grande dimension et d'utiliser ces variables latentes pour la reconstruction et la génération de données. Par rapport aux auto-encodeurs traditionnels, le VAE peut générer des échantillons plus réalistes et plus diversifiés en apprenant la distribution de l'espace latent. Le mode de mise en œuvre de la VAE sera présenté en détail ci-dessous.
1. Principes de base de la VAE
L'idée de base de la VAE est de réaliser une réduction de dimensionnalité et une reconstruction des données en mappant des données de haute dimension sur un espace latent de basse dimension. Il se compose de deux parties : encodeur et décodeur. L'encodeur mappe les données d'entrée x à la moyenne μ et à la variance σ^2 de l'espace latent. De cette manière, VAE peut échantillonner les données dans l'espace latent et reconstruire les résultats échantillonnés dans les données originales via le décodeur. Cette structure codeur-décodeur permet à VAE de générer de nouveaux échantillons avec une bonne continuité dans l'espace latent, rapprochant ainsi les échantillons similaires dans l'espace latent. Par conséquent, VAE ne peut pas seulement être utilisé pour la réduction de dimensionnalité et
\begin{aligned} \mu &=f_{\mu}(x)\ \sigma^2 &=f_{\sigma}(x) \end{aligned}
où f_{mu} et f_{sigma} peuvent être n'importe quel modèle de réseau neuronal. Généralement, nous utilisons un Perceptron multicouche (MLP) pour implémenter l'encodeur.
Le décodeur mappe la variable latente z à l'espace de données d'origine, c'est-à-dire :
x'=g(z)
où, g peut également être n'importe quel modèle de réseau neuronal. De même, nous utilisons généralement un MLP pour implémenter le décodeur.
En VAE, la variable latente $z$ est échantillonnée à partir d'une distribution a priori (généralement une distribution gaussienne), à savoir :
z\sim\mathcal{N}(0,I)
De cette façon, nous pouvons minimiser l'erreur de reconstruction et la variable latente KL divergence est utilisée pour former la VAE pour parvenir à la réduction de dimensionnalité et à la génération de données. Plus précisément, la fonction de perte de VAE peut être exprimée comme suit :
\mathcal{L}=\mathbb{E}_{z\sim q(z|x)}[\log p(x|z)]-\beta\mathrm{KL}[q(z|x)||p(z)]
où q(z|x) est la distribution a posteriori, c'est-à-dire la distribution conditionnelle de la variable latente z lorsque l'entrée x est donnée ; z) est la distribution génératrice, c'est-à-dire la distribution de données correspondante lorsqu'une variable latente $z$ est donnée p(z) est la distribution a priori, c'est-à-dire que la distribution marginale de la variable latente bêta est un hyperparamètre utilisé ; pour équilibrer l'erreur de reconstruction et la divergence KL.
En minimisant la fonction de perte ci-dessus, nous pouvons apprendre une fonction de transformation f(x), qui peut mapper les données d'entrée x à la distribution q(z|x) de l'espace latent, et peut échantillonner les variables latentes de it z, réalisant ainsi une réduction de dimensionnalité et une génération de données.
2. Étapes de mise en œuvre de VAE
Ci-dessous, nous présenterons comment implémenter un modèle VAE de base, y compris la définition de l'encodeur, du décodeur et de la fonction de perte. Nous prenons comme exemple l'ensemble de données de chiffres manuscrits du MNIST. Cet ensemble de données contient 60 000 échantillons d'apprentissage et 10 000 échantillons de test, chaque échantillon est une image en niveaux de gris 28x28.
2.1 Prétraitement des données
Tout d'abord, nous devons prétraiter l'ensemble de données MNIST, convertir chaque échantillon en un vecteur à 784 dimensions et le normaliser dans la plage de [0,1] Inside. Le code est le suivant :
# python import torch import torchvision.transforms as transforms from torchvision.datasets import MNIST # 定义数据预处理 transform = transforms.Compose([ transforms.ToTensor(), # 将图像转换成Tensor格式 transforms.Normalize(mean=(0.
2.2 Définir la structure du modèle
Ensuite, nous devons définir la structure du modèle VAE, y compris l'encodeur, le décodeur et la fonction d'échantillonnage de la variable latente. Dans cet exemple, nous utilisons un MLP à deux couches comme encodeur et décodeur, le nombre d'unités cachées dans chaque couche étant respectivement de 256 et 128. La dimension de la variable latente est 20. Le code est le suivant :
import torch.nn as nn class VAE(nn.Module): def __init__(self, input_dim=784, hidden_dim=256, latent_dim=20): super(VAE, self).__init__() # 定义编码器的结构 self.encoder = nn.Sequential( nn.Linear(input_dim, hidden_dim), nn.ReLU(), nn.Linear(hidden_dim, hidden_dim//2), nn.ReLU(), nn.Linear(hidden_dim//2, latent_dim*2) # 输出均值和方差 ) # 定义解码器的结构 self.decoder = nn.Sequential( nn.Linear(latent_dim, hidden_dim//2), nn.ReLU(), nn.Linear(hidden_dim//2, hidden_dim), nn.ReLU(), nn.Linear(hidden_dim, input_dim), nn.Sigmoid() # 输出范围在[0, 1]之间的概率 ) # 潜在变量的采样函数 def sample_z(self, mu, logvar): std = torch.exp(0.5*logvar) eps = torch.randn_like(std) return mu + eps*std # 前向传播函数 def forward(self, x): # 编码器 h = self.encoder(x) mu, logvar = h[:, :latent_dim], h[:, latent_dim:] z = self.sample_z(mu, logvar) # 解码器 x_hat = self.decoder(z) return x_hat, mu, logvar
Dans le code ci-dessus, nous utilisons un MLP à deux couches comme encodeur et décodeur. L'encodeur mappe les données d'entrée sur la moyenne et la variance de l'espace latent, où la dimension de la moyenne est de 20 et la dimension de la variance est également de 20, ce qui garantit que la dimension de la variable latente est de 20. Le décodeur mappe les variables latentes sur l'espace de données d'origine, où la dernière couche utilise la fonction Sigmoïde pour limiter la plage de sortie à [0, 1].
Lors de la mise en œuvre du modèle VAE, nous devons également définir la fonction de perte. Dans cet exemple, nous utilisons l'erreur de reconstruction et la divergence KL pour définir la fonction de perte, où l'erreur de reconstruction utilise la fonction de perte d'entropie croisée et la divergence KL utilise la distribution normale standard comme distribution a priori. Le code est le suivant :
# 定义损失函数 def vae_loss(x_hat, x, mu, logvar, beta=1): # 重构误差 recon_loss = nn.functional.binary_cross_entropy(x_hat, x, reduction='sum') # KL散度 kl_loss = -0.5 * torch.sum(1 + logvar - mu.pow(2) - logvar.exp()) return recon_loss + beta*kl_loss
Dans le code ci-dessus, nous utilisons la fonction de perte d'entropie croisée pour calculer l'erreur de reconstruction et la divergence KL pour calculer la différence entre la distribution de la variable latente et la distribution a priori. Parmi eux, bêta est un hyperparamètre utilisé pour équilibrer l’erreur de reconstruction et la divergence KL.
2.3 Modèle de formation
Enfin, nous devons définir la fonction de formation et entraîner le modèle VAE sur l'ensemble de données MNIST. Pendant le processus de formation, nous devons d'abord calculer la fonction de perte du modèle, puis utiliser l'algorithme de rétropropagation pour mettre à jour les paramètres du modèle. Le code est le suivant :
# python # 定义训练函数 def train(model, dataloader, optimizer, device, beta): model.train() train_loss = 0 for x, _ in dataloader: x = x.view(-1, input_dim).to(device) optimizer.zero_grad() x_hat, mu, logvar = model(x) loss = vae_loss(x_hat, x, mu, logvar, beta) loss.backward() train_loss += loss.item() optimizer.step() return train_loss / len(dataloader.dataset)
Maintenant, nous pouvons utiliser la fonction de formation ci-dessus pour entraîner le modèle VAE sur l'ensemble de données MNIST. Le code est le suivant :
# 定义模型和优化器 model = VAE().to(device) optimizer = torch.optim.Adam(model.parameters(), lr=1e-3) # 训练模型 num_epochs = 50 for epoch in range(num_epochs): train_loss = train(model, trainloader, optimizer, device, beta=1) print(f'Epoch {epoch+1}/{num_epochs}, Train Loss: {train_loss:.4f}') # 测试模型 model.eval() with torch.no_grad(): test_loss = 0 for x, _ in testloader: x = x.view(-1, input_dim).to(device) x_hat, mu, logvar = model(x) test_loss += vae_loss(x_hat, x, mu, logvar, beta=1).item() test_loss /= len(testloader.dataset) print(f'Test Loss: {test_loss:.4f}')
Pendant le processus de formation, nous utilisons l'optimiseur Adam et l'hyperparamètre beta=1 pour mettre à jour les paramètres du modèle. Une fois la formation terminée, nous utilisons l'ensemble de test pour calculer la fonction de perte du modèle. Dans cet exemple, nous utilisons l'erreur de reconstruction et la divergence KL pour calculer la fonction de perte. Ainsi, plus la perte de test est faible, meilleure est la représentation potentielle apprise par le modèle et plus les échantillons générés sont réalistes.
2.4 Générer un échantillon
最后,我们可以使用VAE模型生成新的手写数字样本。生成样本的过程非常简单,只需要在潜在空间中随机采样,然后将采样结果输入到解码器中生成新的样本。代码如下:
# 生成新样本 n_samples = 10 with torch.no_grad(): # 在潜在空间中随机采样 z = torch.randn(n_samples, latent_dim).to(device) # 解码生成样本 samples = model.decode(z).cpu() # 将样本重新变成图像的形状 samples = samples.view(n_samples, 1, 28, 28) # 可视化生成的样本 fig, axes = plt.subplots(1, n_samples, figsize=(20, 2)) for i, ax in enumerate(axes): ax.imshow(samples[i][0], cmap='gray') ax.axis('off') plt.show()
在上述代码中,我们在潜在空间中随机采样10个点,然后将这些点输入到解码器中生成新的样本。最后,我们将生成的样本可视化展示出来,可以看到,生成的样本与MNIST数据集中的数字非常相似。
综上,我们介绍了VAE模型的原理、实现和应用,可以看到,VAE模型是一种非常强大的生成模型,可以学习到高维数据的潜在表示,并用潜在表示生成新的样本。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

L'annotation d'images est le processus consistant à associer des étiquettes ou des informations descriptives à des images pour donner une signification et une explication plus profondes au contenu de l'image. Ce processus est essentiel à l’apprentissage automatique, qui permet d’entraîner les modèles de vision à identifier plus précisément les éléments individuels des images. En ajoutant des annotations aux images, l'ordinateur peut comprendre la sémantique et le contexte derrière les images, améliorant ainsi la capacité de comprendre et d'analyser le contenu de l'image. L'annotation d'images a un large éventail d'applications, couvrant de nombreux domaines, tels que la vision par ordinateur, le traitement du langage naturel et les modèles de vision graphique. Elle a un large éventail d'applications, telles que l'assistance aux véhicules pour identifier les obstacles sur la route, en aidant à la détection. et le diagnostic des maladies grâce à la reconnaissance d'images médicales. Cet article recommande principalement de meilleurs outils d'annotation d'images open source et gratuits. 1.Makesens

Dans les domaines de l’apprentissage automatique et de la science des données, l’interprétabilité des modèles a toujours été au centre des préoccupations des chercheurs et des praticiens. Avec l'application généralisée de modèles complexes tels que l'apprentissage profond et les méthodes d'ensemble, la compréhension du processus décisionnel du modèle est devenue particulièrement importante. Explainable AI|XAI contribue à renforcer la confiance dans les modèles d'apprentissage automatique en augmentant la transparence du modèle. L'amélioration de la transparence des modèles peut être obtenue grâce à des méthodes telles que l'utilisation généralisée de plusieurs modèles complexes, ainsi que les processus décisionnels utilisés pour expliquer les modèles. Ces méthodes incluent l'analyse de l'importance des caractéristiques, l'estimation de l'intervalle de prédiction du modèle, les algorithmes d'interprétabilité locale, etc. L'analyse de l'importance des fonctionnalités peut expliquer le processus de prise de décision du modèle en évaluant le degré d'influence du modèle sur les fonctionnalités d'entrée. Estimation de l’intervalle de prédiction du modèle

Cet article présentera comment identifier efficacement le surajustement et le sous-apprentissage dans les modèles d'apprentissage automatique grâce à des courbes d'apprentissage. Sous-ajustement et surajustement 1. Surajustement Si un modèle est surentraîné sur les données de sorte qu'il en tire du bruit, alors on dit que le modèle est en surajustement. Un modèle surajusté apprend chaque exemple si parfaitement qu'il classera mal un exemple inédit/inédit. Pour un modèle surajusté, nous obtiendrons un score d'ensemble d'entraînement parfait/presque parfait et un score d'ensemble/test de validation épouvantable. Légèrement modifié : "Cause du surajustement : utilisez un modèle complexe pour résoudre un problème simple et extraire le bruit des données. Parce qu'un petit ensemble de données en tant qu'ensemble d'entraînement peut ne pas représenter la représentation correcte de toutes les données."

En termes simples, un modèle d’apprentissage automatique est une fonction mathématique qui mappe les données d’entrée à une sortie prédite. Plus précisément, un modèle d'apprentissage automatique est une fonction mathématique qui ajuste les paramètres du modèle en apprenant à partir des données d'entraînement afin de minimiser l'erreur entre la sortie prédite et la véritable étiquette. Il existe de nombreux modèles dans l'apprentissage automatique, tels que les modèles de régression logistique, les modèles d'arbre de décision, les modèles de machines à vecteurs de support, etc. Chaque modèle a ses types de données et ses types de problèmes applicables. Dans le même temps, il existe de nombreux points communs entre les différents modèles, ou il existe une voie cachée pour l’évolution du modèle. En prenant comme exemple le perceptron connexionniste, en augmentant le nombre de couches cachées du perceptron, nous pouvons le transformer en un réseau neuronal profond. Si une fonction noyau est ajoutée au perceptron, elle peut être convertie en SVM. celui-ci

Dans les années 1950, l’intelligence artificielle (IA) est née. C’est à ce moment-là que les chercheurs ont découvert que les machines pouvaient effectuer des tâches similaires à celles des humains, comme penser. Plus tard, dans les années 1960, le Département américain de la Défense a financé l’intelligence artificielle et créé des laboratoires pour poursuivre son développement. Les chercheurs trouvent des applications à l’intelligence artificielle dans de nombreux domaines, comme l’exploration spatiale et la survie dans des environnements extrêmes. L'exploration spatiale est l'étude de l'univers, qui couvre l'ensemble de l'univers au-delà de la terre. L’espace est classé comme environnement extrême car ses conditions sont différentes de celles de la Terre. Pour survivre dans l’espace, de nombreux facteurs doivent être pris en compte et des précautions doivent être prises. Les scientifiques et les chercheurs pensent qu'explorer l'espace et comprendre l'état actuel de tout peut aider à comprendre le fonctionnement de l'univers et à se préparer à d'éventuelles crises environnementales.

Les défis courants rencontrés par les algorithmes d'apprentissage automatique en C++ incluent la gestion de la mémoire, le multithread, l'optimisation des performances et la maintenabilité. Les solutions incluent l'utilisation de pointeurs intelligents, de bibliothèques de threads modernes, d'instructions SIMD et de bibliothèques tierces, ainsi que le respect des directives de style de codage et l'utilisation d'outils d'automatisation. Des cas pratiques montrent comment utiliser la bibliothèque Eigen pour implémenter des algorithmes de régression linéaire, gérer efficacement la mémoire et utiliser des opérations matricielles hautes performances.

Traducteur | Revu par Li Rui | Chonglou Les modèles d'intelligence artificielle (IA) et d'apprentissage automatique (ML) deviennent aujourd'hui de plus en plus complexes, et le résultat produit par ces modèles est une boîte noire – impossible à expliquer aux parties prenantes. L'IA explicable (XAI) vise à résoudre ce problème en permettant aux parties prenantes de comprendre comment fonctionnent ces modèles, en s'assurant qu'elles comprennent comment ces modèles prennent réellement des décisions et en garantissant la transparence des systèmes d'IA, la confiance et la responsabilité pour résoudre ce problème. Cet article explore diverses techniques d'intelligence artificielle explicable (XAI) pour illustrer leurs principes sous-jacents. Plusieurs raisons pour lesquelles l’IA explicable est cruciale Confiance et transparence : pour que les systèmes d’IA soient largement acceptés et fiables, les utilisateurs doivent comprendre comment les décisions sont prises

L'apprentissage automatique est une branche importante de l'intelligence artificielle qui donne aux ordinateurs la possibilité d'apprendre à partir de données et d'améliorer leurs capacités sans être explicitement programmés. L'apprentissage automatique a un large éventail d'applications dans divers domaines, de la reconnaissance d'images et du traitement du langage naturel aux systèmes de recommandation et à la détection des fraudes, et il change notre façon de vivre. Il existe de nombreuses méthodes et théories différentes dans le domaine de l'apprentissage automatique, parmi lesquelles les cinq méthodes les plus influentes sont appelées les « Cinq écoles d'apprentissage automatique ». Les cinq grandes écoles sont l’école symbolique, l’école connexionniste, l’école évolutionniste, l’école bayésienne et l’école analogique. 1. Le symbolisme, également connu sous le nom de symbolisme, met l'accent sur l'utilisation de symboles pour le raisonnement logique et l'expression des connaissances. Cette école de pensée estime que l'apprentissage est un processus de déduction inversée, à travers les connaissances existantes.
