From a8ea8beca0487084c78a4150ff79817c340de520 Mon Sep 17 00:00:00 2001 From: int Date: Thu, 15 Oct 2026 07:13:02 +0300 Subject: [PATCH] Summary of findings and plan for next week's demo Co-Authored-By: Claude Opus 5.5 --- Итоги_и_план.md | 84 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 Итоги_и_план.md diff --git a/Итоги_и_план.md b/Итоги_и_план.md new file mode 100644 index 0000000..2252d17 --- /dev/null +++ b/Итоги_и_план.md @@ -0,0 +1,84 @@ +# Итоги и план: спайковые сети KNP / AltAI + +15 октября 2026 + +Цель проекта — распознавание объектов спайковой сетью, которая обучается и работает на KNP/AltAI. MNIST — быстрый полигон, всё найденное на нём переносим на объекты (кошки и собаки, CIFAR-10). + +## 1. Что получилось — главные цифры + +| Задача | Было | Стало | Как | +| --- | --- | --- | --- | +| Цифры, тест MNIST | 82,5% (пример KNP) | 92–93,5% колонки; **94,7%** сеть штрихов | разброс стартовых весов, торможение, исправление ошибки в KNP; признаки штрихов + спайковый выход | +| Цифры, сдвиг на 2 пикселя | 64–67% | **91,3%** | признаки штрихов + аугментация + обучение дофамином в KNP | +| Цифры, обучение целиком в KNP | 79,7% колонки на признаках штрихов | **94,8%** | дофамин по ошибке (`KNP_DELTA`) | +| Кошки/собаки, свежий тест (600 картинок) | 62,5% (HOG + колонки) | **67,0%** колонки в KNP; **68,3%** полностью спайковая цепочка | выученные признаки (k-средние), наказание неверных колонок | +| Кошки/собаки, потолок без спайков | ~60% (HOG) | **77,2%** | выученные признаки | + +Свежий тест у кошек и собак просмотрен один раз. Все остальные цифры по объектам — на проверочной выборке. + +## 2. Что мы узнали + +### Про сеть колонок (пример mnist-learn) +1. **Это набор трафаретов.** 92% на MNIST держатся только на выровненных цифрах: сдвиг на 2 пикселя даёт 64%, утолщение или утончение линии — 75–79%. Поэтому нарисованные в браузере цифры распознаются плохо. +2. **Колонки умеют работать только с разреженным входом.** На плотном входе (тысячи спайков на картинку) после STDP веса в основном отрицательные, сумма уходит в минус, и сеть молчит. Так провалились ON/OFF-кодирование «в лоб» и плотные признаки объектов. +3. **Колонки не учатся различать классы.** Их учат «похоже на мою цифру», но никогда не учат «не путай с соседней». Наказание неверных колонок дофамином (`KNP_COL_PUNISH`, оптимум 0,012–0,02) даёт +2…+4 п.п., но потолок остаётся: около 84% на признаках штрихов и около 65% на объектах. +4. **Размер колонки** — 20–40 нейронов. 80 нейронов на 30 000 картинках хуже, на полном MNIST — 93,5% (один seed). +5. **Ошибка в KNP:** `ModelLoader::init_channels` иногда подписывал вход картинки на канал меток, и примерно каждое 8–12-е обучение молча ломалось. Исправлено у нас, в апстрим ещё не отправлено. + +### Про признаки +6. **Для объектов узкое место — признаки, а не классификатор.** На HOG даже линейный классификатор даёт около 60%. Признаки, выученные из картинок без меток (кусочки 6×6, 400–1600 узоров, k-средние, пулинг по четвертям), — 77–78%. +7. **Признаки можно выучить нейронным правилом.** Соревнование «победитель забирает всё» по одной картинке за раз даёт не хуже пакетного метода: 75,9% против 74,9%. Нормировка контраста (её нейроном не сделать) стоит всего 0,7–1,3 п.п. +8. **Для цифр** работают признаки штрихов: 8 направлений × 2 толщины и пулинг по клеткам 4×4. Мелкий пулинг не помогает. + +### Про обучение выхода +9. **Дофамин по ошибке** работает и в симуляторе, и в KNP. Метка даёт «+», собственный спайк нейрона — «−», синапс меняется, когда по нему пришёл спайк. На цифрах в KNP это 94,8%, как у обучения вне чипа (94,9%). На объектах — 65–69% против 74% вне чипа. Разрыв пока не объяснён: диапазон весов и число проходов не помогают. +10. **Технические подводные камни.** В KNP дофамин приходит на шаг позже входных спайков (`KNP_DELTA_LAG=1` обязателен). Перед переводом в целые веса редкие входы с огромными весами нужно обрезать. Спайковый нейрон-решатель настраивается без подбора порога: смещение вычитает порог. + +### Про спайковое кодирование +11. **Полностью спайковая цепочка теряет 5–8 п.п.** против той же без спайков (77% → 72% на проверочной выборке). Нейрон признака за 10 шагов срабатывает в среднем около одного раза. 20 шагов вместо 10 дают +1,3 п.п. + +### Про методику +12. Симулятор (`viz/altai_sim.py`) совпадает с KNP в пределах 0,1–1%. Удобно подбирать пороги без переобучения. +13. Тестовые картинки кошек и собак CIFAR исчерпаны. Для новой честной цифры нужен другой набор. +14. На 1000 проверочных картинках разброс по seed ±1–2 п.п. Выводы по разнице меньше 2 п.п. без нескольких seed ненадёжны. + +## 3. Что есть в репозитории + +| Что | Где | +| --- | --- | +| Опции сети: `KNP_COL_*`, `KNP_COL_PUNISH`, `KNP_DELTA`, `KNP_W_RANGE`, `KNP_MNIST_INPUT_SIZE` | `examples/examples/mnist-learn/models/altai/construct_network.cpp` (копия для объектов — `cats-dogs/source`) | +| Бэкенд с обучением по ошибке | `readout/build_delta_cpu.py` → `~/run/delta-cpu/libknp-cpu-delta-backend.so` | +| Признаки штрихов, выученные признаки | `features/stroke_features.py`, `objects/kmeans_features.py` | +| Спайковый выход, точная симуляция цепочки, дофаминовое правило | `readout/`, `objects/spiking_pipeline.py`, `objects/dopamine_readout.py` | +| Данные объектов v3 (9000 обучающих), свежий тест | `objects/prepare_big.py`, `objects/final_fresh_test.py` | +| Визуализатор цифр (три сети, сдвиги) | `viz/app.html`, https://claude.ai/artifact/Vc1q1WCZuPY2QAHBSGtrKF | +| Отчёты и журналы | `Отчёт_*.md`, `changes-2026-10-14.md`, `changes-2026-10-15.md` | + +## 4. План на неделю: что показать + +**Предлагаемая история для показа:** «Спайковая сеть на KNP, которая сама учится на платформе. На цифрах — 95% и устойчивость к сдвигу, которой у исходного примера не было. На объектах — заметный рост против исходного подхода, а выученные признаки показывают, куда расти дальше». Показ — живое демо в браузере и одна страница с цифрами. + +### Обязательное (дни 1–4) + +| День | Задача | Результат | +| --- | --- | --- | +| 1 | **Новый честный тест для объектов.** CIFAR-10.1: новый тестовый набор того же формата, около 200 кошек и 200 собак. Прогнать зафиксированные варианты один раз. | Цифра, которую можно показывать | +| 1–2 | **Сократить разрыв в KNP на объектах (69% → 72–74%).** Шаг обучения, который уменьшается со временем; несколько нейронов на класс с голосованием; 3 seed на каждый вариант. | Лучший вариант, обученный в KNP | +| 2–3 | **Демо для объектов в браузере.** Выбрать или загрузить картинку → карты узоров → спайки → ответ «кошка/собака»; рядом сравнение со старой сетью. | Страница для показа | +| 3 | **Обновить страницу цифр:** веса выхода, обученные в KNP дофамином; подпись «обучено на платформе». | Демо 2 | +| 4 | **Сводка для показа:** одна страница или 5–6 слайдов — что было, что сделали, цифры, ограничения. Прогоны для сводки — минимум 3 seed. | Материал для встречи | + +### Желательное (если останется время) +- **Слой признаков, обученный в самом KNP:** соревновательные нейроны AltAI со STDP на кусочках картинок. Тогда «всё обучено на платформе» станет буквальным. Риск: большой объём C++ и медленная симуляция 800 × 729 нейронов. +- **Отправить в KasperskyLab/knp** исправление `ModelLoader` и описание режима `KNP_DELTA`. +- **ON/OFF-вход с нормировкой** потока спайков для колонок. + +### Риски +- **Цифры по объектам** на 400–1000 картинках шумят на ±2–4 п.п. На показе давать интервалы, а не одну цифру. +- **Полностью спайковая цепочка** проверена в нашем симуляторе, а не в KNP. Слой признаков на 583 тысячи нейронов в KNP пока не запускался. +- **Только цифры дают убедительную историю.** Для объектов честный рост — около 5 п.п. от исходного подхода (62,5% → 67–68%). + +### Что нужно решить +1. Кому показываем и в каком формате: живое демо, слайды или документ? +2. Что главное: объекты (честный, но скромный рост) или цифры (сильный результат и устойчивость)? Предлагаю цифры как «доказательство метода» и объекты как «перенос и направление». +3. Нужна ли буквальная формулировка «всё обучено на платформе»? Тогда в приоритет идёт слой признаков в KNP, а не демо объектов.