Уменьшение потерь: стохастический градиентный спуск

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

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

Что, если бы мы могли получить правильный градиент в среднем за гораздо меньше вычислений? Случайным образом выбирая примеры из нашего набора данных, мы могли оценить (хотя и с шумом) большое среднее значение по гораздо меньшему. Стохастический градиентный спуск ( SGD ) доводит эту идею до крайности — он использует только один пример (размер пакета 1) на итерацию. При достаточном количестве итераций SGD работает, но очень шумно. Термин «стохастический» означает, что один пример, включающий каждую партию, выбирается случайным образом.

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

Чтобы упростить объяснение, мы сосредоточились на градиентном спуске для одной функции. Будьте уверены, градиентный спуск также работает с наборами объектов, содержащими несколько объектов.