Введение в оптимизацию высокого уровня за 7 минут

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

Интуитивно это можно представить, как когда мы изучаем новый навык. Например, если вы решите заняться новым видом спорта, велика вероятность того, что в первый раз вы будете довольно плохи (без учета вундеркиндов, конечно).

Однако со временем вы будете совершенствоваться и научитесь смещать свои собственные параметры (в своем мозгу) в сторону некоего оптимального значения применительно к занятиям этим видом спорта.

Как меняются эти параметры?

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

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

Надеюсь, это имеет смысл ... но если это не так, не волнуйтесь! Давайте посмотрим на диаграмму, чтобы попытаться объяснить эту ситуацию.

Визуализация оптимизации

Возьмите диаграмму выше, наш гандикап в гольфе находится в точке A (это довольно плохо — уровень новичка), здесь мы начнем наш путь к уровню Тайгера Вудса!

В каком направлении мы должны двигаться, чтобы достичь точки B (профессиональный уровень игры в гольф)?

Налево говоришь? Верно!

Математически это включает в себя поиск градиента в точке A и движение в направлении самого крутого спуска.

"Подождите, подождите... напомните мне, что такое градиенты"

Градиент определяет самую крутую скорость изменения функции.

Поскольку этот градиент рассчитывается только локально, т. е. градиент в точке A является правильным только в точке A, поэтому мы не хотим доверять этому слишком далеко от этой точки. . Например, на рисунке точки X и Y имеют очень разные градиенты.

Поэтому на практике мы умножаем градиент на скорость обучения, которая говорит нам, как далеко двигаться к точке B. (Мы вернемся к этому позже!)

Именно этот аргумент locality является одним из столпов современных алгоритмов оптимизации градиентного спуска.

Местность и скорость обучения

Представьте, что вы ведете машину, знаете, где хотите оказаться, но не знаете дорогу (и у вас нет навигатора).

Лучшее, что вы можете сделать, — это полагаться на посты с указателями, которые направят ваш путь к цели.

Однако эти указатели действительны только в том месте, где они появляются. Например, инструкция продолжать прямо не обязательно будет верной через 3 км дальше по дороге.

Эти вывески немного похожи на наши вычисления градиента в алгоритмах оптимизации. Они содержат локальную информацию о направлении движения (или форме функции) в этой конкретной точке пути.

В зависимости от того, насколько вы осторожны (или предприимчивы), вы можете предпочесть, чтобы знаки стояли через каждые 200 метров, или вы можете с удовольствием включать их через каждые две мили. Это полностью зависит от того, на что похоже путешествие!

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

Вот как мы можем думать о показателях обучения. Если у нас есть функция, подобная той, что слева, мы можем использовать большую скорость обучения (аналогично длинной прямой дороге).

Однако, если у нас есть тот, что справа, для этого потребуется меньшая скорость обучения, поскольку мы можем в конечном итоге перелететь пункт назначения (пропустить поворот).

Также стоит упомянуть, что очень маловероятно, что мы сможем путешествовать из точки А в точку Б в одном направлении в точке А (если только мы уже не находимся очень близко). Таким образом, на практике градиентный спуск имеет тенденцию быть итеративной процедурой, когда мы получаем указания в путевых точках на пути (от А до Б становится от A до C до D до E до B).

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

Собираем все вместе…

Итак, надеюсь, у нас есть хорошее представление о том, чего пытается достичь оптимизация, и некоторые концепции, которые нам необходимо рассмотреть!

Используя приведенную выше информацию, теперь мы можем определить алгоритм градиентного спуска.

Возвращаясь к нашей предыдущей картинке, мы обозначим параметры в точке A (⍬₀) и окончательные параметры в точке B ⍬.

На первой итерации от точки A до первой путевой точки (точки C) мы можем записать уравнение, описывающее обновление параметра. Для этого нам нужно будет рассмотреть:

  • Градиент показателя эффективности L в точке A (относительно параметров)
  • Скорость обучения
  • Начальные параметры ⍬₀
  • Обновленные параметры ⍬₁

Аналогично рассчитываются следующие параметры updates, поэтому общую формулу можно записать так:

Инициализация

Итак, название обещало немного поговорить об инициализации.

Для тех из вас, кто абсолютно возмущен тем, что до сих пор об этом ничего не упоминалось… извините за это! Но, надеюсь, этот раздел вас удовлетворит!

Из всех приведенных выше описаний довольно легко понять, как инициализация вписывается в картину.

Ранее я упоминал некоторых вундеркиндов? Назовем ее Пэм. С точки зрения первого изображения в этой статье, это было бы в некоторой степени эквивалентно Пэм, имеющей некоторые начальные параметры в точке P, а не в точке A. Кстати, у Пэм есть корона и самодовольная улыбка — она знает, что она хороша!

Высокоуровневое объяснение того, что такое инициализация, — это то, с чего вы начинаете оптимизацию.

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

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

Еще одна причина, по которой важно учитывать инициализацию, связана с тем, где мы можем оказаться после оптимизации.

Рассмотрим эту новую поверхность оптимизации выше. У этого есть много различных минимумов — некоторые из которых лучше, чем другие!

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

Заключение

В этой статье мы рассмотрели некоторые высокоуровневые объяснения, связанные с градиентным спуском, оптимизацией и инициализацией. Мы визуализировали цели оптимизации и инициализации, исследовали их графически, ввели понятие скорости обучения и даже записали формулу для градиентного спуска!

Надеюсь, это помогло вам развить интуицию в основе этих важных концепций и укрепило ваше понимание того, откуда берется формула градиентного спуска!

Благодарим за чтение и следите за новостями, чтобы не пропустить новые статьи, посвященные методам оптимизации!

Как всегда, дайте мне знать о любых проблемах или комментариях!