Код Middle Нейрон и backprop обновлено

Backward для крошечной сети

Условие

Сеть: h = ReLU(W1·x + b1), ŷ = w2·h + b2 (один выход), потеря L = (ŷ - y)². Напишите backward(x, y, W1, b1, w2, b2): верните [L, dW1, db1, dw2, db2], где dW1 матрица того же размера, что W1. Все числа округлены до 4 знаков. Производная ReLU в нуле равна 0.

Примеры

backward([1, 2], 1, [[1, 0], [0, 1]], [0, 0], [1, 1], 0) // [4, [[4, 8], [4, 8]], [4, 4], [4, 8], 4]
backward([1, 1], 0, [[1, 1], [-1, -1]], [0, 0], [0.5, 2], 0) // [1, [[1, 1], [0, 0]], [1, 0], [4, 0], 2]
backward([2], 3, [[1]], [1], [1], 0) // [0, [[0]], [0], [0], 0]

Как подойти

Подсказки: 2
  1. Сохраните пре-активации z первого слоя: по ним строится маска ReLU.
  2. dW1[i][j] = dz[i]·x[j].

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.