Periodic gd
5.4 Периодическое градиентное дообучение¶
Лёгкий Adam-проход по элитам в offspring queue (или популяции) каждые
\(N_\text{pgd}\) поколений (cnn_neat/periodic_gd.py):
\[
\forall G_i \in \mathcal{Q}:\quad \theta_i \leftarrow \theta_i - \eta \nabla_{\theta_i} \mathcal{L}(G_i, \mathcal{D}_\text{fold}), \quad E_\text{pgd}\text{ эпох}
\]
Топология заморожена: меняются только веса Conv2d (и edge scalars).
Протокол данных (фазы C/D, periodic_gd_cv_enabled=True)¶
- CIFAR-10 train с OvR-метками для текущего
positive_class. - Фиксированный valid (
fitness_val_indices.json) — приспособленность (fitness) чистого CNN-NEAT и accept/reject gate после GD. - Остаток train (~40k при val=10k) делится на \(K=5\) фиксированных fold
(
periodic_gd_cv_folds_seed{seed}_k{K}.json). Каждый GD-event учит на одной вращающейся \(1/K\) доле (periodic_gd_cv_train_one_fold=True).
Индексы фиксированы seed-ом и общие для всех прогонов → сравнимость.
| Параметр | Default | Описание |
|---|---|---|
periodic_gd_enabled |
False |
Включить |
periodic_gd_every |
5 |
Каждые N поколений (gen > 0) |
periodic_gd_epochs |
3 |
Эпох Adam на каждый геном |
periodic_gd_batch_size |
256 |
Размер батча |
periodic_gd_lr |
1e-3 |
Learning rate |
periodic_gd_targets |
offspring_queue |
queue | population | elites |
periodic_gd_parallel |
1 |
Параллельные геномы (CUDA streams) |
periodic_gd_device |
None |
Device GD; "cuda" при CPU-эволюции |
periodic_gd_cv_enabled |
False |
K-fold протокол выше |
periodic_gd_cv_folds |
5 |
Число fold |
periodic_gd_cv_train_one_fold |
True |
Учить на 1/K (иначе legacy ⅘) |
periodic_gd_park_forward_hash_cache |
True |
Park Merkle-графа перед GD |
adaptive_periodic_gd_batch_size |
True |
Ужимать батч GD при нехватке VRAM |
periodic_gd_batch_size_min |
16 |
Нижняя граница адаптивного батча |
gd_lineage_track_enabled |
False |
Два трека (dual-track) после первого GD |
Accept/reject: веса применяются, только если L1-норма изменения \(>0\) и val-gate проходит. Исследуется в фазах C/D OVA (скрипты 06, 10, 11).
Градиентное дообучение в многоклассовом режиме¶
При task_mode="multiclass" (seed из OVA-merge) лосс —
не бинарный BCE, а cross-entropy по логитам tip'ов
(multiclass_head.multiclass_classification_loss); топология по-прежнему заморожена,
обучаются conv- и edge-веса. Применяется в скриптах 14b и 16
(multiclass эксперименты).
См. dual-track, hybrid CPU/GPU.