Поведение цифровых технологий и программ алгоритмически противоположно работе нашего мозга. Они расчленяют время и пространство на дискретные отсчёты, в то время как мы всё тщательно собираем по крупицам и интегрируем или, проще говоря, суммируем.
Например, в звуке программно-аппаратными средствами записывается сложная звуковая волна в виде дискретных цифровых отсчётов. После она может делиться на ряд простых синусоид и косинусоид с помощью преобразования Фурье. Мы же, наоборот, воспринимаем каждую из частот по отдельности с помощью рецепторных клеток, после чего всё суммируется мозгом, то есть сложная волна создаётся в рамках его действий.
Что касается видео, то тут понятно. Причём скорость реакции наших органов зрения очень велика, гораздо быстрее, чем скорость обработки изображений. Поэтому быстрое смещение луча у нас сливается в световую линию. В серии материалов по основам цифрового видео я предлагал провести свой опыт для тех, кто хоть немного знаком с Adobe Flash. Но, кстати, точно такое же можно сделать в любом видеоредакторе. Цель - определение скорости реакции на частоту смены кадров. На самом деле всё очень просто и займет около десяти минут. Берёте редактор, формируете последовательность из трёх однотонных кадров - красного, синего и зеленого. Запускаете воспроизведение. При малом значении fps (frame per second - количество кадров в секунду) вы ясно разделяете три сменяющихся цвета, а при его увеличении всё сливается в белый. Именно на таком принципе собирались делать первое цветное кино, внедрять цветное же телевещание, а сейчас используют в DLP-проекторах с цветным колесом. А принцип - интегральные свойства мозга. Впрочем, он используется и на более простом уровне - кино и видео с их сменой статических кадров.
Старый эксперимент с образами.
Продолжение
Впрочем, как старый... Ваш покорный слуга проделал его несколько лет назад и описал в "КВ". Суть заключалась в следующем. Были составлены некие математические модели букв, вернее, математические модели их написания, так, чтобы можно было отличать. Изначально планировалось, что сами буквы будут показываться на карточках в видеокамеру, а программа их будет угадывать. Естественно, на первом этапе всё хотелось упростить, поэтому в качестве основы использовалось не видео, а просто бинарные изображения. Программа сравнивала загруженный символ со своей базой моделей и выбирала наиболее подходящую, исходя из полученного процентного соотношения, высчитываемого по множеству критериев.
Естественно, я не ставил перед собой задачу написания алгоритма распознавания текста, интересовало другое - образы. После успешной откатки на разных шрифтах, разных углах наклона и поворота и т.п. полученной модели в качестве бинарных изображений стали даваться обычные объекты-примитивы, а именно - геометрические фигуры, тривиальные предметы всё в том же бинарном графическом виде. Задачей программы являлось определение, вернее, ответ на вопрос: на что это похоже? То есть, увидев ёлку, программа выдавала: "Она похожа на букву А" и так далее.
После откатки этой программы на файлах с бинарными изображениями переход на обработку видеоизображений оказался непроблематичным. Правда, пришлось повозиться с оптимизацией, потому как на первоначальных этапах основным критерием к алгоритмам была их надёжность, то есть, выдача правильного результата в различных условиях, но не скорость выдачи результата. Оптимизация выражалась не только в работе над самим алгоритмом, но и в расчёте оптимальной частоты обрабатываемых кадров. Сразу скажу, что пришлось повозиться, поэтому стал следующий вопрос...
Опыт. Допустим, я уже показал программе треугольник, получил ответ, что он похож на букву А. Потом я показываю эту же картинку ещё раз и... вычисления выполняются заново. А может ли программа выдавать результат практически сразу, если занесёт результаты в свой собственный опыт так, как это делает человек? Сохранять изображения для того, чтобы потом производить сравнения, бессмысленно. Это точно так же, как хранить базу данных со значением синусов для разных углов, вместо того, чтобы применять формулу. К тому же, для сравнения нужен конкретный блок анализа - ещё один дополнительный алгоритм и много памяти для хранения изображений.
Решение нашлось достаточно просто. Когда изображение обрабатывается и соотносится с математическими моделями букв, то у каждого из промежуточных критериев появляется определённое значение коэффициента, а уже потом в сумме мы получаем необходимый процент соответствия. Так вот, эти коэффициенты можно использовать для базы опыта. То есть, из них стала составляться определённая база. Причем, например, та же картинка с треугольником была показана при разных наклонах, с небольшим изменением проекций, то есть в каждом из случаев мы получали всё новые и новые объекты опыта, загружаемые в базу, и при аппроксимировании точности эксперимент стал удаваться, то есть некоторые результаты стали выводиться при сравнении с базой.
Очень многие сейчас отметили, что данный метод неэффективен. Потому как вычисления схожести просто происходят быстрее, чем вычисления схожести плюс сравнение с базой. Именно поэтому данную идею часто отметают. И тут стоит опять напомнить, что основная задача экспериментов - научить компьютер работать с образами. Выбранная модель плюс коэффициенты - базис для новой математической модели. Немного непонятно? Компьютер определил, что треугольник похож на букву А с определенными погрешностями. Причём последние явно определены в базе коэффициентов. А если компьютер задаст вопрос о том, что в действительности он определил? Вы вводите слово "треугольник" и всё! Новая математическая модель для определения готова. Мало того, когда анализировались коэффициенты погрешностей (точнее, соответствия) для различных фигур, то выяснилось, что и между ними (значениями этих коэффициентов) есть определенная математическая зависимость, которую можно заменить формулой. Таким образом, эффективная система накопления опыта была всё-таки создана на самом примитивном уровне.
Итак, эксперимент полностью завершён, в результате чего, помимо основной задачи, была реализована и примитивная самообучающаяся система по распознаванию образов.
Конечно, если брать в учёт то, как развивается человек, начиная с младенчества, то всё понимание происходит от примитивов, тех же геометрических фигур и 3D-объектов. А поскольку мы изначально взяли другой старт, то опыт с буквами можно считать логически завершённым. И даже выведем определение:
Образ - это объект восприятия, основная его структурная единица.
Компьютеру подвластно образно-ассоциативное мышление, которое есть у человека, правда, ему нужно научиться суммировать, смотреть на всё объектно. В том виде, который предоставляется системами ИИ, различными программными и программно-аппаратными комплексами сейчас, машинный разум не сможет отличить дерево от столба или от дома неподалеку. Также, говоря об образах, стоит учитывать необходимость абстрагирования, потому как объектом может считаться как кирпич, так и кирпичный дом.
В дальнейшем я развил эту программу до уровня распознавания текста, что вошло в рамки следующего эксперимента.
Семантика
Семантика - это понимание значений слов, их сочетаний, выражений, предложений, абзацев и так далее. В нашем случае всё достаточно понятно. В машинном - не совсем. Самый яркий пример - языки программирования. Для англоязычного сообщества многие из них вообще не вызывают сложности в изучении, потому как базируются на основе обычного языка. Когда вы говорите фразу: "Если А равно В, то С равно 10", в коде пишется практически то же самое с учётом синтаксиса. То есть тут всё предельно понятно.
Но... очень часто в обсуждении проблем ИИ и даже во множестве книг по этому вопросу можно встретить, на мой взгляд, ошибку. А именно: там не проводится граница между машиной (архитектурой, исполняющей действия), которая, по существу, понимает только двоичный код, и ИИ, который является не чем иным, как программой. Да, можно вспомнить замечательный пример с китайской комнатой, но всё равно, так или иначе человек общается с ПО. Задачей последнего является: понимать и вырабатывать решения, исполнять задуманное. Другой вопрос состоит в том, чтобы машина понимала человека не на уровне специфического языка запросов, а более расширенно и в контексте. Например, слово "ели". С одной стороны, это глагол "есть" во множественном числе в прошедшем времени, с другой - существительное "ель" во множественном числе. Кстати, в русском языке таких "забав" для программ переводчиков существует масса. "Мы сели под ели и ели" :). В дальнейшем под "машиной" мы будем понимать комплекс из ПО и аппаратной части.
В любом языке логика предложений подразумевает наличие подлежащего и сказуемого, то же самое есть и в тех же языках программирования и скриптах. Последние можно писать самостоятельно в варианте интерпретации чего угодно. Например, без особого труда можно создать программу, которая сможет выполнять действия при буквальном написании на русском: "Произнеси букву А", "Скажи слово "абориген". Внутренняя структура перевода подразумевает переход на стандартные команды, при этом отличает тип "буква" от типа "слово", а после "предложение" и "текст". Вариант озвучивания производится благодаря алгоритму TTS (text-to-speech - текст в речь), что и было успешно внедрено. Мало того, в рамках программы, описанной в предыдущем разделе, стало возможно читать текст с обычного листа бумаги. Причем не важно, фотографировался он либо снимался на видеокамеру. То есть, текст читал компьютер, и этим сейчас никого не удивишь.
После пришло время применению и STT (speech-to-text - речь в текст), то есть задания можно произносить голосом. Осмысливала ли свои действия программа? По крайней мере, она понимала, что от неё хотят. При этом были предусмотрены варианты того же угадывания простых образов на более человечном уровне - программа могла сказать: "Не могу разобрать", "Наверное, это...", "Больше всего это напоминает...". Естественно, внутри всё было просто результатом в процентах, но разве человек ведёт себя не так же?
Причём у нас есть одна специфика мышления, которая подразумевает попытки объяснения необъяснимого через понятные вещи и ассоциации. Достаточно вспомнить знаменитое лицо на Марсе (скала, которая чем-то напоминает лицо). Если в базе компьютера будут находиться данные о строении человеческого лица, то он проведёт те же ассоциации.
В общем, дальше для экспериментов открылась целая область, в рамках которой исследуются интегральные свойства ИИ. Например, мы, читая текст, как минимум, оперируем словами либо, говоря иначе, образами или объектами восприятия.
На сегодняшний момент тестируется модуль устной постановки простейших математических задач. Например: "Построй прямоугольный треугольник с катетами три сантиметра и четыре сантиметра. Чему будет равна гипотенуза?". То есть задание дается буквально и в голосовом режиме, в рамках искусственной семантики предусматривается определенная предметная область - математическая, поэтому, например, слово "три" ассоциируется не с глаголом от "трение", а с числительным. При этом в дальнейшем рассчитывается взять две другие предметные области (шахматы и экономика), причём машина должна будет автоматически определять, к какой из них соотносить своё восприятие. Например, в озвученном предложении она может понять, что речь идёт о математике благодаря наличию слов "треугольник", "прямоугольный треугольник", "катет", "сантиметр", "гипотенуза". То есть, сначала ей нужно проанализировать текст на уровне нескольких предложений, а после приступить к выполнению задачи.
В завершение
Как видите, ИИ можно наводнить чем угодно, и на самом деле он способен воспринимать образы и ассоциировать их с уже имеющейся базой знаний. Единственное, что может вызывать трудности в реализации, это определение трёхмерных объектов (нужен лазерный сканер или система лазерных сканеров), а также, что гораздо важнее, понимание материальности окружаемого. То есть, мы отличаем картонную коробку от деревянного ящика, даже если у них идентичные форма и размеры, но как это объяснить машине? Идеи, конечно, есть (хотя бы тем же звуком, у каждого материала своя специфика поглощения), но нужно ли объяснять?
Кстати, когда предполагалась возможность создания алгоритмов по распознаванию рукописного текста, ваш покорный слуга использовал для понимания принципов одну известную программу, думаю, догадываетесь какую. Первое, что я сделал, это взял медицинскую карточку (сами знаете, как пишут врачи). Небольшой эксперимент показал, что это расшифровке практически не поддается и на программном уровне. Также я нашел фотографию с рукописной страницы В. И. Ленина (раньше целые книги такие выходили из фотографий рукописных страниц). Результаты оказались чуть лучше, чем у врачей.
А, в общем и целом, если бы я рассказал вам обо всех произведённых действиях в рамках наших экспериментов с точки зрения научной терминологии ИИ, то вы бы встретились со всеми основными понятиями, лежащими в базисе этой дисциплины.
Кристофер,
christopher@tut.by
Горячие темы