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


Вопросы на подумать и что дальше


Вопросы на подумать

У каждого из них есть ответ, и учебник до него дойдёт. Попробуй додумать сам раньше, чем дочитаешь до ответа.

Как считать градиент, когда слоёв несколько? Формулу 2 · (прогноз − факт) · признак мы вывели для одного линейного слоя. У сети с двумя слоями вес первого влияет на ответ через второй, и такую цепочку надо разбирать отдельно. Это следующая глава: цепное правило и обратное распространение.

Почему для классификации мы меняем не сам градиентный спуск, а функцию выхода и функцию потерь? Что именно в спуске не зависит от того, число мы предсказываем или класс?

Почему для огромной выборки выгодно считать градиент по mini-batch, а не по всей базе? Чем при этом приходится заплатить?

Почему у настоящих сетей ландшафт не парабола? У нас минимум был один и находился точно. У многослойной сети поверхность потерь сложнее, единственного минимума нет, и одного lr на всё обучение не хватает.

Как то же самое делает библиотека? Мы писали градиент и шаг руками — это правильный порядок: понимать раньше, чем пользоваться. PyTorch разбирается отдельным модулем.

Что мы теперь умеем

  • измерять качество набора весов одним числом и объяснять, почему в MSE стоит квадрат;
  • находить наклон функции потерь двумя независимыми способами и сверять их друг с другом;
  • делать шаг против градиента, подбирать его длину и по выводу программы отличать расходимость от слишком медленной сходимости;
  • спускаться сразу по всем параметрам одной матричной записью;
  • приводить признаки к одной шкале и возвращать найденные веса в исходные единицы;
  • выбирать функцию потерь под задачу: MSE для числа, binary cross-entropy для двух классов;
  • считать градиент по mini-batch, когда выборка велика.

Этого хватает, чтобы обучить один линейный слой — и ровно на этом наши возможности заканчиваются.

Следующая проблема: слоёв несколько

Формулу 2 · (прогноз − факт) · признак мы вывели для одного слоя. Именно это условие и держит всю главу.

У сети из двух слоёв вес первого влияет на ответ не напрямую, а через второй. Промах на выходе мы знаем. А вот какая доля этого промаха приходится на конкретный вес первого слоя — уже нет: между ними стоит цепочка вычислений.

Оба наших способа тут не годятся. Формула написана про один слой. Численная разность формально сработает, но требует пересчитать всю сеть заново на каждый вес — при сотнях тысяч весов это неприемлемо дорого.

Значит, нужен способ проносить промах назад через слои, от выхода к входу. Он называется обратным распространением и опирается на цепное правило. Это следующая глава.