Популярно об ИИ
Продолжение. Начало в КГ №19
М-да, далеко не всегда хорошо, когда гуманитарные и точные науки сливаются в рамках некоей одной дисциплины. Искусственный интеллект — как раз такой случай. Хотя его можно по праву считать и сливками современной научной мысли в целом.
С одной стороны, очевидно, что развитие искусственного интеллекта до некоего среднего уровня дает огромный прирост в сфере технологий и, соответственно, качества человеческой жизни. А дальше я продолжу в стиле телепрограммы "Максимум":
— Но к чему мы придем, когда ИИ станет во много раз мощнее и оптимальнее, когда достигнет уровня своего совершенства и благодаря вложенным алгоритмам самообучения начнет развиваться дальше?
— Куда теперь направляется корабль, именуемый "современными технологиями"?
Журналистов винить не стоит — это их хлеб. А наш с вами хлеб — компьютерные технологии, а если разбираться в них хорошо, то и хлеб с маслом. Сегодня от "розовой" теории с тестами Тьюринга и законами Айзимова мы постепенно будем переходить к практике, а именно в достаточно популярной форме рассмотрим основные принципы и алгоритмы, применяемые при разработке конкретных систем ИИ.
Для чего нужно изучать ИИ как предмет?
Искусственный интеллект уже глубоко проник во многие передовые решения от ведущих разработчиков, и дело не только в составлении деревьев для нахождения оптимальных решений или реализации обучения с подкреплением. Специалисты из этой области сейчас востребованы и по ряду других причин. Например, очевидно, что программисты зачастую привыкли действовать по изложенным шаблонам, готовым алгоритмам, например, прочитав какую-либо книгу и зная, что можно поступать только так, а не иначе. Иногда они и вариантов других просто не рассматривают. Хотя тот же программист AI (AI = ИИ) помимо знания самих алгоритмов может их оценивать. Например, как вы думаете, время работы алгоритма и его быстродействие — это одно и то же? С первого взгляда может показаться, что да. Но на самом деле очень многое зависит от ряда сопутствующих факторов. Например, какие объемы данных нужно обрабатывать, что за вычисления производятся и т.д. Алгоритм, прекрасно работающий, вернее, не вызывающий проблем для малого потока входящей информации, при росте ее объема может оказаться реальной проблемой, то есть самым слабым местом. И, наоборот, очень часто можно встретить подход, когда для обработки небольшого количества данных используются несоизмеримо более мощные нагруженные решения, стандартные технологии, часть из которых не остается незадействованной. Это не так критично, хотя напоминает стрельбу из пушки по воробьям. То есть одним из ключевых понятий является оптимальность решения. Конечно, можно было бы сказать о соизмеримости сложности задачи и задействованных на ее решение ресурсов, но это весьма условно. Ведь очень многое зависит от первоначальной постановки самой задачи, ее правильного описания, оптимального разделения сложного на ряд простых. Причем чем сложнее задача, тем меньше шансов на то, что у нее будет только одно единственно верное решение. А можно ли считать задачу решенной до конца, если у нее множество вариантов решений? А правильно ли сделана постановка самой задачи, или на нее можно посмотреть совсем с другой стороны? Кстати, от постановки задачи и последующего составления технического задания очень многое зависит. Как видите, все достаточно интересно. Поэтому продолжим.
Какой базис знаний необходимо иметь?
Искусственным интеллектом занимаются как философы, так и математики. Что касается практического применения, то вам пригодятся знания в области высшей математики на уровне второго курса технического вуза, принципов логики и программирования. Естественно, приветствуется абстрактное мышление, хотя в перечисленных дисциплинах без него никак, так что это априори.
Немного об агентах
Практически любой учебник или книга по ИИ содержит обширную информацию об агентах. Под ними понимаются некие структурные модули, способные принимать входную информацию за счет собственной сенсорной системы, на этой базе самостоятельно вырабатывать решения и производить необходимые действия. Мы будем рассматривать агента как соединение двух ключевых элементов: архитектуры и программы. Под архитектурой в данном случае понимается система реализации выбранных действий, то есть исполнитель. Например, автономный модуль вождения (робот-водитель) в гонках DARPA Urban Challenge должен иметь автомобиль. Программа же отвечает за все остальное. Агент должен иметь некий базис знаний, которые в него вкладывает разработчик, и при необходимости способность к обучению. Он может быть автономным или полуавтономным, при этом агент находится в определенной среде, из-за чего его часто называют "внедренным" или "погруженным". Среда — это определенный микромир агента, с которым он взаимодействует, получает необходимые данные или условия, производит реакции. Причем поступающие данные могут отображаться как в полном, так и в неполном объеме для выработки решений. На самом деле практически всегда получается второй вариант, что усугубляет разработку систем ИИ. Агент программируется на определенное действие, которое должно быть наиболее рациональным и полезным. А можно ли учесть все факторы? Например, в гонках DARPA Urban Challenge автономно управляемый автомобиль должен ехать по дороге, объезжая другие машины. Но… Вдруг у кого-то — данного агента или соседнего автомобиля — лопнет колесо либо случится какая-то неполадка? На самом деле нужно найти наиболее часто встречающиеся ситуации. Например, какова вероятность того, что на робота упадет метеорит или кирпич с соседней стройки? Достаточно малая, а вот выбоина на дороге — вещь гораздо более частая.
Существует и еще одна проблема, выраженная в борьбе с переизбытком входных и/или обрабатываемых данных. Например, если бы тот же робот-водитель из DARPA Urban Challenge вел запись на видеокамеру, сохранял эти данные у себя в качестве "опыта" в виде таблицы и анализировал их, то ему в один прекрасный момент просто бы не хватило физической памяти и ресурсов для анализа. Поэтому основной задачей разработчиков является минимизация таблицы с данными за счет создания специально исполняемого кода, их заменяющего. Немного непонятно? Вспомните таблицы умножения на обратной стороне школьных тетрадей либо другие таблицы с квадратными корнями, синусами и косинусами. Сколько они занимают места, если считать по символам и строкам? И ими активно пользовались до появления калькуляторов, в которых все вычисления реализуются несколькими строчками кода. В современных звуковых технологиях самые качественные программные инструменты сделаны методом сэмплирования, то есть нота за нотой записанные в pcm-файлы живых прототипов. Занимают такие инструменты как минимум 4,7 Гб дискового пространства, работа с ними требует больших вычислительных мощностей. А недавно появилось новое направление — инструменты полноценно математически моделируются. Одна такая программа, содержащая ключевые алгоритмы по звукоизвлечению с учетом всех нюансов живого исполнения, занимает 15 Мб! В киноиндустрии распространена психоакустика, то есть это целая дисциплина, которая изучает восприятие человека. Согласно ей, для того, чтобы показать тот же дождь, не нужно устраивать громкий "звук вокруг" и, тем более, обливать человека сверху водой. Достаточно воспроизвести шум дождя лишь намеком, а саму картину до полноты восприятия человек достроит самостоятельно. То есть у нас такой алгоритм присутствует априори, мы можем делать выводы, руководствуясь минимумом входных данных. А как быть агенту? Иметь таблицу с множеством записанных различных звуков дождя для сравнения с поступающими данными? Нет, гораздо проще, если у него будет записана формула звука дождя на уровне кода. Вот именно это и является ключевым элементом в построении систем ИИ.
Какими бывают программные агенты
Для начала поговорим о рефлексных агентах. Как ясно из их названия, это модули незамедлительно реагирующие на определенное условие действием, примитивы. В основном выделяют два их типа:
. Простейшие. Они не хранят никаких данных, и основная их задача — реакция на конкретное зафиксированное текущее событие. Например, светофор включился на красный — робот-водитель остановился. Кстати, именно это называют простейшими ИИ, а программисты AI в играх шутливо произносят: "if… then…". Как вы понимаете, событие должно быть наблюдаемым.
. Основанные на модели мира. Главным образом агентом учитывается текущее состояние его окружения (мира), и он "знает" последствия своих действий. Под текущим состоянием окружения нужно понимать конкретную ситуацию для данного момента — например, какая-то машина решила обогнать робота-водителя. Соответственно, она к нему быстро приближается. Он анализирует ситуацию вокруг. Под "последствиями своих
действий" на этом примере понимается, что при команде поворота автономноуправляемый автомобиль переместится в другой ряд — программа об этом знает заранее, — но, если там едет другая машина, то может быть авария. То есть в данном случае мы говорим о нескольких строках "if… then… else…" И есть некоторый элемент предсказания дальнейшего развития ситуации. Также есть и более развитые, обычные агенты. Среди них ключевыми являются:
. Основанные на цели. В данном случае все достаточно просто: есть цель, которую нужно достичь, для чего нужно выработать наиболее оптимальное решение. То есть ключевыми словами в данном случае будут поиск и планирование. В отличие от рефлексных агентов, данный тип думает: "а что будет, если?", перебирая варианты решений. То есть в каждой ситуации он ведет себя по-разному, хотя настроен на оптимальный вариант. Например, если робот-водитель должен прибыть в определенный конечный пункт, то он выбирает кратчайший путь.
. Основанные на полезности. В этом варианте речь идет, прежде всего, о варианте, где предусмотрено несколько целей, которые могут быть заданы как явно — например, конечные точки маршрута, — так и не совсем — например, безопасность прохождения маршрута и скорость его прохождения. Агент самостоятельно выставляет оценку, выбирая наиболее предпочтительные варианты. Например, если ехать по быстрому маршруту, то это небезопасно, следовательно, до конечного пункта можно и вовсе не добраться. С точки зрения полезности лучше безопасный вариант. Но если в его рамках не уложиться по времени, необходимо искать компромисс.
И последние агенты из нашего списка — обучающиеся. Структурно они включают четыре компонента: критикующего, генератора проблем, обучающегося и производительного. Два последних являются ключевыми. Под производительным подразумевается все то, что мы раньше считали агентами (любой из четырех типов). Критикующий элемент наблюдает за его работой и сравнивает с производственными стандартами, оценочные данные он направляет обучающемуся. Этот компонент, в свою очередь, вырабатывает решение о том, что именно нужно улучшить для повышения производительности или его качества при условии плохой оценки. А генератор проблем, в свою очередь, выдает задачи для решения. Чтобы было более понятно… Например, нам нужен движок по автоматическому доказательству теорем. Либо нам нужно "накачать" искусственный интеллект робота-водителя.
Конечно, вариант с четырьмя компонентами — это только один из возможных в применении. Методик по обучению сейчас существует несколько. Причем в данном случае технологии находятся на том уровне, что производительный компонент не "переучивается", а просто заменяется на более совершенный. То есть переделывается с помощью человека.
Промежуточное завершение
На самом деле понятие агентов весьма размыто, как, в принципе, и само определение искусственного интеллекта. Чаще всего, читая в книгах об агентах, вы можете встретить путаницу, связанную с макро- и микроуровнями. То есть под агентом можно понимать "мозг" робота, какую-либо программу в целом — вариант 1. А также маленький программный модуль, который обрабатывает события, передаваемые с одного из датчиков, или просто отвечающий за определенный этап вычислений — вариант 2. Хотя само понятие весьма удобно в применении.
Продолжение следует.
Кристофер, christopher@tut.by
М-да, далеко не всегда хорошо, когда гуманитарные и точные науки сливаются в рамках некоей одной дисциплины. Искусственный интеллект — как раз такой случай. Хотя его можно по праву считать и сливками современной научной мысли в целом.
С одной стороны, очевидно, что развитие искусственного интеллекта до некоего среднего уровня дает огромный прирост в сфере технологий и, соответственно, качества человеческой жизни. А дальше я продолжу в стиле телепрограммы "Максимум":
— Но к чему мы придем, когда ИИ станет во много раз мощнее и оптимальнее, когда достигнет уровня своего совершенства и благодаря вложенным алгоритмам самообучения начнет развиваться дальше?
— Куда теперь направляется корабль, именуемый "современными технологиями"?
Журналистов винить не стоит — это их хлеб. А наш с вами хлеб — компьютерные технологии, а если разбираться в них хорошо, то и хлеб с маслом. Сегодня от "розовой" теории с тестами Тьюринга и законами Айзимова мы постепенно будем переходить к практике, а именно в достаточно популярной форме рассмотрим основные принципы и алгоритмы, применяемые при разработке конкретных систем ИИ.
Для чего нужно изучать ИИ как предмет?
Искусственный интеллект уже глубоко проник во многие передовые решения от ведущих разработчиков, и дело не только в составлении деревьев для нахождения оптимальных решений или реализации обучения с подкреплением. Специалисты из этой области сейчас востребованы и по ряду других причин. Например, очевидно, что программисты зачастую привыкли действовать по изложенным шаблонам, готовым алгоритмам, например, прочитав какую-либо книгу и зная, что можно поступать только так, а не иначе. Иногда они и вариантов других просто не рассматривают. Хотя тот же программист AI (AI = ИИ) помимо знания самих алгоритмов может их оценивать. Например, как вы думаете, время работы алгоритма и его быстродействие — это одно и то же? С первого взгляда может показаться, что да. Но на самом деле очень многое зависит от ряда сопутствующих факторов. Например, какие объемы данных нужно обрабатывать, что за вычисления производятся и т.д. Алгоритм, прекрасно работающий, вернее, не вызывающий проблем для малого потока входящей информации, при росте ее объема может оказаться реальной проблемой, то есть самым слабым местом. И, наоборот, очень часто можно встретить подход, когда для обработки небольшого количества данных используются несоизмеримо более мощные нагруженные решения, стандартные технологии, часть из которых не остается незадействованной. Это не так критично, хотя напоминает стрельбу из пушки по воробьям. То есть одним из ключевых понятий является оптимальность решения. Конечно, можно было бы сказать о соизмеримости сложности задачи и задействованных на ее решение ресурсов, но это весьма условно. Ведь очень многое зависит от первоначальной постановки самой задачи, ее правильного описания, оптимального разделения сложного на ряд простых. Причем чем сложнее задача, тем меньше шансов на то, что у нее будет только одно единственно верное решение. А можно ли считать задачу решенной до конца, если у нее множество вариантов решений? А правильно ли сделана постановка самой задачи, или на нее можно посмотреть совсем с другой стороны? Кстати, от постановки задачи и последующего составления технического задания очень многое зависит. Как видите, все достаточно интересно. Поэтому продолжим.
Какой базис знаний необходимо иметь?
Искусственным интеллектом занимаются как философы, так и математики. Что касается практического применения, то вам пригодятся знания в области высшей математики на уровне второго курса технического вуза, принципов логики и программирования. Естественно, приветствуется абстрактное мышление, хотя в перечисленных дисциплинах без него никак, так что это априори.
Немного об агентах
Практически любой учебник или книга по ИИ содержит обширную информацию об агентах. Под ними понимаются некие структурные модули, способные принимать входную информацию за счет собственной сенсорной системы, на этой базе самостоятельно вырабатывать решения и производить необходимые действия. Мы будем рассматривать агента как соединение двух ключевых элементов: архитектуры и программы. Под архитектурой в данном случае понимается система реализации выбранных действий, то есть исполнитель. Например, автономный модуль вождения (робот-водитель) в гонках DARPA Urban Challenge должен иметь автомобиль. Программа же отвечает за все остальное. Агент должен иметь некий базис знаний, которые в него вкладывает разработчик, и при необходимости способность к обучению. Он может быть автономным или полуавтономным, при этом агент находится в определенной среде, из-за чего его часто называют "внедренным" или "погруженным". Среда — это определенный микромир агента, с которым он взаимодействует, получает необходимые данные или условия, производит реакции. Причем поступающие данные могут отображаться как в полном, так и в неполном объеме для выработки решений. На самом деле практически всегда получается второй вариант, что усугубляет разработку систем ИИ. Агент программируется на определенное действие, которое должно быть наиболее рациональным и полезным. А можно ли учесть все факторы? Например, в гонках DARPA Urban Challenge автономно управляемый автомобиль должен ехать по дороге, объезжая другие машины. Но… Вдруг у кого-то — данного агента или соседнего автомобиля — лопнет колесо либо случится какая-то неполадка? На самом деле нужно найти наиболее часто встречающиеся ситуации. Например, какова вероятность того, что на робота упадет метеорит или кирпич с соседней стройки? Достаточно малая, а вот выбоина на дороге — вещь гораздо более частая.
Существует и еще одна проблема, выраженная в борьбе с переизбытком входных и/или обрабатываемых данных. Например, если бы тот же робот-водитель из DARPA Urban Challenge вел запись на видеокамеру, сохранял эти данные у себя в качестве "опыта" в виде таблицы и анализировал их, то ему в один прекрасный момент просто бы не хватило физической памяти и ресурсов для анализа. Поэтому основной задачей разработчиков является минимизация таблицы с данными за счет создания специально исполняемого кода, их заменяющего. Немного непонятно? Вспомните таблицы умножения на обратной стороне школьных тетрадей либо другие таблицы с квадратными корнями, синусами и косинусами. Сколько они занимают места, если считать по символам и строкам? И ими активно пользовались до появления калькуляторов, в которых все вычисления реализуются несколькими строчками кода. В современных звуковых технологиях самые качественные программные инструменты сделаны методом сэмплирования, то есть нота за нотой записанные в pcm-файлы живых прототипов. Занимают такие инструменты как минимум 4,7 Гб дискового пространства, работа с ними требует больших вычислительных мощностей. А недавно появилось новое направление — инструменты полноценно математически моделируются. Одна такая программа, содержащая ключевые алгоритмы по звукоизвлечению с учетом всех нюансов живого исполнения, занимает 15 Мб! В киноиндустрии распространена психоакустика, то есть это целая дисциплина, которая изучает восприятие человека. Согласно ей, для того, чтобы показать тот же дождь, не нужно устраивать громкий "звук вокруг" и, тем более, обливать человека сверху водой. Достаточно воспроизвести шум дождя лишь намеком, а саму картину до полноты восприятия человек достроит самостоятельно. То есть у нас такой алгоритм присутствует априори, мы можем делать выводы, руководствуясь минимумом входных данных. А как быть агенту? Иметь таблицу с множеством записанных различных звуков дождя для сравнения с поступающими данными? Нет, гораздо проще, если у него будет записана формула звука дождя на уровне кода. Вот именно это и является ключевым элементом в построении систем ИИ.
Какими бывают программные агенты
Для начала поговорим о рефлексных агентах. Как ясно из их названия, это модули незамедлительно реагирующие на определенное условие действием, примитивы. В основном выделяют два их типа:
. Простейшие. Они не хранят никаких данных, и основная их задача — реакция на конкретное зафиксированное текущее событие. Например, светофор включился на красный — робот-водитель остановился. Кстати, именно это называют простейшими ИИ, а программисты AI в играх шутливо произносят: "if… then…". Как вы понимаете, событие должно быть наблюдаемым.
. Основанные на модели мира. Главным образом агентом учитывается текущее состояние его окружения (мира), и он "знает" последствия своих действий. Под текущим состоянием окружения нужно понимать конкретную ситуацию для данного момента — например, какая-то машина решила обогнать робота-водителя. Соответственно, она к нему быстро приближается. Он анализирует ситуацию вокруг. Под "последствиями своих
действий" на этом примере понимается, что при команде поворота автономноуправляемый автомобиль переместится в другой ряд — программа об этом знает заранее, — но, если там едет другая машина, то может быть авария. То есть в данном случае мы говорим о нескольких строках "if… then… else…" И есть некоторый элемент предсказания дальнейшего развития ситуации. Также есть и более развитые, обычные агенты. Среди них ключевыми являются:
. Основанные на цели. В данном случае все достаточно просто: есть цель, которую нужно достичь, для чего нужно выработать наиболее оптимальное решение. То есть ключевыми словами в данном случае будут поиск и планирование. В отличие от рефлексных агентов, данный тип думает: "а что будет, если?", перебирая варианты решений. То есть в каждой ситуации он ведет себя по-разному, хотя настроен на оптимальный вариант. Например, если робот-водитель должен прибыть в определенный конечный пункт, то он выбирает кратчайший путь.
. Основанные на полезности. В этом варианте речь идет, прежде всего, о варианте, где предусмотрено несколько целей, которые могут быть заданы как явно — например, конечные точки маршрута, — так и не совсем — например, безопасность прохождения маршрута и скорость его прохождения. Агент самостоятельно выставляет оценку, выбирая наиболее предпочтительные варианты. Например, если ехать по быстрому маршруту, то это небезопасно, следовательно, до конечного пункта можно и вовсе не добраться. С точки зрения полезности лучше безопасный вариант. Но если в его рамках не уложиться по времени, необходимо искать компромисс.
И последние агенты из нашего списка — обучающиеся. Структурно они включают четыре компонента: критикующего, генератора проблем, обучающегося и производительного. Два последних являются ключевыми. Под производительным подразумевается все то, что мы раньше считали агентами (любой из четырех типов). Критикующий элемент наблюдает за его работой и сравнивает с производственными стандартами, оценочные данные он направляет обучающемуся. Этот компонент, в свою очередь, вырабатывает решение о том, что именно нужно улучшить для повышения производительности или его качества при условии плохой оценки. А генератор проблем, в свою очередь, выдает задачи для решения. Чтобы было более понятно… Например, нам нужен движок по автоматическому доказательству теорем. Либо нам нужно "накачать" искусственный интеллект робота-водителя.
Конечно, вариант с четырьмя компонентами — это только один из возможных в применении. Методик по обучению сейчас существует несколько. Причем в данном случае технологии находятся на том уровне, что производительный компонент не "переучивается", а просто заменяется на более совершенный. То есть переделывается с помощью человека.
Промежуточное завершение
На самом деле понятие агентов весьма размыто, как, в принципе, и само определение искусственного интеллекта. Чаще всего, читая в книгах об агентах, вы можете встретить путаницу, связанную с макро- и микроуровнями. То есть под агентом можно понимать "мозг" робота, какую-либо программу в целом — вариант 1. А также маленький программный модуль, который обрабатывает события, передаваемые с одного из датчиков, или просто отвечающий за определенный этап вычислений — вариант 2. Хотя само понятие весьма удобно в применении.
Продолжение следует.
Кристофер, christopher@tut.by
Компьютерная газета. Статья была опубликована в номере 20 за 2008 год в рубрике технологии