our_knp/changes-2026-10-15.md
int 917b94035d Delta-rule KNP results: MNIST 94.8%, cats/dogs 69.1% on validation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 05:59:50 +03:00

4.9 KiB
Raw Blame History

Журнал работы — 15 октября 2026

Ночь (продолжение): выход, обучаемый дофамином по ошибке, внутри KNP

Пользователь: «начинай, связь со мной не нужна». Цель — перенести в KNP правило, проверенное в симуляторе (выход «цель − ответ» × вход).

Код

  • examples/.../models/altai/construct_network.cpp: режим KNP_DELTA=<a>,<b>. Метка подаёт дофамин +a нейронам своего класса с задержкой 1 на каждом активном шаге; собственный спайк нейрона даёт ему дофамин −b на следующем шаге (проекция input→input, исключена из сети распознавания). Нет торможения по метке (−30000) и принуждения через гейт; у нейронов выключены Хебб (d_h=0), стабильность и порог от суммы весов. Используется с KNP_COL_SIZE=1 (один нейрон на класс).
  • .../models/altai/spike_generators.cpp: при KNP_DELTA метка отправляется на шагах 0–9 (а не на 11-м).
  • readout/build_delta_cpu.py → /home/int/run/delta-cpu/libknp-cpu-delta-backend.so: изолированная копия бэкенда; KNP_DELTA_RULE=<скорость> — у нейрона с дофамином D ≠ 0 каждый обучаемый синапс, чей входной спайк пришёл с отставанием KNP_DELTA_LAG шагов, меняет ресурс на скорость·D (независимо от спайка самого нейрона); KNP_DELTA_DEBUG печатает гистограмму отставаний. Оригинальные библиотеки не менялись.
  • Отладка: при отставании 0 обновлений не было (веса не менялись); гистограмма: отставания 1/2/3 = 406 тыс./252 тыс./120 тыс., 0 — ни одного. Дофамин приходит на шаг позже входа → KNP_DELTA_LAG=1.
  • Пробный прогон (признаки coarse, 3000 обучение, 1000 проверка, 10 нейронов): скорость 0,3 — 48,5%, 1 — 76,8%, 3 — 77,4% (колонки 200 нейронов на том же объёме: 69,8% без наказания, до 79% с наказанием).
  • cats-dogs/source: те же изменения (construct_network.cpp, spike_generators.cpp), пересобран cats_dogs; cats-dogs/run.py --backend delta.
  • Запущены: readout/delta_runs.sh (MNIST coarse, 30 000, 6 вариантов) и кошки/собаки на плотных признаках features-v3/kmeans_validation (2048 входов, 18 000 обучение, скорости 0,3/1/3).

Результаты обучения дофамином по ошибке в KNP (validation)

MNIST, признаки coarse, 30 000 обучение, 10 000 проверка, 10 выходных нейронов (KNP_COL_SIZE=1), порог 60, торможение 255:

скорость a b (штраф за свой спайк) разброс верно
1 1 1 20 85,17%
3 1 1 20 86,25%
3 1 1 0 85,86%
10 1 1 20 79,42%
3 1 0,5 20 59,79%
1 1 2 20 91,43%
3 1 2 20 93,27%
10 1 2 20 93,02%
3 1 3 20 94,31%
3 1 4 20 94,76%
3 1 6 20 94,81%

Для сравнения на тех же признаках: колонки STDP (200 нейронов) — 79,7% без наказания, 83,5% с наказанием 0,012; выход, обученный вне чипа (ridge, спайковый) — 94,9%. Симулятор на dl_r3_a1_b2_j20: 93,26% (KNP 93,27%); порог 20–160 и торможение 0/255 — 87,7–93,7%.

Кошки/собаки, плотные выученные признаки features-v3/kmeans_validation (2048 входов, K=512, без разреживания), 18 000 обучение, 1000 проверка, 2 нейрона, разброс 0:

скорость b верно
0,3 1 50,1%
1 1 54,5%
3 1 58,4%
3 2 65,8%
10 2 65,6%
10 4 65,6%
3 4 69,1%

Колонки STDP на этих же плотных признаках молчали (≈0%), на разреженных top-256 — 64–65%; ridge на этих uint8-признаках 74,2%, спайковый нейрон-разность 72,4%. Симулятор dl_cd_r3_b4: порог 30–250, торможение 0/255 — 67,6–68,8%.