Современные нейросети часто воспринимаются как черная магия. Вы закидываете в черный ящик датасет, ждете пару часов, и вот уже модель пишет за вас код, генерирует картины и безошибочно отличает собаку от выпечки. Но под капотом нет никаких заклинаний. Вся эта вычислительная мощь держится на одном элегантном алгоритме, основы которого были заложены еще в 1970-х годах — обратном распространении ошибки (Backpropagation).
Сейчас порог входа в машинное обучение низок как никогда. Чтобы заставить сеть учиться, достаточно написать
loss.backward() в PyTorch или вызвать model.fit() в Keras. Фреймворки берут всю математическую рутину на себя. Это чертовски удобно, но порождает проблему: мы получаем разработчиков, которые умеют собирать архитектуры из готовых блоков-лего, но впадают в ступор, если спросить их, что именно происходит при вызове backward(). Как сеть понимает, какой конкретно вес в десятом слое виноват в том, что на выходе получилась ерунда?В этой статье мы снимем покров тайны. Мы разберем backprop на пальцах и понятных аналогиях, сдуем пыль со школьного учебника алгебры (не пугайтесь, нам понадобится только база) и напишем этот алгоритм с полного нуля на чистом Python.
https://habr.com/ru/articles/1031986/
Алгоритмы и Структуры данных