Variational Autoencoder: 이론 및 구현
VAE(Variational Autoencoder)는 신경망을 기반으로 하는 생성 모델입니다. 그 목표는 고차원 데이터의 저차원 잠재 변수 표현을 학습하고 이러한 잠재 변수를 데이터 재구성 및 생성에 사용하는 것입니다. 기존 오토인코더와 비교하여 VAE는 잠재 공간의 분포를 학습하여 보다 현실적이고 다양한 샘플을 생성할 수 있습니다. VAE의 구현 방법은 아래에서 자세히 소개된다.
1. VAE의 기본 원리
VAE의 기본 아이디어는 고차원 데이터를 저차원 잠재 공간에 매핑하여 데이터의 차원 축소 및 재구성을 달성하는 것입니다. 인코더와 디코더의 두 부분으로 구성됩니다. 인코더는 입력 데이터 x를 잠재 공간의 평균 μ 및 분산 σ^2에 매핑합니다. 이러한 방식으로 VAE는 잠재 공간의 데이터를 샘플링하고 샘플링된 결과를 디코더를 통해 원본 데이터로 재구성할 수 있습니다. 이 인코더-디코더 구조를 통해 VAE는 잠재 공간에서 연속성이 좋은 새로운 샘플을 생성하여 잠재 공간에서 유사한 샘플을 더 가깝게 만들 수 있습니다. 따라서 VAE는 차원 축소에만 사용될 수 없으며
\begin{aligned} \mu &=f_{\mu}(x)\ \sigma^2 &=f_{\sigma}(x) \end{aligned}
여기에서 f_{mu} 및 f_{sigma}는 모든 신경망 모델이 될 수 있습니다. 일반적으로 우리는 인코더를 구현하기 위해 MLP(Multilayer Perceptron)를 사용합니다.
디코더는 잠재 변수 z를 원래 데이터 공간으로 다시 매핑합니다. 즉,
x'=g(z)
여기서 g는 모든 신경망 모델일 수도 있습니다. 마찬가지로 우리는 일반적으로 MLP를 사용하여 디코더를 구현합니다.
VAE에서 잠재 변수 $z$는 사전 분포(일반적으로 가우스 분포)에서 샘플링됩니다. 즉:
z\sim\mathcal{N}(0,I)
이러한 방식으로 재구성 오류를 최소화할 수 있으며 잠재 변수 KL 발산이 사용됩니다. 차원 축소 및 데이터 생성을 달성하기 위해 VAE를 훈련합니다. 구체적으로 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의 조건부 분포입니다. z)는 생성 분포, 즉 잠재 변수 $z$가 주어졌을 때 해당 데이터 분포이고, p(z)는 사전 분포, 즉 잠재 변수 z의 한계 분포가 사용된 하이퍼파라미터입니다. 재구성 오류와 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이 됩니다. 디코더는 잠재 변수를 원래 데이터 공간으로 다시 매핑합니다. 여기서 마지막 레이어는 Sigmoid 함수를 사용하여 출력 범위를 [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 발산을 사용하여 잠재 변수 분포와 사전 분포의 차이를 계산합니다. 그 중 베타는 재구성 오류와 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 최적화 프로그램과 베타=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模型是一种非常强大的生成模型,可以学习到高维数据的潜在表示,并用潜在表示生成新的样本。
위 내용은 Variational Autoencoder: 이론 및 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











이미지 주석은 이미지 콘텐츠에 더 깊은 의미와 설명을 제공하기 위해 이미지에 레이블이나 설명 정보를 연결하는 프로세스입니다. 이 프로세스는 비전 모델을 훈련하여 이미지의 개별 요소를 보다 정확하게 식별하는 데 도움이 되는 기계 학습에 매우 중요합니다. 이미지에 주석을 추가함으로써 컴퓨터는 이미지 뒤의 의미와 맥락을 이해할 수 있으므로 이미지 내용을 이해하고 분석하는 능력이 향상됩니다. 이미지 주석은 컴퓨터 비전, 자연어 처리, 그래프 비전 모델 등 다양한 분야를 포괄하여 차량이 도로의 장애물을 식별하도록 지원하는 등 광범위한 애플리케이션을 보유하고 있습니다. 의료영상인식을 통한 질병진단. 이 기사에서는 주로 더 나은 오픈 소스 및 무료 이미지 주석 도구를 권장합니다. 1.마케센스

기계 학습 및 데이터 과학 분야에서 모델 해석 가능성은 항상 연구자와 실무자의 초점이었습니다. 딥러닝, 앙상블 방법 등 복잡한 모델이 널리 적용되면서 모델의 의사결정 과정을 이해하는 것이 특히 중요해졌습니다. explainable AI|XAI는 모델의 투명성을 높여 머신러닝 모델에 대한 신뢰와 확신을 구축하는 데 도움이 됩니다. 모델 투명성을 향상시키는 것은 여러 복잡한 모델의 광범위한 사용은 물론 모델을 설명하는 데 사용되는 의사 결정 프로세스와 같은 방법을 통해 달성할 수 있습니다. 이러한 방법에는 기능 중요도 분석, 모델 예측 간격 추정, 로컬 해석 가능성 알고리즘 등이 포함됩니다. 특성 중요도 분석은 모델이 입력 특성에 미치는 영향 정도를 평가하여 모델의 의사결정 과정을 설명할 수 있습니다. 모델 예측 구간 추정

이 글에서는 학습 곡선을 통해 머신러닝 모델에서 과적합과 과소적합을 효과적으로 식별하는 방법을 소개합니다. 과소적합 및 과적합 1. 과적합 모델이 데이터에 대해 과도하게 훈련되어 데이터에서 노이즈를 학습하는 경우 모델이 과적합이라고 합니다. 과적합된 모델은 모든 예를 너무 완벽하게 학습하므로 보이지 않거나 새로운 예를 잘못 분류합니다. 과대적합 모델의 경우 완벽/거의 완벽에 가까운 훈련 세트 점수와 형편없는 검증 세트/테스트 점수를 얻게 됩니다. 약간 수정됨: "과적합의 원인: 복잡한 모델을 사용하여 간단한 문제를 해결하고 데이터에서 노이즈를 추출합니다. 훈련 세트로 사용되는 작은 데이터 세트는 모든 데이터를 올바르게 표현하지 못할 수 있기 때문입니다."

일반인의 관점에서 보면 기계 학습 모델은 입력 데이터를 예측된 출력에 매핑하는 수학적 함수입니다. 보다 구체적으로, 기계 학습 모델은 예측 출력과 실제 레이블 사이의 오류를 최소화하기 위해 훈련 데이터로부터 학습하여 모델 매개변수를 조정하는 수학적 함수입니다. 기계 학습에는 로지스틱 회귀 모델, 의사결정 트리 모델, 지원 벡터 머신 모델 등 다양한 모델이 있습니다. 각 모델에는 적용 가능한 데이터 유형과 문제 유형이 있습니다. 동시에, 서로 다른 모델 간에는 많은 공통점이 있거나 모델 발전을 위한 숨겨진 경로가 있습니다. 연결주의 퍼셉트론을 예로 들면, 퍼셉트론의 은닉층 수를 늘려 심층 신경망으로 변환할 수 있습니다. 퍼셉트론에 커널 함수를 추가하면 SVM으로 변환할 수 있다. 이 하나

1950년대에는 인공지능(AI)이 탄생했다. 그때 연구자들은 기계가 사고와 같은 인간과 유사한 작업을 수행할 수 있다는 것을 발견했습니다. 이후 1960년대에 미국 국방부는 인공 지능에 자금을 지원하고 추가 개발을 위해 실험실을 설립했습니다. 연구자들은 우주 탐사, 극한 환경에서의 생존 등 다양한 분야에서 인공지능의 응용 분야를 찾고 있습니다. 우주탐험은 지구를 넘어 우주 전체를 포괄하는 우주에 대한 연구이다. 우주는 지구와 조건이 다르기 때문에 극한 환경으로 분류됩니다. 우주에서 생존하려면 많은 요소를 고려해야 하며 예방 조치를 취해야 합니다. 과학자와 연구자들은 우주를 탐험하고 모든 것의 현재 상태를 이해하는 것이 우주가 어떻게 작동하는지 이해하고 잠재적인 환경 위기에 대비하는 데 도움이 될 수 있다고 믿습니다.

C++의 기계 학습 알고리즘이 직면하는 일반적인 과제에는 메모리 관리, 멀티스레딩, 성능 최적화 및 유지 관리 가능성이 포함됩니다. 솔루션에는 스마트 포인터, 최신 스레딩 라이브러리, SIMD 지침 및 타사 라이브러리 사용은 물론 코딩 스타일 지침 준수 및 자동화 도구 사용이 포함됩니다. 실제 사례에서는 Eigen 라이브러리를 사용하여 선형 회귀 알고리즘을 구현하고 메모리를 효과적으로 관리하며 고성능 행렬 연산을 사용하는 방법을 보여줍니다.

번역기 | 검토자: Li Rui | Chonglou 인공 지능(AI) 및 기계 학습(ML) 모델은 오늘날 점점 더 복잡해지고 있으며 이러한 모델에서 생성되는 출력은 이해관계자에게 설명할 수 없는 블랙박스입니다. XAI(Explainable AI)는 이해관계자가 이러한 모델의 작동 방식을 이해할 수 있도록 하고, 이러한 모델이 실제로 의사 결정을 내리는 방식을 이해하도록 하며, AI 시스템의 투명성, 이 문제를 해결하기 위한 신뢰 및 책임을 보장함으로써 이 문제를 해결하는 것을 목표로 합니다. 이 기사에서는 기본 원리를 설명하기 위해 다양한 설명 가능한 인공 지능(XAI) 기술을 살펴봅니다. 설명 가능한 AI가 중요한 몇 가지 이유 신뢰와 투명성: AI 시스템이 널리 수용되고 신뢰되려면 사용자가 의사 결정 방법을 이해해야 합니다.

머신 러닝은 명시적으로 프로그래밍하지 않고도 컴퓨터가 데이터로부터 학습하고 능력을 향상시킬 수 있는 능력을 제공하는 인공 지능의 중요한 분야입니다. 머신러닝은 이미지 인식, 자연어 처리, 추천 시스템, 사기 탐지 등 다양한 분야에서 폭넓게 활용되며 우리의 삶의 방식을 변화시키고 있습니다. 기계 학습 분야에는 다양한 방법과 이론이 있으며, 그 중 가장 영향력 있는 5가지 방법을 "기계 학습의 5개 학교"라고 합니다. 5개 주요 학파는 상징학파, 연결주의 학파, 진화학파, 베이지안 학파, 유추학파이다. 1. 상징주의라고도 알려진 상징주의는 논리적 추론과 지식 표현을 위해 상징을 사용하는 것을 강조합니다. 이 사고 학교는 학습이 기존을 통한 역연역 과정이라고 믿습니다.
