Градиентный спуск
Есть функция стоимости — средний штраф модели по всем обучающим примерам (откуда она берётся — в статье «Функция стоимости логистической регрессии», но для этой статьи достаточно знать: чем меньше , тем лучше модель). Обучение — это поиск таких весов (w) и сдвига (b), при которых минимальна. Вопрос этой статьи: как их искать?
Почему нельзя просто решить уравнение
В школьной алгебре минимум функции ищут так: берут производную, приравнивают к нулю, решают уравнение. Для простых функций (парабола, например) это работает за один шаг. Почему для так не сделать?
Причина — размер и форма задачи. У реальной модели весов (w) не два и не три, а тысячи или миллионы (вспомни только для одной картинки 64×64×3 из «Бинарной классификации»). Уравнение «производная равна нулю» для функции с миллионом переменных, где сама функция — не простая парабола, а составлена из сигмоиды, логарифмов и суммы по всем примерам, — аналитически не решается никаким известным способом. Прямого пути «сразу к ответу» нет.
Зато есть другой путь: если стоять в любой точке (то есть при любых текущих ), можно посчитать, в какую сторону отсюда штраф растёт, и сделать маленький шаг в противоположную сторону. Повторить это много раз — и штраф будет становиться всё меньше. Не за один шаг, а постепенно — но зато этот путь работает для функции любой сложности и любого числа переменных. Это и есть градиентный спуск (gradient descent).
Работает ли этот путь всегда одинаково надёжно — зависит от формы поверхности штрафа. Если нарисовать как рельеф (по осям — веса, по высоте — штраф), возможны два принципиально разных вида. Первый — выпуклая функция (convex): одна гладкая чаша, как суповая тарелка. У такой поверхности ровно одно дно — единственный глобальный минимум, — и куда ни поставь шарик, скатится именно туда: несколько локальных оптимумов у выпуклой функции появиться не могут в принципе. Второй вид — невыпуклая функция (non-convex): горная гряда с несколькими ямами и холмами. Здесь у шарика появляется беда: он может провалиться в мелкую яму на полпути и застрять в ней — а это локальный оптимум, далеко не самое низкое место рельефа. Настоящее дно будет совсем в другом месте, и спуск до него из неудачной стартовой точки уже не дойдёт. Хорошая новость для логистической регрессии: с кросс-энтропией её поверхность штрафа — выпуклая чаша, поэтому спуск из любой стартовой точки приводит в единственное дно (почему квадрат разницы ломает выпуклость и как кросс-энтропия её спасает — разобрано в «Функции стоимости»).
Если можешь пересказать: у J слишком много переменных и слишком сложная форма, чтобы решить уравнение прямо — вместо этого спуск много раз шагает в сторону уменьшения штрафа; выпуклая поверхность (одна чаша) гарантирует одно дно, невыпуклая (гряда) — несколько ям-ловушек, — двигаемся дальше.
Мини-квиз: верно или неверно — «выпуклая функция всегда имеет несколько локальных оптимумов»?
Ответ
Неверно — ровно наоборот. Выпуклая функция — это одна гладкая чаша: у неё ровно одно дно, единственный глобальный минимум, и несколько локальных оптимумов у неё появиться не могут. Несколько ям и ложных минимумов — это признак невыпуклой функции (горная гряда), где градиентный спуск и может застрять не в том дне. Именно поэтому для логистической регрессии выбирают кросс-энтропию: с ней поверхность штрафа выпуклая, и спуск из любой стартовой точки приводит в единственное дно (подробнее — в «Бинарной классификации» и «Функции стоимости»).
Наклон: чувствовать склон под ногами
Представь, что ты спускаешься с горы в густом тумане. Видимость нулевая — карты нет, вершины и подножия не видно. Но ты чувствуешь ступнями, в какую сторону земля уходит вниз прямо там, где стоишь. Логичная стратегия: сделать шаг в сторону, где склон уходит вниз сильнее всего, потом проверить наклон снова, и повторять — рано или поздно окажешься у подножия.
Этот «наклон под ногами» в математике называется производной (dJ/dw). Обозначение читается «насколько изменится , если чуть-чуть изменить » — то есть в какую сторону и насколько сильно растёт штраф прямо в текущей точке. Если положительная — штраф растёт при увеличении , то есть склон идёт вверх в сторону увеличения , и вниз — в сторону уменьшения. Если отрицательная — всё наоборот: штраф растёт при уменьшении , а вниз склон идёт в сторону увеличения . В коде эту производную для веса (w) обычно называют коротко dw, а для сдвига (b) — db.
Прежде чем читать дальше: если стоишь в тумане и чувствуешь, что земля уходит резко вниз влево — в какую сторону логично шагнуть?
Ответ очевиден в аналогии (влево, туда, где вниз), и с производной работает та же логика — просто выражена числом, а не ощущением в ступнях.
Если можешь пересказать: производная (dJ/dw) — это наклон штрафа в текущей точке, знак говорит, в какую сторону штраф растёт, — листай дальше.
Правило шага: минус альфа на наклон
Формула одного шага спуска:
Расшифровка по частям. Двоеточие со знаком равно (:=) означает «присвоить новое значение»: посчитать правую часть и записать результат в . Это не уравнение (где обе части равны сами по себе) — поэтому и стоит с обеих сторон: старое значение используется, чтобы получить новое.
(альфа) — скорость обучения (learning rate), число, задающее размер шага. Знакомая аналогия — ручка регулировки температуры в душе, когда стоишь с закрытыми глазами: не видишь шкалу, только чувствуешь, горячо тебе или холодно, и крутишь ручку понемногу в нужную сторону. Маленький поворот ручки — безопасно, но долго нащупывать комфортную температуру. Резкий поворот — рискуешь ошпариться, температура «перелетает» мимо нужной точки. — это ровно «насколько сильно крутим ручку» на каждом шаге. Типичные значения на практике — от 0.001 до 0.1.
— тот самый наклон из предыдущего раздела. Всё правило целиком: сдвинуть на маленький шаг (размер шага задаёт ) в сторону, противоположную наклону.
Если можешь пересказать: w := w − α · dJ/dw — из старого веса вычитаем шаг размера α в направлении наклона, — листай дальше.
Почему минус, а не плюс
Это не случайная деталь формулы — это её суть. Производная показывает, в какую сторону штраф растёт. Чтобы штраф уменьшать, нужно идти в противоположную сторону — отсюда минус.
Проверим на конкретных числах, что происходит при разных знаках наклона. Возьмём простую чашу , у которой наклон — (производная ).
Случай 1: (справа от дна чаши, дно — в нуле). Наклон: — положительный, штраф растёт при увеличении , значит вниз — в сторону уменьшения . При : . Вес уменьшился, придвинулся к дну (к нулю) — правильное направление.
Случай 2: (слева от дна). Наклон: — отрицательный, штраф растёт при уменьшении , значит вниз — в сторону увеличения . При : . Вес увеличился, тоже придвинулся к дну — и снова правильное направление, потому что минус перед автоматически развернул шаг в нужную сторону при смене знака наклона.
Если бы формула была с плюсом (), оба случая сработали бы в противоположную сторону — вес убегал бы от дна чаши всё дальше, а штраф только рос.
Мини-квиз: наклон в некоторой точке, . Вес увеличится или уменьшится после шага?
Ответ
Увеличится. — минус на минус даёт плюс, вес растёт на 2. Отрицательный наклон означает, что штраф уменьшается при увеличении веса, поэтому спуск и увеличивает его.
Если можешь пересказать: минус в формуле разворачивает шаг против направления роста штрафа, поэтому одна и та же формула верно ведёт к дну и справа, и слева от него, — листай дальше.
Числовой пример: сходимость и расхождение
Продолжим ту же одномерную чашу (наклон ), стартуя с , и посмотрим, что даёт разный выбор .
При разумном шаге : наклон в точке равен , следующий вес . Дальше так же: — веса (w) плавно сходятся к нулю (дну чаши).
При слишком большом шаге та же чаша: наклон в точке тот же, , но шаг — перелетаем через дно на другую сторону. Дальше только хуже: — числа не уменьшаются, а раскачиваются всё сильнее. Как с душем: слишком резкий поворот ручки — и вместо комфортной температуры получаем то ледяную, то кипящую воду, с каждым разом хуже.

Твоя очередь: возьми , наклон при — как в примере выше. Посчитай сам, каким получится следующий .
Ответ
.
Прежде чем читать дальше ещё раз: при слишком большом шаге вес просто медленнее подходит ко дну чаши, или перелетает через него на другую сторону? Сформулируй ответ сам, а потом сверься с абзацем выше.
Ответ
Перелетает — при шаг больше размера самого наклона до дна, поэтому проскакивает ноль и оказывается по другую сторону чаши (), а не просто медленнее приближается.
Практический вывод: если после нескольких шагов штраф не падает, а растёт или скачет — первое, что стоит проверить, это не веса (w), а саму .
Если можешь пересказать: маленькая α сходится ко дну плавно, слишком большая — перелетает через дно и расходится, — листай дальше.
И вес, и сдвиг — по одной схеме
Всё, что было сказано про вес , буквально в тех же словах применяется и к сдвигу :
Обозначения зеркальные: (в коде — db) — наклон штрафа по (b), тот же смысл, что и , только для другого параметра. Причина, по которой формула для выглядит настолько же просто, как для , — обе они выведены из одной и той же идеи «сдвинуться против направления роста штрафа», просто применённой к разным числам, от которых зависит . В реальной модели с тысячами весов (w) каждый вес и сдвиг обновляются этим же правилом одновременно, на одном и том же шаге.
Если можешь пересказать: b обновляется той же формулой, что и w, просто со своим наклоном dJ/db, — листай дальше.
Что дальше
Мы разобрали идею спуска целиком: наклон (dJ/dw) показывает направление роста штрафа, шаг делается в противоположную сторону, а размер шага регулирует (α). Осталось применить это к настоящей модели — логистической регрессии, где сам наклон раскладывается через ещё один важный сигнал у выхода модели, который получил собственное имя — . Как он выводится и что означает — тема следующих статей, начиная с «Логистической регрессии — градиентного спуска».