Искусственный интеллект
Многие слышали такие слова как "элементы искусственного интеллекта, нечёткая логика, адаптивные алгоритмы". Думаю в какой-то степени каждый понимает что это такое и для чего это нужно. Но как это работает?
"Устройство думает, принимает решения исходя из окружающих условий, подстраивается под них" - скажете Вы.
Да, безусловно Вы будете правы, но это просто слова на уровне понимания результата без осознания принципа. Так каков же этот принцип?
В качестве примера возьмем для начала самый простой элемент искусственного интеллекта - нечёткую логику.
Итак, нечёткая логика. Для неё нужно как минимум 2 множества А - входных состояний, Б - выходных состояний. Представим их в виде таблиц 2Х2 (маленькие чтоб было понятнее). Соответственно множество А даёт (2^2)=4 варианта входных состояний, и Б столько же выходных состояний. Для упрощения понимания что и как, примем, что входные и выходные сигналы - дискретные (т.е. могут иметь значение 1 или 0).
______А_____ ______Б_____
_|____|____| _|____|____|
_|____|____| _|____|____|
Подключим входные сигналы (А1и А2) к множеству А следующим образом:
__________А_____
----- А2-0 А2-1
А1-0_|____|____|
А1-1_|____|____|
Сигналы А1 и А2 как мы приняли - дискретные, расположив их как показано выше мы формируем матрицу состояний, теперь любой возможной комбинации входных сигналов у нас соответствует ячейка в таблице А. Точно так же подключаем таблицу Б. В общем то на этом самые базовые элементы нечеткой логики можно считать готовыми.
Но где же сама нечеткая логика? Нет её пока! Чтобы она появилась - систему (у нас из 2х таблиц) нужно обучить. Что это значит? Как это сделать? А значит это вот что. В каждой ячейке таблицы А должен появиться адрес ячейки в таблице Б, таким образом, в зависимости от комбинации входных сигналов мы будем получать комбинацию выходных! Обратите внимание что здесь не присутствует явных элементов логики, таких как И, ИЛИ, НЕ! Именно это и является определяющим в нечеткой логике. Теперь о том, как это дело обучать.
Мы знаем, что ячейка таблицы Б соответствует комбинации выходных сигналов, это значит, что существует обратная связь, когда уже комбинация выходных сигналов соответствует ячейке. И что с того? Что это дает? А дает это возможность обучить систему и заполнить таблицу А. Самый простой способ - обучение по команде. Когда на выходе системы мы имеем нужную комбинацию, отвечающую параметрам входа, мы даем команду на запись, и адрес активной ячейки таблицы Б запишется в активную ячейку таблицы А. Это уже позволит обучить систему! Обратите внимание на то, что 2 ячейки в одной таблице не могут быть активны одновременно.
Вы скажете - это несерьезно, какой смысл в этом? Да, тыкать кнопку "научить" это не серьезно, но именно команда "Научить" является базой для дальнейшего развития системы. За формирование этой команды отвечает адаптивный алгоритм.
Что это? Это алгоритм, который в зависимости от частоты изменения условий и значений изменения условий, с учетом отклоняющих воздействий формирует команду "научить". Давайте для начала разберемся какие существуют условия в реальной жизни для его работы. Самое основное здесь как ни странно это отклоняющие воздействия! Например для автоматической коробки передач на авто, отклоняющее воздействие - водитель! Ну не сам он как таковой, а то как он давит на "газюльку и тормозилку", конечно же для нормальной коробки это лишь часть отклоняющих воздействий, но сейчас посмотрим на нашу систему.
Предположим, что мы можем изменять выходные сигналы независимо (формировать отклоняющие воздействия), ну бывает же что условия меняются. Но как по этим изменениям учить? Для этого понадобится матрица В имеющая уже 4*4=16 ячеек которую мы назовем "коэффициенты весов". Задача этой матрицы (заполненной нами или специальным алгоритмом - другим адаптивным) учитывать значимость ("вес") влияния каждой ситуации на входах и выходах, на изменение адресации в таблице А. При этом в ситуации когда ситуация на входе и выходе соответствуют установившейся логике учитывают не табличный вес а 0.
Для создания простейшего адаптивного алгоритма примем, что коэффициент веса соответствует количеству повторений нештатной ситуации, и то, что система знает, что так сделали Мы, а не случилось само. Сделаем еще таблицу Г в размером как таблица В, в которой в соответствующих ячейках будут храниться счетчики нештатных ситуаций. И так, мы заполнили матрицу весов сами, и тут у нас вышла нештатная ситуация №1 (мы сделали). Пусть она соответствует ячейке 1 в таблице В, а в этой ячейке записан коэффициент 2. Система посчитала, вышло 1 раз, а для обучения надо 2 раза, команду "научить" не выдала. Дальше все работает стабильно, как надо, но мы сделали нештатную ситуацию №2! Пусть она соответствует ячейке 2 в таблице В, а в этой ячейке тоже записан коэффициент 2. Система запомнила что по 1 раз у нас уже были обе ситуации, но команд не выдавала. И снова все работает как надо. Но мы опять сделали ситуацию №2. Что же произойдет теперь? Система (наш адаптивный алгоритм) полезет в ячейку 2 таблицы В, сравнит ее значение со счетчиком (ячейка 2 таблицы Г) возникновений этой ситуации, посмотрит что они равны, и сделает вот что. Первое - выдаст команду "научить", Второе - Сбросит счетчик. Как мы помним, 2 ячейки одной таблицы не могут быть активными одновременно, соответственно переписав старый адрес ячейки Б(х,у) в таблице А на новый адрес Б(нх,ну) - наша система научилась сама! Теперь она знает, что при такой ситуации нужно уже делать по новому. А если еще раз возникнет ситуация 1 - она переучится и под нее.
Но чтобы наша система стала еще умнее, создадим еще 2 таблицы Д и Е размером как В. В таблице Д у нас будут таймеры, в таблице Е - максимально допустимые значения времени слежения за изменением ситуации. А работать они будут так. Если создана нештатная ситуация, соответствующий таймер начинает считать, когда он достигает своего максимального (указанного в той же ячейке таблицы Е) значения, он сбрасывает соответствующий счетчик в таблице Г и останавливается. Таким образом, к условию формирования команды добавится то, что счетчик ситуаций должен достигнуть значения равного его коэффициенту веса, за период времени указанный в таблице Е. Это значит, что теперь мы сможем распознавать единичную необходимость изменений и абсолютную необходимость, когда изменения нужно принять как правило.

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