Веса не умножаются на размер batch
Плотный слой содержит n_in·n_out весов и n_out biases. Число активаций после него — B·n_out, но это другой объект. Gradient по матрице весов имеет ту же форму, что и сама матрица.
Для сети 2→3→2→1 получаем 9,8,3 параметра по слоям, итого20. При batch4 выходы слоёв содержат12,8,4 числа. Фиксированная поэлементная активация сама не добавляет обучаемых параметров.
Под капотом. Двадцать float32-скаляров —80 байт без overhead. Gradient добавляет ещё20 чисел; Adam обычно хранит два moment state для каждого параметра. Кроме этого нужны activations и буферы. В JavaScript Number binary64, поэтому 20×8=160 байт — лишь идеализированный numeric payload, не измерение heap.
Debug. Для X[B,d] и W[h,d] прямое XW несогласовано. Нужны транспонирование или другое объявленное соглашение. Случайный reshape не исправляет семантику и может только скрыть ошибку. Inspector содержит все матрицы, shapes и actual count, вычисленный по массивам.