Изменения

Перейти к: навигация, поиск

Настройка гиперпараметров

3747 байт добавлено, 00:17, 11 января 2021
Нет описания правки
== Гиперпараметры Гиперпараметр ==
Гиперпараметры '''Гиперпараметр''' (англ. ''hyperparameter'') параметрыпараметр, которые который не настраиваются настраивается во время обучения модели. Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.
Для подбора гиперпараметров необходимо разделить датасет на три части:
* training set (тренировочный набор данных(англ. ''training set''), для обучении обучения модели) * validation set (валидационный набор данных(англ. ''validation set''), для расчета ошибки и выбора наилучшей модели)* test set (тестовый набор данных(англ. ''test set''), для тестирования лучшей выбранной модели)
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.
warm_start=False, average=False)
== Grid search Поиск по сетке ==
=== Общая информация ===
'''Поиск по сетке''' (англ. ''Grid search '') принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.
=== Поиск по сетке в Sklearn Grid search: использование ===
Пример использования <code>GridSearch</code> из библиотеки scikit-learn:
scoring='accuracy', verbose=0)
=== Поиск по сетке в Sklearn Grid search: важные атрибуты ===
* <code>best_estimator_</code> — лучшая модель
Out: array([5, 6, 7, ..., 7, 8, 9], dtype=object)
=== Реализация Grid search поиска по сетке в библеотеках библиотеках ===* scikit-learn<ref>[https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html scikit-learn]</ref>* Katib<ref>[https://github.com/kubeflow/katib Katib]</ref>* Tune<ref>[https://tidymodels.github.io/tune/articles/grid.html Tune]</ref>* Talos<ref>[https://autonomio.github.io/docs_talos/#grid-search Talos]</ref>
== Random grid search Случайный поиск по сетке ==
=== Основная информация ===
Вместо '''Случайный поиск по сетке''' (англ. ''Random Grid Search'') вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска.
Когда random grid search случайный поиск по сетке будет гораздо полезнее, чем grid searchпросто поиск по сетке? В ситуации, когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.
=== Реализация Random grid случайного поиска по сетке ===
* Ray<ref>[https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Ray]</ref>* [https://github.com/kubeflow/katib Katib]* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html scikit-learn]* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Tune]* [https://autonomio.github.io/docs_talos/#models Talos]* Hyperopt<ref>[https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]</ref>
== SMBO Последовательная оптимизация по модели ==
=== Основная информация ===
SMBO '''Последовательная оптимизация по модели''' (англ. ''Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации Когда используют SMBO? Когда '') используются когда оптимизация целевой функции будет стоить очень "дорого". Главная идея SMBO — замена целевой функции "суррогатной" функцией.
На каждом шаге работы SMBO:
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: <br>
Популярные вероятностные модели (суррогатные функции):
* Gaussian ProcessesГауссовские процессы* Tree Parzen Estimators (TPE)Древовидный парзеновский оценщик* Random Forest RegressionsРегрессия случайного леса
=== TPE Древовидный парзеновский оценщик ===
==== Основная информация ====
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена) Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель <math> {p(y|x)} </math>. В случае '''древовидного парзеновского оценщика''' (англ. ''Tree-structured Parzen Estimator, TPE''), используется следующая функция:
<math> p(y) = \frac{p(x|y) * p(y)}{p(x)} </math>
</math>
В TPE задается два различных распределения гиперпараметров: первое при значениях целевой функции меньших, чем пороговое значение. Второе - при значениях целевой функции больших, чем пороговое значение. === SMAC = Алгоритм ==== # На вход подается список пар (parameters, loss)# По заданному порогу, происходит разбиение списка на 2 части# Для каждого списка строится распределение# Возвращается значение: <math> argmin_{param} \frac{g(param)}{l(param)} </math> === Последовательная конфигурация алгоритма на основе модели ===
==== Основная информация ====
'''Последовательная конфигурация алгоритма на основе модели''' (англ. ''Sequential Model-based Algorithm Configuration, SMAC использует Random Forest regression и '') расширяет подходы SMBO:
* Использует дискретные и условные пространства параметров.
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.
Кроме того, SMAC использует переданную ему модель для формирования списка перспективных конфигураций (сочетаний) параметров. Чтобы оценить перспективность конфигурация <math> \theta </math>, SMAC строит распределение результатов модели для <math> \theta </math>.
С помощью этого распределения, а также информации, о текущей лучшей конфигурации, SMAC вычисляет ожидаемое положительное улучшение [https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf <math> EI(\theta) </math>].
После нахождения <math> EI(\theta) </math> необходимо найти конфигурацию с наибольшим значением <math> EI(\theta) </math>. Эта задача приводит к проблеме максимизация значения на всем пространстве конфигураций.
Другие методы SMBO максимизируют значения а случайной выборке из пространства конфигураций, что достаточно плохо работает в случае высокомерного пространства.
SMAC применяет немного другой подход: выполняется несколько локальных и поисков и среди них выбираются все конфигурации с максимальным <math> EI(\theta) </math>. И уже среди них производится новый поиск и выбирается лучшая конфигурация.
=== Реализация ===
* Random Forest RegressionsSMBO: [https://www.automl.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]* Tree Parzen EstimatorsTPE: [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]* Gaussian ProcessesГауссовские процессы: [https://devhub.io/repos/automl-spearmint Spearmint], [https://scikit-optimize.github.io/stable/modules/classes.html#module-skopt.optimizer Scikit-optimize]
==См. также==
*[[Автоматическое машинное обучение]]
*[[Бустинг, AdaBoost]]
*[[Кросс-валидация]]
*[[Поиск архитектуры нейронной сети]]
== Примечания ==
<references/>
== Источники ==
* [https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf Algorithms for Hyper-Parameter Optimization]
* [https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf Sequential Model-Based Optimization for General Algorithm Configuration]
* [https://www.youtube.com/watch?v=u6MG_UTwiIQ Bayesian optimization]
* [https://www.youtube.com/watch?v=PgJMLpIfIc8 Гауссовские процессы и байесовская оптимизация]
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html GridSearchCV sklearn]
 
[[Категория: Машинное обучение]] [[Категория: Автоматическое машинное обучение]]
135
правок

Навигация