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

Variable channels

Переменные каналы (3 / 8 / 16)

Ширина каналов задаётся на уровне узла DAG, а не ребра. Ребро u → w — это один nn.Conv2d с in_channels = C_u, out_channels = C_w.


Где хранится

Поле Модуль Смысл
ALLOWED_CHANNELS cnn_neat/config.py Библиотечный дефолт [3, 8, 16]
allow_variable_channels ExperimentConfig Разрешить скрытым узлам ширину ≠ input_channels
allowed_channels ExperimentConfig Список допустимых C (или None → дефолт библиотеки)
node_channels ConvolutionalNeuralNetwork node_id → C для скрытых узлов

Входные узлы и выходная вершина всегда имеют C = input_channels (для CIFAR-10 RGB это 3). Скрытый узел при allow_variable_channels=False тоже получает input_channels.

ConvolutionConnectionGene не содержит полей каналов — только топологию и геометрию свёртки.


Назначение ширины при мутации

При add_node_split() (разбиение ребра a → b на a → new → b):

if self.allow_variable_channels:
    self.node_channels[new_id] = random.choice(self.allowed_channels)
else:
    self.node_channels[new_id] = self.input_channels

Пространственный размер нового узла: среднее размеров концов ребра (см. spatial-geometry.md).


Свёртка на ребре

При пересборке параметров (_rebuild_parameters):

\[ \text{Conv2d}(\text{in}=C_u,\; \text{out}=C_w,\; k, s, p) \]

Активация на узле w после merge имеет форму (B, C_w, H_w, W_w).

Сужение / расширение каналов — обычные свёртки 1×1 или k×k с разными in_channels / out_channels; это не отдельный «проекционный» слой вне генома.


Crossover

Потомок наследует node_channels родителя A; узлы родителя B сдвигаются по id. Флаг allow_variable_channels и allowed_channels берутся от родителя A.


Влияние на VRAM

Пик активаций масштабируется линейно по C. На merge-узле с K входами одновременно живут до K тензоров размера (B, C_w, H_w, W_w).

Оценка estimate_bytes_per_sample() учитывает node_channels и release слотов (см. software/gpu.md).


Типичные конфиги study / ablation

Сет allow_variable_channels allowed_channels
Phase A, fixed baseline False — (везде C=3)
var_default (Phase B/D) True None{3,8,16}
channels_8_16_32 (ablation 02) True (8, 16, 32)

См. также experiments/ablation-study.md, hyperparameters/ablation-analysis.md.