Pooling merge
3.5 Адаптивный пулинг и выравнивание карт¶
После свёртки на ребре \(u \to w\) применяется AdaptiveAvgPool2d к целевому \((H_w, W_w)\):
PyTorch разбивает \(H' \times W'\) на сетку \(H_w \times W_w\) прямоугольных бинов \(\mathcal{R}_{i,j}\) и вычисляет среднее внутри каждого:
Это гарантирует точное совпадение размеров с node_sizes[w] независимо от промежуточного \(H'\).
Примечание для режима
edge_weights=True: при включённых весовых коэффициентах рёберAdaptiveAvgPool2dзаменяется на операцию кроп/пад (_align_feature_map) — это связано с необходимостью дифференцировать по скалярным весам рёбер.
3.6 Слияние нескольких входов (merge-узел)¶
Если в вершину \(w\) входят \(K \geq 1\) активных рёбер от вершин \(u_1, \ldots, u_K\):
Реализация в execute_plan:
При edge_weights=True — softmax-взвешенная выпуклая комбинация:
где \(s_k\) — обучаемые скалярные параметры ребра (не входят в weight_scale, учатся при fine-tune).
Линейность: merge-узел при \(\alpha_k = 1/K\) — линейный комбинатор.