30 мая 2023 года была на https://arxiv.org/abs/2305.19801 была опубликована статья Predicting protein stability changes under multiple amino acid substitutions using equivariant graph neural networks. Но мне GNN интересны по другой причине. В 2016 году меня посетила мысль о создании самообучающегося искусственного интеллекта. Первые черновики описывающие его архитектуру начали появляться в 2018 году. Тогда я делал ставку на GAN и генетические алгоритмы. Архитектура единицы "мозга" тогда выглядела так
По сути, кластер является самым компонентом элементом в иерархии программ, которые отвечают за восприятие окружающей среды и анализ происходящего. Кластеры сгруппированы в группы. Каждая группа отвечает за определенный функционал, как и нейроны в мозге человека. Каждая группа кластеров входит в раздел "мозга", который специализируется на решении задач в определенной области. Кластер сам по себе достаточно универсален по функциональности и его копии могут использоваться для решения различных задач.
Однако, основная проблема здесь в том, что для генерации знаний пришлось бы использовать или генетический алгоритм, отсеивая на каждом этапе ненужные/неправильные варианты генераций, своего рода "идей". Про генерацию с помощью пермутатора и вовсе говорить не приходится так как это создает огромное количество ненужных данных, из которых для решения задачи нужно менее одного процента полученной информации.
Выход появился в 2021 году, после того как были опубликованы материалы и статьи на youtube канале Стэнфорда:
https://www.youtube.com/playlist?list=PLoROMvodv4rPLKxIpqhjhPgdQy7imNkDn
В придачу к лекциям на странице курса университета были и ссылки на научные статьи и исходный код на питоне. Таким образом, стало возможным заменить громоздкий кластер на граф знаний. При этом, в качестве постоянно обучаемой модели можно использовать GNN. На примере простого графа, который содержит несколько ссылок на функции python, мы с командой разработки scisoftdev, получили только рабочие варианты последовательностей функций. Мы создали граф знаний, который состоит из ссылок на функции, затем полумили все возможные пути в этом графе с условием, что данный путь содержит рабочую последовательность, то есть программа состоящая из конкретной последовательности функций при запуске выполняется полностью без ошибок.
Вот получившийся граф знаний. А вот последовательность функций - путь, который выполняется без ошибок:
{0: <function array_to_string at 0x000001C2A9277310>, 1: <function compute_average at 0x000001C2A9277550>, 2: <function string_to_array at 0x000001C2A92774C0>}
Working version of the code: [<function string_to_array at 0x000001C2A92774C0>, <function compute_average at 0x000001C2A9277550>]
result: 5.5
На вход мы подаем массив в виде строки
input_array = "[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]"
Задача состоит в том, чтобы получить среднее значение массива имея всего три функции: преобразование строки в массив, преобразование массива в строку и вычисление среднего значения массива.
как видно из вывода программы, получившийся путь состоит всего из двух ссылок на функцию, это преобразование строки в массив и функцию вычисления среднего значения. Естественно, были и другие варианты графлетов (Графлеты - это небольшие связанные неизоморфные индуцированные подграфы большой сети), которые включали в себя все три ссылки на функцию, но по условию задачи путь должен быть наименьшим, при этом он должен решать поставленную задачу.
Таким образом, этот небольшой эксперимент доказал, что возможно не только строить граф знаний, но и дополнять его новыми знаниями. Для этого нужно всего два инструмента - машинное обучение на графах GML и графовые нейронные сети GNN.