Архитектура Модели

Подробный разбор нейросетевых механизмов Repin 2.0

Тип модели

GAN

Две сети обучаются в состязательном режиме.

Latent space

64D

Компактный вектор шума задает будущий образ.

Базовый кадр

28×28

784 значения после разворачивания изображения.

Финальный PNG

224×224

Апскейл ×8 сохраняет пиксельную эстетику.

G Генератор (Generator)

Многослойный перцептрон (MLP), который превращает случайный шум в изображение. Его задача — обмануть Дискриминатор, создавая всё более реалистичные подделки.

Вход (Латентный вектор): z ∈ ℝ⁶⁴

Слой 1: Linear(64 → 256)+ ReLU

Слой 2: Linear(256 → 512)+ ReLU

Слой 3: Linear(512 → 784)+ Tanh

Выход: 28×28 (Pixel Art)

Параметры

≈ 530K

Диапазон

[-1, 1]

Роль

Синтез

D Дискриминатор (Discriminator)

Критик-классификатор, обучающийся отличать реальные изображения от подделок Генератора. Его задача — выставлять высокую вероятность для настоящих данных.

Вход: 784 (Flattened Image)

Слой 1: Linear(784 → 512)+ LeakyReLU

Слой 2: Linear(512 → 256)+ LeakyReLU

Слой 3: Linear(256 → 1)+ Sigmoid

Выход: p ∈ [0, 1]

Параметры

≈ 530K

Leaky slope

0.2

Роль

Критик

Поток данных

Repin 2.0 намеренно оставляет архитектуру компактной: модель легко обучать, проверять и переносить между CPU и Intel XPU, а каждый этап преобразования прозрачен.

1. Шум

z ~ N(0, 1)

[B, 64]

2. Генератор

G(z)

[B, 784]

3. Изображение

reshape

[B, 1, 28, 28]

4. Денормализация

(x + 1) / 2

[-1, 1] → [0, 1]

5. Апскейл

nearest ×8

без размытия краев

6. Экспорт

PNG grid

224×224 на изображение

Визуализация внутренних слоёв

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

Внутренние слои генератора Repin 2.0 Поток данных проходит от латентного вектора 64D через слои 256 и 512 к выходному вектору 784. LATENT 64D seed z LINEAR 64→256 · ReLU FEATURES 256→512 · ReLU RASTERIZE 512→784 · Tanh 28×28 784 значений noise manifold stroke primitives composition field pixel logits

Расширение признаков

64 → 256

Первый слой превращает случайный seed в набор грубых направлений: расположение пятен, контраст и будущую геометрию штриха.

Сборка композиции

256 → 512

Средний слой несёт самую активную работу: смешивает признаки, удерживает разнообразие и формирует внутреннюю карту образа.

Проекция в пиксели

512 → 784

Последний слой переводит признаки в плоскую сетку 28×28, а Tanh ограничивает значения диапазоном [-1, 1].

Математика обучения

Минимаксная игра

Обучение GAN формулируется как антагонистическая игра с нулевой суммой между Генератором (G) и Дискриминатором (D). Математически это выражается через функцию ценности V(D, G).

min_G max_D V(D, G) = 𝔼[log D(x)] + 𝔼[log(1 - D(G(z)))]

Loss-функция (BCELoss)

Используется бинарная кросс-энтропия. Дискриминатор минимизирует ошибку классификации, а Генератор стремится максимизировать вероятность ошибки Дискриминатора.

D на реальных Target: 1
D на фейках Target: 0

D на реальном батче

Реальные изображения MNIST нормализуются в диапазон [-1, 1], разворачиваются в 784 признака и получают целевую метку 1.

D на фейках

Сгенерированные изображения передаются в дискриминатор через detach(), чтобы не обновлять генератор в фазе критика.

G через D

Генератор получает целевую метку 1: он учится делать такие изображения, которые дискриминатор принимает за реальные.

Цикл обучения

1

Обновление дискриминатора

Считаются две ошибки: на настоящих изображениях и на фейках. Их сумма обновляет только D.

2

Обновление генератора

Новый шум проходит через G, затем через D. Ошибка считается так, будто фейки должны быть реальными.

3

Баланс игры

Если D слишком силен, градиент G ослабевает. Если G слишком силен, D перестает быть полезным критиком.

Гиперпараметры

Параметр Значение Зачем
lr0.0002спокойный шаг AdamW
betas(0.5, 0.999)меньше инерции в GAN
weight_decay1e-4мягкая регуляризация
lossBCELossбинарная классификация real/fake
dtypebfloat16экономия памяти при autocast

Карта размерностей

Этап Тензор Размерность Комментарий
Шумz[B, 64]случайное зерно образа
G hidden 1h1[B, 256]первичное расширение признаков
G hidden 2h2[B, 512]более богатое внутреннее представление
G outputx_fake[B, 784]плоская карта 28×28
D inputx[B, 784]реальное или сгенерированное изображение
D outputp[B, 1]вероятность real-класса

tensorZ audit

Реальные веса модели

Данные ниже получены из консольной утилиты tensorz для файла weights/repin_weights.pth. Это снимок фактического состояния сохранённого генератора.

Тензоров

6

Параметров

550.4K

Память

2.1 MB

Sparsity

0.00%

Тензор Shape Тип Параметры Память Mean Min Max
net.0.weight256x64float3216.4 K64.0 KB0.0077-0.77230.8468
net.0.bias256float322561.0 KB-0.3628-2.12702.5104
net.2.weight512x256float32131.1 K512.0 KB-0.0667-4.09071.1734
net.2.bias512float325122.0 KB0.0891-0.42400.6244
net.4.weight784x512float32401.4 K1.53 MB-0.0188-3.86601.2479
net.4.bias784float327843.06 KB-0.0958-0.54870.2581

Гистограмма распределения

[-0.4601, -0.1300]102 059 · 18.54%
[-0.1300, 0.2000]401 518 · 72.95%
[0.2000, 0.5301]33 566 · 6.10%
Остальные интервалы13 273 · 2.41%

Интерпретация

Основная масса весов сконцентрирована около нуля: диапазон от -0.1300 до 0.2000 содержит почти три четверти всех значений. Это нормальный признак компактной MLP-модели без разреживания.

Самые широкие хвосты находятся в матрицах net.2.weight и net.4.weight: они формируют наиболее ёмкие преобразования признаков перед выходом 28×28.

Все тензоры имеют тип float32 в сохранённом файле; смешанная точность bfloat16 применяется во время вычислений через autocast.

Технологии и Оптимизации

Intel XPU

Автоматическое ускорение на Intel GPU (Arc, Flex) через PyTorch XPU backend.

BFloat16 Precision

Снижение потребления памяти и ускорение инференса без потери точности.

Nearest Neighbor

Художественный апскейлинг, превращающий 28x28 в четкий пиксель-арт 224x224.

Как читать поведение модели

Нормальный режим

D Loss держится около 0.6–0.9, G Loss меняется волнами. Сети продолжают обмениваться полезным градиентом.

D доминирует

D Loss стремится к нулю, а G Loss резко растет. Генератору становится трудно получить обучающий сигнал.

Mode collapse

Разные z дают похожие изображения. Обычно помогает менять learning rate, latent size или баланс шагов D/G.