Перейти к содержанию

Автоэнкодеры (Autoencoders)

Введение

Автоэнкодеры - это тип нейронных сетей для обучения без учителя, которые учатся сжимать и восстанавливать данные.

Архитектура

Вход → [Encoder] → Latent Space → [Decoder] → Выход

Encoder

Сжимает вход в латентное представление:

h = f(W_e · x + b_e)

Decoder

Восстанавливает из латентного представления:

x̂ = g(W_d · h + b_d)

Функция потерь

Минимизируется разница между входом и выходом:

L = ||x - x̂||²

Типы автоэнкодеров

Undercomplete Autoencoder

Латентное пространство меньше входа:

dim(z) < dim(x)

Принуждает сеть изучать важные признаки.

Sparse Autoencoder

Добавляется штраф за активацию:

L = ||x - x̂||² + λ · Σ|h|

Denoising Autoencoder

Обучается восстанавливать чистые данные из зашумленных:

x̃ = x + noise
x̂ = decoder(encoder(x̃))
L = ||x - x̂||²

Variational Autoencoder (VAE)

Кодирует распределение в латентном пространстве:

class VAE(nn.Module):
    def __init__(self, input_dim, hidden_dim, latent_dim):
        super().__init__()

        # Encoder
        self.encoder = nn.Sequential(
            nn.Linear(input_dim, hidden_dim),
            nn.ReLU(),
        )
        self.fc_mu = nn.Linear(hidden_dim, latent_dim)
        self.fc_logvar = nn.Linear(hidden_dim, latent_dim)

        # Decoder
        self.decoder = nn.Sequential(
            nn.Linear(latent_dim, hidden_dim),
            nn.ReLU(),
            nn.Linear(hidden_dim, input_dim),
            nn.Sigmoid()
        )

    def reparameterize(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 = self.fc_mu(h)
        logvar = self.fc_logvar(h)
        z = self.reparameterize(mu, logvar)
        return self.decoder(z), mu, logvar

    def loss_function(self, x, x_hat, mu, logvar):
        reconstruction_loss = F.binary_cross_entropy(x_hat, x, reduction='sum')
        kl_divergence = -0.5 * torch.sum(1 + logvar - mu.pow(2) - logvar.exp())
        return reconstruction_loss + kl_divergence

Применения

  • Снижение размерности
  • Удаление шума
  • Генерация данных
  • Аномалии детекция
  • Рекомендательные системы

Заключение

Автоэнкодеры - мощный инструмент для обучения представлений без размеченных данных.