Кевин Джеймисон, гиперпараметрическая оптимизация, плей-офф

Кевин Джеймисон провел здесь отличный семинар по Hyperband, своему алгоритму оптимизации гиперпараметров.

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

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

Более популярным выбором является размещение некоторого априорного значения функции

F: [гиперпараметрическое пространство] -> [производительность на тестовом наборе]

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

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

Кевин считает, что вы должны думать об этом как о проблеме многорукого бандита. У вас есть гиперпараметр, производительность которого вы хотите оценить. Вы можете запускать свою штуковину с этими параметрами до тех пор, пока она не начнет сходиться, и посмотреть, насколько хорошо она работает. Но это дорого. В качестве альтернативы вы можете запускать свою штуковину (1/c) раз дольше; тогда у вас есть время рассмотреть значения Nc гиперпараметров, намного лучше. Но, конечно, у вас гораздо менее точная оценка производительности: возможно, лучший исполнитель в этом первом (1/с) временном отрезке на самом деле довольно плох, и только что хорошо начал!

Так что вы делаете это вместо этого. Запустите манипулятор на время (1/c) для значений Nc. Это будет стоить вам N. Затем отбросьте все значения гиперпараметров, которые оказались ниже медианного по производительности. У вас еще осталось (1/2)Nc значений, поэтому продолжите выполнение этих процессов еще раз (1/c). Это стоит вам (1/2)N. Выбросьте все, что ниже среднего. И так далее. Когда вы дойдете до конца, вы потратите N log Nc, что совсем неплохо, но вместо того, чтобы смотреть только на N гиперпараметров, вы смотрите на Nc, где c может быть довольно большим. И вы не тратите много процессорного времени, следуя бесперспективным решениям до самого конца; скорее, вы безжалостно отбраковывали слабых исполнителей.

Но как выбрать с? Я настоял на том, чтобы Кевин назвал c гипергиперпараметром, но ему это не понравилось. Не весело! Возможно, причина, по которой Кевин сопротивлялся моему выбору, заключается в том, что он на самом деле не выбирает c; он просто выполняет свою процедуру один раз для каждого c, поскольку c находится в диапазоне 1, 2, 4, 8,…. Н; это стоит вам всего лишь еще одного бревна N.

На практике это, кажется, находит гиперпараметры так же хорошо, как и более причудливые байесовские методы, и намного быстрее. Очень круто! Вы можете представить, что делаете то же самое в более простых ситуациях (например, я хочу сделать градиентный спуск, с чего мне начать?), и Кевин говорит, что это тоже работает.

В каком-то смысле именно так работает турнир на выбывание! В мужском баскетбольном финале NCAA играют по 64 команды; команды выше медианы имеют 1–0, а команды ниже медианы, 0–1, сокращаются. Затем команды со счетом 1–0 играют еще по одной игре: команды со счетом выше медианы со счетом 2–0 остаются, команды со счетом 1–1 ниже медианы выбывают.

Что, если бы регулярный сезон работал так? Например, если бы в июне нижняя половина бейсбольной лиги высшей лиги просто перестала играть, а оставшиеся 15 команд продержались бы до августа, а затем сократились бы до 8… Расписание, конечно, было бы невозможно. Но в каком-то смысле у нас есть некоторая форма этого: к крайнему сроку обмена 31 июля команды, достаточно далекие от участия в гонке, могут просто отказаться от сезона и обменять своих лучших игроков на перспективы соперничающих команд. Конечно, плохие команды продолжают играть, но в каком-то смысле конкуренция сузилась до меньшего круга.

Нравится:

Нравится Загрузка…

Связанный

Первоначально опубликовано на сайте quomodocumque.wordpress.com 19 сентября 2016 г.