Этот очень простой градиентный спуск
Если вы начнете любой курс глубокого обучения, вы, вероятно, услышите что-то вроде:
Читателю интересно использовать цепное правило для получения градиента, но оно оказывается чрезвычайно простым… (см. примечания cs231n).
Или вот так (см. Лекцию Яна Лекуна):
Вы можете сделать backprop для всех юнитов, это очень просто. В питоне это заняло бы полстраницы. Это очень просто. Это невероятно просто. Почему людям потребовалось так много времени, чтобы это понять.
Один из лучших способов понять backprop — назначения cs231n. Есть только 2 проблемы:
- математика обратного распространения полностью представлена не полностью; например у вас нет формул для бэкпропа через софтмакс, если у вас мини батч; и формула для одного обучающего примера не имеет вывода;
- если вы будете следовать блокноту и протестировать свою реализацию на предложенных данных, вы, вероятно, получите правильную реализацию, но не почувствуете, как она работает на простых примерах;
Я бы не рекомендовал вам заниматься выводами самостоятельно — на самом деле это может быть очень сложно. Вам лучше начать с некоторых завершенных выводов, а затем перевести их в нотацию cs231n.
Это тоже может быть не совсем просто. В этом случае вы можете следовать записной книжке ниже. Он содержит немного более подробное доказательство (но не совсем полное) вывода. Он также содержит очень простой пример для проверки вашей реализации и сравнения результатов с pytorch
.