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

Поузловые активации MNIST (скрипт 17)

scripts/ablation/17_mnist_per_node_act_study.py — отдельный 2-фазный OVA-раннер плюс очередь merge/evolve. Не втиснут в сетку A–D скрипта 10/15: там sweep глобальной σ, здесь эволюционируют поузловые активации.

База как у 15 (GPU-only MNIST): dataset=mnist, 28×28×1, output_readout=mean, pop A=256 / B=128 (dual-track B → 256), val=batch=1000, generations=0 (до стагнации). stagnation_patience=50. Протокол pilot→generalize как у 11/15, но generalize_fraction=1.0: после пилота (class 0) все 3 конфига фазы идут на оставшиеся 9 классов.

На всех 6 конфигах: evolve_node_activations=True, activation=None, пул = {None, relu, gelu, tanh, leaky_relu}. Split берёт случайную σ из пула; mutate_activation меняет σ ровно у одной не-входной вершины (веса и топология не трогаются).

Капы ширины/глубины — дефолт библиотеки (10**9). Размер графа режет только фитнес; ацикличность и геометрия ядер остаются. То же для очереди merge/evolve.

6 OVA-конфигов

Фаза A — без GD:

  • acts — только эволюция σ
  • acts_ew — σ + edge_weights=True
  • acts_ew_vc — σ + edge_weights + allow_variable_channels, каналы {1,8,16}

Фаза B — те же три + periodic_gd_enabled=True (every=5, batch=128; популяция как у фаз C и D скрипта 15, но 128; два трека расширяют её до 256.

Итого 60 OVA-прогонов. Артефакты: ova/ova_results.json, ova/ova_status.json, отложенная проверка (holdout) после фазы.

Очередь слияния и эволюции

Когда фаза готова (успешная строка по каждому class_id 0..9), select_rows(..., "best-per-class") и merge_ova_champions (копирует g.node_activation(old_id) внутри ветки).

id Чемпионы Evolve GD
a_no_gd best-per-class A нет
b_no_gd best-per-class B нет
ab_no_gd best-per-class A∪B нет
b_gd B да
ab_gd A∪B да

Fingerprint-dedup и resume как в скрипте 16. Evolve: pop=128, 100 gens, val=10000, gd_every=5, gd_epochs=2.

python scripts/ablation/17_mnist_per_node_act_study.py
python scripts/ablation/17_mnist_per_node_act_study.py --ova-only
python scripts/ablation/17_mnist_per_node_act_study.py --multiclass-only --only ab_gd

Дефолтный корень: runs/ablation/mnist_per_node_act/ (ova/, seeds/, evolve/). Studio: одна форма, generalize_fraction=1.0.

CIFAR-10 аналог: скрипт 18. Протокол с val=5k и ослабленным GD: скрипт 19.