GOLEM - это фреймворк искусственного интеллекта с открытым исходным кодом для оптимизации и обучения структурированных моделей на основе графов с помощью метаэвристических методов. Он основан на двух идеях:
- Метаэвристические методы имеют большой потенциал в решении сложных задач.
Фокус на метаэвристике позволяет работать с типами задач, для которых градиентные методы обучения (в частности, нейронные сети) не могут быть легко применены. Например для задач многоцелевой оптимизации или для комбинаторных задач.
- Структурированные модели важны в различных областях.
Обучение на основе графов позволяет находить решения в виде структурированных и гибридных вероятностных моделей, не говоря уже о том, что широкий спектр задач в разных предметных областях естественным образом формулируется в виде графов.
В совокупности это представляет собой подход к ИИ, который потенциально приводит к созданию структурированных, интуитивно понятных, поддающихся интерпретации методов и решений для широкого круга задач.
- Структурированные модели с одновременной оптимизацией структуры графа и его свойств (атрибутов узлов).
- Метаэвристические методы (в основном эволюционные), применимые к любой задаче с четко заданной целевой функцией.
- Многоцелевая оптимизация, которая может учитывать как качество, так и сложность.
- Оптимизация с ограничениями с поддержкой произвольных ограничений, специфичных для конкретных областей.
- Расширяемость для новых предметных областей.
- Интерпретируемость благодаря метаэвристике, структурированным моделям и инструментам визуализации.
- Воспроизводимость благодаря подробной истории оптимизации и сериализации моделей.
GOLEM потенциально применим к любой структуре задач оптимизации:
- к задачам, которые могут быть представлены в виде направленных графов;
- к задачам, которые имеют какую-то четко определенную фитнес-функцию.
Графовые модели могут представлять собой фиксированные структуры (например, физические модели, такие как ферменные конструкции) или функциональные модели, которые определяют поток данных или процесс предсказания (например, байесовские сети, которые могут быть обучены и могут отвечать на запросы).
Примеры применения GOLEM:
- Автоматическое машинное обучение (AutoML) для поиска оптимальных пайплайнов машинного обучения в фреймворке FEDOT
- Поиск структуры при помощи байесовской сети в фреймворке BAMT
- Поиск дифференциальных уравнений для физических моделей в рамках фреймворка EPDE
- Геометрический дизайн физических объектов в рамках фреймворка GEFEST
- Поиск архитектуры нейронных сетей
Поскольку GOLEM - это фреймворк общего назначения, легко представить его потенциальное применение, например, поиск конечных автоматов для алгоритмов контроля в робототехнике или оптимизация молекулярных графов для разработки лекарств и многое другое.
GOLEM можно установить с помощью pip
:
$ pip install thegolem
Следующий пример показывает поиск графа по графу-эталону с помощью метрики редакционного расстояния (Edit Distance). Оптимизатор настраивается с минимальным набором параметров и простыми одноточечными мутациями. Более подробные примеры можно найти в файлах simple_run.py, graph_search.py и tree_search.py в директории examples/synthetic_graph_evolution.
def run_graph_search(size=16, timeout=8):
# Генерируем целевой граф и целевую функцию в виде edit distance
node_types = ('a', 'b') # Available node types that can appear in graphs
target_graph = generate_labeled_graph('tree', size, node_types)
objective = Objective(partial(tree_edit_dist, target_graph))
initial_population = [generate_labeled_graph('tree', 5, node_types) for _ in range(10)]
# Укажем параметры оптимизации
requirements = GraphRequirements(timeout=timedelta(minutes=timeout))
gen_params = GraphGenerationParams(adapter=BaseNetworkxAdapter(), available_node_types=node_types)
algo_params = GPAlgorithmParameters(pop_size=30)
# Инициализируем оптимизатор и запустим оптимизацию
optimiser = EvoGraphOptimizer(objective, initial_population, requirements, gen_params, algo_params)
found_graphs = optimiser.optimise(objective)
# Визуализируем итоговый граф и график сходимости
found_graph = gen_params.adapter.restore(found_graphs[0]) # Transform back to NetworkX graph
draw_graphs_subplots(target_graph, found_graph, titles=['Target Graph', 'Found Graph'])
optimiser.history.show.fitness_line()
return found_graph
Если проследить предков найденного графа, будет видно, как к нему один за другим применяются генетические операторы (мутации, скрещивания и т.д.), приводящие, в конечном итоге, к целевому графу:
Можно также заметить, что, несмотря на общее улучшение фитнеса вдоль генеалогического пути, оптимизатор иногда жертвует локальным уменьшением редакционного расстояния некоторых графов ради поддержания разнообразия и получения таким образом наилучшего решения в конце.
Репозиторий включает в себя следующие пакеты и папки:
- Пакет
core
содержит основные классы и скрипты. - Пакет
core.adapter
отвечает за преобразование между графами из предметной области и внутренним представлением, используемым оптимизаторами. - Пакет
core.dag
содержит классы и алгоритмы для изображения и обработки графов. - Пакет
core.optimisers
содержит оптимизаторы для графов и все вспомогательные классы (например, те, которые представляют фитнес, отдельных лиц, популяции и т.д.), включая историю оптимизации. - Пакет
core.optimisers.genetic
содержит генетический (также называемый эволюционным) оптимизатор графов и операторы (мутация, отбор и так далее). - Пакет
core.utilities
содержит утилиты и структуры данных, используемые другими модулями. - Пакет
serializers
содержит классSerializer
и отвечает за сериализацию классов проекта (графики, история оптимизации и все, что с этим связано). - Пакет
visualisation
содержит классы, которые позволяют визуализировать историю оптимизации, графы и некоторые графики, полезные для анализа. - Пакет
examples
включает в себя несколько примеров использования фреймворка. - Все модульные и интеграционные тесты содержатся в каталоге
test
. - Источники документации находятся в каталоге
docs
.
Наша научно-исследовательская команда открыта для сотрудничества с другими научными коллективами, а также с партнерами из индустрии.
- Инструкция для добавления изменений находится в репозитории.
Мы благодарны контрибьютерам за их важный вклад, а участникам многочисленных конференций и семинаров - за их ценные советы и предложения.
Исследование проводится при поддержке Исследовательского центра сильного искусственного интеллекта в промышленности Университета ИТМО в рамках мероприятия программы центра: Разработка и испытания экспериментального образца библиотеки алгоритмов сильного ИИ в части базовых алгоритмов автоматического МО для структурного обучения композитных моделей ИИ, включая автоматизацию отбора признаков
- Telegram канал для решения проблем и ответов на вопросы, связанные с FEDOT
- Команда Лаборатории моделирования природных систем
- Николай Никитин, руководитель направления AutoML (nnikitin@itmo.ru)
- Новости
- Youtube канал
Если вы используете наш проект в своей работе или исследовании, мы будем признательны за цитирование.
- @article{nikitin2021automated,
- title = {Automated evolutionary approach for the design of composite machine learning pipelines}, author = {Nikolay O. Nikitin and Pavel Vychuzhanin and Mikhail Sarafanov and Iana S. Polonskaia and Ilia Revin and Irina V. Barabanova and Gleb Maximov and Anna V. Kalyuzhnaya and Alexander Boukhanovsky}, journal = {Future Generation Computer Systems}, year = {2021}, issn = {0167-739X}, doi = {https://doi.org/10.1016/j.future.2021.08.022}}
В данных публикациях описывается применение алгоритмов GOLEM и основанных на нем решений для различных прикладных задач.
- Алгоритмы поиска оптимального пайплайна машинного обучения для прогнозирования временных рядов: Sarafanov M., Pokrovskii V., Nikitin N. O. Evolutionary Automated Machine Learning for Multi-Scale Decomposition and Forecasting of Sensor Time Series //2022 IEEE Congress on Evolutionary Computation (CEC). – IEEE, 2022. – С. 01-08.
- Алгоритмы идентификации структуры уравнения для акустических данных: Hvatov A. Data-Driven Approach for the Floquet Propagator Inverse Problem Solution //ICASSP 2022-2022 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). – IEEE, 2022. – С. 3813-3817.
- Алгоритмы идентификации структуры дифференциальных уравнений в частных производных: Maslyaev M., Hvatov A. Solver-Based Fitness Function for the Data-Driven Evolutionary Discovery of Partial Differential Equations //2022 IEEE Congress on Evolutionary Computation (CEC). – IEEE, 2022. – С. 1-8.
- Алгоритмы структурного обучения сетей: Deeva I., Kalyuzhnaya A. V., Alexander V. Boukhanovsky Adaptive Learning Algorithm for Bayesian Networks Based on Kernel Mixtures Distributions//International Journal of Artificial Intelligence. – 2023. - Т.21. - №. 1. - С. 90.