This commit is contained in:
2026-05-05 14:00:36 +03:00
parent 5782a2b35f
commit dc9bd8b7ad
6 changed files with 277 additions and 7 deletions

View File

@@ -0,0 +1,62 @@
---
tags: [диссер, fusion, multimodal, архитектура]
aliases: [DEQ-Fusion, Progressive Fusion]
---
# DEQ-Fusion и Progressive Fusion
## DEQ-Fusion (Deep Equilibrium Fusion)
**Суть:** итоговое представление определяется не как результат прохождения фиксированного числа слоёв, а как **стационарная точка (равновесие)** параметризованного преобразования.
Объединённое представление формируется как решение уравнения, в котором различные источники признаков **итеративно и взаимозависимо** влияют друг на друга до достижения согласованного состояния.
**Преимущества перед каскадными MLP/attention:**
- Моделирует глубокие и рекуррентные взаимодействия между модальностями без явного увеличения глубины сети
- Фиксированное число параметров при теоретически бесконечной глубине
- Равновесное состояние естественно подавляет шум и усиливает согласованные признаки
**Недостатки:**
- Более сложное обучение
- Необходимость численных методов поиска фиксированной точки
- Повышенные требования к стабильности и сходимости
---
## Progressive Fusion
**Суть:** объединение строится как **явная последовательность этапов**, на каждом из которых представления модальностей постепенно уточняются через residual-связи.
Поздние, более семантически насыщенные признаки через остаточные связи влияют на более ранние представления — **обратное распространение высокоуровневого контекста**.
**Свойства:**
- Дискретный процесс с фиксированным числом шагов
- Архитектурно реализуется как каскад fusion-блоков
- Каждая итерация явно задана в графе вычислений
- Проще в обучении и отладке чем DEQ
---
## Сравнение и связь между подходами
Оба подхода стремятся уйти от «однократного» слияния в сторону **итеративного согласования представлений**.
| Свойство | Progressive Fusion | DEQ-Fusion |
|---|---|---|
| Число шагов | Фиксированное, конечное | Стремится к бесконечности |
| Реализация | Явный каскад блоков | Поиск фиксированной точки |
| Сложность обучения | Низкая | Высокая |
| Глубина | Явная, ограниченная | Неявная, теоретически бесконечная |
**DEQ-Fusion — предельный случай Progressive Fusion:** число шагов прогрессивного объединения стремится к бесконечности, модель ищет устойчивое равновесное состояние вместо явного разворачивания итераций.
> Progressive Fusion = **дискретная, архитектурно развёрнутая аппроксимация** итеративного согласования
>
> DEQ-Fusion = **неявная, непрерывная по глубине форма** того же принципа через равновесие
---
## Связанные заметки
- [[Взвешенное_управление_Residual_Branch]]
- [[Metadata_Insertion]]

View File

@@ -0,0 +1,89 @@
---
tags: [диссер, metadata, geolocation, fusion, UAV, remote-sensing]
aliases: [Deep Coding, Geolocation-Aware]
---
# Вставка метаданных геолокации в модели глубокого обучения
> Источник: Madadikhaljan & Schmitt, "Geolocation-Aware Deep Coding" (PFG, 2025)
## Ключевая идея — Deep Coding
**Аналогия:** термин взят из практики разработки ПО — "жёсткое кодирование" (hardcoding). Здесь: создание **отдельных подветвей** внутри глубоких блоков модели, требующих внимания к деталям, специфичным для геолокации.
Стратегия не зависит от архитектуры — применима к UNet, ResNet, AlexNet, VGG и другим.
---
## Два шага методологии
### Шаг 1 — Анализ и разделение датасета на регионы
**Регион** — пространственное разделение глобального датасета на подмножества со схожими геолокационными характеристиками.
Что считается "сходством":
- Форма, цвет, материал, высота, внешний вид объектов
- Климатические свойства местоположения
- Типы землепользования, культур, природных опасностей
**Примеры разбивки** (зависит от задачи):
| Задача | Разумная единица региона |
|---|---|
| Классификация с/х культур | Климатические регионы |
| Обнаружение контуров зданий | Границы городов |
| Общая сегментация | Страна, континент, геохеш |
### Шаг 2 — Внедрение геолокационной осведомлённости в архитектуру
---
## Способы вставки геолокации (по уровню обработки)
### Уровень входных данных
Геолокационная информация добавляется как дополнительные каналы к входному изображению:
- **Mahara & Rishe (2023):** координаты → геохеш-коды → растровый слой, конкатенируется с картой признаков
- **Liu et al. (2018):** два растра с декартовыми координатами добавляются к входному изображению
- **Zhang et al. (2021):** координаты → векторные признаки через FC-слои → конкатенация со спектральными признаками
### Уровень промежуточных признаков (Deep Coding)
Отдельные подветви внутри глубоких блоков — информация о геолокации встраивается как структурная часть признакового пространства, а не побочный числовой вектор.
---
## Почему прямая подача координат не оптимальна
> Декартовы и широтно-долготные координаты предназначены для определения местоположения в метрическом пространстве, но **не отражают геолокационные сходства и различия** данных с разными микроклиматами.
Пример: две точки с близкими координатами могут находиться по разные стороны горного хребта — климат, растительность и материалы застройки будут принципиально разными, хотя координаты почти одинаковы.
Решение: кластеризация по геолокационному сходству + специализированные ветки сети для каждого кластера.
---
## Связь с текстовым кодированием метаданных
Deep Coding — архитектурный подход (отдельные ветки). Альтернатива — **текстовые шаблоны** как контейнер для метаданных, позволяющие не менять архитектуру:
```
"Drone aerial photo from UAV, taken from height <h> meters,
camera orientation yaw <yaw>°, pitch <pitch>°, roll <roll>°.
<time> time, season is <season>."
```
Сравнение подходов:
| Подход | Изменение архитектуры | Тип метаданных | Гибкость |
|---|---|---|---|
| Deep Coding | Да (подветки) | Геолокация, кластеры | Низкая |
| Геохеш как канал | Минимальное | Координаты | Средняя |
| Текстовые шаблоны | Нет | Любые | Высокая |
---
## Связанные заметки
- [[Взвешенное_управление_Residual_Branch]]
- [[DEQFusion_ProgressiveFusion]]

View File

@@ -0,0 +1,124 @@
---
tags: [диссер, fusion, residual, gate, adaptive, архитектура]
aliases: [Adaptive Alpha, Residual Routing]
---
# Взвешенное управление Residual Branch
## Постановка задачи
Вывод из экспериментов с Gate+Sum: **фиксированный residual пропускает шум** при выпадении текстовой модальности, нивелируя работу шлюза.
Решение: заменить фиксированный коэффициент (α=1) на **обучаемый per-sample скаляр α**, который модель учится предсказывать исходя из состояния модальностей.
```
fused = gate_output + α · residual
```
---
## Три варианта реализации
### Вариант 1 — Энтропийный сигнал ❌
Считать энтропию признакового вектора на батче и использовать как сигнал:
```
H(x) = -Σ p_i · log(p_i), где p_i = softmax(|x|)_i
Высокая H → неопределённость → отсекать residual
```
**Проблема:** энтропия плохо коррелирует с информативностью модальности в UAV-задаче. Размытое изображение даёт **низкую** энтропию (однородный сигнал) — модель ошибочно считает его надёжным.
**Статус:** отклонён по результатам измерений (Pearson r ≈ 0 между H(img_vec) и g).
---
### Вариант 2 — Learned scalar per-sample ✓ (основной)
```python
self.alpha_net = nn.Linear(proj_dim * 2, 1)
# forward:
cat_vec = torch.cat([img_vec, text_vec], dim=-1) # (B, 2D)
alpha = torch.sigmoid(self.alpha_net(cat_vec)) # (B, 1)
fused = gate_output + alpha * residual
```
При `text_vec = zeros` сеть получает другой вход и выучивает `alpha → 0`.
**Инициализация** (нейтральный старт, alpha=0.5):
```python
nn.init.zeros_(self.alpha_net.weight)
nn.init.constant_(self.alpha_net.bias, 0.0) # sigmoid(0) = 0.5
```
**Математическое обобщение:**
- Gate-Fusion (α=0) — один предельный случай
- Gate+Sum (α=1) — другой предельный случай
- Adaptive-α — непрерывная интерполяция между ними
---
### Вариант 3 — Явный флаг присутствия модальности (расширение)
```python
self.alpha_net = nn.Linear(proj_dim * 2 + 1, 1)
# forward:
text_present = (text_vec.abs().sum(dim=-1, keepdim=True) > 0).float() # (B, 1)
alpha_input = torch.cat([img_vec, text_vec, text_present], dim=-1) # (B, 2D+1)
alpha = torch.sigmoid(self.alpha_net(alpha_input))
```
Модель явно знает что текст отсутствует — не угадывает по нулям.
> **Примечание:** при архитектуре с двумя головами (fused_head + img_head) и text-dropout флаг менее критичен — механизм двух голов создаёт неявный обучающий сигнал для alpha через разницу потерь.
---
### Вариант 4 — Concat residual с projection (полная версия)
```python
self.residual_proj = nn.Linear(proj_dim * 2, proj_dim)
self.alpha_net = nn.Linear(proj_dim * 2, 1)
# forward:
cat_vec = torch.cat([img_vec, text_vec], dim=-1) # (B, 2D)
residual = self.residual_proj(cat_vec) # (B, D)
alpha = torch.sigmoid(self.alpha_net(cat_vec)) # (B, 1)
fused = gate_output + alpha * residual
```
Residual содержит информацию обеих модальностей через проекцию, а не простую сумму.
---
## Ablation таблица
| Метод | Residual | alpha | Параметры |
|---|---|---|---|
| Gate (no residual) | — | 0 | baseline |
| Gate + Sum | img + text | 1 (fixed) | 0 доп. |
| Adaptive-α v2 | img + text | learned, `2D→1` | минимум |
| Adaptive-α v3 | img + text + flag | learned, `2D+1→1` | +1 вход |
| Adaptive-α + proj | proj(cat(img,text)) | learned, `2D→1` | `2D→D` + `2D→1` |
---
## Почему LayerNorm не решает проблему масштаба
LayerNorm нормирует по признакам одного сэмпла постфактум — он не различает:
```
fused = img + text + img*g + text*(1-g) # текст присутствует
fused = img + 0 + img*g + 0 # текст = zeros
```
Смысловое содержание разное, но после LN оба вектора имеют одинаковый масштаб. Адаптивный α действует **до** LN и меняет структуру вектора — формирует осмысленную композицию до нормализации.
---
## Связанные заметки
- [[DEQFusion_ProgressiveFusion]]
- [[Metadata_Insertion]]