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.

Комментарии (12)


  1. Inobelar
    16.07.2023 22:21
    +10

    Хэх, прочёл даже несколько раз, после того как ничего не понял и даже показалось что пьян, пытаясь разобраться во второй раз ... но, кажется, дело в другом...

    В 2016 году меня посетила мысль о создании самообучающегося искусственного интеллект

    окей, допустим почему-бы и нет; openai, google и прочие титаны не смогли в самообучение, тренят LLM на размеченных (и отфильтрованных) людьми данных... они просто не так хороши. Просто ... не смогли формализовать задачу постановки задачи самому себе, недотёпы.

    Дальше следует упоминание генетических алгоритмов, а почему "графовые нейросети" (хм, видимо, бывают древовидные и с прочими ущербными топологиями) так перспективны - нам должно быть очевидно. Дальше - что-то вроде блок-схемы алгоритма, но все узлы прямоугольники (хотя есть ветвление), или ... это не алгоритм действий, а что-то вроде UML-диаграммы компонентов, ведь там есть "пользователь" (видимо, столь-ничтожный компонент "самообучаемой графовой нейросети GNN" (так указано в заголовке, ага, масло-масляное), что он среди прочих в нижнем регистре). Хм, не понятно.

    По сути, кластер является самым компонентом элементом в иерархии программ, которые отвечают за восприятие окружающей среды и анализ происходящего. Кластеры сгруппированы в группы. Каждая группа отвечает за определенный функционал, как и нейроны в мозге человека. Каждая группа кластеров входит в раздел "мозга", который специализируется на решении задач в определенной области. Кластер сам по себе достаточно универсален по функциональности и его копии могут использоваться для решения различных задач.

    Это впечатляет, но всё-ещё не понятно для обывателя, а то и хуже - похоже на shuffle из набора слов [функционал, мозг, анализ, восприятие, нейроны, кластер], так и просится цитата небезызвестного критика:

    Хватит трепаться, покажите мне код (с) Линус Торвальдс

    В придачу к лекциям на странице курса университета были и ссылки на научные статьи и исходный код на питоне. Таким образом, стало возможным заменить громоздкий кластер на граф знаний. При этом, в качестве постоянно обучаемой модели можно использовать GNN. На примере простого графа, который содержит несколько ссылок на функции python, мы с командой разработки scisoftdev, получили только рабочие варианты последовательностей функций. Мы создали граф знаний, который состоит из ссылок на функции, ...

    Так каким образом? В публикации был какой-то код, потом с ним произвели модификации, получили нейросеть которая выдаёт "последовательность указателей на функции" (надеюсь, хэх, не копии самих функций) (про арность, последовательность вызова функций и передачу аргументов умолчим, это ... очевидно и просто, нейросети легко умеют в это, и в вывод типов).

    то есть программа состоящая из конкретной последовательности функций при запуске выполняется полностью без ошибок.

    Видимо, последовательное выполнение функций без взрывания пайтоновской vm и было фитнесс-функцией, эмм ... тренировки (?) :D Про это ничего не сказано, видимо уже на этом этапе происходит самообучение :D

    Посмотрев на сайт на английском (как-то не скрепненько) и линкедин (уоу, а он разве не забанен?!) стало ясно - серьёзная команда, и код скорее всего проприетарная разработка, нечего тут надеяться на простой и понятный пример).

    На вход мы подаем массив в виде строки

    python-way, не иначе ;D О квантизации умолчим, самообученный агент автоматизировал это за нас.

    как видно из вывода программы

    Сори, вывод забыли добавить )) Или это пасхалка в стиле "It is obvious" как во многих математических публикациях ))

    Таким образом, этот небольшой эксперимент доказал, что возможно не только строить граф знаний, но и дополнять его новыми знаниями. Для этого нужно всего два инструмента - машинное обучение на графах GML и графовые нейронные сети GNN.

    Эх, а самообучение где? - Упс, как-то вывод работы целой команды (компании) немного о другом вышел. От "графа знаний", и прочих совковых представлениях об "экспертных системах" тошнило ещё лет десять назад.

    -------

    Ребят, от статьи тянет каким-то результатом отрыжки chatgpt, или чем-то ещё хуже. Интернет и так превращается в помойку, а хабр в не-торт, давайте не будем так.


    1. Safronov
      16.07.2023 22:21

      Замечу, что все эти LLM (трансформеры) - частный случай весьма обширного семейства графовых нейронок, конкретно - Graph Attention Networks (GAT).

      Осилил cs224w - молодец.

      А вот с эссе и терминологией есть куда развиваться. Autoregressive Models и подход Self-supervised Learning легко обозвать самообучающимися. ИМХО, порог входа в область и так достаточно высок, чтобы пинать за стиль изложения :]


  1. nikolz
    16.07.2023 22:21
    +1

    " ...в 2018 году. Тогда я делал ставку на GAN и генетические алгоритмы.

    ... этот небольшой эксперимент доказал, что возможно не только строить граф знаний, но и дополнять его новыми знаниями. Для этого нужно всего два инструмента - машинное обучение на графах GML и графовые нейронные сети GNN. "

    Правильно я Вас понял, что сначала Вы думали, что надо GAN и генетические алгоритмы, а теперь Вы думаете, что надо машинное обучение на графах GML и графитовые сети GNN ?

    По аналогии: "сначала мы на скачках сделали ставку на номер 6, но после финиша первым номера 8, сделали ставку на номер 8"


  1. SciSoftDev Автор
    16.07.2023 22:21

    что-то упустил, накидаю ссылочек )
    По этой ссылке есть и примеры кода и ссылки на статьи.
    https://github.com/NDS-VU/GNN-SSL-chapter

    В примерах кода можно почерпнуть и библиотеки и реализации и описания. В общем, там полный набор плюшек. Для запуска нужно читать issues, но там не всегда есть все ответы, придется додумывать и экспериментировать.

    А вот с DagsHub будет сложно, там нужно регистрироваться и уметь им пользоваться, не совсем открытый доступ, даже после регистрации тяжело разобраться, но можно

    Вот тут конспекты с видеокурса
    http://web.stanford.edu/class/cs224w/

    Если говорить про список литературы, то он большой, но из основных могу написать:
    1. Graph Neural Networks: Foundations, Frontiers, and Applications (Lingfei Wu,Peng Cui,Jian Pei Liang Zhao, 2022)
    2. Graph Representation Learning (William L. Hamilton, McGill University, 2020)
    3. Теория графов Д. В. Карпов

    В первой книге много ссылок на научные статьи, во второй описывается как раз инфа по курсу из видео, не сказать чтобы очень зашло, но полезно. Поэтому, переписывать сюда всю инфу смысла не вижу, кто в теме - тот разберется.


    1. vba
      16.07.2023 22:21

      Хватит трепаться, покажите мне код (с) Линус Торвальдс


      1. SciSoftDev Автор
        16.07.2023 22:21

        Код закрыт, могу только математикой поделиться. Все есть в открытом доступе.


    1. berng
      16.07.2023 22:21

      Ссылки хорошие, Лесковец - специалист и преподаватель известный. А про что пост был, если не секрет?


      1. SciSoftDev Автор
        16.07.2023 22:21

        Замена архитектуры кластера на граф. У графа значительно больше преимуществ и много интересных свойств. В общем, гибкость, масштабируемость и адаптивность в случае применения графа намного выше. Подробнее лучше отдельную статью написать. Для понимания темы рекомендую ознакомиться с информацией по ссылкам, дальше будет сложнее и интереснее.


        1. berng
          16.07.2023 22:21

          Вообще-то, любая структура с нодами и ребрами - граф: с формальной точки зрения кластер у вас и раньше был графовым. Так-что скорее всего ничего нового вы не сделали (или не рассказали).


          1. SciSoftDev Автор
            16.07.2023 22:21
            -1

            Есть как минимум полносвязный граф, двудольный граф, направленный граф (нейронная сеть). Если в первом случае применялась четко определенная структура, то во втором применяется полносвязный граф, из которого выделяется нужный графлет. Ну да, отличий вовсе нет, ничего нового. Какая разница между камазом и мерседесом, это все транспортные средства ))) Капец уровень аргументации. Если уж решили меня хейтить, то найдите научные статьи и математические расчеты которые опровергают мою теорию/практику, чтобы доказать что я не прав предметно. Если же у вас не хватает знаний в этой области, то моей вины здесь нет. Вам ничто не мешает пройтись по ссылкам и ознакомиться с информацией.


  1. precip001
    16.07.2023 22:21

    Это шайтан машина от инопланетян, без рофлов аи это конечно оч крутая штука но как говорится можно и без него :P


  1. frex
    16.07.2023 22:21

    Задача состоит в том, чтобы получить среднее значение массива имея всего
    три функции: преобразование строки в массив, преобразование массива в
    строку и вычисление среднего значения массива.

    Проблема в том, что вы ставите ИИ задачу. Если хотите самообучающийся ИИ, то пусть он сам ставит себе задачу. А результатом выполнения будет жизнь или смерть. Если я конечно правильно понял, что вы имели в виду.
    А если перейти на уровень выше, то любой разум (интеллект) имеет ограниченный определенный набор свойств, которые нужно повторить в коде для получения результата. Вся прелесть кода в том, что ИИ не обязательно обучать с нуля. А значит после определенного уровня ИИ может самообучаться используя минимальный набор данных. И главным критерием победителя здесь так же останется выживание. Не одна условная ChatGPT, а сотни и тысячи нейросетей борются между собой совершенствуя свой код ради победы. Только так можно заставить ИИ эффективно самообучаться.