Реализация простейшего примера градиентного спуска на IPython

Проходя обучение на Курсере, вижу по форуму, что многим не помешали бы более подробные пояснения базовых вещей. Другими словами, не хватает самой базы, чтобы сходу понимать сжатое 4-ехминутное видео, нагруженное математическими понятиями и обозначениями (хоть и предприняты усилия сделать содержание видео доступным для всех). В таких случаях ограничиться 4 минутами просмотра видео не получится, придется буквально каждые 10-15 секунд ставить на паузу, искать пояснения в дополнительных источниках, рисовать примеры. Просмотр такого видео может растянуться на час-два, но это окупится.

Вот и в случае с темой по частной производной и градиенту, а также по методу градиентного спуска, увидел на форуме, что обучающимся тяжело дается тема. Советую для закрепления брать и прорабатывать тему в коде. Это сильно способствует усваиванию.

Ниже пример реализации на IPython градиентного спуска для простой функции одной переменной с подробными комментариями. Т.е. вообще-то тема градиента предполагает хотя бы функцию двух переменных. Но начать, считаю, надо с одной переменной. Затем, когда суть понятна, тогда уже не помешает сделать решение для двух переменных, соответственно с трехмерными графиками.

Для примера в коде ниже взята функция y = (x-5)^2
Конечно, и так видно, что минимум располагается в точке (5; 0). Но задача — найти эту точку с помощью градиентного спуска:

Также оставляю полезную ссылку по теме: Математика для искусственных нейронных сетей для новичков, часть 2 — градиентный спуск
Для тех, кто пришел с 3 недели 1 курса Курсеры, детально статью с хабра прорабатывать не надо. Это все еще должно быть впереди в рамках курса. Главное — понять математическую основу и простейшие примеры для функций одной и двух переменных.