Введение

Добрый день, уважаемые хабровчане. Это первая написанная мной статья на хабре(да и вообще статья), несмотря на то, что количество прочитанных уже далеко за пределами моих способностей к устному счёту, поэтому вынужден попросить вас о нескольких важных вещах:

  • Прочитайте этот параграф и следующий, чтобы понять стоит ли читать дальше. Это важно.

  • Постарайтесь не судить строго.

  • Если у вас есть конкретные предложения/замечания по улучшению статьи, прошу вас в любом случае о них сказать.

  • Если вы знаете ресурсы, освещающие проблему, о которой пойдёт речь, прошу вас также о них сказать.

Коротко о себе

Меня зовут Николай, и я занимаюсь программированием на Python в свободное от работы/учёбы время. Поскольку я только начинаю и мне довольно сложно сориентироваться в том, какое направление разработки выбрать, есть несколько областей которые меня интересуют. Одна из этих областей - это как раз нейронные сети и ИИ, в ходе изучения которой мне в голову пришли некоторые мысли по поводу их развития. Я рассказываю это всё для того, чтобы вам, уважаемые читатели, было легче выполнить второй пункт введения, а также, чтобы вы обратили внимание на то, что данная статья - это скорее вопрос, нежели ответ. Если вам подобный подход претит, вы смело можете уйти, однако если вам есть что сказать и есть куда направить неофита в этой области, то добро пожаловать.

Коротко о проблеме

В процессе познания нейронных сетей я практически не увидел информации о том, чтобы кто-то приближался или хотя бы шёл к созданию сущности, похожей на настоящий ИИ. Большая часть задач, которые решаются нейросетями, это довольно тривиальные вещи, вроде распознавания объектов, имитации чего-либо, автоматизации какой-то задачи с условиями или предсказания поведения объектов, чьи математические модели слишком сложны для моделирования и/или вообще неизвестны.

Однако что же с исследовательской частью проблемы? Где и как люди отвечают на вопрос "Как улучшить сам ИИ, чтобы было легче выполнять задачи?" или "Есть ли что-то, что можно добавить в основу ИИ, кроме структуры нейронов и принципов их взаимодействия?"? Ответов на эти вопросы у меня нет, но есть предположения, а если они есть у меня, возможно они есть не только у меня. И возможно именно тот факт, что я их сейчас озвучу, приведёт меня к знанию, имеют ли они место быть в реальном мире. Собственно, далее речь в статье пойдёт об этих предположениях.

Модель мышления и Python

Начну с того, что мне понятна структура работы нейронов как в нейросети, так и в мозгу человека и они действительно во многом идентичны. Однако первая мысль которая у меня возникла по поводу настоящего ИИ - ок, а что дальше? Ведь нет смысла пытаться имитировать 1011 нейронов человеческого мозга и их взаимодействие, вычислительные мощности нужны будут колоссальные, а эффект сопоставимый с работой головы одного человека - ничтожно мал. Тогда возникает идея подойти к этому с другого конца, а именно - со стороны понятийного мышления.

Понятийное мышление

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

  • Анализ — расчленение общего на составные части и отдельные признаки.

  • Синтез — обобщение отдельных частей в общее целое.

  • Сравнение — сопоставление нескольких предметов или событий между собой.

  • Абстрагирование — выделение одних признаков и отвлечение от несущественных понятий.

  • Обобщение — это объединение разных понятий в одну категорию.

  • Систематизация — объединение категорий в одну систему.

С моей точки зрения обобщение, синтез и систематизация по сути есть одно и то же, особенно если касаться программной реализации, однако это ИМХО и не существенно в данном случае. Абстрагирование можно пока тоже оставить в стороне, эту задачу отчасти выполняет нейросеть. А теперь ответьте, если вы представите себе хоть одно понятие, и формализуете в голове все оставшиеся операции, оно ничего вам не напомнит? Например дерево(не конкретное, а как понятие), которое можно разделить на корни, ствол, листья и ветви, у которого есть набор свойств таких, например, как высота и срок жизни, и которое по одному или нескольким параметрам можно сравнить с другим деревом, увидев всего 2 конкретных дерева и один куст в своей жизни уже можно сделать вывод о существовании целого понятия дерева(да и куста, к слову). Вот мне лично это напомнило сразу одно - класс object в python и систему наследования.

Python

В python используется глобальная система наследования. Наследуется абсолютно всё, и абсолютно всё наследуется от одного единственного класса object. Так чем он по сути отличается от машинного понятийного языка? Да ничем!!! Он именно поэтому так лёгок в освоении, и именно поэтому с него так просто начинать, и именно поэтому придумавший его Гвидо ван Россум - Гений с большой буквы и именно поэтому свечка и совершает свои колебания. Он скопировал модель понятийного человеческого мышления и внес её как основу языка. И если просто научить машину создавать нужные классы, прописывать их, научить операциям, представленным выше(что по сути просто означает разработку методов и функций для экземпляров классов), то мы получим пусть зачаточную, пусть, возможно, не сильно применимую, но всё-таки модель понятийного мышления. А маленькие отдельные нейросети, встроенные в такую модель, могут вдохнуть в неё жизнь, научить выполнять некоторые операции самой. Не нужно хранить и запускать огромную нейросеть, а потом смотреть как она съедает ресурсы, достаточно чтобы маленькая нейросеть просто определила формальные признаки одного объекта, провела анализ, абстрагирование или синтез, а дальше объект будет опознаваться без неё, или с использованием меньшей по мощности нейросети, которая уже будет искать признаки объекта, а не целиком объект. Сравнение же будет происходить вообще без нейросети, по формализованным признакам. Возможно идея не нова и слабо реализуема, я не знаю, но что если попробовать? Это не обязательно должен быть именно python, можно использовать и БД и другие языки, просто сам принцип реализации классов в python удивительно гармонирует с идеей понятийного мышления. Дальше следует ещё одна удивительная гармония.

Незаслуженно забытый Акинатор

Давным-давно, в далёком-далёком 2007 году(не путать с далёкой-далёкой галактикой) Арно Мегре и Джефф Дел создали игру под названием Акинатор. Если коротко, то её идея в следующем - вы загадываете персонажа, хоть реального, хоть книжного и джинн Акинатор задавая вам вопросы его угадывает. Если он его не угадал и/или его нет в базе, вы можете его добавить, чтобы Акинатор запомнил список вопросов. Смысл в том, что игра подбирает определённые вопросы исходя из того, насколько уменьшится множество возможных вариантов в зависимости от ответа на этот вопрос. И поиграв в неё всего пару раз становится понятно, что программа удивительно умна. Она спрашивает об огромном количестве различных признаков, таких как пол, раса, бессмертность, определённая игровая/книжная/кино/реальная вселенная, жанр произведения и многом другом. И угадывает она с каждым годом в разы лучше(возможно это причина, по которой она перестала быть популярной, кому хочется всё время проигрывать?). Я заходил в неё раз в несколько лет и видел этот прогресс, хоть тогда в силу возраста не догадался его задокументировать.

И вот собственно вопрос, а чем это не "учитель" для ИИ описанного выше? Насколько я успел прочитать, Акинатор реализован именно на многомерной картине распределения ответов и разграничении кластеров многомерных точек, а не на системе понятийного классификатора, но ведь это распределение и список вопросов уже можно использовать как данные для создания такого классификатора, разве нет?

Простой пример, разве сложно автоматически создать признак вымышленности персонажа, или, например, что соответсвует понятийной модели, два подкласса класса "персонаж": подкласс "реальный" и подкласс "вымышленный", если у Акинатора существует вопрос "Ваш персонаж существует в реальной жизни?"?. И ведь у подклассов "реальный" и "вымышленный" будут разные признаки, у одних срок жизни и место рождения, у других произведение в котором они фигурируют, которые Акинатор тоже способен определить. А нейросети по этим признакам скажем смогут искать упоминание/появление персонажа в том или ином произведении, выуживать информацию о нём скажем из книги и ещё больше расширять эту базу знаний таким образом. Сейчас всё это делается вручную.

К слову, такие классификаторы и Акинаторы могут быть созданы не только для персонажей. Ими можно описать любую науку, любые объекты, словом любое ПОНЯТИЕ. Просто Акинатор взял одно единственное ПОНЯТИЕ персонажа, и смог тем самым описать с десяток других ПОНЯТИЙ. Например он автоматически частично способен описать понятие "художественное произведение" практически ничего не упуская, потому что большая часть персонажей именно из художественных произведений, и практически всё что характеризует художественные произведения присутствует в вопросах Акинатора.

Если расплодить такие системы, если поощрять людей за игру в них, то чего можно достичь, если за всем этим будет стоять система ИИ и нейросетей, способная всё это переработать и увеличить знания хотя бы на 10% от исходных данных!?

Заключение

Надеюсь, что моя статья показалась вам по меньшей мере занимательной. Я не стал здесь писать о стандартных вещах про нейросети и впредь вряд-ли буду, о них много написано до меня и много будет написано после. Без лишней скромности скажу каждому, кто не сдался дочитал до этого момента, если через год или через полвека вы разработаете ИИ на основе того, о чём я говорил здесь, не забудьте переслать мне 1% прибыли с вашего предприятия. Или ещё лучше позовите к себе в стартап. Ну и конечно огромное спасибо за внимание, терпение и конечно же за ваши будущие отзывы, рецензии, указания куда мне идти с такой фантазией, замечания и предложения. Всех вам благ.

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


  1. Sanek22
    13.09.2021 13:39

    Добрый день, Николай!
    Добро пожаловать на Хабр. Правильными вопросами задаетесь:)
    Возможно вам будет интересен мой взгляд на это.
    Имхо, в основе обработки информации мозгом лежит понятие действия.
    Объединением действия и результата получается свойство.
    Объекты — это наборы свойств. Нет деления на классы и экземпляры классов — просто разный набор свойств у объектов.
    Нейроны это просто строительный материал для реализации понятия действия.
    Подробнее я изложил свои соображения тут:
    habr.com/ru/post/554738
    habr.com/ru/post/481172
    И даже реализовал некий прототип по построению смысловой модели текста (на Python, кстати). Статья с описанием — habr.com/ru/post/575838
    С уважением,
    Александр


    1. zubrr373 Автор
      13.09.2021 16:08

      Александр, и вам добрый день. Спасибо за комментарий. Очень интересные у вас статьи, я на самом деле искал что-то подобное на просторах интернета, но информации по таким системам очень мало.


      1. Sanek22
        13.09.2021 16:35

        Спасибо! За массой статей про обучение нейронных сетей с миллиардами параметров и гигабайтными датасетами, тяжело найти осмысленные идеи :)


      1. imbasoft
        13.09.2021 17:33

        Доброго дня.

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

        Для того, чтобы систематизировать имеющиеся наработки рекомендую книжку: Душкин Р. В. Исусственный интеллект. – М.: ДМК Пресс, 2019. – 280 с. ISBN 978-5-97060-787-9

        Она как "оглавление" к теме ИИ в современном мире, там по верхам говорится обо всем, что позволяет хотя бы приблизительно нарисовать текущую картину работ в этой области и уйти от неверной трактовки что ИИ - это только нейронные сети.


        1. zubrr373 Автор
          13.09.2021 17:50

          Добрый день, спасибо за комментарий, обязательно ознакомлюсь!)


    1. ASGrib
      13.09.2021 16:08

      Действия...? Целенаправленного действия, т.е. действие, НЕ направленное на достижение Цели, не имеет смысла (судороги, или эксперимент "лягушачье лапкой" ).

      Поиск смысла = поиск Цели так? Цель - Действие - Результат - Оценка результата (смысл) - Корректировка действия (это кольцо... самонаводящаяся ракаета ;)
      Интеллект, тем более Сильный - ставит ЦЕЛИ и ищет способы их достижение, или нет? Где про генерацию Целей с помощью ИИ?


      1. Sanek22
        13.09.2021 16:32

        Цель — это определенное свойство, которому добавлен признак цели.
        Цели могут генериться автоматически из потребностей организма, или быть созданы произвольно («силой воли»). В первой моей статье об этом есть.
        А у действий есть перечень тех свойств, которые достигаются в результате выполнения данного действия. Соответственно, имея некую цель(некоторое свойство), система может выбирать действия по ее достижению.


  1. okurtyakov
    13.09.2021 17:48

    Тоже начал недавно изучать Python и начал задаваться тем же вопросами. Как человек, который очень люблю русский язык, могу сказать, что статья написано грамотно)))


    1. OneMike
      15.09.2021 01:02

      Как человек, который очень люблю... Хм


      1. zubrr373 Автор
        15.09.2021 09:36

        Тоже заметил, но решил не реагировать, если любит, то исправится, наверное))


  1. Anacaru
    15.09.2021 09:56

    Здраствуйте! Мне очень понравилась ваша идея/виденье решения задачи ИИ. Скажите, вы будете пробовать реализовать на практике ваш алгоритм? Если да, то как думаете насколько быстро вы его сможете реализовать, если соберетесь? + я вдохновлен, можно сказать, этой идеей, и тоже попробую что то подобное реализовать :)

    P. S. Кстати, а вы пришли к такому алгоритму постепенно, или вам эта идея пришла в голову внезапно, как "вдохновение"?)


    1. zubrr373 Автор
      15.09.2021 10:37

      Добрый день, спасибо за отзыв. Насчёт реализации не знаю, реализовывать всё это одному с моим текущим уровнем знаний - практически безумие. Ваш вопрос довольно комплексный, поэтому придётся ответить списком:

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

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

      • Самому стать тимлидом, открыть проект на кикстартере и найти команду - нет, задача явно мне не по зубам, молод и неопытен я ещё в IT для такого.

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

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


  1. Tima_bes
    15.09.2021 10:03

    Привет! Не поверишь, точно на эту же тему рассуждал в своё время и тоже в качестве отправной точки размышлений был тогда Акинатор. Фишка Акинатора в том, что он использует расширяющуюся логику, в то время как большинство обычных самообучающихся систем использует сужающуюся.

    Об различиях хорошо написано у Андрея Никитина http://andrejnikitin.narod.ru/Vel_idey_20veka_AI1.htm

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

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


    1. zubrr373 Автор
      15.09.2021 10:53

      Добрый день, спасибо большое за комментарий и статьи. Правда у меня есть пара замечаний по поводу вашей статьи:

      • Копировать весь мой текст под термином "некоторые мысли" наверное не очень правильно, несмотря на то, указан источник или нет

      • Особенно это выглядит неправильно, учитывая, что объем цитирования в таком случае превышает объем вашего текста примерно на 300 слов)

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