Boss приехал первым, команда Стэнфорда заняла второе место спустя 20 минут. «Малыш Бен» финишировал не на призовом месте, команды Корнелла и МТИ финишировали, не уложившись в шестичасовой регламент гонки. Стало очевидно, что в разработке робототехнических транспортных средств лидируют Питтсбург и Пало-Альто.
Подход пенсильванской команды разительно отличался от тактики команды Стэнфорда или Университета Карнеги – Меллона. Он основывался на знаниях. Команда пыталась создать машину, которая бы смогла решать, что делать на дороге, опираясь на запрограммированный «опыт». И такой подход был одним из двух основных в разработке ИИ. Гоночная команда Университета им. Бена Франклина опиралась на подход общего ИИ. Он не сработал.
«Малыш Бен» старался «увидеть» препятствия глазами человека. За распознавание объектов отвечал LIDAR, лазерный радар, установленный на крыше. Затем «мозг» идентифицировал объект, основываясь на критериях: форма, цвет и размер. Следом, используя метод древа принятия решений, предстояло выбрать, что делать: замедлиться, если это живое существо вроде человека или собаки, или, если это живое существо – птица, то можно продолжить движение, поскольку она, скорее всего, улетит. «Малышу Бену» нужно было хранить огромное количество информации об объектах реального мира. Например, о дорожном конусе. В стоячем положении их легко различать по треугольной форме и квадратной основе. Обычно они не больше метра высотой. Мы можем написать примерное правило:
identify object:
IF object.color = orange AND object.shape = triangular_with_square_base
THEN object = traffic_cone;
IF object.identifier = traffic_cone
THEN intitiate_avoid_sequence
Но что если дорожный конус лежит на боку? Я живу на Манхэттене и вижу, как их постоянно задевают. Я видела, как улицы перекрывают конусами и как люди выходят из машины, переставляют конус и едут дальше. Значит, правило нужно немного поправить. Попробуем вот это:
identify object:
ЕСЛИ object.color = orange И object.shape is like triangular_with_square_base.rotated_in_3D
ТОГДА object = traffic_cone;
ЕСЛИ object.identifier = traffic_cone
ТОГДА intitiate_avoid_sequence
А вот здесь мы сталкиваемся с разницей между человеческим мышлением и алгоритмами. Наш мозг может представить, как в пространстве вращается конус. Вы можете представить в своей голове конус, когда я о нем говорю. И, если я попрошу вас представить «перевернутый конус», вы наверняка справитесь и даже сможете представить, как он вращается. Разработчики тоже владеют пространственным мышлением и успешно справляются с этой задачей. Есть один занятный математический тест: детям показывают нарисованную трехмерную фигуру, затем демонстрируют картинки других фигур и просят выбрать, на какой из них изображена та же фигура, только в другом ракурсе.
У компьютера нет воображения. Поэтому, чтобы просто «повернуть объект», ему требуется произвести рендеринг трехмерной модели или – в крайнем случае – построить векторную карту. И программисту приходится писать код с учетом трехмерного пространства. Но – не в пример человеческому мозгу – компьютер неплохо справляется с угадыванием. Объект либо находится в списке известных ему, либо нет.
Когда я сидела за рулем «Малыша Бена», он делал две вещи: ездил кругами и не справился с объездом препятствия. Когда прошел шок, я начала размышлять, почему он не смог объехать препятствие. Это был столб. «Малышу Бену» нужно было правило вроде «if obstacle.exists_in_path and obstacle.type=stationary, obstacle.avoid». Однако, видимо, правило не сработало, поскольку не все объекты остались статичными. Человек может появиться, постоять немного и двинуться дальше. Тогда правило выглядело бы так: «if obstacle.exists_in_path and obstacle.type = stationary, AND obstacle.is_not_person, avoid». Но и это бы тоже не сработало: теперь нужно пояснить, чем человек отличается от колонны, и, значит, мы вернулись к проблеме классификации объектов. Если колонну можно распознать как таковую, тогда нужно написать правило отдельно для людей, отдельно для колонн. Однако мы не знаем, действительно ли там колонна, пока не увидим ее или хотя бы не распознаем объект, – поэтому я чуть не умерла в машине, которая чуть не столкнулась с огромным столбом.
Разум – вот ключевая проблема. А поскольку не существует способа запрограммировать теорию мышления, машина никогда сможет реагировать на препятствия так же, как человек. Компьютер «знает» только то, что ему «сказали». Без