7.12. Прореживание
Прореживание
(dropout) (Srivastava et al., 2014) – это вычислительно недорогой, но
мощный метод регуляризации широкого семейства моделей. В первом приближении
прореживание можно представлять себе как метод, посредством которого баггинг ста-
новится практичным для ансамблей, состоящих из очень большого числа больших
нейронных сетей. Баггинг подразумевает обучение нескольких моделей и пропускание
через них каждого тестового примера. Если в качестве модели используется большая
нейронная сеть, то это непрактично, потому что обучение и оценка примера обходятся
дорого с точки зрения времени и памяти. Обычно используются ансамбли, содержащие
от пяти до десяти сетей, – в работе Szegedy et al. (2014a), выигравшей конкурс ILSVRC,
использовалось шесть – а если ансамбль больше, то работать с ним очень скоро стано-
вится неудобно. Прореживание предлагает дешевую аппроксимацию обучения и вы-
числения баггингового ансамбля экспоненциально большого числа нейронных сетей.
Точнее говоря, в процессе прореживания обучается ансамбль, состоящий из под-
сетей, получаемых удалением невыходных блоков из базовой сети, как показано на
рис. 7.6. В большинстве современных нейронных сетей, основанных на последова-
тельности аффинных преобразований и нелинейностей, можно эффективно удалить
блок, умножив его выход на 0. Эта процедура требует небольшой модификации та-
ких моделей, как сеть радиально-базисных функций, которые принимают разность
между состоянием блока и некоторым опорным значением. Ниже мы для простоты
опишем алгоритм прореживания в терминах умножения на 0, но путем тривиальной
модификации его можно приспособить к операциям удаления блока из сети.
Напомним, что для обучения методом баггинга мы определяем
k
различных мо-
делей, строим
k
различных наборов данных путем выборки с возвращением из
обучаю щего набора, а затем обучаем
i
-ю модель на
i
-м наборе. Цель прореживания –
аппроксимировать этот процесс на экспоненциально большом числе нейронных се-
тей. Точнее говоря, для обучения методом прореживания мы используем алгоритм,
основанный на мини-пакетах, который делает небольшие шаги, например алгоритм
стохастического градиентного спуска. При загрузке каждого примера в мини-пакет
мы случайным образом генерируем битовую маску, применяемую ко всем входным
и скрытым блокам сети. Элемент маски для каждого блока выбирается независимо
от всех остальных. Вероятность включить в маску значение 1 (означающее, что соот-
ветствующий блок включается) – гиперпараметр, фиксируемый до начала обучения,
а не функция текущего значения параметров модели или входного примера. Обычно
входной блок включается с вероятностью 0.8, а скрытый – с вероятностью 0.5. За-
тем, как обычно, производятся прямое распространение, обратное распространение
и обновление. На рис. 7.7 показано, как работает прямое распространение с проре-
живанием.
Прореживание
Do'stlaringiz bilan baham: |