Искусственный интеллект алгоритмы работы.

16 сентября 2017 в 22:08

Выращивание искусственного интеллекта на примере простой игры

  • Искусственный интеллект ,
  • Логические игры
  • Recovery Mode

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

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

Набор команд

Все началось с подготовки набора команд, которым мог располагать ИИ. Языки высокого уровня содержат сотни различных операторов. Чтобы выделить необходимый минимум, я решил обратиться к языку Ассемблер. Однако, оказалось, что и он содержит множество команд.

Мне требовалось, чтобы ИИ мог читать и выводить данные, работать с памятью, выполнять вычисления и логические операции, делать переходы и циклы. Я наткнулся на язык Brainfuck, который содержит всего 8 команд и может выполнять любые вычисления (т.е. полон по Тьюрингу). В принципе, он подходит для генетического программирования, но я пошел дальше.

Я задался вопросом: какое минимальное количество команд необходимо для реализации любого алгоритма? Как оказалось - одна!

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

Олег Мазонка пошел еще дальше, он разработал команду BitBitJump и доказал, что она полна по Тьюрингу. Команда содержит три адреса, копирует один бит из первого по второму адресу памяти и передает управление на третий адрес.

Позаимствовав идеи Олега, для упрощения работы, я разработал команду SumIfJump. Команда содержит четыре операнда: A, B, C, D и выполняет следующее: к ячейке по адресу B прибавляет данные из ячейки по адресу A, если значение получилось больше заданного*, то переходит по адресу C, иначе переходит по адресу D.

Примечание

*В данном случае использовалось 128 - половина от длинны генома.


Когда операнд A обращается к ячейке памяти N0, происходит ввод данных, а когда к ячейке N1, то вывод.

Ниже представлен код SumIfJump на FreePascal (бесплатный аналог Delphi).

Procedure RunProg(s: TData); var a, b, c, d: TData; begin Inc(NStep); if NStep > MaxStep then begin ProgResult:= "MaxStep"; Exit; end; a:= s; b:= s + 1; c:= s + 2; d:= s + 3; a:= Prog[a]; b:= Prog[b]; c:= Prog[c]; d:= Prog[d]; if a = 0 then begin ProgResult:= "Input"; Exit; end; if a = 1 then begin ProgResult:= "Output"; Exit; end; Prog[b] := Prog[b] + Prog[a]; if Prog[b] < ProgLength div 2 then RunProg(c) else RunProg(d); end;
SumIfJump реализует самомодифицируемый код. Может выполнять любые алгоритмы, доступные на обычном языке программирования. Код легко изменяется и выдерживает любые манипуляции.

Простая задача

Итак, у нашего ИИ всего одна команда. Пока крестики-нолики для него очень сложная игра, и я начал с более простой.

Бот выдает случайное число, а ИИ должен считать данные и дать ответ. Если число больше среднего (от диапазона случайных чисел), ИИ должен выдать число меньше среднего и наоборот.

Геном нашего ИИ состоит из 256 ячеек со значениями от 0 до 255. Каждое значение - это и память, и код, и адрес. Количество шагов выполнения кода ограничено 256. Операнды читаются друг за другом.

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

Популяция и отбор

Первая популяция состоит из 256 ИИ, которые начинают играть с ботом. Если ИИ совершает правильные действия, например, запросил данные на ввод, а потом что-то вывел, то ИИ получает очки. Чем больше правильных действий, тем больше очков.

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

Если в первой популяции ни один ИИ не набрал очков, формируется следующая популяция. И так до тех пор, пока какой-нибудь из ИИ не начнет совершать правильные действия и давать «правильное» потомство.

Эволюция


Между значимыми событиями проходили тысячи смен поколений. Программа была запущена в несколько потоков на Core i7. Вычисления заняли около 15 минут.

  1. Когда ИИ «лидер» совершал случайную ошибку и не набирал достаточное количество очков, популяция начинала деградировать, т.к. потомство формировалось из «второстепенных» родителей.
  2. Бывало так, что в потоке с аутсайдерами, которые топтались на месте, происходила удачная мутация, обеспечивающая взрывной рост набираемых очков. После чего этот поток становился лидером.
  3. Иногда в течение долгого времени не происходило никаких удачных мутаций, и даже 500 тыс. поколений не хватало, чтобы завершить отбор.

Заключение

В заключение я проделал то же с игрой крестики-нолики. Размер генома использовал тот, что и в первом случае. Количество шагов было увеличено до 1024, а размер популяции до 64 (для более быстрого расчета). Расчет занял несколько больше времени. Все происходило примерно по тому же сценарию.

Сначала ИИ играл против «рандомайзера». Я так назвал бота, который ходит случайным образом. Довольно быстро ИИ начал его обыгрывать, заполняя какую-либо строчку. Далее я усложнил задачу, добавив рандомайзеру немного разума: занимать линию, если есть возможность, либо защищаться. Однако, и в этом случае ИИ нашел слабости бота и стал обыгрывать его. Пожалуй, рассказ об этом - это тема для отдельной статьи.

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

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

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

Как сказал, проводя аналогичный эксперимент, блогер

Искусственный интеллект (ИИ) (англ. Artificial intelligence, AI) - это наука и разработка интеллектуальных машин и систем, особенно интеллектуальных компьютерных программ, направленных на то, чтобы понять человеческий интеллект. При этом используемые методы не обязательно биологически правдоподобны. Но проблема состоит в том, что неизвестно какие вычислительные процедуры мы хотим называть интеллектуальными. А так как мы понимаем только некоторые механизмы интеллекта, то под интеллектом в пределах этой науки мы понимаем только вычислительную часть способности достигать целей в мире.

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

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

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

· нисходящий (англ. Top-Down AI ), семиотический – создание экспертных систем, баз знаний и систем логического вывода, имитирующие высокоуровневые психические процессы: мышление, рассуждение, речь, эмоции, творчество и т. д.;

· восходящий (англ. Bottom-Up AI ), биологический – изучение нейронных сетей и эволюционных вычислений, моделирующих интеллектуальное поведение на основе более мелких «неинтеллектуальных» элементов.

Последний подход, строго говоря, не относится к науке о искусственном интеллекте в смысле, данном Дж. Маккарти, их объединяет только общая конечная цель.

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

Возможности новых машин в плане скорости вычислений оказались больше человеческих, поэтому в учёном сообществе был поставлен вопрос: каковы границы возможностей компьютеров и достигнут ли машины уровня развития человека? В 1950 году один из пионеров в области вычислительной техники, английский учёный Алан Тьюринг, в статье «Может ли машина мыслить?», дает ответы на подобные вопросы, и описывает процедуру, с помощью которой можно будет определить момент, когда машина сравняется в плане разумности с человеком, получившую название теста Тьюринга.

Тест Тьюринга – это эмпирический тест, идея которого была предложена Аланом Тьюрингом в статье «Вычислительные машины и разум», опубликованной в 1950 году в философском журнале «Mind ». Целью данного теста является определение возможности искусственного мышления близкого к человеческому. Стандартная интерпретация этого теста звучит следующим образом: «Человек взаимодействует с одним компьютером и одним человеком. На основании ответов на вопросы он должен определить, с кем он разговаривает: с человеком или компьютерной программой. Задача компьютерной программы - ввести человека в заблуждение, заставив сделать неверный выбор». Все участники теста не видят друг друга.

Существует три подхода к определению искусственного интеллекта:

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

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

3) Интуитивный подход предполагает, что ИИ будет способен проявлять поведение, не отличающееся от человеческого, причём, в нормальных ситуациях. Эта идея является обобщением подхода теста Тьюринга, который утверждает, что машина станет разумной тогда, когда будет способна поддерживать разговор с обычным человеком, и тот не сможет понять, что говорит с машиной (разговор идёт по переписке).

Определением выбраны, следующие направления исследований в области ИИ:

- Символьное моделирование мыслительных процессов.

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

- Работа с естественными языками.

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

- Накопление и использование знаний.

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

К области машинного обучения относится большой класс задач на распознавание образов. Например, это распознавание символов, рукописного текста, речи, анализ текстов. Многие задачи успешно решаются с помощью биологического моделирования. Биологическое моделирование

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

- Робототехника.

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

- Машинное творчество.

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

- Другие области исследований.

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

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

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

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

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

Развитие теории нечетких множеств. Начало развитию теории нечетких множеств положила статья «Нечеткие множества», опубликованная профессором из США Лотфи Заде, который впервые ввел понятие нечеткого множества, предложил идею и первую концепцию тео­рии, которая давала возможность нечеткого описания реальных систем. Важнейшим направлением теории нечетких множеств является нечеткая логика, применяемая для управления системами, а также в экспериментах по формированию их моделей.

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

Подобно робототехнике, нечеткая логика была с большим интересом встречена не в стране своего происхождения, США, а за ее пределами, и как следствие этого, первый опыт промышленного использования нечеткой логики - для управления котельными установками электростанций - связан с Европой. Все попытки использовать для управления паровым котлом традиционные методы, порой весьма замыслова­тые, оканчивались неудачей - настолько сложной оказалась эта нелинейная система. И только применение нечеткой логики позволило синте­зировать регулятор, который удовлетворял всем требованиям. В 1976 г. нечеткая логика была положена в основу системы автоматического управления карусельной печью в производстве цемента. Однако, первые практические результаты использования нечеткой логики, полученные в Европе и Америке, не вызвали какого-либо значительного повышения интереса к ней. Точно так же, как было с робототехникой, страной, которая первой начала повсеместное внедрение нечеткой логики, осознав ее огромный потенциал, стала Япония.

Среди созданных в Японии прикладных нечетких систем наибольшую известность получила разработанная компанией Hitachi система управления поездами метрополитена в г. Сендай. Реализация проекта велась с участием опытного машиниста, знания и опыт которого легли в основу разработанной модели управления. Система автоматически снижа­ла скорость поезда при подъезде его к станции, обеспечивая остановку в требуемом месте. Еще одним преимуществом поезда была его высокая комфортабельность, обусловленная плавностью набора и снижения скорости. Имелся и целый ряд других преимуществ по сравнению с традиционными системами управления.

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

Другим примером является автоматическая стиральная ма­шина, управляемая одним нажатием кнопки (Zimmerman 1994 г.). Подобная «целостность» вызвала интерес и была встречена с одобрением. Использование методов нечеткой логики позволило оптимизировать процесс стирки, обеспечивая автоматическое распознавание типа, объема и степе­ни загрязненности одежды, не говоря уже о том, что сведение механизма управления машиной к одной единственной кнопке позволило значительно упростить обращение с ней.

Изобретения в области нечеткой логики были воплощены японскими фирмами и во многих других устройствах, среди которых микроволновые печи (Sanyo), антиблокировочные системы и автоматические коробки передач (Nissan), интегрированное управление динамическими характеристиками автомобиля (INVEC), а также регуляторы жестких дисков в компьютерах, обеспечивающие уменьшение времени доступа к информации.

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

Система управления электронным кардиостимулятором;

Система управления механическими транспортными средствами;

Системы охлаждения;

Кондиционеры и вентиляционное оборудование;

Оборудование для сжигания мусора;

Стеклоплавильная печь;

Система контроля кровяного давления;

Диагностика опухолей;

Диагностика текущего состояния сердечно-сосудистой системы;

Система управления подъемными и мостовыми кранами;

Обработка изображений;

Быстродействующее зарядное устройство;

Распознавание слов;

Управление биопроцессорами;

Управление электродвигателями;

Сварочное оборудование и процессы сварки;

Системы управления движением транспорта;

Биомедицинские исследования;

Водоочистные сооружения.

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

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

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

Разработанны следующие системы искусственного интеллекта:

1. Deep Blue - победил чемпиона мира по шахматам. (Матч Каспаров против суперЭВМ не принёс удовлетворения ни компьютерщикам, ни шахматистам и система не была признана Каспаровым, хотя оригинальные компактные шахматные программы - неотъемлемый элемент шахматного творчества. Затем линия суперкомпьютеров IBM проявилась в проектах brute force BluGene (молекулярное моделирование) и моделирование системы пирамидальных клеток в швейцарском центре Blue Brain. Данная история - пример запутанных и засекреченных отношений ИИ, бизнеса и национальных стратегических задач.)

2. Mycin – одна из ранних экспертных систем, которая могла диагностировать небольшой набор заболеваний, причем часто так же точно, как и доктора.

3. 20q – проект, основанный на идеях ИИ, по мотивам классической игры «20 вопросов». Стал очень популярен после появления в Интернете на сайте 20q.net.

4. Распознавание речи. Системы такие как ViaVoice способны обслуживать потребителей.

5. Роботы в ежегодном турнире RoboCup соревнуются в упрощённой форме футбола.

Банки применяют системы искусственного интеллекта (СИИ) в страховой деятельности (актуарная математика) при игре на бирже и управлении собственностью. В августе 2001 года роботы выиграли у людей в импровизированном соревновании по трейдингу (BBC News, 2001). Методы распознавания образов, (включая, как более сложные и специализированные, так и нейронные сети) широко используют при оптическом и акустическом распознавании (в том числе текста и речи), медицинской диагностике, спам-фильтрах, в системах ПВО (определение целей), а также для обеспечения ряда других задач национальной безопасности.

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

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

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

Наука «о создании искусственного разума» не могла не привлечь внимание философов. С появлением первых интеллектуальных систем были затронуты фундаментальные вопросы о человеке и знании, а отчасти о мироустройстве. С одной стороны, они неразрывно связаны с этой наукой, а с другой - привносят в неё некоторый хаос. Философские проблемы создания искусственного интеллекта можно разделить на две группы, условно говоря, «до и после разработки ИИ». Первая группа отвечает на вопрос: «Что такое ИИ, возможно ли его создание, и, если возможно, то как это сделать?» Вторая группа (этика искусственного интеллекта) задаётся вопросом: «Каковы последствия создания ИИ для человечества?»

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

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

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

Наиболее горячие споры в философии искусственного интеллекта вызывает вопрос возможности мышления творения человеческих рук. Вопрос «Может ли машина мыслить?», который подтолкнул исследователей к созданию науки о моделировании человеческого разума, был поставлен Аланом Тьюрингом в 1950 году. Две основных точки зрения на этот вопрос носят названия гипотез сильного и слабого искусственного интеллекта.

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

Мысленный эксперимент «Китайская комната» Джона Сёрля - аргумент в пользу того, что прохождение теста Тьюринга не является критерием наличия у машины подлинного процесса мышления. Мышление есть процесс обработки находящейся в памяти информации: анализ, синтез и самопрограммирование. Аналогичную позицию занимает и Роджер Пенроуз, который в своей книге «Новый ум короля» аргументирует невозможность получения процесса мышления на основе формальных систем.


6. Вычислительные устройства и микропроцессоры.

Микропроцессор (МП) – это устройство, которое осуществляет прием, об­работку и выдачу информации. Конструктивно МП содержит одну или несколько интегральных схем и выполняет действия, определенные программой, записанной в памяти.(рис. 6.1)

Рисунок 6.1 – Внешний вид МП

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

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

Микропроцессорная система (МПС) – это вычислительная, контрольно-измерительная или управляющая система, основным устройством обработки информации в которой является МП. Микропроцессорная система строится из набора микропроцессорных БИС (рис. 6.2).

Рисунок 6.2 – Пример микропроцессорной системы

Генератор тактовых импульсов задаёт временной интервал, который является единицей измерения (квантом) продолжительности выполнения команды. Чем выше частота, тем при прочих равных условиях более быстродействующей является МПС. МП, ОЗУ и ПЗУ - это неотъемлемые части системы. Интерфейсы ввода и вывода - устройства сопряжения МПС с блоками ввода и вывода информации. Для измерительных приборов характерны устройства ввода в виде кнопочного пульта и измерительных преобразователей (АЦП, датчиков, блоки ввода цифровой информации). Устройства вывода обычно представляют цифровые табло, графический экран (дисплей), внешние устройства сопряжения с измерительной системой. Все блоки МПС связаны между собой шинами передачи цифровой информации. В МПС используют магистральный принцип связи, при котором блоки обмениваются информацией по единой шине данных. Количество линий в шине данных обычно соответствует разрядности МПС (количеству бит в слове данных). Шина адреса применяется для указания направления передачи данных - по ней передаётся адрес ячейки памяти или блока ввода-вывода, которые получают или передают информацию в данный момент. Шина управления служит для передачи сигналов, синхронизирующих всю работу МПС.

В основу построения МПС положены три принципа:

Магистральность;

Модульность;

Микропрограммное управление.

Принцип магистральности – определяет характер связей между функциональными блоками МПС – все блоки соединяются с единой системной шиной.

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

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

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

По назначению МП разделяют на универсальные и специализированные.

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

Специализированные микропроцессоры предназначены для решения задач лишь определенного класса. К специализированным МП относятся: сигнальные, мультимедийные МП и транспьютеры.

Сигнальные процессоры (DSP) предназначены для цифровой обработки сигналов в реальном масштабе времени (например, для фильтрации сигналов, вычис­ления свертки, вычисления корреляционной функции, ограничения и пре­образования сигнала, выполнения прямого и обратного преобразования Фурье). (рисунок 6.3) К сигнальным процесорам относятся процессоры компаний Texas Instruments - TMS320C80, Analog Devices - - ADSP2106x, Motorola -DSP560xx и DSP9600x.

Рисунок 6.3 – Пример внутренней структуры DSP

Медийные и мультимедийные процессоры предназначены для обработки аудиосигналов, графической информации, видеоизображений, а также для решения ряда задач в мультимедиакомпьютерах, игровых приставках, бытовой технике. К таковым процессорам относятся процессоры компаний MicroUnity - Mediaprocessor, Philips - Trimedia, Cromatic Reserch - Mpact Media Engine, Nvidia - NV1, Cyrix - MediaGX.

Транспьютеры предназначены для организации массовых параллельных вычислений и работы в мультипроцессорных системах. Для них характер­ным является наличие внутренней памяти и встроенного межпроцессорного интерфейса, т. е. каналов связи с другими БИС МП.

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

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

Архитектура включает:

Структурную схему МП;

Программную модель МП (описание функций регистров);

Информацию об организации памяти (емкость и способы адресации памяти);

Описание организации процедур ввода/вывода.

Фоннеймановскую архитектуру (рис. 6.4, а) предложил в 1945 году американский математик Джо фон Нейман. Ее особенностью является то, что программа и данные находятся в общей памяти, доступ к которой осуществляется по одной шине данных и команд.

Гарвардская архитектура впервые была реализована в 1944 году в релейной вычислительной машине Гарвардского университета (США). Особенностью этой архитектуры является то, что память данных и память программ раз­делены и имеют отдельные шину данных и шину команд (рис. 6.4, б), что позволяет повысить быстродействие МП системы.

Рисунок 6.4. Основные типы архитектур: (а - фоннеймановская; 6 - гарвардская)

По типу системы команд различают CISC-процессоры (Complete Instruction Set Computing) с полным набором команд (типичными представителями CISC является семейство микропроцессоров Intel x86) и RISC-процессоры (Reduced Instruction Set Computing) с сокращенным набором команд (характеризуется наличием команд фиксированной длины, большого количества регистров, операций типа регистр-регистр, а также отсутствием косвенной адресации).

Однокристальный микроконтроллер (MCU) – микросхема, предназначенная для управления электронными устройствами (рисунок 5). Типичный микроконтроллер сочетает в себе функции процессора и периферийных устройств, может содержать ОЗУ и ПЗУ. По сути, это однокристальный компьютер, способный выполнять простые задачи. Использование одной микросхемы, вместо целого набора значительно снижает размеры, энергопотребление и стоимость устройств, созданных на базе микроконтроллеров.

Рисунок 6.5 – примеры исполнения микроконтроллеров

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

На сегодняшний день популярностью у разработчиков пользуются 8-битные микроконтроллеры, совместимые с i8051 фирмы Intel, микроконтроллеры PIC фирмы Microchip Technology и AVR фирмы Atmel, шестнадцатибитные MSP430 фирмы TI, а также ARM, архитектуру которых разрабатывает фирма ARM и продаёт лицензии другим фирмам для их производства.

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

Неполный список периферии, которая может присутствовать в микроконтроллерах, включает в себя:

Универсальные цифровые порты, которые можно настраивать на ввод или вывод;

Различные интерфейсы ввода-вывода, такие как UART, I²C, SPI, CAN, USB, IEEE 1394, Ethernet;

Аналого-цифровые и цифро-аналоговые преобразователи;

Компараторы;

Широтно-импульсные модуляторы;

Таймеры, встроенный тактовый генератор и сторожевой таймер;

Контроллеры бесколлекторных двигателей;

Контроллеры дисплеев и клавиатур;

Радиочастотные приемники и передатчики;

Массивы встроенной флэш-памяти.

Искусственный интеллект: как и где изучать - отвечают эксперты

«Хочу заниматься ИИ. Что стоит изучить? Какие языки использовать? В каких организациях учиться и работать?»

Мы обратились за разъяснением к нашим экспертам, а полученные ответы представляем вашему вниманию.

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

Разные проекты требуют владения разными языками программирования. Я бы рекомендовал знать как минимум Python, Java и любой функциональный язык. Нелишним будет опыт работы с различными базами данных и распределёнными системами. Чтобы быстро изучать лучшие подходы, применяемые в индустрии, требуется знание английского языка.

Учиться рекомендую в хороших российских вузах! Например, в МФТИ, МГУ, ВШЭ есть соответствующие кафедры. Большое разнообразие тематических курсов доступно на Coursera, edX, Udacity, Udemy и других MOOC площадках. Некоторые ведущие организации имеют собственные программы подготовки в области ИИ (например, Школа анализа данных у Яндекса).

Прикладные задачи, решаемые методами ИИ, можно найти в самых разнообразных местах. Банки, финансовый сектор, консалтинг, ритейл, e-commerce, поисковые системы, почтовые сервисы, игровая индустрия, индустрия систем безопасности и, конечно, Avito – все нуждаются в специалистах различной квалификации.

Повысить Понизить

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

Где учиться, сказать сложно – все наши ребята учились сами, благо есть интернет и Google.

Повысить Понизить

Могу посоветовать с самого начала готовить себя к тому, что учиться придётся много. Вне зависимости от того, что подразумевается под «заниматься ИИ» – работа с большими данными либо нейросети; развитие технологии или поддержка и обучение некой определённой уже разработанной системы.

Давайте ради конкретики возьмём трендовую профессию Data Scientist. Что делает этот человек? В общем и целом – собирает, анализирует и готовит к употреблению большие данные. Именно те, на которых растёт и тренируется ИИ. А что должен знать и уметь Data Scientist? Статический анализ и математическое моделирование – по умолчанию, причём на уровне свободного владения. Языки – скажем, R, SAS, Python. Также хорошо бы иметь какой-никакой опыт разработки. Ну и, вообще говоря, хороший дата-сайнтист должен уверенно себя чувствовать в БД, алгоритмике, визуализации данных.

Не сказать, чтобы такой набор знаний можно было получить в каждом втором техническом вузе страны. Крупные компании, у которых в приоритете разработка ИИ, это понимают и разрабатывают под себя соответствующие учебные программы – существует, например, Школа анализа данных от Яндекса. Но вы должны отдавать себе отчёт, что это не тот масштаб, где ты приходишь на курсы «с улицы», а выходишь с них готовым джуниором. Пласт большой, и идти учиться по дисциплине имеет смысл тогда, когда уже охвачена база (математика, статистика) хотя бы в рамках вузовской программы.

Да, времени уйдёт порядочно. Но игра стоит свеч, потому что хороший Data Scientist – это очень перспективно. И очень дорого. Есть ещё и другой момент. Искусственный интеллект – это, с одной стороны, уже не просто объект ажиотажа, а вполне себе вышедшая на виток продуктивности технология. С другой стороны, ИИ всё ещё только развивается. Для этого развития требуется много ресурсов, много навыков и много денег. Пока это уровень высшей лиги. Я сейчас скажу очевидную вещь, но, если вы хотите оказаться на острие атаки и своими руками двигать прогресс, цельтесь в компании уровня Facebook или Amazon.

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

Повысить Понизить

ИИ сейчас активно развивается, и предсказывать на десять лет вперед сложно. На ближайшие два-три года будут доминировать подходы на базе нейросетей и вычислений на основе GPU. Лидером в этой области является Python с интерактивной средой Jupyter и библиотеками numpy, scipy, tensorflow.

Есть много онлайн-курсов, которые дают базовое представление об этих технологиях и общих принципах ИИ, например курс Andrew Ng. И в плане обучения этой теме сейчас в России эффективнее всего самостоятельное обучение или в локальной группе по интересам (например, в Москве я знаю о существовании как минимум пары групп, где люди делятся опытом и знаниями).

Повысить Понизить

Повысить Понизить

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

Следующий шаг - изучение проблематики вопроса. Существует огромное количество литературы, как учебной, так и специальной. Большинство публикаций по теме искусственного интеллекта и нейросетей написаны на английском языке, однако русскоязычные материалы тоже публикуются. Полезную литературу можно найти, например, в общедоступной цифровой библиотеке arxiv.org .

Если говорить о направлениях деятельности, то здесь можно выделить обучение прикладных нейронных сетей и разработку совершенно новых вариантов нейросетей. Яркий пример: существует такая очень востребованная сейчас специальность - «дата-сайентист» (Data Scientist). Это разработчики, которые, как правило, занимаются изучением и подготовкой неких наборов данных для обучения нейросетей в конкретных, прикладных областях. Резюмируя, подчеркну, что каждая специализация требует отдельного пути подготовки.

Повысить Понизить

Прежде чем приступать к узкопрофильным курсам, нужно изучить линейную алгебру и статистику. Погружение в ИИ я бы посоветовал начать с учебника «Машинное обучение. Наука и искусство построения алгоритмов, которые извлекают знания из данных», это неплохое пособие для начинающих. На Coursera стоит послушать вводные лекции К. Воронцова (подчеркну, что они требуют хорошего знания линейной алгебры) и курс «Machine Learning» Стэнфордского университета, который читает Andrew Ng, профессор и глава Baidu AI Group/Google Brain.

Основная масса пишется на Python, потом идут R, Lua.

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

Повысить Понизить

В любом деле, прежде чем приступать к проектам, хорошо бы получить теоретический базис. Есть много мест, где можно получить формальную степень магистра по этому направлению, либо повысить свою квалификацию. Так, например, Сколтех предлагает магистерские программы по направлениям «Computational Science and Engineering» и «Data Science», куда входит курсы «Machine Learning» и «Natural Language Processing». Можно также упомянуть Институт Интеллектуальных Кибернетических систем НИЯУ МИФИ, Факультет вычислительной математики и кибернетики МГУ и Кафедру «Интеллектуальные системы» МФТИ.

Если же формальное образование уже имеется, есть ряд курсов на различных платформах MOOC. Так, например, EDx.org предлагает курсы по искусственному интеллекту от Microsoft и Колумбийского университета, последний из которых предлагает микро-магистерскую программу за умеренные деньги. Хотелось бы особо отметить, что обычно сами знания вы можете получить и бесплатно, оплата идет только за сертификат, если он нужен для вашего резюме.

Если же вы хотите «глубоко погрузиться» в тему, ряд компаний в Москве предлагает недельные интенсивы с практическими занятиями, и даже предлагают оборудование для экспериментов (например, newprolab.com), правда, цена таких курсов от нескольких десятков тысяч рублей.

Из компаний, которые занимаются разработкой Искусственного Интеллекта, вы наверняка знаете Яндекс и Сбербанк, но есть и многие другие разных размеров. Например, на этой неделе Минобороны открыло в Анапе Военный инновационный технополис ЭРА, одной из тем которого является разработка ИИ для военных нужд.

Повысить Понизить

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

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

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

Тут же стоит познать методы контроля переобучения моделей (еще один «инг» - overfitting).

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

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

Совсем другой подход к изучению ИИ - он же «синяя таблетка» - начинается с поиска себя. Искусственный интеллект рождает кучу задач и целых профессий: от руководителей ИИ-проектов до дата-инженеров, способных готовить данные, чистить их и строить масштабируемые, нагруженные и отказоустойчивые системы.

Так что при «менеджерском» подходе сначала стоит оценить свои способности и бэкграунд, а уже потом выбирать, где и чему учиться. Например, даже без математического склада ума можно заниматься дизайном ИИ-интерфейсов и визуализациями для умных алгоритмов. Но приготовьтесь: уже через 5 лет искусственный интеллект начнет вас троллить и называть «гуманитарием».

Основные методы ML реализованы в виде готовых библиотек, доступных к подключению на разных языках. Наиболее популярными языками в ML сегодня являются: C++, Python и R.

Есть множество курсов как на русском, так и английском языках, таких как Школа анализа данных Яндекса, курсы SkillFactory и OTUS. Но прежде чем инвестировать время и деньги в специализированное обучение, думаю, стоит «проникнуться темой»: посмотреть открытые лекции на YouTube с конференций DataFest за прошлые годы, пройти бесплатные курсы от Coursera и «Хабрахабра».

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

Теперь вернемся к знаку «стоп». Незаметно поправив пиксели изображения - эксперты называют такое вмешательство «пертурбациями» - можно обмануть компьютер и заставить думать, что знака «стоп», в сущности, и нет.

Аналогичные исследования, проведенные в Лаборатории эволюционного искусственного интеллекта в Университете Вайоминга и Корнеллского университета, произвели довольно много оптических иллюзий для искусственного интеллекта. Эти психоделические образы абстрактных узоров и цветов ни на что не похожи для людей, но быстро распознаются компьютером в виде змей или винтовок. Это говорит о том, как ИИ может смотреть на что-то и не видеть объект, либо видеть вместо него что-то другое.

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

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

Рассмотрим спам-фильтры, автоматизированные программы, которые отсеивают любые неуклюжие электронные письма. Спамеры могут попытаться обойти этот заслон, изменив написание слов (вместо виагры - ви@гра) или добавив список «хороших слов», которые обычно встречаются в нормальных письмах: вроде «ага», «меня», «рад». Между тем спамеры могут попытаться убрать слова, которые часто появляются в спаме, например, «мобильный» или «выигрыш».

До чего могут дойти мошенники в один прекрасный день? Самоуправляемый автомобиль, обманутый наклейкой на знак «стоп», является классическим сценарием, который был придуман экспертами в этой области. Дополнительные данные могут помочь порнографии проскочить через безопасные фильтры. Другие могут попытаться увеличить количество чеков. Хакеры могут подправить код вредоносного программного обеспечения, чтобы ускользнуть от органов правопорядка.

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

«Люди манипулируют системами машинного обучения с тех пор, как они были представлены впервые», говорит Патрик Макдэниел, профессор компьютерных наук и инженерии в Пенсильванском университете. «Если люди используют эти методы, мы можем даже об этом не знать».

Этими же методами могут воспользоваться не только мошенники - люди могут скрываться от рентгеновских глаз современных технологий.

«Если вы какой-нибудь политический диссидент при репрессивном режиме и хотите проводить мероприятия без ведома спецслужб, вам может понадобиться избегание автоматических методов наблюдения на основе машинного обучения», говорит Лоуд.

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

Что же со всем этим делать? «Единственный способ полностью избежать этого - создать идеальную модель, которая будет всегда правильной», говорит Лоуд. Даже если мы смогли бы создать искусственный интеллект, который превзошел бы людей во всех отношениях, мир все еще может подсунуть свинью в неожиданном месте.

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

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

«Системы машинного обучения - инструмент для осмысления. Мы должны быть разумными и рациональными в отношении того, что мы им даем и что они нам говорят», считает Макдэниел. «Мы не должны относиться к ним как к совершенным оракулам истины».

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

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

Набор команд

Все началось с подготовки набора команд, которым мог располагать ИИ. Языки высокого уровня содержат сотни различных операторов. Чтобы выделить необходимый минимум, я решил обратиться к языку Ассемблер. Однако, оказалось, что и он содержит множество команд.

Мне требовалось, чтобы ИИ мог читать и выводить данные, работать с памятью, выполнять вычисления и логические операции, делать переходы и циклы. Я наткнулся на язык Brainfuck, который содержит всего 8 команд и может выполнять любые вычисления (т.е. полон по Тьюрингу). В принципе, он подходит для генетического программирования, но я пошел дальше.

Я задался вопросом: какое минимальное количество команд необходимо для реализации любого алгоритма? Как оказалось - одна!

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

Олег Мазонка пошел еще дальше, он разработал команду BitBitJump и доказал, что она полна по Тьюрингу. Команда содержит три адреса, копирует один бит из первого по второму адресу памяти и передает управление на третий адрес.

Позаимствовав идеи Олега, для упрощения работы, я разработал команду SumIfJump. Команда содержит четыре операнда: A, B, C, D и выполняет следующее: к ячейке по адресу B прибавляет данные из ячейки по адресу A, если значение получилось больше заданного*, то переходит по адресу C, иначе переходит по адресу D.

Примечание

*В данном случае использовалось 128 - половина от длинны генома.


Когда операнд A обращается к ячейке памяти N0, происходит ввод данных, а когда к ячейке N1, то вывод.

Ниже представлен код SumIfJump на FreePascal (бесплатный аналог Delphi).

Procedure RunProg(s: TData); var a, b, c, d: TData; begin Inc(NStep); if NStep > MaxStep then begin ProgResult:= "MaxStep"; Exit; end; a:= s; b:= s + 1; c:= s + 2; d:= s + 3; a:= Prog[a]; b:= Prog[b]; c:= Prog[c]; d:= Prog[d]; if a = 0 then begin ProgResult:= "Input"; Exit; end; if a = 1 then begin ProgResult:= "Output"; Exit; end; Prog[b] := Prog[b] + Prog[a]; if Prog[b] < ProgLength div 2 then RunProg(c) else RunProg(d); end;
SumIfJump реализует самомодифицируемый код. Может выполнять любые алгоритмы, доступные на обычном языке программирования. Код легко изменяется и выдерживает любые манипуляции.

Простая задача

Итак, у нашего ИИ всего одна команда. Пока крестики-нолики для него очень сложная игра, и я начал с более простой.

Бот выдает случайное число, а ИИ должен считать данные и дать ответ. Если число больше среднего (от диапазона случайных чисел), ИИ должен выдать число меньше среднего и наоборот.

Геном нашего ИИ состоит из 256 ячеек со значениями от 0 до 255. Каждое значение - это и память, и код, и адрес. Количество шагов выполнения кода ограничено 256. Операнды читаются друг за другом.

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

Популяция и отбор

Первая популяция состоит из 256 ИИ, которые начинают играть с ботом. Если ИИ совершает правильные действия, например, запросил данные на ввод, а потом что-то вывел, то ИИ получает очки. Чем больше правильных действий, тем больше очков.

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

Если в первой популяции ни один ИИ не набрал очков, формируется следующая популяция. И так до тех пор, пока какой-нибудь из ИИ не начнет совершать правильные действия и давать «правильное» потомство.

Эволюция


Между значимыми событиями проходили тысячи смен поколений. Программа была запущена в несколько потоков на Core i7. Вычисления заняли около 15 минут.

  1. Когда ИИ «лидер» совершал случайную ошибку и не набирал достаточное количество очков, популяция начинала деградировать, т.к. потомство формировалось из «второстепенных» родителей.
  2. Бывало так, что в потоке с аутсайдерами, которые топтались на месте, происходила удачная мутация, обеспечивающая взрывной рост набираемых очков. После чего этот поток становился лидером.
  3. Иногда в течение долгого времени не происходило никаких удачных мутаций, и даже 500 тыс. поколений не хватало, чтобы завершить отбор.

Заключение

В заключение я проделал то же с игрой крестики-нолики. Размер генома использовал тот, что и в первом случае. Количество шагов было увеличено до 1024, а размер популяции до 64 (для более быстрого расчета). Расчет занял несколько больше времени. Все происходило примерно по тому же сценарию.

Сначала ИИ играл против «рандомайзера». Я так назвал бота, который ходит случайным образом. Довольно быстро ИИ начал его обыгрывать, заполняя какую-либо строчку. Далее я усложнил задачу, добавив рандомайзеру немного разума: занимать линию, если есть возможность, либо защищаться. Однако, и в этом случае ИИ нашел слабости бота и стал обыгрывать его. Пожалуй, рассказ об этом - это тема для отдельной статьи.

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

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

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

Как сказал, проводя аналогичный эксперимент, блогер