Настройка гиперпараметров — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(форматирование текста)
(замена деф. на тире)
Строка 1: Строка 1:
 
== Гиперпараметры ==
 
== Гиперпараметры ==
  
Гиперпараметры - параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра - шаг градиентного спуска, он задается перед обучением. Пример параметров - веса градиентного спуска, они изменяются и настраиваются во время обучения.
+
Гиперпараметры параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра шаг градиентного спуска, он задается перед обучением. Пример параметров веса градиентного спуска, они изменяются и настраиваются во время обучения.
  
 
Для подбора гиперпараметров необходимо разделить датасет на три части:
 
Для подбора гиперпараметров необходимо разделить датасет на три части:
Строка 29: Строка 29:
 
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.
 
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.
 
# Создание экземпляра класса кросс-валидации
 
# Создание экземпляра класса кросс-валидации
# Создание экземпляра GridSearch (из sklearn). Первый параметр - модель, второй - сетка гиперпараметров, третий - функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый - кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)
+
# Создание экземпляра GridSearch (из sklearn). Первый параметр модель, второй сетка гиперпараметров, третий функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)
 
# Запуск поиска по сетке.
 
# Запуск поиска по сетке.
  
Строка 36: Строка 36:
 
==== Sklearn Grid search: важные атрибуты ====
 
==== Sklearn Grid search: важные атрибуты ====
  
* best_estimator_  - лучшая модель
+
* best_estimator_  лучшая модель
* best_score_  - ошибка, полученная на лучшей модели.
+
* best_score_  ошибка, полученная на лучшей модели.
* best_params_  - гиперпараметры лучшей модели <br>
+
* best_params_  гиперпараметры лучшей модели <br>
  
 
[[Файл:KNeighborsClassifier_bestest.png|center|1000px]] <br>
 
[[Файл:KNeighborsClassifier_bestest.png|center|1000px]] <br>
  
* cv_results_  - результаты всех моделей. <br>
+
* cv_results_  результаты всех моделей. <br>
  
 
[[Файл:KNeighborsClassifier_results.png|center|1000px]] <br>
 
[[Файл:KNeighborsClassifier_results.png|center|1000px]] <br>
Строка 63: Строка 63:
 
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска.  
 
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска.  
  
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма - мало.
+
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма мало.
  
 
==== Реализация Random grid ====
 
==== Реализация Random grid ====
Строка 78: Строка 78:
 
==== Основная информация ====
 
==== Основная информация ====
  
SMBO (Sequential Model-Based Optimization) - методы, основанные на байесовской оптимизации
+
SMBO (Sequential Model-Based Optimization) методы, основанные на байесовской оптимизации
  
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень "дорого". Главная идея SMBO - замена целевой функции "суррогатной" функцией.
+
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень "дорого". Главная идея SMBO замена целевой функции "суррогатной" функцией.
 
   
 
   
 
На каждом шаге работы SMBO:
 
На каждом шаге работы SMBO:
Строка 112: Строка 112:
  
 
==== Основная информация ====
 
==== Основная информация ====
TPE - Tree-structured Parzen Estimator (Древовидная структура Парзена)
+
TPE Tree-structured Parzen Estimator (Древовидная структура Парзена)
  
 
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель <math> {p(y|x)} </math>. В случае TPE, используется следующая функция:
 
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель <math> {p(y|x)} </math>. В случае TPE, используется следующая функция:
Строка 118: Строка 118:
 
<math> p(y) = \frac{p(x|y) * p(y)}{p(x)} </math>
 
<math> p(y) = \frac{p(x|y) * p(y)}{p(x)} </math>
  
<math> {p(x|y)} </math> - распределение гиперпараметров.
+
<math> {p(x|y)} </math> распределение гиперпараметров.
  
 
==== Реализация ====
 
==== Реализация ====

Версия 19:41, 22 апреля 2020

Гиперпараметры

Гиперпараметры — параметры, которые не настраиваются во время обучения модели. Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.

Для подбора гиперпараметров необходимо разделить датасет на три части:

  • training set (тренировочный набор данных, для обучении модели)
  • validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)
  • test set (тестовый набор данных, для тестирования лучшей модели)

Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.

Рассмотрим модель KNeighborsClassifier из библиотеки sklearn. Все “параметры” данной модели, с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.

KNeighborsClassifier model.png

Техники настройки гиперпараметров

Grid search

Общая информация

Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.

Sklearn Grid search: использование

Пример использования Grid search из библиотеки scikit-learn:

  1. Создание экземпляра класса SGDClassifier (из sklearn)
  2. Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.
  3. Создание экземпляра класса кросс-валидации
  4. Создание экземпляра GridSearch (из sklearn). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)
  5. Запуск поиска по сетке.
KNeighborsClassifier exmpl.png

Sklearn Grid search: важные атрибуты

  • best_estimator_ — лучшая модель
  • best_score_ — ошибка, полученная на лучшей модели.
  • best_params_ — гиперпараметры лучшей модели
KNeighborsClassifier bestest.png

  • cv_results_ — результаты всех моделей.
KNeighborsClassifier results.png

  • доступ к массиву определенного параметра:
KNeighborsClassifier param array.png

Реализация Grid search в библеотеках

  • Katib
  • scikit-learn
  • Tune
  • Talos


Random grid search

Основная информация

Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска.

Когда random grid search будет гораздо полезнее, чем grid search? В ситуации, когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.

Реализация Random grid

  • hyperopt
  • Katib
  • scikit-learn
  • Tune
  • Talos


SMBO

Основная информация

SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации

Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень "дорого". Главная идея SMBO — замена целевой функции "суррогатной" функцией.

На каждом шаге работы SMBO:

  1. Строится вероятностная модель (суррогатная функция) целевой функции.
  2. Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.
  3. Подобранные гиперпараметры применяются к целевой функции.
  4. Вероятностная модель перестраивается (обновляется).
  5. Шаги 2-4 повторяются столько раз, сколько задал пользователь.


Существует четыре ключевые аспекта SMBO:

  • Сетка значений гиперпараметров (область поиска).
  • Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).
  • Вероятностная модель целевой функции (суррогатная функция).
  • Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).


Методы SMBO отличаются между собой вероятностными моделями и функциями выбора:
Популярные вероятностные модели (суррогатные функции):

  • Gaussian Processes
  • Tree Parzen Estimators (TPE)
  • Random Forest Regressions

Реализация

  • Random Forest Regressions: SMAC
  • Tree Parzen Estimators: Hyperopt
  • Gaussian Processes: Spearmint, Scikit-optimize

TPE

Основная информация

TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)

Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель [math] {p(y|x)} [/math]. В случае TPE, используется следующая функция:

[math] p(y) = \frac{p(x|y) * p(y)}{p(x)} [/math]

[math] {p(x|y)} [/math] — распределение гиперпараметров.

Реализация

  • Hyperopt

SMAC

Основная информация

SMAC использует Random Forest regression и расширяет подходы SMBO:

  • Использует дискретные и условные пространства параметров.
  • Обрабатывает негауссовский шум.
  • Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.

Реализация

  • AutoML