Искусственный интеллект: основные задачи и методы на примерах из жизни

Обложка поста

Рассказывает Юрий Дубровских

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

Экспертные системы

Одно из центральных понятий во многих отраслях искусственного интеллекта — знание. Это информация вместе со способом её интерпретации. Если система не только обладает информацией, но и способна объяснить её, это значит что она «понимает» или обладает знанием.

Существуют различные предметные области, в том числе очень узкие. Эксперты в этих областях способны делать выводы, основываясь на входных данных и своих знаниях. Опытный гонщик может по звуку двигателя определить марку проезжающего автомобиля. Доктор, только посмотрев на симптомы пациента, может поставить диагноз. Обычным людям, не экспертам, это сложнее, а иногда и вовсе не под силу. Чем специфичнее и у́же предметная область, тем сложнее найти в ней эксперта. Но что, если собрать знания экспертов и растиражировать их? Например, доктор знает, что, если у пациента волчанка, ему нужно дать стероиды. К сожалению, не все больные этим заболеванием могут попасть в крупный медицинский центр. Но что, если даже сельская медсестра сможет назначить верное лечение, просто запустив компьютер и введя симптомы пациента?

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

Основная проблема при создании экспертных систем – построение базы знаний. Во-первых, по разным причинам получить от экспертов знания бывает очень непросто. Во-вторых, в выводах эксперта часто присутствует так называемый здравый смысл – то, что само собой разумеется.

Такие сведения могут не формулироваться экспертом, но при этом влиять на решение.

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

Нейронные сети

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

Конечно, это всё грубо и упрощённо. Теория нейронных сетей за последнее время продвинулась далеко вперёд. Есть множество видов нейросетей, появилась куча фреймворков для удобной работы с ними и очень много теоретической информации. Поэтому подробно в эту тему я углубляться не буду, скажу только, что после построения нейросети необходимо тонко настроить её параметры, чтобы она выдавала правильный результат при определённых данных на входе. Для такой настройки проводят обучение сети. На вход подают много различных данных для распознавания, проверяют результаты и корректируют работу сети. Этот этап может быть довольно объёмным и сложным, мы ведь тоже не сразу выучили все цифры. Но за счёт этого нейросети могут решать ещё одну задачу искусственного интеллекта — машинное обучение. Что если по мере работы компьютер мог бы учиться и совершенствоваться? С каждой новой шахматной партией играть всё лучше и лучше? С нейросетями он это может.

Вывод на фреймах

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

  1. Если ситуация опасная, зайти в замок (в нём легче обороняться).
  2. Если враг слабый — напасть на него.
  3. Если силы примерно равны, оценить возможность победы над монстром (артефакт может дать преимущество).

Отлично, компьютер теперь мог бы принять решение. Ему только нужно знать, «опасная» ситуация или нет, «слабый» враг или нет. Это нечёткие понятия, у них нет явных границ. Кроме того, необходимо оценить всю ситуацию. А ситуации могут быть очень разными, всего заранее не предусмотришь. Психологи говорят, что человек может на основе своего опыта строить выводы и предположения об объектах, которые видит впервые. Например, если мы входим в помещение в здании, мы уже заранее классифицируем его как комнату, предполагаем, что в ней будет 4 стены, пол и потолок. Затем мы уже можем заметить, что одна стена в ней прозрачная, а потолок выше, чем обычно, но это всё равно комната.

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

Фрейм в данном контексте — это, говоря очень упрощённо, набор ячеек, описывающих ситуацию. В каждой ячейке может быть понятие, величина или другой фрейм. Часть фрейма означивается имеющимися данными. Таким образом, фреймы выстраиваются в цепочки, в одном конце которых возможные решения, а в другом — исходные данные. Если бо́льшая часть фрейма определена, принимается и остальная его часть. Например, для каждого возможного решения в нашей игре есть фрейм.  Пусть фрейм решения такой:

  • действие → зайти в замок;
  • опасная ситуация → да. «Опасная» ситуация — это тоже фрейм, примерно такой:
    • расстояние до врага → малое;
    • сила врага → большая.

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

Генетические алгоритмы

Однако бывают ситуации, когда мы не знаем возможных решений. Мы просто ищем такое решение, которое будет оптимальным. То есть ищем минимум или максимум в нечёткой задаче. В примере с рыцарем мы хотим получить максимальную выгоду и понести минимум потерь. Здесь на помощь приходят генетические алгоритмы. Это тоже метод искусственного интеллекта, однако подражает он не психике и не мозгу, а процессу эволюции. Для применения генетического алгоритма нужно вывести функцию приспособленности. Это та функция, максимум которой мы будем искать. Аргументы функции — это особи популяции. Каждая особь имеет свой набор генов — это могут быть двоичные или десятичные числа или другие объекты. Сначала мы создаём начальную популяцию. К каждой особи применяется функция приспособленности. Наиболее приспособленные особи скрещиваются (это называется кроссинговер), образуя новую популяцию. В итоге, через некоторое время, или через несколько поколений, мы получаем популяцию, которая имеет наибольшую приспособленность. То есть мы находим максимум функции приспособленности.

Однако это локальный максимум. Может быть такое, что график функции идёт вверх, потом вниз, а потом сильно вверх. Генетический алгоритм может выдать нам первое значение, потому что особи, которые приближались к настоящему максимуму, попадали в яму на графике и не давали потомства. Чтобы избежать этого, у особей производятся мутации, то есть случайные изменения генов. Это позволяет перепрыгнуть через яму и добраться до настоящего максимума.

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

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

Семантические сети

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

Создание семантических сетей начинается с описания схемы данных, то есть задаётся, какие классы объектов существуют и какие между ними связи. Это называется метаданными, то есть данными о данных.

Затем задаются всевозможные конкретные объекты, которые отвечают этим связям.

Рассмотрим небольшой пример семантической сети в предметной области постановки диагнозов. Для начала создаём метаданные. Есть сущность пациент, у него может быть множество жизненных показателей. Жизненный показатель — это, в нашем очень упрощённом случае, название и значение. Сущность заболевание — это набор симптомов. Симптом — это диапазон значений жизненного показателя.

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

  1. Температура — это Жизненный показатель.
  2. Простуда — это Заболевание.
  3. Больше 37 градусов — это Симптом.

Связываем: Простуда имеет Симптом значения Температуры больше 37. Теперь заведём пациента, скажем Полуэкта. Его температура тела сегодня — 38 градусов. На этом всё, остаётся написать механизм логического вывода, который будет проходить по сети и искать, симптомы каких заболеваний есть у пациентов. В результате программа выдаст, что у Полуэкта, возможно, простуда. Опять же, этот механизм может быть универсален, можно написать его один раз, а затем только пополнять базу знаний для постановки новых диагнозов.

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

Кроме логических выводов, семантические сети можно использовать для генерации типичных объектов, например, эпизодов сериала.

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

Заключение

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

Не смешно? А здесь смешно: @ithumor