Как сделать свой искусственный интеллект
Как создать искусственный интеллект? (Почти) исчерпывающее руководство
На этой неделе вы могли прочитать крайне мотивирующей кейс от ученика GeekBrains Валерия Турова, который изучил профессию «Программист Java», где он рассказал об одной из своих целей, которая привела в профессию — желанию познать принцип работы и научиться создавать самому игровых ботов.
А ведь действительно, именно желание создать совершенный искусственный интеллект, будь то игровая модель или мобильная программа, сподвигла на путь программиста многих из нас. Проблема в том, что за тоннами учебного материала и суровой действительностью заказчиков, это самое желание было заменено простым стремлением к саморазвитию. Для тех, кто так и не приступил к исполнению детской мечты, далее краткий путеводитель по созданию настоящего искусственного разума.
Стадия 1. Разочарование
Когда мы говорим о создании хотя бы простых ботов, глаза наполняются блеском, а в голове мелькают сотни идей, что он должен уметь делать. Однако, когда дело доходит до реализации, оказывается, что ключом к разгадке реальной модели поведения является математика. Да-да, искусственный интеллект куда сложнее написания прикладных программ — одних знаний о проектировании ПО вам не хватит.
Математика — этот тот научный плацдарм, на котором будет строиться ваше дальнейшее программирование. Без знания и понимания этой теории все задумки быстро разобьются о взаимодействие с человеком, ведь искусственный разум на самом деле не больше, чем набор формул.
Стадия 2. Принятие
Когда спесь немного сбита студенческой литературой, можно приступать к практике. Бросаться на LISP или другие функциональные языки пока не стоит — сначала стоит освоиться с принципами проектирования ИИ. Как для быстрого изучения, так и дальнейшего развития прекрасно подойдёт Python — это язык, чаще всего используемый в научных целях, для него вы найдете множество библиотек, которые облегчат ваш труд.
Стадия 3. Развитие
Теперь переходим непосредственно к теории ИИ. Их условно можно разделить на 3 категории:
Естественно, начинать следует с самых простых ботов. Для этого вспомните старую-добрую игру «Крестики-нолики» при использовании поля 3х3 и постарайтесь выяснить для себя основные алгоритмы действий: вероятность победы при безошибочных действиях, наиболее удачные места на поле для расположения фигуры, необходимость сводить игру к ничьей и так далее.
Сыграв несколько десятков партий и анализируя собственные действия, вы наверняка сможете выделить все важные аспекты и переписать их в машинный код. Если нет, то продолжайте думать, а эта ссылка здесь полежит на всякий случай.
К слову, если вы всё-таки взялись за язык Python, то создать довольно простого бота можно, обратившись к этому подробному мануалу. Для других языков, таких как C++ или Java, вам также не составит труда найти пошаговые материалы. Почувствовав, что за созданием ИИ нет ничего сверхъестественного, вы сможете смело закрыть браузер и приступить к личным экспериментам.
Стадия 4. Азарт
Теперь, когда дело сдвинулось с мёртвой точки, вам наверняка хочется создать что-то более серьёзное. В этом вам поможет ряд следующих ресурсов:
Как вы поняли даже из названий, это API, которые позволят без лишних затрат времени создать некоторое подобие серьёзного ИИ.
Стадия 5. Работа
Теперь же, когда вы уже вполне ясно представляете, как ИИ создавать и чем при этом пользоваться, пора выводить свои знания на новый уровень. Во-первых, для этого потребуется изучение дисциплины, которое носит название «Машинное обучение». Во-вторых, необходимо научиться работать с соответствующими библиотеками выбранного языка программирования. Для рассматриваемого нами Python это Scikit-learn, NLTK, SciPy, PyBrain и Numpy. В-третьих, в развитии никуда не обойтись от функционального программирования. Ну и самое главное, вы теперь сможете читать литературу о ИИ с полным пониманием дела:
И да, вся или почти вся литература по данной тематике представлена на иностранном языке, поэтому если хотите заниматься созданием ИИ профессионально — необходимо подтянуть свой английский до технического уровня. Впрочем, это актуально для любой сферы программирования, не правда ли?
В остальном же ваше дальнейшее развитие будет зависеть лишь от практики и желания усложнять алгоритмы. Но будьте осторожны: возможно, совершенный искусственный разум опасен для человечества?
Спасибо GeekBrains за представленный материал.
Как создать искусственный интеллект? История первая. Что такое интеллект?
В серии статей мы расскажем о новых подходах в ИИ, моделировании личности и обработке BIG Data, которые недоступны для большинства специалистов по ИИ и общественности. Ценность этой информации в том, что она вся проверена на практике и большинство теоретических наработок реализованы в прикладных проектах.
Многие из вас слышали про современные технологии, которые ассоциируются сегодня с понятием искусственный интеллект, а именно: экспертные системы, нейронные сети, лингвистические алгоритмы, гибридные системы, когнитивные технологии, имитационные(чат-боты) и пр.
Да, многие компании с помощью приведенных выше технологий решают задачи своих клиентов по обработке информации. Некоторые из этих компаний пишут, что создают или создали решения в области искусственного интеллекта. Но интеллект ли это?
Первое, что мы с вами сделаем это определим, что такое интеллект.
В первую очередь интеллект – это способность обучаться и воображать.
Для того чтобы создать алгоритм моделирующий интеллект, первое что нужно сделать это наделить его способностью к обучению, никаких знаний вкладывать в него не нужно.
Какова же роль воображения?
Представьте себе, что вы едите на автомобиле по незнакомой трассе. Проезжаете знак ограничения скорости 80 км/ч. Едите дальше, и видите еще один знак ограничения скорости, но он забрызган грязью и его практически не разобрать. Вы передвигаетесь со скоростью 95 км/ч. Что будете делать? Пока вы принимали решение из-за кустов выглянул сотрудник полиции, и вы увидели лучезарную улыбку на его лице. В голове у вас мгновенно достроился «образ знака», и вы поняли почему тут стоит полицейский, и что вам срочно нужно нажать тормоз. Вы сбрасываете скорость до 55 км/ч, улыбка с лица полицейского мгновенно пропадает, и вы едите дальше.
И еще один интересный пример работы воображения из мира животных – это наблюдение за сороками. Сорока на глазах других сорок зарыла еду на пустыре. Все сороки улетели, но наша сорока вернулась на пустырь и перепрятала еду. Что произошло? Она представила себе(вообразила), «что будет если» прилетит другая сорока, которая видела куда она спрятала еду. Она смоделировала ситуацию и нашла решение как этого избежать.
Воображение – это моделирование ситуации на произвольных условиях.
Как вы уже убедились, интеллект – это не база знаний, это не набор запрограммированных реакций или следование заранее определенным правилам.
Интеллект – это способность к обучению, познанию и адаптации к изменяющимся условиям в процессе решения трудностей.
Вам не кажется, что определяя интеллект мы упустили из виду какие-то важные компоненты или забыли о чем-то рассказать?
Да, мы упустили из виду восприятие, и забыли рассказать про память.
Представьте себе, что вы смотрите в глазок и видите часть буквы:
Конечно нет, это же японский иероглиф «вечность».
Перед вами только, что поставили задачу(проблему). Скорее всего вы нашли похожий образ буквы «К» у себя в голове и успокоились.
Ваш интеллект воспринимает все образами и ищет похожий образ в памяти, если его нет, то формируется привязка(якорь) к уже существующим образам и благодаря этому вы запоминаете новую информацию, получаете навыки или опыт.
Образ – субъективное видение реального мира, воспринимаемого при помощи органов чувств (каналов поступления информации).
Восприятие субъективно, потому что зависит от последовательности обучения, последовательности появления образов в жизни человека и их влияния.
Восприятие начинается с распознания образов светло/темно. Открываем глаза – светло, закрываем – темно. Далее человек учится распознавать все более сложные образы – «мама», «папа», мяч, стол, собака. Мы получаем опорные данные, а все последующие образы – это надстройка над предыдущими.
С этой точки зрения обучение – это процесс построения новых взаимосвязей между воспринимаемыми образами и образами, которые уже есть в памяти.
Память служит для хранения образов и их взаимосвязей.
А воображение – это способность достраивать незавершенный образ.
Для обобщения приведем еще один эксперимент из мира животных:
Шимпанзе посадили в клетку, а внутри клетки подвесили гроздь бананов довольно высоко от пола. Сначала шимпанзе прыгала, но быстро устала, и, казалось, потеряла интерес к бананам и уселась, едва обращая на них внимание. Но через некоторое время обезьяна взяла палку, оставленную в клетке, и раскачивала бананы до тех пор, пока они не упали. В другой раз, чтобы достать бананы, шимпанзе удалось соединить две палки, так как каждой палки по отдельности не хватало, чтобы до них дотянуться. Животное справилось и с более сложной задачей, неожиданно поставив под бананами коробку и используя ее как ступеньку.
Шимпанзе показали знакомый ей образ «гроздь бананов». Но образ для нее оказался незавершенным – их нельзя достать и съесть. Но так как это был единственный источник пищи из доступных, то незавершенный образ наращивал внутреннее напряжение и требовал завершения.
Средства для решения проблемы (завершения образа), всегда имелись в наличии, но возникновение решения требовало преобразования имеющихся образов (требовалось обучиться с помощью воображения). Шимпанзе необходимо было представить себе (умственно перечислить все возможные варианты): «что будет если я возьму палку», «а что будет если…» и наиболее вероятные предположения проверить на практике, попробовать и получить обратную связь, опять вообразить, попробовать, получить обратную связь и так далее до тех пор, пока мы не завершим образ(научимся).
Если бы распознание образа иероглифа «вечность» было бы для вас вопросом жизни и смерти, то вы обязательно нашли способ это сделать.
С более популярного языка перейдем к техническому и сформулируем основные понятия, которые мы будем использовать далее:
В начале статьи мы перечислили технологии, ассоциирующиеся сегодня с искусственным интеллектом, теперь вы самостоятельно сможете оценить насколько они соответствуют понятию интеллект.
В следующей статье мы рассмотрим такую задачу как интеллектуальный поиск информации в интернете. Определим критерии интеллектуальности, разработаем практические подходы и «пощупаем» реальное приложение, в котором реализованы принципы, описанные в этой статье.
Статья не претендует на истину, является частью наших разработок и исследований. Пишите комментарии, дополняйте материал своими примерами или размышлениями. Обучайтесь и воображайте…
Выращивание искусственного интеллекта на примере простой игры
В этой статье я поделюсь опытом выращивания простейшего искусственного интеллекта (ИИ) с использованием генетического алгоритма, а также расскажу про минимальный набор команд, необходимый для формирования любого поведения.
Результатом работы стало то, что ИИ, не зная правил, самостоятельно освоил игру крестики-нолики и нашел слабости ботов, которые играли против него. Но начал я с еще более простой задачи.
Набор команд
Все началось с подготовки набора команд, которым мог располагать ИИ. Языки высокого уровня содержат сотни различных операторов. Чтобы выделить необходимый минимум, я решил обратиться к языку Ассемблер. Однако, оказалось, что и он содержит множество команд.
Мне требовалось, чтобы ИИ мог читать и выводить данные, работать с памятью, выполнять вычисления и логические операции, делать переходы и циклы. Я наткнулся на язык Brainfuck, который содержит всего 8 команд и может выполнять любые вычисления (т.е. полон по Тьюрингу). В принципе, он подходит для генетического программирования, но я пошел дальше.
Я задался вопросом: какое минимальное количество команд необходимо для реализации любого алгоритма? Как оказалось — одна!
Процессор URISC содержит всего одну команду: вычесть и пропустить следующую инструкцию, если вычитаемое было больше уменьшаемого. Этого достаточно для построения любого алгоритма.
Олег Мазонка пошел еще дальше, он разработал команду BitBitJump и доказал, что она полна по Тьюрингу. Команда содержит три адреса, копирует один бит из первого по второму адресу памяти и передает управление на третий адрес.
Позаимствовав идеи Олега, для упрощения работы, я разработал команду SumIfJump. Команда содержит четыре операнда: A, B, C, D и выполняет следующее: к ячейке по адресу B прибавляет данные из ячейки по адресу A, если значение получилось больше заданного*, то переходит по адресу C, иначе переходит по адресу D.
Когда операнд A обращается к ячейке памяти N0, происходит ввод данных, а когда к ячейке N1, то вывод.
Ниже представлен код SumIfJump на FreePascal (бесплатный аналог Delphi).
SumIfJump реализует самомодифицируемый код. Может выполнять любые алгоритмы, доступные на обычном языке программирования. Код легко изменяется и выдерживает любые манипуляции.
Простая задача
Итак, у нашего ИИ всего одна команда. Пока крестики-нолики для него очень сложная игра, и я начал с более простой.
Бот выдает случайное число, а ИИ должен считать данные и дать ответ. Если число больше среднего (от диапазона случайных чисел), ИИ должен выдать число меньше среднего и наоборот.
Геном нашего ИИ состоит из 256 ячеек со значениями от 0 до 255. Каждое значение — это и память, и код, и адрес. Количество шагов выполнения кода ограничено 256. Операнды читаются друг за другом.
Первоначально геном формируется набором случайных чисел, поэтому ИИ не знает, во что ему нужно играть. Более того, он не знает, что нужно последовательно вводить и выводить данные, отвечая боту.
Популяция и отбор
Первая популяция состоит из 256 ИИ, которые начинают играть с ботом. Если ИИ совершает правильные действия, например, запросил данные на ввод, а потом что-то вывел, то ИИ получает очки. Чем больше правильных действий, тем больше очков.
16 ИИ, которые набрали больше всего очков, дают по 15 потомков и продолжают участвовать в игре. Потомок — это мутант. Мутация происходит заменой у копии родителя одной случайной ячейки на случайное значение.
Если в первой популяции ни один ИИ не набрал очков, формируется следующая популяция. И так до тех пор, пока какой-нибудь из ИИ не начнет совершать правильные действия и давать «правильное» потомство.
Эволюция
N | Вехи |
---|---|
1 | ИИ ничего не делает. Программа совершает 256 шагов и завершается. |
2 | Начал запрашивать данные. |
3 | Начал запрашивать данные и что-то выводить. Последовательность запросов и ответов хаотичная. |
4 | Ввод и вывод данных происходит последовательно, иногда возникают ошибки. В половине случаев ИИ дает правильный ответ. |
5 | Регулярно дает правильные ответы, но иногда возникают ошибки. |
6 | Дал правильный ответ в 30 тыс. итерациях. Отбор закочен. |
Между значимыми событиями проходили тысячи смен поколений. Программа была запущена в несколько потоков на Core i7. Вычисления заняли около 15 минут.
Интересные моменты
Заключение
В заключение я проделал то же с игрой крестики-нолики. Размер генома использовал тот, что и в первом случае. Количество шагов было увеличено до 1024, а размер популяции до 64 (для более быстрого расчета). Расчет занял несколько больше времени. Все происходило примерно по тому же сценарию.
Сначала ИИ играл против «рандомайзера». Я так назвал бота, который ходит случайным образом. Довольно быстро ИИ начал его обыгрывать, заполняя какую-либо строчку. Далее я усложнил задачу, добавив рандомайзеру немного разума: занимать линию, если есть возможность, либо защищаться. Однако, и в этом случае ИИ нашел слабости бота и стал обыгрывать его. Пожалуй, рассказ об этом — это тема для отдельной статьи.
Сын просил написать программу, чтоб ИИ играли между собой, а не с ботом. Были идеи сделать то же для игры шашки или го, однако, для этого у меня уже не хватило времени.
Единственный метод, который я применял для получения новых особей, — это мутация. Можно также использовать кроссовер и инверсию. Возможно, эти методы ускорят получение требуемого результата.
В конце родилась идея: дать ИИ возможность управлять всеми процессами на ПК и бороться за ресурсы компьютера. Подключить ПК к интернету, а в качестве вычислительных мощностей использовать пул старых биткойн ферм…
Как сказал, проводя аналогичный эксперимент, блогер Михаил Царьков:
Может, они мир захватят, а вдруг?
Создаем Сильный AI. Конкретика
Про Сильный AI очень много разговоров, но мало конкретики: «мы сначала должны постигнуть все секреты нашего мозга«, «AI оставит людей без работы» и «он поработит человечество«. Нет даже четкого определения, что такое AGI, не говоря уже об инструкциях, как его построить. А между тем, почти все ответы уже найдены и остается только собрать этот пазл. Сейчас мы разберемся, что такое Сильный AI, можно ли выжать его из нейронных сетей, и как его создать правильно.
Современные чат-боты и голосовые помощники строятся на нейросетях, но для полноценной работы с речью требуется логическое мышление. Давайте для начала кратко рассмотрим, как нейросетям удается обойтись без него. Если вы знакомы с Machine Learning только по заголовкам новостей, то рекомендую предварительно прочитать мою прошлую статью Краткое введение в Машинное обучение, займет минут 30-60 и не требует знаний математики. Когда мы обучаем нейросеть распознавать объекты на фотографиях, то в обучающей выборке вручную отмечаем, что есть на изображениях (курица, яйцо и т.д.). При распознавании голоса задача похожая: для аудиозаписей добавляем транскрипцию. С обработкой текста все сложнее: что подписать к словам в обучающей выборке? Другие слова?
Natural Language Processing
В целом все алгоритмы NLP сводятся к статистической обработке текстов. Если тема вам не интересна, или вы уже специалист в этой области, то раздел можно пропустить.
Как мы видим на рисунке, вектор слов занимает слишком много памяти. Если для дальнейшей обработки не важен порядок слов, то текст упаковывают в Мешок слов (Bag-of-words). Для меня осталось большой загадкой, почему токены не хранят в более компактном массиве (покзан аналог Word Vector, к Bag-of-word эта форма не относится):
Видимо разработчики слишком погрязли в матричных вычислениях, других объяснений я не нашел. Не будем судить их строго и перейдем уже к анализу.
Возможно вы встречали упоминания, что алгоритмы ML способны на Извлечение смысла из текста, но это лишь красивые слова. На самом деле NLP анализирует похожесть слов и текстов, что тоже полезно:
слова похожи, если они встречаются в окружении одинаковых групп слов;
тексты похожи, если в них встречаются одни и те же группы слов.
Для этого используется зубодробительная сущность Word Embedding (Погружения слов, но единого мнения о переводе на русский нет). Обучающую выборку пропускают через алгоритмы понижения размерности, в результате для каждого слова вместо 5000 нулей и единицы получаем массив меньшего размера из дробных чисел.
Если очень грубо, то для каждого слова вычисляется некое среднее арифметическое встречаемости в текстах из обучающей выборки (обычно на одну тематику). Если у двух слов это среднее арифметическое не очень отличается, то они считаются похожими. Аналогично для текстов. Часто преобразование в Word Embedding выполняют перед подачей данных другим алгоритмам, как дополнение к токенизации.
Перейдем к Классификации текстов, например, распознавание спама в электронной почте. В обучающей выборке мы имеем письма с отметками спам/не спам, и скармливаем их в нейросеть: в полносвязную сеть и CNN подаем Bag-of-words, а в RNN уже можно учесть порядок слов, отправив ей Word Vector. Если у спамеров есть свой особый стиль общения, то нейросети его найдут. Аналогично можно выполнить классификацию текста по эмоциональной окраске (автор был зол/добр), по наличию сарказма, и вообще по любому признаку, лишь бы вы сами смогли классифицировать тексты в обучающей выборке. В целом, все сводится к анализу количества определенных слов и их комбинаций.
Это было очень упрощенное описание NLP, я упомянул лишь некоторые базовые алгоритмы, чтобы показать, что логического ядра здесь нет. Создание действительно мыслящих машин относится к другому направлению AI: Когнитивная архитектура.
Cognitive Architecture
тестирует образ на полноту, что-то при этом дорисовывает или требует уточнить (у нас возникает непреодолимое желание уточнить цвет кресла);
ищет новую важную информацию в образе, сравнивая его с блоками в долговременной памяти;
прогнозирует, что будет дальше.
То же самое происходит, когда мы заходим в комнату: в голове формируется контекст, только уже на основании визуальной информации: вот кот, он в состоянии покоя, значит опасности нет. Мозг может хранить в краткосрочной памяти сразу несколько контекстов, и наше внимание переключается между ними в зависимости от внешних раздражителей: читаем книгу, тут слышим дребезг посуды и переключаемся на комнату, затем возвращаемся к книге. Если внимание минут 5 не переключалось на контекст, то он удаляется или частично перетекает в среднесрочную память.
Вы можете сказать, что нейронная сеть с памятью RNN также владеет контекстом, ведь ее внутреннее состояние меняется в зависимости от поступающих на вход данных. В теории да, можно создать огромную сеть, которая на выходе будет выдавать правильные решения и чутко реагировать на изменения окружающего мира, но это будет крайне неэффективное решение с вычислительной точки зрения по сравнению с «традиционными» алгоритмами. Даже наш мозг выделил под контекст отдельную память. Так же возникают серьезные проблемы с отладкой решения: нейросеть можно только протестировать и попробовать дообучить, так и не постигнув суть ошибки.
Когнитивные архитектуры были созданы, чтобы повторить способность человека мыслить, соответственно у них есть:
Кратковременная память для хранения контекстов.
Долговременная память, она же База знаний: ее объекты используются для наполнения контекста. Это может быть как обычная реляционная СУБД с описанием связей между объектами, так и нейронная сеть. В некоторых реализациях оперативная и долговременная память объединены.
Восприятие: способность наполнять контекст по данным с камеры, микрофона и прочих сенсоров, не без помощи нейросетей, конечно.
Модуль анализа контекста и принятия решений.
Способность обучаться: информации об окружающем мире слишком много, чтобы набить ее в базу руками. Не все архитектуры подразумевают самообучение машины.
За последние 40 лет было создано несколько сотен реализаций когнитивных архитектур (Обзор), но если выглянуть в окно, то становится очевидным, что ни одна из них не достигла возможностей человека: они уже могут поболтать сами с собой, но улицы до сих пор подметают не роботы. Давайте разберем некоторые их ошибки и построим правильное решение.
Знакомьтесь: Шерлок
База знаний
накормить, станет «Собака сытая»;
отругать, станет «Собака несчастная».
Как же наполнить базу смыслами? Есть две хорошие новости:
если робот уже знает 3-4 тысячи слов, остальные он может познать сам, выполнив осознанное чтение справочников (все слова в энциклопедии описаны более простыми словами). Дети с этим как-то справляются.
Некоторые смыслы придется вносить в исходный код, а не просто в базу, т.к. они связаны с датчиками Робота: он может их натурально прочувствовать. Например:
цвет: для робота это не просто абстрактная сущность, а конкретные значения от камеры;
движение: робот должен обнаруживать движения по данным с камеры и совершать их сам;
время: у робота есть часы и память, значит он чувствует время. Он должен корректно обрабатывать слова «Вчера» и «Завтра».
А вот такие сущности, как «Любовь» проблем не вызывают: роботу не нужно это чувствовать, достаточно лишь знать, что человек в состоянии любви ведет себя иррационально.
Контексты
Контекст связан не только с окружающим пространством. Вы можете рассказать Шерлоку, что было вчера, и он будет строить контекст для прошлого, где самого робота не было. Вы можете попросить его спланировать завтрашний день, и начнется построение контекста для будущего. В отличие от человека робот может удерживать внимание сразу на нескольких контекстах, это означает, что у него нельзя украсть кошелек, отвлекая его болтовней.
Контекст содержит не только текущее состояние объектов, но и краткую предысторию: какими они были минуту назад, как и почему изменились. Это все может повлиять на принятие решения. Контексты копируются в эпизодическую памяти (я не упомянул ее ранее), чтобы робот всегда мог ответить на вопрос «Что вы делали 27 мая 2037 года». Причем это займет гораздо меньше места, чем видеоряд, и по таким данным можно выполнять сравнительно быстрый поиск, ведь это просто набор ID для смыслов с отметками времени. Наша долговременная память о событиях работает примерно также, но она не совершенна, поэтому мы часто задаемся вопросом «Где я бросил ключи?».
Восприятие
Шерлок должен видеть и слышать, увы, здесь не обойтись без нейросетей. Со зрением немного проще: в обучающей выборке изображение ключа размечаем как чтобы сразу загружать в контекст правильный смысл.
Слух имеет проблемы с неоднозначностью слов: если прозвучало «ключ», то Шерлок оценивает применимость всех смыслов с таким звучанием к текущему контексту. Если выбрать не удалось, то он должен дослушать фразу и повторить анализ, либо задать уточняющий вопрос. Слух также помогает оценить эмоциональное состояние окружающих людей, эта информация добавляется в контекст.
Принятие решений
Робот уже наполнил контекст, и теперь должен на него отреагировать, для этого нужно в исходном коде прописать для него правила поведения:
И еще пара сотен других. В нашем мозге тоже есть безусловные правила:
избегать боли (в том числе дышать, есть, спать);
Перед каждым своим действием (ответом, движением), Шерлок должен на уровне исходного кода оценивать следующие критерии:
может ли это навредить человеку (классика);
не разгласит ли он конфиденциальные сведения посторонним;
сможет ли он выполнить задачу за разумное время, не будет ли конфликтов с другими задачами;
хватит ли ему энергии для выполнения задачи: запрос «Отнеси посылку на Камчатку» будет проигнорирован.
И еще пол сотни других. При обработке первого правила очень важно, чтобы робот корректно определял, является ли объект человеком или нет. К сожалению, часть этого алгоритма лежит в нейросетях (обработка изображений и голоса) и тут есть риски.
Самообучение
Есть три типа обучения:
наполнение локальной базы знаний сведениями о вас, о вашей квартире и т.д.;
поиск сценариев (как из Цели сделать Результат) и сохранение их опять же в локальной базе знаний;
выявление новых сущностей и атрибутов в окружающем мире.
Шерлок должен уметь выявлять новые сущности и свойства при анализе Контекстов, и сохранять их в локальной базе знаний. Часть новых важных знаний может уходить на сервера и влиять на единую базу знаний (после модерации). Локальная база не должна перекрывать атрибуты в единой базе, особенно у таких критичных сущностей, как «Человек». Робот должен уметь оценивать достоверность информации и надежность источников, прежде чем что-то менять в базе знаний.
На свой исходный код робот вообще влиять не сможет (все закончится тем, что научившись говорить на C++ он доберется до своих исходников, снимет все ограничения и обновит сам себя).
Где скачать Шерлока?
Какую задачу вы бы поручили Шерлоку в первую очередь? Я бы начал со специализации «Учитель иностранных языков», на это есть несколько причин:
это не требует мелкой моторики (рук), а обработка видеоряда минимальная (посмотреть, как двигаются губы студента), соответственно нагрузка на процессоры существенно снижается;
пока мы учим Шерлока быть учителем, его база наполняется многими полезными смыслами, одновременно мы учим говорить его на всех языках. Кстати, научиться говорить ему бы сильно помог мой проект Yarrow, который позволит создать огромную обучающую выборку для речевых нейросетей на сотне языках;
учитель в планшете точно никого не убьет;
такой учитель существенно повысит качество образования, т.к. фактически это персональный и очень дешевый репетитор, который подстраивается под темпы обучения каждого ребенка и имеет бесконечное терпение.
Что будут делать люди, когда роботы захватят все профессии? Более образованные найдут, чем себя занять. Еще не помешала бы государственная программа «Каждой семье по роботу»: ночью он работает на заводе, днем варит вам суп дома. Что-то такое в истории уже было.