Структурное мышление и искусственный интеллект: в чем отличия способов принятия решений человеком и машиной

Фото: https://www.advancedsciencenews.com/. Начнем мы с понимания того, что вообще такое “структурное мышление” и почему люди им обладают. Поговорим о структурном мышлении. Существуют убедительные данные, что мы — люди — воспринимаем мир с помощью структуры. Ссылки на научные работы касательно структурного восприятия мира человеком, подкрепляющие утверждения этого раздела, можно найти в разделе “Литература” в конце статьи. Это значит, что мы делим все сложные абстрактные понятия на части, и воспринимаем все объекты и понятия как сложные составные сущности, состоящие из простых элементов (building blocks), которые взаимодействуют между собой (имеют relations). Пример: планета состоит из стран, страна — из городов, города — из улиц и т.д. Города — это составные части стран (building blocks), при этом города находятся внутри стран. “Внутри” — это вид взаимодействия между городом и страной (relation).

Также взаимодействия есть и между отдельными городами — например, один город может быть больше другого. “Больше” — это тоже relation. При этом сами части — города — также состоят из более мелких building blocks — улиц, а улицы — из домов и т.д.

Эти понятия (улица, город, страна в нашем примере) и связи между ними создают иерархическую структуру с взаимодействиями между элементами у нас в голове.

Точно так же можно разбить на составляющие практически любой объект: смартфон состоит из деталей; молекула — из атомов; театр — из сцены, зрительского зала, буфета и холла; греческий салат — из нарезанных овощей, оливкового масла и сыра. Человек стремится наделить структурой абсолютно все. Вспомните иерархию живых организмов из учебников биологии: живые организмы делятся на эукариотов, мезокариотов и т.д.; эукариоты, в свою очередь, делятся на царства растений, животных и грибов; эти царства также делятся на подцарства и т.д. Мы ищем и описываем структуру даже там, где она не так очевидна: просто структура — это то, как мы воспринимаем любой объект. Более подробнее о том, почему это так, и к каким интересным эффектам мышления это приводит, можно прочитать в книге “Почему мы ошибаемся” (глава 8).

Иерархическое мышление делает наше взаимодействие с объектами эффективным. Мы можем воспринимать объект как целое, даже если он состоит из многих отдельных частей. Например, для нас город Москва — это отдельный объект, несмотря на то, что он состоит из многих частей поменьше: домов, улиц и так далее. Но для покупки билета на самолет Санкт-Петербург — Москва нам не нужно думать о том, какие в Москве есть улицы: нам проще думать о Москве как о городе в целом.

Вот так в зависимости от ситуации мы можем оперировать объектами на разных уровнях иерархии.

Вообще, иерархия — самый эффективный способ организации систем с точки зрения взаимодействия элементов системы, их специализации и передачи информации между частями системы. Почему это так, можно прочитать в книге “Азбука системного мышления” (Глава 3: “Почему системы так хорошо работают”) Скорее всего, иерархическое мышление у людей также развилось по причине его эффективности. Мысля таким образом, мы затрачиваем меньше энергии, чем если бы мышление было устроено другим образом.

Далее, кроме иерархии мы также оперируем ассоциациями: проводим аналогии, ищем связи между различными сущностями. Ассоциации могут основываться на совершенно разном: форме объектов, запахе, цвете, звуковых сигналах. По сути, ассоциации — это вид взаимодействий между объектами, который основан на их схожести по какому-то принципу. Теперь заметим вот что:

Структурное ассоциативное мышление помогает нам эффективно воспринимать мир и приспосабливаться к новому. Вот как:

Сталкиваясь с чем-то новым, мы пытаемся разделить это новое на известные нам из прошлого опыта составляющие (те самые building blocks) и таким образом создать структурное представление новой сущности. Как только структурное представление новой сущности создано, мы можем делать выводы о новой сущности. Эти выводы основаны на том, из каких известных элементов состоит структура нового объекта и наших знаний об этих известных элементах и их взаимодействиях.

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

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

https://jliza.ru/nesushhestvuyushhee-zhivotnoe.html Посмотрите на это несуществующее животное. Как считаете, на что оно способно?https://jliza.ru/nesushhestvuyushhee-zhivotnoe.html Посмотрите на это несуществующее животное. Как считаете, на что оно способно?

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

https://www.adhnk.com/?a=4&b=156&c=6882362&pp=funny+weird+hats Петя купил новую шляпу, и доволен!https://www.adhnk.com/?a=4&b=156&c=6882362&pp=funny+weird+hats Петя купил новую шляпу, и доволен!

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

  • Пример 3. Структура помогает нам не только взаимодействовать с новыми объектами, но и приспосабливаться к новому окружению. Например, если вы попали в новый для вас город в новой стране, вы примерно понимаете, как нужно себя вести, ведь вы бывали в городах и раньше. Вам нужно приспособиться лишь к нескольким новым аспектам. Это могут быть, к примеру, спецефические правила дорожного движения (допустим, в новой для вас стране движение левостороннее, в отличие от правостороннего на вашей родине). Так структурное восприятие помогает  вам сократить количество усилий для адаптации к новой среде.

Вот так структура позволяет нам очень эффективно взаимодействовать с миром.

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

Еще это позволяет нам выполнять новые действия, которые мы раньше не совершали: например, полететь в новый город Барселону, куда еще никогда не летали. Мы с легкостью это сделаем, соединив в голове знакомые понятия “лететь в” и “Барселона”. После этого станет понятно, какие действия нужно совершить, чтобы оказаться в Барселоне: купить билет, приехать в аэропорт, сесть в самолет и т.д.

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

Это умение разбивать высокоуровневые понятия на структурные элементы, осознавать и создавать новое, собирая его из хорошо известных старых понятий, называется комбинаторным обобщением (conbinatorial generalization). И это — то, что суперлегко дается мозгу человека и суперсложно — искусственному интеллекту. В частности, подходам, основанным на нейросетях.

Тут отметим, что существуют два понятия “искусственный интеллект”: “сильный ИИ” и “слабый ИИ”. О том, что означает каждый из них, можно прочитать тут. Очевидно, что весь существующий на данный момент искусственный интеллект — слабый. В тексте выше (и далее ниже) под “искусственным интеллектом” я подразумеваю слабый ИИ. Давайте поговорим о структуре в нейросетях:

Нейросети и структура

Если посмотреть на принципы работы современных нейросетей, в них, на самом деле, можно найти структурные элементы.

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

К примеру, пусть у нас есть сверточная нейросеть для классификации картинок. И пусть среди классов есть “лицо человека”. Тогда в самых первых слоях сверточной нейросети будут фильтры, которые реагируют на простые, низкоуровневые паттерны лица: горизонтальные/вертикальные линии, линии глаз/носа и т.п. В следующих слоях будут фильтры, реагирующие на более сложные, составные паттерны: глаза, нос, рот и т.п. И в последних сверточных слоях будут фильтры, реагирующие на паттерн “лицо человека”.

https://www.quora.com/How-does-a-convolutional-neural-network-recognize-an-occluded-face Примеры паттернов, на которые реагируют последовательные слои сверточной нейросети.  Первые слои реагируют на низкоуровневые паттерны вроде вертикальных/диагональных линий, следующие слои реагируют на более сложные паттерны (глаз/нос), последние — на паттерны наличия лица.https://www.quora.com/How-does-a-convolutional-neural-network-recognize-an-occluded-face Примеры паттернов, на которые реагируют последовательные слои сверточной нейросети.  Первые слои реагируют на низкоуровневые паттерны вроде вертикальных/диагональных линий, следующие слои реагируют на более сложные паттерны (глаз/нос), последние — на паттерны наличия лица.

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

Однако такой идеи устройства нейросети недостаточно, чтобы нейросеть развила понимание структуры,  приближенное к тому, как структуру понимает человек. Свидетельством этому служат проблемы, которые возникают и у сверточных, и у практически всех других нейросетей повсеместно. Далее мы рассмотрим некоторые из них.

Можете подумать о том, почему той структуры, что есть в сверточных нейросетях, не хватает для имитации восприятия человека. Чего недостает сверточным сетям?

Общие проблемы нейросетей

У нейросетей есть несколько известных общих проблем. Общих — потому что эти проблемы характерны для всех видов нейросетей. Рассмотрим три из них: те, которые, на мой взгляд, связаны с отсутствием у нейросетей понимания структуры.

  • Знания нейросетей плохо переносятся из домена в домен, даже если домены сильно похожи. Например, нейросеть, которая отлично распознает лица европейцев, будет плохо работать на лицах людей из Африки. Эта проблема называется domain shift / out-of-domain.  Или, еще по-другому — отсутствие у нейросетей обобщающей способности. Есть отдельные направления исследований, которые ищут подходы для улучшения адаптации нейросетей к новым доменам: эти области называются domain adaptation или transfer learning. Но все эти техники далеки от совершенства, проблема domain shift еще не решена.

    Для человека проблемы domain shift практически не стоит. Мы легко проводим аналогии между объектами из двух доменов, выделяя в каждом структурные элементы и сопоставляя их между собой. Выделив в объекте из неизвестного домена знакомую структуру, мы понимаем, что примерно представляет из себя объект и как с этим объектом взаимодействовать. Другими словами, мы сравниваем разные объекты из разных доменов между собой на основе структуры, не обращая внимания на мелкие неважные различия. Мы поймем, что перед нами человек, даже если этот человек будет неизвестной нам ранее расы: мы поймем это, проведя аналогию между людьми известных нами рас и людьми новой расы на основе того, что оба типа людей состоят из одинаковых структурных элементов: головы, глаз, носа, рук и т.д. Таким образом, умение к комбинаторному обобщению позволяет людям взаимодействовать со структурно похожими элементами из разных доменов.

  • Нейросети чувствительны к шуму и малым изменениям в данных (это проблема отсутствия устойчивости/робастности нейросетей). Даже самое малое изменение картинки, малое добавление шума может сильно изменить ответ нейросети. Посмотрим, например, на две картинки ниже. Человеку явно понятно, что на картинках один и тот же объект, и малый шум не мешает это осознать, точно так же как и новая шляпа из примера выше не мешала понять, что перед нами тот же друг Петя. Просто для нас картина и шум — это две сущности, которые взаимодействуют между собой. И взаимодействуют они так, что шум не меняет значения объектов на картине.

    У нейросетей же так не получается: совсем малый шум может сильно изменить восприятие объекта нейросетью. Это выдает отсутствие в нейросетях структуры, а также позволяет создавать adversarial атаки на сети. Adversarial атака — это когда входящий объект изменяется очень малым образом, так, что человеку практически не заметно, но ответ нейросети на этот объект при этом сильно искажается. Более подробно об  adversarial атаках можно почитать тут.

https://medium.comr/the-unusual-effectiveness-of-adversarial-attacks-e1314d0fa4d3 Пример adversarial attack. При подаче в нейросеть картинки слева модель классифицирует ее правильно: “поросенок”. Но при добавлении небольшого шума, не видного глазу, нейросеть начинает классифицировать правую картинку как “авиалайнер”.https://medium.comr/the-unusual-effectiveness-of-adversarial-attacks-e1314d0fa4d3 Пример adversarial attack. При подаче в нейросеть картинки слева модель классифицирует ее правильно: “поросенок”. Но при добавлении небольшого шума, не видного глазу, нейросеть начинает классифицировать правую картинку как “авиалайнер”.

  • Для обучения нейросетей требуется огромное количество данных. При малом количестве обучающих данных нейросети переобучаются. Человек же может обучиться под новую задачу на основе ограниченного опыта. Это умение людей, опять же, связано со структурным мышлением: как было показано в примере с диким зверем, мы можем собирать общее представление о новом объекте, разложив объект на известные составные части и проанализировав их взаимодействия. Пары объектов нового вида будет достаточно, чтобы на основе их структуры сделать о них выводы и научиться правильно с ними взаимодействовать.

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

В общем-то, все описанные проблемы имеют одну основу: нейросети плохо справляются с любыми данными, которые как-то отличаются от тех, на которых нейросеть была обучена.

Один из возможных способ решить эту проблему — наделить нейросети способностью к комбинаторному обобщению, “заставив” нейросеть воспринимать объекты структурно.

Есть несколько идей, как это можно сделать. Далее мы рассмотрим некоторые из них.

Внедрить в нейросеть понимание структуры

Тут мы рассмотрим несколько идей, как можно внедрить в нейросети понимание структуры и связей между элементами, и тем самым приблизиться к созданию AGI (Artificial General Intelligence).

Отметим, правда, что общей и ясной концепции, как внедрить в нейросетевые модели понятие структуры, еще нет. Это открытый вопрос, над которым думают многие исследователи, включая таких известных, как Джефф Хинтон и Ян ЛеКун (об их работах мы тоже упомянем в этом разделе). Однако все же есть несколько идей, которые стоят рассмотрения. О четырех из них мы и поговорим в этом разделе.

Идея #1: Больше данных в модель!

Многие считают, что чтобы нейросеть стала лучше “понимать мир”, нужно просто сделать очень большую модель (с огромным количеством параметров) и обучить ее на намного большем и разнообразном количестве данных, чем это делается сейчас. Типа, очень большая модель в процессе обучения на разнообразных данных сама поймет, как лучше всего представлять объекты, и в итоге у нее само собой возникнет понятие структуры.В этом есть резон: практика показывает, что чем больше в обучающей выборке разнообразных примеров, тем лучше генерализация нейросети, и тем менее проявляются эффекты out of domain, adversarial attack и чувствительности к шуму.

Но достаточно ли этого, чтобы достичь комбинаторного обобщения? Похоже, что все-таки нет. Посмотрим на DALL-E 2: нейросеть для text-to-image, которая обучалась на просто огромном количестве данных. При этом понимания структуры у этой нейросети, увы, не возникло. Казалось бы, это странно: DALL-E 2 отлично генерирует картинки по текстовым запросам, комбинируя различные сущности: даже те, которые обычно несовместимы (вспомним знаменитый авокадо-стул). Но нет. Ученые из Гарварда провели исследование, по итогам которого сделали вывод, что у DALL-E 2 нет даже базового понимания отношений между объектами и, соответственно, структуры (цитата: “… current image generation models do not yet have a grasp of even basic relations involving simple objects and agents”)

https://arxiv.org/pdf/2208.00005.pdf Пример генерации DALL-E 2 по запросу “чашка под цилиндром”. Видно, что модель не понимает отношения “под”: на большинстве картинок чашка не расположена под цилиндром.https://arxiv.org/pdf/2208.00005.pdf Пример генерации DALL-E 2 по запросу “чашка под цилиндром”. Видно, что модель не понимает отношения “под”: на большинстве картинок чашка не расположена под цилиндром.

Получается, просто увеличивая размер модели и количество данных для ее обучения добиться возникновения понятия структуры у модели не выйдет. Ну или выйдет, но данных все еще недостаточно. Учитывая, что сильно большее количество данных, чем есть у OpenAI (компания, которая создала DALL-E 2), в ближайшее время вряд ли у кого-то выйдет собрать, то нам нужны какие-то другие идеи, как же помочь нейросетям развить понимание структуры.

Лично я считаю, что просто сделав большую модель и скормив ей много-много данных, AGI получить не выйдет. Также считают и многие опытные исследователи. Вот, например, речь Яна ЛеКуна, одного из пионеров AI, на Парижской конференции Viva Technology. Тут он рассказывает про свое видение General AI и поясняет, почему не верит в  то, что AGI будет получен как развитие больших нейросетей вроде  GPT-3 и DALL-E.

Обратимся поэтому к другим идеям того, как внедрить понимание структуры в нейросети. Другая идея состоит в том, чтобы как-то изменить идею устройства модели. Другими словами, внедрить в модель некий inductive bias, cпроектировать архитектуру модели так, чтобы при обучении она была вынуждена выучивать некое подобие структуры и отношений между объектами.

В случае с text-to-image моделями, к слову, такой подход работает: добавление в архитектуру сети некоторых трюков помогает улучшить восприятие моделью отношений между объектами. К примеру, text-to-image модель Parti (Google, 2022) достаточно хорошо передает взаимодействия объектов:

https://gweb-research-parti.web.app/parti_paper.pdf Пример генерации картинок моделью Parti. Видно, как точно на картинке переданы отношения между объектами (wombat, chair, martinim keyboard), описанные в тексте.https://gweb-research-parti.web.app/parti_paper.pdf Пример генерации картинок моделью Parti. Видно, как точно на картинке переданы отношения между объектами (wombat, chair, martinim keyboard), описанные в тексте.

В следующих разделах мы рассмотрим несколько общих идей, как можно внедрить понимание структуры в модель. И первая из таких идей — графовые нейросети.

Идея #2: Графовые нейросети

Графовая нейросеть —это архитектура, которая прямо в своем устройстве содержит понятие структуры и связей между объектами, и успешно применяется для  работы с определенными видами данных. Как понятно из названия, основа графовой нейросети —  граф.

Граф — это, наверное, самый наглядный способ представления структур. Вершины графа соответствуют сущностям (понятиям, объектам), а ребра между вершинами — отношениям между этими сущностями.

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

С такими видами данных очень удобно работать с помощью графовых нейросетей.

https://www.researchgate.net/figure/A-sample-social-network-graph_fig1_262331004 Граф социальной сети. Его вершины — люди (их странички в соцсети). Между двумя людьми есть ребро, если они являются друзьями в социальной сети.https://www.researchgate.net/figure/A-sample-social-network-graph_fig1_262331004 Граф социальной сети. Его вершины — люди (их странички в соцсети). Между двумя людьми есть ребро, если они являются друзьями в социальной сети.

Граф молекулы серотонина. Вершины — химические элементы. Ребра показывают связи между отдельными элементами в строении молекулы.Граф молекулы серотонина. Вершины — химические элементы. Ребра показывают связи между отдельными элементами в строении молекулы.

Графовая нейросеть строит граф объекта. Во время обучения GNN выучивает эмбеддинги (векторы-описания) каждой вершины и каждого ребра. То есть, GNN выучивает информацию о каждом элементе (вершине) графа и о природе связей (ребер) между этими элементами. Получается, GNN в процессе обучения “понимает” структуру объекта.

Подробно о том, как обучаются графовые нейросети, есть прекрасные статьи на  distill.pubtowardsdatascience и arxiv.

Успех графовых нейросетей в работе с графовыми типами данных очевиден: в последнее время большинство успешных моделей для разработки лекарств или других химических соединений были основаны на графовых нейросетях. Пример: MoLeR (модель от Microsoft для разработки новых лекарств). Эта модель — VAE, энкодер и декодер которой — графовые нейросети.

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

https://distill.pub/2021/gnn-intro/https://distill.pub/2021/gnn-intro/

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

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

В заключение про графовые сети порекомендую эту статью от DeepMind. В ней вводится понятие графовой нейросети: как она устроена, для каких задач применима и как ее обучать. Также в ней подробно разбирается то, как различные архитектуры нейросетей (сверточные, полносвязные, рекуррентные) оперируют связями между объектами (т.е. какой в них relational inductive bias), и в чем преимущество графовых нейросетей в этом плане.

А мы идем дальше. Как я писала выше, многие известные люди глубоко задумываются над тем, как должен выглядеть AGI. Джефф Хинтон и Ян ЛеКун — не исключение. За последние два года оба выпустили большие работы на 40+ страниц со своим видением того, как должен быть устроен General AI. В частности, в обеих работах идея иерархической структуры — одна из центральных: и Хинтон, и ЛеКун верят, что это — одно из важнейших составляющих мощного ИИ.

Кроме общей идеи иерархии и структуры в работах описаны и другие мысли о том, из чего должен состоять general AI. Ян, например, в своей работе упирает на то, что general AI будет модульным, т.е. состоять из многих разных частей, но при этом связанных между собой. По его мнению, тут помогут и reinforcement learning, и обычные нейросети, и символьный подход, и, возможно, что-то еще. В работе Хинтона используются идеи Трансформеровкапсульных нейросетейneural fieldscontrastive representation learning и еще пары других. Давайте в общих чертах пройдемся по идеям этих двух работ.

Идея #3: Мысли Джеффа Хинтона

Джефф Хинтон в феврале 2021 года выпустил большую авторскую статью под названием “How to represent part-whole hierarchies in a neural network”. В  своей работе он концентрируется именно на создании нейросетей для компьютерного зрения (обработки картинок и видео), но, тем не менее, содержит интересные идеи.

Главный лейтмотив работы Хинтона — иерархическая структура. Статья начинается со слов:

“There is strong psychological evidence that people parse visual scenes into part-whole hierarchies […] If we want to make neural networks that understand images in the same way as people do, we need to figure out how neural networks can represent part-whole hierarchies. ”

“Есть  убедительные психологические доказательства того, что люди воспринимают визуальные сцены в виде иерархии объектов на ней […] Если мы хотим создать нейронные сети, которые воспринимают изображения так же, как люди, нам нужно выяснить, как нейронные сети могут представлять иерархии.”

То есть, главная проблема: как заставить нейросети выучивать иерархическую структуру визуальной сцены.

Хинтон в статье предлагает идею модели, которую он назвал GLOM. GLOM — это не четко прописанная архитектура, которую завтра можно написать на PyTorch и обучить; это, скорее, абстрактная идея устройства модели. Вот на чем она основана:

Как мы обсуждали выше, любое изображение человек представляет в виде иерархической структуры. Возьмем, к примеру, портрет Мона Лизы. Для нас это картина, где есть два высокоуровневых элемента: фон и человек. Человек, в свою очередь, “делится” на более мелкие элементы иерархии: голова, руки, тело. Далее, голова — это нос, рот, нос, волосы, расположенные в определенных местах относительно друг друга. И так далее. Возможно, у вас в голове возникнет немного другая иерархия объектов на этой картинке, но это неважно. Важна сама идея представления сцены как иерархической структуры.

https://ru.wikipedia.org/wiki/Мона_Лизаhttps://ru.wikipedia.org/wiki/Мона_Лиза

Как мы могли бы представить изображение в виде иерархической структуры в компьютере? Очевидный ответ — в виде дерева (заметим, что тут мы снова приходим к идее графа. Дерево — это тоже граф). Вот как он будет выглядеть:

Дерево иерархии портрета Мона ЛизыДерево иерархии портрета Мона Лизы

Подобные деревья иерархии можно построить для любой сцены. Было бы очень круто научить нейросети создавать для изображений такие деревья: это гарантировало бы, что нейросеть “воспринимает” визуальные сцены структурно.

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

Стоит сказать, что добиться разных видов взаимодействий между нейронами сети в зависимости от входящей картинки, на самом деле, не так сложно. Можно применить механизм гейтов или тот же Attention. Но с остальным — как строить иерархические деревья с разным количеством вершин, которые будут соответствовать разным элементам — неясно.

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

Делим изображение на регионы одинакового размера. Например, 8х8. Каждому региону ставим в соответствие пять автоэнкодеров (далее я буду часто вместо слова “автоэнкодер” писать AE, чтобы было короче). Латентный вектор каждого из этих автоэнкодеров будет содержать информацию об этом регионе изображения. Но векторы разных AE будут выражать разную по структуре, уровню абстракции информацию. Поясню, что имеется в виду. Посмотрим на картинку и выделенный красным регион:

https://www.freepik.com/free-vector/teacher-collection-concept_7915184.htm#query=people illustration&position=11&from_view=keywordhttps://www.freepik.com/free-vector/teacher-collection-concept_7915184.htm#query=people illustration&position=11&from_view=keyword

Этому региону будут соответствовать пять автоэнкодеров. Латентный вектор первого AE будет содержать информацию, что в этом регионе изображена сережка. Латентный вектор второго AE будет содержать информацию, что в регионе изображено ухо. Третьего AE — что в регионе изображено лицо человека. Четвертого — что тут изображен человек, пятого — что тут изображен человек на розовом фоне.

То есть, каждый следующий автоэнкодер воспринимает регион изображения как часть все большей сущности. Первый AE концентрируется на “локальной” сути региона (на нем изображена сережка), следующий AE воспринимает регион как часть большей сущности (уха), третий — еще большей (лицо) и т.д.

Тут может возникнуть воспрос: как второй и последующий атоэнкодеры понимают, что регион — это часть уха/лица/человека, если они не имеют доступ к другим регионам? Ответ такой: в процессе обработки картинки каждый автоэнкодер обменивается информацией с другими AE. А именно, каждый автоэнкодер получает информацию от:

  • AE того же региона уровня ниже;
  • AE того же региона уровня выше;
  • AE соседних регионов того же уровня.

Таким образом, после нескольких итераций обмена информацией между автоэнкодерами латентные векторы всех AE стабилизируются и будут содержать нужную информацию.  Разумеется, чтобы этого добиться, нужно грамотно построить процесс обучения модели GLOM. Как это сделать, читайте в оригинальной статье Хинтона.

А мы заметим вот что: при таком подходе латентные векторы многих соседних AE уровней 2 и выше будут содержать одинаковую информацию. Действительно, посмотрим на четыре соседних региона, выделенных красным:

https://www.freepik.com/free-vector/teacher-collection-concept_7915184.htm#query=people illustration&position=11&from_view=keywordhttps://www.freepik.com/free-vector/teacher-collection-concept_7915184.htm#query=people illustration&position=11&from_view=keyword

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

Таким образом, AE каждого уровня буду распадаться на “островки”, внутри каждого из которых латентные векторы будут похожи. Проиллюстрировать это можно так (рисунок взят из оригинальной статьи):

https://www.cs.toronto.edu/~hinton/absps/glomfinal.pdfhttps://www.cs.toronto.edu/~hinton/absps/glomfinal.pdf

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

Мы видим, что при таким подходе автоэнкодеры образуют явную иерархическую структуру, которая очень напоминает деревья иерархии, которые мы обсуждали выше. Действительно, каждый “островок” AE — это одна вершина дерева. Вершины могут выражать разную по семантике информацию в зависимости от того, что именно изображено на картинке. И из разных картинок могут получиться разные по устройству деревья иерархии: AE каждого уровня будут по-разному собираться в “островки”.

Вот такая изящная идея пришла в голову Хинтону. Конечно, к ней есть много вопросов. Самые очевидные, на мой взгляд, эти:

  • Как выбрать количество AE для каждого региона (т.е. как понять, сколько будет уровней абстракции). Почему именно 5?
  • Как выбрать деление картинки на регионы? Какого размера они должны быть?

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

Ну а мы пойдем дальше, и обсудим идеи еще одного пионера AI: Яна ЛеКуна.

Идея #4: Мыcли Яна ЛеКуна

Если Джефф Хинтон концентрировался именно на AI для обработки картинок, то Ян ЛеКун мыслит шире: его работа посвящена устройству AGI (Artificial General Intelligence). Опять же, эта работа — не полное техническое описание модели, а набор идей и рассуждений.

В начале статьи ЛеКун приводит три главных, на его взгляд, вызова для современного AI:

  1. Как машины могут научиться представлять мир, делать предсказания и действовать, основываясь на наблюдениях? (Тут имеется в виду, что человек учится, в основном взаимодействуя с миром. Дать AI возможность учиться на основе реальных взаимодействий — слишком сложно и дорого. Хочется обучить AI, скармливая ему только наблюдения)
  2. Как научить машину рассуждать и планировать способами, основанными на вычислениях градиентов? (Тут имеется в виду, что современный AI в большинстве своем основан на нейросетях, которые обучаются с помощью градиентного спуска. Это накладывает на нейросети существенное ограничение: все функции должны быть дифференцируемы)
  3. Как машины могут научиться воспринимать мир и строить планы действий иерархически, на нескольких уровнях абстракции и в разных временных масштабах?

Получается, один из трех наибольших вызовов AI, по мнению ЛеКуна — это то, как заставить AI думать иерархически, структурно.

В статье ЛеКун предлагает идеи для решения всех этих вопросов. Мы здесь рассмотрим только ту идею, которая связана с иерархией. Это модуль JEPA (Joint Embedding Predictive Architecture). Ян называет этот модуль “центральной частью” (centerpiece) свой работы.

JEPA — это модуль для создания ассоциаций и предсказаний. В самом начале статьи мы говорили о том, как ассоциации помогают нам мыслить структурно и воспринимать мир. Еще одно свойство человеческого восприятия мира — это то, что мозг человека каждую секунду строит предсказания того, что произойдет в ближайшем будущем (хоть мы этого и не замечаем). Модуль JEPA призван внедрить в AI эти два умения. Устройство JEPA показано на картинке ниже:

https://openreview.net/pdf?id=BZ5a1r-kVsfhttps://openreview.net/pdf?id=BZ5a1r-kVsf

На вход модуль принимает два объекта — х и y. Они могут быть разных модальностей: например, картинка и звук. Далее х и y прогоняются каждый через свой енкодер. На выходе получаются два векторных представления х и y — s_x и s_y.  Потом s_x подается на вход модулю Pred, задача которого — на выходе получить s_y с волной, который будет близок к s_y (“близок” по некоторой метрике). Грубо говоря, задача модуля Pred — научиться по s_x  предсказывать s_y. Или, по-другому, ассоциировать s_x с s_y.

Теперь смотрите: пусть мы во время обучения модели подали на вход в качестве х и y два объекта, например, картинку и звук. Тогда  модуль Pred должен будет по вектору картинки s_x научиться получать вектор, близкий к вектору звука s_y. То есть, Pred должен будет выучить ассоциацию между этой картинкой и этим звуком.

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

А теперь представим, что мы подаем на вход JEPA не два объекта, а одну и ту же сцену в разные моменты времени. х — сцена в момент времени t, y — сцена в момент времени t+1. Тогда модуль Pred должен будет научиться по сцене х предсказывать, что произойдет дальше (т.е. y). Таким образом, JEPA может использоваться как модуль для получения предсказаний о будущем (ну или планирования будущего).

Конечно, чтобы JEPA работал именно так, как описано выше, нужно грамотно выстроить процесс обучения и подобрать лосс-функции. О том, как устроено обучение JEPA, читайте в разделе 4.5 статьи ЛеКуна.

Теперь: иерархия. Человеческие ассоциации между объектами могут быть совершенно разной природы, разного уровня абстракции. Возьмем, например, банан и грушу. Ассоциаций между этими объектами может быть много разных: оба объекта — фрукты, оба желтые и сладкие. Оба продаются в одном отделе супермаркета, растут на деревьях и т.д.

Точно так же и наши предсказания будущего могут быть разного уровня абстракции. Пусть, к примеру, мы едем в машине из города А в город Б. В каждый момент времени мы можем примерно понять, что произойдет в следующую секунду: где мы окажемся, повернем направо/налево и т.п. Также мы можем сделать более дальнее во времени предсказание: мы знаем, что, скорее всего, окажемся в городе Б.

Чтобы наделить модель возможностью создавать ассоциации и предсказания разной семантики и уровня, ЛеКун предлагает объединить несколько модулей JEPA в иерархию. Он назвал это Hierarchical JEPA (H-JEPA). Схематично это можно представить так:

https://openreview.net/pdf?id=BZ5a1r-kVsfhttps://openreview.net/pdf?id=BZ5a1r-kVsf

Общая идея здесь в том, что несколько слоев энкодеров (Enc1, Enc2, …) выделяют из входных объектов информацию разного уровня. Enc1 выделяет low-level информацию, содержащую больше назкоуровневых деталей. Enc2 использует выход Enc1 и фильтрует его далее: выделяет из входа более абстрактную, общую информацию, содержащую меньше деталей. Далее можно навесить еще энкодеры: Enc3 и т.д.

На основе выходов Enc1, Enc2, … модули Pred1, Pred2, … строят ассоциации/предсказания разного уровня. К примеру, Pred2 на основе выхода Enc2 строит более далекое во времени предсказание, чем предсказание Pred1, так как для более близких во времени предсказаний требуется больше деталей.  Точно так же ассоциация, построенная с помощью Pred2, будет  более абстрактной, чем с помощью Pred1.

Подробнее о H-JEPA читайте в статье (раздел 4.6). Также в разделе 4.7 приводятся идеи, как адаптировать H-JEPA и всю идею планирования на реальный мир, где присутствует очень много uncertanty и никакие предсказания не могут быть стопроцентно верными.

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

Конечно, статья ЛеКуна намного больше, чем просто модуль JEPA: Ян рассуждает об AGI в целом: о том, что AI должен имитировать “здравый смысл человека”, о том, из каких частей должна состоять архитектура и каковы в этом роли reinforcement learning, обычных нейросетей, и многое другое. Поэтому рекомендую прочитать саму статью. Но если вам все же лень, то в MIT Technology Review выходила небольшая статья о работе Яна. В ней — краткая выжимка идей ЛеКуна, немного истории о том, как эти идеи развивались, и реакция других ученых на публикацию работы.

Сложность внедрения структуры в модели

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

Люди с рождения начинают выстраивать структурное восприятие мира, но структура любой сущности в нашей голове постоянно меняется. Когда-то люди считали, что атом — это неделимая сущность, то есть, это единичный структурный элемент. Теперь же мы знаем, что атомы тоже состоят из частей: протонов, электронов, и т.д. То есть, наше структурное представление о веществе изменилось: в нем появился еще один уровень вложенности. И таких новых уровней может появляться бесконечное число: элементы могут делиться на новые структурные части.

Или, еще интереснее: мы можем делить один и тот же элемент на структурные части по-разному. Например, Москва — это, с одной стороны, набор административных районов (северный, северо-западный и т.д.). С другой, я в своей голове делю Москву на примерно такие части: “внутри Садового кольца”, “Север Москвы”, “Юг Москвы”, “Москва-Сити”, “Новая Москва” и “Юго-восток”. Это деление связано с моим опытом жизни в этом городе и его восприятием.

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

Заключение

В этой статье мы рассмотрели одно из главных отличий современного AI от человека — структурное мышление. Мы поняли, как именно структура помогает человеку воспринимать и взаимодействовать с миром и рассмотрели основные проблемы AI, которые возникают от отсутствия понимания им структуры. Ну и разобрали несколько идей, как эту структуру в нейросеть внедрить.

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

Также стоит сказать такие две вещи:

  • структурное восприятие мира — далеко не единственная преграда, отделяющая нас от создания AGI. Не менее интересная тема, к примеру — проблема causality vs correlation, т.е. Как научить AI оперировать причинно-следственными связями. Здесь проблемы начинаются прямо с порога: мы не можем даже дать нормального определения тому, что такое causality. Но это тема уже совершенно иной статьи =)
  • описанные выше идеи — не единственные на тему того, как создать AGI. Есть, к примеру, не менее интересный подход embodied intelligence. Но тема этой статьи — не AGI, а структурное мышление, поэтому другие идеи AGI мы не рассматривали.

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

Благодарности

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

Литература

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

Ссылки на некоторые работы, в которых предлагаются механизмы для внедрения структурного знания в модели машинного обучения:

Автор: Татьяна Гайнцева
Источник: https://habr.com/