Мы рады сообщить о выходе Оптуны 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) или ненужного потребления вычислительных ресурсов за счет бесконечного запуска цикла оптимизации.

Вот пример кода. Есть три ключевых момента:

  1. В целевой функции ошибка перекрестной проверки сообщается терминатору.
  2. TerminatorCallback сравнивает предполагаемое пространство для оптимизации (т. е. предполагаемую границу сожаления) с сообщенной ошибкой перекрестной проверки и при необходимости автоматически останавливает оптимизацию.
  3. С помощью 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.