При создании новых алгоритов почти всегда приходится искать, какие параметры дадут лучшее качество на разных задачах. Почему-то многие коллеги для этого используют grid search (поиска по заданной сетке). Коллег я потихоньку разубеждаю спорами на бонус (~100$), а вам придётся просто поверить на слово и прочитать пост. ⌨️
Поиск по сетке – особенно плохая идея для новых алгоритмов, потому что интуиции для выбора корректной сетки на них почти нет. Картинка из старой статьи Бенджио, на мой взгляд, отлично иллюстрирует проблему поиска по сетке: мы тратим
d^k чтобы посмотреть на d значений для каждого из k параметров. При случайном поиске же для d^k поисков мы отсмотрим d^k значений для каждого из k параметров. У меня в практике было несколько случаев, когда случайный поиск находил неожиданные значения для гиперпараметров, которые никто бы не попробовал добавлять в сетку. Так, в статье про кластеризацию графов именно случайный поиск позволил мне понять, что в методе конкурентов всю работу делает регуляризатор вместо собственно целевой функции. А наша статья про бенчмаркинг графовых нейросетей GraphWorld – это вообще ода случайному поиску – там мы его используем буквально для всего. 🤴
Надо заметить, что для более ресурсозатратных поисков стоит смотреть в сторону околоэволюционных алгоритмов – Vizier от гугла или Nevergrad от меты. Последний я успешно использовал для генерации цветовых палитр с учётом особенностей цветового восприятия и дальтонизма.
Всем успешного поиска! 😏
