Парабола, которую мы получили, — результат искусственной постановки. Мы заморозили три параметра на верных значениях, и формула MSE(w) = 7.5 · (w − 3)² вывелась ровно потому, что верный ответ был известен заранее.
На настоящих данных так не выйдет. Формулы функции потерь у нас не будет: мы не знаем, где её минимум, и даже не знаем, парабола это или что-то куда более кривое. У сети из нескольких слоёв — заведомо не парабола.
Зато одно действие доступно всегда: взять любой набор весов и посчитать по нему MSE на таблице. Это те самые три шага из первого раздела — прогноз, промах, свёртка. Больше в нашем распоряжении нет ничего.
Значит, и способ искать минимум надо собрать из одного этого действия: считать ошибку там, где стоим, и в нескольких точках по соседству. Отсюда и берётся первый способ поиска.
Hot and cold, «горячо — холодно», устроен так. Выбираем величину шага и встаём в какую-нибудь точку. Дальше на каждом шаге считаем ошибку в трёх местах: в самой точке, на шаг левее и на шаг правее. Назовём эти три числа «здесь», «слева» и «справа».
Правило простое. Если «здесь» меньше обоих соседей — мы на дне, останавливаемся. Иначе шагаем в ту сторону, где ошибка меньше.
Посмотрим первый шаг на числах. Шаг возьмём 1.0, начнём с w = 0. Значения MSE у нас уже посчитаны в таблице первого раздела: «здесь» равно 67.5, «справа» (это w = 1) равно 30, «слева» (это w = −1) равно 120. Меньше всего справа — шагаем туда, в w = 1. И так дальше:
0 → 1 → 2 → 3 → стоп
Метод нашёл минимум на сетке с шагом 1. Но проверять он умеет только заранее выбранные точки: если минимум лежит между ними, точного ответа метод не даст.
Например, при шаге 0.25 из нуля до тройки понадобится 12 шагов вместо 3. Чем меньше шаг, тем точнее поиск и тем больше вычислений.
Все три числа считаем всегда
Правило. На каждом шаге считаем все три значения — «здесь», «слева» и «справа» — и только потом решаем, куда двигаться. Сравнить одни стороны друг с другом недостаточно: без «здесь» не видно, что мы уже на дне.
Почему это так, видно в точке w = 3. Там «здесь» равно 0, «слева» (w = 2) равно 7.5, «справа» (w = 4) тоже 7.5.
Стороны одинаковы. Если смотреть только на них, выбрать не из чего, а главное — признак «мы на дне» вообще не появится. Он виден лишь при сравнении с «здесь»: именно то, что ноль меньше обеих семь-с-половиной, и означает минимум.
А без этого сравнения из точки w = 3 придётся уходить: стороны равны, но идти-то куда-то надо. Пусть влево, в w = 2. Оттуда справа лучше — возвращаемся в w = 3. Оттуда снова влево. Движение не кончится никогда:
0 → 1 → 2 → 3 → 2 → 3 → 2 → 3 → ...
Минимум при этом был пройден на третьем шаге — и не замечен.