Ablation study
9. Аблационное исследование¶
9.1 Структура фаз A→B→C→D¶
Реализация: scripts/ablation/05_structured_study.py
flowchart LR
baseline[Baseline: linear activation\nmean_minus_median readout\nC=3 channels] --> A
subgraph A [Фаза A — Активации и readout]
direction TB
aact["5 активаций × 2 readout\n= 10 конфигураций\nBEZ Periodic GD"]
end
subgraph B [Фаза B — Архитектурные параметры]
direction TB
btop["Top-N активаций из A\n× var_default {noew,ew}\n+ fixed_3 {ew only}\n= N×3 (N=4 → 12)\nBEZ Periodic GD"]
end
subgraph C [Фаза C — Активации + GD]
direction TB
cact["5 активаций × 2 readout\n= 10 конфигураций\n+ Periodic GD"]
end
subgraph D [Фаза D — Архитектура + GD]
direction TB
dtop["Top-N из A или C\n× edge_weights × channels\n+ Periodic GD"]
end
A --> B
B --> C
C --> D
D --> report[study_final_report.html]
A --> live[runs/ablation/study/live.html]
Параметры Structured Study (из hyperparameters.py):
BASELINE_CFG = ExperimentConfig(
num_generations=50,
population_size=100,
eval_batch_size=25000,
adaptive_eval_batch_size=True,
fitness_metric="balanced_accuracy",
)
# Фаза A: активации и readout
PHASE_A_ACTIVATIONS = [None, "relu", "gelu", "tanh", "leaky_relu"]
PHASE_A_READOUTS = ["mean", "mean_minus_median"]
# Фаза B: channel sets (по умолчанию → 12 прогонов при top_n=4)
CHANNEL_SETS = {
"var_default": None, # var channels [3,8,16]; edge_weights off + on
"fixed_3": None, # fixed C=3; edge_weights on only
}
Live dashboard: baseline Phase A не дублируется в сводной таблице Phase B (сравнение — только в report_phase_b.html). Перед Phase B/D выводится оценка времени по Phase A/C.
Resume: --start-phase a --resume пропускает завершённую Phase A и перезапускает Phase B при изменении параметров (каналы, edge weights, GD). Частично выполненная Phase B с актуальной config_signature продолжается с места остановки.
Результаты: runs/ablation/study/study_results.json, report_phase_A.html, ..., study_final_report.html.
9.2 Простое аблационное исследование¶
Реализация: scripts/ablation/02_arch_ablation.py
One-at-a-time аблация — варьируется один параметр при зафиксированных остальных:
| Фаза | Условие | Параметр |
|---|---|---|
| 1 | baseline (linear) | — |
| 1 | activation_relu | activation="relu" |
| 1 | activation_gelu | activation="gelu" |
| 1 | activation_tanh | activation="tanh" |
| 1 | activation_leaky | activation="leaky_relu" |
| 1 | readout_mean | output_readout="mean" |
| 2 | edge_weights | edge_weights=True |
| 2 | variable_channels | allow_variable_channels=True |
| 2 | channels_8_16_32 | allowed_channels=(8,16,32) |
| 2 | channels_16_32_64 | allowed_channels=(16,32,64) |
| 3 | periodic_gd_every5 | periodic_gd_enabled=True, every=5 |
| 3 | periodic_gd_every10 | periodic_gd_enabled=True, every=10 |
Результаты → runs/ablation/results.json → ablation_report.html.
9.3 Метрика ранжирования¶
Для сравнения Phase-1 конфигураций (модуль comparison_metrics.py):
Веса отражают значимость: ROC-AUC нечувствителен к порогу и стабилен при дисбалансе классов; sweep_bal_acc — лучшая calibrated balanced accuracy.