Мы рады сообщить о выходе Оптуны 3.2. В версию 3.2 мы включили две новые функции, направленные на расширение применимости Optuna. Кроме того, были внесены многочисленные улучшения в алгоритмы выборки и функции визуализации. Мы познакомим вас с этими обновлениями.
Краткое содержание:
- Ключевой момент 1: оптимизация с участием человека
- Highlight 2: Автоматический терминатор оптимизации (Optuna Terminator)
- Новые алгоритмы выборки
— NSGA-III для многокритериальной оптимизации
— BI-популяция CMA-ES: новая стратегия перезапуска - Новые функции визуализации
— График временной шкалы жизненного цикла испытаний.
— Ранжированный график для понимания взаимосвязи между входом и выходом. - Optuna Dashboard
– Новый пользовательский интерфейс Optuna Dashboard
– Примечание по уценке
– Официальная документация Optuna Dashboard - Другие улучшения
— Выделение модулей интеграции в виде отдельного пакета
— Начало поддержки Mac и Windows.
Ключевой момент 1: оптимизация с участием человека
Недавнее развитие генеративного ИИ привлекает все больше людей к работе над такими задачами, как создание изображений, обработка естественного языка и синтез речи (*1,2). В таких задачах механическая оценка результатов может быть сложной, и решающую роль играет человеческая оценка. До сих пор справляться с такими задачами с помощью «Оптуны» было непросто.
Однако в последней версии мы включили поддержку оптимизации с участием человека. Он обеспечивает интерактивный процесс оптимизации между пользователями и алгоритмом оптимизации. В результате это открывает новые возможности для применения Optuna в настройке Генеративного ИИ.
Ключ к оптимизации с участием человека лежит в интеграции с Панель управления Optuna. Изображения или звуки, созданные генеративным ИИ, можно сохранить как артефакты, а затем отобразить на приборной панели. Кроме того, использование виджетов позволяет пользователям вводить оценки с помощью кнопок или ползунков. Подробнее см. Учебник.
*1 ChatGPT: https://openai.com/blog/chatgpt
*2 Stable Diffusion: https://arxiv.org/abs/2112.10752
Выделение 2: Терминатор автоматической оптимизации (Терминатор Optuna)
Optuna Terminator — это новая функция, которая количественно оценивает пространство для оптимизации и автоматически останавливает процесс оптимизации. Он предназначен для облегчения бремени определения подходящего значения для количества испытаний (n_trial
) или ненужного потребления вычислительных ресурсов за счет бесконечного запуска цикла оптимизации.
Вот пример кода. Есть три ключевых момента:
- В целевой функции ошибка перекрестной проверки сообщается терминатору.
TerminatorCallback
сравнивает предполагаемое пространство для оптимизации (т. е. предполагаемую границу сожаления) с сообщенной ошибкой перекрестной проверки и при необходимости автоматически останавливает оптимизацию.- С помощью
plot_terminator_improvement
пользователи могут визуализировать взаимосвязь между потенциалом оптимизации и дисперсией значений оценки.
import optuna from optuna.terminator import report_cross_validation_scores from optuna.terminator import TerminatorCallback from optuna.visualization import plot_terminator_improvement def objective(trial): ... # 1. Calculate cross validation score and report it to Optuna Terminator. scores = cross_val_score(clf, X, y, cv=KFold(n_splits=5, shuffle=True)) report_cross_validation_scores(trial, scores) return scores.mean() study = optuna.create_study() # 2. Add TerminatorCallback to stop optimization loop. study.optimize(objective, n_trials=50, callbacks=[TerminatorCallback()]) # 3. Visualize cross validation error and room for improvement. plot_terminator_improvement(study, plot_error=True).show()
Обратите внимание, что эта функция реализована с помощью алгоритма, представленного на AutoML Conference 2022(*3), и использует вероятностную модель для оценки пространства для оптимизации, поэтому она не всегда будет работать идеально. Если вы считаете, что решение о прекращении слишком рано, Исследование Оптуны позволяет возобновить оптимизацию (см. Страницу часто задаваемых вопросов). Мы ценим ваши отзывы в GitHub Issues или Discussions, если у вас возникнут какие-либо проблемы при его использовании.
*3 Анастасия Макарова, Хуйбин Шен, Валерио Перроне, Аарон Кляйн, Жан Батист Фаддул, Андреас Краузе, Маттиас Сигер, Седрик Аршамбо, «Автоматическое завершение для оптимизации гиперпараметров», В Proc. Конференция AutoML 2022, 2022
Новые алгоритмы выборки
NSGA-III для многоцелевой оптимизации
Мы представили NSGAIIISampler
как новый многоцелевой оптимизационный сэмплер. Он реализует NSGA-III(*4), который представляет собой расширенный вариант NSGA-II, предназначенный для эффективной оптимизации даже при большой размерности целевых значений (особенно когда их четыре и более). У NSGA-II была проблема, из-за которой поиск становился смещенным к определенным регионам, когда размерность целевых значений превышала четыре. В NSGA-III алгоритм предназначен для более равномерного распределения точек. Эта функция была представлена #4436. Тех, кто заинтересован в более подробной информации об алгоритме или более практических применениях, ждем в нашем функциональном блоге, который скоро будет опубликован.
study = optuna.create_study( directions=["maximize", "maximize"], sampler=optuna.samplers.NSGAIIISampler(), )
*4 Эволюционный многокритериальный алгоритм оптимизации с использованием подхода недоминируемой сортировки на основе контрольных точек, Часть I: Решение проблем с ограничениями прямоугольника, ссылка
BI-популяция CMA-ES
Начиная с версии 3.1, в пробоотборник CMA-ES были внесены значительные улучшения. В качестве новой функции мы добавили алгоритм BI-population CMA-ES(*5), своего рода стратегию перезапуска, которая смягчает проблему попадания в локальные оптимумы. Что лучше: IPOP CMA-ES, который мы предоставляли до сих пор, или новая BI-популяция CMA-ES, зависит от проблем. Если вы боретесь с локальными оптимумами, попробуйте также BI-population CMA-ES. Подробнее см. #4464.
# To enable BI-population CMA-ES, specify "bipop" for # the restart_strategy argument of the CmaEsSampler. sampler = optuna.samplers.CmaEsSampler(restart_strategy="bipop") study = optuna.create_study(sampler=sampler)
*5 Николаус Хансен. Сравнительный анализ BI-Population CMA-ES на функциональном испытательном стенде BBOB-2009. Конференция ACM-GECCO по генетическим и эволюционным вычислениям, июль 2009 г., Монреаль, Канада.
Новые функции визуализации
График временной шкалы для пробного жизненного цикла
График временной шкалы визуализирует ход (статус, время начала и окончания) каждого испытания. На этом графике по горизонтальной оси отложено время, а испытания отложены по вертикали. Каждое испытание представлено в виде горизонтальной полосы, проведенной от начала до конца испытания. С помощью этого графика вы можете быстро получить представление об общем ходе эксперимента по оптимизации, например, правильно ли продвигается параллельная оптимизация или какие-либо испытания занимают необычно много времени.
Подобно другим функциям построения графика, все, что вам нужно сделать, это передать объект исследования в plot_timeline
. Для получения более подробной информации, пожалуйста, обратитесь к справке. Кроме того, у нас есть предстоящая запись в блоге, в которой будут объясняться детали и практические варианты использования этой функции. Следите за обновлениями!
study = optuna.create_study() study.optimize(objective, n_jobs=4, n_trials=50) optuna.visualization.plot_timeline(study).show()
Ранжируйте график, чтобы понять взаимосвязь ввода-вывода
Добавлена новая функция визуализации plot_rank
. Этот график дает ценную информацию о ландшафтах целевых функций, т. Е. Отношения между параметрами и целевыми значениями. На этом графике вертикальная и горизонтальная оси представляют значения параметров, а каждая точка представляет собой одно испытание. Очки окрашены в соответствии с их рангом.
Этот график похож на график Contour. Какой сюжет легче читать, будет зависеть от ситуации, поэтому при анализе ландшафтов целевых функций обязательно попробуйте и plot_rank
. Например, выбросы (испытания с исключительно большими объективными значениями) чрезвычайно расширяют диапазон объективных значений и могут свернуть контур вокруг действительных испытаний. С другой стороны, plot_rank
устойчив к выбросам, поскольку игнорирует сами объективные значения и фокусируется только на их порядках.
Подобно другим функциям построения графика, все, что вам нужно сделать, это передать объект исследования в plot_rank
. Для получения более подробной информации, пожалуйста, обратитесь к справке. Кроме того, следите за обновлениями для предстоящей записи в блоге о функциях, в которой будут объясняться подробности этой функции и более практические варианты использования.
study = optuna.create_study() study.optimize(objective, n_trials=500) optuna.visualization.plot_rank(study).show()
Панель инструментов Оптуны
Новый пользовательский интерфейс панели Optuna
Optuna Dashboard, веб-панель, которая позволяет вам взаимодействовать с исследованиями и визуализировать результаты оптимизации в виде графиков и таблиц, была обновлена до новой версии v0.10.0. Этот выпуск поставляется со значительно улучшенным пользовательским интерфейсом. Добавлены различные новые функции и улучшения. Пожалуйста, попробуйте!
$ pip install optuna-dashboard $ optuna-dashboard sqlite:///db.slqite3
GitHub: https://github.com/optuna/optuna-dashboard
Примечание об уценке
Optuna Dashboard теперь поддерживает заметки в формате Markdown. Вы можете оставлять заметки, подобные приведенным ниже, которые позволяют вставлять формулы, блоки кода и изображения.
import optuna from optuna_dashboard import save_note def objective(trial: optuna.Trial) -> float: x = trial.suggest_float("x", -10, 10) save_note(trial, f""" ## What is this feature for? Here you can freely take a note in *(GitHub flavored) Markdown format*. In addition, **code blocks with syntax highlights** and **formula** are also supported here, as shown below. ```python def hello(): print("Helo World") ``` $$ L = \\frac{{1}}{{2}} \\rho v^2 S C_L $$ """) return (x - 5) ** 2
Официальная документация Optuna Dashboard
Опубликована официальная документация для Optuna Dashboard. Он включает в себя не только учебные пособия по оптимизации с участием человека в цикле, но также ссылки на API и расширенные способы использования. Пожалуйста, проверьте это.
https://optuna-dashboard.readthedocs.io/en/latest/
Другие улучшения
Изолирующий модуль интеграции
Мы выделили модуль интеграции Оптуна в отдельный пакет под названием оптуна-интеграция. Начиная с версии 3.1 количество поддерживаемых библиотек увеличилось до 20, и их поддержка в пакете Optuna становилась дорогостоящей (например, сбои CI из-за обновлений во внешних библиотеках). Выделяя модуль интеграции, мы стремимся повысить скорость разработки как самой Оптуны, так и ее модуля интеграции.
Учитывая критические изменения и влияние на пользователей, разделение модуля интеграции будет осуществляться поэтапно. Начиная с версии 3.2, мы перенесли шесть интеграций: allennlp
, catalyst
, chainer
, keras
, skorch
и tensorflow
(за исключением интеграции с TensorBoard). Чтобы использовать модуль интеграции, потребуется pip install optuna-integration. Для получения дополнительной информации см. Справочник по интеграции optuna.
Вклад в работу по разделению, а также отзывы об использовании высоко ценятся. Проблема с отслеживанием — #4484.
Начало поддержки Mac и Windows
Мы начали поддержку Optuna на Mac и Windows. Хотя многие функции уже работали в предыдущих версиях, мы исправили проблемы, возникавшие в некоторых модулях, таких как Хранилище (#4457, #4458).
В прошлом мы проверяли функциональность с помощью CI в Linux. В дальнейшем мы также будем проводить проверку с помощью CI на Mac и Windows. Однако это не является обязательным требованием для слияния запросов на вытягивание, поэтому CI может дать сбой. Вклады от пользователей Mac и Windows очень приветствуются.
Что впереди
В версии 3.2 мы представили несколько экспериментальных функций, в том числе две основные функции. У них есть возможности для улучшения как функциональности, так и интерфейса, и мы планируем постоянно улучшать их в будущем.
Например, в оптимизации с участием человека в цикле большинство разработок были сделаны в основном на панели инструментов Optuna, но такие функции, как артефакты, также могут быть полезны в других сценариях оптимизации, помимо сценариев с участием человека в цикле, и могут быть полезными. реализовать в самой Оптуне. Кроме того, в «Оптуне» еще не реализованы алгоритмы оптимизации, предназначенные для оптимизации с участием человека в цикле, что остается проблемой на будущее.
В Optuna Terminator мы могли бы рассмотреть возможность повышения точности оценки возможностей для улучшения.
Мы будем рады, если вы поделитесь примерами использования или отчетами об ошибках Optuna v3.2 в блогах, социальных сетях и на GitHub.
Авторы
@Alnusjaponica, @HideakiImamura, @Ilevk, @Jendker, @Kaushik-Iyer, @amylase, @c-bata, @contramundum53, @cross32768, @eukaryo, @g-votte, @gen740, @gituser789, @harupy, @himkt , @hvy, @jrbourbeau, @keisuke-umezawa, @keisukefukuda, @knshnb, @kstoneriv3, @li-li-github, @nomuramasahir0, @not522, @nzw0301, @toshihikoyanase, @tungbq
Следующий шаг
Ознакомьтесь с примечаниями к выпуску для получения дополнительной информации. Чтобы быть в курсе последних новостей от Оптуны, следите за нами в Твиттере. Для получения обратной связи отправьте заявку или создайте запрос на вытягивание на GitHub.