Цифры на «Алтае»

KNP · AltAI · импульсные сети

Как сеть на «Алтае» узнаёт цифру

Нарисуйте цифру или выберите тестовую. Ниже видно всё, что с ней происходит: как обычный процессор готовит картинку, как спайки идут через сеть такт за тактом и как из них получается ответ. Расчёт точный и целочисленный, по тем же правилам, что на чипе.

Тестовая цифра «3», №381
3 Последняя версия: Сеть по тактам верно ответ ясен с такта 4 из 8
тактов 9входных спайков 142спайков нейронов 42сложений на чипе 19 604
Тестовые цифры MNIST — сеть их не видела при обучении
1

До сети: обычный процессор готовит вход

Сеть училась на цифрах определённого вида, поэтому процессор сначала приводит рисунок к нему: вписывает в квадрат 20×20, ставит центр масс в центр поля 28×28, выпрямляет наклон и уменьшает с усреднением, чтобы края стали серыми. Потом каждый пиксель ярче 32 получает момент своего единственного спайка: чем ярче, тем раньше.

1. исходная цифра MNIST
2. в квадрат 20×20, центр масс в центр
3. наклон выпрямлен
4. уменьшение с усреднением: вход сети
5. моменты спайков: яркое стреляет на такте 0, тусклое — на 7-м. Всего 142 спайков
2

Внутри сети: такт за тактом

такт 8 из 8

Такт 8, последний. Новых пикселей нет: выходы получают последние спайки скрытого слоя. Выходы получили 1 спайков скрытого слоя с прошлого такта, выстрелили «3». Лидер «3» больше не сменится — ответ ясен уже сейчас.

784 входа: пиксели, стреляющие сейчас
256 скрытых нейронов (нажмите на любой)
10 выходов: заряд до порога 8 и спайки
0
0
1
0
2
3
4
0
5
0
6
0
7
8
0
9
спайк на этом тактезаряд нейронапиксель уже выстрелил
Нейрон №112: что он ищетбирюзовый — вес «+», красный — вес «−»
что дала ему эта картинкасумма весов по закрашенным пикселям: +31

Нейрон №112: 3 спайков за картинку

Скрытый нейрон — это детектор кусочка формы. Бирюзовые пиксели заряжают его, красные — разряжают. Набрал 8 — выстрелил и отправил спайк выходам.

Связи к выходам: 0: −2 · 1: +2 · 3: +4 · 4: −1 · 5: −1 · 6: +2 · 7: +2 · 8: −2 · 9: −2

заряд по тактам: растёт, когда приходят веса; дошёл до порога — спайк (оранжевая точка), и порог вычитается. Красный пунктир — сумма за такт оказалась ниже нуля, и заряд обрезан до 0: хранить минус нейрону не разрешено настройкойпорог 80такт 0такт 8

Больше всего за «3» проголосовали

3

После сети: ответ и цена

Процессор считает спайки десяти выходных нейронов. Ответ — цифра, чей нейрон выстрелил больше всех; при равенстве — тот, кто выстрелил раньше.

0
0 сп.
1
0 сп.
2
1 сп.
3
5 сп.
4
0 сп.
5
0 сп.
6
0 сп.
7
3 сп.
8
0 сп.
9
1 сп.

Сколько работы у чипа

входных спайков142
спайков нейронов42
сложений «спайк → вес»19 604
обычная сеть 784→256→10, умножений203 264

Каждый входной спайк задевает в среднем ≈139 из 256 скрытых нейронов: у остальных вес 0, и такая связь на чипе не создаётся. Поэтому работы примерно 143 × 139 ≈ 20 тыс. сложений.

Как эта сеть обучена

Обучена на обычном компьютере (PyTorch), а не в KNP: на чип загружаются готовые целые веса. 55 000 цифр MNIST, 30 эпох (проходов по всем цифрам), около 17 минут на процессоре без видеокарты.

  1. При обучении сеть считает ровно как чип: 8 тактов, целые веса, порог 8, вычитание порога после спайка, задержка в такт между слоями.
  2. Спайк — это ступенька, у неё нет производной. При расчёте ошибки ступенька подменяется плавной «горкой» (суррогатный градиент), и сеть понимает, куда сдвигать веса.
  3. С 9-й эпохи веса округляются до допустимых на чипе 0, ±1, ±2, ±4, и сеть доучивается уже с ними. Плюс небольшой штраф за лишние спайки.
  4. Половина обучающих цифр перерисована пером постоянной толщины, как мышью, плюс сдвиги и повороты. Поэтому сеть хорошо узнаёт рисунки: 95,9% на перерисованном тесте.
  5. Лучшая эпоха выбрана на 5000 отложенных цифрах отдельным целочисленным симулятором; тест открыт один раз.