our_knp/Отчёт_размер_колонки_и_одежда.md
int 8f43927575 Initial import: KNP experiments (examples, viz, cats-dogs, reports)
examples/ is based on KasperskyLab/knp at 55470ed6 with local changes
to the mnist-learn altai/blifat models, cuda-backend CMake and model_loader.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 18:17:15 +03:00

5.2 KiB
Raw Blame History

Отчёт: размер колонки, Fashion-MNIST и визуализатор

Oct 13, 2026

Колонки из 20 нейронов уже дают максимум: 40 нейронов точнее не делают. На Fashion-MNIST сеть упирается примерно в 55%. Причина та же, что у самых частых ошибок на цифрах: сеть не замечает, чего на картинке не хватает. Сделано приложение, где работу сети видно по шагам.

Размер колонки (MNIST, обучение 30 000 картинок)

Настройки как в лучшем варианте прошлого отчёта: KNP_COL_JITTER=20, KNP_MNIST_THR=60, KNP_MNIST_ADD_THR_SCALE=0, KNP_MNIST_INFER_INHIB=255. Тест — 10 000 картинок, результаты из KNP.

Нейронов в колонке seed 42 seed 1 В среднем
5 88,7% 89,4% 89,0%
10 89,5% 88,9% 89,2%
20 92,3% 91,5% 91,9%
40 92,1% 91,7% 91,9%
80 считается считается

Не досчитались к концу дня: размер 80 на 30 000 картинок и размеры 40 и 80 на полном MNIST (папки ~/run/exp/sz*). Если WSL закрывался, их нужно запустить заново.

Fashion-MNIST

Это фотографии одежды того же формата 28×28, 10 классов. Цифры ниже — валидация (обучающие картинки 50 000–59 999), порог подобран в симуляторе.

Обучение Исходная сеть Колонки
3 000 57,6% 55,0%
30 000 40,5% 55,3%
  • Классы «пальто» (4) и «рубашка» (6) не получают ни одного ответа, почти всё забирает «пуловер» (2).
  • Даже при пороге 5 около трети картинок остаётся без ответа: сумма весов нужной колонки на них отрицательная.
  • Исходная сеть от длинного обучения деградирует, колонки держатся.

Главная слабость сети

Спайки шлют только закрашенные пиксели, пустой пиксель молчит. Нейрон не получает сигнала «здесь должна быть линия, а её нет», поэтому выигрывает колонка с более широкой фигурой. Самые частые ошибки на тесте MNIST подтверждают это:

Верно → ответ Раз из 10 000
4 → 9 63
7 → 9 57
9 → 4 31
8 → 9 30
3 → 9 25

Вторая слабость — чувствительность к толщине линии. Если утолщить цифры теста на 1 пиксель, точность колонок падает с 90% до 67%, на 2 пикселя — до 8%.

Что не помогло (проверено в симуляторе)

Идея Результат
Точнее квантовать веса (сейчас фактически от −6 до +2) без изменений: 3 бит на вес хватает
Порог каждого нейрона пропорционален сумме его положительных весов без изменений

Визуализатор

  • Страница: https://claude.ai/artifact/6Ze9kBxeu5bxWW5zLh1Qro (закреплена в боковой панели claude.ai), локальная копия — C:\knp\viz\altai_viz.html.
  • Показывает спайки растра по шагам, заряд всех входных нейронов, голоса колонок, карты весов и таблицу ошибок. Можно нарисовать свою цифру.
  • Исходники в C:\knp\viz (git): altai_sim.py — симулятор (с KNP расходится на 0,1%), export_data.py — сборка страницы, app.html — шаблон.
  • Запуск симулятора: ~/anvenv/bin/python /mnt/c/knp/viz/altai_sim.py <папка прогона> <images.bin> <labels.target> --inhib 255 --thr 40,60.

Следующие шаги

  • ON/OFF-кодирование: добавить 784 входа, которые спайкают на пустых пикселях. Это должно бить по ошибкам 4→9, 7→9 и по «пуловеру».
  • Досчитать размер 80 и полный MNIST для размеров 40 и 80.
  • В приложении показывать, почему сеть ответила так: трафарет победителя рядом с картинкой.
  • Сообщить разработчикам KNP об ошибке в ModelLoader::init_channels.
  • Для статьи: сравнение с опубликованными спайковыми сетями с локальным обучением.