# nntrainer: что уже известно и что готовим как новый материал

Проверка 13 сентября 2026 года. Текущий публичный `main`:
`a7ea056e79ab8e14447ea305c1b634e233343258`. GitHub и действующий каталог GERO
проверены заново. Старые численные исследования в этом запуске не повторялись;
для нового `PowLayer` выполнена отдельная чистая сборка.

Основной новый материал — **нулевая степень в PowLayer даёт постоянный forward,
но NaN в backward**. Проверяется соответствие производной собственному forward
библиотеки. При `x=0`, `exponent=0`, входящем градиенте `3` получены `y=1`,
`dx=NaN`; центральная разность реального C++ forward равна `0`.

| Свежая проверка | Исходная версия | Локальное исправление |
|---|---:|---:|
| 385 численных случаев | 180 расхождений | 0 расхождений |
| 25 тестов Pow, включая три новых | 23 прошли | 25 прошли |

Три отдельных процесса дали одинаковые результаты. Возврат исходной формулы
восстановил те же ошибки; после возвращения исправления проверки снова прошли.
Это один механизм дефекта, а не 180 новых ошибок.

## Ранее подтверждённые результаты

| Семейство | Математическое расхождение | Найденная upstream-запись | Публикация |
|---|---|---|---|
| UINT8 quantization | неверный zero point при автоматическом выборе параметров | [#4324](https://github.com/nntrainer/nntrainer/issues/4324), [PR #4331](https://github.com/nntrainer/nntrainer/pull/4331), открыты; PR не слит | [GERO](https://www.gero.uz/research/articles/nntrainer-uint8-affine-zero-point.html) |
| UINT4 dequantization | проверяется тип выходного тензора вместо входного; корректный вызов отклоняется | [#4325](https://github.com/nntrainer/nntrainer/issues/4325), открыт | [Общий разбор](https://www.gero.uz/research/articles/numerical-contracts-swift-numerics-nntrainer.html) |
| Четыре loss-слоя | отсутствует требуемое умножение производной на loss_scale | [#4329](https://github.com/nntrainer/nntrainer/issues/4329), открыт | [GERO](https://www.gero.uz/research/articles/nntrainer-loss-scale-contract.html) |
| KLD | backward меняет целевое распределение; следующий вызов меняет знак градиента | [#4328](https://github.com/nntrainer/nntrainer/issues/4328), открыт | [GERO](https://www.gero.uz/research/articles/kld-backward-state-mutation.html) |
| Пять унарных производных | теряются множители цепного правила; у cosine также знак | [#4326](https://github.com/nntrainer/nntrainer/issues/4326), открыт | [Общий разбор](https://www.gero.uz/research/articles/mathematical-invariants-across-ai-stacks.html) |
| ReduceMean | отсутствующий axis вызывает исключение вместо редукции небатчевых осей | [#4332](https://github.com/nntrainer/nntrainer/issues/4332), открыт | [GERO](https://www.gero.uz/research/articles/nntrainer-reduce-mean-default-axis.html) |
| Causal attention | ранний выход зависит от будущих значений в проверенных сценариях | [#4333](https://github.com/nntrainer/nntrainer/issues/4333), открыт | [GERO](https://www.gero.uz/research/articles/when-causal-attention-sees-the-future.html) |
| Softplus | конечный вход даёт бесконечность либо теряет представимый малый результат | отдельная ссылка в проверенном реестре не установлена | [GERO](https://www.gero.uz/research/articles/finite-inputs-nonfinite-activations-mlx-nntrainer.html) |
| Sigmoid CE, малые хвосты | loss и gradient обнуляются при представимом ненулевом результате | отдельная ссылка в проверенном реестре не установлена | [GERO](https://www.gero.uz/research/articles/when-small-losses-and-gradients-disappear.html) |
| LayerNorm | градиент по входу не учитывает affine gamma | отдельная ссылка в проверенном реестре не установлена | [GERO](https://www.gero.uz/research/articles/cosine-and-layernorm-contract-failures.html) |
| Average pooling | backward пропускает окна при несимметричном SAME padding | отдельная ссылка в проверенном реестре не установлена | [GERO](https://www.gero.uz/research/articles/nntrainer-average-pool-asymmetric-padding.html) |
| Многовходовый Dropout | производные разных выходов записываются во вход 0 | отдельная ссылка в проверенном реестре не установлена | [GERO](https://www.gero.uz/research/articles/nntrainer-dropout-gradient-routing.html) |

Это группировка механизмов, а не подсчёт новых ошибок. Один обзор может
содержать несколько семейств, а один дефект — фигурировать в нескольких
материалах. Отсутствие ссылки в таблице не означает, что других публичных
сообщений не существует. Восемь найденных записей автора проверены через
GitHub; общий корпус — 12 ранее опубликованных связанных статей/обзоров.

## Редакционное решение

В самостоятельную новую публикацию выносится только PowLayer. Ранее
опубликованные результаты используются как контекст и ссылки. Нулевые и
очень малые входы объединяются в одну причину: исходная формула вычисляет
`x^-1` даже при нулевом коэффициенте.

Принятое библиотекой поведение `pow(x,0)=1` даёт постоянный forward в
проверенной области, включая ноль. Его производная должна быть нулевой.
Это позволяет обосновать вывод без спора о соглашениях других библиотек.

Новая проверка не устанавливает влияние на телефоны Samsung, коммерческие
модели или качество обучения. Подтверждён результат открытой C++-библиотеки
на CPU FP32 macOS arm64. Окончательные измерения до/после и ограничения —
в [REPORT_EN.md](REPORT_EN.md); исходные результаты — в `evidence/`.

Материал подготовлен для рассмотрения. Новые статьи, социальные посты и
upstream-сообщения в рамках этого задания не публиковались.
