В моем последнем посте обсуждалась концепция потерь при построении модели машинного обучения. Подводя итог предыдущему посту (чтобы мы могли перейти к исправлению ошибок, черт возьми), подумайте о модели как о линии на графике множества точек данных. Расстояние между точками данных и линией = убыток, что плохо. Цель этой линии — поразить как можно больше точек данных. Итак, как мы можем позволить нашим моделям точно предсказывать и минимизировать потери?

Что ж… это не так просто или прямолинейно, но давайте начнем с концепции градиентного спуска.

Не волнуйтесь. Возьмите фразу как два значения, которые вы, вероятно, знаете. Градиент, как шаг за шагом к чему-то от чего-то, и спуск, означающий спуск.

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

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

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

Шаги градиента — это небольшие шаги в направлении, которое минимизирует потери. Общая стратегия, обсуждаемая здесь, — это градиентный спуск. Рассмотрим график ниже:

Прохладный. Это должно выглядеть знакомо, однако одно изменение… линия — это кривая. Это связано с тем, что на этом графике фактически представлены потери (по оси x) и значение веса, присвоенное тестируемому измерению. Как правило, потеря выглядит как кривая (или, чаще, серия взлетов и падений, как и жизнь). Взлеты и падения аспекта жизни будут важны в более позднем обсуждении, так что имейте это в виду. Однако пока мы будем иметь дело только с этой кривой. Теперь рассмотрим следующий шаг:

Ладно, не так уж и плохо. Теперь, как мы добрались до конечной точки? Если вы вспомните свою алгебру… нижеприведенное выглядит знакомым?

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

К чему мы движемся? Если кривая представляет убыток, то, конечно, нам нужна самая нижняя точка на кривой убытка, потому что убыток — это плохо, и мы хотим, чтобы убытка не было:

Скорость обучения определяет, насколько велики эти шаги градиента. Если они слишком велики, вы рискуете превысить точку минимального убытка. Если скорость обучения слишком низкая, а шаги маленькие, то обучение будет длиться вечно. Золотая середина находится где-то посередине. Посетите детскую площадку, чтобы поэкспериментировать с этой концепцией, если вам трудно понять, — запутайтесь со скоростью обучения (переключайтесь вверх и вниз), чтобы увидеть, как быстро модель достигает сходимости или наименьшего уровня потерь.

И последнее, но не менее важное… не обижайтесь на меня… давайте рассмотрим два способа оптимизации.

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

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

Мини-пакет SGD использует где-то от 10 до 1000 примеров, выбранных случайным образом. Здесь есть очевидные компромиссы (время, деньги, ресурсы, точность и т. д.).

А теперь… вы вообще знаете, как оптимизировать сокращение потерь! Следите за следующим постом.