Общие веса для всего batch
Пусть X имеет shape[B,d_in], W[d_in,d_out], b[d_out]. Строка X — пример, столбец — признак. Тогда Z=XW+b и H=φ(Z) имеют shape[B,d_out]. Bias прибавляется каждой строке, веса переиспользуются. N02,N03; здесь принято строковое batch-соглашение.
Возьмём четыре XOR-входа, W=[[1,1],[1,1]], b=[0,−1]. Строки Z: [0,−1],[1,0],[1,0],[2,1]. После ReLU получим [0,0],[1,0],[1,0],[2,1]. Выход с весами [1,−2] и нулевым bias равен [0,1,1,0].
Это конструктивный пример с ручными весами. В trainer используются другая, seeded инициализация и настоящий full-batch GD. Hidden layers выполняют affine+activation, последний слой выдаёт линейный скаляр, не вероятность. Loss=.5·mean((prediction−target)²) выбрана для прозрачного XOR-опыта, а не как универсальная loss классификации.
Эксперимент. На шаге0 проверьте формы и четыре predictions. Выполните один update: изменились реальные weights, затем пересчитана loss. Смена seed лишь выбирает новую инициализацию и сбрасывает траекторию; это ещё не обучение.
Воспроизводимый сценарий. Кнопка «Проверенный сценарий XOR» задаёт width4, depth1, tanh, seed42, scale2, learning rate1 и200 updates. Пройдите до конца: predictions приблизятся к[0,1,1,0], но не станут математически точными целыми. Это результат настоящего GD на этих настройках, не гарантия для другого seed. Консервативные defaults могут за100 шагов в основном научиться среднему target — сравните обе траектории.