Модуль: Градиентный спуск. Основы


Откуда берутся веса


В прошлой главе время доставки считалось по готовым весам:

время = 3 · км + 1.5 · светофоры − 0.5 · курьеры + 8

Откуда взялись числа 3, 1.5, −0.5 и 8, сказано не было. В работе их никто не выдаёт: есть только база выполненных заказов — что было в заказе и сколько он на самом деле ехал.

Цель главы — научиться доставать веса из такой базы.

Что это за задача

Переведём цель на язык программиста.

Дано: таблица выполненных заказов. В каждой строке признаки заказа — километры, светофоры, свободные курьеры — и фактическое время, которое он ехал.

Требуется: подобрать четыре числа так, чтобы прогноз по ним расходился с фактом как можно меньше. Не на одном заказе, а на всех сразу.

В такой формулировке задача сразу распадается на два вопроса, и оба придётся решить, прежде чем садиться писать программу.

  1. Чем измерить расхождение? Пока нет числа, которое показывает, насколько прогноз разошёлся с фактом на всей таблице, слова «как можно меньше» ничего не значат: непонятно, какой из двух наборов весов лучше.
  2. Как найти веса, при которых это число наименьшее? Перепробовать все наборы нельзя: их бесконечно много, а вслепую тыкать наугад можно очень долго.

С первого вопроса и начнём: он проще и без него второй не имеет смысла. Ответ на второй называется градиентным спуском — ему отведена вся остальная часть главы. И да, в конце мы такую программу действительно напишем, и она найдёт все четыре числа сама.