Convolution
3.3 Геометрия свёртки¶
Для ребра \(u \to w\) с \(\mathbf{s}(u) = (H_u, W_u)\) и \(\mathbf{s}(w) = (H_w, W_w)\) функция _kp_for_edge задаёт размер ядра и padding независимо по каждой оси \(d \in \{h, w\}\):
| Условие | \(k_d\) | \(p_d\) | Интерпретация |
|---|---|---|---|
| \(H_u > H_w\) (downsampling) | \(H_u - H_w + 1\) | \(0\) | Сжимающая свёртка |
| \(H_u < H_w\) (upsampling) | \(1\) | \(\lfloor (H_w - H_u) / 2 \rfloor\) | Расширяющая свёртка + padding |
| \(H_u = H_w\) (same-size) | \(1\) | \(0\) | Свёртка \(1\times1\) |
Stride всегда \(s = 1\) (неизменно).
Размер тензора после Conv2d (формула PyTorch при \(s=1\)):
Проверка: при downsampling \(H' = H_u + 0 - (H_u - H_w + 1) + 1 = H_w\) ✓
Пример (CIFAR-10, \(32 \to 1\)): ребро \(0 \to o\) с \(H_u = 32\), \(H_w = 1\):
Это эквивалент «глобальной» свёртки — один фильтр размером \(32 \times 32\) покрывает всё изображение.
3.4 Оператор на ребре¶
Для батча \(\mathbf{X} \in \mathbb{R}^{B \times C \times H_u \times W_u}\) на ребре \(u \to w\):
где параметры \(\theta_{u,w} = (\mathbf{W}, \mathbf{b})\) при фиксированных \(C = C_\text{in} = C_\text{out} = 3\):
Поэлементная кросс-корреляция (padding_mode='zeros', stride \(s=1\)):
(значения вне границ карты приравниваются нулю.)
Число параметров на ребре (при \(C = 3\)):
Пример: прямое ребро \(32 \to 1\): \(|\theta| = 9 \cdot 32 \cdot 32 + 3 = 9\,219\) параметров.