変分オートエンコーダ: 理論と実装
変分オートエンコーダ (VAE) は、ニューラル ネットワークに基づく生成モデルです。その目標は、高次元データの低次元の潜在変数表現を学習し、これらの潜在変数をデータの再構築と生成に使用することです。従来のオートエンコーダと比較して、VAE は潜在空間の分布を学習することで、より現実的で多様なサンプルを生成できます。 VAEの実装方法については、以下で詳しく紹介します。
1. VAE の基本原理
VAE の基本的な考え方は、高次元のデータを低次元のデータにマッピングすることです。潜在空間、次元の削減と再構築。これは、エンコーダとデコーダの 2 つの部分で構成されます。エンコーダーは入力データ x を潜在空間の平均 μ と分散 σ^2 にマッピングします。このようにして、VAE は潜在空間内のデータをサンプリングし、デコーダを通じてサンプリング結果を元のデータに再構築できます。このエンコーダ/デコーダ構造により、VAE は潜在空間内で連続性の高い新しいサンプルを生成できるようになり、類似したサンプルが潜在空間内でより近くに存在するようになります。したがって、VAE は次元削減に使用できるだけでなく、
\begin{aligned} \mu &=f_{\mu}(x)\ \sigma^2 &=f_{\sigma}(x) \end{aligned}
ここで、f_{\mu} と f_{\sigma} は任意のニューラル ネットワーク モデルにすることができます。通常、エンコーダーの実装にはマルチレイヤー パーセプトロン (MLP) を使用します。
デコーダは、潜在変数 z を元のデータ空間、つまり、次のようにマッピングします。
x'=g(z)
その中で、 g は任意のニューラル ネットワーク モデルにすることもできます。同様に、通常は MLP を使用してデコーダを実装します。
VAE では、潜在変数 $z$ は事前分布 (通常はガウス分布) からサンプリングされます。つまり:
z\sim\mathcal{N}(0,I)
このようにして、VAE は次のことができます。潜在変数の再構成誤差と KL 発散を最小限に抑えてトレーニングすることで、次元の削減とデータの生成を実現します。具体的には、VAE の損失関数は次のように表すことができます。
\mathcal{L}=\mathbb{E}_{z\sim q(z|x)}[\log p(x|z)]-\beta\mathrm{KL}[q(z|x)||p(z)]
ここで、q(z|x) は事後分布、つまり入力 x が与えられたときの潜在変数 z の条件付き分布です。 p(x|z ) は生成分布、つまり潜在変数 $z$ が与えられた場合の対応するデータ分布、p(z) は事前分布、つまり潜在変数 z の周辺分布です。 beta は、再構成エラーと KL 発散のバランスを取るために使用されるハイパーパラメーターです。
上記の損失関数を最小化することで、入力データ x を潜在空間の分布 q(z|x) にマッピングできる変換関数 f(x) を学習できます。 、そこから潜在変数 z をサンプリングすることで、次元の削減とデータの生成を実現できます。
2. VAE 実装手順
以下では、エンコーダー、デコーダー、損失関数定義を含む、基本的な VAE モデルを実装する方法を紹介します。 MNIST の手書き数字データ セットを例にとると、このデータ セットには 60,000 個のトレーニング サンプルと 10,000 個のテスト サンプルが含まれており、各サンプルは 28x28 のグレースケール画像です。
2.1 データの前処理
まず、MNIST データセットを前処理して、各サンプルを 784 次元のベクトルに変換し、正規化する必要があります。 [0,1]の範囲まで。コードは次のとおりです。
# 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 モデル構造の定義
次に、VAE モデルの構造を定義する必要があります。潜在変数のエンコーダ、デコーダおよびサンプリング関数。この例では、エンコーダとデコーダとして 2 層 MLP を使用し、各層の隠れユニットの数はそれぞれ 256 と 128 です。潜在変数の次元は 20 です。コードは次のとおりです。
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
上記のコードでは、エンコーダおよびデコーダとして 2 層 MLP を使用します。エンコーダーは入力データを潜在空間の平均と分散にマッピングします。平均の次元は 20、分散の次元も 20 であり、これにより潜在変数の次元は 20 になります。デコーダーは潜在変数を元のデータ空間にマップし直します。最後の層はシグモイド関数を使用して出力範囲を [0, 1] に制限します。
VAE モデルを実装するときは、損失関数も定義する必要があります。この例では、再構成誤差と KL 発散を使用して損失関数を定義します。再構成誤差はクロスエントロピー損失関数を使用し、KL 発散は事前分布として標準正規分布を使用します。コードは次のとおりです。
# 定义损失函数 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
上記のコードでは、クロスエントロピー損失関数を使用して再構成誤差を計算し、KL 発散を使用して潜在変数の分布と事前分布の差を計算します。 。このうち、 \beta は再構成誤差と KL 発散のバランスを取るために使用されるハイパーパラメーターです。
2.3 トレーニング モデル
最後に、トレーニング関数を定義し、MNIST データ セットで VAE モデルをトレーニングする必要があります。トレーニング プロセスでは、まずモデルの損失関数を計算し、次にバックプロパゲーション アルゴリズムを使用してモデル パラメーターを更新する必要があります。コードは次のとおりです。
# 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)
ここで、上記のトレーニング関数を使用して、MNIST データ セットで VAE モデルをトレーニングできます。コードは次のとおりです。
# 定义模型和优化器 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}')
トレーニング プロセス中に、Adam オプティマイザーと \beta=1 のハイパーパラメーターを使用してモデル パラメーターを更新します。トレーニングが完了したら、テスト セットを使用してモデルの損失関数を計算します。この例では、再構成誤差と KL 発散を使用して損失関数を計算します。そのため、テスト損失が小さいほど、モデルによって学習される潜在的な表現が向上し、生成されるサンプルがより現実的になります。
2.4 サンプルの生成
最后,我们可以使用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模型是一种非常强大的生成模型,可以学习到高维数据的潜在表示,并用潜在表示生成新的样本。
以上が変分オートエンコーダ: 理論と実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









画像の注釈は、ラベルまたは説明情報を画像に関連付けて、画像の内容に深い意味と説明を与えるプロセスです。このプロセスは機械学習にとって重要であり、画像内の個々の要素をより正確に識別するために視覚モデルをトレーニングするのに役立ちます。画像に注釈を追加することで、コンピュータは画像の背後にあるセマンティクスとコンテキストを理解できるため、画像の内容を理解して分析する能力が向上します。画像アノテーションは、コンピュータ ビジョン、自然言語処理、グラフ ビジョン モデルなどの多くの分野をカバーする幅広い用途があり、車両が道路上の障害物を識別するのを支援したり、障害物の検出を支援したりするなど、幅広い用途があります。医用画像認識による病気の診断。この記事では主に、より優れたオープンソースおよび無料の画像注釈ツールをいくつか推奨します。 1.マケセンス

機械学習とデータ サイエンスの分野では、モデルの解釈可能性が常に研究者や実務家に焦点を当ててきました。深層学習やアンサンブル手法などの複雑なモデルが広く適用されるようになったことで、モデルの意思決定プロセスを理解することが特に重要になってきました。 Explainable AI|XAI は、モデルの透明性を高めることで、機械学習モデルに対する信頼と自信を構築するのに役立ちます。モデルの透明性の向上は、複数の複雑なモデルの普及や、モデルを説明するための意思決定プロセスなどの方法によって実現できます。これらの方法には、特徴重要度分析、モデル予測間隔推定、ローカル解釈可能性アルゴリズムなどが含まれます。特徴重要度分析では、入力特徴に対するモデルの影響度を評価することで、モデルの意思決定プロセスを説明できます。モデルの予測間隔の推定

平たく言えば、機械学習モデルは、入力データを予測された出力にマッピングする数学関数です。より具体的には、機械学習モデルは、予測出力と真のラベルの間の誤差を最小限に抑えるために、トレーニング データから学習することによってモデル パラメーターを調整する数学関数です。機械学習には、ロジスティック回帰モデル、デシジョン ツリー モデル、サポート ベクター マシン モデルなど、多くのモデルがあります。各モデルには、適用可能なデータ タイプと問題タイプがあります。同時に、異なるモデル間には多くの共通点があったり、モデル進化の隠れた道が存在したりすることがあります。コネクショニストのパーセプトロンを例にとると、パーセプトロンの隠れ層の数を増やすことで、それをディープ ニューラル ネットワークに変換できます。パーセプトロンにカーネル関数を追加すると、SVM に変換できます。これです

この記事では、学習曲線を通じて機械学習モデルの過学習と過小学習を効果的に特定する方法を紹介します。過小適合と過適合 1. 過適合 モデルがデータからノイズを学習するためにデータ上で過学習されている場合、そのモデルは過適合していると言われます。過学習モデルはすべての例を完璧に学習するため、未確認の新しい例を誤って分類してしまいます。過適合モデルの場合、完璧/ほぼ完璧なトレーニング セット スコアとひどい検証セット/テスト スコアが得られます。若干修正: 「過学習の原因: 複雑なモデルを使用して単純な問題を解決し、データからノイズを抽出します。トレーニング セットとしての小さなデータ セットはすべてのデータを正しく表現できない可能性があるため、2. 過学習の Heru。」

1950 年代に人工知能 (AI) が誕生しました。そのとき、研究者たちは、機械が思考などの人間と同じようなタスクを実行できることを発見しました。その後、1960 年代に米国国防総省は人工知能に資金を提供し、さらなる開発のために研究所を設立しました。研究者たちは、宇宙探査や極限環境での生存など、多くの分野で人工知能の応用を見出しています。宇宙探査は、地球を超えた宇宙全体を対象とする宇宙の研究です。宇宙は地球とは条件が異なるため、極限環境に分類されます。宇宙で生き残るためには、多くの要素を考慮し、予防策を講じる必要があります。科学者や研究者は、宇宙を探索し、あらゆるものの現状を理解することが、宇宙の仕組みを理解し、潜在的な環境危機に備えるのに役立つと信じています。

C++ の機械学習アルゴリズムが直面する一般的な課題には、メモリ管理、マルチスレッド、パフォーマンスの最適化、保守性などがあります。解決策には、スマート ポインター、最新のスレッド ライブラリ、SIMD 命令、サードパーティ ライブラリの使用、コーディング スタイル ガイドラインの遵守、自動化ツールの使用が含まれます。実践的な事例では、Eigen ライブラリを使用して線形回帰アルゴリズムを実装し、メモリを効果的に管理し、高性能の行列演算を使用する方法を示します。

翻訳者 | Li Rui によるレビュー | 今日、人工知能 (AI) および機械学習 (ML) モデルはますます複雑になっており、これらのモデルによって生成される出力はブラックボックスになっており、関係者に説明することができません。 Explainable AI (XAI) は、利害関係者がこれらのモデルがどのように機能するかを理解できるようにし、これらのモデルが実際に意思決定を行う方法を確実に理解できるようにし、AI システムの透明性、信頼性、およびこの問題を解決するための説明責任を確保することで、この問題を解決することを目指しています。この記事では、さまざまな説明可能な人工知能 (XAI) 手法を検討して、その基礎となる原理を説明します。説明可能な AI が重要であるいくつかの理由 信頼と透明性: AI システムが広く受け入れられ、信頼されるためには、ユーザーは意思決定がどのように行われるかを理解する必要があります

機械学習は人工知能の重要な分野であり、明示的にプログラムしなくてもコンピューターにデータから学習して能力を向上させる機能を提供します。機械学習は、画像認識や自然言語処理から、レコメンデーションシステムや不正行為検出に至るまで、さまざまな分野で幅広く応用されており、私たちの生活様式を変えつつあります。機械学習の分野にはさまざまな手法や理論があり、その中で最も影響力のある 5 つの手法は「機械学習の 5 つの流派」と呼ばれています。 5 つの主要な学派は、象徴学派、コネクショニスト学派、進化学派、ベイジアン学派、およびアナロジー学派です。 1. 象徴主義は、象徴主義とも呼ばれ、論理的推論と知識の表現のためのシンボルの使用を強調します。この学派は、学習は既存の既存の要素を介した逆演繹のプロセスであると信じています。
