Night report: objects, spiking readout, punishment
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
c2ac33767d
commit
899e0e3601
1 changed files with 81 additions and 0 deletions
81
Отчёт_объекты_ночь.md
Normal file
81
Отчёт_объекты_ночь.md
Normal file
|
|
@ -0,0 +1,81 @@
|
||||||
|
# Отчёт: кошки и собаки, ночь 14→15 октября
|
||||||
|
|
||||||
|
15 октября 2026
|
||||||
|
|
||||||
|
На свежих, ни разу не виденных картинках кошек и собак лучшая сеть, обученная STDP в KNP, даёт 67% вместо прежних 62,5%. Сеть, которая распознаёт полностью на спайках от пикселя до ответа, — 68%. Та же цепочка без спайков даёт 77%: это потолок для выбранных признаков. Главная находка ночи: у прошлой сети слабым местом были признаки, а не обучение.
|
||||||
|
|
||||||
|
## Что было не так
|
||||||
|
|
||||||
|
- **Цифры и рисунки.** Сеть колонок по сути хранит трафареты. На MNIST это работает (92%), но сдвиг цифры на 2 пикселя роняет точность до 64%, утолщение или утончение линии — до 75–79%. Поэтому нарисованные мышкой цифры распознаются плохо.
|
||||||
|
- **Кошки и собаки.** На вчерашних HOG-признаках даже простой линейный классификатор даёт около 60%, примерно как колонки STDP. Значит, в HOG просто мало информации, чтобы отличать кошку от собаки, и улучшать классификатор бесполезно.
|
||||||
|
|
||||||
|
## Что сделано
|
||||||
|
|
||||||
|
**Признаки, выученные из картинок.** Из картинок вырезаются кусочки 6×6, и метод k-средних находит в них 512–800 типичных узоров. Метки при этом не нужны. Это то же правило, что соревновательное обучение «победитель забирает всё»: узор, ближайший к кусочку, сдвигается к нему. Нейрон узора срабатывает, если кусочек похож на узор, и его спайки суммируются по четвертям картинки. Так признаки не зависят от точного положения объекта.
|
||||||
|
|
||||||
|
**Больше данных.** Докачано ещё 5000 обучающих картинок из того же источника, теперь их 9000. Плюс к каждой — зеркальная копия.
|
||||||
|
|
||||||
|
**Спайковый выход.** Один нейрон «собака минус кошка»: сработал — собака, промолчал — кошка. Веса обучены обычным кодом, а распознавание идёт целиком на целочисленных нейронах AltAI. Проверено точной пошаговой симуляцией: около 670 тысяч спайков слоя признаков на картинку.
|
||||||
|
|
||||||
|
**Наказание неверных колонок в STDP** (`KNP_COL_PUNISH`). Когда метка известна, колонки чужих классов получают отрицательный дофамин. KNP такое поддерживает: у недавно сработавших нейронов ослабевают синапсы, которые привели к срабатыванию. Наказание помогло во всех 9 парах прогонов на кошках и собаках и в среднем дало +3,8 п.п. на цифрах. Лучшая сила — 0,012–0,02. Более сильное наказание вредит.
|
||||||
|
|
||||||
|
## Результаты на свежем тесте
|
||||||
|
|
||||||
|
600 картинок (CIFAR-10, тестовые 700–999 каждого класса), которые раньше нигде не использовались. Все настройки выбраны по проверочной выборке заранее, тест просмотрен один раз.
|
||||||
|
|
||||||
|
| Сеть | Обучение | Свежий тест |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Вчерашняя: HOG + колонки STDP | STDP в KNP | 62,5% |
|
||||||
|
| Выученные признаки + колонки STDP с наказанием | STDP в KNP | **67,0%** |
|
||||||
|
| Полностью спайковая: выученные признаки + нейрон «собака − кошка» | выход обучен вне чипа | **68,3%** |
|
||||||
|
| Те же признаки, без спайков | вне чипа | 76,5% |
|
||||||
|
| Признаки с нормировкой контраста, без спайков | вне чипа | 77,2% |
|
||||||
|
|
||||||
|
Погрешность при 600 картинках около ±3,7 п.п. Прибавка к вчерашней сети на пределе погрешности, но в одну сторону у обоих спайковых вариантов.
|
||||||
|
|
||||||
|
## Где теряется точность
|
||||||
|
|
||||||
|
1. **Нормировка контраста:** −0,7 п.п. Её нельзя сделать одним нейроном, но потеря небольшая.
|
||||||
|
2. **Спайки слоя признаков и выхода:** −8 п.п. Нейрон признака за картинку срабатывает в среднем около одного раза, и тонкие различия в силе признака теряются. Понижение порога не помогло.
|
||||||
|
3. **Колонки STDP вместо обученного выхода:** колонки умеют работать только с разреженным входом (256 самых сильных признаков из 2048). На полном входе они молчат: после STDP веса в основном отрицательные, и сумма уходит в минус. Разреживание само стоит около 8 п.п.
|
||||||
|
|
||||||
|
## Цифры: те же приёмы
|
||||||
|
|
||||||
|
Признаки штрихов (8 направлений, 2 толщины, пулинг по клеткам 4×4) со спайковым выходом. Проверочная выборка MNIST:
|
||||||
|
|
||||||
|
| Сеть | Как есть | Сдвиг 2 px | Толще | Тоньше |
|
||||||
|
| --- | --- | --- | --- | --- |
|
||||||
|
| Лучшие колонки на пикселях | 91,9% | 66,6% | 80,8% | 80,2% |
|
||||||
|
| Штрихи + спайковый выход, обучение со сдвигами и поворотами | **95,1%** | **89,9%** | **91,1%** | 74,6% |
|
||||||
|
|
||||||
|
Колонки STDP на тех же признаках дают только 79–84%: признаки плотные, а колонки умеют только сравнивать с трафаретом.
|
||||||
|
|
||||||
|
Колонки по 80 нейронов на полном MNIST — 93,5% на тесте, лучший результат на пикселях (один seed). Кодирование ON/OFF «в лоб» не работает: спайков на входе становится втрое больше, и сеть молчит. Нужно нормировать поток спайков.
|
||||||
|
|
||||||
|
## Ограничения
|
||||||
|
|
||||||
|
- Слой признаков учится методом k-средних в обычном коде. Правило совпадает с соревновательным обучением на нейронах, но на модели AltAI в KNP он пока не обучался.
|
||||||
|
- Спайковая цепочка проверена в собственном точном симуляторе с правилами нейрона AltAI (порог, сброс в 0, потенциал не ниже 0, целые веса), а не в KNP. Слой признаков — 800 × 729 нейронов.
|
||||||
|
- Все тестовые картинки кошек и собак CIFAR теперь использованы. Для новой честной оценки нужен другой набор.
|
||||||
|
- Один seed на вариант.
|
||||||
|
|
||||||
|
## Что дальше
|
||||||
|
|
||||||
|
1. Обучить слой признаков в самом KNP: соревновательные нейроны AltAI с STDP на кусочках картинок.
|
||||||
|
2. Сократить потерю на спайках: дать нейрону признака больше спайков на картинку или использовать время первого спайка.
|
||||||
|
3. Научить колонки STDP работать с плотными признаками, а не только с разреженными: например, вычитать среднее перед подачей или добавить тормозящий вход.
|
||||||
|
4. Перенести спайковую цепочку признаков на страницу визуализатора.
|
||||||
|
|
||||||
|
## Файлы
|
||||||
|
|
||||||
|
| Файл | Что это |
|
||||||
|
| --- | --- |
|
||||||
|
| `objects/kmeans_features.py` | Выученные признаки (узоры 6×6, k-средние, пулинг) |
|
||||||
|
| `objects/spiking_pipeline.py` | Точная пошаговая симуляция пиксели → слой признаков → выходной нейрон |
|
||||||
|
| `objects/make_knp_features.py`, `objects/grid_v3.sh` | Входы для KNP и перебор порогов и наказания |
|
||||||
|
| `objects/final_fresh_test.py`, `objects/prepare_fresh_knp.py` | Однократная проверка на свежем тесте |
|
||||||
|
| `readout/spiking_readout.py`, `readout/robustness.py` | Спайковый выход и проверка устойчивости (цифры) |
|
||||||
|
| `features/stroke_features.py` | Признаки штрихов для цифр |
|
||||||
|
| `augment/` | Аугментация, голосование сдвигами, перезапуск прогонов |
|
||||||
|
| `examples/.../models/altai/construct_network.cpp`, `cats-dogs/source/...` | `KNP_COL_PUNISH` — наказание неверных колонок |
|
||||||
|
| `changes-2026-10-14.md` | Подробный журнал с командами и всеми цифрами |
|
||||||
Loading…
Add table
Reference in a new issue