AN-1. Предел данных: ошибка P2 против шума цели

Вопрос плана docs/plan/ann2.md §2: ошибка сети P2 (U-Net + FiLM, runs/2026-10-03_p2b) — неумение сети или шум самой цели (у несошедшихся решений цель — среднее снимков 500…1000, они колеблются)? Ответ: (б), дело в сети; цель не шумит.

Метод и границы применимости

  • Метрика — как оценка P2 (pilotnn/evaluate.py): ветер с нагревом на 60 м над рельефом (линейно между 50 и 75 м), клетки области без 5 клеток у края, ошибка = |Δ(u, v)|; ρ = ошибка / u_ref, u_ref = max(0,3; 0,15·|V|), у несошедших не меньше late_spread60_p90. Сеть — main/ckpt/best.pt, пересчитана заново (код пилота, без правки); числа таблиц 1–2 — медиана по случаям от медианы/p90 по клеткам случая (в отчёте P2 — по пулу клеток группы: конв. 0,624 / нс 0,423 на (г) против 0,711 / 0,414 здесь у уверенно сошедшихся / нс по этой метрике — порядок тот же).
  • Что сохранено в данных: у несошедших terrain-случаев только скаляр late_spread60_p90 (p90 по клеткам RMS снимков вокруг среднего); снимков нет, историй невязок в наборе нет. Поэтому 56 случаев набора terrain (45 отложенных (г), 11 обучающих; 23 нс, 33 сошедших) пересчитаны решателем (snaps.py, тот же air3d и условия, предел 1000 итераций) с сохранением всех снимков каждые 10 итераций и без остановки по сходимости (допуски 0): траектория до остановки та же, поэтому у сошедшихся видно, что будет после неё. Воспроизведение цели набора из снимков: максимум |Δ| = 0,008 м/с (округление float16) на всех 56 случаях. Время решателя — 12–22 с на случай.
  • Модель: ветер и «шум» — только внутри решателя air3d (единственная физика в плане); «шум цели» здесь — отличие цели от того, что дал бы тот же решатель при дальнейших итерациях или при микросдвиге условий. Что решатель сам неточен относительно атмосферы — вне вопроса. Выборка 56 случаев мала для хвостов; ранжирование мест не делалось.

1. Что видно по всем наборам (ошибка P2, без снимков)

Пересчёт по клеткам, out/tables.md (все наборы; n — случаев; ошибка — м/с на 60 м; ρ — медиана / p90 по клеткам, медиана по случаям):

набор / классnU10 медошибка мед. по случаямρ мед / p90разброс цели p90, мед. (нс)
(г) отложенные горы / все7203,770,5971,09 / 2,660,444
(г) / уверенно сошедшиеся5404,780,7111,12 / 2,76—
(г) / сошлись поздно (it ≥ 300)441,790,4161,32 / 2,94—
(г) / несошедшиеся1361,110,4140,87 / 1,780,444
(а) новые условия П6 / все5313,990,6161,19 / 2,840,321
обучающие (выборка 600) / все6003,730,4960,94 / 2,350,434
обучающие / уверенно сошедшиеся4694,670,5631,05 / 2,54—
обучающие / несошедшиеся971,120,3390,74 / 1,550,434

Один и тот же U10, разные классы (отложенные горы + новые условия П6; ошибка, мед.): U10 0–2 — сошедшиеся уверенно 0,295 (n = 98), нс 0,396 (n = 196); 2–4 — 0,470 (248) против 0,590 (39); 4–6 — 0,737 (273); ≥ 6 — 1,035 (313). Ошибка растёт с ветром в 3,5 раза (0,30 → 1,04) там, где цель заведомо не шумит (сошедшиеся), а несошедшие при том же U10 хуже сошедших лишь на ≈ 0,1 м/с (в ρ их спасает разброс в знаменателе). Связь ошибки с ветром среди сошедших: r = 0,78 с U10; число итераций до сходимости при фиксированном U10 даёт малую добавку (МНК: ошибка ≈ −0,56 + 0,13·U10 + 0,14·ln iters). Между местами (г) корреляция ошибки с долей несошедших случаев места: r = −0,02. У несошедших корреляция ошибки с собственным разбросом: r = −0,03 (n = 325), с U10: +0,68.

Сеть не подгоняет даже обучающие: ошибка на обучающих сошедших 0,563 против 0,711 на отложенных (80 %) при том, что цель у них детерминирована.

2. Снимки решателя на 56 случаях (out/snap_tables.md)

Все числа — по клеткам области на 60 м, затем медиана по случаям группы (м/с).

группаnU10 медошибка P2 мед.σ снимков (11, как набор) p90 клетокσ мед. клетокшум цели: среднее 11 против 51 снимков, мед. / p90отход цели от среднего 500…1000, мед. / p90отход от состояния через +100 итераций, мед.
не сошлись за 1000 (нс)231,320,3550,4260,2510,009 / 0,022——
сошлись, итераций до сходимости < 300274,460,5900000,003 / 0,0110,002
сошлись, итераций ≥ 3006≈ 10,3450,1260,0280,002 / 0,0080,023 / 0,1100,025
  • Сошедшиеся (27 из 33 — быстро, 30–100 итераций): состояние на итерации сходимости совпадает с состоянием через 10…100 итераций и со средним 500…1000 с точностью 0,003 м/с (p90 0,011). Ошибка P2 в них 0,59 — в 12 раз (медиана отношения по случаям; 10-й–90-й процентили 7–71) больше отхода цели. Доля квадрата ошибки, которую мог бы объяснить шум цели: ≈ 10⁻⁵.
  • Несошедшие: мгновенные состояния колеблются (σ клеток, медиана 0,25 м/с; p90 клеток — 0,43, это число набора), но цель — среднее 11 снимков и она стабильна: от среднего 51 снимка (все 10-итерационные снимки 500…1000) отличается на 0,009 м/с (p90 0,022). Ошибка P2 в 24 раза (медиана; 9–73) больше шума цели; доля квадрата ошибки ≈ 10⁻³. Ошибка относительно мгновенных снимков 0,45 (медиана по случаям), относительно цели 0,355: сеть ближе к среднему, чем к любому снимку, как и должно быть. Лишь у несошедших при U10 < 2 мгновенный разброс σ (0,25) сравним с ошибкой (отношение ошибка/σ: медиана 1,4, 10-й процентиль 0,8) — это граница для того, кто захочет предсказывать мгновенный снимок; цель-среднее её не несёт.
  • Обучающие и отложенные из выборки: 0,43 (n = 11) и 0,40 (n = 45) — выборка мала для этого сравнения; полное сравнение — таблица 1.

3. Чувствительность цели к сдвигу условий (12 случаев, out/perturb_tables.md)

Нижняя граница «непредсказуемости» цели для сети, которая видит те же входы: решение заново при U10 × 1,02 и при направлении +1° (путь набора terrain, цель — как в наборе).

nошибка P2 мед.сдвиг цели при U10 × 1,02: мед. / p90при +1°: мед. / p90
несошедшиеся50,3670,065 / 0,1620,055 / 0,111
сошедшиеся70,4170,084 / 0,1110,069 / 0,122

Отклик цели гладкий и пропорционален ветру (U10 6,5 м/с: 0,28 м/с на 2 %; U10 ≈ 1 м/с: 0,014–0,08); у случая 0,41 м/с ошибки сдвиг 0,02–0,03. Ошибка P2 ≥ 4 раз больше сдвига в среднем по группе и в 10–30 раз — на медленных случаях. Исключение: t_0073_001 (U10 6,5, обучающий) — ошибка 1,48, сдвиг 0,28 (5 раз). Статус «сошёлся/нет» при сдвиге менялся у 1 случая из 12 (t_0343_002: при U10 × 1,02 решение сошлось, исходное и при +1° — нет).

Вывод

Вариант (б): ошибка ≫ разброса цели. Три независимых оценки шума цели — дрейф сошедшегося состояния (0,003 м/с), шум среднего у несошедших (0,009 м/с), отклик на сдвиг условий на 2 % и 1° (0,02–0,28 м/с) — на 1–3 порядка меньше ошибки P2 (0,26–1,5 м/с). Остальные подтверждения: ошибка на сошедших случаях, где цели не шумят совсем, не меньше, чем на несошедших; ошибка растёт с ветром почти пропорционально (≈ 17–30 % от |V|), не с долей несошедших мест; сеть недообучена и на обучающих (0,56 против 0,71); P3E8 (обучение только на уверенно сошедшихся, air_nn_p3/p3/p3e8.md) не дал выигрыша на уверенных (0,707 против 0,703). Предел данных (шум цели) P2 не ограничивает; «чинить цель» (весы, отбор, иное усреднение) выигрыша не даст. Предел — архитектура, постановка или объём обучения (напомним: кривая 25→300 мест без полки, −7 % на удвоение).

Для ρ: у сошедших случаев знаменатель u_ref = max(0,3; 0,15·|V|) — допуск критерия, а не измеренный шум (его оценка 0,003 м/с); ρ ≈ 1,1 означает «ошибка ≈ допуск 0,3…0,15|V|», не «ошибка ≈ погрешность решателя». Если ρ нужен как мера заменимости, допуск стоит переопределить от физической погрешности решателя (отдельное решение).

Что не проверено

  • Выборка 56 (снимки) и 12 (сдвиг) — не весь набор; хвосты и места не оценивались; сдвиги только двух видов (U10, направление), не температура/время суток.
  • Сеть при возмущённых входах не прогонялась: сравнение — сдвиг цели против ошибки на невозмущённом входе.
  • Решатель детерминирован (одна траектория на условия); «шум» от иной инициализации/зерна не рассматривался.
  • Шум самого решателя относительно физики атмосферы (точность модели, сетка 400 м) — вне вопроса AN-1.

Воспроизведение

tools/research/ann2/README.md (команды по шагам; venv пилота; решатель под замком GPU — dp job --lock gpu). Таблицы и json — tools/research/ann2/out/ (cells_cases.json, tables.md, snap_cases.json, snap_tables.md, perturb_cases.json, perturb_tables.md); снимки — /home/greg/air_nn_data/ann2/an1/snaps (361 МБ, локально).