Этот очень простой градиентный спуск

Если вы начнете любой курс глубокого обучения, вы, вероятно, услышите что-то вроде:

Читателю интересно использовать цепное правило для получения градиента, но оно оказывается чрезвычайно простым… (см. примечания cs231n).

Или вот так (см. Лекцию Яна Лекуна):

Вы можете сделать backprop для всех юнитов, это очень просто. В питоне это заняло бы полстраницы. Это очень просто. Это невероятно просто. Почему людям потребовалось так много времени, чтобы это понять.

Один из лучших способов понять backprop — назначения cs231n. Есть только 2 проблемы:

  • математика обратного распространения полностью представлена ​​не полностью; например у вас нет формул для бэкпропа через софтмакс, если у вас мини батч; и формула для одного обучающего примера не имеет вывода;
  • если вы будете следовать блокноту и протестировать свою реализацию на предложенных данных, вы, вероятно, получите правильную реализацию, но не почувствуете, как она работает на простых примерах;

Я бы не рекомендовал вам заниматься выводами самостоятельно — на самом деле это может быть очень сложно. Вам лучше начать с некоторых завершенных выводов, а затем перевести их в нотацию cs231n.

Это тоже может быть не совсем просто. В этом случае вы можете следовать записной книжке ниже. Он содержит немного более подробное доказательство (но не совсем полное) вывода. Он также содержит очень простой пример для проверки вашей реализации и сравнения результатов с pytorch.