0Pricing
Learn AI with Python · Урок

Автокодировщики для обучения представлений

Архитектура кодировщика и декодировщика, узкое место, ошибка реконструкции, применение для обнаружения аномалий

«Автокодировщики для обучения представлений» — бесплатный урок Learn AI with Python на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn AI with Python, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn AI with Python содержит 4 уроков всего.

Что такое автоэнкодер?

Автоэнкодер учится сжимать данные в небольшой код, а затем восстанавливать их. Он состоит из двух частей: кодировщика, который сжимает данные, и декодировщика, который их восстанавливает. Сжатие в середине заставляет модель учиться выделять главное.

import torch
import torch.nn as nn

Идея узкого места

Узкий средний слой называется узким местом или латентным кодом. Заставляя всю информацию проходить через несколько чисел, сеть вынуждена отбрасывать шум и сохранять существенную структуру данных.

Создание кодировщика

Для изображений размером 28x28 (784 пикселя) кодировщик поэтапно уменьшает вход: с 784 до 256, а затем до латентного кода размерности 64. После каждого слоя Linear следует нелинейность ReLU.

encoder = nn.Sequential(
    nn.Linear(784, 256),
    nn.ReLU(),
    nn.Linear(256, 64)
)

Создание декодера

Декодер зеркально повторяет энкодер, преобразуя 64-мерный код обратно в 784 пикселя. Последний слой Sigmoid сжимает выходные значения в диапазон [0,1], чтобы они соответствовали нормализованным значениям пикселей.

decoder = nn.Sequential(
    nn.Linear(64, 256),
    nn.ReLU(),
    nn.Linear(256, 784),
    nn.Sigmoid()
)

Полный автокодировщик

Объедините энкодер и декодер в один модуль. При прямом проходе данные сначала кодируются, а затем декодируются; в результате получается реконструкция той же формы, что и у входных данных.

class AutoEncoder(nn.Module):
    def __init__(self, enc, dec):
        super().__init__()
        self.enc, self.dec = enc, dec
    def forward(self, x):
        z = self.enc(x)
        return self.dec(z)

Ошибка реконструкции (MSE)

Целевыми данными при обучении служит сам вход. Среднеквадратичная ошибка измеряет, насколько реконструкция отличается от исходного изображения для каждого пикселя. Её минимизация учит модель faithfully сжимать данные.

criterion = nn.MSELoss()

x_flat = x.view(x.size(0), -1)
recon = model(x_flat)
loss = criterion(recon, x_flat)

Обучение автокодировщика

Обучение проходит без учителя: используются только входные данные, без меток. Цикл включает стандартную последовательность zero_grad, forward, backward, step, но ошибка сравнивает выход с входом.

optimizer.zero_grad()
recon = model(x_flat)
loss = criterion(recon, x_flat)
loss.backward()
optimizer.step()

Латентное пространство

После обучения энкодер отображает каждый входной пример в точку латентного пространства. Похожие входные данные оказываются рядом, поэтому этот 64-мерный код представляет собой компактное представление данных, полученное в процессе обучения.

z = model.enc(x_flat)
print(z.shape)  # [batch, 64]

Визуализация с помощью t-SNE

64-мерное латентное пространство трудно визуализировать. t-SNE проецирует его в двумерное пространство для построения графика. Кластеры на графике показывают, что автокодировщик объединил похожие объекты, ни разу не видя меток.

from sklearn.manifold import TSNE

codes = model.enc(all_data).detach().numpy()
proj = TSNE(n_components=2).fit_transform(codes)
# scatter plot proj colored by true label

Обнаружение аномалий

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

errors = ((model(data) - data) ** 2).mean(dim=1)
anomalies = errors > threshold

Зачем нужно обучение представлений?

Главная ценность — латентный код: полученный в процессе обучения вектор признаков, который можно использовать для кластеризации, визуализации, обнаружения аномалий или подавать на вход другой модели — и всё это без меток.

Быстрая проверка

Проверьте, насколько хорошо Вы поняли принцип работы автокодировщика.

Повторение: автокодировщики

Вы создали энкодер (784 → 256 → 64) и зеркальный декодер, обучили их с помощью ошибки реконструкции MSE без меток. Вы использовали латентный код для обучения представлений, визуализировали его с помощью t-SNE и обнаруживали аномалии по высокой ошибке реконструкции.

Часто задаваемые вопросы

Урок «Автокодировщики для обучения представлений» бесплатный?

Да — полный текст урока «Автокодировщики для обучения представлений» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn AI with Python, подпишись на CoddyKit PRO. Курс Learn AI with Python содержит 4 уроков всего.

Чему я научусь в уроке «Автокодировщики для обучения представлений»?

Архитектура кодировщика и декодировщика, узкое место, ошибка реконструкции, применение для обнаружения аномалий Ты практикуешь Learn AI with Python с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Learn AI with Python?

Предыдущий опыт не требуется. Learn AI with Python на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Автокодировщики для обучения представлений»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Learn AI with Python?

Да. Каждый урок Learn AI with Python включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Автокодировщики для обучения представлений
  2. Вариационные автокодировщики (VAE)
  3. GAN: генератор и дискриминатор
  4. Условные GAN и перенос стиля
← Назад к Learn AI with Python