Ответ вслух Middle Нейрон и backprop обновлено

Backward для своего слоя

Вопрос

Вас просят реализовать backward для полносвязного слоя с батчем на numpy. Проговорите формулы и размерности.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Пусть X размера B×din, W размера din×dout, b длины dout, Y = XW + b размера B×dout, и сверху пришёл dY той же формы.

Что должно прозвучать в ответе

  • Вход X (B×d_in), веса W (d_in×d_out), выход Y = XW + b

  • dW = Xᵀ·dY (d_in×d_out), db = сумма dY по батчу

  • dX = dY·Wᵀ (B×d_in)

  • Сумма или среднее по батчу согласована с loss

  • Проверка численным градиентом на маленьком примере

Что могут спросить следом

  • Как изменятся формулы для ReLU после слоя?
  • Почему db это сумма по строкам?

Разбор

Пусть X размера B×d_in, W размера d_in×d_out, b длины d_out, Y = XW + b размера B×d_out, и сверху пришёл dY той же формы. Тогда dW = Xᵀ·dY: размер d_in×d_out, совпадает с W, и это сумма вкладов всех объектов батча. db = сумма dY по батчу (по строкам), потому что смещение добавляется к каждому объекту. dX = dY·Wᵀ размера B×d_in, его передаём в предыдущий слой. Если loss усреднён по батчу, деление на B уже сидит в dY. Для ReLU после слоя dY умножается на маску (вход > 0). Проверяю размерности на каждом шаге и сверяю с численным градиентом центральной разностью на маленьком примере в float64.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.