Архитектура Модели
Подробный разбор нейросетевых механизмов Repin 2.0
Тип модели
GAN
Две сети обучаются в состязательном режиме.
Latent space
64D
Компактный вектор шума задает будущий образ.
Базовый кадр
28×28
784 значения после разворачивания изображения.
Финальный PNG
224×224
Апскейл ×8 сохраняет пиксельную эстетику.
G Генератор (Generator)
Многослойный перцептрон (MLP), который превращает случайный шум в изображение. Его задача — обмануть Дискриминатор, создавая всё более реалистичные подделки.
Слой 1: Linear(64 → 256)+ ReLU
Слой 2: Linear(256 → 512)+ ReLU
Слой 3: Linear(512 → 784)+ Tanh
Параметры
≈ 530K
Диапазон
[-1, 1]
Роль
Синтез
D Дискриминатор (Discriminator)
Критик-классификатор, обучающийся отличать реальные изображения от подделок Генератора. Его задача — выставлять высокую вероятность для настоящих данных.
Слой 1: Linear(784 → 512)+ LeakyReLU
Слой 2: Linear(512 → 256)+ LeakyReLU
Слой 3: Linear(256 → 1)+ Sigmoid
Параметры
≈ 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 пиксельных значения будущего изображения.
Расширение признаков
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 на реальном батче
Реальные изображения MNIST нормализуются в диапазон [-1, 1], разворачиваются в 784 признака и получают целевую метку 1.
D на фейках
Сгенерированные изображения передаются в дискриминатор через detach(), чтобы не обновлять генератор в фазе критика.
G через D
Генератор получает целевую метку 1: он учится делать такие изображения, которые дискриминатор принимает за реальные.
Цикл обучения
Обновление дискриминатора
Считаются две ошибки: на настоящих изображениях и на фейках. Их сумма обновляет только D.
Обновление генератора
Новый шум проходит через G, затем через D. Ошибка считается так, будто фейки должны быть реальными.
Баланс игры
Если D слишком силен, градиент G ослабевает. Если G слишком силен, D перестает быть полезным критиком.
Гиперпараметры
| Параметр | Значение | Зачем |
|---|---|---|
| lr | 0.0002 | спокойный шаг AdamW |
| betas | (0.5, 0.999) | меньше инерции в GAN |
| weight_decay | 1e-4 | мягкая регуляризация |
| loss | BCELoss | бинарная классификация real/fake |
| dtype | bfloat16 | экономия памяти при autocast |
Карта размерностей
| Этап | Тензор | Размерность | Комментарий |
|---|---|---|---|
| Шум | z | [B, 64] | случайное зерно образа |
| G hidden 1 | h1 | [B, 256] | первичное расширение признаков |
| G hidden 2 | h2 | [B, 512] | более богатое внутреннее представление |
| G output | x_fake | [B, 784] | плоская карта 28×28 |
| D input | x | [B, 784] | реальное или сгенерированное изображение |
| D output | p | [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.weight | 256x64 | float32 | 16.4 K | 64.0 KB | 0.0077 | -0.7723 | 0.8468 |
| net.0.bias | 256 | float32 | 256 | 1.0 KB | -0.3628 | -2.1270 | 2.5104 |
| net.2.weight | 512x256 | float32 | 131.1 K | 512.0 KB | -0.0667 | -4.0907 | 1.1734 |
| net.2.bias | 512 | float32 | 512 | 2.0 KB | 0.0891 | -0.4240 | 0.6244 |
| net.4.weight | 784x512 | float32 | 401.4 K | 1.53 MB | -0.0188 | -3.8660 | 1.2479 |
| net.4.bias | 784 | float32 | 784 | 3.06 KB | -0.0958 | -0.5487 | 0.2581 |
Гистограмма распределения
Интерпретация
Основная масса весов сконцентрирована около нуля: диапазон от -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.