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

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

  • Освоить основные принципы применения искусственного интеллекта в компьютерных играх.
  • Рассмотреть алгоритмы искусственного интеллекта, применимые в играх
  • Создать компьютерную игру, использующую принципы искусственного интеллекта

Обзор подходов к разработке системы ИИ

Тема искусственного интеллекта ( artificIal intelligence , AI, ИИ) будоражит умы многих начинающих программистов, разработчиков и любителей компьютерных игр. ИИ кажется многим чем-то удивительно сложным, интересным, таинственным. Действительно, ведь технологии ИИ заставляют персонажей игр действовать разумно. Однако в ИИ нет ничего таинственного. За десятилетия развития этой области знаний было разработано огромное количество алгоритмов, применимых в самых разных областях деятельности. И компьютерные игры – лишь сравнительно небольшое поле для технологий искусственного интеллекта.

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

Игровой ИИ, в первом приближении, можно разделить на два вида. Первый – наиболее очевидный – это интеллект отдельных игровых персонажей. Например, каждый танк в популярной некогда приставочной игре Battle City пытается добраться до базы игрока, уничтожить ее и его танк. Танки в игре действуют неслаженно, они не отличаются особенным умом, однако играть интересно – все дело в том, что для данной игры такой вид ИИ вполне подходит. Он не делает игру скучной.

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

Если бы действия армии в StarCraft никак не контролировались, а ИИ присутствовал лишь на уровне отдельного юнита – игра превратилась бы в скучный поиск и уничтожение врагов. А StarCraft, несмотря на серьезный возраст (порядка 10 лет) остается увлекательной игрой. Даже в однопользовательской кампании StarCraft способна очень сильно "затянуть" игрока, не говоря уже о сетевых баталиях.

Кстати, несложно заметить, что в том же StarCraft индивидуальный ИИ есть и у юнитов, которыми управляет пользователь . Например, та же команда "патрулировать", отданная пользователем, заставит существо из StarCraft послушно ходить по указанному пути. Но если на пути появится препятствие (например, игрок построит там здание, преграждающее путь ) – юнит сам решит, что ему делать. Аналогично, он самостоятельно примет решение об атаке, если в поле его видимости появятся враги.

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

Как мы уже сказали, индивидуальный ИИ юнитов играет подчиненную роль в сравнении с групповым ИИ. А может ли ИИ отдельного юнита повлиять на игру вцелом? Может – в том случае, если предусмотрено распространение успехов отдельного юнита на всех схожих. Например, какой-то юнит столкнулся с сильным противником и чудом вышел победителем в схватке. Этот юнит набрался опыта, который, благодаря групповому ИИ, может быть распространен на других юнитов. Т.е. если один юнит чему-то научился, другие, благодаря групповому ИИ, смогут перенять у него новые умения. Таким образом, индивидуальный и групповой ИИ взаимосвязаны, а в некоторых случаях и взаимозависимы.

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

На практике находят применение как детерминированные, так и недетерминированные виды ИИ. Обычно они действуют совместно. Например, для выполнения каких-то простых однозначных действий (скажем, при приближении к стене свернуть) могут применяться простые и быстрые детерминированные алгоритмы. В более сложных случаях (например – купить ли акции компании Х учитывая огромное количество параметров, напасть ли на врага, учитывая его возможности, свои возможности, наличие подкрепления и т.д.) – применяются более сложные недетерминированные алгоритмы. Частично детерминированные (например, при приближении к стене персонаж с вероятностью 50% повернет налево, с вероятностью 30% - направо, и с 20% вероятностью развернется и пойдет обратно) так же находят широкое применение в играх.

Реализация алгоритма преследования

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

Создадим новый игровой проект P8_1 на основе проекта P5_1. Будем использовать два объекта – преследователя и жертву. Преследователь будет перемещаться в сторону жертвы со скоростью, на 1 меньше, чем скорость жертвы. Если объекты столкнутся – жертва будет уничтожена.

На рис. 12.1. приведено окно Solution Explorer игрового проекта P8_1.


Рис. 12.1.

Мы используем базовый класс gBaseClass , класс для объекта-преследователя (Enemy) , класс объекта-жертвы (Me) и класс для объекта-стены. Класс объекта-стены будет нужен нам для того, чтобы изучить поведение объекта, реализующего алгоритм преследования, при столкновении с непреодолимым препятствием на пути к жертве. Мы значительно модифицировали код классов в сравнении с исходным проектом P5_1, поэтому ниже вы найдете полный код классов игры. В листинге 12.1. вы можете найти код класса Game1 .

Using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.GamerServices; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Net; using Microsoft.Xna.Framework.Storage; namespace P8_1 { ///

/// This is the main type for your game /// public class Game1: Microsoft.Xna.Framework.Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; Texture2D txtBackground; Texture2D txtEnemy; Texture2D txtMe; Texture2D txtWall; //Массив для конструирования уровня public int[,] Layer; Rectangle recBackround = new Rectangle(0, 0, 640, 512); Rectangle recSprite = new Rectangle(0, 0, 64, 64); public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } protected override void Initialize() { // TODO: Add your initialization logic here Layer = new int { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 1, 6, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 5, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; //Устанавливаем разрешение игрового окна //640х512 graphics.PreferredBackBufferWidth = 640; graphics.PreferredBackBufferHeight = 512; graphics.ApplyChanges(); base.Initialize(); } protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); Services.AddService(typeof(SpriteBatch), spriteBatch); txtBackground = Content.Load("background"); txtEnemy = Content.Load("enemy"); txtMe = Content.Load("me"); txtWall = Content.Load("wall"); //Вызываем процедуру расстановки объектов в игровом окне AddSprites(); // TODO: use this.Content to load your game content here } //Процедура расстановки объектов в игровом окне void AddSprites() { //Переменные для временного хранения адреса //объекта-игрока int a = 0, b = 0; //Просматриваем массив Layer for (int i = 0; i < 8; i++) { for (int j = 0; j < 10; j++) { //Если элемент с индексом (i,j) равен 1 - //устанавливаем в соответствующую позицию элемент с //номером 1, то есть - стену if (Layer == 1) Components.Add(new GameObj.Wall(this, ref txtWall, new Vector2(j, i), recSprite)); if (Layer == 5) Components.Add(new GameObj.Enemy(this, ref txtEnemy, new Vector2(j, i), new Rectangle(0, 0, 32, 32))); //Если обнаружен объект игрока - запишем его координаты if (Layer == 6) { a = i; b = j; } } } //Последним установим объект игрока - так он гарантированно //расположен поверх всех остальных объектов Components.Add(new GameObj.Me(this, ref txtMe, new Vector2(b, a), new Rectangle(0, 0, 32, 32))); } protected override void UnloadContent() { } protected override void Update(GameTime gameTime) { base.Update(gameTime); } protected override void Draw(GameTime gameTime) { spriteBatch.Begin(); //выведем фоновое изображение spriteBatch.Draw(txtBackground, recBackround, Color.White); //Выведем игровые объекты base.Draw(gameTime); spriteBatch.End(); } } } Листинг 12.1. Код класса Game1

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

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

Набор команд

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

Мне требовалось, чтобы ИИ мог читать и выводить данные, работать с памятью, выполнять вычисления и логические операции, делать переходы и циклы. Я наткнулся на язык 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 (для более быстрого расчета). Расчет занял несколько больше времени. Все происходило примерно по тому же сценарию.

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

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

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

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

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

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

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

Традиционно вокруг нового и неизведанного возникает множество споров. И пусть об ИИ уже написано много, он до конца не понят людьми. Отсюда и возникают претензии типа: «Он заберет сотни рабочих мест у людей!», «Он восстанет против людей!», «Да мы сами себе роем могилу!», «Рано или поздно мы не сможем им управлять!» и т.п. Масса людей представляет себе ИИ как сверхразум, который раз уж не поддается их собственному объяснению, значит непременно представляет для них угрозу. И конечно, никто и слышать не хочет, что сейчас , выходящих за пределы программы, прописанной человеком, на данный момент это технически невозможно.

А чему всё-таки возможно его обучить и как это происходит?

Методы машинного обучения искусственного интеллекта:

  1. Индуктивное обучение

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

  1. Дедуктивное обучение

Формализация данных, полученных человеком разными способами, и внесение их напрямую в базу;

Основные алгоритмы принятия решений искусственным интеллектом:

Наивный Байесовский классификатор

Один из простейших методов классификации.

Данный метод используется в технологии сканирования и распознавания лиц/сетчатки глаза/отпечатка пальца, в разделении контента в новостной ленте по темам, а также в разделении писем в Вашей электронной почте по категориям (конкретно — отделение спама);

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

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

Если не вдаваться в сущность самого метода и объяснение построения гиперплоскости и работы с ней, то SVM можно описать как алгоритмы для классификации и регрессионного анализа.

Подобная технология используется в распознавании определенных свойств объекта по фотографии (цвета волос, пола, цвета одежды), а также в генетике — в сплайсинге ДНК (отделение конкретных нуклеотидных последовательностей из РНК и их соединение в ходе процессинга РНК).

Дерево принятия решений

Способ (модель) принятия решений, используемый ежедневно каждым из нас. Именно поэтому он уже стал мемом

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

Логическая регрессия

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


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

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

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

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

Искусственный интеллект (ИИ) (англ. 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 и «Хабрахабра».

просмотров