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

Гибридный пайплайн CNN-NEAT + GBM (Фазы 1–7)

Семифазный пайплайн объединяет нейроэволюцию, градиентный бустинг и ансамблевое дообучение. Фазы 2–7 описывают исследовательскую концепцию; Фаза 1 полностью реализована в библиотеке cnn_neat.

flowchart TD
    P1["Фаза 1: CNN-NEAT эволюция\n(для каждого k=0..9)"] --> P2["Фаза 2: Извлечение признаков\nF_k = flatten(G*_k(X))"]
    P2 --> P3["Фаза 3: GBM per class\nXGBoost/LightGBM OvR"]
    P3 --> P4["Фаза 4: Отбор пар\nscore_k = 0.65·AUC + 0.35·bal_acc"]
    P4 --> P5["Фаза 5: Ансамблирование\nsoftmax(s_0,...,s_9)"]
    P5 --> P6["Фаза 6: Fine-tune CNN\nAdam, CE-loss, 10 классов"]
    P6 --> P7["Фаза 7: Сравнение\nResNet-18/34/50"]

Фаза 1. CNN-NEAT эволюция

Для каждого класса \(k \in \{0,\ldots,9\}\) независимо запускается эволюция с positive_class = k. Результат — лучший геном:

\[ G^*_k = \arg\max_{G \in \mathcal{P}^{(T)}} f_k(G) \]

где \(f_k\) — fitness на val-подмножестве в постановке OvR для класса \(k\), \(\mathcal{P}^{(T)}\) — популяция после \(T\) поколений.

Реализация

См. Цикл эволюции и cnn_neat.evolution_loop.run_evolution.


Фаза 2. Извлечение признаков

Для лучшего генома \(G^*_k\) извлекается вектор признаков:

\[ \mathbf{F}_k = \text{flatten}\!\big(G^*_k(\mathbf{X}_\text{train})\big) \in \mathbb{R}^{N_\text{train} \times d_k} \tag{4.4} \]

Размерность \(d_k = C \cdot H_\text{out} \cdot W_\text{out}\). При output_image_size = (1,1): \(d_k = 3\); при \((4,4)\): \(d_k = 48\); при \((8,8)\): \(d_k = 192\).

Аналогично извлекаются \(\mathbf{F}_k^\text{val}\), \(\mathbf{F}_k^\text{test}\). Опционально — Z-score нормализация признаков.


Фаза 3. Обучение GBM по классам

Для каждого \(k\) обучается бинарный GBM:

\[ \text{gbm}_k = \text{GBM.fit}(\mathbf{F}_k^\text{train}, \mathbf{y}_k^\text{train}), \qquad y_{k,i} = \mathbb{1}[\text{class}(i) = k] \tag{4.5} \]
Параметр XGBoost LightGBM
n_estimators 500 500
max_depth 6 7
learning_rate 0.05 0.05
subsample 0.8 0.8
scale_pos_weight 9.0 9.0
early_stopping 50 50

Дисбаланс OvR (~10% позитивных) компенсируется scale_pos_weight ≈ N_\text{neg}/N_\text{pos}.


Фаза 4. Отбор лучших пар

Ранжирование пар \((G^*_k, \text{gbm}_k)\):

\[ \text{score}_k = 0.65 \cdot \text{ROC-AUC}_{\text{val},k} + 0.35 \cdot \text{bal\_acc}_{\text{val},k} \tag{4.6} \]

Фаза 5. Ансамблирование

10 бинарных классификаторов → многоклассовый через softmax логитов:

\[ p(y = k \mid \mathbf{x}) = \frac{e^{s_k}}{\sum_{j=0}^{9} e^{s_j}}, \qquad s_k = \text{gbm}_k.\text{predict\_proba}(\mathbf{f}_k)[:, 1] \tag{4.7} \]

Фаза 6. Fine-tune CNN

Минимизация 10-классовой кросс-энтропии; топологии заморожены:

\[ \mathcal{L}_\text{CE} = -\frac{1}{B}\sum_{b=1}^{B}\sum_{k=0}^{9} y_{b,k}\,\log \hat{p}_{b,k} \tag{4.8} \]
Компонент Значение
Оптимизатор Adam, \(\eta = 10^{-3}\), weight_decay \(= 10^{-4}\)
Расписание Cosine Annealing
Аугментации RandomCrop(32, pad=4), RandomHorizontalFlip
Эпохи 50, early stopping (patience=10)

Фаза 7. Сравнение с ResNet

Итоговая оценка сравнивается с ResNet-18, ResNet-34, ResNet-50, обученными from scratch на полном CIFAR-10 при идентичных аугментациях и оптимизации.

Метрики: top-1 accuracy, macro ROC-AUC, время обучения, число параметров.