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

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.jsonablation_report.html.


9.3 Метрика ранжирования

Для сравнения Phase-1 конфигураций (модуль comparison_metrics.py):

\[ \text{score} = 0.65 \cdot \text{ROC-AUC} + 0.35 \cdot \text{sweep\_bal\_acc} \]

Веса отражают значимость: ROC-AUC нечувствителен к порогу и стабилен при дисбалансе классов; sweep_bal_acc — лучшая calibrated balanced accuracy.