Этическое программирование
Напомню, в данном случае нарушен Первый закон:
Робот не может причинить вред человеку или своим бездействием допустить, чтобы человеку был причинён вред.
Пешеход выскочил на дорогу в неположенном и слабоосвещённом месте, не оставив машине шанса на торможение. В то же время возможность манёвра в сторону вполне имела место, однако ни автопилот, ни водитель-испытатель за рулём не предприняли никаких действий. Или не успели предпринять. Видео аварии опубликовано (слабонервным не смотреть).
Бесспорно, этой трагедии можно было избежать. Беспилотник должен быть оборудован более точными и умными сенсорами, умеющими видеть в темноте. Скорость автомобиля стоит снизить в таких условиях. Однако к каким бы техническим ухищрениям не прибегали инженеры, невозможно на 100% исключить ситуацию, когда самоуправляемый автомобиль физически не может избежать столкновения, влекущего жертвы или тяжёлые травмы. Техника должна в доли секунды оценить потенциальный вред всем участникам инцидента – пешеходам, пассажирам, как своим так и других авто, имуществу – и принять решение. Причём решение несёт за собой моральную ответственность, точно так же, как нёс бы её человек-водитель, будь он на месте автопилота.
В этой связи обычно вспоминают известную ещё с 1960-х годов проблему вагонетки, не раз писали о ней и на Голосе. Если вкратце, то это мысленный эксперимент, в котором сторонний наблюдатель поставлен перед сложным выбором: допустить гибель пяти привязанных к рельсам человек, на которых несётся неуправляемая вагонетка, или предотвратить это, направив вагонетку на другой путь, где, впрочем, тоже привязан человек, но один.
Помимо того, что здесь на чаше весов пять жизней против одной, наблюдатель сталкивается с дилеммой действия/бездействия. Ведь если вмешаться в происходящее и переключить стрелку, то получится целенаправленное убийство, хоть и во избежание большего количества жертв. Если не вмешиваться, то этот поступок может быть истолкован как преступное бездействие.
Придумано множество вариаций данной проблемы: с другой конфигурацией путей, с ещё одной вагонеткой, с наличием толстого человека, которого можно скинуть на рельсы, остановив его телом вагонетку.
Существует и аналогия без вагонеток: про пятеро умирающих пациентов больницы, срочно нуждающихся в пересадке органов, и хирурга, который видит здорового молодого человека, пришедшего на медосмотр. Идеальный кандидат на донорство, только он об этом и не подозревает. По сути та же дилемма, пять жизней против одной, но на этот раз с элементами преднамеренного убийства.
Есть мнение, что не нужно тратить силы на обсуждение таких надуманных сценариев, а лучше заняться делом: создать наиточнейшие датчики, смоделировать все возможные нестандартные ситуации на дороге, добиться максимальной безопасности. Согласен, надо действовать в этом рациональном русле.
Но всё же, вы мне как программисту объясните, что делать, если такой сценарий всё-таки случится? Не важно по какой причине – тормоза вдруг отказали, грязь от соседней машины попала на датчики, машину занесло, самоубийца спрыгнул с моста, террорист нарочно создал препятствие. Или элементарно произошла программная ошибка, которую не проворонили на этапе тестирования. Да как угодно – делать то мне что? Не обрабатывать эту ситуацию я не могу, иначе сам же буду крайним при первой аварии. Ко мне придут и спросят: а почему это ваша умная машина никак не среагировала? И накажут по всей строгости закона. И, в общем-то, правильно сделают. Человека-водителя в таких обстоятельствах можно понять: у него доли секунды на принятие решения, и он человек, в конце концов. У вас же – производителей – вагон времени и возможностей, должны были всё предвидеть.
За свою карьеру я насмотрелся всякого кода, написанного разными программистами. Не раз встречал нечто похожее:
try {
...
}
catch (Exception) {
print("Это никогда не произойдёт");
}
Внутри блока try
может быть что угодно, любая программа. А в блоке catch
мы обычно обрабатываем Exception
, то есть исключительную ситуацию, ошибку. Данный пример явно написан уверенным в себе программистом. Он протестировал все возможные сценарии – и ошибка действительно не происходит. До поры до времени. Пока системой не станут пользоваться люди.
Так или иначе, разработчики беспилотников должны обработать щекотливый сценарий: перед автомобилем оказалось неожиданное препятствие. Расстояние до него и текущая скорость не позволяют остановиться. Модуль распознавания объектов говорит: с вероятностью 70% это человек, 25% – два человека один за другим, 5% – крупное животное. Справа толстое дерево, слева встречный автомобиль (сколько в нём людей – неизвестно). Внутри пассажир, вероятность его выживания в случае столкновения с деревом – 15%, с препятствием на дороге – 80%, с другим автомобилем – 5%. Аналогично просчитано для остальных участников инцидента.
Как видите, вся логика построена на цифрах, причём на неточных цифрах. Это не дилемма с вагонеткой, где есть всего два чётких варианта. И в этих расчётах не хватает главной составляющей: ценности человеческой жизни. Как её определить на языке математики? Будет ли она одинаковой для пассажира и пешехода?
Возвращаясь к уже надоевшей всем вагонетке, вспомните свою первую реакцию. Что бы вы выбрали: спасти пятерых или одного? А если бы на основном пути лежало не 5, а 20 человек? Наверное сомнений было бы меньше. А если бы, наоборот, 3 или 2? У каждого будет свой ответ. В теории можно провести глобальный опрос и вывести среднюю величину. Но правильно ли здесь опираться на усреднённое общественное мнение?
Я думаю, любому разработчику хотелось бы снять с себя ответственность за принятие таких решений. Обычный подход в таких случаях: дать возможность пользователю самому настроить поведение программы. Пусть будет некий коэффициент приоритета жизни пассажира перед пешеходом (или наоборот). Пусть этот приоритет задаётся законом или производителем авто, а ещё лучше самим пассажиром. То есть задаётся заранее, взвешенно и обдуманно. А уж программисты используют этот коэффициент как надо. При этом формула расчётов должна быть общедоступной.
Если пофантазировать ещё на эту тему, то я как пешеход, переходя дорогу, хотел бы понимать, с кем имею дело. Во-первых, сразу понять, кто управляет в данный момент авто. Во-вторых, если это автопилот, то насколько он толерантен к окружающим. Пусть машинки будут окрашены в разные цвета в зависимости от степени эгоизма :)
Кому-то описанная проблема покажется надуманной. Сейчас в тренде обсуждать, как защитить человечество от сильного ИИ, который в скором будущем наверняка изобретут. Давайте оставим абстрактные разговоры о будущем и сосредоточимся на тех угрозах, которые возникают уже сейчас. Этот пост – лишь попытка представить, куда может пойти опасная технология, когда ей предстоит интегрироваться в общество. А также защитить разработчиков, которых наверняка будут обвинять во всех бедах.
Источники картинок: